This page is a collection of my favorite resources for people getting started
writing programming languages. I hope to keep it updated as long as I continue
to find great stuff.
Pointer tagging and NaN boxing
Resources on representing small values efficiently.
Small JITs to help understand the basics. Note that these implementations tend
to focus on the compiling ASTs or IRs to machine code, rather than the parts of
the JIT that offer the most performance: inline caching and code inlining.
Compiling is great but unless you’re producing good machine code, it may not do
a whole lot.
Game Boy Emulators
- The Pan Docs (newer version
here?), which give technical data about the Game
Boy hardware, I/O ports, flags, cartridges, memory map, etc
- This excellent explanation
of the boot ROM
- This opcode table
that details the full instruction set, including CB opcodes
- This full opcode reference for
- The Game Boy CPU manual
- The GameBoy memory map
- This blog post that gives a
pretty simple state machine for the different rendering steps
- The Ultimate Game Boy Talk by
Michael Steil at CCC
- This ROM generator for custom logos
- This sample DAA implementation
- This awesome-gbdev list
- This excellent emulator and debugger
- Another emulator and debugger
- The Game Boy complete technical reference
- This Gameboy Overview
- blargg’s test ROMs
which have instruction tests, sound tests, etc
- gekkio’s emulator
and his test ROMs
- This fairly readable Go emulator,
which has helped me make sense of some features
- This fairly readable C emulator
- This fairly readable C++ implementation
- This helpful GPU implementation in Rust
- This reference
for decoding GameBoy instructions.
- NOTE: This has one bug
that someone and I independently found. The original repo
has fixed the bug but not the page linked above.
- This summary blog post
explaining GPU modes
- And of course /r/emudev
This is a potentially fun way to
render the screen without SDL, but only for non-interactive purposes.
playlist looks like it could be worth a watch, but it’s a lot of hours.
I should probably pick and choose some great stuff from these lists to copy
onto this page.