Tetris (NES):ROM map
From Data Crystal
All addresses are in CPU address space, not iNES file space. Subtract $7FF0 for addresses within the iNES file, or use a more sophisticated algorithm for addresses within the UNIF file.
; Code: reset = $FF00 main = $8000 soundWaitVBL = $AA45 ; Run sound code and wait for vblank NMI turnOnNMI = $AA6B ; Turn on interrupt at scanline 241 turnOffNMI = $AA78 ; Turn off interrupt at scanline 241 clearNametable = $AA82 ; Clear nametable whose base address is A clearVRAM = $AC1C ; If A < $1F, clear Y pages of VRAM to X ; Otherwise, clear 4 pages of VRAM to X and clear attribute table to Y clearRAM = $AC6A ; Clear pages X to Y of CPU RAM to value in A switch = $AC82 ; Jumps to the Ath 16-bit address in the following jump table, ; similar to the "magic jump" in Super Mario Bros. playSound = $E000 ; Appears to be sound code, called every frame ; Data: tetriminoTable = $8A9C ; Each piece is encoded as a sequence of 12 bytes that can be broken down ; into triplets (Y, tile, X) describing each square within the piece. Hex ; coordinate values above $7F represent negative integers ($FF = −1 and $FE = −2). spawnTable = $994E ; 02 07 08 0A 0B 0E 12; offsets into tetriminoTable for spawning each Tetrimino type scoreIncTable = $9CA5 ; 40 00 00 01 00 03 00 12 (1 = 40, 2 = 100, 3 = 300, 4 = 1200); read by 9C3B: LDA $9CA5,X levelNumTable = $96B8 ; 00 01 02 03 ... 26 27 28 29; the code erroneously reads past this table for level 30+ initHiScores = $AD67 ; High score table, copied to $0700 on boot