Commodore 64 emulator written in Rust

Overview

Build Status Build status

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 present in the least obfuscated way how the Commodore 64 works and what's happening behind the scenes once you start a program. Emulation is cycle based and fairly accurate at this point.

The emulator has a built-in visual debugger which lets you view the contents of each memory page in RAM, Color RAM, VIC registers, CIA registers and SID registers. The VIC window is a ICU64-style raster debugger where each pixel represents one VIC cycle and any events occuring at that time.

Major dependencies

Requires Rust 1.5.0 or higher to compile and run.

Youtube demo #1:

Screenshot

Youtube demo #2:

Screenshot

Screenshot:

Screenshot

Build instructions

cargo build
cargo run --release

You can pass a .prg file as a command line parameter to load it into memory once the emulator boots (just type RUN to start the program):

cargo run --release prgs/colors.prg

To run with double-sized window:

cargo run --release x2 prgs/colors.prg

To run with double-sized window and debug windows enabled:

cargo run --release x2 debugger prgs/colors.prg

C64 and special key mappings

ESC     - Run/Stop
END     - Restore
TAB     - Control
LCTRL   - C=
`       - <-
-       - +
INS     - &
HOME    - CLR/Home
BSPACE  - INST/DEL
[       - @
]       - *
DEL     - ^
;       - :
'       - ;
\       - =
F11     - start asm output to console (very slow!)
F12     - reset C64
RCTRL   - joystick fire button
NUMLOCK - toggle between joystick ports 1 and 2 (default: port 2)

In debugger window:
PGUP/PGDWN - flip currently displayed memory page
HOME/END   - switch currently displayed memory banks between RAM, Color RAM, VIC, CIA and SID

TODO

  • serial bus/disk drives (d64, t64, tap)
  • implement remaining undocumented ops
  • switch from SDL2 to cpal for audio once it supports OSX
  • improve SID emulation

Known Issues

  • missing serial bus may cause some very specific programs to perform incorrectly or get stuck in infinite loops
  • elaborate programs that require very precise timing are not running correctly yet

This is an on-off WIP project, so update frequency may vary.

Resources

The following documents and websites have been used to create this emulator:

Special thanks

Comments
  • Linking fails on x86

    Linking fails on x86

    Using nightlies of rustc 1.6.0 and cargo, I'm getting this:

    Compiling rust64 v0.0.1 (file:///home/petevine/rust64-master)
    error: linking with `cc` failed: exit code: 1
    note: "cc" "-Wl,--as-needed" "-m32" "-L" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib" "/home/petevine/rust64-master/target/release/rust64.0.o" "-o" "/home/petevine/rust64-master/target/release/rust64" "-Wl,--gc-sections" "-pie" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/petevine/rust64-master/target/release" "-L" "/home/petevine/rust64-master/target/release/deps" "-L" "/home/petevine/rust64-master/target/release/build/minifb-2aa994e1058bdbef/out" "-L" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib" "-Wl,-Bstatic" "-Wl,-Bdynamic" "/home/petevine/rust64-master/target/release/deps/libsdl2-a33e4f65d83406e9.rlib" "/home/petevine/rust64-master/target/release/deps/libbitflags-d74836c21f733435.rlib" "/home/petevine/rust64-master/target/release/deps/libsdl2_sys-4d48b2804feab331.rlib" "/home/petevine/rust64-master/target/release/deps/libnum-61d250199d58c512.rlib" "/home/petevine/rust64-master/target/release/deps/librustc_serialize-dd25d8ce21e6e6df.rlib" "/home/petevine/rust64-master/target/release/deps/librand-0dfc279509c37449.rlib" "/home/petevine/rust64-master/target/release/deps/liblibc-b5b8c3df079ca7f9.rlib" "/home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib" "/home/petevine/rust64-master/target/release/deps/liblibc-6f18902dd8f75ffb.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/libstd-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/libcollections-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/librustc_unicode-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/librand-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/liballoc-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/liballoc_system-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/liblibc-71b07a99.rlib" "/home/petevine/rust-1.6.0-i686_generic-linux-gnu/lib/rustlib/i686-unknown-linux-gnu/lib/libcore-71b07a99.rlib" "-l" "SDL2" "-l" "SDL2" "-l" "X11" "-l" "c" "-l" "m" "-l" "dl" "-l" "pthread" "-l" "gcc_s" "-l" "c" "-l" "m" "-l" "rt" "-l" "compiler-rt"
    note: /home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib(minifb-2aa994e1058bdbef.0.o): In function `open::hd1d4ea4516f64359Iaa':
    minifb.0.rs:(.text._ZN4open20hd1d4ea4516f64359IaaE+0x8a): undefined reference to `mfb_open'
    /home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib(minifb-2aa994e1058bdbef.0.o): In function `update::hc9bb91620a8d30c8tba':
    minifb.0.rs:(.text._ZN6update20hc9bb91620a8d30c8tbaE+0x18): undefined reference to `mfb_update'
    /home/petevine/rust64-master/target/release/deps/libminifb-2aa994e1058bdbef.rlib(minifb-2aa994e1058bdbef.0.o): In function `close::h59fa405eefe9bc584ba':
    minifb.0.rs:(.text._ZN5close20h59fa405eefe9bc584baE+0xe): undefined reference to `mfb_close'
    collect2: error: ld returned 1 exit status
    
    error: aborting due to previous error
    Could not compile `rust64`.
    
    opened by MagaTailor 15
  • I'd like to help emulate iec and drives

    I'd like to help emulate iec and drives

    I'd like to help emulate iec and disk/tape drives but I'm not sure exactly how you had planned to do it. I've looked through cia.rs, and I see you have iec_lines as a field in there. Does this represent a data byte or clock, data, and atn combined? I also noticed you have $DD00 marked TODO but I need a bit more guidance on how you were thinking of architecting this. I'm a bit of a noob here but thought I'd see if you wanted help and could guide me in the right direction.

    opened by sajattack 6
  • minifb no longer compatible

    minifb no longer compatible

    I guess the function signature must have changed recently. What's the last compatible version?

    Compiling rust64 v0.0.1 (file:///tmp/rust64-master)
    src/c64/mod.rs:52:72: 52:81 error: mismatched types:
     expected `minifb::WindowOptions`,
        found `minifb::Scale`
    (expected struct `minifb::WindowOptions`,
        found enum `minifb::Scale`) [E0308]
    src/c64/mod.rs:52             window: Window::new("Rust64", SCREEN_WIDTH, SCREEN_HEIGHT, Scale::X1).unwrap(),
                                                                                             ^~~~~~~~~
    src/c64/mod.rs:52:72: 52:81 help: run `rustc --explain E0308` to see a detailed explanation
    src/c64/mod.rs:176:29: 176:35 error: this function takes 0 parameters but 1 parameter was supplied [E0061]
    src/c64/mod.rs:176                 self.window.update(&self.vic.borrow_mut().window_buffer);
                                                   ^~~~~~
    src/c64/mod.rs:176:29: 176:35 help: run `rustc --explain E0061` to see a detailed explanation
    src/debugger/mod.rs:37:73: 37:82 error: mismatched types:
     expected `minifb::WindowOptions`,
        found `minifb::Scale`
    (expected struct `minifb::WindowOptions`,
        found enum `minifb::Scale`) [E0308]
    src/debugger/mod.rs:37             debug_window: Window::new("Debug window", DEBUG_W, DEBUG_H, Scale::X2).unwrap(),
                                                                                                   ^~~~~~~~~
    src/debugger/mod.rs:37:73: 37:82 help: run `rustc --explain E0308` to see a detailed explanation
    src/debugger/mod.rs:38:79: 38:88 error: mismatched types:
     expected `minifb::WindowOptions`,
        found `minifb::Scale`
    (expected struct `minifb::WindowOptions`,
        found enum `minifb::Scale`) [E0308]
    src/debugger/mod.rs:38             raster_window: Window::new("VIC", RASTER_DEBUG_W, RASTER_DEBUG_H, Scale::X1).unwrap(),
                                                                                                         ^~~~~~~~~
    src/debugger/mod.rs:38:79: 38:88 help: run `rustc --explain E0308` to see a detailed explanation
    src/debugger/mod.rs:103:31: 103:37 error: this function takes 0 parameters but 1 parameter was supplied [E0061]
    src/debugger/mod.rs:103             self.debug_window.update(&self.window_buffer);
                                                          ^~~~~~
    src/debugger/mod.rs:103:31: 103:37 help: run `rustc --explain E0061` to see a detailed explanation
    src/debugger/mod.rs:107:32: 107:38 error: this function takes 0 parameters but 1 parameter was supplied [E0061]
    src/debugger/mod.rs:107             self.raster_window.update(&self.raster_buffer);
                                                           ^~~~~~
    src/debugger/mod.rs:107:32: 107:38 help: run `rustc --explain E0061` to see a detailed explanation
    error: aborting due to 6 previous errors
    Could not compile `rust64`.
    
    opened by MagaTailor 6
  • Implement Cartridge Loading

    Implement Cartridge Loading

    It's only working with 8K cartridges right now. I'm starting to wonder if there's a problem with the bank switching code. I've tried setting memory.basic_on to false and writing 54 to memory location $0001 and in both cases basic still starts up.

    opened by sajattack 5
  • Panic on running

    Panic on running "Daah, Those Acid Pills!"

    When I run this onefiler demo from Censor Design the SID emulation code throws the following panic after a few seconds:

    thread '<unnamed>' panicked at 'attempt to subtract with overflow', src/c64/sid.rs:635:25
    

    https://github.com/kondrak/rust64/blob/a579a3c646dd295b0ef69339cf027666b63b3d40/src/c64/sid.rs#L635

    • rustc --version: rustc 1.21.0-nightly (a7e0d3a81 2017-08-11)
    • Full backtrace: https://gist.github.com/xTibor/6e70f4df4c83d097c3f6a227a4334638
    • CSDb download: http://csdb.dk/release/?id=118639
    opened by xTibor 4
  • attempted to leave type `c64::sid::SIDAudioDevice` uninitialized, which is invalid

    attempted to leave type `c64::sid::SIDAudioDevice` uninitialized, which is invalid

    $ RUST_BACKTRACE=full cargo run prgs/colors.prg
    
        Finished dev [unoptimized + debuginfo] target(s) in 0.01s
         Running `target/debug/rust64 prgs/colors.prg`
    Read rom/basic.rom: 8192 bytes
    Read rom/chargen.rom: 4096 bytes
    Read rom/kernal.rom: 8192 bytes
    thread 'main' panicked at 'attempted to leave type `c64::sid::SIDAudioDevice` uninitialized, which is invalid', /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/mem/mod.rs:660:9
    stack backtrace:
       0:     0x55cd977fbb20 - std::backtrace_rs::backtrace::libunwind::trace::h4dee703919bfd40a
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
       1:     0x55cd977fbb20 - std::backtrace_rs::backtrace::trace_unsynchronized::h457e839f1a563e20
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x55cd977fbb20 - std::sys_common::backtrace::_print_fmt::h86a55fb30f8393c8
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:67:5
       3:     0x55cd977fbb20 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h7b3d6cac46d277e1
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:46:22
       4:     0x55cd978126ef - core::fmt::write::h127419eb46f2ecc9
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/fmt/mod.rs:1092:17
       5:     0x55cd977fa105 - std::io::Write::write_fmt::h6010cfbb4726588b
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/io/mod.rs:1578:15
       6:     0x55cd977fd66b - std::sys_common::backtrace::_print::h79b4f9652330cc9d
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:49:5
       7:     0x55cd977fd66b - std::sys_common::backtrace::print::h330bb326a76af8cf
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:36:9
       8:     0x55cd977fd66b - std::panicking::default_hook::{{closure}}::heb6a42a7d50a472e
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:208:50
       9:     0x55cd977fd133 - std::panicking::default_hook::h17e521ba6d68d6e1
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:225:9
      10:     0x55cd977fdc1d - std::panicking::rust_panic_with_hook::h70db735e3a6e70cb
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:591:17
      11:     0x55cd977fd7e7 - std::panicking::begin_panic_handler::{{closure}}::h777c71c8e5a7e25c
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:495:13
      12:     0x55cd977fbfdc - std::sys_common::backtrace::__rust_end_short_backtrace::h3e9bf30168899554
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:141:18
      13:     0x55cd977fd779 - rust_begin_unwind
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:493:5
      14:     0x55cd97774331 - core::panicking::panic_fmt::h5322a082d19786c3
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/panicking.rs:92:14
      15:     0x55cd9777427d - core::panicking::panic::haebb15b6842d6229
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/panicking.rs:50:5
      16:     0x55cd977bbd27 - core::mem::uninitialized::h24e51381cf1d7cc8
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/mem/mod.rs:660:9
      17:     0x55cd977bbd27 - sdl2::audio::AudioDevice<CB>::open_playback::hbb0609a3db1dfcec
                                   at /home/fred/.cargo/registry/src/github.com-1ecc6299db9ec823/sdl2-0.25.0/src/sdl2/audio.rs:571:39
      18:     0x55cd97797025 - sdl2::audio::<impl sdl2::sdl::AudioSubsystem>::open_playback::h6be543906219f018
                                   at /home/fred/.cargo/registry/src/github.com-1ecc6299db9ec823/sdl2-0.25.0/src/sdl2/audio.rs:74:9
      19:     0x55cd977a5200 - rust64::c64::sid::SID::new_shared::hb9fd972e7558784d
                                   at /home/fred/Workspace/rust64/src/c64/sid.rs:149:27
      20:     0x55cd977aa2ad - rust64::c64::C64::new::h19d4a6aba81882f5
                                   at /home/fred/Workspace/rust64/src/c64/mod.rs:55:22
      21:     0x55cd9779b713 - rust64::main::h3d420d3cccf68bfa
                                   at /home/fred/Workspace/rust64/src/main.rs:40:19
      22:     0x55cd97778dab - core::ops::function::FnOnce::call_once::h296ac6feada574eb
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/ops/function.rs:227:5
      23:     0x55cd97788c9e - std::sys_common::backtrace::__rust_begin_short_backtrace::hbdf6d0329017f8d7
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/sys_common/backtrace.rs:125:18
      24:     0x55cd97775e11 - std::rt::lang_start::{{closure}}::h04ebee1a1b54fc53
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/rt.rs:66:18
      25:     0x55cd977fe01a - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hbcc915e668c7ca11
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/core/src/ops/function.rs:259:13
      26:     0x55cd977fe01a - std::panicking::try::do_call::h6b0f430d48122ddf
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:379:40
      27:     0x55cd977fe01a - std::panicking::try::h6ba420e2e21b5afa
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panicking.rs:343:19
      28:     0x55cd977fe01a - std::panic::catch_unwind::h8366719d1f615eee
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/panic.rs:431:14
      29:     0x55cd977fe01a - std::rt::lang_start_internal::h965c28c9ce06ee73
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/rt.rs:51:25
      30:     0x55cd97775df0 - std::rt::lang_start::hfee6940d3a632ed3
                                   at /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597/library/std/src/rt.rs:65:5
      31:     0x55cd9779b97c - main
      32:     0x7fbd32a4ab25 - __libc_start_main
      33:     0x55cd9777499e - _start
      34:                0x0 - <unknown>
    

    Update: Tried to debug this on my own. Wasn't able to, but figured out that if I used the sid::SID normally reserved for Redox OS (which I guess has no sound) then it works for me, also with no sound. I didn't need sound so I was happy with that. YMMV.

    opened by ctrlcctrlv 2
  • Fixed some minor issues with the latest version of SDL2 and minifb

    Fixed some minor issues with the latest version of SDL2 and minifb

    I wanted to check out this repo, and ran into serveral issues with deprecated functions being used and updated dependencies. So i fixed the code for my versions of rust, sdl and minifb. I hope it helps.

    Great work btw :)

    opened by Ariakan79 2
  • Adjust speed?

    Adjust speed?

    Is there a way to turn clock-speed up or down?

    Turbo would be nice for blazing past some passages,
    and slowing it way down to watch program execution would be pretty smooth too.

    https://mobile.twitter.com/doyousketch2/status/892515790989258752

    opened by doyousketch2 1
  • Responsiveness issues in certain programs

    Responsiveness issues in certain programs

    This could be linked to Issue #4 but it's best to investigate when it's done. Certain programs have very low responsiveness to joystick and keyboard - either because of timing problems or due to IO states being updated on VBlank only (unlikely but worth checking out).

    opened by kondrak 1
  • Rewrite CPU op execution scheme

    Rewrite CPU op execution scheme

    When BA line in C64 is low, the CPU is blocked from performing a read access, however writes can still be performed. Current implementation is blocked even during writes which causes the VIC and CPU to get out of sync when doing certain cycle-based effects. The new CPU has to break every instruction into steps instead of performing it right away and just sleeping for a fixed amount of cycles. This is a task for when the sprites are done.

    opened by kondrak 1
  • Opcode request

    Opcode request

    I try to run a demo: https://hd0.linusakesson.net/files/lft-sommargubbe.prg

    But it does not work: Unknown instruction: AXS at $16E4

    I assume it is some undocumented hack instruction that lft uses here but maybe it is a good next step for extending the implementation... :wink:

    opened by L3P3 1
  • Possible copypast issue

    Possible copypast issue

    I found possible copypast issue in CIA::process_irq(&mut self) function (see link below). Perhaps timer B is needed to check after timer A?

    https://github.com/kondrak/rust64/blob/3e9d295fafe0b54a4d8e4f665b2a8f227392f03e/src/c64/cia.rs#L479-L504

    opened by mitallast 0
Owner
Krzysztof Kondrak
Krzysztof Kondrak
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
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
ZX Spectrum emulator written in Rust

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

Vladislav Nikonov 162 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
a work-in-progress NES emulator written in rust.

sayaka-rs a work-in-progress NES emulator, written in Rust. the project image is an edit of a frame from the Mahou Shoujo Madoka Magica manga. the Mik

Lumine 1 Jan 16, 2022
A RISC-V emulator supoorting RV32I instruction set written in Rust

32-bit RISC-V Emulator in Rust This is a RISC-V emulator supoorting RV32I instruction set written in Rust, inspired by Francis Stokes's RISC-V Emulato

null 8 Oct 8, 2022