Pass 2 _wip: Slalom (U), Kung Fu (U), Othello (U) label replacement complete

Pass 3 _wip: Slalom (U), Kung Fu (U), Othello (U) semantic naming complete
Pass 3 _wip: apply symbols (0 residue) for Slalom (U), Kung Fu (U), Othello (U)
Pass 2/3 _wip: 10 NROM projects (Elevator Action, 1942, Tag Team Wrestling, Galaga, Kung Fu a1, Stack-Up, Magmax, Ms Pac-Man Namco, Soccer, Sqoon)
Promote 13 _wip/NROM projects to NROM/ (Slalom, Kung Fu, Othello, Elevator Action, 1942, Tag Team Wrestling, Galaga, Kung Fu a1, Stack-Up, Magmax, Ms Pac-Man Namco, Soccer, Sqoon)
Pass 2/3 _wip: 5 CNROM games (Tiger-Heli, Paperboy, Last Starfighter, Mighty Bomb Jack, Kung-Fu Heroes)
Docs: document CDL capture + re-trace workflow in TODO.md
Adds more code for
 - Elevator Action (U)
 - Kung Fu (U)
 - Othello (U)
 - Slalom (U)
 - Sqoon (U)
This commit is contained in:
tmerritt committed 2026-10-21 14:42:00 -04:00
1 parent f8d62601e5
commit 0a49ee6da7
228 files changed
+101961 -37231

No files matched your search

