ZX Spectrum emulator written in Rust

Related tags

Emulators rustzx
Overview

rustzx

logo

ZX Spectrum emulator which I writing in rust. I develop this project just for fun and for learning the basics of computer architecture.
Licensed under MIT License.

Watch this video showcase!

Build Status

Features

  • Written in pure rust
  • Cross-platform
  • Documented source
  • Full ZX Spectrum 48K and 128K emulation
  • Perfect emulation of Z80 core
  • Highly precise AY chip emulation with Ayumi library
  • Beeper sound emulation
  • Can handle tap, sna files
  • Fast loading of tap files with standard loader
  • Emulates border
  • Kempston joystick emulation
  • Correct contentons

Download [v0.9.2]

Packages are available in github releases.
Note: On linux platforms sdl2 library must be installed

Compiling

Before compiling make shure that sdl2 and its dev libs are installed.
For additional information about sdl2 click here

Then just install it with cargo (~/.cargo/bin must be in your PATH)

cargo install

For advenced info use --help flag

How to use

Here some examples of usage:

rustzx --help
rustzx --fastload --tap test.tap
rustzx -f --128k --AY abc --tap test128.tap
rustzx --rom tester.rom --scale 3 --volume 50

For loading tape in 48K mode, press j then Ctrl+p twice, as on real Spectrum. You must see LOAD "" on emulator's screen. And then press Enter. If you --fastload option before launching, game will be launched, in other case press Insert to insert tape. Delete can be used for ejecting tape from tape reader. --128k flag launches emulator in 128K mode. For loading tape just press Enter.

If you have some audio troubles - use --latency flag with bigger samples count.

Use keys F3 - F5 to set speed of emulation - this can be usefull when skipping some boring stuff. Use F6 to display FPS in window title.

Screenshots


Log

Watch LOG for details and github issues for current plans and help requests.

References

Of course, I used many resources to find out, how to build my first emulator in life. So there is a list of useful references, from where I dig most information about Z80, ULA and other ZX Spectrum hardware parts:

ROM's

Emulator contains ROM's, created by by Sinclair Research Ltd (now owned by Amstrad plc), Amstrad was given permissions for distributing their ROM's with emulators, so they are included in source of emulator (mod zx::roms). More about this read here

