Welcome to Styx’s documentation!¶
The styx
software emulation suite exists to provide a viable, easy to use
emulation platform for non-standard architectures. Current approaches cobble
together tooling from mainstream architectures and hand rolled application-specific
implementations that differ wildly from emulator to emulator.
styx
seeks to change the status quo of turning software emulation of DSP,
embedded and non-standard processors from a research task into a much simpler
software engineering task.
What is styx
¶
styx
is a monolithic rust project built in a workspace and is intended to be
consumed as a library. Styx packages many in-tree processor, peripheral, and device
implementations that anyone can use to create their own new processor definition, or
a machine definition that packages multiple processors together in a heterogeneous
system-of-systems emulation to create a real digital twin.
The goal is to have a demo template application that you can use to quickly get
off the ground with cargo-generate
.
styx
approaches the problem of emulating a new target as a system emulation
problem instead of just a processor emulation problem, with a decision tree
that any engineer can follow and fill out the checklist to create a fully supported
emulation that the styx
tool suite can instrument, analyze and debug automatically.
The biggest difference is that the targets styx
is intended to emulate often
require many peripherals and external devices emulated properly to run let alone boot.
The styx
approach utilizes the Rust
type-system and metaprogramming capabilities
to create building-block style emulation pieces that can be individually implemented,
tested and verified before integrating into an emulation solution.
Documentation Contents¶
Supported Workflows
User Documentation
- Bindings
- Styx as a Replacement for Unicorn
- Processor Implementation Details
- Unified Configuration (styx-uconf)
- Target Instrumentation (styx-trace)
- Using a Processor
- Adding a Processor
- Using Multiple Processors
- Available Backends
- Adding an Architecture
- Adding a New Architecture (Pcode Backend)
- Adding Test Binaries
- Migration to New Versions of Styx
API Documentation + Coverage
Styx Extensions
Developer Documentation
- Contribution Tips
- Conventions in Styx
- Repository Tasks (xtask)
- Styx’s use of async rust
- Updating Bindings
- Adding New Hook Types
- Repository Layout
- Benchmarking
- Integration Tests
- CI Pipeline
- Releases
- Architecture Decision Records (ADR’s)