System-specific resources
Below are some useful resources for various popular systems. If you’re unsure what you want to work on I recommend starting with a CHIP-8 tutorial, of which there are many (just Google it). After that, move to whatever system you want to. You don’t need to “work your way up” to it or whatever as many seem to think. (relevant thread). Just make sure you have the basics down first, remember to study the source code of existing emulators (super important) and if you get stuck, ask questions on our discord or in the emudev subreddit.
Systems
Multiple systems
- https://www.zophar.net/documents.html
- http://emulator101.com
- http://hitmen.c02.at/index.html
- http://www.codeslinger.co.uk (doesn’t respond to https://, disable extensions such as HTTPS Everywhere if it doesn’t load)
- https://emudev.de
- Shonumi’s blog
- Shell-storm multi-architecture assembler and disassembler
- 8bitworkshop IDE
- 240p test suite, supporting multiple systems
CHIP-8
- There are a lot of full tutorials on the Internet, so just searching “chip8 emulator tutorial” and looking for one in your language of choice should be enough if you’re looking for a step-by-step guide
- If not, see the References below. There are usually no “full” tutorials for other systems, so it’s challenging but more realistic and perhaps more helpful in the long run, assuming you’ll want to move on to other systems after CHIP-8
- High-level guide to making a CHIP-8 emulator
- References:
- CHIP-8 technical reference
- CHIP-8 instruction set
- Cowgod’s Technical Reference (doesn’t respond to https://)
- Test ROMs:
- Other resources:
Bytepusher
Pac-Man
- See Z80 resources below
- Pac-Man emulation guide
- Disassembly
Space Invaders
- See 8080 resources below
- SN76477N technical data
- General info on Space Invaders
- Space Invaders disassembly and info
- CPU tests (need a CP/M implementation or to fake it to some extent, see CP/M section and this Discord message)
CP/M
- See 8080 resources below
- General CP/M info
- Zero page breakdown
- CP/M BDOS system calls
- CP/M Programmer’s Guide
- CP/M-86 System Guide
Game Boy/Game Boy Color
- Pandocs
- The Cycle-Accurate GB Docs
- Opcode table
- List of GB opcodes and their behavior
- GB instruction decoding table
- Decoding GB opcodes algorithmically
- A journey into GB emulation
- WIP tutorial on writing a GB emulator in Rust
- GameBoy Emulator Development Guide
- Test ROMs:
- Bootrom disassembly
- The Ultimate Game Boy Talk
- Other valuable resources
- Notes by GhostSonic on GB sound emulation
- Explanation of binary-coded decimals and the DAA instruction
- Guide to the half-carry flag
Game Boy Advance
- See relevant ARM resources below (the ARM7TDMI used in the GBA implements ARMv4T)
- GBATEK
- no$gba (get the debug version)
- TONC (GBA tutorial and demos)
- Cycle counting on the GBA
- Test ROMs:
- Various test ROMs, including an archive of TONC binaries
- https://github.com/destoer/armwrestler-gba-fixed
- https://github.com/DenSinH/FuzzARM
- https://github.com/jsmolka/gba-suite
- https://github.com/destoer/gba_tests
- https://github.com/PeterLemon/GBA
- https://github.com/ladystarbreeze/gba-tests/tree/master/dma-test
- mGBA blog (particularly the “development” and “emulation” tags)
- Homebrew development:
Nintendo DS
- See relevant ARM resources below (the DS uses an ARM7TDMI and an ARM946E-S, implementing respectively ARMv4T and ARMv5TE)
- GBATEK
- Other docs
- Test ROMs:
- Sample homebrew programs
- Arisotura’s blog (uses self-signed certificate but works with https://)
Nintendo 3DS
- See relevant ARM resources (the 3DS’s ARM11 MPCore implements ARMv6K, not plain ARMv6, so you’ll have to look at the ARMv7-AR manual too for the few additions; the ARM9 is the same as on the Nintendo DS)
- GBATEK
- The 3DBrew wiki
Nintendo Entertainment System
- See 65xx family resources
- 6502 instruction set reference
- The NesDev wiki
- NES emulator development guide
- Overview of writing a NES emulator
- Articles on writing a NES emulator (among other things)
- Sample ROMs
Super Nintendo Entertainment System
- See 65xx family resources
- fullsnes
- 65c816 primer
- YouTube playlist
- Adventures in Retro Development: SNES Edition (focuses on homebrew development environment)
- Anomie’s SNES docs
- WIP Super Mario World disassembly
- SNES development wiki:
- Test ROMs:
- SNES sprite engine design guidelines
- SNES programming book
Nintendo Virtual Boy
Nintendo 64
- See MIPS resources
- Notes and resources
- Development resources
- Info on the N64’s boot code
- Test ROMs
- Fork of the above test ROMs, with a few more ones (significantly outdated)
- RSP docs
- Other resources
Nintendo GameCube
PlayStation 1
- See MIPS resources
- Guide to writing a PSX emulator
- psx-spx
- PSX reverse engineering project
- BIOS info
- The PSX GPU texture pipeline and how to emulate it
- PSX EXE header (also see “CDROM File Formats” section in psx-spx)
- PSX system software reverse engineering project
- Other PSX documentation (including a CPU reference manual)
- PSX GTE docs/reverse engineering
- PSX MDEC & CD-ROM info
- Dithering on the PSX
- PlayStation emulator development info
- Test ROMs:
PlayStation 2
Sega Game Gear
Sega Master System
- See Z80 resources below
- SMS info
- Test ROMs:
- Homebrew test cases
- ZEXALL test ROM (doesn’t require any hardware, it can log to an IO port)
- PeterLemon’s SMS demos
- VDP test ROM
- WIP test suite
Sega Genesis/Mega Drive
- See Z80 and m68k resources below
- Collection of docs
- CPU test ROM
- VDP test ROM
- Development tools list
Sega Saturn
- SH-2 programming manual
- GAM1 test ROM, harnessing most hardware
- Misc homebrew:
Commodore 64
- See 6502 resources in the 65xx family section (the C64 uses a 6510)
- MCS6500 family programming manual (doesn’t respond to https://)
- C64 wiki
- VICE test ROMs
- SID manual (doesn’t respond to https://)
- C64 assembly language programming
- Scanline missing cycles
- Opening the borders
- Info on the VIC-II
- SID info (doesn’t respond to https://)
- Programming the C64’s SID:
- 6502 decimal mode
- The Commodore 64 Music Book
- C64 user’s guide (start of sound chapter)
Mac
- See m68k/PowerPC resources below
- Apple’s guide to the macintosh family hardware (400 MB pdf)
MSX
- See Z80 resources below
- Test ROMs
ZX Spectrum
- https://spectrumforeveryone.com/technical
- https://worldofspectrum.org/faq/resources/documents.htm
- Krom’s demos
Amiga
Xbox
Neo Geo
- Development wiki (has overviews of every piece of hardware)
- Sample ROMs
Pokémon Mini
Tamagotchi
- Tech specs and resources
- ROM dump and reverse engineering - Archive of linked article - ROM dump GitHub repository
Processors and architectures
65xx family
8080
- 8080 tutorial (among other things)
- Assembly programming manual
- Datasheet
- Instruction table
- Loading test ROMs that require a CP/M implementation/stub
Z80
- Z80 CPU User Manual
- Z80 heaven
- Z80 instruction table
- The undocumented Z80 documented
- Z80 undocumented behavior
- Z80 undocumented instructions
- Z80 test ROMs
- Loading test ROMs that require a CP/M implementation/stub
m68k
- Instruction set reference (just a summary for each instruction, doesn’t respond to https://)
- Programmer’s reference manual
PowerPC
ARM
- ARM instruction set info for the ARM7TDMI-S (not the full document, which apparently can’t be found anymore)
- ARM7TDMI datasheet (contains info about ARM and thumb instruction sets)
- ARM7TDMI Technical Reference Manual
- ARM7TDMI-S Technical Reference Manual (doesn’t contain instruction descriptions, but has info on timing)
- ARMv5TE Reference Manual (contains a few corrections to the original documents)
- ARM9E-S Technical Reference Manual (contains info on timing that applies to all ARM9*E-S processors)
- ARM946E-S Technical Reference Manual
- ARMv6 Reference Manual
- ARMv7-A/R Reference Manual
- ARM11 MPCore Technical Reference Manual
x86
- 8086 family user’s manual
- Intel® 64 and IA-32 manuals
- 8086/80186 test ROM
- Felix Cloutier’s x86 and AMD64 instruction reference
- Agner Fog’s software optimization resources
MIPS
- MIPS64 Instruction Set Reference Manual
- IDT R30xx Family Software Reference Manual (PS1 CPU, PS2 IOP)
- VR43xx CPU manual (Nintendo 64, doesn’t respond with the correct file using https://)