NOTE: This is still very much a work in progress.
-
Implement 6502 CPU (minus APU)
- Official opcodes
- Unofficial opcodes
- Ensure cycle accuracy
-
Create 6502 CPU test runner for single-step tests
-
Implement iNES 1.0 ROM parsing
-
Implement Bus-centric architecture (NES wrapper handles orchestration)
-
Implement interrupt handling
- Non-maskable-interrupts
- Software-defined interrupts
-
Implement user-input via Joypad 1
-
Implement cycle-accurate DMA transfer through Bus
-
Implement PPU
- Background nametable rendering
- 8x8 sprite rendering (with horiz/vert flips)
- 8x16 sprite rendering
- Detect sprite-overflow
- Sprite collision detection
-
Encapsulate mapper logic behind Cartridge trait
-
Implement APU
- 6502 opcode references:
- Illegal opcodes: https://www.masswerk.at/nowgobang/2021/6502-illegal-opcodes
- Single-step opcode tests: https://github.com/SingleStepTests/65x02/tree/main/nes6502/v1
- iNES file format spec: https://formats.kaitai.io/ines/index.html
- snake.nes: https://skilldrick.github.io/easy6502/#snake
- PPU timing chart: https://www.nesdev.org/w/images/default/4/4f/Ppu.svg
- PPU timing details: https://www.nesdev.org/wiki/PPU_rendering