Promote Xevious (U) and Zanac (U) from _wip/ to NROM/
- Xevious (U): Promoted from _wip/NROM/Xevious (U)/ to NROM/Xevious (U)/
- Pass 3 complete: 34.5% code coverage, 143 semantic entry points,
4 named data tables, ~20 semantic ZP aliases
- NROM mapper 0, 32 KB PRG, 8 KB CHR, horizontal mirroring
- Zanac (U): Promoted from _wip/UNROM/Zanac (U)/ to NROM/Zanac (U)/
- Pass 3 complete: 34.5% code coverage (bank 7 only), 133 semantic
entry points, 26 named data tables, 14 semantic ZP aliases
- UNROM mapper 2, 128 KB PRG (8 banks), no CHR
- Bank 7 fixed at CPU -; banks 0-6 switchable at 000-
- Bank 7 assembled separately as prg.07.s with .org
Both projects build byte-identical. Updated root README.md inventory,
per-project details, and WIP.md accordingly.
Move Zanac (U) to UNROM/ mapper directory
Zanac (U) is a UNROM (mapper 2) game, not NROM (mapper 0). Move it to
the correct mapper directory and update README.md and WIP.md references
accordingly. Update project counts in WIP.md (857->856 total, UNROM
98->97 projects).
Promote Mermaids of Atlantis (U) from _wip/ to MAPPER8/
Additional cleanup of Mermaids of Atlantis
This commit is contained in:
1 parent
49e117bfcc
commit
df11857075
58 files changed
+39615
-263
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,61 @@
|
||||
# Mermaids of Atlantis (U)
|
||||
|
||||
## Status
|
||||
|
||||
**Pass 1 complete.** The code/data split has been produced by `nesdis.py` and
|
||||
the project builds byte-identical to the original ROM. `prg.s` now contains
|
||||
traced code with audit comments and `.byte` data blocks for unreached bytes.
|
||||
|
||||
`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 | 8 |
|
||||
| Board | MAPPER8 |
|
||||
| Mirroring | Vertical |
|
||||
| Four-screen VRAM | no |
|
||||
| Battery | no |
|
||||
| PRG | 64 KB (4 x 16 KB), at file offset $0010 |
|
||||
| CHR | 64 KB (8 x 8 KB) |
|
||||
| Trainer | none |
|
||||
| Footer | none |
|
||||
| NMI vector | $8189 |
|
||||
| RESET vector | $FF00 |
|
||||
| IRQ vector | $8036 |
|
||||
| ROM file | `Mermaids of Atlantis (U).nes` |
|
||||
| SHA-256 | `53f5d22650063aba89b91762f133d1b6b2680c505b193d88a472580d09701122` |
|
||||
|
||||
### Header notes
|
||||
|
||||
- none
|
||||
|
||||
## Open work
|
||||
|
||||
- **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 1 PRG disassembly (traced code + data blocks) |
|
||||
| `header.s` | iNES header include |
|
||||
| `chr.s` | CHR include |
|
||||
| `prg.bin` | 65536 bytes (64 KB) PRG image |
|
||||
| `chr.bin` | 65536 bytes (64 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 (5 ZpXX aliases at Pass 1) |
|
||||
| `Makefile` | build and byte-identity check |
|
||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
.segment "CHR"
|
||||
.incbin "chr.bin"
|
||||
@@ -0,0 +1,17 @@
|
||||
label Label_801B Sub_801B_Entry_801B
|
||||
label Label_8036 Sub_8036_Entry_8036
|
||||
label Label_8038 Sub_8036_OnNonnegative_8038
|
||||
label Label_8057 Sub_8036_JoinBranchPaths_8057
|
||||
label Label_8062 Sub_8036_OnNonzero_8062
|
||||
label Label_806B Sub_8036_OnCarrySet_806B
|
||||
label Label_8083 Sub_8083_StoreAndContinue_8083
|
||||
label Label_8189 Sub_8083_Entry_8189
|
||||
label Label_FF2F Sub_8764_OnCarryClear_FF2F
|
||||
label Label_FF3E Sub_FF3E_CallNext_FF3E
|
||||
label Label_FF49 Sub_FF49_JumpNext_FF49
|
||||
label Label_FF4C Sub_FF4C_StoreAndContinue_FF4C
|
||||
label Label_FF4E Sub_FF4C_OnNonzero_FF4E
|
||||
label Label_FF50 Sub_FF4C_OnNonzero_FF50
|
||||
label Label_FF57 Sub_FF57_Return_FF57
|
||||
label Label_FF60 Sub_FF57_OnNonzero_FF60
|
||||
label Label_FF62 Sub_FF62_Return_FF62
|
||||
|
@@ -0,0 +1 @@
|
||||
|
||||
|
|
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
.segment "HEADER"
|
||||
.incbin "header.bin"
|
||||
@@ -0,0 +1,17 @@
|
||||
label Label_801B Sub_801B_Entry_801B
|
||||
label Label_8036 Sub_8036_Entry_8036
|
||||
label Label_8038 Sub_8036_OnNonnegative_8038
|
||||
label Label_8057 Sub_8036_JoinBranchPaths_8057
|
||||
label Label_8062 Sub_8036_OnNonzero_8062
|
||||
label Label_806B Sub_8036_OnCarrySet_806B
|
||||
label Label_8083 Sub_8083_StoreAndContinue_8083
|
||||
label Label_8189 Sub_8083_Entry_8189
|
||||
label Label_FF2F Sub_8764_OnCarryClear_FF2F
|
||||
label Label_FF3E Sub_FF3E_CallNext_FF3E
|
||||
label Label_FF49 Sub_FF49_JumpNext_FF49
|
||||
label Label_FF4C Sub_FF4C_StoreAndContinue_FF4C
|
||||
label Label_FF4E Sub_FF4C_OnNonzero_FF4E
|
||||
label Label_FF50 Sub_FF4C_OnNonzero_FF50
|
||||
label Label_FF57 Sub_FF57_Return_FF57
|
||||
label Label_FF60 Sub_FF57_OnNonzero_FF60
|
||||
label Label_FF62 Sub_FF62_Return_FF62
|
||||
|
@@ -0,0 +1,10 @@
|
||||
MEMORY {
|
||||
HEADER: start = $0000, size = $0010, fill = yes;
|
||||
PRG: start = $0010, size = $10000, fill = yes;
|
||||
CHR: start = $10010, size = $10000, fill = yes;
|
||||
}
|
||||
SEGMENTS {
|
||||
HEADER: load = HEADER, type = ro;
|
||||
PRG: load = PRG, type = ro;
|
||||
CHR: load = CHR, type = ro;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
; Zero-page aliases for this project.
|
||||
; Pass 1+ adds proven semantic names here;
|
||||
; addresses whose role is not yet determined keep the neutral ZpXX
|
||||
; form.
|
||||
|
||||
Zp00 = $00
|
||||
Zp01 = $01
|
||||
Zp02 = $02
|
||||
Zp2F = $2F
|
||||
Zp6A = $6A
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Semantic zero-page aliases (Pass 3)
|
||||
;
|
||||
; Every alias below was read out of this dump's own code. An address whose
|
||||
; role is the same at every reference is renamed everywhere; an address that
|
||||
; is reused for several roles keeps the neutral ZpXX name outside the
|
||||
; routines where the role is proven, and the per-site choice is recorded in
|
||||
; sites.tsv.
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
TempVar0 = $00 ; semantic alias for Zp00 (general-purpose zero-page temp, used at $804D,$8057,$806B)
|
||||
TempVar1 = $01 ; semantic alias for Zp01 (general-purpose zero-page temp, used at $804F,$8062,$8066,$806D,$807D)
|
||||
TempVar2 = $02 ; semantic alias for Zp02 (general-purpose zero-page temp, used at $8076)
|
||||
LoopCounter = $2F ; semantic alias for Zp2F (incremented at $8083, likely frame/loop counter)
|
||||
StatusByte = $6A ; semantic alias for Zp6A (stored at $8081, likely status/flags register)
|
||||
|
||||
; Clean marker section placeholder - will be filled by tools if needed
|
||||
; ---------------------------------------------------------------------------
|
||||
; Semantic zero-page aliases (Pass 3)
|
||||
;
|
||||
; Every alias below was read out of this dump's own code. An address whose
|
||||
; role is the same at every reference is renamed everywhere; an address that
|
||||
; is reused for several roles keeps the neutral ZpXX name outside the
|
||||
; routines where the role is proven, and the per-site choice is recorded in
|
||||
; sites.tsv.
|
||||
; ---------------------------------------------------------------------------
|
||||
Binary file not shown.
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -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