Karnov (NES)/ROM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png The following article is a ROM map for Karnov (NES).

Banking

Karnov uses a variant subset of MMC3 which provides two 8k PRG banks at $8000 and $A000, with a fixed 16k bank at $C000.

Level data is placed in banks 0-8 at $8000.

Various code and data is switched into $A000 as needed.

Bank numbers given here indicate pages of 8k, as used with the mapper's registers.


CHR is banked with 2 x 2k pages at PPU $0000 and $0800 (background), and 4 x 1k pages at $1000, $1400, $1800, $1C00 (sprites).

PRG Bank $B

$AD61 - Powerup orb hitbox test to be collected by player

Bomb location checking:

$AE90 - jsr to jump table routine followed by 8 x 2 byte pointers to bomb location check routines
$AF3C - "no bombs" routine (stages 0,1,2,4,6)
$AEA5 - stage 3 routine: table of 17 X,Y pairs at $AEC2
$AEE4 - stage 5 routine: 3 bombs at ($35–37,$23)
$AEF5 - stage 7 routine: table of 5 X,Y pairs at $AF12
$AF1C - stage 8 routine: 1 bomb at ($5F,$0C)
$AF6F - Dragon hitbox test routine to damage player
$AFA6 - End boss hitbox test to be damaged by player shot

PRG Bank $C

$A1BC - Tile bank 0 (PPU $0000) to use for stage (9 bytes)
$A1C5 - Tile bank 1 (PPU $0800) to use for stage (9 bytes)
$A97D - End boss hitbox test routine to damage player
$ACE2 - End boss fireball hitbox test routine to damage player
$ACB3 - End boss sequence = 0,1,2,0,2,0,1,2 (starts at 1 rather than 0)

PRG Fixed Bank

$C969 - Enemy hitbox test routine to damage player
$CC85 - Enemy hitbox test to be damaged by player shot

Enemy hitbox structure 32? x 4 bytes:

$CA50 - Y size
$CA51 - X offset facing right
$CA52 - X offset facing left
$CA53 - X size
$CDAD - Enemy hitpoints (32? bytes)

See also