A 1993 Sega Genesis studio in a browser tab

It is Monday, December 6, 19931, late, at a Sega Genesis developer’s desk. The 486 boots MS-DOS 6.02, logs in to the studio’s NetWare server3 and loads the driver for the SNASM card28. Beside it sits a Genesis with its CPU pulled out25, running whatever was last sent down the cable.

  1. 1It is Monday, December 6, 1993

    • our callbrief-dos.md
  2. 2MS-DOS 6.0, word for word from the real binaries

    • binarystrings dumped from the MS-DOS 6.0 (03-10-93) binaries
    • built in a91460b
  3. 3NetWare 3.x on a server called STUDIO

    • documentNETX v3.32 (930217)
    • inventedthe IPX and NETX banners and the MAP, SLIST, WHOAMI layouts, which were written from memory
    • built in fa75f2c

Every machine on the desk is written from scratch in TypeScript4, and each was checked against something real. The 68000 passes 317,500 of 317,500 test vectors5. The FM synthesis matches an emulator traced from the YM2612’s die, sample for sample6. Four Sonic disassemblies assemble into ROMs byte-identical to the retail games7.

Every claim on this page links to its receipt, and every receipt names its sources: the manuals, the real binaries, the photographs, the numbers we measured. Where nothing could tell us, the receipt says we invented it.

  1. 4Written from scratch, other emulators only as oracles

    • our calldecisions.md 2026-10-27, "Our own Genesis emulator in TypeScript, other emulators only as test oracles"
  2. 5A 68000 that passes 317,500 of 317,500 test vectors

    • oracleSingleStepTests 680x0 JSON vectors
    • measured317,500/317,500 incl. cycles and bus order; lead reran
    • built in d65968a
  3. 6FM synthesis that matches the die, sample for sample

    • oracleNuked-OPN2 (github.com/nukeykt/Nuked-OPN2), built natively as an oracle only, never shipped
    • measuredfm-compare on s2-cnz.log: 100.00% exact on ch1–6, L, R; lead reran
    • built in 1855e02
  4. 7Four Sonic games, rebuilt bit for bit

    • measuredpackages/asm test:disasm, 4/4 md5 matches; lead rebuilt S1 from a clean copy
    • oracleFlamewing’s asl and Clownacy’s p2bin, as used by the sonicretro disassemblies
    • built in ed5a2b8

The room

The 486 with its beige monitor showing the NetWare login, the Console Interface’s red LEDs, and the small TV showing Marble Zone, its purple light falling across the desk

It is a desk in a games studio, late. A beige 486 with a 14-inch colour display, a small TV with rabbit ears, a Genesis with its lid off, a grey box with red lights between them. The manuals are stacked under the lamp, the corkboard holds VDP register notes, and two sticky notes on the monitor say SCSILINK 390 and BACKUP! before SNMAKE.

The room is lit by one lamp and the two screens8, and the TV really lights the desk with whatever the Genesis is drawing. Marble Zone turns the wood purple. With nothing downloaded, the TV shows black, not snow9: the console is on and driving the screen, it just has nothing to draw yet.

  1. 8One lamp, two CRTs

    • our callui.md north star
    • built in 738208a
  2. 9No program, no snow

    • our callplans Ledger 2026-10-28
    • built in e0dccea
In the ROM52, 0, 172
Without the fix50, 28, 177
On the TV50, 2, 176
Sonic 1’s title sky, measured on the TV in the room10

A 3D room is usually a few steps from the real colours. Film-style tone mapping, the trick that makes a lamp-lit room look right, pushes saturated blues toward lavender, and Sega’s blues are as saturated as blues get. So each screen corrects for it before the tone mapper sees it, and the sky behind Sonic 1’s title reaches the TV within 4 levels of the ROM10. Switch the correction off and the same sky picks up 28 levels of green and washes out.

