RustZX

RustZX Logo

RustZX is a ZX Spectrum emulator written entirely in Rust, providing cross-platform support and highly accurate emulation of the ZX Spectrum 48K and 128K models.

Watch a video showcase of version 0.9.x or read the CHANGELOG.md for the latest updates.

Features

  • Pure Rust Implementation: Ensures maximum compatibility and performance.
  • Cross-Platform Support: Runs on various operating systems.
  • Full Emulation: Supports ZX Spectrum 48K and 128K models.
  • Accurate Emulation: Emulates the Z80 core and AY chip with high precision.
  • Supported Formats: .tap, .sna, and .scr.
  • Fast Loading: Supports fast loading of tape files with the standard loader.
  • Precise Timings: Ensures accurate emulation of system timings.
  • Peripheral Emulation: Supports Kempston and Sinclair joysticks, Kempston mouse, and extended 128K keys.
  • Quick Save/Load: Allows quick save and load states.
  • Compressed Assets Support: Supports .gz compressed assets.
  • No_std Core Library: Can be used to port the emulator almost anywhere, requiring a global allocator.

Installation

  1. Ensure you have a C compiler and CMake to build the bundled sdl2.
  2. (Linux-specific) Install required development packages: libasound2-dev.
  3. Install via Cargo:
    cargo install rustzx

Usage

Run RustZX with various options:

rustzx --help                  # Show help
rustzx test.tap                # Autodetect file type and run in 48K mode
rustzx --ay test.tap           # Run in 48K mode with AY sound chip
rustzx -m128 --tape test128.tap # Run in 128K mode with tape
rustzx --rom tester.rom -s3    # Run with custom ROM and 3x screen scaling
rustzx --nofastload test.tap   # Run without fast tape loading
rustzx --mouse test.tap        # Run with Kempston mouse support

For loading tape in 48K mode, press j then Ctrl+p twice, as on a real Spectrum. You should see LOAD "" on the emulator's screen, then press Enter. In 128K mode, just press Enter. In --nofastload mode, press Insert to play the tape and Delete to stop.

If you have choppy audio, try the --sound-latency option with larger values.

Default Key Bindings

  • F1 - Quick save
  • F2 - Quick load
  • F3 - Set normal emulation speed
  • F4 - Set 2x emulation speed
  • F5 - Max possible emulation speed
  • F6 - Enable frame trace info
  • F9 - Enable Kempston/Sinclair joystick keyboard layer
  • Insert - Start tape
  • Delete - Stop tape
  • End - Break command
  • Caps Lock - Caps lock command
  • Backspace - Delete
  • <Arrows> - 128K arrow keys
  • Esc - Unlock mouse (if --mouse is used)

In Joystick Keyboard Layer Mode (F9)

  • <Arrows> - Kempston joystick arrows
  • Alt - Kempston fire
  • WASD - Sinclair Joy 1 arrows
  • Caps Lock - Sinclair Joy 1 fire
  • IJKL - Sinclair Joy 2 arrows
  • Enter - Sinclair Joy 2 fire

Screenshots

RainQArkanoidSentinel

ROMs

RustZX includes ROMs created by Sinclair Research Ltd (now owned by Amstrad plc), with permission to distribute them in conjunction with emulators. In RustZX, these ROMs are embedded in the core emulator library. You can opt-out of embedded ROMs by disabling the embedded-roms feature.

For more information and to contribute to the project, visit the RustZX repository.

Similar Projects