+25
View File
@@ -0,0 +1,25 @@
CA65 ?= ca65
LD65 ?= ld65
all: reconstructed.nes verify
prg.o: prg.s symbols.inc locals.inc prg.bin
$(CA65) -g -o $@ $<
header.o: header.s header.bin
$(CA65) -g -o $@ $<
chr.o: chr.s chr.bin
$(CA65) -g -o $@ $<
reconstructed.nes: header.o prg.o chr.o linker.cfg
$(LD65) -C linker.cfg -m reconstructed.map -Ln reconstructed.lbl -o $@ header.o prg.o chr.o
verify: reconstructed.nes rom.nes
cmp reconstructed.nes rom.nes
@echo "Byte-identical ROM verified."
clean:
rm -f *.o reconstructed.nes reconstructed_prg.bin reconstructed.map reconstructed.lbl
.PHONY: all verify clean
+67
View File
@@ -0,0 +1,67 @@
# Ms Pac-Man (Namco) (U)
## Status
**Pass 3.** All address-derived `Label_XXXX` definitions replaced;
every `jsr`/`jmp` operand symbolic; hardware-register operands resolved
via `apply_symbols.py` (0 residue); audit comments aligned; `make`
stays byte-identical.
`make` assembles `header.s`, `prg.s`, `chr.s`, links them with `ld65` and compares the
result against `rom.nes`:
```
Byte-identical ROM verified.
```
## ROM
| Property | Value |
|----------|-------|
| Format | iNES |
| Mapper | 0 |
| Board | NROM-256 |
| Mirroring | Horizontal |
| Four-screen VRAM | no |
| Battery | no |
| PRG | 32 KB (2 x 16 KB), mapped at CPU $8000-$FFFF |
| CHR | 8 KB (1 x 8 KB) |
| Trainer | none |
| Footer | none |
| NMI vector | $C107 |
| RESET vector | $FFF7 |
| IRQ vector | $C198 |
| ROM file | `Ms Pac-Man (Namco) (U).nes` |
| SHA-256 | `c47ffe87736f5bc98049d9ff955077d4443acb516dbe24e5c9612b615eebcfe2` |
### Header notes
- none
## Open work
- **Pass 1** - run `nesdis.py` over `prg.bin` to produce the code/data
split. The tracer reads the vectors from the last six bytes of the PRG
image, so the split seeds correctly.
- **Pass 1** must emit the canonical audit comment
`; CPU:$C123 PRG:0123 AD 21 03` at column 35 for every instruction.
- **Pass 2** - replace the address-derived `Label_XXXX` names and the raw
`$XXXX` call operands.
- **Pass 3** - semantic zero-page aliases (applied only at the sites where
their role is proven) and named data tables.
- **Promotion** to `NROM/<name>/` once Pass 3 is done, as `git mv`.
## Files
| File | Purpose |
|------|---------|
| `prg.s` | Pass 0 PRG include (replaced by the Pass 1 disassembly) |
| `header.s` | iNES header include |
| `chr.s` | CHR include |
| `prg.bin` | 32768 bytes (32 KB) PRG image |
| `chr.bin` | 8192 bytes (8 KB) CHR image |
| `rom.nes` | byte-identical copy of the original ROM |
| `linker.cfg` | HEADER / PRG / CHR memory areas |
| `symbols.inc` | NES hardware register names |
| `locals.inc` | zero-page aliases (empty at Pass 0) |
| `Makefile` | build and byte-identity check |
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
.segment "CHR"
.incbin "chr.bin"
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
.segment "HEADER"
.incbin "header.bin"
+197
View File
@@ -0,0 +1,197 @@
FFF7 Reset
C107 NmiHandler
C198 IrqHandler
# ---- derived internal branch-target names ----
C004 Sub_C004
C018 Sub_OnNonzero
C01D Sub_OnNonnegative
C030 Sub_OnNonzero2
C03F Sub_OnNonzero3
C04A Sub_OnNonzero4
C05A Sub_OnNonzero5
C068 Sub_OnCarryClear
C073 Sub_Loop
C075 Sub_OnCarryClear2
C093 Sub_C093
C0AF Sub_Loop2
C0BE Sub_Loop3
C0C4 Sub_Loop4
C0CB Sub_Loop5
C0D4 Sub_Loop6
C107 NmiHandler
C11A NmiHandler_Loop
C130 NmiHandler_Loop2
C142 NmiHandler_Loop3
C15F Sub_C15F
C165 Sub_C165
C17D NmiHandler_Loop4
C183 Sub_C183
C198 IrqHandler
C199 Sub_C199
C1A3 Sub_C1A3
C1C9 Sub_C1C9
C1D4 IrqHandler_OnNonzero
C1F5 Sub_C1F5
C201 Sub_C201
C203 IrqHandler_OnNonnegative
C213 Sub_C213
C215 IrqHandler_OnNonnegative2
C222 Sub_C222
C246 IrqHandler_Loop
C24E IrqHandler_OnCarryClear
C259 IrqHandler_OnZero
C267 IrqHandler_OnNonzero2
C26D IrqHandler_OnCarryClear2
C278 IrqHandler_Loop2
C279 IrqHandler_Loop3
C28F IrqHandler_Loop4
C292 Sub_C292
C2AC IrqHandler_Loop5
C2B2 IrqHandler_Loop6
C2C8 Sub_C2C8
C2D6 IrqHandler_OnOverflowSet
C2E2 IrqHandler_Loop7
C2F7 IrqHandler_Loop8
C310 IrqHandler_Loop9
C319 IrqHandler_Loop10
C31E IrqHandler_Loop11
C32D IrqHandler_Loop12
C331 IrqHandler_Loop13
C341 IrqHandler_Loop14
C348 Sub_C348
C35D IrqHandler_OnOverflowSet2
C36A IrqHandler_Loop15
C370 IrqHandler_Loop16
C373 Sub_C373
C378 IrqHandler_Loop17
C37D IrqHandler_Loop18
C393 IrqHandler_OnCarryClear3
C39A Sub_C39A
C3A2 IrqHandler_Loop19
C3C3 Sub_C3C3
C3C8 IrqHandler_OnZero2
C3D6 IrqHandler_Loop20
C3DA IrqHandler_Loop21
C3F8 IrqHandler_Loop22
C406 IrqHandler_OnNonzero3
C410 Sub_C410
C412 Sub_C412
C419 IrqHandler_OnCarryClear4
C436 Sub_C436
C443 IrqHandler_Loop23
C450 Sub_C450
C45A IrqHandler_Loop24
C460 IrqHandler_OnOverflowSet3
C468 IrqHandler_OnCarryClear5
C486 IrqHandler_Loop25
C48A Sub_C48A
C4DB Sub_C4DB
E82F Sub_E82F
E867 IrqHandler_Loop26
E86F IrqHandler_Loop27
E878 IrqHandler_Loop28
E87F IrqHandler_Loop29
E888 IrqHandler_OnNonzero4
E890 IrqHandler_Loop30
E898 Sub_E898
E8AA IrqHandler_Loop31
E8AD IrqHandler_Loop32
E8C9 IrqHandler_Loop33
E8F4 IrqHandler_Loop34
E8FB IrqHandler_Loop35
E8FE Sub_E8FE
E937 IrqHandler_Loop36
E93E IrqHandler_OnNonnegative3
E958 IrqHandler_Loop37
E981 Sub_E981
E98E IrqHandler_Loop38
E996 IrqHandler_Loop39
E9B7 Sub_E9B7
E9BF IrqHandler_Loop40
E9C9 Sub_E9C9
E9D3 IrqHandler_Loop41
EA4E Sub_EA4E
EA5B IrqHandler_Loop42
EA86 IrqHandler_Loop43
EA8B IrqHandler_Loop44
EAA2 IrqHandler_Loop45
EACA IrqHandler_Loop46
EAD5 IrqHandler_Loop47
EAE8 IrqHandler_Loop48
EAF1 Sub_EAF1
EAF3 Sub_EAF3
EB65 Sub_EB65
EB8C IrqHandler_Loop49
EB97 IrqHandler_Loop50
EBA1 Sub_EBA1
EBB2 IrqHandler_Loop51
EBBF IrqHandler_Loop52
EBD3 IrqHandler_Loop53
EBFA IrqHandler_Loop54
EC05 IrqHandler_Loop55
EC0F Sub_EC0F
EC25 IrqHandler_Loop56
EC32 IrqHandler_Loop57
EC46 IrqHandler_Loop58
EC60 IrqHandler_Loop59
EC67 IrqHandler_Loop60
EC69 IrqHandler_Loop61
EC71 IrqHandler_Loop62
EC7B IrqHandler_Loop63
EC9F IrqHandler_Loop64
ECAE IrqHandler_Loop65
ECB5 IrqHandler_Loop66
ECBA IrqHandler_Loop67
ECCF IrqHandler_Loop68
ECF9 IrqHandler_Loop69
ED04 IrqHandler_Loop70
ED17 IrqHandler_Loop71
ED28 IrqHandler_Loop72
ED2F IrqHandler_Loop73
ED31 Sub_ED31
ED3B Sub_ED3B
F087 Sub_F087
F0B7 IrqHandler_Loop74
F0D1 IrqHandler_Loop75
F0D6 Sub_F0D6
F0DC IrqHandler_Loop76
F0E4 IrqHandler_Loop77
F0F7 IrqHandler_Loop78
F0FC IrqHandler_Loop79
F105 IrqHandler_Loop80
F10A IrqHandler_Loop81
F113 IrqHandler_Loop82
F115 Sub_F115
F121 Sub_F121
F139 IrqHandler_Loop83
F140 IrqHandler_Loop84
F150 IrqHandler_Loop85
F157 IrqHandler_Loop86
F162 IrqHandler_Loop87
F18B IrqHandler_Loop88
F192 IrqHandler_Loop89
F19E IrqHandler_Loop90
F1A2 IrqHandler_Loop91
F1A5 Sub_F1A5
F297 Sub_F297
F2B8 Sub_F2B8
F2D1 Sub_F2D1
F2D5 IrqHandler_OnNonzero5
F2F1 IrqHandler_Loop92
F2F9 IrqHandler_Loop93
F30B IrqHandler_Loop94
F36C Sub_F36C
F3C9 IrqHandler_OnNonzero6
F3D1 Sub_F3D1
F42B Sub_F42B
F44E IrqHandler_Loop95
F450 IrqHandler_Loop96
F45E IrqHandler_Loop97
F468 IrqHandler_Loop98
F472 IrqHandler_Loop99
F47F IrqHandler_Loop100
F481 IrqHandler_Loop101
F48E IrqHandler_Loop102
F490 IrqHandler_Loop103
FFF7 Reset
1 FFF7 Reset
2 C107 NmiHandler
3 C198 IrqHandler
4 # ---- derived internal branch-target names ----
5 C004 Sub_C004
6 C018 Sub_OnNonzero
7 C01D Sub_OnNonnegative
8 C030 Sub_OnNonzero2
9 C03F Sub_OnNonzero3
10 C04A Sub_OnNonzero4
11 C05A Sub_OnNonzero5
12 C068 Sub_OnCarryClear
13 C073 Sub_Loop
14 C075 Sub_OnCarryClear2
15 C093 Sub_C093
16 C0AF Sub_Loop2
17 C0BE Sub_Loop3
18 C0C4 Sub_Loop4
19 C0CB Sub_Loop5
20 C0D4 Sub_Loop6
21 C107 NmiHandler
22 C11A NmiHandler_Loop
23 C130 NmiHandler_Loop2
24 C142 NmiHandler_Loop3
25 C15F Sub_C15F
26 C165 Sub_C165
27 C17D NmiHandler_Loop4
28 C183 Sub_C183
29 C198 IrqHandler
30 C199 Sub_C199
31 C1A3 Sub_C1A3
32 C1C9 Sub_C1C9
33 C1D4 IrqHandler_OnNonzero
34 C1F5 Sub_C1F5
35 C201 Sub_C201
36 C203 IrqHandler_OnNonnegative
37 C213 Sub_C213
38 C215 IrqHandler_OnNonnegative2
39 C222 Sub_C222
40 C246 IrqHandler_Loop
41 C24E IrqHandler_OnCarryClear
42 C259 IrqHandler_OnZero
43 C267 IrqHandler_OnNonzero2
44 C26D IrqHandler_OnCarryClear2
45 C278 IrqHandler_Loop2
46 C279 IrqHandler_Loop3
47 C28F IrqHandler_Loop4
48 C292 Sub_C292
49 C2AC IrqHandler_Loop5
50 C2B2 IrqHandler_Loop6
51 C2C8 Sub_C2C8
52 C2D6 IrqHandler_OnOverflowSet
53 C2E2 IrqHandler_Loop7
54 C2F7 IrqHandler_Loop8
55 C310 IrqHandler_Loop9
56 C319 IrqHandler_Loop10
57 C31E IrqHandler_Loop11
58 C32D IrqHandler_Loop12
59 C331 IrqHandler_Loop13
60 C341 IrqHandler_Loop14
61 C348 Sub_C348
62 C35D IrqHandler_OnOverflowSet2
63 C36A IrqHandler_Loop15
64 C370 IrqHandler_Loop16
65 C373 Sub_C373
66 C378 IrqHandler_Loop17
67 C37D IrqHandler_Loop18
68 C393 IrqHandler_OnCarryClear3
69 C39A Sub_C39A
70 C3A2 IrqHandler_Loop19
71 C3C3 Sub_C3C3
72 C3C8 IrqHandler_OnZero2
73 C3D6 IrqHandler_Loop20
74 C3DA IrqHandler_Loop21
75 C3F8 IrqHandler_Loop22
76 C406 IrqHandler_OnNonzero3
77 C410 Sub_C410
78 C412 Sub_C412
79 C419 IrqHandler_OnCarryClear4
80 C436 Sub_C436
81 C443 IrqHandler_Loop23
82 C450 Sub_C450
83 C45A IrqHandler_Loop24
84 C460 IrqHandler_OnOverflowSet3
85 C468 IrqHandler_OnCarryClear5
86 C486 IrqHandler_Loop25
87 C48A Sub_C48A
88 C4DB Sub_C4DB
89 E82F Sub_E82F
90 E867 IrqHandler_Loop26
91 E86F IrqHandler_Loop27
92 E878 IrqHandler_Loop28
93 E87F IrqHandler_Loop29
94 E888 IrqHandler_OnNonzero4
95 E890 IrqHandler_Loop30
96 E898 Sub_E898
97 E8AA IrqHandler_Loop31
98 E8AD IrqHandler_Loop32
99 E8C9 IrqHandler_Loop33
100 E8F4 IrqHandler_Loop34
101 E8FB IrqHandler_Loop35
102 E8FE Sub_E8FE
103 E937 IrqHandler_Loop36
104 E93E IrqHandler_OnNonnegative3
105 E958 IrqHandler_Loop37
106 E981 Sub_E981
107 E98E IrqHandler_Loop38
108 E996 IrqHandler_Loop39
109 E9B7 Sub_E9B7
110 E9BF IrqHandler_Loop40
111 E9C9 Sub_E9C9
112 E9D3 IrqHandler_Loop41
113 EA4E Sub_EA4E
114 EA5B IrqHandler_Loop42
115 EA86 IrqHandler_Loop43
116 EA8B IrqHandler_Loop44
117 EAA2 IrqHandler_Loop45
118 EACA IrqHandler_Loop46
119 EAD5 IrqHandler_Loop47
120 EAE8 IrqHandler_Loop48
121 EAF1 Sub_EAF1
122 EAF3 Sub_EAF3
123 EB65 Sub_EB65
124 EB8C IrqHandler_Loop49
125 EB97 IrqHandler_Loop50
126 EBA1 Sub_EBA1
127 EBB2 IrqHandler_Loop51
128 EBBF IrqHandler_Loop52
129 EBD3 IrqHandler_Loop53
130 EBFA IrqHandler_Loop54
131 EC05 IrqHandler_Loop55
132 EC0F Sub_EC0F
133 EC25 IrqHandler_Loop56
134 EC32 IrqHandler_Loop57
135 EC46 IrqHandler_Loop58
136 EC60 IrqHandler_Loop59
137 EC67 IrqHandler_Loop60
138 EC69 IrqHandler_Loop61
139 EC71 IrqHandler_Loop62
140 EC7B IrqHandler_Loop63
141 EC9F IrqHandler_Loop64
142 ECAE IrqHandler_Loop65
143 ECB5 IrqHandler_Loop66
144 ECBA IrqHandler_Loop67
145 ECCF IrqHandler_Loop68
146 ECF9 IrqHandler_Loop69
147 ED04 IrqHandler_Loop70
148 ED17 IrqHandler_Loop71
149 ED28 IrqHandler_Loop72
150 ED2F IrqHandler_Loop73
151 ED31 Sub_ED31
152 ED3B Sub_ED3B
153 F087 Sub_F087
154 F0B7 IrqHandler_Loop74
155 F0D1 IrqHandler_Loop75
156 F0D6 Sub_F0D6
157 F0DC IrqHandler_Loop76
158 F0E4 IrqHandler_Loop77
159 F0F7 IrqHandler_Loop78
160 F0FC IrqHandler_Loop79
161 F105 IrqHandler_Loop80
162 F10A IrqHandler_Loop81
163 F113 IrqHandler_Loop82
164 F115 Sub_F115
165 F121 Sub_F121
166 F139 IrqHandler_Loop83
167 F140 IrqHandler_Loop84
168 F150 IrqHandler_Loop85
169 F157 IrqHandler_Loop86
170 F162 IrqHandler_Loop87
171 F18B IrqHandler_Loop88
172 F192 IrqHandler_Loop89
173 F19E IrqHandler_Loop90
174 F1A2 IrqHandler_Loop91
175 F1A5 Sub_F1A5
176 F297 Sub_F297
177 F2B8 Sub_F2B8
178 F2D1 Sub_F2D1
179 F2D5 IrqHandler_OnNonzero5
180 F2F1 IrqHandler_Loop92
181 F2F9 IrqHandler_Loop93
182 F30B IrqHandler_Loop94
183 F36C Sub_F36C
184 F3C9 IrqHandler_OnNonzero6
185 F3D1 Sub_F3D1
186 F42B Sub_F42B
187 F44E IrqHandler_Loop95
188 F450 IrqHandler_Loop96
189 F45E IrqHandler_Loop97
190 F468 IrqHandler_Loop98
191 F472 IrqHandler_Loop99
192 F47F IrqHandler_Loop100
193 F481 IrqHandler_Loop101
194 F48E IrqHandler_Loop102
195 F490 IrqHandler_Loop103
196 FFF7 Reset
+10
View File
@@ -0,0 +1,10 @@
MEMORY {
HEADER: start = $0000, size = $0010, fill = yes;
PRG: start = $8000, size = $8000, fill = yes;
CHR: start = $0000, size = $2000, fill = yes;
}
SEGMENTS {
HEADER: load = HEADER, type = ro;
PRG: load = PRG, type = ro;
CHR: load = CHR, type = ro;
}
+59
View File
@@ -0,0 +1,59 @@
; Ms Pac-Man (Namco) (U) application-specific RAM aliases - Pass 1
; Generated from every direct zero-page operand in reachable code:
; ref counts are reads/writes, `where` lists the referencing addresses.
; ZpXX names indicate storage with a role not yet unique enough for a behavioral name;
; Pass 2 replaces them with names derived from observed usage.
Zp00 = $00 ; 17 refs; reads=9 writes=8; used at $C02E, C030, C04A, C04F, +12 more
Zp01 = $01 ; 16 refs; reads=7 writes=9; used at $C02A, C035, C1E8, C295, +8 more
Zp02 = $02 ; 8 refs; reads=4 writes=4; used at $C1D7, C1DA, C1E2, C1E5, +4 more
Zp03 = $03 ; 3 refs; reads=2 writes=1; used at $C29A, C35E, C371
Zp04 = $04 ; 4 refs; reads=2 writes=2; used at $C224, C24A, C389
Zp05 = $05 ; 3 refs; reads=2 writes=1; used at $C2BE, C329, C344
Zp06 = $06 ; 4 refs; reads=2 writes=2; used at $C32B, C33C, C346, C34D
Zp07 = $07 ; 4 refs; reads=2 writes=2; used at $C226, C259, C25B
Zp08 = $08 ; 10 refs; reads=7 writes=3; used at $C2B4, C2C2, C2C9, C2E9, +6 more
Zp09 = $09 ; 4 refs; reads=1 writes=3; used at $C2B9, C2ED, C2FD, C308
Zp0A = $0A ; 7 refs; reads=5 writes=2; used at $C29E, C2B2, C2B7, C2E7, +3 more
Zp0B = $0B ; 5 refs; reads=2 writes=3; used at $C2A2, C2B0, C2EB, C2FF
Zp0E = $0E ; 2 refs; reads=1 writes=1; used at $C2EF, C30B
Zp0F = $0F ; 5 refs; reads=2 writes=3; used at $C22A, C257, C261, C2C6, +1 more
Zp13 = $13 ; 4 refs; reads=2 writes=2; used at $C228, C246, C37D, C382
Zp14 = $14 ; 4 refs; reads=3 writes=1; used at $C248, C251, C270, C396
Zp16 = $16 ; 3 refs; reads=1 writes=2; used at $C2C4, C39B
Zp17 = $17 ; 4 refs; reads=2 writes=2; used at $C22E, C263, C384
Zp18 = $18 ; 49 refs; reads=26 writes=23; used at $E8B5, E8C3, E8C9, E981, +37 more
Zp19 = $19 ; 36 refs; reads=14 writes=22; used at $E8BA, E8C7, E986, E99C, +24 more
Zp1A = $1A ; 33 refs; reads=19 writes=14; used at $EA51, EAEB, EAF1, EAFD, +28 more
Zp1B = $1B ; 30 refs; reads=14 writes=16; used at $EC4E, EC5C, EC65, ECAA, +15 more
Zp1C = $1C ; 27 refs; reads=15 writes=12; used at $E84B, E853, E855, E85F, +23 more
Zp1D = $1D ; 16 refs; reads=5 writes=11; used at $E84F, E859, E85B, E8DC, +12 more
Zp1E = $1E ; 7 refs; reads=3 writes=4; used at $F09E, F0A0, F0AE, F18C, +2 more
Zp1F = $1F ; 5 refs; reads=2 writes=3; used at $F091, F093, F09C, F3AE
Zp20 = $20 ; 2 refs; reads=1 writes=1; used at $C147, C1BB
Zp21 = $21 ; 2 refs; reads=1 writes=1; used at $C149, C183
Zp22 = $22 ; 2 refs; reads=1 writes=1; used at $C14B, C1BD
Zp23 = $23 ; 2 refs; reads=1 writes=1; used at $C14D, C185
Zp24 = $24 ; 3 refs; reads=2 writes=1; used at $C14F, C1B4, C3C8
Zp25 = $25 ; 2 refs; reads=1 writes=1; used at $C151, C190
Zp26 = $26 ; 2 refs; reads=1 writes=1; used at $C084, C136
Zp27 = $27 ; 8 refs; reads=3 writes=5; used at $C097, C0D2, C10F, C115, +2 more
Zp28 = $28 ; 2 refs; reads=1 writes=1; used at $C0A6, C1FC
Zp2A = $2A ; 3 refs; reads=2 writes=1; used at $C0A0, C1F8, C1FE
Zp2C = $2C ; 4 refs; reads=2 writes=2; used at $C093, C0D0, C159
Zp2D = $2D ; 4 refs; reads=2 writes=2; used at $C138, C13C, C1C1
Zp2E = $2E ; 3 refs; reads=1 writes=2; used at $C125, C19B, C3C5
Zp2F = $2F ; 1 refs; reads=0 writes=1; used at $C1A0
Zp30 = $30 ; 1 refs; reads=1 writes=0; used at $C4DD
Zp32 = $32 ; 2 refs; reads=1 writes=1; used at $C4DB
Zp37 = $37 ; 1 refs; reads=0 writes=1; used at $C169
Zp38 = $38 ; 1 refs; reads=1 writes=0; used at $C165
Zp39 = $39 ; 4 refs; reads=3 writes=1; used at $C129, C454, C45A, C48C
Zp3A = $3A ; 2 refs; reads=1 writes=1; used at $C0BA, C0C0
Zp3B = $3B ; 2 refs; reads=1 writes=1; used at $C24C, C255
Zp86 = $86 ; 2 refs; reads=2 writes=0; used at $C230, C279
Zp8B = $8B ; 2 refs; reads=1 writes=1; used at $C0B6, C0C2
Zp8D = $8D ; 2 refs; reads=1 writes=1; used at $C091, C09C
Zp8F = $8F ; 2 refs; reads=1 writes=1; used at $C0B2, C0C9
Zp90 = $90 ; 1 refs; reads=0 writes=1; used at $C078
Zp9F = $9F ; 2 refs; reads=1 writes=1; used at $C4E5
Binary file not shown.
File diff suppressed because it is too large. Load diff
Binary file not shown.
@@ -0,0 +1,4 @@
# routinemap (seed)
FFF7 Reset
C107 NmiHandler
C198 IrqHandler
1 # routinemap (seed)
2 FFF7 Reset
3 C107 NmiHandler
4 C198 IrqHandler
+108
View File
@@ -0,0 +1,108 @@
; =============================================================================
; Nintendo Entertainment System hardware symbols
; =============================================================================
; -----------------------------------------------------------------------------
; PPU registers
; -----------------------------------------------------------------------------
PPUCTRL = $2000
PPUMASK = $2001
PPUSTATUS = $2002
OAMADDR = $2003
OAMDATA = $2004
PPUSCROLL = $2005
PPUADDR = $2006
PPUDATA = $2007
OAMDMA = $4014
; -----------------------------------------------------------------------------
; Controller ports
;
; $4016:
; Write: controller strobe
; Read: controller port 1
;
; $4017:
; Read: controller port 2
; Write: APU frame counter
; -----------------------------------------------------------------------------
JOY1 = $4016
JOY2 = $4017
; -----------------------------------------------------------------------------
; APU pulse channel 1
; -----------------------------------------------------------------------------
APUPULSE1CTRL = $4000
APUPULSE1SWEEP = $4001
APUPULSE1TIMERLO = $4002
APUPULSE1TIMERHI = $4003
; -----------------------------------------------------------------------------
; APU pulse channel 2
; -----------------------------------------------------------------------------
APUPULSE2CTRL = $4004
APUPULSE2SWEEP = $4005
APUPULSE2TIMERLO = $4006
APUPULSE2TIMERHI = $4007
; -----------------------------------------------------------------------------
; APU triangle channel
; -----------------------------------------------------------------------------
APUTRIANGLECTRL = $4008
APUTRIANGLETIMERLO = $400A
APUTRIANGLETIMERHI = $400B
; -----------------------------------------------------------------------------
; APU noise channel
; -----------------------------------------------------------------------------
APUNOISECTRL = $400C
APUNOISEPERIOD = $400E
APUNOISELENGTH = $400F
; -----------------------------------------------------------------------------
; APU DMC channel
; -----------------------------------------------------------------------------
APUDMCCTRL = $4010
APUDMCDIRECT = $4011
APUDMCADDR = $4012
APUDMCLENGTH = $4013
; -----------------------------------------------------------------------------
; APU status and frame counter
;
; $4015:
; Write: enable or disable the five APU channels
; Read: channel and interrupt status
;
; $4017:
; Write: APU frame-counter mode and IRQ inhibit
; Read: controller port 2
; -----------------------------------------------------------------------------
APUSTATUS = $4015
APUFRAMECOUNTER = $4017
; -----------------------------------------------------------------------------
; Controller masks
; -----------------------------------------------------------------------------
PAD_RIGHT = $01
PAD_LEFT = $02
PAD_DOWN = $04
PAD_UP = $08
PAD_START = $10
PAD_SELECT = $20
PAD_B = $40
PAD_A = $80
PAD_HORIZONTAL = PAD_LEFT | PAD_RIGHT
PAD_VERTICAL = PAD_UP | PAD_DOWN
PAD_DPAD = PAD_HORIZONTAL | PAD_VERTICAL