The monitor is a curved tube, and you can use it. Pull the chair in and the mouse works the 486 through the glass: each click is traced onto the curved surface and the barrel distortion undone11, so every corner of the 720×400 text screen lands within a pixel.

  1. 10The screens keep their real colours

    • measuredstory agent, TV-focused frame with and without the correction, 214 sky patches averaged
    • measureddesk agent, frame vs source comparison (52,1,182, a different capture)
    • built in d49e857
  2. 11The mouse goes through curved glass

    • measuredcorner clicks report (0.0014, 0.0016) … (0.9986, 0.9984)
    • built in 8f50d00

The PC and DOS

The monitor during POST: AMIBIOS (C)1992 American Megatrends Inc., BIOS Release 11111992, 08192KB OK, Hit <DEL> if you want to run SETUP, and the BIOS ID string along the bottom

The PC is a 486DX2-66 with 8 MB of RAM, and it starts the way they did. The memory count climbs to 08192KB, “Hit <DEL> if you want to run SETUP” waits a moment, and the BIOS ID string sits along the bottom of the screen: a 1992 AMIBIOS, release 11/11/9212. Then the System Configuration box.

The CMOS clock says Monday, December 6, 19931, and it moves on one day for every day that passes outside.

  1. 12The 486 POSTs like a 1992 AMIBIOS

    • documentAMIBIOS 1992–93 strings from period manuals (research §6)
    • inventedthe exact order and timing for this particular 486DX2-66 board
    • built in 039c9ab
66 MHz, then 999 with TURBO on, a stretch we own up to13

Programs on the 486 charge their work to its clock, and its disk to the disk’s speed. A 6 MB file takes Brief about seven seconds to open13, as it would have. The TURBO button on the case is the one concession: press it and the 486 runs as fast as your computer can. A real turbo button only switched between full speed and a slower mode for old software, so the receipt marks ours as invented.

  1. 13Real 486 time, and a TURBO button

It boots MS-DOS 6.0. CONFIG.SYS loads HIMEM 3.09 and EMM386 4.4514, and AUTOEXEC.BAT starts SMARTDRV 4.1, the mouse driver, DOSKEY, the network and SCSILINK, each printing its own banner. Mistype a line in CONFIG.SYS and DOS tells you in its own words.

Those words are the real ones. Every message comes from the 03-10-93 binaries2, which is why DIR prints 204173312 bytes free with no commas: 6.0 had no thousands separators. MEM uses 6.0’s column layout, not 6.2’s wider one. And every program on C: is its real size15, COMMAND.COM’s 52925 bytes included, so DIR, MEM and CHKDSK all add up.

  1. 14A real boot

    • binarydriver banners from the 6.0 binaries
    • built in 0051275
  2. 15The programs on disk are the real size

    • our callbrief-dos.md: executables are MZ stubs carrying their program id

The network

The monitor after login: NetWare Ethernet NE2000 V1.03EC, NetWare V3.32 Workstation Shell (930217), Running on DOS V6.00, Attached to server STUDIO, Monday December 6, 1993, Good evening, SAL., Drive F: = STUDIO\SYS: \, and the search drive S1: = Z:. [STUDIO\SYS: \PUBLIC]

A studio’s source code didn’t live on one programmer’s disk. It lived on the Novell server down the hall, and AUTOEXEC.BAT joins it. The NE2000 card’s driver loads, then IPX, then the NetWare shell, NETX v3.32, dated 9302173. LOGIN SAL runs the system login script, the server says “Good evening, SAL.”, and F: becomes STUDIO\SYS:, the shared drive with everyone’s work on it.

C:The IDE disk in the 486
Transfer
about 1 MB/s
Opening a file
25 ms
SMARTDRV 4.1
a second read is free
F:STUDIO\SYS: on the NetWare server
Transfer
600 KB/s
Each request
2 ms
SMARTDRV 4.1
never caches it