Comments
  • Should it run on OpenGL 2.0?

    Should it run on OpenGL 2.0?

    I've just tried running rustzx on ARM, using soft mesa opengl, but it failed to start:

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: CompilationError("0:1(10): error: GLSL 1.40 is not supported. Supported versions are: 1.10, and 1.20\n")', src/libcore/result.rs:785
    

    Probably means the default OpenGL 3.3 is required again? I wonder if you could switch to polydraw once it's ready, as it's going to support many different GL/ES backends.

    type/enhancement 
    opened by MagaTailor 17
  • Panic trying to run external .tzx/.z80

    Panic trying to run external .tzx/.z80

    On ARM Linux, I'm unable to run any downloaded roms:

    $ RUST_BACKTRACE=1 ./rustzx --rom ../../Some_Rom.tzx
    
    thread 'main' panicked at 'index 42629 out of range for slice of length 16384', src/libcore/slice.rs:549
    stack backtrace:
       1: 0xb6f7cc23 - std::sys::backtrace::tracing::imp::write::hf504bc08f2a3011f
       2: 0xb6f80b7b - std::panicking::default_hook::_{{closure}}::h49b28af2d05b6140
       3: 0xb6f7f30b - std::panicking::default_hook::hf5d79ad4f1ead81e
       4: 0xb6f7fa67 - std::panicking::rust_panic_with_hook::h9a3925e37821d434
       5: 0xb6f7f8e3 - std::panicking::begin_panic::h240b4915cec4a07c
       6: 0xb6f7f85f - std::panicking::begin_panic_fmt::hcfb5c8e1936587e5
       7: 0xb6f7f7ef - rust_begin_unwind
       8: 0xb6f8de7b - core::panicking::panic_fmt::h92d7d79877c10aae
       9: 0xb6f8df53 - core::slice::slice_index_len_fail::h0ead1e2e3326bfc4
      10: 0xb6e4ad5f - core::slice::_<impl core..ops..IndexMut<core..ops..Range<usize>> for [T]>::index_mut::h31ebe17e01f75d06
                    at /rust/rust-master/src/libcore/slice.rs:683
      11: 0xb6e4a1d7 - core::slice::_<impl core..ops..IndexMut<core..ops..RangeTo<usize>> for [T]>::index_mut::h771fe2e82fcced80
                    at /rust/rust-master/src/libcore/slice.rs:705
      12: 0xb6e7171f - rustzx::zx::memory::ZXMemory::load_rom::h9d6c49208f6daf5e
                    at /home/odroid/rustzx/src/zx/memory.rs:142
      13: 0xb6e72497 - rustzx::zx::controller::ZXController::load_rom::h46185b805a5fc1f0
                    at /home/odroid/rustzx/src/zx/controller.rs:120
      14: 0xb6e7fc2f - rustzx::emulator::Emulator::new::h4ae3c17883f6b238
                    at /home/odroid/rustzx/src/emulator/mod.rs:28
      15: 0xb6e7b35f - rustzx::app::rustzx::RustzxApp::from_config::h298f9aba9b39d55e
                    at /home/odroid/rustzx/src/app/rustzx.rs:60
      16: 0xb6e826df - rustzx::main::h6b31a6d2189678aa
                    at /home/odroid/rustzx/src/main.rs:54
      17: 0xb6f7f717 - std::panicking::try::call::h8e1d2d9d7dca0745
      18: 0xb6f8875f - __rust_try
    19: 0xb6f8860f - __rust_maybe_catch_panic
      20: 0xb6f7e8af - std::rt::lang_start::h30b674bef4ff14e2
      21: 0xb6e851a3 - main
      22: 0xb6c0b66f - __libc_start_main
    

    Compiled with rustc 1.12.0-dev (34f35ed29 2016-07-17)

    type/enhancement 
    opened by MagaTailor 14
  • v1.0 Tracking issue

    v1.0 Tracking issue

    • [x] Drag n drop
    • [ ] Palette configuration
    • [ ] Config files
    • [ ] Tape autoloading
    • [ ] Fast save/load
    • [ ] App icon with sdl
    • [ ] Keys bindings
    • [ ] Controller support
    • [ ] More snapshot formats
    opened by pacmancoder 6
  • ZX Spectrum 128K implementetion progress tracking

    ZX Spectrum 128K implementetion progress tracking

    Work on 128K implementation was started in develop branch

    • [x] Memory
    • [x] Screen validation on bank switch
    • [x] Check contentions
    • [x] Loading custom 128K ROM
    • [x] Window size option
    • [x] AY flag
    • [x] Mixing Beeper and AY
    • [x] Joysticks
    opened by pacmancoder 5
  • libjack related link error

    libjack related link error

    During the final link on an ARM Linux system, I'm getting this error even though I've got libjack installed:

    note: ../rustzx/target/release/deps/libportaudio-cf78f0b5104b5853.rlib(pa_jack.o): In function `BuildDeviceList':
    pa_jack.c:(.text+0x844): undefined reference to `jack_client_name_size'
    pa_jack.c:(.text+0x868): undefined reference to `jack_client_name_size'
    pa_jack.c:(.text+0x89c): undefined reference to `jack_get_ports'
    pa_jack.c:(.text+0x9f4): undefined reference to `jack_client_name_size'
    pa_jack.c:(.text+0xc0c): undefined reference to `jack_get_sample_rate'
    pa_jack.c:(.text+0xe00): undefined reference to `jack_get_ports'
    pa_jack.c:(.text+0xe58): undefined reference to `jack_port_by_name'
    pa_jack.c:(.text+0xe64): undefined reference to `jack_port_get_latency'
    pa_jack.c:(.text+0xef8): undefined reference to `jack_get_ports'
    pa_jack.c:(.text+0xf50): undefined reference to `jack_port_by_name'
    pa_jack.c:(.text+0xf5c): undefined reference to `jack_port_get_latency'
    

    and so on. What are the required dependencies again? (static versions?)

    opened by MagaTailor 5
  • Implement dropping files to main window (drag-n-drop)

    Implement dropping files to main window (drag-n-drop)

    Added drag-n-drop functionality for files (from #29). Currently only tap and sna are supported:

    • Dropping .tap file inserts it as current tape (without starting or autoloading, the same as --tap command line argument)
    • Dropping .sna file loads snapshot immediately

    Currently, there's no visual indication if drop is successful or failed (for tap it's invisible, as it just inserts tape).

    File format is currently detected only by extension (case-insensitive).

    Paths with malformed unicode are not supported: SDL returns filename as String.

    Added directory with files for tests, currently it's accessed via CARGO_MANIFEST_DIR, there are other approaches, like env::current_exe, but there's no standard idiomatic approach. Currently there's only one tap file.

    This branch is based on update-sdl branch (#33), as older SDL does not work on my machine.

    opened by kolen 4
  • Update sdl2 to 0.32.2

    Update sdl2 to 0.32.2

    I couldn't built sdl2's dependency rustc-serialize on my machine, it fails with following error

    error[E0642]: patterns aren't allowed in methods without bodies
       --> /Users/kolen/.cargo/registry/src/github.com-1ecc6299db9ec823/rustc-serialize-0.3.19/src/serialize.rs:147:45
        |
    147 |                                             &f_name: &str,
        |                                             ^^^^^^^
    ...
    error: aborting due to previous error
    
    For more information about this error, try `rustc --explain E0642`.
    error: Could not compile `rustc-serialize`.
    

    So I updated sdl2 to latest version.

    It had breaking changes, especially after 0.30, when Renderer was split into Canvas and TextureCreator. Also, now Texture has lifetime parameter, but it's not possible to store both TextureCreator and Textures into the same struct, because they're self-referencing. Because of this, sdl2 now has unsafe_textures feature, which is, AFAIK, similar to behavior before 0.30, and it's probably safe to use it as long as textures are not deallocated manually, and looks like rustzx does not deallocate textures prematurely.

    However, I'm not sure about regressions, as there are lots of changes in sdl2. For me, it runs very slowly in debug version (in release it's ok). Probably I should first build with first working version of sdl2 and compare.

    opened by kolen 4
  • Make release CI workflow

    Make release CI workflow

    Make CI workflow for releasing new rustzx versions, so new versions could be released more easily. Workflow requirements:

    • Create github releases page with change log and artifacts (use CHANGELOG.md and artifacts produced on the previous steps)
    • Publish all rustzx crates to crates.io (last step)
    • If possible, make draft release for dev branch and promote same release to non-draft when tag is pushed
    • Perform dry run of cargo publish in dev branch
    • If easy to implement, detect changes in crates and fail if forgot to raise version (check in dev branch)

    Checklist

    • [x] Check that pending version is bigger than already released
    • [x] Check all publish = true crates version consistency
    • [x] Check that git available
    • [x] Check that user specified all required data (GitHub token, crates.io token, artifacts folder)
    • [x] Check that artifacts folder is not empty
    • [x] check that current commit (git call) exist in remote (via octocrab)
    • [x] check that changelog was updated
    • [ ] Add version bump functionality
    • [x] crates are pushed
    • [x] crates pushed in right order (via guppy)
    • [x] create tag from commit (via octocrab GitHub API)
    • [x] create github release
    • [x] Implement --dry-run
    type/infrastructure 
    opened by pacmancoder 3
  • thread 'main' panicked at 'attempt to add with overflow' tap.rs:68:13 -m128 - loading tape

    thread 'main' panicked at 'attempt to add with overflow' tap.rs:68:13 -m128 - loading tape

    Behavior: Load Wonderful Dizzy .tap, rutzx fails with error after displaying load-screen:

    thread 'main' panicked at 'attempt to add with overflow', C:\projects\rustzx\rustzx-core\src\emulator\fastload\tap.rs:68:13
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    error: process didn't exit successfully: `target\debug\rustzx.exe -m128 --tape .\dizzy.tap` (exit code: 101)
    

    Tap: https://yolkfolk.com/wonderful-dizzy/

    Command:

    cargo run --bin rustzx -- -m128 --tape .\dizzy.tap
    

    Environment: Windows 10 21H1, rustc 1.56.0-nightly (ae90dcf02 2021-08-09)

    type/bug crate/rustzx-core 
    opened by georgik 3
  • Remove deprecated

    Remove deprecated "time" crate

    Removed time crate, which is deprecated, replaced time::precise_time_ns with standard library's std::time::Instant.

    I'm not sure if it worsened "smoothness" of emulation. It feels the same after this change. I'm not sure that std::time::Instant is as precise as time::precise_time_ns on most systems. However, it all boils down to thread::sleep, which can't be very precise, I think, due to nature of schedulers in standard non-realtime OSes, so nanosecond-grade precision for time measurements is probably not as important.

    To get feeling how std::time::Instant works, I ran the following script:

    use std::time::Instant;
    
    fn main() {
        let mut t = Instant::now();
        loop {
            println!("{:?}", t.elapsed());
            t = Instant::now();
        }
    }
    

    It outputs something like this:

    73ns
    41ns
    41ns
    75ns
    42ns
    42ns
    76ns
    43ns
    41ns
    74ns
    44ns
    44ns
    75ns
    41ns
    42ns
    77ns
    41ns
    41ns
    

    So probably quite precise on my system (Mac OS). Not tested on Linux and Windows.

    opened by kolen 3
  • called `Option::unwrap()` on a `None` value - Event::KeyUp

    called `Option::unwrap()` on a `None` value - Event::KeyUp

    • version from master branch (dd40dc4)
    • Mac OS 10.13.6

    It crashes after starting and typing few characters (probably even after first keypress)

    thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:345:21
    stack backtrace:
       0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
                 at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:39
       1: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:70
       2: std::panicking::default_hook::{{closure}}
                 at src/libstd/sys_common/backtrace.rs:58
                 at src/libstd/panicking.rs:200
       3: std::panicking::default_hook
                 at src/libstd/panicking.rs:215
       4: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
                 at src/libstd/panicking.rs:478
       5: std::panicking::continue_panic_fmt
                 at src/libstd/panicking.rs:385
       6: std::panicking::try::do_call
                 at src/libstd/panicking.rs:312
       7: core::char::methods::<impl char>::escape_debug
                 at src/libcore/panicking.rs:85
       8: core::char::methods::<impl char>::escape_debug
                 at src/libcore/panicking.rs:49
       9: sdl2::keyboard::Mod::from_bits
                 at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/src/libcore/macros.rs:10
      10: sdl2::event::WindowEventId::from_ll
                 at /Users/kolen/.cargo/registry/src/github.com-1ecc6299db9ec823/sdl2-0.21.0/src/sdl2/event.rs:811
      11: sdl2::event::poll_event
                 at /Users/kolen/.cargo/registry/src/github.com-1ecc6299db9ec823/sdl2-0.21.0/src/sdl2/event.rs:1173
      12: <alloc::borrow::Cow<'a, str> as alloc::string::ToString>::to_string
                 at /Users/kolen/.cargo/registry/src/github.com-1ecc6299db9ec823/sdl2-0.21.0/src/sdl2/event.rs:1219
      13: <rustzx::app::events::events_sdl::EventsSdl as rustzx::app::events::EventDevice>::pop_event
                 at src/app/events/events_sdl.rs:113
      14: rustzx::app::rustzx::RustzxApp::start
                 at src/app/rustzx.rs:109
      15: rustzx::main
                 at src/main.rs:54
      16: std::rt::lang_start::{{closure}}
                 at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/src/libstd/rt.rs:64
      17: std::panicking::try::do_call
                 at src/libstd/rt.rs:49
                 at src/libstd/panicking.rs:297
      18: panic_unwind::dwarf::eh::read_encoded_pointer
                 at src/libpanic_unwind/lib.rs:92
      19: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
                 at src/libstd/panicking.rs:276
                 at src/libstd/panic.rs:388
                 at src/libstd/rt.rs:48
      20: std::rt::lang_start
                 at /rustc/2aa4c46cfdd726e97360c2734835aa3515e8c858/src/libstd/rt.rs:64
      21: rustzx::main
    

    Unwrap occurs in sdl2/event.rs in sdl2 crate.

                        keymod: keyboard::Mod::from_bits(event.keysym._mod as SDL_Keymod).unwrap(),
    

    It does not occur in branch with latest version of sdl2. Probably fixed by this PR in sdl2: https://github.com/Rust-SDL2/rust-sdl2/pull/780

    opened by kolen 3
  • Documentation for fn decimate(x: &mut [f64]) -> f64

    Documentation for fn decimate(x: &mut [f64]) -> f64

    Hello,

    I'd like to use your AYM emulation for my own Apple2 emulator. I've read your code but there's that function "decimate" which, I think, is there to help the downsampling, which has lots of hardcoded floats. Would you be care to explain what the function exactly do and how the floats were computed ? Thanks!

    opened by wiz21b 3
  • Optimize emulator core

    Optimize emulator core

    The initial implementation of RustZX core has been implemented with minimal optimizations, and as esp32 rustzx port demonstrated there is a lot to improve in the emulator core (by the way, big shout-out to @georgik and @ivmarkov for their work on esp32 port of this project πŸŽ‰ ! Running this thing on something like esp32 was the actual purpose of rustzx-core no-std capable crate separation).

    This is an epic for tracking all optimizations which should be done to achieve emulation speeds competitive with C implementations of ZX Spectrum emulators

    TODO:

    • [ ] Optimize screen processing - it easily eats up to half of emulation time
    type/epic 
    opened by pacmancoder 0
  • Dev/v1.0.0

    Dev/v1.0.0

    rustzx v1.0.0 development branch scope:

    Main epics

    • [ ] #93

    Features

    • [ ] #110
    • [ ] #111

    Bugfixes

    • [ ] #112
    • [ ] #119

    Dependencies

    • [x] pacmancoder/rustzx#121
    [zube]: backlog 
    opened by pacmancoder 0
  • Static binaries

    Static binaries

    Produce static binaries for:

    • [ ] Windows (Link with static runtime libraries)
      • Implementation tip: set target-feature=+crt-static rustc flag during compilation
    • [ ] Linux
      • Implementation tips:
        • Use x86_64-unknown-linux-musl target
        • Check that binary is statically linked via ldd
    type/enhancement crate/rustzx 
    opened by pacmancoder 0
