Promote Wild Gunman (U) from _wip to top-level project
Moves Wild Gunman (U) from _wip/ to Wild Gunman (U)/ with full ROM build: - Adds header.s, chr.s, linker.cfg (HEADER+PRG+CHR segments) - Updates Makefile to build and verify reconstructed.nes vs rom.nes - Adds rom.nes copy + copilot/rom.nes symlink per repo convention - Verified byte-identical build Pass 1 complete: full code/data classification (~20% code / ~80% data) Pass 2 partial: routine headers for all labels, semantic naming for key routines (Reset, NmiHandler, MainStateDispatch, MainLoopBody, etc.), zero-page aliases in locals.inc Updates root OVERVIEW.md: - Removes Wild Gunman from _wip skeleton table (23 -> 22 skeletons) - Adds Wild Gunman as #13 in numbered inventory (BYTE-IDENTICAL, Pass 2) - Updates summary count from 12 to 13 projects
This commit is contained in:
1 parent
ef4a1044f7
commit
c79a52e354
23 files changed
+5434
-86
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
|
||||
$(CA65) -g -o $@ $<
|
||||
|
||||
header.o: header.s
|
||||
$(CA65) -g -o $@ $<
|
||||
|
||||
chr.o: chr.s
|
||||
$(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
|
||||
cmp reconstructed.nes rom.nes
|
||||
@echo "Byte-identical ROM verified."
|
||||
|
||||
clean:
|
||||
rm -f *.o reconstructed.nes reconstructed.map reconstructed.lbl
|
||||
|
||||
.PHONY: all verify clean
|
||||
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,10 @@
|
||||
MEMORY {
|
||||
HEADER: start = $0000, size = $0010, fill = yes;
|
||||
PRG: start = $C000, size = $4000, file = %O, fill = yes;
|
||||
CHR: start = $0000, size = $2000, file = %O, fill = yes;
|
||||
}
|
||||
SEGMENTS {
|
||||
HEADER: load = HEADER, type = ro;
|
||||
PRG: load = PRG, type = ro;
|
||||
CHR: load = CHR, type = ro;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
; Wild Gunman (U) zero-page aliases - Pass 2
|
||||
; Semantic names for addresses with observed usage patterns; ZpXX names for
|
||||
; addresses whose role is not yet uniquely determined.
|
||||
|
||||
GameMode = $30 ; Current game mode/state, set to 1 during reset.
|
||||
NmiPhase = $20 ; NMI phase flag, set to 1 by NMI handler.
|
||||
NmiFlag = $22 ; NMI flag, set to 1 by NMI handler.
|
||||
Timer2F = $2F ; Timer incremented each frame in main loop.
|
||||
Ctrl1 = $16 ; Controller 1 state, checked in MainStateDispatch.
|
||||
Mode38 = $38 ; Mode byte checked in MainStateDispatch.
|
||||
OAMBase = $05EC ; OAM/sprite base address used in reset init.
|
||||
SpriteData = $05F0 ; Sprite data destination in reset init.
|
||||
|
||||
; Generic zero-page aliases (role not yet uniquely determined)
|
||||
Zp00 = $00 ; Used as indirect pointer lo in RAM clear loop
|
||||
Zp01 = $01 ; Used as indirect pointer hi in RAM clear loop
|
||||
Zp08 = $08 ; Set to $90 during reset (PPUCTRL value)
|
||||
Zp09 = $09 ; Set to $02 during reset
|
||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,249 @@
|
||||
al 00FFF7 .Label_FFF7
|
||||
al 00FFF4 .Label_FFF4
|
||||
al 00F76F .Label_F76F
|
||||
al 00F724 .Label_F724
|
||||
al 00F723 .Label_F723
|
||||
al 00F70A .Label_F70A
|
||||
al 00F702 .Label_F702
|
||||
al 00F709 .Label_F709
|
||||
al 00F6D2 .Label_F6D2
|
||||
al 00F6D0 .Label_F6D0
|
||||
al 00F6BC .Label_F6BC
|
||||
al 00F6B1 .Label_F6B1
|
||||
al 00F6C7 .Label_F6C7
|
||||
al 00F6D9 .Label_F6D9
|
||||
al 00F67F .Label_F67F
|
||||
al 00F67D .Label_F67D
|
||||
al 00F674 .Label_F674
|
||||
al 00F686 .Label_F686
|
||||
al 00F652 .Label_F652
|
||||
al 00F650 .Label_F650
|
||||
al 00F642 .Label_F642
|
||||
al 00F64B .Label_F64B
|
||||
al 00F659 .Label_F659
|
||||
al 00F613 .Label_F613
|
||||
al 00F60F .Label_F60F
|
||||
al 00F60E .Label_F60E
|
||||
al 00F5FD .Label_F5FD
|
||||
al 00F5FB .Label_F5FB
|
||||
al 00F5EF .Label_F5EF
|
||||
al 00F5EC .Label_F5EC
|
||||
al 00F5E1 .Label_F5E1
|
||||
al 00F5D5 .Label_F5D5
|
||||
al 00F5C7 .Label_F5C7
|
||||
al 00F5B4 .Label_F5B4
|
||||
al 00F617 .Label_F617
|
||||
al 00F5AC .Label_F5AC
|
||||
al 00F592 .Label_F592
|
||||
al 00F5B0 .Label_F5B0
|
||||
al 00F583 .Label_F583
|
||||
al 00F570 .Label_F570
|
||||
al 00F573 .Label_F573
|
||||
al 00F5BD .Label_F5BD
|
||||
al 00F59E .Label_F59E
|
||||
al 00F588 .Label_F588
|
||||
al 00F58E .Label_F58E
|
||||
al 00F57F .Label_F57F
|
||||
al 00F579 .Label_F579
|
||||
al 00F53F .Label_F53F
|
||||
al 00F5A9 .Label_F5A9
|
||||
al 00F532 .Label_F532
|
||||
al 00F53D .Label_F53D
|
||||
al 00F51A .Label_F51A
|
||||
al 00F50D .Label_F50D
|
||||
al 00F50A .Label_F50A
|
||||
al 00F4EF .Label_F4EF
|
||||
al 00F48A .Label_F48A
|
||||
al 00F48E .Label_F48E
|
||||
al 00F468 .Label_F468
|
||||
al 00F453 .Label_F453
|
||||
al 00F440 .Label_F440
|
||||
al 00F42A .Label_F42A
|
||||
al 00F426 .Label_F426
|
||||
al 00F418 .Label_F418
|
||||
al 00F40F .Label_F40F
|
||||
al 00F3EB .Label_F3EB
|
||||
al 00F3EE .Label_F3EE
|
||||
al 00F3E3 .Label_F3E3
|
||||
al 00F3C0 .Label_F3C0
|
||||
al 00F3A8 .Label_F3A8
|
||||
al 00F39D .Label_F39D
|
||||
al 00F38F .Label_F38F
|
||||
al 00F38B .Label_F38B
|
||||
al 00F391 .Label_F391
|
||||
al 00F387 .Label_F387
|
||||
al 00F372 .Label_F372
|
||||
al 00DEED .Label_DEED
|
||||
al 00DED4 .Label_DED4
|
||||
al 00DAE0 .Label_DAE0
|
||||
al 00DAD2 .Label_DAD2
|
||||
al 00D97C .Label_D97C
|
||||
al 00D996 .Label_D996
|
||||
al 00D978 .Label_D978
|
||||
al 00D969 .Label_D969
|
||||
al 00D965 .Label_D965
|
||||
al 00D959 .Label_D959
|
||||
al 00D973 .Label_D973
|
||||
al 00D955 .Label_D955
|
||||
al 00D8FF .Label_D8FF
|
||||
al 00D8EF .Label_D8EF
|
||||
al 00D8E5 .Label_D8E5
|
||||
al 00D8E3 .Label_D8E3
|
||||
al 00D8D9 .Label_D8D9
|
||||
al 00D8D7 .Label_D8D7
|
||||
al 00D5B3 .Label_D5B3
|
||||
al 00D5AF .Label_D5AF
|
||||
al 00D4F4 .Label_D4F4
|
||||
al 00D416 .Label_D416
|
||||
al 00D3EE .Label_D3EE
|
||||
al 00D3FD .Label_D3FD
|
||||
al 00D3CF .Label_D3CF
|
||||
al 00D3C4 .Label_D3C4
|
||||
al 00D3C2 .Label_D3C2
|
||||
al 00D3B9 .Label_D3B9
|
||||
al 00D3BF .Label_D3BF
|
||||
al 00D396 .Label_D396
|
||||
al 00D382 .Label_D382
|
||||
al 00D36C .Label_D36C
|
||||
al 00D33C .Label_D33C
|
||||
al 00D363 .Label_D363
|
||||
al 00D365 .Label_D365
|
||||
al 00D317 .Label_D317
|
||||
al 00D313 .Label_D313
|
||||
al 00D2F2 .Label_D2F2
|
||||
al 00D2E2 .Label_D2E2
|
||||
al 00D2D5 .Label_D2D5
|
||||
al 00D2D3 .Label_D2D3
|
||||
al 00D2CF .Label_D2CF
|
||||
al 00D2D2 .Label_D2D2
|
||||
al 00D273 .Label_D273
|
||||
al 00D25E .Label_D25E
|
||||
al 00D23B .Label_D23B
|
||||
al 00D213 .Label_D213
|
||||
al 00D208 .Label_D208
|
||||
al 00D1FF .Label_D1FF
|
||||
al 00D205 .Label_D205
|
||||
al 00D1C9 .Label_D1C9
|
||||
al 00D1D3 .Label_D1D3
|
||||
al 00D1C5 .Label_D1C5
|
||||
al 00D1D9 .Label_D1D9
|
||||
al 00D1AE .Label_D1AE
|
||||
al 00D19D .Label_D19D
|
||||
al 00D187 .Label_D187
|
||||
al 00D175 .Label_D175
|
||||
al 00D172 .Label_D172
|
||||
al 00D165 .Label_D165
|
||||
al 00D154 .Label_D154
|
||||
al 00D15B .Label_D15B
|
||||
al 00D149 .Label_D149
|
||||
al 00D14E .Label_D14E
|
||||
al 00D118 .Label_D118
|
||||
al 00D110 .Label_D110
|
||||
al 00D134 .Label_D134
|
||||
al 00D11D .Label_D11D
|
||||
al 00D0FF .Label_D0FF
|
||||
al 00D0F1 .Label_D0F1
|
||||
al 00D0E3 .Label_D0E3
|
||||
al 00D0DA .Label_D0DA
|
||||
al 00D0CE .Label_D0CE
|
||||
al 00D0D1 .Label_D0D1
|
||||
al 00D0C3 .Label_D0C3
|
||||
al 00D0B6 .Label_D0B6
|
||||
al 00D0A6 .Label_D0A6
|
||||
al 00D097 .Label_D097
|
||||
al 00D089 .Label_D089
|
||||
al 00D068 .Label_D068
|
||||
al 00D053 .Label_D053
|
||||
al 00D04F .Label_D04F
|
||||
al 00D054 .Label_D054
|
||||
al 00D03E .Label_D03E
|
||||
al 00D02B .Label_D02B
|
||||
al 00D027 .Label_D027
|
||||
al 00D02C .Label_D02C
|
||||
al 00D01C .Label_D01C
|
||||
al 00CF0C .Label_CF0C
|
||||
al 00CF01 .Label_CF01
|
||||
al 00C5EC .Label_C5EC
|
||||
al 00C5E6 .Label_C5E6
|
||||
al 00C5DF .Label_C5DF
|
||||
al 00C5D7 .Label_C5D7
|
||||
al 00C5D1 .Sub_C5D1
|
||||
al 00C585 .Label_C585
|
||||
al 00C573 .MainLoopBody
|
||||
al 00C4ED .Label_C4ED
|
||||
al 00C4C2 .Label_C4C2
|
||||
al 00C4C6 .Label_C4C6
|
||||
al 00C4B5 .Label_C4B5
|
||||
al 00C4AA .Label_C4AA
|
||||
al 00C421 .Label_C421
|
||||
al 00C411 .Label_C411
|
||||
al 00C3E7 .Label_C3E7
|
||||
al 00C3D0 .Label_C3D0
|
||||
al 00C3B9 .Label_C3B9
|
||||
al 00C3AC .NmiGameLogic5
|
||||
al 00C3A3 .Label_C3A3
|
||||
al 00C38F .Label_C38F
|
||||
al 00C38C .Label_C38C
|
||||
al 00C389 .Label_C389
|
||||
al 00C37D .Label_C37D
|
||||
al 00C367 .Label_C367
|
||||
al 00C341 .Label_C341
|
||||
al 00C33D .Label_C33D
|
||||
al 00C337 .Label_C337
|
||||
al 00C32B .NmiGameLogic4
|
||||
al 00C324 .Label_C324
|
||||
al 00C30B .Label_C30B
|
||||
al 00C2F5 .Label_C2F5
|
||||
al 00C2E3 .Label_C2E3
|
||||
al 00C2CA .Label_C2CA
|
||||
al 00C2BB .Label_C2BB
|
||||
al 00C2D4 .Label_C2D4
|
||||
al 00C2E2 .Label_C2E2
|
||||
al 00C29F .NmiGameLogic3
|
||||
al 00C29E .Label_C29E
|
||||
al 00C275 .Label_C275
|
||||
al 00C273 .Label_C273
|
||||
al 00C265 .NmiGameLogic2
|
||||
al 00C25A .Label_C25A
|
||||
al 00C24D .Label_C24D
|
||||
al 00C259 .Label_C259
|
||||
al 00C233 .NmiGameLogic1
|
||||
al 00C232 .Label_C232
|
||||
al 00C22B .Label_C22B
|
||||
al 00C225 .Label_C225
|
||||
al 00C21B .ResetInitSub2
|
||||
al 00C212 .Label_C212
|
||||
al 00C202 .Label_C202
|
||||
al 00C1EB .Label_C1EB
|
||||
al 00C1CA .Label_C1CA
|
||||
al 00C1A8 .Label_C1A8
|
||||
al 00C1F7 .Label_C1F7
|
||||
al 00C19B .Label_C19B
|
||||
al 00C192 .Label_C192
|
||||
al 00C183 .Label_C183
|
||||
al 00C197 .Label_C197
|
||||
al 00C189 .Label_C189
|
||||
al 00C170 .Label_C170
|
||||
al 00C169 .Label_C169
|
||||
al 00C179 .Label_C179
|
||||
al 00C156 .Label_C156
|
||||
al 00C16D .Label_C16D
|
||||
al 00C101 .Label_C101
|
||||
al 00C0DE .Label_C0DE
|
||||
al 00C0D4 .Label_C0D4
|
||||
al 00C0F0 .Label_C0F0
|
||||
al 00C10F .Label_C10F
|
||||
al 00C10A .Label_C10A
|
||||
al 00C130 .Label_C130
|
||||
al 00C0B3 .MainStateDispatch
|
||||
al 00C0A6 .Label_C0A6
|
||||
al 00C086 .NmiHandler
|
||||
al 00C06E .Label_C06E
|
||||
al 00C06B .Label_C06B
|
||||
al 00C061 .Label_C061
|
||||
al 00C07C .Label_C07C
|
||||
al 00C056 .Label_C056
|
||||
al 00C02C .Label_C02C
|
||||
al 00C01E .Label_C01E
|
||||
al 00C002 .Label_C002
|
||||
al 00C000 .Reset
|
||||
@@ -0,0 +1,32 @@
|
||||
Modules list:
|
||||
-------------
|
||||
header.o:
|
||||
HEADER Offs=000000 Size=000010 Align=00001 Fill=0000
|
||||
prg.o:
|
||||
PRG Offs=000000 Size=004000 Align=00001 Fill=0000
|
||||
chr.o:
|
||||
CHR Offs=000000 Size=002000 Align=00001 Fill=0000
|
||||
|
||||
|
||||
Segment list:
|
||||
-------------
|
||||
Name Start End Size Align
|
||||
----------------------------------------------------
|
||||
CHR 000000 001FFF 002000 00001
|
||||
HEADER 000000 00000F 000010 00001
|
||||
PRG 00C000 00FFFF 004000 00001
|
||||
|
||||
|
||||
Exports list by name:
|
||||
---------------------
|
||||
|
||||
|
||||
|
||||
Exports list by value:
|
||||
----------------------
|
||||
|
||||
|
||||
|
||||
Imports list:
|
||||
-------------
|
||||
|
||||
Binary file not shown.
Symlink
+1
@@ -0,0 +1 @@
|
||||
../rom.nes
|
||||
@@ -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