Both drives cost what they cost. Every read and write is charged its transfer time16: the IDE disk streams about a megabyte a second, F: about 600 KB, close to what people measured on period machines. SMARTDRV caches C: and never the network, so a file read twice from C: is free the second time, and one on the server never is.

  1. 16The hard disk and the network cost what they cost

    • webRichard Reiner, comp.unix.sysv386, 13 Mar 1991: 950 KB/s from IDE drives on ISA 386-33s
    • webJoe Doupnik, NetWare FAQ (1996): a NetWare 3.12 client on a 486DX2-66 peaked at 680 KB/s
    • documentIntel i486 Microprocessor Programmer’s Reference Manual (1990), appendix E instruction timings
    • inventedthe 25 ms access time is a round 1993 figure, not one drive’s; 2 ms per NetWare request
    • built in 043ba02

The server is also where the 1993 studio meets 2026. The Sonic disassemblies on GitHub use long file names with spaces, and DOS 6 only knows eight letters and three. NetWare 3.12 had an answer: OS2.NAM17, a long-name space on the server, with Novell’s own rules for the short name DOS sees.

Novell’s rules cut a long name to eight letters, and number the ones that collide: THISISTH, THISIST0, THISI001. That is what DOS sees, while programs on the 486 can open the real names, so the tree on F: matches GitHub byte for byte. Your browser fetches the repository straight from GitHub, and the site never hosts it. Sonic 1’s disassembly comes in as 951 files, 34.7 MB, in 9.2 seconds.

  1. 17Modern repositories in a 1993 file system

The Bring a disassembly card open over the room, listing sonicretro/s1disasm, s2disasm and skdisasm with a GitHub URL field, partway through an import: F:\S1DISASM, 512 of 951 files

In the room, an import starts at a box of 3½-inch disks marked SOURCE18, sitting on the Console Interface. Click it and a card opens: pick one of the three Sonic disassemblies or paste any GitHub URL, and watch the files land on F:. It never writes over a folder that’s already there. The card is the room’s one modern surface, and it looks modern on purpose.

  1. 18A box of disks brings the source in

    • our calldecisions.md 2026-10-28 (Sal’s call)
    • measureda real s1disasm import through the card in /desk: 951 files, done at 11.4 s (turbo)
    • documentECMA-147: a 3½" disk is 90 × 94 × 3.3 mm, so the box is 10 cm tall
    • built in d127880

The Genesis

The opened Genesis on the desk, its green board bare, the ribbon from the Console Interface running into the SNASM pod where the 68000 was, lit white by the SEGA logo on the TV behind it

Take the lid off a Genesis and there are two computers inside. A Motorola 68000 runs the game. A Zilog Z80 runs the sound from its own 8 KB of RAM. Between them sits the VDP, Sega’s video chip, with 64 KB of video memory of its own.

Both processors are ours, and both have been run through SingleStepTests, a public suite of single-instruction tests, every last one of them. The 68000 passes 317,500 of 317,5005, with exact cycle counts and its bus reads and writes in the right order. The Z80 passes 1,604,000 of 1,604,00019. The 68000 core runs 252 million cycles a second, the Z80 447 million T-states, so a whole console costs your browser very little.

  1. 19The Z80 sound CPU: 1,604,000 of 1,604,000

    • oracleSingleStepTests Z80 JSON vectors
    • measured1,604,000/1,604,000; lead reran
    • built in 1442163
68000 bus: 68000, main CPU, 8 MHz, here: the SNASM pod; 64 KB RAM, work RAM; ROM area, the cartridge’s place, here: the Console Interface; VDP, YM7101, 64 KB VRAM, 320 × 224. Z80 bus: Z80, sound CPU, 4 MHz; 8 KB RAM, sound RAM; YM2612, 6 FM channels, stereo; PSG, TI 76489. Z80 can access ROM data.Z80 can access ROM data68000 bus68000main CPU, 8 MHzhere: the SNASM pod64 KB RAMwork RAMROM areathe cartridge’s placehere: the ConsoleInterfaceVDPYM710164 KB VRAM320 × 224Z80 busZ80sound CPU, 4 MHz8 KB RAMsound RAMYM26126 FM channelsstereoPSGTI 76489
From Sega’s Genesis Technical Overview, February 28, 199020, in the Genesis Software Manual

