Project Plateau
Project Plateau: four glass plates, one living valley, and the road back to camp.
Warren Robinett's Adventure for the Atari 2600, translated from the original cartridge instruction by instruction and checked against the real ROM frame by frame.
GamesJavaScript · AssemblyGitHub @PlicerinOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Adventure (Atari 2600, 1980) translated into JavaScript instruction for instruction from the cartridge, verified against the real ROM frame by frame
Loading the full README.
Read the full README ↗Warren Robinett's Adventure (Atari, 1980), translated into JavaScript instruction for instruction from the original cartridge and checked against the real ROM frame by frame. Play it at https://plicerin.github.io/adventure-rom-port/.
The translated program runs on a model of the 2600's TIA (picture, collisions, sound registers) and RIOT (RAM, timer, joystick and console switches):
src/advRecomp.mjs: the cartridge's code, one case per instruction at its ROM address, with the disassembly's labels and comments and each instruction's cycle count. Generated by tools/recompile.mjs.src/advRomData.mjs: the cartridge's tables and graphics, i.e. the bytes no instruction occupies. The cartridge image itself is not included.src/vcsBus.mjs, src/tia.mjs, src/cpu6502.mjs: RAM, RIOT timer and switches, the TIA, and the 6502 registers and arithmetic. The game and the dev oracle share them.src/advMachine.mjs: the translated code on the bus, one frame per runFrame().src/advPlayer.mjs: canvas, keyboard, gamepad, touch buttons, the console switches and the TIA sound worklet (src/tiaSound.worklet.js).index.html: the site, with the game embedded. game.html: the game on its own.img/: the poster, room pictures, object plates and icons, rendered from the game by tools/gen-images.mjs.The engine is the one built for the Donkey Kong port; only the translated cartridge, its data and the player page differ.
python -m http.server 5502 --bind 127.0.0.1
Then open http://127.0.0.1:5502/. ES modules need a server; opening the file directly will not work.
Controls: arrows or WASD move, Space or Z drops what you carry, Enter is Game Reset, G is Game Select, P pauses, M mutes. The page also has buttons for both difficulty switches and the color/B&W switch. Gamepads work too (Start = Game Reset, Back = pause), and phones get touch buttons.
Needs DASM 2.20.17 in tools/dasm/. The ROM is assembled from adventure.asm and checked against the cartridge's MD5 (157bddb7192754a45372be196797f284); it lands in rom/ and tools/build/, both git-ignored.
powershell -File tools/build-rom.ps1 # assemble the disassembly; must match the cartridge's MD5
node tools/recompile.mjs # regenerate src/advRecomp.mjs and src/advRomData.mjs
node tools/verify-recomp.mjs 20000 1 cover # translation vs the real ROM, frame by frame
node tools/verify-tia.mjs 3000 1 # fast TIA model vs the per-pixel reference
verify-recomp runs the real cartridge on a 6502 interpreter (tools/atari/) next to the translation with identical inputs, including Game Select, Game Reset and the difficulty and color switches, and requires identical CPU registers, cycle counts, RAM, TIA write logs and pictures after every frame. With cover, identical RAM pokes in both machines move the player to random rooms and put the chalice in the gold castle now and then. 100,000 frames over five seeds show no differences, across all three games, 48 wins and 33 players eaten.
archive_old_port/ holds the previous hand-written port (renderer, physics and room data rebuilt from the disassembly by hand) and its tooling, for reference.
Adventure is © 1980 Atari, designed and programmed by Warren Robinett. This is an unofficial preservation project, not affiliated with Atari. adventure.asm is a community disassembly of the cartridge. Colors are from Stella's NTSC palette; the sound worklet follows Ron Fries' TIASound.