Standardizes build process and adds OVERVIEW.md for each

This commit is contained in:
tmerritt committed 2026-10-15 18:50:41 -04:00
1 parent 25423d3828
commit a29b03b00b
135 files changed
+26562 -420

No files matched your search

+364
View File
@@ -0,0 +1,364 @@
# Burger Time (U) — Game Flow from Power-On
This document describes the execution flow of the disassembled Burger Time (U) PRG bank (16 KB, mapped at CPU **$C000–$FFFF**), starting from power-on. It is based entirely on `copilot/prg.s` in the repository. The rebuild is verified **byte-identical** to the original `burger_time.nes`.
---
## 1. ROM and Memory Layout
| Property | Value |
|----------|-------|
| Format | iNES / NES 2.0 |
| PRG | 1 × 16 KB (mapped at CPU $C000–$FFFF) |
| CHR | 1 × 8 KB |
| Mirroring | Horizontal |
| PRG bank start | CPU $C000 |
| Source files | `copilot/prg.s` (9,323 lines), `copilot/header.s`, `copilot/chr.s` |
| Output | `burger_time_rebuilt.nes` (24,592 bytes) |
### Interrupt vectors (CPU $FFFA–$FFFF)
| Vector | Address | Handler |
|--------|---------|---------|
| NMI | $FF7F | `NmiHandler` |
| RESET | $FD24 | `ResetHandler` |
| IRQ / BRK | $FD24 | `ResetHandler` (reused) |
---
## 2. Build Status
`make` in `copilot/` assembles `header.s`, `prg.s`, and `chr.s`, links them via `ld65`, and verifies the result against `burger_time.nes`.
**Verification result: BYTE-IDENTICAL** — headers, CHR, and all PRG bytes match exactly.
Note: the Makefile references `burger_time.nes`, while the actual ROM file is named `Burger Time (U) [!].nes`. A symlink `burger_time.nes → "../Burger Time (U) [!].nes"` is required before building.
---
## 3. Reset — CPU $FFFC → $FD24
**`ResetHandler`** ($FD24)
On power-on or reset:
1. `sei` — disable maskable interrupts.
2. `cld` — clear decimal mode.
3. `lda #$00 / sta PPUCTRL / sta PPUMASK` — disable PPU rendering and NMI.
4. **Wait for two VBlanks** — `Flow_FD2E` and `Flow_FD33` each poll `PPUSTATUS` ($2002) for the VBlank bit.
5. `jsr SetDefaultScroll` ($FFEB) — set scroll to ($08, $00).
6. `FrameCounter` ($14) = $00; `FrameCounterReload` ($13) = $08.
7. `JOY2` ($4017) = $80 — select controller latch mode / disable IRQ.
8. Stack pointer = $FF.
9. `jsr InitializeRuntimeState` ($FD63) — clear NmiCompletedFlag ($0E), GameMode ($4C), PendingFrameTask ($8F), PlayerDeathFlag ($4F), StageCompleteFlag ($4E); set PPUCTRL shadow to $90; clear nametables; load initial palette; wait for NMI; set PPUMASK shadow to $1A.
10. `jsr InitializeGameSystems` ($C00E) — process game state at $C76E and $CB53; set up initial OAM positions ($0700=$70, $0701=$10); clear $32; call `SetMainState` to enter the first state.
11. Falls into **`Flow_FD4F`** ($FD4F) — the main loop.
---
## 4. Main Loop — State Machine at $FD4F
**`Flow_FD4F`** ($FD4F) is the central main loop. Every iteration:
1. `jsr WaitForNmi` ($FD9D) — block until NmiCompletedFlag ($0E) is set, then clear it.
2. Load `MainGameState` ($16), multiply by 2, use as index into a pointer table:
- Low byte from `MainStateDispatchTable` ($C000)
- High byte from `LookupTable_C001` ($C001)
- The two tables are interleaved in the same $C000–$C00D region.
3. Indirect jump (`jmp (DataPointerLo)`) to the state handler.
### State Dispatch Table (CPU $C000–$C00D)
The table is structured as alternating low/high bytes indexed by `MainGameState * 2`:
| State | CPU Addr | Handler Routine | Purpose |
|-------|----------|-----------------|---------|
| 0 | $C3F8 | `RunFrameSynchronizedTask_C3F8` | Initial / boot frame task |
| 1 | $C04E | `HandleTitleState` | Title screen |
| 2 | $C12F | `HandleGameStartState` | Game start / level init |
| 3 | $4DC2 | *(unmapped / bank-switched)* | *(state 3 entry)* |
| 4 | $C24D | `Flow_C24D` | Stage transition / between-levels |
| 5 | $C14F | `HandleGameplayState` | Main gameplay |
| 6 | $C1AA | `HandlePlayerDeathState` | Player death sequence |
| *(state 7+)* | *(from table)* | *(various)* | *(additional states)* |
`SetMainState` ($FF7C) stores the accumulator into `MainGameState` ($16) and returns — used by every state handler to transition to the next state.
---
## 5. NMI / Frame Heartbeat — `NmiHandler` ($FF7F)
The NMI fires once per frame and is the real-time driver:
1. **Save registers** (A, X, Y on stack).
2. **OAM DMA** — write $00 to OAMADDR ($2003), then $07 to OAMDMA ($4014) to DMA sprite data from $0700–$07FF.
3. Set `NmiCompletedFlag` ($0E) = $01 — signals the main loop that a frame has elapsed.
4. Read `PPUSTATUS` ($2002) to reset the address latch.
5. **Stage complete handling** — if `StageCompleteFlag` ($4E) is set, `jsr ProcessGameState_CEA3` ($CEA3), then clear the flag.
6. `jsr ProcessPendingFrameTask` ($C029) — if a frame task is pending, advance its counter.
7. If `GameMode` ($4C) is nonzero, `jsr ProcessGameState_F493` ($F493) — per-frame gameplay/audio update.
8. **Restore registers, `rti`.**
---
## 6. State Handlers
### 6.1 Title State — `HandleTitleState` ($C04E)
- Sets `GameMode` ($4C) = $00 and `Zp_57` ($57) = $00.
- `jsr ProcessGameState_C7F7` ($C7F7) — title-specific game state processing.
- `StateInitializedFlag` ($31) = $01.
- `jsr ProcessGameState_CB53` ($CB53) and `jsr ProcessGameState_C81B` ($C81B).
- `jsr EnableBackgroundAndSprites` ($C3EE) — enables rendering.
- `jmp Flow_C233` ($C233) — clears stage state, sets `MainGameState` = 4, returns to main loop.
### 6.2 Game Start State — `HandleGameStartState` ($C12F)
- `jsr ProcessGameState_C7F7` ($C7F7).
- `GameActiveFlag` ($4D) = $01; `StateInitializedFlag` ($31) = $01.
- `jsr ClearNametable2000` ($FDD0) — clear nametable at $2000.
- `jsr ProcessGameState_C81B` ($C81B) and `jsr ProcessGameState_C977` ($C977).
- Decrement `Ram_0400` ($0400).
- `jsr ClearNametable2000` again.
- Set `MainGameState` = 6 → gameplay state.
- Return to main loop via `Flow_FD4F`.
### 6.3 Gameplay State — `HandleGameplayState` ($C14F)
The core gameplay state. Checks `Zp_52` ($52):
- If `Zp_52` is nonzero → `Flow_C161` (second-player / alternate player path).
- If zero → `Flow_C153` (first player path).
Checks `PlayerDeathFlag` ($4F):
- Bit 0 = player 1 dead; bit 1 = player 2 dead.
- If a player is dead → `Flow_C19E` → sets `MainGameState` = 5 (player death state).
- Otherwise continues gameplay.
When transitioning to death (`Flow_C177`):
- Disable background/sprites, set state initialized, process game state, re-enable rendering.
- Store pending sound command $03 (death sound), set GameMode = $01.
- Run a frame-synchronized task at $CA80, store sound command $04.
- Jump to `Flow_C233` → `MainGameState` = 4 (stage transition).
### 6.4 Player Death State — `HandlePlayerDeathState` ($C1AA)
- Disable rendering, clear nametable.
- Loads player-specific data based on `CurrentPlayerIndex` ($50): X = $C1 (player 1) or $12 (player 2).
- `jsr ProcessGameState_C715` ($C715) with player data.
- Store player sprite Y at $0701.
- Load palette, wait for NMI, set PPUCTRL/PPUMASK.
- Run frame-synchronized task, clear nametable, process game state at $CEC8.
- Set `MainGameState` = 5, return to main loop.
### 6.5 Stage Complete / Between-Stage State — `HandleStageCompleteState` ($C22A) / `Flow_C233` ($C233)
- Disable rendering, process game state, enable rendering.
- `Flow_C233`: clear `Ram_046E`–$470, `Zp_2E`, `Zp_2F`, `Ram_045A`.
- Set `MainGameState` = 4 → stage transition state.
- Return to main loop.
`Flow_C24D` ($C24D) — the stage transition update (runs every 8th frame via `Zp_15` counter):
- Processes a long chain of game state routines: $C9F9, $D7D3, $D980, $E11E, $E0B7, $E71A, $E6AE.
- If `GameMode` != 0: reads controllers for current player.
- More game state processing: $D1C1, $D6BF, $CB6F, $DB45, $DBD7, $DC82, $DD61, $EA1A, $E7DE, $E81A.
- If `GameMode` != 0: `ProcessGameState_C5FF` ($C5FF) — score/remaining-life logic.
- Handles player lives (`Zp_1B` for player 1, `Zp_23` for player 2), wraps at 7.
- Clears nametable, sets `MainGameState` = 5 or 6 depending on mode.
---
## 7. Core Gameplay Update Loop
Every 8 frames (when `Zp_15 & $07 == 0`), `Flow_C258` ($C258) runs the primary gameplay update:
| Routine | Address | Purpose |
|---------|---------|---------|
| `ProcessGameState_C9F9` | $C9F9 | Object/enemy movement |
| `CalculateAndClampValue_D7D3` | $D7D3 | Value clamping |
| `ProcessGameState_D980` | $D980 | Object processing |
| `ProcessGameState_E11E` | $E11E | Collision / interaction |
| `ProcessGameState_E0B7` | $E0B7 | State update |
| `ProcessGameState_E71A` | $E71A | Animation |
| `ProcessGameState_E6AE` | $E6AE | Object cleanup |
| *(player input)* | — | Controller reading when GameMode != 0 |
| `ProcessGameState_D1C1` | $D1C1 | Player movement |
| `ProcessGameState_D6BF` | $D6BF | Player animation |
| `ProcessGameState_CB6F` | $CB6F | Burger/part assembly |
| `ProcessGameState_DB45` | $DB45 | Enemy AI |
| `ProcessGameState_DBD7` | $DBD7 | Collision detection |
| `ProcessGameState_DC82` | $DC82 | Score / points |
| `ProcessGameState_DD61` | $DD61 | Bonus items |
| `ProcessGameState_EA1A` | $EA1A | Pepper / power-up |
| `ProcessGameState_E7DE` | $E7DE | Round timing |
| `ProcessGameState_E81A` | $E81A | Level progression |
| `ProcessGameState_C5FF` | $C5FF | Lives / continues (GameMode != 0) |
---
## 8. Audio Engine
**`UpdateAudioEngine`** ($F478)
Called from:
- `Flow_C368` ($C368) — during title/transition states
- `RunFrameSynchronizedTask_C3F8` ($C3F8) — during frame-synchronized tasks
- `Flow_C615` ($C615) — during gameplay state
- `Flow_C7D6` ($C7D6) — tail call from another path
The audio engine:
1. Clears audio RAM at $052F (167 bytes, X from $A7 down).
2. Clears APU channel volume registers $4000–$400F (20 bytes).
3. Writes $00 to SND_CHN ($4015) — disable all channels initially.
4. Sets `Ram_05A3` ($05A3) = $38.
5. Processes sound commands and music updates via subroutines at $F4B3, $F5B3, $F748, $F6E4.
**`StorePendingSoundCommand`** ($C026) — stores a sound command in `PendingSoundCommand` ($90), processed by the NMI or audio engine.
**`ProcessPendingFrameTask`** ($C029) — processes `PendingFrameTask` ($8F); if $FF, resets to $00 and advances; otherwise increments the task counter up to $F1.
---
## 9. PPU / Rendering
### `EnableBackgroundAndSprites` ($C3EE)
Waits for PPU VBlank, loads `PpuMaskShadow` ($11), ORs with $18 (enable background + sprites), calls `SetPpuMaskShadow`.
### `DisableBackgroundAndSprites` ($C3E4)
Waits for PPU VBlank, loads `PpuMaskShadow`, ANDs with $E7 (disable background + sprites).
### `SetPpuControlShadow` ($C3D8) / `SetPpuMaskShadow` ($C3DE)
Store accumulator to the shadow register ($0C/$0D) and to the corresponding PPU register ($2000/$2001).
### `ClearNametables` ($FDAE)
Clears both nametables ($2000 and $2800) via `ClearNametable2000` and `ClearNametable2800`.
### `LoadPalette` ($FDF0)
Waits for PPU VBlank, sets PPU address to $3F00 (palette), writes 16 bytes of palette data from a pointer in X/Y.
### `SetDefaultScroll` ($FFEB)
Writes $08 then $00 to PPUSCROLL ($2005).
### `DecodeNametableStream` ($FE74)
Decodes a run-length-encoded nametable stream from a pointer (X/Y) into PPU memory. Used extensively during screen initialization (`RunFrameSynchronizedTask_C3F8` calls it multiple times for different screen regions).
---
## 10. Controller Input
**`ReadControllers`** ($FE2B)
Reads both controller ports ($4016/$4017) by strobing JOY1, then shifting in 8 bits per controller. Results are packed into scratch variables:
- `ScratchValue0` ($01), `ScratchValue1` ($02), `ScratchIndex` ($03) — raw button bits.
- The result is processed into directional/button flags stored in `Zp_2F` ($2F), checked with `and #$0C` (start/select) and `and #$08` (specific button) throughout the code.
---
## 11. Key Zero-Page / RAM Symbols
| Address | Symbol | Use |
|---------|--------|-----|
| $0E | NmiCompletedFlag | NMI frame-sync flag |
| $10 | PpuControlShadow | $2000 mirror |
| $11 | PpuMaskShadow | $2001 mirror |
| $13 | FrameCounterReload | Frame counter reload value |
| $14 | FrameCounter | Frame tick counter |
| $15 | Zp_15 | Frame divider (gameplay runs every 8 frames) |
| $16 | MainGameState | Current state machine state |
| $1B | Zp_1B | Player 1 lives counter |
| $1F | Zp_1F | (unnamed) |
| $23 | Zp_23 | Player 2 lives counter |
| $2E–$2F | Zp_2E / Zp_2F | Controller/button state |
| $31 | StateInitializedFlag | State init flag |
| $32–$35 | Zp_32–$35 | Indirect pointers / coordinates |
| $3F | Zp_3F | (unnamed) |
| $44 | Zp_44 | (unnamed) |
| $4C | GameMode | Game mode flag (0=title/demo, nonzero=gameplay) |
| $4D | GameActiveFlag | Game active flag |
| $4E | StageCompleteFlag | Stage completed flag |
| $4F | PlayerDeathFlag | Player death flags (bit0=P1, bit1=P2) |
| $50 | CurrentPlayerIndex | Current player (0 or 1) |
| $52 | Zp_52 | Gameplay sub-state |
| $56 | Zp_56 | (unnamed) |
| $57 | Zp_57 | Title state variable |
| $5A–$5B | Zp_5A / Zp_5B | (unnamed) |
| $8F | PendingFrameTask | Pending frame task counter |
| $90 | PendingSoundCommand | Pending sound command |
| $95–$96 | DispatchPointerLo / DispatchPointerHi | State dispatch indirect pointer |
| $0400 | Ram_0400 | (unnamed) |
| $040D–$040F | Ram_040D–$040F | (unnamed) |
| $045A–$045F | Ram_045A–$045F | (unnamed) |
| $0460–$0467 | Ram_0460–$0467 | Object/enemy state |
| $046E–$0470 | Ram_046E–$0470 | Stage state |
| $04E0 | Ram_04E0 | (unnamed) |
| $0500–$0535 | Ram_0500–$0535 | Object arrays |
| $052F–$05A7 | Ram_052F–$05A7 | Audio engine state |
| $0536 | CurrentObjectIndex | Current object being processed |
| $0700–$07FF | Ram_0700–$07FF | OAM buffer + sprite data |
---
## 12. Summary of Execution Flow
```
Power On / Reset
│
▼
ResetHandler ($FD24) ───────────────────────────────┐
│ sei, cld, disable PPU, wait 2× VBlank │
│ SetDefaultScroll, init frame counters │
│ InitializeRuntimeState ($FD63) │
│ ├─ clear NmiCompletedFlag, GameMode, etc. │
│ ├─ set PPUCTRL shadow=$90, clear nametables │
│ ├─ load palette, wait NMI │
│ └─ set PPUMASK shadow=$1A │
│ InitializeGameSystems ($C00E) │
│ ├─ process game state ($C76E, $CB53) │
│ ├─ set initial OAM ($0700=$70, $0701=$10) │
│ └─ SetMainState → first state │
▼ │
Flow_FD4F ($FD4F) ───────────────────────────────────┤
│ │
├─ WaitForNmi ($FD9D) ◄────── waits for NMI ───┘
│ │
├─ MainGameState ($16) → dispatch table │
│ ├─ State 0: $C3F8 (frame sync task) │
│ ├─ State 1: $C04E (HandleTitleState) │
│ ├─ State 2: $C12F (HandleGameStartState) │
│ ├─ State 4: $C24D (stage transition) │
│ ├─ State 5: $C1AA (HandlePlayerDeathState) │
│ ├─ State 6: $C14F (HandleGameplayState) │
│ └─ ... │
│ │
└─ (state handler returns via SetMainState) │
│ │
▼ │
back to Flow_FD4F ◄───────────────────────────────┘
NMI ($FF7F) [every frame]
├─ OAM DMA from $0700 ($4014)
├─ NmiCompletedFlag ($0E) = $01
├─ StageCompleteFlag ($4E) handling ($CEA3)
├─ ProcessPendingFrameTask ($C029)
├─ if GameMode != 0: ProcessGameState_F493 ($F493)
└─ rti
Gameplay Update (every 8 frames, Flow_C258 at $C258)
├─ object movement & collision ($C9F9–$E6AE)
├─ controller input (when GameMode != 0)
├─ player movement & animation ($D1C1, $D6BF)
├─ burger assembly, enemy AI ($CB6F, $DB45)
├─ collision, score, bonus ($DBD7–$DD61)
├─ pepper, round timing ($EA1A–$E81A)
└─ lives/continues ($C5FF)
```
---
## 13. Notes
- The disassembly is organized as a state machine driven by `MainGameState` ($16), with the dispatch table at CPU $C000–$C00D.
- The NMI is the sole frame-sync source; the main loop (`Flow_FD4F`) blocks on `WaitForNmi` before dispatching to the current state handler.
- Gameplay updates run on an 8-frame divider (`Zp_15` at $15), not every frame.
- Audio is updated both from the NMI path (`ProcessGameState_F493` when `GameMode != 0`) and from state-specific code paths.
- Many routines are named `Flow_Cxxx` or `ProcessGameState_Cxxx` based on their CPU address, reflecting the automated disassembly origins. Semantic names are provisional.
- Build verification: `make` in `copilot/` produces `burger_time_rebuilt.nes` that is **byte-identical** to `burger_time.nes` (requires a symlink named `burger_time.nes` pointing to the actual ROM file due to spaces/special characters in the original filename).
+18 -9
View File
@@ -1,16 +1,25 @@
CA65 ?= ca65
LD65 ?= ld65
all: verify
all: reconstructed.nes verify
prg.o: prg.s symbols.inc locals.inc
$(CA65) -g -o $@ $<
header.o: header.s
$(CA65) -g -o $@ $<
prg.o: prg.s symbols.inc locals.inc burger_time.nes
chr.o: chr.s
$(CA65) -g -o $@ $<
chr.o: chr.s burger_time.nes
$(CA65) -g -o $@ $<
burger_time_rebuilt.nes: header.o prg.o chr.o linker.cfg
$(LD65) -C linker.cfg -m burger_time.map -Ln burger_time.lbl -o $@ header.o prg.o chr.o
verify: burger_time_rebuilt.nes
cmp burger_time.nes burger_time_rebuilt.nes
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 burger_time_rebuilt.nes burger_time.map burger_time.lbl
rm -f *.o reconstructed.nes reconstructed.map reconstructed.lbl
.PHONY: all verify clean
+1
View File
@@ -0,0 +1 @@
../Burger Time (U) [!].nes
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,2 +1,2 @@
.segment "CHR"
.incbin "burger_time.nes", $4010, $2000
.incbin "chr.bin"
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,2 +1,2 @@
.segment "HEADER"
.byte $4E,$45,$53,$1A,$01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.incbin "header.bin"
+7 -9
View File
@@ -1,12 +1,10 @@
MEMORY {
HEADER: start=$0000, size=$0010, file=%O, fill=yes;
PRG: start=$C000, size=$3FFA, file=%O, fill=yes;
VECTORS: start=$FFFA, size=$0006, file=%O, fill=yes;
CHR: start=$0000, size=$2000, file=%O, fill=yes;
HEADER: start = $0000, size = $0010, fill = yes;
PRG: start = $C000, size = $4000, fill = yes;
CHR: start = $0000, size = $2000, fill = yes;
}
SEGMENTS {
HEADER: load=HEADER, type=ro;
PRG: load=PRG, type=ro;
VECTORS: load=VECTORS, type=ro;
CHR: load=CHR, type=ro;
}
HEADER: load = HEADER, type = ro;
PRG: load = PRG, type = ro;
CHR: load = CHR, type = ro;
}
Binary file not shown.
-1
View File
@@ -9317,7 +9317,6 @@ SetDefaultScroll:
.byte $00,$FF,$FF,$FF ; PRG $3FF6 | CPU $FFF6
; Interrupt vectors
.segment "VECTORS"
.word NmiHandler ; PRG $3FFA | CPU $FFFA | 7F FF
.word ResetHandler ; PRG $3FFC | CPU $FFFC | 24 FD
.word ResetHandler ; PRG $3FFE | CPU $FFFE | 24 FD
+634
View File
@@ -0,0 +1,634 @@
al 00FFE8 .Flow_FFE8
al 00FFD5 .Flow_FFD5
al 00FFC6 .Flow_FFC6
al 00FFA8 .Flow_FFA8
al 00FF9E .Flow_FF9E
al 00FF7F .NmiHandler
al 00FF4A .Flow_FF4A
al 00FF38 .Flow_FF38
al 00FF3B .Flow_FF3B
al 00FF1E .Flow_FF1E
al 00FF2C .WriteRepeatedPpuValue
al 00FF00 .Flow_FF00
al 00FF10 .Flow_FF10
al 00FEA9 .Flow_FEA9
al 00FECC .Flow_FECC
al 00FE95 .Flow_FE95
al 00FE90 .Flow_FE90
al 00FE55 .Flow_FE55
al 00FE48 .Flow_FE48
al 00FE3F .Flow_FE3F
al 00FE38 .Flow_FE38
al 00FE0A .Flow_FE0A
al 00FE03 .Flow_FE03
al 00FDE3 .Flow_FDE3
al 00FDD6 .Flow_FDD6
al 00FDB8 .Flow_FDB8
al 00FDA7 .Flow_FDA7
al 00FD63 .InitializeRuntimeState
al 00FD33 .Flow_FD33
al 00FD2E .Flow_FD2E
al 00FD24 .ResetHandler
al 00F939 .LookupTable_F939
al 00F938 .ObjectHandlerDispatchTable
al 00F92A .ProcessGameState_F92A
al 00F91F .ProcessGameState_F91F
al 00F914 .ProcessGameState_F914
al 00F90C .ProcessGameState_F90C
al 00F904 .ProcessGameState_F904
al 00F8F8 .Flow_F8F8
al 00F8F5 .ProcessGameState_F8F5
al 00F8DF .ProcessGameState_F8DF
al 00F8C9 .ProcessGameState_F8C9
al 00F8C2 .UpdateStateField_F8C2
al 00F982 .ProcessGameState_F982
al 00F8B8 .ProcessGameState_F8B8
al 00F8AC .Flow_F8AC
al 00F8AB .ProcessGameState_F8AB
al 00F8A4 .ProcessGameState_F8A4
al 00F89D .ProcessGameState_F89D
al 00F895 .Flow_F895
al 00F880 .ProcessGameState_F880
al 00F865 .ProcessGameState_F865
al 00F852 .ProcessGameState_F852
al 00F84A .Flow_F84A
al 00F81D .Flow_F81D
al 00F809 .Flow_F809
al 00F7FD .Flow_F7FD
al 00F98A .LookupTable_F98A
al 00F98B .LookupTable_F98B
al 00F7E9 .Flow_F7E9
al 00F839 .Flow_F839
al 00F7B5 .Flow_F7B5
al 00F793 .Flow_F793
al 00F796 .Flow_F796
al 00F79A .Flow_F79A
al 00F75D .TransformValue_F75D
al 00F73A .Flow_F73A
al 00F96E .DispatchObjectHandler
al 00F726 .Flow_F726
al 00F709 .Flow_F709
al 00F6F2 .Flow_F6F2
al 00F6DB .Flow_F6DB
al 00F6DC .LookupTable_F6DC
al 00F6B1 .Flow_F6B1
al 00F664 .Flow_F664
al 00F657 .Flow_F657
al 00F655 .Flow_F655
al 00F840 .ProcessGameState_F840
al 00F64A .ProcessGameState_F64A
al 00F60E .Flow_F60E
al 00F60C .Flow_F60C
al 00F6BA .TransformValue_F6BA
al 00F604 .Flow_F604
al 00F611 .Flow_F611
al 00F63C .Flow_F63C
al 00F5E1 .Flow_F5E1
al 00F66B .Flow_F66B
al 00F5DC .Flow_F5DC
al 00F9A3 .LookupTable_F9A3
al 00F9A2 .LookupTable_F9A2
al 00F5BF .Flow_F5BF
al 00F5B8 .Flow_F5B8
al 00F5B2 .Flow_F5B2
al 00F597 .Flow_F597
al 00F57C .Flow_F57C
al 00F55C .Flow_F55C
al 00F548 .Flow_F548
al 00F526 .Flow_F526
al 00F511 .Flow_F511
al 00F4F6 .Flow_F4F6
al 00F55D .Flow_F55D
al 00F4D5 .Flow_F4D5
al 00F4D8 .Flow_F4D8
al 00F53E .Flow_F53E
al 00F4C1 .Flow_F4C1
al 00F6E4 .ProcessGameState_F6E4
al 00F4B2 .Flow_F4B2
al 00F748 .ProcessGameState_F748
al 00F4A7 .Flow_F4A7
al 00F5B3 .UpdateStateField_F5B3
al 00F4B3 .ProcessGameState_F4B3
al 00F493 .ProcessGameState_F493
al 00F484 .Flow_F484
al 00F47C .Flow_F47C
al 00EADD .LookupTable_EADD
al 00EADA .LookupTable_EADA
al 00EAD7 .LookupTable_EAD7
al 00EAE0 .LookupTable_EAE0
al 00EAD0 .LookupTable_EAD0
al 00EAE3 .LookupTable_EAE3
al 00EAE6 .LookupTable_EAE6
al 00EA65 .Flow_EA65
al 00EA9B .Flow_EA9B
al 00EA89 .Flow_EA89
al 00EA77 .Flow_EA77
al 00EAAD .Flow_EAAD
al 00EA33 .Flow_EA33
al 00EA25 .Flow_EA25
al 00EA29 .Flow_EA29
al 00EA1C .Flow_EA1C
al 00E9C9 .Flow_E9C9
al 00E9B5 .Flow_E9B5
al 00FF42 .SelectPpuRunLength
al 00E983 .Flow_E983
al 00E9F5 .LookupTable_E9F5
al 00E977 .Flow_E977
al 00EA00 .LookupTable_EA00
al 00E9F0 .Flow_E9F0
al 00E95E .Flow_E95E
al 00FFAE .ConvertPackedDecimalDigit
al 00E951 .ProcessGameState_E951
al 00E94E .LookupTable_E94E
al 00E945 .LookupTable_E945
al 00E948 .LookupTable_E948
al 00E93F .LookupTable_E93F
al 00E939 .LookupTable_E939
al 00E938 .Flow_E938
al 00E8B0 .Flow_E8B0
al 00E867 .Flow_E867
al 00E88D .LookupTable_E88D
al 00E83A .Flow_E83A
al 00E871 .RomData_E871
al 00E82E .Flow_E82E
al 00E829 .Flow_E829
al 00E870 .Flow_E870
al 00E803 .Flow_E803
al 00E801 .Flow_E801
al 00E816 .Flow_E816
al 00E819 .Flow_E819
al 00E733 .Flow_E733
al 00E739 .Flow_E739
al 00E72C .Flow_E72C
al 00E738 .Flow_E738
al 00E716 .LookupTable_E716
al 00E712 .LookupTable_E712
al 00E6EF .Flow_E6EF
al 00E70E .LookupTable_E70E
al 00E6E4 .Flow_E6E4
al 00E6FB .Flow_E6FB
al 00E6BF .Flow_E6BF
al 00E6B9 .Flow_E6B9
al 00E6B0 .Flow_E6B0
al 00E697 .Flow_E697
al 00E65A .Flow_E65A
al 00E660 .Flow_E660
al 00E655 .Flow_E655
al 00E65F .Flow_E65F
al 00E151 .LookupTable_E151
al 00E150 .LookupTable_E150
al 00E12C .Flow_E12C
al 00E113 .Flow_E113
al 00E0E4 .UpdateObjectState_E0E4
al 00E8A9 .ProcessGameState_E8A9
al 00E0D7 .Flow_E0D7
al 00E08F .Flow_E08F
al 00E07D .Flow_E07D
al 00E053 .Flow_E053
al 00E052 .Flow_E052
al 00E01B .Flow_E01B
al 00DFFD .Flow_DFFD
al 00DFAB .Flow_DFAB
al 00DFC1 .Flow_DFC1
al 00DFFE .UpdateObjectState_DFFE
al 00DEF0 .Flow_DEF0
al 00DE7A .Flow_DE7A
al 00DF94 .Flow_DF94
al 00DF7D .Flow_DF7D
al 00DF66 .Flow_DF66
al 00DF4F .Flow_DF4F
al 00DF38 .Flow_DF38
al 00DF21 .Flow_DF21
al 00DF0A .Flow_DF0A
al 00DEF3 .Flow_DEF3
al 00DED9 .Flow_DED9
al 00DEC2 .Flow_DEC2
al 00DEAB .Flow_DEAB
al 00DE94 .Flow_DE94
al 00DE66 .Flow_DE66
al 00DE63 .Flow_DE63
al 00DE60 .Flow_DE60
al 00DE5D .Flow_DE5D
al 00DE5A .Flow_DE5A
al 00DE57 .Flow_DE57
al 00DE54 .Flow_DE54
al 00DE51 .Flow_DE51
al 00DE4E .Flow_DE4E
al 00DE4B .Flow_DE4B
al 00DE48 .Flow_DE48
al 00DE45 .Flow_DE45
al 00DE33 .Flow_DE33
al 00DE21 .Flow_DE21
al 00DE0F .Flow_DE0F
al 00DDFD .Flow_DDFD
al 00DDF4 .Flow_DDF4
al 00DDDA .Flow_DDDA
al 00DDD3 .Flow_DDD3
al 00DDD0 .Flow_DDD0
al 00DDCD .Flow_DDCD
al 00DDCA .Flow_DDCA
al 00DE69 .Flow_DE69
al 00DD9A .Flow_DD9A
al 00DD9D .Flow_DD9D
al 00DD90 .Flow_DD90
al 00DD75 .Flow_DD75
al 00DD7B .Flow_DD7B
al 00DD6B .Flow_DD6B
al 00DD7A .Flow_DD7A
al 00DD2F .LookupTable_DD2F
al 00DD2E .LookupTable_DD2E
al 00DD29 .Flow_DD29
al 00DCD5 .Flow_DCD5
al 00DCCC .Flow_DCCC
al 00DCBF .Flow_DCBF
al 00DCB8 .Flow_DCB8
al 00DCB1 .Flow_DCB1
al 00DC99 .Flow_DC99
al 00DCBB .Flow_DCBB
al 00DCE5 .Flow_DCE5
al 00E10D .ProcessGameState_E10D
al 00DC76 .Flow_DC76
al 00DFE0 .UpdateObjectState_DFE0
al 00E02C .ProcessGameState_E02C
al 00DC42 .Flow_DC42
al 00E01C .ProcessGameState_E01C
al 00DC3B .Flow_DC3B
al 00E03C .ProcessGameState_E03C
al 00DC2C .Flow_DC2C
al 00DC53 .Flow_DC53
al 00E056 .ProcessGameState_E056
al 00DC59 .Flow_DC59
al 00DC69 .Flow_DC69
al 00DBF2 .Flow_DBF2
al 00DBEC .Flow_DBEC
al 00DBDE .Flow_DBDE
al 00DBF1 .Flow_DBF1
al 00DCE6 .TransformValue_DCE6
al 00DBC0 .LookupTable_DBC0
al 00DBBD .LookupTable_DBBD
al 00DBBB .LookupTable_DBBB
al 00DB78 .Flow_DB78
al 00DB69 .Flow_DB69
al 00DB5C .Flow_DB5C
al 00DBBA .Flow_DBBA
al 00DB1C .LookupTable_DB1C
al 00DB13 .LookupTable_DB13
al 00DB02 .Flow_DB02
al 00DAF2 .Flow_DAF2
al 00DB18 .LookupTable_DB18
al 00DAE7 .Flow_DAE7
al 00DB0F .LookupTable_DB0F
al 00DAE1 .Flow_DAE1
al 00DAD9 .Flow_DAD9
al 00DB39 .LookupTable_DB39
al 00DB2D .LookupTable_DB2D
al 00DB21 .LookupTable_DB21
al 00DA51 .Flow_DA51
al 00DA3E .Flow_DA3E
al 00DA2D .Flow_DA2D
al 00DA1B .Flow_DA1B
al 00D9A6 .Flow_D9A6
al 00DA3A .ProcessGameState_DA3A
al 00D9E9 .ProcessGameState_D9E9
al 00D998 .ProcessGameState_D998
al 00DA17 .ProcessGameState_DA17
al 00D997 .Flow_D997
al 00D979 .Flow_D979
al 00D947 .Flow_D947
al 00D929 .Flow_D929
al 00D91F .Flow_D91F
al 00D8EA .Flow_D8EA
al 00D948 .CalculateAndClampValue_D948
al 00D8C5 .Flow_D8C5
al 00D8B1 .Flow_D8B1
al 00D892 .Flow_D892
al 00D8A7 .Flow_D8A7
al 00DA5E .TransformValue_DA5E
al 00D867 .Flow_D867
al 00D88F .Flow_D88F
al 00D89C .Flow_D89C
al 00D891 .Flow_D891
al 00D897 .Flow_D897
al 00D82B .Flow_D82B
al 00D81D .Flow_D81D
al 00D809 .Flow_D809
al 00D7F5 .Flow_D7F5
al 00D890 .Flow_D890
al 00D7D0 .Flow_D7D0
al 00D7CF .Flow_D7CF
al 00D7C6 .Flow_D7C6
al 00D7CE .Flow_D7CE
al 00D7C0 .Flow_D7C0
al 00D7A6 .ProcessGameState_D7A6
al 00D7A2 .Flow_D7A2
al 00D752 .Flow_D752
al 00FFD9 .DecrementPackedDecimalDigit
al 00D785 .LookupTable_D785
al 00D771 .LookupTable_D771
al 00D780 .LookupTable_D780
al 00D76C .LookupTable_D76C
al 00D77B .LookupTable_D77B
al 00D767 .LookupTable_D767
al 00D776 .LookupTable_D776
al 00D78A .CalculateAndClampValue_D78A
al 00D762 .LookupTable_D762
al 00D733 .Flow_D733
al 00D721 .Flow_D721
al 00D70F .Flow_D70F
al 00D6FD .Flow_D6FD
al 00D6E6 .Flow_D6E6
al 00E642 .ProcessGameState_E642
al 00D753 .Flow_D753
al 00D6C9 .Flow_D6C9
al 00D476 .LookupTable_D476
al 00D475 .LookupTable_D475
al 00D3D2 .Flow_D3D2
al 00D3C0 .Flow_D3C0
al 00D3B9 .Flow_D3B9
al 00D3A3 .Flow_D3A3
al 00D446 .LookupTable_D446
al 00D38C .Flow_D38C
al 00D445 .LookupTable_D445
al 00D3E4 .Flow_D3E4
al 00D35E .Flow_D35E
al 00D34C .Flow_D34C
al 00D346 .Flow_D346
al 00D324 .Flow_D324
al 00D354 .Flow_D354
al 00D311 .Flow_D311
al 00D2F8 .Flow_D2F8
al 00D3A8 .Flow_D3A8
al 00D2E2 .Flow_D2E2
al 00D3E6 .LookupTable_D3E6
al 00D3E5 .LookupTable_D3E5
al 00D2BD .Flow_D2BD
al 00D2BF .Flow_D2BF
al 00D2AF .Flow_D2AF
al 00D292 .Flow_D292
al 00D28C .Flow_D28C
al 00D284 .Flow_D284
al 00D27E .UpdateStateField_D27E
al 00D267 .Flow_D267
al 00D44F .DispatchHandler_D44F
al 00D262 .Flow_D262
al 00D256 .Flow_D256
al 00D23E .Flow_D23E
al 00D24D .Flow_D24D
al 00D272 .LookupTable_D272
al 00D269 .LookupTable_D269
al 00D268 .LookupTable_D268
al 00D207 .Flow_D207
al 00D219 .Flow_D219
al 00D21E .Flow_D21E
al 00D1CE .Flow_D1CE
al 00D1CD .Flow_D1CD
al 00D106 .Flow_D106
al 00D10A .Flow_D10A
al 00D11C .Flow_D11C
al 00D0FA .Flow_D0FA
al 00D0E4 .TransformValue_D0E4
al 00CF44 .TransformValue_CF44
al 00CF3F .Flow_CF3F
al 00CF54 .ProcessGameState_CF54
al 00CF07 .Flow_CF07
al 00CEC6 .Flow_CEC6
al 00CEB1 .Flow_CEB1
al 00CEA3 .ProcessGameState_CEA3
al 00CE8E .Flow_CE8E
al 00DA80 .ProcessGameState_DA80
al 00CE62 .Flow_CE62
al 00CE60 .Flow_CE60
al 00CE42 .Flow_CE42
al 00CE6B .ProcessGameState_CE6B
al 00CE38 .Flow_CE38
al 00CE25 .ProcessGameState_CE25
al 00CCE9 .LookupTable_CCE9
al 00CCE0 .Flow_CCE0
al 00CC9F .Flow_CC9F
al 00CBCD .Flow_CBCD
al 00CBA4 .Flow_CBA4
al 00CB93 .Flow_CB93
al 00FE6A .WaitForNmiAndSetPpuAddress
al 00CB7B .Flow_CB7B
al 00CB6B .LookupTable_CB6B
al 00CB1A .Flow_CB1A
al 00CAFF .Flow_CAFF
al 00F23C .LookupTable_F23C
al 00F23B .LookupTable_F23B
al 00CAEE .Flow_CAEE
al 00CAE2 .Flow_CAE2
al 00CAC7 .Flow_CAC7
al 00FED0 .DecodeAttributeStream
al 00CA75 .LookupTable_CA75
al 00CA74 .LookupTable_CA74
al 00CA58 .Flow_CA58
al 00CA56 .Flow_CA56
al 00CA52 .Flow_CA52
al 00CA73 .Flow_CA73
al 00CA29 .Flow_CA29
al 00CA30 .Flow_CA30
al 00CA0E .Flow_CA0E
al 00CA0F .Flow_CA0F
al 00CA1A .Flow_CA1A
al 00C9F1 .Flow_C9F1
al 00FE6D .SetPpuAddress
al 00C998 .Flow_C998
al 00C994 .Flow_C994
al 00C98B .Flow_C98B
al 00C95C .ProcessGameState_C95C
al 00C954 .Flow_C954
al 00C93B .Flow_C93B
al 00C93A .Flow_C93A
al 00C922 .LookupTable_C922
al 00CEBE .ProcessGameState_CEBE
al 00C915 .Flow_C915
al 00C918 .Flow_C918
al 00C928 .ProcessGameState_C928
al 00CAA7 .ProcessGameState_CAA7
al 00CA87 .ProcessGameState_CA87
al 00C9DF .ProcessGameState_C9DF
al 00DA99 .TransformValue_DA99
al 00C8D5 .Flow_C8D5
al 00C8CA .Flow_C8CA
al 00C8BF .Flow_C8BF
al 00C8B5 .Flow_C8B5
al 00F259 .LookupTable_F259
al 00F253 .LookupTable_F253
al 00F24D .LookupTable_F24D
al 00F247 .LookupTable_F247
al 00C878 .Flow_C878
al 00C86B .Flow_C86B
al 00C85F .Flow_C85F
al 00C859 .Flow_C859
al 00C850 .Flow_C850
al 00CC7D .TransformValue_CC7D
al 00CC8E .TransformValue_CC8E
al 00C90A .Flow_C90A
al 00C836 .Flow_C836
al 00CB88 .ProcessGameState_CB88
al 00C82C .Flow_C82C
al 00CADC .ProcessGameState_CADC
al 00C7EA .Flow_C7EA
al 00C7DC .Flow_C7DC
al 00C7E7 .ProcessGameState_C7E7
al 00C7AC .Flow_C7AC
al 00C7A1 .Flow_C7A1
al 00C7BD .Flow_C7BD
al 00C79D .Flow_C79D
al 00C7F3 .LookupTable_C7F3
al 00C790 .Flow_C790
al 00C7D9 .ProcessGameState_C7D9
al 00C75C .Flow_C75C
al 00C741 .ProcessGameState_C741
al 00C734 .Flow_C734
al 00C72E .Flow_C72E
al 00C705 .Flow_C705
al 00C6E4 .Flow_C6E4
al 00C700 .Flow_C700
al 00C6E0 .ProcessGameState_C6E0
al 00C673 .Flow_C673
al 00C671 .Flow_C671
al 00C65F .Flow_C65F
al 00C695 .Flow_C695
al 00C6CD .ProcessGameState_C6CD
al 00C642 .Flow_C642
al 00C633 .Flow_C633
al 00C6ED .ProcessGameState_C6ED
al 00C6BC .ProcessGameState_C6BC
al 00C69C .ProcessGameState_C69C
al 00C682 .Flow_C682
al 00C68E .Flow_C68E
al 00C615 .Flow_C615
al 00C68D .Flow_C68D
al 00C606 .Flow_C606
al 00C609 .Flow_C609
al 00CA37 .TransformValue_CA37
al 00CA31 .ProcessGameState_CA31
al 00C4F1 .Flow_C4F1
al 00C4CE .Flow_C4CE
al 00C4C4 .Flow_C4C4
al 00C4D7 .Flow_C4D7
al 00C4F7 .Flow_C4F7
al 00C496 .Flow_C496
al 00C480 .Flow_C480
al 00FFEB .SetDefaultScroll
al 00C465 .Flow_C465
al 00C45F .Flow_C45F
al 00C44C .Flow_C44C
al 00C469 .Flow_C469
al 00FD83 .ProcessGameState_FD83
al 00D18F .TransformValue_D18F
al 00C4FB .ProcessGameState_C4FB
al 00CE86 .ProcessGameState_CE86
al 00CBC1 .ProcessGameState_CBC1
al 00FE74 .DecodeNametableStream
al 00FDAE .ClearNametables
al 00C3F8 .RunFrameSynchronizedTask_C3F8
al 00C3F5 .Flow_C3F5
al 00FDA6 .WaitForPpuVblank
al 00C3DE .SetPpuMaskShadow
al 00C3D8 .SetPpuControlShadow
al 00C3CD .Flow_C3CD
al 00C3C1 .InitializeObjectSlots
al 00C3A7 .Flow_C3A7
al 00C395 .Flow_C395
al 00C37F .Flow_C37F
al 00C378 .Flow_C378
al 00C54B .ProcessGameState_C54B
al 00C39D .Flow_C39D
al 00F478 .UpdateAudioEngine
al 00C537 .ProcessGameState_C537
al 00C351 .Flow_C351
al 00C344 .Flow_C344
al 00C356 .Flow_C356
al 00C75A .ProcessGameState_C75A
al 00C3B9 .ClearNametableAndSprites
al 00C523 .ProcessGameState_C523
al 00C3AD .DisableRenderingAndAudio
al 00C329 .Flow_C329
al 00C33A .Flow_C33A
al 00C330 .Flow_C330
al 00C368 .Flow_C368
al 00C307 .Flow_C307
al 00FDD4 .ClearNametable2800
al 00E0CA .ProcessGameState_E0CA
al 00C30B .Flow_C30B
al 00C30E .Flow_C30E
al 00C2F2 .Flow_C2F2
al 00C2D9 .Flow_C2D9
al 00C2DC .Flow_C2DC
al 00C2CA .Flow_C2CA
al 00C2BE .Flow_C2BE
al 00C2D1 .Flow_C2D1
al 00C2E2 .Flow_C2E2
al 00C5FF .ProcessGameState_C5FF
al 00C2A2 .Flow_C2A2
al 00E81A .ProcessGameState_E81A
al 00E7DE .ProcessGameState_E7DE
al 00EA1A .ProcessGameState_EA1A
al 00DD61 .ProcessGameState_DD61
al 00DC82 .ProcessGameState_DC82
al 00DBD7 .ProcessGameState_DBD7
al 00DB45 .ProcessGameState_DB45
al 00CB6F .ProcessGameState_CB6F
al 00D6BF .ProcessGameState_D6BF
al 00D1C1 .ProcessGameState_D1C1
al 00C279 .Flow_C279
al 00C27D .Flow_C27D
al 00E6AE .ProcessGameState_E6AE
al 00E71A .ProcessGameState_E71A
al 00E0B7 .ProcessGameState_E0B7
al 00E11E .ProcessGameState_E11E
al 00D980 .ProcessGameState_D980
al 00D7D3 .CalculateAndClampValue_D7D3
al 00C9F9 .ProcessGameState_C9F9
al 00C258 .Flow_C258
al 00C22A .HandleStageCompleteState
al 00CEC8 .ProcessGameState_CEC8
al 00FDF0 .LoadPalette
al 00C1BF .Flow_C1BF
al 00C715 .ProcessGameState_C715
al 00FDB4 .ClearNametable
al 00C1AA .HandlePlayerDeathState
al 00CA80 .RunFrameSynchronizedTask_CA80
al 00C3E4 .DisableBackgroundAndSprites
al 00C177 .Flow_C177
al 00C159 .Flow_C159
al 00C19E .Flow_C19E
al 00C153 .Flow_C153
al 00C161 .Flow_C161
al 00C14F .HandleGameplayState
al 00C977 .ProcessGameState_C977
al 00FDD0 .ClearNametable2000
al 00C12F .HandleGameStartState
al 00FD4F .Flow_FD4F
al 00C24D .Flow_C24D
al 00C0F3 .Flow_C0F3
al 00C0E9 .Flow_C0E9
al 00C0EF .Flow_C0EF
al 00FE2B .ReadControllers
al 00FD9D .WaitForNmi
al 00C0F6 .Flow_C0F6
al 00C0BF .Flow_C0BF
al 00C0C1 .Flow_C0C1
al 00C096 .Flow_C096
al 00C0B2 .Flow_C0B2
al 00C0A5 .Flow_C0A5
al 00C09B .Flow_C09B
al 00C067 .Flow_C067
al 00C233 .Flow_C233
al 00C3EE .EnableBackgroundAndSprites
al 00C81B .ProcessGameState_C81B
al 00C7F7 .ProcessGameState_C7F7
al 00C04E .HandleTitleState
al 00C048 .Flow_C048
al 00C035 .Flow_C035
al 00C04C .Flow_C04C
al 00C029 .ProcessPendingFrameTask
al 00C026 .StorePendingSoundCommand
al 00FF7C .SetMainState
al 00CB53 .ProcessGameState_CB53
al 00C76E .ProcessGameState_C76E
al 00C00E .InitializeGameSystems
al 00C001 .LookupTable_C001
al 00C000 .MainStateDispatchTable
+32
View File
@@ -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.
+1
View File
@@ -0,0 +1 @@
../Burger Time (U) [!].nes