The VDP is where Sonic lives, and Sonic games lean on it hard. They change the palette halfway down the screen and split it in two. Our YM7101 handles the tricks the games really use21: Labyrinth Zone’s water turns the palette on the very scanline its interrupt fires on, Sonic 2’s two-player mode runs in interlace at 320×448, and Sonic 3 & Knuckles renders its title and Angel Island right. The whole console, VDP included, runs a frame of Sonic 1 in about 2 ms, an eighth of the 16.7 ms a frame lasts.

  1. 20The board as Sega described it to developers

    • scanGenesis Software Manual (rev. 02/19/92): Genesis Technical Overview, pp. 3–4; VRAM in the VDP chapter
  2. 21The YM7101 VDP, mid-frame tricks included

    • measuredVDP milestone shots of S1, S2 and S3K, read by the lead; 254 tests
    • measuredpackages/genesis scripts/run-rom.ts, s1built.bin for 900 frames under Bun on the lead’s machine: 2.15 ms/frame mean, 3.73 ms p95
    • built in 126c819
Sonic 1, Labyrinth Zone: the water line crosses the screen, the palette greener below it
Sonic 1, Labyrinth Zone
Sonic 2, two-player Emerald Hill: Sonic’s and Tails’ halves of the screen, one above the other
Sonic 2, two players, 320×448
Sonic 3 & Knuckles, Angel Island: Sonic and Tails by a waterfall in the burnt jungle
Sonic 3 & Knuckles, Angel Island

The sound

The Genesis sound is a Yamaha YM2612, six channels of FM synthesis, plus a PSG for square waves and noise, which Sega’s manual calls a Texas Instruments 76489 and which is built into the VDP22. The Z80 drives both, running the game’s sound driver from its 8 KB of RAM while the 68000 gets on with the game. The YM2612 is a hard chip to get right, and its quirks are part of the music.

So ours was checked against Nuked-OPN2, an emulator traced from the chip’s die6, used only as an oracle and never shipped. Seven recordings went through both: the SEGA chant, Green Hill, Labyrinth, Emerald Hill, Casino Night, the Sonic 3 & Knuckles title and Angel Island. Every channel and both outputs match on every sample.

  1. 22The PSG: a TI 76489 in Sega’s manual, inside the VDP on the board

Sonic 2, Casino Night Zone2,666,785 samples, 50.1 s
streammatching Nuked-OPN2
ch1100.00%
ch2100.00%
ch3100.00%
ch4100.00%
ch5100.00%
ch6100.00%
left100.00%
right100.00%

Matching the samples isn’t enough on its own, because sound drivers don’t just write to the chip, they wait on it. They spin on its busy flag and its two timers, so both are exact to the cycle23: busy rises two chip cycles after a write, as it does on the die.

  1. 23Busy flag and timers, cycle-exact

    • oracleexpected cycles from a Nuked-OPN2 harness
    • built in 1855e02
  1. YM2612
    six FM channels
  2. Ladder effect
    the discrete chip’s crossover distortion
  3. PSG mixed in
    at 1/6.4 of an FM channel’s level
  4. Low-pass
    first order, 2.84 kHz

Then the sound leaves the chips, and a real Genesis colours it on the way out. The studio’s console is a model 1, so the output goes through the model 1’s analog path24: the discrete YM2612’s ladder effect, a first-order low-pass at 2.84 kHz, and the PSG mixed in at the level the board gives it.

  1. 24It sounds like a model 1

    • webConsoleMods and James-F’s measurements of the VA3–VA6 audio circuit
    • webTmEE’s hardware level figure (gendev forum, p=21682)
    • built in 1855e02

