A Nintendo Entertainment System emulator written in pure Rust.
🚧 Work in progress! 🚧
I want to gain insight into the inner workings of the NES, and this project is a part of my research. Additionally, I want to build a better understanding of Rust.
This is a side project, so everything is moving at a snail's pace. So far I have only began working on emulating the Obelisk 6502 chip instructions. Here you can see how many have already been implemented:
ADC🚧 | AND🚧 | ASL🚧 | BCC🚧 | BCS🚧 | BEQ🚧 | BIT🚧 | BMI🚧 | BNE🚧 | BPL🚧 | BRK🚧 | BVC🚧 | BVS🚧 | CLC🚧 |
CLD🚧 | CLI🚧 | CLV🚧 | CMP🚧 | CPX🚧 | CPY🚧 | DEC🚧 | DEX🚧 | DEY🚧 | EOR🚧 | INC🚧 | INX🚧 | INY🚧 | JMP🚧 |
JSR🚧 | LDA🚧 | LDX🚧 | LDY🚧 | LSR🚧 | NOP🚧 | ORA🚧 | PHA🚧 | PHP🚧 | PLA🚧 | PLP🚧 | ROL🚧 | ROR🚧 | RTI🚧 |
RTS🚧 | SBC🚧 | SEC🚧 | SED🚧 | SEI🚧 | STA🚧 | STX🚧 | STY🚧 | TAX🚧 | TAY🚧 | TSX🚧 | TXA🚧 | TXS🚧 | TYA🚧 |
Additionally, the chip shipped with certain unofficial opcodes that were left unused by design. Some games still use these undocumented operations, so I am going to implement them for the sake of completeness. You can see the progress on that here:
AAC🚧 | AAX🚧 | ARR🚧 | ASR🚧 | ATX🚧 | AXA🚧 | AXS🚧 | DCP🚧 | DOP🚧 | ISC🚧 | KIL🚧 | LAR🚧 | LAX🚧 | NOP🚧 |
RLA🚧 | RRA🚧 | SBC🚧 | SLO🚧 | SRE🚧 | SXA🚧 | SYA🚧 | TOP🚧 | XAA🚧 | XAS🚧 |
Symbol | Description |
---|---|
🚧 | Implemented, not ran against NesTest |
✔️ | Implemented, passed NesTest |
❌ | Implemented, failed NesTest |
My grandest goal is that of building a greater understanding of NES and its inner workings, as well as deepening my knowledge of Rust. That wouldn't be possible without having a set path in mind, so I've decided that by the end of this learning experience I want to have an emulator capable of running "Super Mario Bros".
- Call-A.P.P.L.E Obelisk 6502
- Obelisk.me guide (archived)
- The Rust Programming Language
- NesDev website
- NES emulator e-book
I am following the afformentioned documents in order to learn about NES and Rust. This research wouldn't have come to fruition without these.