Below are some useful resources for various popular systems. If you're unsure what you want to work on we 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 this server or in the emudev subreddit: https://reddit.com/r/EmuDev.
For potentially more resources on your system, also see pinned messages in relevant system channels.
Note: A great introduction to any system is to read its Architecture of Consoles entry, if available.
See the HIgh-level guide if you want detailed step-by-step instructions, otherwise use the References
.
There are no "full" tutorials for other systems, so using references will be a bit more 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
- CHIP-8 Variant Opcode Table
- Test ROMs:
- https://github.com/Timendus/chip8-test-suite
- https://github.com/corax89/chip8-test-rom
- https://github.com/metteo/chip8-test-rom
- https://github.com/Skosulor/c8int/tree/master/test
- Other resources:
- ROM compatibility issues
- Writing a CHIP-8 interpreter for the COSMAC ELF
- COSMAC VIP manual
- See Z80 resources
- Pac-Man emulation guide
- Disassembly ⠀
- See 8080 resources
- 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)
- See 8080 resources
- General CP/M info
- Zero page breakdown
- CP/M BDOS system calls
- CP/M Programmer's Guide
- CP/M-86 System Guide
- 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
- http://www.codeslinger.co.uk/pages/projects/gameboy.html
- WIP tutorial on writing a GB emulator in Rust
- GameBoy Emulator Development Guide
- Test ROMs:
- Blargg's test ROMs
- Mooneye-gb test ROMs
- dmg-acid (rendering test)
- cgb-acid (rendering test)
- PeterLemon's GB demos
- Test ROM execution logs
- 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
- 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)
- https://nba-emu.github.io/hw-docs
- 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
- https://github.com/mgba-emu/suite
- https://github.com/nba-emu/hw-test
- mGBA blog (particularly the "development" and "emulation" tags)
- Homebrew development:
- https://patater.com/gbaguy/gbaasm.htm
- See relevant ARM resources below (the DS uses an ARM7TDMI and an ARM946E-S, implementing respectively ARMv4 and ARMv5TE)
- GBATEK
- Other docs
- Test ROMs:
- https://github.com/mic-/armwrestler
- Built ROM
- https://github.com/Arisotura/arm7wrestler
- Built ROM
- https://tcrf.net/Aging_Card_NTR
- Sample homebrew programs
- Arisotura's blog
- See relevant ARM resources below (the 3DS's ARM11 MPCore implements ARMv6K, not plain ARMv6, so you'll have toat the ARMv7-AR manual too for the few additions; the ARM9 is the same as on the Nintendo DS)
- GBATEK
- The 3DBrew wiki
- 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
- 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:
- 65c816 CPU reference
- SPC-700 APU reference
- Capcom Cx4 coprocessor docs
- Test ROMs:
- https://gitlab.com/higan/snes-test-roms
- https://github.com/PeterLemon/SNES
- Blargg's SPC SNES test ROMs
- More of Blargg's SNES test ROMs
- SNES sprite engine design guidelines
- SNES programming book
- Super FX tutorial
- See MIPS resources
- https://n64.readthedocs.io
- https://n64brew.dev
- 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)
- https://github.com/lemmy-64/n64-systemtest
- RSP docs
- Other resources
- 64DD: https://github.com/LuigiBlood/64dd/wiki
- See PowerPC resources
- YAGCD: http://hitmen.c02.at/files/yagcd/index.html (mirror: https://www.gc-forever.com/yagcd)
- GameCube resources GitHub repository
- See MIPS resources
- Guide to writing a PSX emulator
- Rendered
- psx-spx
- PSX reverse engineering project
- BIOS info
- Translated
- 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
- Translated
- Test ROMs:
- Amidog's tests
- https://github.com/PeterLemon/PSX
- https://github.com/JaCzekanski/ps1-tests
- https://github.com/simias/psx-hardware-tests/tree/master/tests
- PSX demos
- Open-source BIOS: https://github.com/grumpycoders/pcsx-redux/tree/main/src/mips/openbios
- See MIPS resources
- PS2TEK
- PS2 docs
- PS2 unofficial clang erratum
- GS Mode Selector
- PS2 busses
- See Z80 resources
- SMS info
- BIOS documentation
- Memory map
- Z80 info
- Video Hardware
- Sound Hardware
- http://www.codeslinger.co.uk/pages/projects/mastersystem.html
- 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
- See Z80 and m68k resources
- Collection of docs
- http://gendev.spritesmind.net/forum/viewtopic.php?f=2&t=2227
- CPU test ROM
- VDP test ROM
- Development tools list
- SH-2 programming manual
- GAM1 test ROM, harnessing most hardware
- Misc homebrew:
- http://www.rockin-b.de/saturn.html
- https://reddit.com/r/SegaSaturn/comments/223cdp/best_saturn_homebrews_available_atm
- 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
- Translated
- Scanline missing cycles
- Opening the borders
- Info on the VIC-II
- SID info (doesn't respond to https://)
- Programming the C64's SID:
- Part 1
- Part 2
- 6502 decimal mode
- The Commodore 64 Music Book
- C64 user's guide (start of sound chapter)
- See Motorola 68K / PowerPC resources
- Apple's guide to the macintosh family hardware (400 MB pdf) ⠀
- See Z80 resources
- Test ROMs
- https://spectrumforeveryone.com/technical
- https://worldofspectrum.org/faq/resources/documents.htm
- Krom's demos
- https://github.com/redcode/ZXSpectrum/wiki/Tests ⠀
- Development wiki (has overviews of every piece of hardware)
- Sample ROMs
- Tech specs and resources
- ROM dump and reverse engineering
- Archive of linked article
- ROM dump GitHub repository
- 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: https://shonumi.github.io
- Shell-storm multi-architecture assembler and disassembler: http://shell-storm.org/online/Online-Assembler-and-Disassembler
- 8bitworkshop IDE: https://8bitworkshop.com/redir.html
- 240p test suite, supporting multiple systems: https://sourceforge.net/projects/testsuite240p/files/Sega_Genesis-MegaDrive-SegaCD_MegaCD
- https://www.westerndesigncenter.com/wdc/documentation/w65c816s.pdf
- Programming manual
- 6502 decimal mode
- 8080 tutorial (among other things)
- Assembly programming manual
- Datasheet
- Instruction table
- Loading test ROMs that require a CP/M implementation/stub
- 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
- https://github.com/redcode/Z80/wiki/Technical-literature
- https://github.com/redcode/Z80/wiki/Tests
- Generated instruction tests for the SM83 (Gameboy) / Z80 / SPC700 (SNES & misc) https://github.com/raddad772/jsmoo/tree/main/misc/tests/GeneratedTests
- Instruction tests in json format for 65[c]02, 65816, 68000 and SPC700: https://github.com/TomHarte/ProcessorTests
- Instruction set reference (just a summary for each instruction, doesn't respond to https://)
- Programmer's reference manual
- http://goldencrystal.free.fr/M68kOpcodes.pdf
- 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
- 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
- x86 Intrinsics
- Sandpile
- Opcode and Instruction Reference
- https://github.com/TomHarte/ProcessorTests/tree/main/8088
- MIPS64 Instruction Set Reference Manual
- IDT R30xx Family Software Reference Manual (PS1 CPU, PS2 IOP)
- VR43xx CPU manual (Nintendo 64)