The cable

The right side of the desk: the Console Interface with its red LEDs, a grey ribbon running to the opened Genesis board, and the TV showing Green Hill Zone

Picture a Genesis dev kit and you probably picture a cartridge in the slot. That is the SNASM2 GENerator, and it is a 1995 product25. In autumn 1993 a studio did something more drastic. It opened the console, pulled the Motorola 68000 out of its socket and seated the SNASM pod in its place. A ribbon ran from the pod to a grey box from Cross Products: the Console Interface.

  1. 25December 1993, so the dev kit plugs into the CPU socket

The Console Interface with its red LEDs lit, and a flat ribbon cable running across the desk into the bare Genesis board

The box stands in for the cartridge. Cross Products sold it with 1, 2, 4 or 8 MB of static RAM, and this studio’s has 4 MB26, enough for Sonic 3 & Knuckles. Battery-backed RAM sits above it at $400000, and the link software keeps the top kilobyte of it for itself.

It has four red LEDs: ACTIVE, WR PROT, PWR ON and DC PWR. At power-on WR PROT lights for about a second27 beside the two power lights. ACTIVE flickers while the link moves data, and while a downloaded game runs all four stay lit: the image is write-protected, the way a cartridge’s ROM is.

  1. 26The 4 MB Console Interface, so Sonic 3 & Knuckles fits

    • documentSNASM2 manual: memory units and battery RAM placement
    • our calldecisions.md, "The studio’s Console Interface is the 4 MB unit"
    • built in d853952
  2. 27WR PROT blinks at power-on

486DX2-66, SNASM card at port 390, SCSI ID 6; SCSI at 300 KB/s to Console Interface, Cross Products, 4 MB static RAM, battery RAM at $400000; ribbon to Genesis, SNASM pod in the 68000 socket, SCSI target 7; composite to TVSCSI300 KB/sribboncomposite486DX2-66SNASM card at port 390SCSI ID 6Console InterfaceCross Products4 MB static RAMbattery RAM at $400000GenesisSNASM pod in the68000 socketSCSI target 7TV

The PC reaches the box over SCSI. AUTOEXEC.BAT loads the ISA card’s driver with SCSILINK 39028, the PC is SCSI ID 6, and the Genesis answers as target 7, which is why every download command on the desk ends in t7:.

A download takes as long as it did then, at 300 KB a second29. Sonic 1 is on the TV in about two seconds, Sonic & Knuckles on its own, 2 MB, in about seven, and all 4 MB of Sonic 3 & Knuckles in about fourteen.

  1. 28The ISA card at 390, the PC at SCSI ID 6, the Genesis at target 7

    • documentSNASM2 manual: SW5–8 = address, default $390; SW1–3 = SCSI ID 6; "PC’s SCSI ID=6, Timer Version 1.00"
  2. 29Downloads run at the real 300 KB per second

    • documentSNASM2 brochure (7/95): "Genuine download speed 300k per second"
    • measureda 1 MB download lands within 1% of 300 KB/s in machine time (packages/link tests)
    • built in d853952
  3. 30Sonic & Knuckles, built on the 486 and sent over the link in one take

    • measuredthe raw recording: “Downloading SKBUILT.BIN $000000-$1FFFFF 2048K” counts from 128K to 2048K between 16.7 s and 23.5 s; __desk.sincePowerOn rose with wall time across the take (no reload)
    • built in 1914be3

The debugger gets into the game through code the link puts on the console. That code owns the 68000’s exception vectors 2 through 9 and 32, and a game had to execute trap #0 regularly, usually in its vertical-blank handler. A game that didn’t couldn’t be stopped31: press Esc in the debugger and nothing happened. We kept that. Breakpoints still work32, because a breakpoint is an ILLEGAL instruction written over your code.

When the debugger does stop a game, only the 68000 stops. The VDP keeps the frozen frame on the TV, the Z80 keeps running the sound driver, and any FM note that was held keeps sounding33.