Releases(v0.15.0)
  • v0.15.0(Oct 17, 2021)

    • [Feature] Added new cpal sound backend (#101)
    • [Feature] Added support for .gz-compressed assets (#109)
    • [Feature] Added support for non-standard Kempston joy buttons in rustzx-core (#113)
    • [Fix] Fixed bug with integer overflow panic in tape loader (#100)
    • [Testing] Added integration tests for rustzx-core (#92)
    • [Refactoring] Removed cyclic dependencies between `rustzx-core` and `rustzx-utils`(#99)
    Source code(tar.gz)
    Source code(zip)
    rustzx-bin-linux-amd64.zip(3.30 MB)
    rustzx-bin-macos-amd64.zip(1.82 MB)
    rustzx-bin-windows-amd64.zip(1.51 MB)
  • v0.14.0(Sep 1, 2021)

  • v0.13.0(May 24, 2021)

  • v0.12.0(May 16, 2021)

    RustZX v0.12

    • [Feature] Now using rust-only AY sound chip library (aym) instead of libayumi C library
    • [Feature] Added vtx sound format parsing/playback library vtx
    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(May 15, 2021)

    Changes:

    • [Feature] Separated project to rustzx application and no_std-capable rustzx-core crate
    • [Feature] Updated CLI
      • More features now enabled by default
      • File autodetect from CLI
      • Added configurable sound sample rate
      • Removed redundant args
    • [Dependencies] Switched to bundled sdl crate mode, making build almost dependecy-free (CMake and C compiller are still requird)
    • [Infrastructure] Moved CI to Github Actions
      • Added rustfmt step to CI
      • Added clippy step to CI
    • [Refactroing] Performed deep global refactoring of the project
      • Updated to Rust 2018 edition
      • Updated dependencies
      • Fixed all clippy errors
      • Minimized rustzx-core public interface
      • Added feature gates for resource-hungry rustzx-core features
      • Eliminated a lot of not redundant code
      • Made groundwork for a future emulator features

    Contributors:

    • Vladyslav Nikonov (@pacmancoder)
    Source code(tar.gz)
    Source code(zip)
  • v0.9.2(Jul 19, 2016)

    So, here is the second release of rustzx ZX Spectrum emulator!

    New features

    • ZX Spectrum 128K emulation
    • AY chip emulation
    • SDL migration
    • Kempston joystick emulation on keyboard (Arrow keys + Alt)

    Distributions

    • Win32 i686
      • Compiled with MinGW
      • SDL.dll provided in archive
    • Linux x86_64 tar
      • sdl2 must be installed
    • Source
      • Watch how to compile in README.md
      • sdl2 and its dev libs must be installed
    Source code(tar.gz)
    Source code(zip)
    linux_x86_64.tar.gz(589.33 KB)
    win32_i686_mingw.7z(1.01 MB)
  • v0.7.1(Jun 27, 2016)

    I proud to present my first public release of rustzx - ZX Spectrum 48K emulator. I worked on it about 5 months. This project is made just for fun, the main goal of my project is learn how to program in rust and nothing more serious :smile_cat:

    What it already can do?

    • All Z80 instructions, including undocumented are implemented.
    • rustzx ULA implementation have border effects, floating bus, correct contention timings
    • Beeper sound using PortAudio
    • tap and sna files loading
    • it can use custom ROM
    • it written in 100% rust :smile: Also, using cargo-deb I made deb package for amd64. You can try to build it with yourself if you have another system or architecture using simple cargo build command
    Source code(tar.gz)
    Source code(zip)
    rustzx_0.7.1_amd64.deb(632.84 KB)
Owner
Vladislav Nikonov
I love tea.
Vladislav Nikonov
Site frequency spectrum estimation based on window expectation-maximisation algorithm

winsfs winsfs is a tool for inference of the site frequency spectrum ("SFS"). Quickstart Assuming SAF files have already been made, default estimation

Malthe Sebro Rasmussen 8 Nov 1, 2022
Nes-emulator - A NES emulator made to learn the Rust programming language

nes-emulator Building $ rustc --version rustc 1.32.0 (9fda7c223 2019-01-16) $ cargo --version cargo 1.32.0 (8610973aa 2019-01-02) $ cargo build --rel

Michael Burge 225 Dec 23, 2022
NES emulator written in Rust to learn Rust

OxideNES A NES emulator in Rust. CPU should be accurate, PPU is mostly accurate, timing between the 2 is off for some corner cases and hardware qui

null 37 Nov 7, 2022
Chip8 emulator written in pure rust, using rust-sdl2 for graphics

Rust-8 chip8 emulator written in rust, using rust-sdl2 for graphics. Features Fully implemented all 35 original chip8 opcodes. This emulator does NOT

Chris Hinson 7 Dec 28, 2022
Commodore 64 emulator written in Rust

Rust64 - a C64 emulator written in Rust This is my attempt to study the Rust programming language and have fun at the same time. The goal is to presen

Krzysztof Kondrak 214 Dec 27, 2022
A Flash Player emulator written in Rust

website | demo | nightly builds | wiki Ruffle Ruffle is an Adobe Flash Player emulator written in the Rust programming language. Ruffle targets both t

Ruffle 11.2k Jan 8, 2023
A Game Boy research project and emulator written in Rust

Mooneye GB Mooneye GB is a Game Boy research project and emulator written in Rust. The main goals of this project are accuracy and documentation. Some

Joonas Javanainen 802 Dec 28, 2022
RustBoyAdvance-NG is a Nintendoβ„’ Game Boy Advance emulator and debugger, written in the rust programming language.

RustBoyAdvance-NG Nintendo GameBoy Advance β„’ emulator and debugger, written in rust. WebAssembly Demo: https://michelhe.github.io/rustboyadvance-ng/ P

MishMish 510 Dec 30, 2022
An NES emulator written in Rust

Pinky Pinky is an NES emulator written in Rust completely from scratch based only on publicly available documentation. You can run it in your Web brow

Koute 709 Dec 23, 2022
NES emulator written in Rust

sprocketnes is an emulator for the Nintendo Entertainment System written in the Rust programming language. Its purpose is to serve as a technology dem

Patrick Walton 725 Dec 27, 2022
CHIP-8 emulator written in Rust

CHIP-8 emulator written in Rust. This is intended to be a project for gaining experience writing emulators and practice Rust.

Pedro Rodrigues 4 May 21, 2021
A 6502 emulator written in Rust.

v6502 This package contains an emulator for the 6502 microprocessor. It doesn't support binary decimal (BCD) mode yet. To run the debug version: cargo

Andrew Young 4 Nov 14, 2021
Spaghetti Chip8 Emulator Written In Rust

How to run? Command is simple: cargo run FILENAME. files are stored in the /c8games folder, use one of them. Example: cargo run INVADERS Keymap use 1

Can 5 Apr 15, 2022
Non cycle-accurate emulator of the 6502 cpu, written in pure rust

CPU 6502 A non cycle-accurate emulator implementing all legal 6502 opcodes. What does non cycle-accurate mean? Every instruction on the 6502 takes a n

Pietro 10 Jul 15, 2022
Experimental Nintendo Switch Emulator written in Rust

Kaminari Experimental Nintendo Switch Emulator written in Rust Usage You'll need to install Rust. rusc >= 1.55.0 rustup >= 1.24.3 Disclaimer Kaminari

SSebigo 4 Dec 7, 2021
A barely functional terminal emulator written in Rust. For nothing but fun.

Nothing much to say now. The basic architecture (kind of) so far is: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ptm │◀──────▢│ device::Shell β”‚ └─┬

Huy 4 Apr 29, 2022
A Chip8 Emulator written in Rust

Chipper: Chipper is a Chip8 Emulator written in Rust. It currently supports a few known quirks of the Chip8 varieties. I intend on making it support t

Elijah Hartvigsen 4 Aug 20, 2022
A CHIP-8 emulator written in Rust

damn8 A CHIP-8 emulator written in Rust To run, pass a path to a rom in the command line. TODO: Use function pointers to handle opcodes instead of a l

null 1 Jan 11, 2022
CHIP-8 emulator written in Rust as a side project.

marisa-rs a CHIP-8 emulator, with learning purposes in mind, written in Rust. this is mainly a learning project of mine for deeper knowledge in emulat

Lumine 0 Jul 26, 2022