System-specific Resources
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.
Systems
CHIP-8
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:
- Test ROMs:
- https://github.com/Timendus/chip8-test-suite
- *More are available for various needs, ask in the relevant channel.
- Other resources:
Bytepusher
COSMAC-VIP
- COSMAC VIP instruction manual.
- CDP1802 CPU instrction manual by RCA.
- CDP1802 CPU instruction manual by Intersil.
- CDP1861 video display controller manual.
- Expansion boards documentation.
- CDP1862 color generator controller manual.
- Emma02’s COSMAC VIP documentation.
- COSMAC ELF group on groups.io.
- VIPER magazines repository.
Pac-Man
- See Z80 resources
- Pac-Man emulation guide
- Disassembly
Space Invaders
- 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)
Casio PV-1000
- See Z80 resources
- Casio PV-1000 Obscure Wiki
- Casio PV-1000 Hardware notes
- Casio PV-1000 Emulation notes
CP/M
- 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
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
- http://www.codeslinger.co.uk/pages/projects/gameboy.html
- 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
- Single step tests
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)
- https://nba-emu.github.io/hw-docs
- Cycle counting on the GBA
- Decoding the ARM7TDMI Instruction Set (Game Boy Advance)
- 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
- https://gbadev.net/gbadoc/
- Testrom Execution Logs
- 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 ARMv4 and ARMv5TE)
- GBATEK
- Datasheets:
- Other docs
- Test ROMs:
- Sample homebrew programs
- Arisotura’s blog
- Ongoing rasterizer timing research
Nintendo 3DS
- 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
- Libctru demos
- CRO documentation
- Audio tests
- CTRPF cheat code documentation
- Subv’s additional findings on the kernel’s threading system (meant to complement the relevant 3DBrew page)
- Simple hommebrew userland tests
- DSP1 binary loader for Ghidra (For DSP .cdc firmware files, you can dump them from hardware or Panda3DS)
- Teak DSP Ghidra SLEIGH plugin
- Teakra: Teak DSP assembly, disassembly and emulation library
- 3DS hacking guide
- Documentation of some system archives (Mii data, OS font, etc) and Python scripts for generating non-copyrighted replacements.
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
- Some homebrew ROMs
- Screen test ROM
- https://files.virtual-boy.com/download/978651/stsvb.html
⠀
Nintendo 64
- 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
- Parallel-RDP: RDP emulation plugin using Vulkan + compute shaders
Nintendo GameCube / Nintendo Wii
- See PowerPC resources
- YAGCD: http://hitmen.c02.at/files/yagcd/index.html (mirror: https://www.gc-forever.com/yagcd)
- GameCube resources GitHub repository
- Gamecube Apploader RE
- GC/Wii games with debug symbols
- Dolphin hardware tests
- GC/Wii games that use the Zelda DSP microcode
- Gekko/Broadway/Espresso Ghidra plugin
- DSP HLE (Dolphin)
- Dolwin docs
- Wii hacking guide
Nintendo Wii U
- See PowerPC resources
- WiiUBrew
PlayStation 1
- See MIPS resources
- Guide to writing a PSX emulator
- psx-spx (original)
- psx-spx (modernized and actively maintained)
- 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)
- Difficult-to-emulate games
- Dithering on the PS1
- PSX system software reverse engineering project
- Other PSX documentation (including a CPU reference manual)
- PSX GTE docs/reverse engineering
- PSX MDEC & CD-ROM info
- PlayStation emulator development info
- LSI LR33000 CPU (PSX’s MIPS core) docs collection
- Test ROMs:
- Open-source BIOS: https://github.com/grumpycoders/pcsx-redux/tree/main/src/mips/openbios
PlayStation 2
- See MIPS resources
- PS2TEK
- PS2 docs
- PS2 unofficial clang erratum
- GS Mode Selector
- PS2 busses
- Emulating PS2 Floating-Point Numbers: IEEE 754 Differences (Part 1)
PlayStation 3
PlayStation 4
- Reverse Engineering PlayStation 4
- Southern Islands Programming Guide (misc. docs including PM4 packet layout)
- Radeon Sea Islands 3D/Compute Register Reference Guide
PlayStation Portable
- Hardware
- PSPSDK for writing homebrew
- PRXTool
- Texture swizzling
- VFPU reverse engineering and implementation
- Opcode decoding and instruction names
- Unofficial Firmware, based on reverse engineering by folks from the PSP Homebrew Community
- Plugins for Reverse Engineering
- Allegrex Opcode Table
- PSP Test Suite
PlayStation Vita
- VitaSDK docs: https://docs.vitasdk.org/
- VitaSDK Github repos with homebrew samples, a developer toolchain, and more: https://github.com/vitasdk
- Guide for decompiling PS Vita SELFs with Ghidra: https://forum.devchroma.nl/index.php?topic=88.0
PC Engine (TurboGrafx-16)
- HuC6280 Opcode Matrix
- HuC6280 Opcode Documentation
- Huc6280 Assembly Guide
- PC Engine Developer Docs
- PC Engine Tech Docs
- VDC Programmers Reference
- VDC Documentation
- VDC Useful Timings
- MagicKit Docs of Hardware Registers
Sega Game Gear
Sega Master System
- See Z80 resources
- SMS info
- 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
Sega Genesis / Mega Drive
- 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
Sega Saturn
- SH-2 programming manual
- Yabause wiki (check the Sega Saturn Specifications section)
- Collection of docs
- The main page has tons of details on the hardware, games, history, etc.
- More complete collection
- sattech
- Signal traces of various chips
- 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
- SegaXtreme forum
- Keep an eye on the SEGA Saturn Nth Anniversary Game Competition threads, there’s often a ton of fantastic homebrew there
- libyaul (for homebrew development)
- Examples
- Docker image
- Works well on WSL too
- 240p test suite
- CD-ROM and image formats
- ECMA-130 spec
- Raw optical disc format
- Cue sheet format, 2
- CCD/IMG/SUB formats
- MDS/MDF formats, 2, 3
- ISO is just a BIN with either 2048 or 2352 byte sectors; check if the file is divisible by one of these sizes and build a single data track with the whole file’s contents
Sega Dreamcast
Atari 8-bit Computers
Commodore 64
- See 6502 resources in the 65xx family section (the C64 uses a 6510)
- MCS6500 family programming manual (doesn’t respond to https://)
- Summary of single-cycle execution with the 6502 addressing modes
- 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 Motorola 68K / PowerPC resources
- Apple’s guide to the macintosh family hardware (400 MB pdf)
- Inside Macintosh Volume III
- Macintosh error codes
MSX
- See Z80 resources
- Test ROMs
ZX Spectrum
- https://spectrumforeveryone.com/technical
- https://worldofspectrum.org/faq/resources/documents.htm
- Krom’s demos
- https://github.com/redcode/ZXSpectrum/wiki/Tests
Amiga
Xbox
Neo Geo
- Development wiki (has overviews of every piece of hardware)
- Sample ROMs
Neo Geo Pocket (Color)
- Toshiba TLCS-900/H CPU Manual
- TMP95CS64F Manual (thought to be the microcontroller the NGPC is based around)
- NGPC Memory Map/Technical Reference
- Older similar documents:
- http://neopocott.emuunlim.com/docs/tech-11.txt
- http://devrs.com/ngp/files/ngpctech.txt
- Archive of More Resources
- Homebrew Development Kit
- More Homebrew
V.Smile
Pokémon Mini
Tamagotchi
Multiple systems
- https://www.zophar.net/documents.html
- http://www.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
- A list of helpful patents for various systems, include Gamecube, Wii, N64 and more: https://gist.github.com/sylvieee-iot/5636d376302569833b0787abc62b7758
- 240p test suite, supporting multiple systems: https://sourceforge.net/projects/testsuite240p/files/Sega_Genesis-MegaDrive-SegaCD_MegaCD
Processors and architectures
65xx family
- https://www.westerndesigncenter.com/wdc/documentation/w65c816s.pdf
- Programming manual
- 6502 decimal mode
- Implementation of illegal opcodes (instruction + addressing mode) for the NMOS 6510
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
- https://github.com/redcode/Z80/wiki/Technical-literature
- https://github.com/redcode/Z80/wiki/Tests
Misc
- Single Step Tests: Instruction tests for various CPUs in JSON format, mostly generated from emulators
Motorola 68k
- Instruction set reference (just a summary for each instruction, doesn’t respond to https://)
- Programmer’s reference manual
- Instruction overview
- Prefetch information
PowerPC
- IBM’s PowerPC Architecture Book
- PowerPC 750CL manual (Mostly similar to the GC/Wii/Wii U CPUs)
- VMX128-type opcodes found on the Xbox 360 processor
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
ARM64
x86
- 8086 family user’s manual
- Intel® 64 and IA-32 manuals
- 8088 CPU Tests
- 8086 CPU Tests
- NEC V20 CPU Tests
- 80286 CPU Tests
- 80386 CPU Tests
- 80386 Test ROM
- Felix Cloutier’s x86 and AMD64 instruction reference
- Agner Fog’s software optimization resources
- x86 Intrinsics
- Sandpile
- Opcode and Instruction Reference
- x86-64 opcode table
- OSDev wiki encoding page
MIPS
- MIPS64 Instruction Set Reference Manual
- IDT R30xx Family Software Reference Manual (PS1 CPU, PS2 IOP)
- VR43xx CPU manual (Nintendo 64)
Contributing
Have something to add to this list? Submit a pull request here.
Note: If you’re new here, scroll up to the top!