It doesn’t have to stop the game to change it. With Sonic 1 running, SNBUG68K’s Memory window goes to $FFF760, the word the game reads for Sonic’s top speed. Type 1800 over the 060034, and the next time he runs, he runs four times as fast.

  1. 31A game that never calls trap #0 cannot be stopped

    • documentSNASM2 manual: target-side link code, vectors 2–9 and 32, KeepTraps in startup.68k
    • built in d853952
  2. 32A breakpoint stops Sonic 1 in its vertical-blank handler

    • measuredpackages/software snbug.test.ts F7 (the stop reaches the screen with no further key); the room check, shot 02-breakpoint
    • built in 8a66052
  3. 33A halted Genesis keeps singing

    • our callbrief-link.md: the monitor spins at SR $2700 while the rest of the machine runs
    • built in d853952
  4. 34Sonic’s top speed, changed while the game runs

    • measuredthe room check, shots 03-live-edit and 03b-live-edit-memory
    • oracles1disasm: the RAM labels v_sonspeedmax and v_sonspeedacc, and the values Sonic’s code sets
    • built in 8a66052
SNBUG68K on the 486 with its Code, Registers and Memory windows, attached to Sonic 1 running in Green Hill Zone on the TV

And the box was never switched off35. It keeps your last download between sessions, so you sit down to whatever you last built, running from its reset. A console that has never been sent anything shows black.

  1. 35The box was never switched off

    • our callplans Ledger 2026-10-28: the Console Interface keeps its last download
    • built in d853952
The TV close up, showing Sonic 1’s Green Hill Zone Act 1 title card

The tools

Brief 3.1 on the 486’s monitor in white on blue, open on F:\S1DISASM\sonic.asm at line 1895: the Title screen banner, GM_Title stopping the music and fading out the last game mode, then the VDP setup for SONIC TEAM PRESENTS

Code was written in Brief, the programmer’s editor of the day, white text on a blue screen. This is Brief 3.1, from 1991. SNASM fitted itself into it: Alt+F9 for the SNASM menu, Alt+F10 to make, Ctrl+F10 to debug36.

  1. 36Brief, the editor studios used

    • documentSNASM68K 1991 manual: INSTALL adds load_macro("snasm") to startup.cb
    • interviewExodus: "The use of Brief was commonplace"

The Sonic games themselves come from the fan disassemblies, which turn the retail ROMs back into labelled, commented source. They build with the AS macro assembler and p2bin, so the studio has both, rewritten from scratch in TypeScript. They don’t approximate the originals. They rebuild all four games byte-identical to retail7.

Underneath that, every one of the 68000’s 60,000-odd encodings assembles back to the same bytes37, and the Kosinski and Saxman compressors the games use match the real tools byte for byte.

And they build on the 486, in its time. Brought in through the SOURCE box, Sonic 1 builds at F:\S1DISASM with the repo’s own build.lua, lua.exe, asw.exe and p2bin.exe, through SNMAKE, in about three minutes with TURBO off38, the assembler running at the speed its own benchmark gives a 486DX2-6639. The scripts only reach for their Windows tools when they see two lines in AUTOEXEC.BAT40, so the studio’s has them, under a REM saying why.

  1. 37Every 68000 opcode round-trips

    • measuredpackages/asm unit tests (38)
    • built in ed5a2b8
  2. 38Sonic 1 builds on the 486 from its own repo

    • measuredpackages/software src/toolchain/toolchain.test.ts (all four ROMs retail) and timing.test.ts (the modelled times); the room check: SOURCE box → SNMAKE → Sonic 1 on the TV
    • oraclethe repos’ own build.lua and build_tools binaries, md5s pinned in toolchain/known.ts
    • built in c66ea2e
  3. 39The assembler runs at a 486DX2-66’s speed, from its own benchmark

    • documentAS’s BENCHES file (Alfred Arnold’s AS distribution), the i486DX2/66.7 row (Asus SP3G-PVI, 10 Feb 2000)
    • measuredpackages/software toolchain/timing.test.ts asserts 18,416
    • built in 0977189
  4. 40Two lines in AUTOEXEC.BAT let the build find its tools

    • oraclebuild_tools/lua/get_os_name.lua in s1disasm, s2disasm and skdisasm
    • measuredpackages/software toolchain test without the two SETs
    • built in 94fe5aa
