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:
1 parent
f8d62601e5
commit
0a49ee6da7
228 files changed
+101961
-37231
No files matched your search
@@ -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
|
||||
Binary file not shown.
@@ -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.
@@ -0,0 +1,2 @@
|
||||
.segment "CHR"
|
||||
.incbin "chr.bin"
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
.segment "HEADER"
|
||||
.incbin "header.bin"
|
||||
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
@@ -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
|
||||
Reference in new issue
Block a user