# Stack-Up (JU) ## Status **Pass 3 complete; promoted.** `prg.s` is a traced disassembly with all address-derived labels replaced, all `jsr`/`jmp` operands symbolic, hardware registers named via `symbols.inc`, and `apply_symbols.py` reporting 0 residue. Code coverage: 10,586 / 32,768 bytes (32.3%). `make` assembles and verifies byte-identical to `rom.nes`. ## ROM | Property | Value | |----------|-------| | Format | iNES | | Mapper | 0 (NROM) | | PRG | 32 KB | | CHR | 8 KB | | Mirroring | Horizontal | | NMI vector | $81AD | | RESET vector | $8100 | | IRQ vector | $81E6 | ## Power-on flow RESET enters at `$8100`: cld ; CPU:$8100 PRG:0100 D8 sei ; CPU:$8101 PRG:0101 78 ldx #$00 ; CPU:$8102 PRG:0102 A2 00 stx PPUCTRL ; CPU:$8104 PRG:0104 8E 00 20 stx PPUMASK ; CPU:$8107 PRG:0107 8E 01 20 lda PPUSTATUS ; CPU:$810A PRG:010A AD 02 20 bpl Reset_OnNonnegative ; CPU:$810D PRG:010D 10 FB dex ; CPU:$810F PRG:010F CA txs ; CPU:$8110 PRG:0110 9A ldx Zp2F ; CPU:$8111 PRG:0111 A6 2F ldy #$07 ; CPU:$8113 PRG:0113 A0 07 sty Zp01 ; CPU:$8115 PRG:0115 84 01 NMI handler at `$81AD`: pha ; CPU:$81AD PRG:01AD 48 txa ; CPU:$81AE PRG:01AE 8A pha ; CPU:$81AF PRG:01AF 48 tya ; CPU:$81B0 PRG:01B0 98 pha ; CPU:$81B1 PRG:01B1 48 lda #$00 ; CPU:$81B2 PRG:01B2 A9 00 sta OAMADDR ; CPU:$81B4 PRG:01B4 8D 03 20 lda #$02 ; CPU:$81B7 PRG:01B7 A9 02 ## Data-table inventory (Pass 3) - `$8000-$80FF` (256 bytes) - `CopyrightText` - `$82EA-$8309` (32 bytes) - `PlayerNameTable` - `$8827-$8875` (79 bytes) - `LevelHandlerPointerTable` - `$8BFD-$8C04` (8 bytes) - `BlockHeightTable` - `$8C3A-$8C69` (48 bytes) - `BlockPatternTable` - `$8FCF-$8FE3` (21 bytes) - `BlockShapeTable` - `$9017-$9066` (80 bytes) - `BlockLayoutTable` - `$9090-$9317` (648 bytes) - `BlockPlacementCode` - `$9344-$935D` (26 bytes) - `BlockAttributeTable` - `$943F-$99FD` (1471 bytes) - `BlockPointerTable` - `$9A2C-$9A96` (107 bytes) - `BlockColorTable` - `$9AB4-$9AC7` (20 bytes) - `BlockCountTable` - `$9C52-$9C5E` (13 bytes) - `BlockSizeTable` ## Build ``` Byte-identical ROM verified. ```