rebuilt ROMMD5, as retail
Sonic the Hedgehog09dadb50…
Sonic the Hedgehog 29feeb724…
Sonic the Hedgehog 3d724ea4d…
Sonic & Knuckles4ea493ea…

A built ROM still has to reach the console. That takes one line at the DOS prompt, SNGRAB S1BUILT.BIN /R41, which sends it down the cable and starts it. SNGRAB speaks the manual’s command-file language too, and SNTEST checks the card line by line and reports “PC card address is 0x390”.

  1. 41SNGRAB S1BUILT.BIN /R

    • documentSNASM2 manual: SNGRAB and SNTEST chapters
    • inventedSNGRAB’s progress count and messages, SNTEST’s wording outside its checklist, the int 7Dh error numbers
    • measuredpackages/software snasm tests: S1 downloaded by SNGRAB reaches the SEGA screen; 300 KB/s within 1%
    • built in 564f25e

The manuals

The stack of books under the lamp: the MS-DOS 6 User’s Guide on top, then Motorola’s M68000 Family Programmer’s Reference Manual, Sega’s Genesis Software Manual and the SNASM2 68000 Development System User’s Manual

In 1993 the documentation was paper, and the team worked with it open beside the keyboard. Four books sit under the lamp: the SNASM2 user’s manual from Cross Products, Sega’s Genesis Software Manual, Motorola’s M68000 Programmer’s Reference Manual and the MS-DOS 6 User’s Guide. Pick one up and it opens in your hands. The pages turn, the tabs take you to a chapter, and the cross-references work.

They are set the way their publishers set them. Sega’s manual is in Helvetica42, because the scans are. And they are right where it matters to a programmer: the VDP register pages are right to the bit43. Mode register 2 has DISP, IE0, M1 and M2 where the hardware has them, H40 needs RS0 and RS1 set together, and every page carries the footer CONFIDENTIAL and PROPERTY OF SEGA. The MOVE examples in the Motorola book encode to the real bytes.

The scans they were checked against are not on this site. They live in public archives such as Sega Retro.

  1. 42The manuals are typeset in each publisher’s house style

    • scanGenesis Software Manual scan, p23 and the VDP register page
  2. 43The VDP register pages are right to the bit

    • scanGenesis Software Manual scan (register pages, page footers)
    • documentMotorola M68000 Family Programmer’s Reference Manual, MOVE
    • measuredlead read the rendered pages against the hardware register map and hand-checked the encodings
    • built in b482148
The Genesis Software Manual open at the VDP registers: mode set registers 2, 3 and 4 with their bit diagrams on the left page, the table base addresses and the background colour register on the right

Why it matters

317,500
of 317,500
5
68000 test vectors, cycles and bus order included
2,666,785
of 2,666,785
6
YM2612 samples of Casino Night matching the die-traced Nuked-OPN2
4
of 4
7
Sonic ROMs rebuilt byte-identical to retail

Emulators usually stop at the console. This one keeps going: the PC beside it, the network it saved to, the cable that carried every build, the editor, the debugger and the books. Those were the tools of a trade that lived inside studios and left behind little more than scanned manuals and people’s memories.

None of it is borrowed. The 486, DOS, the Genesis and the tools are our own TypeScript4, and every one was held to something outside itself: test suites, a chip traced from its die, the retail ROMs, the real DOS binaries, the manuals. Where nothing could tell us, the receipt says invented. Then you can sit down at it.