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:
- Test ROMs:
- https://github.com/Timendus/chip8-test-suite
- *More are available for various needs, ask in the relevant channel.
- Other resources:
- 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 Z80 resources
- Casio PV-1000 Obscure Wiki
- Casio PV-1000 Hardware notes
- Casio PV-1000 Emulation notes
- 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:
- 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
- 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:
- 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
- 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.
- 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:
- Test ROMs:
- SNES sprite engine design guidelines
- SNES programming book
- 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
- 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
- See PowerPC resources
- WiiUBrew
- 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
- Test ROMs:
- 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
- Emulating PS2 Floating-Point Numbers: IEEE 754 Differences (Part 1)
- 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
- 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
- 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
- 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
- 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
- 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)
- See Motorola 68K / PowerPC resources
- Apple's guide to the macintosh family hardware (400 MB pdf)
- Inside Macintosh Volume III
- Macintosh error codes
- 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
- 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
- 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
- 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
- Single Step Tests: Instruction tests for various CPUs in JSON format, mostly generated from emulators
- Instruction set reference (just a summary for each instruction, doesn't respond to https://)
- Programmer's reference manual
- Instruction overview
- Prefetch information
- 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 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
- 8088 CPU Tests
- NEC V20/186 CPU Tests
- 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
- x86-64 opcode table
- OSDev wiki encoding page
- MIPS64 Instruction Set Reference Manual
- IDT R30xx Family Software Reference Manual (PS1 CPU, PS2 IOP)
- VR43xx CPU manual (Nintendo 64)
- Itanium Architecture Software Developer's Manual (original)
- Itanium System Abstraction Layer Specification (original)
- 460GX Chipset Developer's Manual (original)
- Intel® E8870IO Server I/O Hub Datasheet (original)
- Intel® E8870 SNC Datasheet (original)
Contributing
Have something to add to this list? Submit a pull request here.
Note: If you're new here, scroll up to the top!