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)