; Galaga (U) NES disassembly - Pass 1 ; Byte-oriented ca65 source generated from the supplied PRG image. ; Recursively reachable instructions are emitted explicitly with address/byte comments. ; Unreached bytes remain explicit .byte blocks; no ROM byte is deleted or reformatted. ; Pass 2 replaces address-derived labels, RAM aliases, and table names while ; preserving byte identity. ; ; Vectors: NMI=$C0C8 RESET=$C000 IRQ=$C000 ; PRG mapped at $8000-$FFFF (NROM, mirrored to the upper half) ; ; Pass 1 trace provenance (the audit trail behind every classification below): ; 1 further routine entries recovered from table references elsewhere in the image: ; $DF8E ; entries seeded by hand after inspecting code-shaped but unreferenced blocks: ; $BE00, $C000, $C01C, $C0BD, $C115, $C117, $C1A7, $C3A1, $C3B5, $C3CA, $C41A, $C42C, $C4A0, $C5A0, $C65A, $C693, $C8AB, $C8C4, $C90B, $C937, $C957, $C993, $C9CE, $C9DE, $CA17, $CA39, $CA91, $CAF6, $CB38, $CB56, $CB79, $CBDE, $CC38, $CC70, $CCD0, $CD1A, $CDB3, $CDD6, $CE00, $CE4F, $CEFC, $CFFD, $D046, $D103, $D17B, $D273, $D293, $D410, $D509, $D624, $D6E7, $D7B0, $D7BA, $D7D1, $D80C, $D81A, $D882, $D913, $D928, $D951, $D9D0, $DB43, $DB80, $DC38, $DC6E, $DC7D, $DCBF, $DCCF, $DCDC, $DCEE, $DD17, $DD68, $DD7A, $DDD8, $DDEE, $DE01, $DE10, $DE23, $DE4A, $DE64, $DEA5, $DEB5, $DEC1, $DEF1, $DF6F, $DF97, $DFBC, $E03E, $E113, $E16F, $E1E9, $E24D, $E299, $E2CB, $E2E4, $E336, $E383, $E3AC, $E3D4, $E3EE, $E426, $E45D, $E473, $E482, $E488, $E49D, $E4A1, $E4D5, $E619, $E620, $E62B, $E640, $E651, $E67D, $E69B, $E6AD, $E6C8, $E7B6, $E867, $E88E, $E8E1, $E94B, $E965, $EADA, $EC85, $EC93, $ECA5, $ECB7, $ECC9, $ECD3, $ECDD, $ECE7, $ECF3, $ED0B, $ED14, $ED3B, $F790 ; indirect dispatch through zero page (not followed statically): ; jmp ($001E) at $C314 ; .setcpu "6502" .include "symbols.inc" .include "locals.inc" .segment "PRG" ; ---- data $8000-$BDFF (15872 bytes) ---- ; referenced by `sty $8CD8` at $D87E (operand $8CD8 falls inside this region) ; referenced by `rra $97DF` at $DB6E (operand $97DF falls inside this region) ; referenced by `ror $86DC` at $DC52 (operand $86DC falls inside this region) ErasedPrgFill: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8000 PRG:-4000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; CPU:$8000 PRG:0000 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8010 PRG:0010 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8020 PRG:0020 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8030 PRG:0030 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8040 PRG:0040 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8050 PRG:0050 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8060 PRG:0060 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8070 PRG:0070 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8080 PRG:0080 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8090 PRG:0090 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$80A0 PRG:00A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$80B0 PRG:00B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$80C0 PRG:00C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$80D0 PRG:00D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$80E0 PRG:00E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$80F0 PRG:00F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8100 PRG:0100 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8110 PRG:0110 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8120 PRG:0120 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8130 PRG:0130 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8140 PRG:0140 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8150 PRG:0150 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8160 PRG:0160 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8170 PRG:0170 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8180 PRG:0180 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8190 PRG:0190 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$81A0 PRG:01A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$81B0 PRG:01B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$81C0 PRG:01C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$81D0 PRG:01D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$81E0 PRG:01E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$81F0 PRG:01F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8200 PRG:0200 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8210 PRG:0210 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8220 PRG:0220 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8230 PRG:0230 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8240 PRG:0240 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8250 PRG:0250 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8260 PRG:0260 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8270 PRG:0270 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8280 PRG:0280 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8290 PRG:0290 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$82A0 PRG:02A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$82B0 PRG:02B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$82C0 PRG:02C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$82D0 PRG:02D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$82E0 PRG:02E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$82F0 PRG:02F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8300 PRG:0300 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8310 PRG:0310 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8320 PRG:0320 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8330 PRG:0330 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8340 PRG:0340 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8350 PRG:0350 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8360 PRG:0360 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8370 PRG:0370 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8380 PRG:0380 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8390 PRG:0390 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$83A0 PRG:03A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$83B0 PRG:03B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$83C0 PRG:03C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$83D0 PRG:03D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$83E0 PRG:03E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$83F0 PRG:03F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8400 PRG:0400 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8410 PRG:0410 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8420 PRG:0420 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8430 PRG:0430 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8440 PRG:0440 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8450 PRG:0450 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8460 PRG:0460 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8470 PRG:0470 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8480 PRG:0480 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8490 PRG:0490 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$84A0 PRG:04A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$84B0 PRG:04B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$84C0 PRG:04C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$84D0 PRG:04D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$84E0 PRG:04E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$84F0 PRG:04F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8500 PRG:0500 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8510 PRG:0510 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8520 PRG:0520 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8530 PRG:0530 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8540 PRG:0540 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8550 PRG:0550 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8560 PRG:0560 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8570 PRG:0570 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8580 PRG:0580 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8590 PRG:0590 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$85A0 PRG:05A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$85B0 PRG:05B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$85C0 PRG:05C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$85D0 PRG:05D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$85E0 PRG:05E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$85F0 PRG:05F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8600 PRG:0600 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8610 PRG:0610 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8620 PRG:0620 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8630 PRG:0630 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8640 PRG:0640 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8650 PRG:0650 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8660 PRG:0660 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8670 PRG:0670 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8680 PRG:0680 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8690 PRG:0690 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$86A0 PRG:06A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$86B0 PRG:06B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$86C0 PRG:06C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$86D0 PRG:06D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$86E0 PRG:06E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$86F0 PRG:06F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8700 PRG:0700 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8710 PRG:0710 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8720 PRG:0720 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8730 PRG:0730 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8740 PRG:0740 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8750 PRG:0750 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8760 PRG:0760 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8770 PRG:0770 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8780 PRG:0780 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8790 PRG:0790 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$87A0 PRG:07A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$87B0 PRG:07B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$87C0 PRG:07C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$87D0 PRG:07D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$87E0 PRG:07E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$87F0 PRG:07F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8800 PRG:0800 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8810 PRG:0810 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8820 PRG:0820 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8830 PRG:0830 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8840 PRG:0840 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8850 PRG:0850 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8860 PRG:0860 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8870 PRG:0870 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8880 PRG:0880 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8890 PRG:0890 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$88A0 PRG:08A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$88B0 PRG:08B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$88C0 PRG:08C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$88D0 PRG:08D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$88E0 PRG:08E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$88F0 PRG:08F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8900 PRG:0900 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8910 PRG:0910 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8920 PRG:0920 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8930 PRG:0930 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8940 PRG:0940 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8950 PRG:0950 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8960 PRG:0960 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8970 PRG:0970 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8980 PRG:0980 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8990 PRG:0990 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$89A0 PRG:09A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$89B0 PRG:09B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$89C0 PRG:09C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$89D0 PRG:09D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$89E0 PRG:09E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$89F0 PRG:09F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A00 PRG:0A00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A10 PRG:0A10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A20 PRG:0A20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A30 PRG:0A30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A40 PRG:0A40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A50 PRG:0A50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A60 PRG:0A60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A70 PRG:0A70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A80 PRG:0A80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8A90 PRG:0A90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8AA0 PRG:0AA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8AB0 PRG:0AB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8AC0 PRG:0AC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8AD0 PRG:0AD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8AE0 PRG:0AE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8AF0 PRG:0AF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B00 PRG:0B00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B10 PRG:0B10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B20 PRG:0B20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B30 PRG:0B30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B40 PRG:0B40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B50 PRG:0B50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B60 PRG:0B60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B70 PRG:0B70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B80 PRG:0B80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8B90 PRG:0B90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8BA0 PRG:0BA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8BB0 PRG:0BB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8BC0 PRG:0BC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8BD0 PRG:0BD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8BE0 PRG:0BE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8BF0 PRG:0BF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C00 PRG:0C00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C10 PRG:0C10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C20 PRG:0C20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C30 PRG:0C30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C40 PRG:0C40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C50 PRG:0C50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C60 PRG:0C60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C70 PRG:0C70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C80 PRG:0C80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8C90 PRG:0C90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8CA0 PRG:0CA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8CB0 PRG:0CB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8CC0 PRG:0CC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8CD0 PRG:0CD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8CE0 PRG:0CE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8CF0 PRG:0CF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D00 PRG:0D00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D10 PRG:0D10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D20 PRG:0D20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D30 PRG:0D30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D40 PRG:0D40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D50 PRG:0D50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D60 PRG:0D60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D70 PRG:0D70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D80 PRG:0D80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8D90 PRG:0D90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8DA0 PRG:0DA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8DB0 PRG:0DB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8DC0 PRG:0DC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8DD0 PRG:0DD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8DE0 PRG:0DE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8DF0 PRG:0DF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E00 PRG:0E00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E10 PRG:0E10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E20 PRG:0E20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E30 PRG:0E30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E40 PRG:0E40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E50 PRG:0E50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E60 PRG:0E60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E70 PRG:0E70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E80 PRG:0E80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8E90 PRG:0E90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8EA0 PRG:0EA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8EB0 PRG:0EB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8EC0 PRG:0EC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8ED0 PRG:0ED0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8EE0 PRG:0EE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8EF0 PRG:0EF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F00 PRG:0F00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F10 PRG:0F10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F20 PRG:0F20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F30 PRG:0F30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F40 PRG:0F40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F50 PRG:0F50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F60 PRG:0F60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F70 PRG:0F70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F80 PRG:0F80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8F90 PRG:0F90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8FA0 PRG:0FA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8FB0 PRG:0FB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8FC0 PRG:0FC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8FD0 PRG:0FD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8FE0 PRG:0FE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$8FF0 PRG:0FF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9000 PRG:1000 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9010 PRG:1010 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9020 PRG:1020 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9030 PRG:1030 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9040 PRG:1040 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9050 PRG:1050 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9060 PRG:1060 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9070 PRG:1070 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9080 PRG:1080 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9090 PRG:1090 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$90A0 PRG:10A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$90B0 PRG:10B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$90C0 PRG:10C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$90D0 PRG:10D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$90E0 PRG:10E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$90F0 PRG:10F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9100 PRG:1100 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9110 PRG:1110 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9120 PRG:1120 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9130 PRG:1130 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9140 PRG:1140 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9150 PRG:1150 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9160 PRG:1160 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9170 PRG:1170 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9180 PRG:1180 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9190 PRG:1190 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$91A0 PRG:11A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$91B0 PRG:11B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$91C0 PRG:11C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$91D0 PRG:11D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$91E0 PRG:11E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$91F0 PRG:11F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9200 PRG:1200 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9210 PRG:1210 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9220 PRG:1220 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9230 PRG:1230 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9240 PRG:1240 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9250 PRG:1250 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9260 PRG:1260 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9270 PRG:1270 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9280 PRG:1280 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9290 PRG:1290 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$92A0 PRG:12A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$92B0 PRG:12B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$92C0 PRG:12C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$92D0 PRG:12D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$92E0 PRG:12E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$92F0 PRG:12F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9300 PRG:1300 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9310 PRG:1310 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9320 PRG:1320 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9330 PRG:1330 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9340 PRG:1340 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9350 PRG:1350 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9360 PRG:1360 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9370 PRG:1370 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9380 PRG:1380 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9390 PRG:1390 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$93A0 PRG:13A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$93B0 PRG:13B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$93C0 PRG:13C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$93D0 PRG:13D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$93E0 PRG:13E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$93F0 PRG:13F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9400 PRG:1400 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9410 PRG:1410 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9420 PRG:1420 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9430 PRG:1430 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9440 PRG:1440 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9450 PRG:1450 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9460 PRG:1460 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9470 PRG:1470 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9480 PRG:1480 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9490 PRG:1490 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$94A0 PRG:14A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$94B0 PRG:14B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$94C0 PRG:14C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$94D0 PRG:14D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$94E0 PRG:14E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$94F0 PRG:14F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9500 PRG:1500 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9510 PRG:1510 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9520 PRG:1520 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9530 PRG:1530 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9540 PRG:1540 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9550 PRG:1550 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9560 PRG:1560 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9570 PRG:1570 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9580 PRG:1580 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9590 PRG:1590 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$95A0 PRG:15A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$95B0 PRG:15B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$95C0 PRG:15C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$95D0 PRG:15D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$95E0 PRG:15E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$95F0 PRG:15F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9600 PRG:1600 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9610 PRG:1610 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9620 PRG:1620 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9630 PRG:1630 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9640 PRG:1640 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9650 PRG:1650 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9660 PRG:1660 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9670 PRG:1670 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9680 PRG:1680 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9690 PRG:1690 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$96A0 PRG:16A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$96B0 PRG:16B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$96C0 PRG:16C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$96D0 PRG:16D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$96E0 PRG:16E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$96F0 PRG:16F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9700 PRG:1700 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9710 PRG:1710 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9720 PRG:1720 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9730 PRG:1730 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9740 PRG:1740 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9750 PRG:1750 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9760 PRG:1760 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9770 PRG:1770 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9780 PRG:1780 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9790 PRG:1790 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$97A0 PRG:17A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$97B0 PRG:17B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$97C0 PRG:17C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$97D0 PRG:17D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$97E0 PRG:17E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$97F0 PRG:17F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9800 PRG:1800 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9810 PRG:1810 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9820 PRG:1820 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9830 PRG:1830 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9840 PRG:1840 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9850 PRG:1850 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9860 PRG:1860 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9870 PRG:1870 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9880 PRG:1880 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9890 PRG:1890 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$98A0 PRG:18A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$98B0 PRG:18B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$98C0 PRG:18C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$98D0 PRG:18D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$98E0 PRG:18E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$98F0 PRG:18F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9900 PRG:1900 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9910 PRG:1910 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9920 PRG:1920 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9930 PRG:1930 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9940 PRG:1940 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9950 PRG:1950 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9960 PRG:1960 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9970 PRG:1970 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9980 PRG:1980 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9990 PRG:1990 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$99A0 PRG:19A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$99B0 PRG:19B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$99C0 PRG:19C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$99D0 PRG:19D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$99E0 PRG:19E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$99F0 PRG:19F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A00 PRG:1A00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A10 PRG:1A10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A20 PRG:1A20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A30 PRG:1A30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A40 PRG:1A40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A50 PRG:1A50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A60 PRG:1A60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A70 PRG:1A70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A80 PRG:1A80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9A90 PRG:1A90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9AA0 PRG:1AA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9AB0 PRG:1AB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9AC0 PRG:1AC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9AD0 PRG:1AD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9AE0 PRG:1AE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9AF0 PRG:1AF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B00 PRG:1B00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B10 PRG:1B10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B20 PRG:1B20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B30 PRG:1B30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B40 PRG:1B40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B50 PRG:1B50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B60 PRG:1B60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B70 PRG:1B70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B80 PRG:1B80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9B90 PRG:1B90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9BA0 PRG:1BA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9BB0 PRG:1BB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9BC0 PRG:1BC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9BD0 PRG:1BD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9BE0 PRG:1BE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9BF0 PRG:1BF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C00 PRG:1C00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C10 PRG:1C10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C20 PRG:1C20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C30 PRG:1C30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C40 PRG:1C40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C50 PRG:1C50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C60 PRG:1C60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C70 PRG:1C70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C80 PRG:1C80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9C90 PRG:1C90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9CA0 PRG:1CA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9CB0 PRG:1CB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9CC0 PRG:1CC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9CD0 PRG:1CD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9CE0 PRG:1CE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9CF0 PRG:1CF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D00 PRG:1D00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D10 PRG:1D10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D20 PRG:1D20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D30 PRG:1D30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D40 PRG:1D40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D50 PRG:1D50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D60 PRG:1D60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D70 PRG:1D70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D80 PRG:1D80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9D90 PRG:1D90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9DA0 PRG:1DA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9DB0 PRG:1DB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9DC0 PRG:1DC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9DD0 PRG:1DD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9DE0 PRG:1DE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9DF0 PRG:1DF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E00 PRG:1E00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E10 PRG:1E10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E20 PRG:1E20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E30 PRG:1E30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E40 PRG:1E40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E50 PRG:1E50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E60 PRG:1E60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E70 PRG:1E70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E80 PRG:1E80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9E90 PRG:1E90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9EA0 PRG:1EA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9EB0 PRG:1EB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9EC0 PRG:1EC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9ED0 PRG:1ED0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9EE0 PRG:1EE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9EF0 PRG:1EF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F00 PRG:1F00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F10 PRG:1F10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F20 PRG:1F20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F30 PRG:1F30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F40 PRG:1F40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F50 PRG:1F50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F60 PRG:1F60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F70 PRG:1F70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F80 PRG:1F80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9F90 PRG:1F90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9FA0 PRG:1FA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9FB0 PRG:1FB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9FC0 PRG:1FC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9FD0 PRG:1FD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9FE0 PRG:1FE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$9FF0 PRG:1FF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A000 PRG:2000 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A010 PRG:2010 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A020 PRG:2020 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A030 PRG:2030 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A040 PRG:2040 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A050 PRG:2050 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A060 PRG:2060 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A070 PRG:2070 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A080 PRG:2080 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A090 PRG:2090 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A0A0 PRG:20A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A0B0 PRG:20B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A0C0 PRG:20C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A0D0 PRG:20D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A0E0 PRG:20E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A0F0 PRG:20F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A100 PRG:2100 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A110 PRG:2110 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A120 PRG:2120 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A130 PRG:2130 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A140 PRG:2140 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A150 PRG:2150 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A160 PRG:2160 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A170 PRG:2170 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A180 PRG:2180 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A190 PRG:2190 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A1A0 PRG:21A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A1B0 PRG:21B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A1C0 PRG:21C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A1D0 PRG:21D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A1E0 PRG:21E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A1F0 PRG:21F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A200 PRG:2200 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A210 PRG:2210 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A220 PRG:2220 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A230 PRG:2230 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A240 PRG:2240 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A250 PRG:2250 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A260 PRG:2260 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A270 PRG:2270 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A280 PRG:2280 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A290 PRG:2290 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A2A0 PRG:22A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A2B0 PRG:22B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A2C0 PRG:22C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A2D0 PRG:22D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A2E0 PRG:22E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A2F0 PRG:22F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A300 PRG:2300 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A310 PRG:2310 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A320 PRG:2320 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A330 PRG:2330 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A340 PRG:2340 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A350 PRG:2350 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A360 PRG:2360 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A370 PRG:2370 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A380 PRG:2380 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A390 PRG:2390 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A3A0 PRG:23A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A3B0 PRG:23B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A3C0 PRG:23C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A3D0 PRG:23D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A3E0 PRG:23E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A3F0 PRG:23F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A400 PRG:2400 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A410 PRG:2410 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A420 PRG:2420 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A430 PRG:2430 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A440 PRG:2440 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A450 PRG:2450 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A460 PRG:2460 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A470 PRG:2470 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A480 PRG:2480 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A490 PRG:2490 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A4A0 PRG:24A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A4B0 PRG:24B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A4C0 PRG:24C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A4D0 PRG:24D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A4E0 PRG:24E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A4F0 PRG:24F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A500 PRG:2500 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A510 PRG:2510 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A520 PRG:2520 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A530 PRG:2530 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A540 PRG:2540 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A550 PRG:2550 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A560 PRG:2560 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A570 PRG:2570 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A580 PRG:2580 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A590 PRG:2590 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A5A0 PRG:25A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A5B0 PRG:25B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A5C0 PRG:25C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A5D0 PRG:25D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A5E0 PRG:25E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A5F0 PRG:25F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A600 PRG:2600 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A610 PRG:2610 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A620 PRG:2620 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A630 PRG:2630 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A640 PRG:2640 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A650 PRG:2650 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A660 PRG:2660 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A670 PRG:2670 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A680 PRG:2680 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A690 PRG:2690 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A6A0 PRG:26A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A6B0 PRG:26B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A6C0 PRG:26C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A6D0 PRG:26D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A6E0 PRG:26E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A6F0 PRG:26F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A700 PRG:2700 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A710 PRG:2710 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A720 PRG:2720 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A730 PRG:2730 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A740 PRG:2740 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A750 PRG:2750 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A760 PRG:2760 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A770 PRG:2770 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A780 PRG:2780 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A790 PRG:2790 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A7A0 PRG:27A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A7B0 PRG:27B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A7C0 PRG:27C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A7D0 PRG:27D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A7E0 PRG:27E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A7F0 PRG:27F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A800 PRG:2800 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A810 PRG:2810 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A820 PRG:2820 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A830 PRG:2830 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A840 PRG:2840 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A850 PRG:2850 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A860 PRG:2860 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A870 PRG:2870 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A880 PRG:2880 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A890 PRG:2890 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A8A0 PRG:28A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A8B0 PRG:28B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A8C0 PRG:28C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A8D0 PRG:28D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A8E0 PRG:28E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A8F0 PRG:28F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A900 PRG:2900 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A910 PRG:2910 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A920 PRG:2920 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A930 PRG:2930 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A940 PRG:2940 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A950 PRG:2950 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A960 PRG:2960 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A970 PRG:2970 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A980 PRG:2980 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A990 PRG:2990 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A9A0 PRG:29A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A9B0 PRG:29B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A9C0 PRG:29C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A9D0 PRG:29D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A9E0 PRG:29E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$A9F0 PRG:29F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA00 PRG:2A00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA10 PRG:2A10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA20 PRG:2A20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA30 PRG:2A30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA40 PRG:2A40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA50 PRG:2A50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA60 PRG:2A60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA70 PRG:2A70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA80 PRG:2A80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AA90 PRG:2A90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AAA0 PRG:2AA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AAB0 PRG:2AB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AAC0 PRG:2AC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AAD0 PRG:2AD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AAE0 PRG:2AE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AAF0 PRG:2AF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB00 PRG:2B00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB10 PRG:2B10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB20 PRG:2B20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB30 PRG:2B30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB40 PRG:2B40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB50 PRG:2B50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB60 PRG:2B60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB70 PRG:2B70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB80 PRG:2B80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AB90 PRG:2B90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ABA0 PRG:2BA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ABB0 PRG:2BB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ABC0 PRG:2BC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ABD0 PRG:2BD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ABE0 PRG:2BE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ABF0 PRG:2BF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC00 PRG:2C00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC10 PRG:2C10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC20 PRG:2C20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC30 PRG:2C30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC40 PRG:2C40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC50 PRG:2C50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC60 PRG:2C60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC70 PRG:2C70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC80 PRG:2C80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AC90 PRG:2C90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ACA0 PRG:2CA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ACB0 PRG:2CB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ACC0 PRG:2CC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ACD0 PRG:2CD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ACE0 PRG:2CE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ACF0 PRG:2CF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD00 PRG:2D00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD10 PRG:2D10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD20 PRG:2D20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD30 PRG:2D30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD40 PRG:2D40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD50 PRG:2D50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD60 PRG:2D60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD70 PRG:2D70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD80 PRG:2D80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AD90 PRG:2D90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ADA0 PRG:2DA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ADB0 PRG:2DB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ADC0 PRG:2DC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ADD0 PRG:2DD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ADE0 PRG:2DE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$ADF0 PRG:2DF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE00 PRG:2E00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE10 PRG:2E10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE20 PRG:2E20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE30 PRG:2E30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE40 PRG:2E40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE50 PRG:2E50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE60 PRG:2E60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE70 PRG:2E70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE80 PRG:2E80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AE90 PRG:2E90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AEA0 PRG:2EA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AEB0 PRG:2EB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AEC0 PRG:2EC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AED0 PRG:2ED0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AEE0 PRG:2EE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AEF0 PRG:2EF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF00 PRG:2F00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF10 PRG:2F10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF20 PRG:2F20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF30 PRG:2F30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF40 PRG:2F40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF50 PRG:2F50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF60 PRG:2F60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF70 PRG:2F70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF80 PRG:2F80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AF90 PRG:2F90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AFA0 PRG:2FA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AFB0 PRG:2FB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AFC0 PRG:2FC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AFD0 PRG:2FD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AFE0 PRG:2FE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$AFF0 PRG:2FF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B000 PRG:3000 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B010 PRG:3010 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B020 PRG:3020 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B030 PRG:3030 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B040 PRG:3040 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B050 PRG:3050 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B060 PRG:3060 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B070 PRG:3070 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B080 PRG:3080 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B090 PRG:3090 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B0A0 PRG:30A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B0B0 PRG:30B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B0C0 PRG:30C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B0D0 PRG:30D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B0E0 PRG:30E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B0F0 PRG:30F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B100 PRG:3100 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B110 PRG:3110 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B120 PRG:3120 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B130 PRG:3130 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B140 PRG:3140 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B150 PRG:3150 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B160 PRG:3160 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B170 PRG:3170 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B180 PRG:3180 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B190 PRG:3190 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B1A0 PRG:31A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B1B0 PRG:31B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B1C0 PRG:31C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B1D0 PRG:31D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B1E0 PRG:31E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B1F0 PRG:31F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B200 PRG:3200 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B210 PRG:3210 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B220 PRG:3220 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B230 PRG:3230 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B240 PRG:3240 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B250 PRG:3250 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B260 PRG:3260 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B270 PRG:3270 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B280 PRG:3280 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B290 PRG:3290 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B2A0 PRG:32A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B2B0 PRG:32B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B2C0 PRG:32C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B2D0 PRG:32D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B2E0 PRG:32E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B2F0 PRG:32F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B300 PRG:3300 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B310 PRG:3310 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B320 PRG:3320 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B330 PRG:3330 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B340 PRG:3340 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B350 PRG:3350 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B360 PRG:3360 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B370 PRG:3370 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B380 PRG:3380 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B390 PRG:3390 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B3A0 PRG:33A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B3B0 PRG:33B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B3C0 PRG:33C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B3D0 PRG:33D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B3E0 PRG:33E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B3F0 PRG:33F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B400 PRG:3400 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B410 PRG:3410 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B420 PRG:3420 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B430 PRG:3430 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B440 PRG:3440 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B450 PRG:3450 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B460 PRG:3460 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B470 PRG:3470 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B480 PRG:3480 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B490 PRG:3490 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B4A0 PRG:34A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B4B0 PRG:34B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B4C0 PRG:34C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B4D0 PRG:34D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B4E0 PRG:34E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B4F0 PRG:34F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B500 PRG:3500 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B510 PRG:3510 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B520 PRG:3520 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B530 PRG:3530 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B540 PRG:3540 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B550 PRG:3550 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B560 PRG:3560 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B570 PRG:3570 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B580 PRG:3580 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B590 PRG:3590 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B5A0 PRG:35A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B5B0 PRG:35B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B5C0 PRG:35C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B5D0 PRG:35D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B5E0 PRG:35E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B5F0 PRG:35F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B600 PRG:3600 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B610 PRG:3610 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B620 PRG:3620 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B630 PRG:3630 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B640 PRG:3640 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B650 PRG:3650 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B660 PRG:3660 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B670 PRG:3670 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B680 PRG:3680 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B690 PRG:3690 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B6A0 PRG:36A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B6B0 PRG:36B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B6C0 PRG:36C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B6D0 PRG:36D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B6E0 PRG:36E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B6F0 PRG:36F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B700 PRG:3700 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B710 PRG:3710 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B720 PRG:3720 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B730 PRG:3730 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B740 PRG:3740 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B750 PRG:3750 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B760 PRG:3760 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B770 PRG:3770 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B780 PRG:3780 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B790 PRG:3790 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B7A0 PRG:37A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B7B0 PRG:37B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B7C0 PRG:37C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B7D0 PRG:37D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B7E0 PRG:37E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B7F0 PRG:37F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B800 PRG:3800 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B810 PRG:3810 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B820 PRG:3820 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B830 PRG:3830 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B840 PRG:3840 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B850 PRG:3850 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B860 PRG:3860 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B870 PRG:3870 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B880 PRG:3880 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B890 PRG:3890 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B8A0 PRG:38A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B8B0 PRG:38B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B8C0 PRG:38C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B8D0 PRG:38D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B8E0 PRG:38E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B8F0 PRG:38F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B900 PRG:3900 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B910 PRG:3910 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B920 PRG:3920 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B930 PRG:3930 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B940 PRG:3940 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B950 PRG:3950 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B960 PRG:3960 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B970 PRG:3970 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B980 PRG:3980 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B990 PRG:3990 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B9A0 PRG:39A0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B9B0 PRG:39B0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B9C0 PRG:39C0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B9D0 PRG:39D0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B9E0 PRG:39E0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$B9F0 PRG:39F0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA00 PRG:3A00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA10 PRG:3A10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA20 PRG:3A20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA30 PRG:3A30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA40 PRG:3A40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA50 PRG:3A50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA60 PRG:3A60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA70 PRG:3A70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA80 PRG:3A80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BA90 PRG:3A90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BAA0 PRG:3AA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BAB0 PRG:3AB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BAC0 PRG:3AC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BAD0 PRG:3AD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BAE0 PRG:3AE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BAF0 PRG:3AF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB00 PRG:3B00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB10 PRG:3B10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB20 PRG:3B20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB30 PRG:3B30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB40 PRG:3B40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB50 PRG:3B50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB60 PRG:3B60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB70 PRG:3B70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB80 PRG:3B80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BB90 PRG:3B90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BBA0 PRG:3BA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BBB0 PRG:3BB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BBC0 PRG:3BC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BBD0 PRG:3BD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BBE0 PRG:3BE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BBF0 PRG:3BF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC00 PRG:3C00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC10 PRG:3C10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC20 PRG:3C20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC30 PRG:3C30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC40 PRG:3C40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC50 PRG:3C50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC60 PRG:3C60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC70 PRG:3C70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC80 PRG:3C80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BC90 PRG:3C90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BCA0 PRG:3CA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BCB0 PRG:3CB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BCC0 PRG:3CC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BCD0 PRG:3CD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BCE0 PRG:3CE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BCF0 PRG:3CF0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD00 PRG:3D00 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD10 PRG:3D10 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD20 PRG:3D20 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD30 PRG:3D30 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD40 PRG:3D40 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD50 PRG:3D50 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD60 PRG:3D60 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD70 PRG:3D70 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD80 PRG:3D80 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BD90 PRG:3D90 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BDA0 PRG:3DA0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BDB0 PRG:3DB0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BDC0 PRG:3DC0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BDD0 PRG:3DD0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BDE0 PRG:3DE0 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BDF0 PRG:3DF0 FF FF FF FF FF FF FF FF FF FF FF FF ; ----------------------------------------------------------------------------- ; Routine: SetupAttractScreen ; Global: Computes the record of the attract screen's PPU write list that the frame counter asks for and queues it. ; Local: Executes 21 instructions: calls TurnOffRendering; loads A with $06; stores A ; to $0471; loads X with $FF; stores X to Zp50; calls ClearBothNametables; and ; 15 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0471 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SetupAttractScreen: jsr TurnOffRendering ; CPU:$BE00 PRG:3E00 20 8A C2 lda #$06 ; CPU:$BE03 PRG:3E03 A9 06 sta $0471 ; CPU:$BE05 PRG:3E05 8D 71 04 ldx #$FF ; CPU:$BE08 PRG:3E08 A2 FF stx Zp50 ; CPU:$BE0A PRG:3E0A 86 50 jsr ClearBothNametables ; CPU:$BE0C PRG:3E0C 20 3B C2 jsr SetupOamGroupTable ; CPU:$BE0F PRG:3E0F 20 A0 C4 lda #$00 ; CPU:$BE12 PRG:3E12 A9 00 sta StarFieldPtrLo ; CPU:$BE14 PRG:3E14 85 00 lda #$BF ; CPU:$BE16 PRG:3E16 A9 BF sta StarFieldPtrHi ; CPU:$BE18 PRG:3E18 85 01 lda #$0B ; CPU:$BE1A PRG:3E1A A9 0B sta StarFieldCount ; CPU:$BE1C PRG:3E1C 85 06 jsr AdvanceVramWriteQueue ; CPU:$BE1E PRG:3E1E 20 91 C1 jsr Sub_CE4F ; CPU:$BE21 PRG:3E21 20 4F CE jsr QueueAttractScreenRow ; CPU:$BE24 PRG:3E24 20 CE C9 lda PpuCtrlShadow ; CPU:$BE27 PRG:3E27 A5 40 and #$FD ; CPU:$BE29 PRG:3E29 29 FD sta PpuCtrlShadow ; CPU:$BE2B PRG:3E2B 85 40 sta PPUCTRL ; CPU:$BE2D PRG:3E2D 8D 00 20 jmp TurnOnRendering ; CPU:$BE30 PRG:3E30 4C AD C2 ; ----------------------------------------------------------------------------- ; Routine: QueueAttractScreenRecord ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 16 instructions: loads A from Zp49; ANDs A with $03; ; branches on not equal to Sub_Loop; loads A from Zp48; ANDs A with ; $0C; stores A to StarFieldPtrLo; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- QueueAttractScreenRecord: lda Zp49 ; CPU:$BE33 PRG:3E33 A5 49 and #$03 ; CPU:$BE35 PRG:3E35 29 03 bne Sub_Loop ; CPU:$BE37 PRG:3E37 D0 19 lda Zp48 ; CPU:$BE39 PRG:3E39 A5 48 and #$0C ; CPU:$BE3B PRG:3E3B 29 0C sta StarFieldPtrLo ; CPU:$BE3D PRG:3E3D 85 00 asl a ; CPU:$BE3F PRG:3E3F 0A lsr StarFieldPtrLo ; CPU:$BE40 PRG:3E40 46 00 adc StarFieldPtrLo ; CPU:$BE42 PRG:3E42 65 00 lsr StarFieldPtrLo ; CPU:$BE44 PRG:3E44 46 00 adc StarFieldPtrLo ; CPU:$BE46 PRG:3E46 65 00 adc #$B8 ; CPU:$BE48 PRG:3E48 69 B8 tax ; CPU:$BE4A PRG:3E4A AA lda #$BF ; CPU:$BE4B PRG:3E4B A9 BF adc #$00 ; CPU:$BE4D PRG:3E4D 69 00 jmp QueueVramWritePointer ; CPU:$BE4F PRG:3E4F 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: Sub_Loop ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 3 instructions: loads X with $B8; loads A with $BF; calls ; QueueVramWritePointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, $0100, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- Sub_Loop: ldx #$B8 ; CPU:$BE52 PRG:3E52 A2 B8 lda #$BF ; CPU:$BE54 PRG:3E54 A9 BF jmp QueueVramWritePointer ; CPU:$BE56 PRG:3E56 4C 17 C1 ; ---- data $BE59-$BFFF (423 bytes) ---- ; referenced by `lax $BFDC` at $DC5A (operand $BFDC falls inside this region) ErasedPrgFill2: .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BE59 PRG:-1A7 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ; CPU:$BE59 PRG:3E59 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BE69 PRG:3E69 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BE79 PRG:3E79 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BE89 PRG:3E89 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BE99 PRG:3E99 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BEA9 PRG:3EA9 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BEB9 PRG:3EB9 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BEC9 PRG:3EC9 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BED9 PRG:3ED9 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BEE9 PRG:3EE9 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BEF9 PRG:3EF9 FF FF FF FF FF FF FF AttractScreenPpuRecordTable: .byte $C9, $28, $0B, $13, $14, $1A, $20, $21, $23 ; CPU:$BF00 PRG:3F00 C9 28 0B 13 14 1A 20 21 23 .byte $CC, $CD, $CE, $F0, $F1, $E8, $28, $0C, $F2, $F3, $F4, $F5, $F6, $F7, $F8, $13 ; CPU:$BF09 PRG:3F09 CC CD CE F0 F1 E8 28 0C F2 F3 F4 F5 .byte $F9, $FA, $FB, $FC, $08, $29, $0C, $13, $14, $1A, $20, $21, $23, $CC, $CD, $CE ; CPU:$BF19 PRG:3F19 F9 FA FB FC 08 29 0C 13 14 1A 20 21 .byte $F0, $F1, $F2, $28, $29, $0B, $F3, $F4, $F5, $F6, $F7, $F8, $F9, $FA, $FB, $FC ; CPU:$BF29 PRG:3F29 F0 F1 F2 28 29 0B F3 F4 F5 F6 F7 F8 .byte $FD, $4F, $29, $03, $FE, $FD, $FE, $6F, $29, $02, $FF, $FF, $CA, $29, $08, $01 ; CPU:$BF39 PRG:3F39 FD 4F 29 03 FE FD FE 6F 29 02 FF FF .byte $24, $19, $15, $0A, $22, $0E, $1B, $0A, $2A, $09, $02, $24, $19, $15, $0A, $22 ; CPU:$BF49 PRG:3F49 24 19 15 0A 22 0E 1B 0A 2A 09 02 24 .byte $0E, $1B, $1C, $80, $2A, $1D, $1D, $16, $24, $0A, $17, $0D, $24, $29, $24, $01 ; CPU:$BF59 PRG:3F59 0E 1B 1C 80 2A 1D 1D 16 24 0A 17 0D .byte $09, $08, $01, $24, $01, $09, $08, $08, $24, $17, $0A, $16, $0C, $18, $24, $15 ; CPU:$BF69 PRG:3F69 09 08 01 24 01 09 08 08 24 17 0A 16 .byte $1D, $0D, $28, $01, $2B, $1B, $0B, $0A, $17, $0D, $0A, $12, $24, $0C, $18, $28 ; CPU:$BF79 PRG:3F79 1D 0D 28 01 2B 1B 0B 0A 17 0D 0A 12 .byte $24, $15, $1D, $0D, $28, $24, $12, $1C, $24, $15, $12, $0C, $0E, $17, $1C, $0E ; CPU:$BF89 PRG:3F89 24 15 1D 0D 28 24 12 1C 24 15 12 0C .byte $0D, $41, $2B, $1B, $0B, $22, $24, $17, $12, $17, $1D, $0E, $17, $0D, $18, $24 ; CPU:$BF99 PRG:3F99 0D 41 2B 1B 0B 22 24 17 12 17 1D 0E .byte $18, $0F, $24, $0A, $16, $0E, $1B, $12, $0C, $0A, $24, $12, $17, $0C, $28, $08 ; CPU:$BFA9 PRG:3FA9 18 0F 24 0A 16 0E 1B 12 0C 0A 24 12 .byte $3F, $08, $0F, $0F, $2A, $2A, $0F, $2A, $0F, $2A, $08, $3F, $08, $0F, $0F, $3A ; CPU:$BFB9 PRG:3FB9 3F 08 0F 0F 2A 2A 0F 2A 0F 2A 08 3F .byte $3A, $0F, $3A, $0F, $3A, $08, $3F, $08, $0F, $0F, $0A, $0A, $0F, $0A, $0F, $0A ; CPU:$BFC9 PRG:3FC9 3A 0F 3A 0F 3A 08 3F 08 0F 0F 0A 0A .byte $08, $3F, $08, $0F, $0F, $1A, $1A, $0F, $1A, $0F, $1A, $FF, $FF, $FF, $FF, $FF ; CPU:$BFD9 PRG:3FD9 08 3F 08 0F 0F 1A 1A 0F 1A 0F 1A FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BFE9 PRG:3FE9 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$BFF9 PRG:3FF9 FF FF FF FF FF FF FF ; ----------------------------------------------------------------------------- ; Routine: Reset ; Global: Writes zero to the PPUCTRL and PPUMASK registers so that the PPU shows nothing. ; Local: Executes 2 instructions: disables interrupts; clears the decimal ; flag. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, all the processor flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset: sei ; CPU:$C000 PRG:4000 78 cld ; CPU:$C001 PRG:4001 D8 ; ----------------------------------------------------------------------------- ; Routine: DisablePpuRendering ; Global: The routine writes the PPUCTRL and PPUMASK registers. ; Local: Executes 3 instructions: loads X with $00; stores X to the PPUCTRL ; register; stores X to the PPUMASK register. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves the PPUCTRL and PPUMASK registers set. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- DisablePpuRendering: ldx #$00 ; CPU:$C002 PRG:4002 A2 00 stx PPUCTRL ; CPU:$C004 PRG:4004 8E 00 20 stx PPUMASK ; CPU:$C007 PRG:4007 8E 01 20 ; ----------------------------------------------------------------------------- ; Routine: Reset_OnNonnegative ; Global: The routine reads the PPUSTATUS register. ; Local: Executes 9 instructions: loads A from the PPUSTATUS register; ; branches on non-negative to Reset_OnNonnegative; loads X with $BF; ; loads A with $A5; compares A with ZpFF; branches on not equal to ; Reset_Loop; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_OnNonnegative: lda PPUSTATUS ; CPU:$C00A PRG:400A AD 02 20 bpl Reset_OnNonnegative ; CPU:$C00D PRG:400D 10 FB ldx #$BF ; CPU:$C00F PRG:400F A2 BF txs ; CPU:$C011 PRG:4011 9A lda #$A5 ; CPU:$C012 PRG:4012 A9 A5 cmp ZpFF ; CPU:$C014 PRG:4014 C5 FF bne Reset_Loop ; CPU:$C016 PRG:4016 D0 04 ldy #$D0 ; CPU:$C018 PRG:4018 A0 D0 bmi Reset_Loop2 ; CPU:$C01A PRG:401A 30 02 ; ----------------------------------------------------------------------------- ; Routine: Reset_Loop ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads Y with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_Loop: ldy #$00 ; CPU:$C01C PRG:401C A0 00 ; ----------------------------------------------------------------------------- ; Routine: Reset_Loop2 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $00; stores A to ; StarFieldPtrHi; stores A to StarFieldPtrLo; loads X with $07. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_Loop2: lda #$00 ; CPU:$C01E PRG:401E A9 00 sta StarFieldPtrHi ; CPU:$C020 PRG:4020 85 01 sta StarFieldPtrLo ; CPU:$C022 PRG:4022 85 00 ldx #$07 ; CPU:$C024 PRG:4024 A2 07 ; ----------------------------------------------------------------------------- ; Routine: Reset_OnNonzero ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 16 instructions: decrements Y; stores A to ; ((StarFieldPtrLo),y); branches on not equal to Reset_OnNonzero; ; increments StarFieldPtrHi; decrements X; branches on non-negative ; to Reset_OnNonzero; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_OnNonzero: dey ; CPU:$C026 PRG:4026 88 sta (StarFieldPtrLo),y ; CPU:$C027 PRG:4027 91 00 bne Reset_OnNonzero ; CPU:$C029 PRG:4029 D0 FB inc StarFieldPtrHi ; CPU:$C02B PRG:402B E6 01 dex ; CPU:$C02D PRG:402D CA bpl Reset_OnNonzero ; CPU:$C02E PRG:402E 10 F6 lda #$A5 ; CPU:$C030 PRG:4030 A9 A5 cmp ZpFF ; CPU:$C032 PRG:4032 C5 FF beq Reset_Loop3 ; CPU:$C034 PRG:4034 F0 0E sta ZpFF ; CPU:$C036 PRG:4036 85 FF lda #$03 ; CPU:$C038 PRG:4038 A9 03 sta ZpFA ; CPU:$C03A PRG:403A 85 FA lda #$01 ; CPU:$C03C PRG:403C A9 01 sta ZpDF ; CPU:$C03E PRG:403E 85 DF lda #$02 ; CPU:$C040 PRG:4040 A9 02 sta ZpDE ; CPU:$C042 PRG:4042 85 DE ; ----------------------------------------------------------------------------- ; Routine: Reset_Loop3 ; Global: The routine calls NmiHandler_Loop6, ClearBothNametables, SetupOamGroupTable, QueueScreenUpdateRecord and ; 3 more, writes the JOY2 and PPUCTRL registers. ; Local: Executes 20 instructions: calls NmiHandler_Loop6; calls ClearBothNametables; ; calls SetupOamGroupTable; calls QueueScreenUpdateRecord; calls InitCommandQueue; calls Sub_F790; and ; 14 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves the JOY2 and PPUCTRL registers set. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_Loop3: jsr NmiHandler_Loop6 ; CPU:$C044 PRG:4044 20 32 C2 jsr ClearBothNametables ; CPU:$C047 PRG:4047 20 3B C2 jsr SetupOamGroupTable ; CPU:$C04A PRG:404A 20 A0 C4 jsr QueueScreenUpdateRecord ; CPU:$C04D PRG:404D 20 BC C2 jsr InitCommandQueue ; CPU:$C050 PRG:4050 20 03 C1 jsr Sub_F790 ; CPU:$C053 PRG:4053 20 90 F7 jsr ResetApuAndExpansionPort ; CPU:$C056 PRG:4056 20 DA EA lda #$1E ; CPU:$C059 PRG:4059 A9 1E sta PpuMaskShadow ; CPU:$C05B PRG:405B 85 41 lda #$F8 ; CPU:$C05D PRG:405D A9 F8 sta Zp42 ; CPU:$C05F PRG:405F 85 42 lda #$E8 ; CPU:$C061 PRG:4061 A9 E8 sta Zp43 ; CPU:$C063 PRG:4063 85 43 lda #$C0 ; CPU:$C065 PRG:4065 A9 C0 sta JOY2 ; CPU:$C067 PRG:4067 8D 17 40 lda #$01 ; CPU:$C06A PRG:406A A9 01 sta Zp4B ; CPU:$C06C PRG:406C 85 4B lda #$B0 ; CPU:$C06E PRG:406E A9 B0 sta PPUCTRL ; CPU:$C070 PRG:4070 8D 00 20 sta PpuCtrlShadow ; CPU:$C073 PRG:4073 85 40 ; ----------------------------------------------------------------------------- ; Routine: Sub_C075 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $01; stores A to Zp4A. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_C075: lda #$01 ; CPU:$C075 PRG:4075 A9 01 sta Zp4A ; CPU:$C077 PRG:4077 85 4A ; ----------------------------------------------------------------------------- ; Routine: Reset_OnNonzero2 ; Global: The routine calls Sub_EB08 and StrobeControllerRead. ; Local: Executes 7 instructions: loads A from Zp4A; branches on not equal to ; Reset_OnNonzero2; calls Sub_EB08; calls StrobeControllerRead; increments Zp48; ; branches on not equal to Reset_Loop4; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_OnNonzero2: lda Zp4A ; CPU:$C079 PRG:4079 A5 4A bne Reset_OnNonzero2 ; CPU:$C07B PRG:407B D0 FC jsr Sub_EB08 ; CPU:$C07D PRG:407D 20 08 EB jsr StrobeControllerRead ; CPU:$C080 PRG:4080 20 D2 C2 inc Zp48 ; CPU:$C083 PRG:4083 E6 48 bne Reset_Loop4 ; CPU:$C085 PRG:4085 D0 02 inc Zp49 ; CPU:$C087 PRG:4087 E6 49 ; ----------------------------------------------------------------------------- ; Routine: Reset_Loop4 ; Global: The routine calls QueueVramWritePointer and InitGameScreen. ; Local: Executes 16 instructions: loads A from Zp62; branches on equal to ; Reset_Loop7; loads A from Zp5B; branches on equal to Reset_Loop7; ; loads A from Zp4B; branches on equal to Reset_Loop7; and 10 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_Loop4: lda Zp62 ; CPU:$C089 PRG:4089 A5 62 beq Reset_Loop7 ; CPU:$C08B PRG:408B F0 30 lda Zp5B ; CPU:$C08D PRG:408D A5 5B beq Reset_Loop7 ; CPU:$C08F PRG:408F F0 2C lda Zp4B ; CPU:$C091 PRG:4091 A5 4B beq Reset_Loop7 ; CPU:$C093 PRG:4093 F0 28 lda Zp46 ; CPU:$C095 PRG:4095 A5 46 and #$10 ; CPU:$C097 PRG:4097 29 10 bne Reset_Loop5 ; CPU:$C099 PRG:4099 D0 10 lda Zp48 ; CPU:$C09B PRG:409B A5 48 and #$10 ; CPU:$C09D PRG:409D 29 10 beq Reset_Loop6 ; CPU:$C09F PRG:409F F0 12 ldx #$3B ; CPU:$C0A1 PRG:40A1 A2 3B lda #$F8 ; CPU:$C0A3 PRG:40A3 A9 F8 jsr QueueVramWritePointer ; CPU:$C0A5 PRG:40A5 20 17 C1 jmp InitGameScreen ; CPU:$C0A8 PRG:40A8 4C C2 C0 ; ----------------------------------------------------------------------------- ; Routine: Reset_Loop5 ; Global: The routine writes $0580. ; Local: Executes 4 instructions: loads X with $00; stores X to Zp5B; ; increments X; stores X to $0580. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0580 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_Loop5: ldx #$00 ; CPU:$C0AB PRG:40AB A2 00 stx Zp5B ; CPU:$C0AD PRG:40AD 86 5B inx ; CPU:$C0AF PRG:40AF E8 stx $0580 ; CPU:$C0B0 PRG:40B0 8E 80 05 ; ----------------------------------------------------------------------------- ; Routine: Reset_Loop6 ; Global: The routine calls ParseVramWriteRecord and InitGameScreen. ; Local: Executes 4 instructions: loads X with $3B; loads A with $F8; calls ; ParseVramWriteRecord; calls InitGameScreen. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_Loop6: ldx #$3B ; CPU:$C0B3 PRG:40B3 A2 3B lda #$F8 ; CPU:$C0B5 PRG:40B5 A9 F8 jsr ParseVramWriteRecord ; CPU:$C0B7 PRG:40B7 20 2D C1 jmp InitGameScreen ; CPU:$C0BA PRG:40BA 4C C2 C0 ; ----------------------------------------------------------------------------- ; Routine: Reset_Loop7 ; Global: Lays the game screen out and starts the frame counter. ; Local: Executes 2 instructions: loads A with $C0; calls ExchangeStackPointerWithQueue. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Reset_Loop7: lda #$C0 ; CPU:$C0BD PRG:40BD A9 C0 jsr ExchangeStackPointerWithQueue ; CPU:$C0BF PRG:40BF 20 F5 C0 ; ----------------------------------------------------------------------------- ; Routine: InitGameScreen ; Global: The routine calls DrawGameScreen and Sub_C075. ; Local: Executes 2 instructions: calls DrawGameScreen; calls Sub_C075. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- InitGameScreen: jsr DrawGameScreen ; CPU:$C0C2 PRG:40C2 20 00 C5 jmp Sub_C075 ; CPU:$C0C5 PRG:40C5 4C 75 C0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler ; Global: The routine calls NmiHandler_Loop5 and ApplyPpuScrollAndMask, writes the OAMADDR ; and OAMDMA registers, reads the PPUSTATUS register. ; Local: Executes 18 instructions: pushes A; copies X into A; pushes A; copies ; Y into A; pushes A; loads X from Zp4A; and 12 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves the OAMADDR and OAMDMA ; registers set. ; Clobbers: ; no register, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler: pha ; CPU:$C0C8 PRG:40C8 48 txa ; CPU:$C0C9 PRG:40C9 8A pha ; CPU:$C0CA PRG:40CA 48 tya ; CPU:$C0CB PRG:40CB 98 pha ; CPU:$C0CC PRG:40CC 48 ldx Zp4A ; CPU:$C0CD PRG:40CD A6 4A dex ; CPU:$C0CF PRG:40CF CA bne NmiHandler_Loop ; CPU:$C0D0 PRG:40D0 D0 19 stx Zp4A ; CPU:$C0D2 PRG:40D2 86 4A ldx Zp4B ; CPU:$C0D4 PRG:40D4 A6 4B beq NmiHandler_Loop ; CPU:$C0D6 PRG:40D6 F0 13 lda PPUSTATUS ; CPU:$C0D8 PRG:40D8 AD 02 20 lda #$00 ; CPU:$C0DB PRG:40DB A9 00 sta OAMADDR ; CPU:$C0DD PRG:40DD 8D 03 20 lda #$07 ; CPU:$C0E0 PRG:40E0 A9 07 sta OAMDMA ; CPU:$C0E2 PRG:40E2 8D 14 40 jsr NmiHandler_Loop5 ; CPU:$C0E5 PRG:40E5 20 EA C1 jsr ApplyPpuScrollAndMask ; CPU:$C0E8 PRG:40E8 20 75 C2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop ; Global: Takes the stack pointer and masks it to a page, the offset of the command queue inside the stack page. ; Local: Executes 6 instructions: pulls A; copies A into Y; pulls A; copies A ; into X; pulls A; returns from the interrupt with RTI. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns from the interrupt with RTI. ; Clobbers: ; A, X and Y. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop: pla ; CPU:$C0EB PRG:40EB 68 tay ; CPU:$C0EC PRG:40EC A8 pla ; CPU:$C0ED PRG:40ED 68 tax ; CPU:$C0EE PRG:40EE AA pla ; CPU:$C0EF PRG:40EF 68 rti ; CPU:$C0F0 PRG:40F0 40 ; ----------------------------------------------------------------------------- ; Routine: PrepareQueueStackExchange ; Global: Swaps the hardware stack pointer with the byte of the command queue that holds it. ; Local: Executes 3 instructions: copies the stack pointer into X; copies X ; into A; ANDs A with $C0. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N and Z flags, $0100. ; ; ----------------------------------------------------------------------------- PrepareQueueStackExchange: tsx ; CPU:$C0F1 PRG:40F1 BA txa ; CPU:$C0F2 PRG:40F2 8A and #$C0 ; CPU:$C0F3 PRG:40F3 29 C0 ; ----------------------------------------------------------------------------- ; Routine: ExchangeStackPointerWithQueue ; Global: Sets the end-of-queue marker at $01C0 and the queue's end pointer at $01FE. ; Local: Executes 10 instructions: copies A into Y; loads A from $0100,y; ; copies the stack pointer into X; pushes A; copies X into A; stores ; A to $0100,y; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N and Z flags, $0100. ; ; ----------------------------------------------------------------------------- ExchangeStackPointerWithQueue: tay ; CPU:$C0F5 PRG:40F5 A8 lda $0100,y ; CPU:$C0F6 PRG:40F6 B9 00 01 tsx ; CPU:$C0F9 PRG:40F9 BA pha ; CPU:$C0FA PRG:40FA 48 txa ; CPU:$C0FB PRG:40FB 8A sta $0100,y ; CPU:$C0FC PRG:40FC 99 00 01 pla ; CPU:$C0FF PRG:40FF 68 tax ; CPU:$C100 PRG:4100 AA txs ; CPU:$C101 PRG:4101 9A rts ; CPU:$C102 PRG:4102 60 ; ----------------------------------------------------------------------------- ; Routine: InitCommandQueue ; Global: The routine writes $01C0, $01FE and $01FF, reads $C115 and $C116. ; Local: Executes 7 instructions: loads A with $FD; stores A to $01C0; loads A ; from $C115; stores A to $01FE; loads A from $C116; stores A to ; $01FF; and 1 more instruction. ; Parameters: Reads $C115 and $C116 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $01C0, $01FE and $01FF changed. ; Clobbers: ; A, the N and Z flags, $01C0, $01FE, $01FF. ; ; ----------------------------------------------------------------------------- InitCommandQueue: lda #$FD ; CPU:$C103 PRG:4103 A9 FD sta $01C0 ; CPU:$C105 PRG:4105 8D C0 01 lda $C115 ; CPU:$C108 PRG:4108 AD 15 C1 sta $01FE ; CPU:$C10B PRG:410B 8D FE 01 lda $C116 ; CPU:$C10E PRG:410E AD 16 C1 sta $01FF ; CPU:$C111 PRG:4111 8D FF 01 rts ; CPU:$C114 PRG:4114 60 ; ----------------------------------------------------------------------------- ; Routine: SubCC115 ; Global: Points the VRAM write pointer at the address in X and A and queues the pointer. ; Local: Executes 1 instruction: loads X from ZpCD,y. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, $0100, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- SubCC115: ldx ZpCD,y ; CPU:$C115 PRG:4115 B6 CD ; ----------------------------------------------------------------------------- ; Routine: QueueVramWritePointer ; Global: Pushes the current VRAM write pointer onto the command queue. ; Local: Executes 1 instruction: calls SetVramWritePointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, $0100, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- QueueVramWritePointer: jsr SetVramWritePointer ; CPU:$C117 PRG:4117 20 BF C1 ; ----------------------------------------------------------------------------- ; Routine: QueueCurrentVramPointer ; Global: Reads the PPU address and the byte count out of the VRAM write record the pointer points at. ; Local: Executes 9 instructions: loads X from Zp4E; loads A from ; StarFieldPtrLo; stores A to $0100,x; increments X; loads A from ; StarFieldPtrHi; stores A to $0100,x; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, $0100, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- QueueCurrentVramPointer: ldx Zp4E ; CPU:$C11A PRG:411A A6 4E lda StarFieldPtrLo ; CPU:$C11C PRG:411C A5 00 sta $0100,x ; CPU:$C11E PRG:411E 9D 00 01 inx ; CPU:$C121 PRG:4121 E8 lda StarFieldPtrHi ; CPU:$C122 PRG:4122 A5 01 sta $0100,x ; CPU:$C124 PRG:4124 9D 00 01 inx ; CPU:$C127 PRG:4127 E8 stx Zp4E ; CPU:$C128 PRG:4128 86 4E jmp Sub_C18C ; CPU:$C12A PRG:412A 4C 8C C1 ; ----------------------------------------------------------------------------- ; Routine: ParseVramWriteRecord ; Global: Sets the PPU address the next queued write goes to. ; Local: Executes 11 instructions: calls SetVramWritePointer; loads Y with $00; loads A ; from ((StarFieldPtrLo),y); copies A into X; increments Y; loads A ; from ((StarFieldPtrLo),y); and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- ParseVramWriteRecord: jsr SetVramWritePointer ; CPU:$C12D PRG:412D 20 BF C1 ldy #$00 ; CPU:$C130 PRG:4130 A0 00 lda (StarFieldPtrLo),y ; CPU:$C132 PRG:4132 B1 00 tax ; CPU:$C134 PRG:4134 AA iny ; CPU:$C135 PRG:4135 C8 lda (StarFieldPtrLo),y ; CPU:$C136 PRG:4136 B1 00 pha ; CPU:$C138 PRG:4138 48 iny ; CPU:$C139 PRG:4139 C8 lda (StarFieldPtrLo),y ; CPU:$C13A PRG:413A B1 00 tay ; CPU:$C13C PRG:413C A8 pla ; CPU:$C13D PRG:413D 68 ; ----------------------------------------------------------------------------- ; Routine: SetPpuWriteAddress ; Global: Queues a PPU write record of $24 bytes. ; Local: Executes 3 instructions: stores Y to Zp02; stores X to PpuAddrLow; ; stores A to PpuAddrHigh. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SetPpuWriteAddress: sty Zp02 ; CPU:$C13E PRG:413E 84 02 stx PpuAddrLow ; CPU:$C140 PRG:4140 86 04 sta PpuAddrHigh ; CPU:$C142 PRG:4142 85 05 ; ----------------------------------------------------------------------------- ; Routine: QueuePpuWriteRecord ; Global: The routine calls QueuePpuWriteRecordData. ; Local: Executes 2 instructions: calls QueuePpuWriteRecordData; loads A with $24. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- QueuePpuWriteRecord: jsr QueuePpuWriteRecordData ; CPU:$C144 PRG:4144 20 C4 C1 lda #$24 ; CPU:$C147 PRG:4147 A9 24 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero ; Global: The routine calls Sub_C18C. ; Local: Executes 6 instructions: stores A to $0100,x; increments X; ; decrements Zp1E; branches on not equal to NmiHandler_OnNonzero; ; stores X to Zp4F; calls Sub_C18C. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero: sta $0100,x ; CPU:$C149 PRG:4149 9D 00 01 inx ; CPU:$C14C PRG:414C E8 dec Zp1E ; CPU:$C14D PRG:414D C6 1E bne NmiHandler_OnNonzero ; CPU:$C14F PRG:414F D0 F8 stx Zp4F ; CPU:$C151 PRG:4151 86 4F jmp Sub_C18C ; CPU:$C153 PRG:4153 4C 8C C1 ; ----------------------------------------------------------------------------- ; Routine: Sub_C156 ; Global: Sets the byte count of the VRAM write record. ; Local: Executes 3 instructions: loads X with $20; loads A with $00; loads Y ; from Zp02. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_C156: ldx #$20 ; CPU:$C156 PRG:4156 A2 20 lda #$00 ; CPU:$C158 PRG:4158 A9 00 ldy Zp02 ; CPU:$C15A PRG:415A A4 02 ; ----------------------------------------------------------------------------- ; Routine: SetVramRecordCount ; Global: Queues a PPU write record of $00 bytes. ; Local: Executes 1 instruction: calls SetVramRecordCount2. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SetVramRecordCount: jsr SetVramRecordCount2 ; CPU:$C15C PRG:415C 20 BD C1 ; ----------------------------------------------------------------------------- ; Routine: QueuePpuWriteRecordAlt ; Global: The routine calls QueuePpuWriteRecordData. ; Local: Executes 2 instructions: calls QueuePpuWriteRecordData; loads Y with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- QueuePpuWriteRecordAlt: jsr QueuePpuWriteRecordData ; CPU:$C15F PRG:415F 20 C4 C1 ldy #$00 ; CPU:$C162 PRG:4162 A0 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero2 ; Global: Sets the flags byte of the VRAM write record. ; Local: Executes 8 instructions: loads A from ((StarFieldPtrLo),y); ; increments Y; stores A to $0100,x; increments X; compares Y with ; Zp02; branches on not equal to NmiHandler_OnNonzero2; and 2 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, $0100, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero2: lda (StarFieldPtrLo),y ; CPU:$C164 PRG:4164 B1 00 iny ; CPU:$C166 PRG:4166 C8 sta $0100,x ; CPU:$C167 PRG:4167 9D 00 01 inx ; CPU:$C16A PRG:416A E8 cpy Zp02 ; CPU:$C16B PRG:416B C4 02 bne NmiHandler_OnNonzero2 ; CPU:$C16D PRG:416D D0 F5 stx Zp4F ; CPU:$C16F PRG:416F 86 4F jmp Sub_C18C ; CPU:$C171 PRG:4171 4C 8C C1 ; ----------------------------------------------------------------------------- ; Routine: SetVramRecordFlags ; Global: Queues a PPU write record of $00 bytes at a second address. ; Local: Executes 1 instruction: calls SetVramRecordCount2. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SetVramRecordFlags: jsr SetVramRecordCount2 ; CPU:$C174 PRG:4174 20 BD C1 ; ----------------------------------------------------------------------------- ; Routine: QueuePpuWriteRecordAlt2 ; Global: The routine calls QueuePpuWriteRecordData. ; Local: Executes 2 instructions: calls QueuePpuWriteRecordData; loads Y with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- QueuePpuWriteRecordAlt2: jsr QueuePpuWriteRecordData ; CPU:$C177 PRG:4177 20 C4 C1 ldy #$00 ; CPU:$C17A PRG:417A A0 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero3 ; Global: The routine calls Sub_C1AA. ; Local: Executes 8 instructions: loads A from ((StarFieldPtrLo),y); calls ; Sub_C1AA; increments Y; stores A to $0100,x; increments X; compares ; Y with Zp1E; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp03, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero3: lda (StarFieldPtrLo),y ; CPU:$C17C PRG:417C B1 00 jsr Sub_C1AA ; CPU:$C17E PRG:417E 20 AA C1 iny ; CPU:$C181 PRG:4181 C8 sta $0100,x ; CPU:$C182 PRG:4182 9D 00 01 inx ; CPU:$C185 PRG:4185 E8 cpy Zp1E ; CPU:$C186 PRG:4186 C4 1E bne NmiHandler_OnNonzero3 ; CPU:$C188 PRG:4188 D0 F2 stx Zp4F ; CPU:$C18A PRG:418A 86 4F ; ----------------------------------------------------------------------------- ; Routine: Sub_C18C ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A from Zp4B; branches on equal to ; NmiHandler_Loop5. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- Sub_C18C: lda Zp4B ; CPU:$C18C PRG:418C A5 4B beq NmiHandler_Loop5 ; CPU:$C18E PRG:418E F0 5A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero ; Global: Queues the VRAM write pointer and steps it past the record it points at. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero: rts ; CPU:$C190 PRG:4190 60 ; ----------------------------------------------------------------------------- ; Routine: AdvanceVramWriteQueue ; Global: The routine calls QueueCurrentVramPointer. ; Local: Executes 12 instructions: returns with RTS; calls QueueCurrentVramPointer; ; decrements StarFieldCount; branches on equal to NmiHandler_OnZero; ; loads Y with $02; loads A from ((StarFieldPtrLo),y); and 6 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- AdvanceVramWriteQueue: jsr QueueCurrentVramPointer ; CPU:$C191 PRG:4191 20 1A C1 dec StarFieldCount ; CPU:$C194 PRG:4194 C6 06 beq NmiHandler_OnZero ; CPU:$C196 PRG:4196 F0 F8 ldy #$02 ; CPU:$C198 PRG:4198 A0 02 lda (StarFieldPtrLo),y ; CPU:$C19A PRG:419A B1 00 clc ; CPU:$C19C PRG:419C 18 adc #$03 ; CPU:$C19D PRG:419D 69 03 adc StarFieldPtrLo ; CPU:$C19F PRG:419F 65 00 sta StarFieldPtrLo ; CPU:$C1A1 PRG:41A1 85 00 bcc NmiHandler_Loop2 ; CPU:$C1A3 PRG:41A3 90 02 inc StarFieldPtrHi ; CPU:$C1A5 PRG:41A5 E6 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop2 ; Global: The routine calls AdvanceVramWriteQueue. ; Local: Executes 1 instruction: calls AdvanceVramWriteQueue. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop2: jmp AdvanceVramWriteQueue ; CPU:$C1A7 PRG:41A7 4C 91 C1 ; ----------------------------------------------------------------------------- ; Routine: Sub_C1AA ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: pushes A; branches on not equal to ; NmiHandler_Loop3; loads A from Zp03; branches on equal to ; NmiHandler_Loop4; decrements Zp03; pulls A; and 2 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N and Z flags, Zp03. ; ; ----------------------------------------------------------------------------- Sub_C1AA: pha ; CPU:$C1AA PRG:41AA 48 bne NmiHandler_Loop3 ; CPU:$C1AB PRG:41AB D0 0A lda Zp03 ; CPU:$C1AD PRG:41AD A5 03 beq NmiHandler_Loop4 ; CPU:$C1AF PRG:41AF F0 0A dec Zp03 ; CPU:$C1B1 PRG:41B1 C6 03 pla ; CPU:$C1B3 PRG:41B3 68 lda #$24 ; CPU:$C1B4 PRG:41B4 A9 24 rts ; CPU:$C1B6 PRG:41B6 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop3 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $00; stores A to Zp03. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N and Z flags, Zp03. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop3: lda #$00 ; CPU:$C1B7 PRG:41B7 A9 00 sta Zp03 ; CPU:$C1B9 PRG:41B9 85 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop4 ; Global: Sets the byte count of the VRAM write record. ; Local: Executes 2 instructions: pulls A; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop4: pla ; CPU:$C1BB PRG:41BB 68 rts ; CPU:$C1BC PRG:41BC 60 ; ----------------------------------------------------------------------------- ; Routine: SetVramRecordCount2 ; Global: Sets the 16-bit VRAM write pointer to the address in X and A. ; Local: Executes 1 instruction: stores Y to Zp02. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; no register, Zp02. ; ; ----------------------------------------------------------------------------- SetVramRecordCount2: sty Zp02 ; CPU:$C1BD PRG:41BD 84 02 ; ----------------------------------------------------------------------------- ; Routine: SetVramWritePointer ; Global: Queues a PPU write: the address, the byte count and the data pointer. ; Local: Executes 3 instructions: stores X to StarFieldPtrLo; stores A to ; StarFieldPtrHi; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- SetVramWritePointer: stx StarFieldPtrLo ; CPU:$C1BF PRG:41BF 86 00 sta StarFieldPtrHi ; CPU:$C1C1 PRG:41C1 85 01 rts ; CPU:$C1C3 PRG:41C3 60 ; ----------------------------------------------------------------------------- ; Routine: QueuePpuWriteRecordData ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 20 instructions: loads Y from Zp4E; loads X from Zp4F; ; copies X into A; stores A to $0100,y; increments Y; loads A with ; $01; and 14 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N and Z flags, Zp1E, Zp4E, $0100. ; ; ----------------------------------------------------------------------------- QueuePpuWriteRecordData: ldy Zp4E ; CPU:$C1C4 PRG:41C4 A4 4E ldx Zp4F ; CPU:$C1C6 PRG:41C6 A6 4F txa ; CPU:$C1C8 PRG:41C8 8A sta $0100,y ; CPU:$C1C9 PRG:41C9 99 00 01 iny ; CPU:$C1CC PRG:41CC C8 lda #$01 ; CPU:$C1CD PRG:41CD A9 01 sta $0100,y ; CPU:$C1CF PRG:41CF 99 00 01 iny ; CPU:$C1D2 PRG:41D2 C8 sty Zp4E ; CPU:$C1D3 PRG:41D3 84 4E lda PpuAddrLow ; CPU:$C1D5 PRG:41D5 A5 04 sta $0100,x ; CPU:$C1D7 PRG:41D7 9D 00 01 inx ; CPU:$C1DA PRG:41DA E8 lda PpuAddrHigh ; CPU:$C1DB PRG:41DB A5 05 sta $0100,x ; CPU:$C1DD PRG:41DD 9D 00 01 inx ; CPU:$C1E0 PRG:41E0 E8 lda Zp02 ; CPU:$C1E1 PRG:41E1 A5 02 sta $0100,x ; CPU:$C1E3 PRG:41E3 9D 00 01 inx ; CPU:$C1E6 PRG:41E6 E8 sta Zp1E ; CPU:$C1E7 PRG:41E7 85 1E rts ; CPU:$C1E9 PRG:41E9 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop5 ; Global: The routine reads the PPUSTATUS register. ; Local: Executes 5 instructions: loads A from the PPUSTATUS register; loads X ; from Zp4E; decrements X; branches on negative to NmiHandler_Loop6; ; loads X with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop5: lda PPUSTATUS ; CPU:$C1EA PRG:41EA AD 02 20 ldx Zp4E ; CPU:$C1ED PRG:41ED A6 4E dex ; CPU:$C1EF PRG:41EF CA bmi NmiHandler_Loop6 ; CPU:$C1F0 PRG:41F0 30 40 ldx #$00 ; CPU:$C1F2 PRG:41F2 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero4 ; Global: The routine writes the PPUADDR registers. ; Local: Executes 17 instructions: loads A from $0100,x; stores A to ; TilePtrLo; increments X; loads A from $0100,x; stores A to ; TilePtrHi; increments X; and 11 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves the PPUADDR registers set. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero4: lda $0100,x ; CPU:$C1F4 PRG:41F4 BD 00 01 sta TilePtrLo ; CPU:$C1F7 PRG:41F7 85 08 inx ; CPU:$C1F9 PRG:41F9 E8 lda $0100,x ; CPU:$C1FA PRG:41FA BD 00 01 sta TilePtrHi ; CPU:$C1FD PRG:41FD 85 09 inx ; CPU:$C1FF PRG:41FF E8 ldy #$01 ; CPU:$C200 PRG:4200 A0 01 lda (TilePtrLo),y ; CPU:$C202 PRG:4202 B1 08 sta PPUADDR ; CPU:$C204 PRG:4204 8D 06 20 dey ; CPU:$C207 PRG:4207 88 lda (TilePtrLo),y ; CPU:$C208 PRG:4208 B1 08 sta PPUADDR ; CPU:$C20A PRG:420A 8D 06 20 iny ; CPU:$C20D PRG:420D C8 iny ; CPU:$C20E PRG:420E C8 lda (TilePtrLo),y ; CPU:$C20F PRG:420F B1 08 iny ; CPU:$C211 PRG:4211 C8 sta ScreenPtrLo ; CPU:$C212 PRG:4212 85 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero5 ; Global: The routine writes the PPUADDR and PPUDATA registers. ; Local: Executes 30 instructions: loads A from $0100,x; stores A to ; TilePtrLo; increments X; loads A from $0100,x; stores A to ; TilePtrHi; increments X; and 24 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves the PPUADDR and PPUDATA ; registers set. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero5: lda (TilePtrLo),y ; CPU:$C214 PRG:4214 B1 08 sta PPUDATA ; CPU:$C216 PRG:4216 8D 07 20 iny ; CPU:$C219 PRG:4219 C8 dec ScreenPtrLo ; CPU:$C21A PRG:421A C6 0A bne NmiHandler_OnNonzero5 ; CPU:$C21C PRG:421C D0 F6 cpx Zp4E ; CPU:$C21E PRG:421E E4 4E bne NmiHandler_OnNonzero4 ; CPU:$C220 PRG:4220 D0 D2 lda #$3F ; CPU:$C222 PRG:4222 A9 3F sta PPUADDR ; CPU:$C224 PRG:4224 8D 06 20 lda #$00 ; CPU:$C227 PRG:4227 A9 00 sta PPUADDR ; CPU:$C229 PRG:4229 8D 06 20 sta PPUADDR ; CPU:$C22C PRG:422C 8D 06 20 sta PPUADDR ; CPU:$C22F PRG:422F 8D 06 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop6 ; Global: Fills the first and the second nametable with the blank tile. ; Local: Executes 5 instructions: loads A with $20; stores A to Zp4F; loads A ; with $00; stores A to Zp4E; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N and Z flags, Zp4E, Zp4F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop6: lda #$20 ; CPU:$C232 PRG:4232 A9 20 sta Zp4F ; CPU:$C234 PRG:4234 85 4F lda #$00 ; CPU:$C236 PRG:4236 A9 00 sta Zp4E ; CPU:$C238 PRG:4238 85 4E rts ; CPU:$C23A PRG:423A 60 ; ----------------------------------------------------------------------------- ; Routine: ClearBothNametables ; Global: Fills the nametable at the address in X with $24 bytes of the blank tile. ; Local: Executes 3 instructions: loads X with $28; calls FillNametableWithTile24; loads X ; with $20. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N and Z flags, PPUCTRL, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- ClearBothNametables: ldx #$28 ; CPU:$C23B PRG:423B A2 28 jsr FillNametableWithTile24 ; CPU:$C23D PRG:423D 20 42 C2 ldx #$20 ; CPU:$C240 PRG:4240 A2 20 ; ----------------------------------------------------------------------------- ; Routine: FillNametableWithTile24 ; Global: The routine writes the PPUCTRL and PPUADDR registers, reads the ; PPUSTATUS register. ; Local: Executes 9 instructions: loads A from the PPUSTATUS register; loads A ; with $10; stores A to the PPUCTRL register; stores X to the PPUADDR ; register; loads X with $00; stores X to the PPUADDR register; and 3 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves the PPUCTRL and PPUADDR registers set. ; Clobbers: ; A, X and Y, the N and Z flags, PPUCTRL, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- FillNametableWithTile24: lda PPUSTATUS ; CPU:$C242 PRG:4242 AD 02 20 lda #$10 ; CPU:$C245 PRG:4245 A9 10 sta PPUCTRL ; CPU:$C247 PRG:4247 8D 00 20 stx PPUADDR ; CPU:$C24A PRG:424A 8E 06 20 ldx #$00 ; CPU:$C24D PRG:424D A2 00 stx PPUADDR ; CPU:$C24F PRG:424F 8E 06 20 ldx #$03 ; CPU:$C252 PRG:4252 A2 03 ldy #$C0 ; CPU:$C254 PRG:4254 A0 C0 lda #$24 ; CPU:$C256 PRG:4256 A9 24 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero6 ; Global: The routine writes the PPUDATA register. ; Local: Executes 6 instructions: stores A to the PPUDATA register; decrements ; Y; branches on not equal to NmiHandler_OnNonzero6; decrements X; ; branches on non-negative to NmiHandler_OnNonzero6; returns with ; RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves the PPUDATA register set. ; Clobbers: ; X and Y, the N and Z flags, PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero6: sta PPUDATA ; CPU:$C258 PRG:4258 8D 07 20 dey ; CPU:$C25B PRG:425B 88 bne NmiHandler_OnNonzero6 ; CPU:$C25C PRG:425C D0 FA dex ; CPU:$C25E PRG:425E CA bpl NmiHandler_OnNonzero6 ; CPU:$C25F PRG:425F 10 F7 rts ; CPU:$C261 PRG:4261 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero7 ; Global: The routine calls QueuePpuWriteRecord. ; Local: Executes 7 instructions: calls QueuePpuWriteRecord; clears the carry flag; loads ; A with $20; adds PpuAddrLow to A; stores A to PpuAddrLow; branches ; on carry clear to NmiHandler_Loop7; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero7: jsr QueuePpuWriteRecord ; CPU:$C262 PRG:4262 20 44 C1 clc ; CPU:$C265 PRG:4265 18 lda #$20 ; CPU:$C266 PRG:4266 A9 20 adc PpuAddrLow ; CPU:$C268 PRG:4268 65 04 sta PpuAddrLow ; CPU:$C26A PRG:426A 85 04 bcc NmiHandler_Loop7 ; CPU:$C26C PRG:426C 90 02 inc PpuAddrHigh ; CPU:$C26E PRG:426E E6 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop7 ; Global: Writes the game's PPUCTRL, scroll and PPUMASK values to the PPU at the start of the frame. ; Local: Executes 10 instructions: calls QueuePpuWriteRecord; clears the carry flag; ; loads A with $20; adds PpuAddrLow to A; stores A to PpuAddrLow; ; branches on carry clear to NmiHandler_Loop7; and 4 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop7: dec Zp03 ; CPU:$C270 PRG:4270 C6 03 bne NmiHandler_OnNonzero7 ; CPU:$C272 PRG:4272 D0 EE rts ; CPU:$C274 PRG:4274 60 ; ----------------------------------------------------------------------------- ; Routine: ApplyPpuScrollAndMask ; Global: Hides the background and the sprites and parks the VRAM write pointer at the palette. ; Local: Executes 9 instructions: loads A from PpuCtrlShadow; stores A to the ; PPUCTRL register; loads A from Zp42; stores A to the PPUSCROLL ; register; loads A from Zp43; stores A to the PPUSCROLL register; ; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves the PPUCTRL and PPUSCROLL registers set. ; Clobbers: ; A, the N and Z flags, PPUCTRL, PPUMASK, PPUSCROLL. ; ; ----------------------------------------------------------------------------- ApplyPpuScrollAndMask: lda PpuCtrlShadow ; CPU:$C275 PRG:4275 A5 40 sta PPUCTRL ; CPU:$C277 PRG:4277 8D 00 20 lda Zp42 ; CPU:$C27A PRG:427A A5 42 sta PPUSCROLL ; CPU:$C27C PRG:427C 8D 05 20 lda Zp43 ; CPU:$C27F PRG:427F A5 43 sta PPUSCROLL ; CPU:$C281 PRG:4281 8D 05 20 lda PpuMaskShadow ; CPU:$C284 PRG:4284 A5 41 sta PPUMASK ; CPU:$C286 PRG:4286 8D 01 20 rts ; CPU:$C289 PRG:4289 60 ; ----------------------------------------------------------------------------- ; Routine: TurnOffRendering ; Global: The routine calls NmiHandler_Loop6. ; Local: Executes 9 instructions: loads A with $00; stores A to PpuMaskShadow; ; calls NmiHandler_Loop6; loads A with $00; stores A to PpuAddrLow; ; loads A with $3F; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- TurnOffRendering: lda #$00 ; CPU:$C28A PRG:428A A9 00 sta PpuMaskShadow ; CPU:$C28C PRG:428C 85 41 jsr NmiHandler_Loop6 ; CPU:$C28E PRG:428E 20 32 C2 lda #$00 ; CPU:$C291 PRG:4291 A9 00 sta PpuAddrLow ; CPU:$C293 PRG:4293 85 04 lda #$3F ; CPU:$C295 PRG:4295 A9 3F sta PpuAddrHigh ; CPU:$C297 PRG:4297 85 05 ldx #$20 ; CPU:$C299 PRG:4299 A2 20 stx Zp02 ; CPU:$C29B PRG:429B 86 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative ; Global: Shows the background and the sprites again. ; Local: Executes 8 instructions: decrements X; stores A to Zp20,x; branches ; on non-negative to NmiHandler_OnNonnegative; calls Sub_C156; calls ; PrepareQueueStackExchange; loads A with $00; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative: dex ; CPU:$C29D PRG:429D CA sta Zp20,x ; CPU:$C29E PRG:429E 95 20 bpl NmiHandler_OnNonnegative ; CPU:$C2A0 PRG:42A0 10 FB jsr Sub_C156 ; CPU:$C2A2 PRG:42A2 20 56 C1 jsr PrepareQueueStackExchange ; CPU:$C2A5 PRG:42A5 20 F1 C0 lda #$00 ; CPU:$C2A8 PRG:42A8 A9 00 sta Zp4B ; CPU:$C2AA PRG:42AA 85 4B rts ; CPU:$C2AC PRG:42AC 60 ; ----------------------------------------------------------------------------- ; Routine: TurnOnRendering ; Global: Queues the screen update record the game draws with. ; Local: Executes 7 instructions: loads A with $1E; stores A to PpuMaskShadow; ; loads A with $01; stores A to Zp4B; calls QueueSpriteUpdateRecord; calls PrepareQueueStackExchange; ; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4B, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- TurnOnRendering: lda #$1E ; CPU:$C2AD PRG:42AD A9 1E sta PpuMaskShadow ; CPU:$C2AF PRG:42AF 85 41 lda #$01 ; CPU:$C2B1 PRG:42B1 A9 01 sta Zp4B ; CPU:$C2B3 PRG:42B3 85 4B jsr QueueSpriteUpdateRecord ; CPU:$C2B5 PRG:42B5 20 CB C2 jsr PrepareQueueStackExchange ; CPU:$C2B8 PRG:42B8 20 F1 C0 rts ; CPU:$C2BB PRG:42BB 60 ; ----------------------------------------------------------------------------- ; Routine: QueueScreenUpdateRecord ; Global: Queues the sprite update record the game draws with. ; Local: Executes 7 instructions: loads A with $02; stores A to ; StarFieldCount; loads A with $96; stores A to StarFieldPtrLo; loads ; A with $F9; stores A to StarFieldPtrHi; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- QueueScreenUpdateRecord: lda #$02 ; CPU:$C2BC PRG:42BC A9 02 sta StarFieldCount ; CPU:$C2BE PRG:42BE 85 06 lda #$96 ; CPU:$C2C0 PRG:42C0 A9 96 sta StarFieldPtrLo ; CPU:$C2C2 PRG:42C2 85 00 lda #$F9 ; CPU:$C2C4 PRG:42C4 A9 F9 sta StarFieldPtrHi ; CPU:$C2C6 PRG:42C6 85 01 jsr AdvanceVramWriteQueue ; CPU:$C2C8 PRG:42C8 20 91 C1 ; ----------------------------------------------------------------------------- ; Routine: QueueSpriteUpdateRecord ; Global: Pulses the joypad strobe so that the next read of $4016 returns the button state. ; Local: Executes 3 instructions: loads X with $73; loads A with $F9; calls ; QueueVramWritePointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, $0100, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- QueueSpriteUpdateRecord: ldx #$73 ; CPU:$C2CB PRG:42CB A2 73 lda #$F9 ; CPU:$C2CD PRG:42CD A9 F9 jmp QueueVramWritePointer ; CPU:$C2CF PRG:42CF 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: StrobeControllerRead ; Global: The routine writes the JOY1 registers. ; Local: Executes 4 instructions: loads X with $01; stores X to the JOY1 ; register; loads Y with $00; stores Y to the JOY1 register. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves the JOY1 registers set. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp44, Zp46, JOY1. ; ; ----------------------------------------------------------------------------- StrobeControllerRead: ldx #$01 ; CPU:$C2D2 PRG:42D2 A2 01 stx JOY1 ; CPU:$C2D4 PRG:42D4 8E 16 40 ldy #$00 ; CPU:$C2D7 PRG:42D7 A0 00 sty JOY1 ; CPU:$C2D9 PRG:42D9 8C 16 40 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative2 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: stores Y to StarFieldPtrLo; loads Y with ; $80. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp44, Zp46. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative2: sty StarFieldPtrLo ; CPU:$C2DC PRG:42DC 84 00 ldy #$80 ; CPU:$C2DE PRG:42DE A0 80 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: stores Y to StarFieldPtrLo; loads Y with ; $80; loads A from JOY1,x; ANDs A with $03; branches on equal to ; NmiHandler_Loop8; copies Y into A; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp44, Zp46. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear: lda JOY1,x ; CPU:$C2E0 PRG:42E0 BD 16 40 and #$03 ; CPU:$C2E3 PRG:42E3 29 03 beq NmiHandler_Loop8 ; CPU:$C2E5 PRG:42E5 F0 05 tya ; CPU:$C2E7 PRG:42E7 98 ora StarFieldPtrLo ; CPU:$C2E8 PRG:42E8 05 00 sta StarFieldPtrLo ; CPU:$C2EA PRG:42EA 85 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop8 ; Global: Calls the handler whose 16-bit address is the one the record at the write pointer points at. ; Local: Executes 21 instructions: stores Y to StarFieldPtrLo; loads Y with ; $80; loads A from JOY1,x; ANDs A with $03; branches on equal to ; NmiHandler_Loop8; copies Y into A; and 15 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp44, Zp46. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop8: tya ; CPU:$C2EC PRG:42EC 98 lsr a ; CPU:$C2ED PRG:42ED 4A tay ; CPU:$C2EE PRG:42EE A8 bcc NmiHandler_OnCarryClear ; CPU:$C2EF PRG:42EF 90 EF lda Zp44,x ; CPU:$C2F1 PRG:42F1 B5 44 eor #$FF ; CPU:$C2F3 PRG:42F3 49 FF and StarFieldPtrLo ; CPU:$C2F5 PRG:42F5 25 00 sta Zp46,x ; CPU:$C2F7 PRG:42F7 95 46 lda StarFieldPtrLo ; CPU:$C2F9 PRG:42F9 A5 00 sta Zp44,x ; CPU:$C2FB PRG:42FB 95 44 dex ; CPU:$C2FD PRG:42FD CA bpl NmiHandler_OnNonnegative2 ; CPU:$C2FE PRG:42FE 10 DC rts ; CPU:$C300 PRG:4300 60 ; ----------------------------------------------------------------------------- ; Routine: CallHandlerThroughPointer ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 14 instructions: shifts a left; copies A into Y; increments ; Y; pulls A; stores A to Zp1E; pulls A; and 8 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- CallHandlerThroughPointer: asl a ; CPU:$C301 PRG:4301 0A tay ; CPU:$C302 PRG:4302 A8 iny ; CPU:$C303 PRG:4303 C8 pla ; CPU:$C304 PRG:4304 68 sta Zp1E ; CPU:$C305 PRG:4305 85 1E pla ; CPU:$C307 PRG:4307 68 sta Zp1F ; CPU:$C308 PRG:4308 85 1F lda (Zp1E),y ; CPU:$C30A PRG:430A B1 1E tax ; CPU:$C30C PRG:430C AA iny ; CPU:$C30D PRG:430D C8 lda (Zp1E),y ; CPU:$C30E PRG:430E B1 1E sta Zp1F ; CPU:$C310 PRG:4310 85 1F stx Zp1E ; CPU:$C312 PRG:4312 86 1E jmp (Zp1E) ; CPU:$C314 PRG:4314 6C 1E 00 ; ----------------------------------------------------------------------------- ; Routine: Sub_C317 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 12 instructions: loads A from Zp6E; shifts a left; shifts a ; left; sets the carry flag; adds Zp6E to A; stores A to Zp6E; and 6 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, the N, Z, C and V flags, Zp6E, Zp6F. ; ; ----------------------------------------------------------------------------- Sub_C317: lda Zp6E ; CPU:$C317 PRG:4317 A5 6E asl a ; CPU:$C319 PRG:4319 0A asl a ; CPU:$C31A PRG:431A 0A sec ; CPU:$C31B PRG:431B 38 adc Zp6E ; CPU:$C31C PRG:431C 65 6E sta Zp6E ; CPU:$C31E PRG:431E 85 6E asl Zp6F ; CPU:$C320 PRG:4320 06 6F lda #$20 ; CPU:$C322 PRG:4322 A9 20 bit Zp6F ; CPU:$C324 PRG:4324 24 6F bcc NmiHandler_Loop9 ; CPU:$C326 PRG:4326 90 04 beq NmiHandler_Loop11 ; CPU:$C328 PRG:4328 F0 06 bne NmiHandler_Loop10 ; CPU:$C32A PRG:432A D0 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop9 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: branches on not equal to NmiHandler_Loop11. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, the N and Z flags, Zp6F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop9: bne NmiHandler_Loop11 ; CPU:$C32C PRG:432C D0 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop10 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: increments Zp6F. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N and Z flags, Zp6F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop10: inc Zp6F ; CPU:$C32E PRG:432E E6 6F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop11 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A from Zp6F; EORs A with Zp6E; returns ; with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N and Z flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop11: lda Zp6F ; CPU:$C330 PRG:4330 A5 6F eor Zp6E ; CPU:$C332 PRG:4332 45 6E rts ; CPU:$C334 PRG:4334 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C335 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $A0; branches on not equal to ; NmiHandler_Loop12. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp20, Zp28, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- Sub_C335: lda #$A0 ; CPU:$C335 PRG:4335 A9 A0 bne NmiHandler_Loop12 ; CPU:$C337 PRG:4337 D0 02 ; ----------------------------------------------------------------------------- ; Routine: Sub_C339 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads A with $A8. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp20, Zp28, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- Sub_C339: lda #$A8 ; CPU:$C339 PRG:4339 A9 A8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop12 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: stores A to StarFieldPtrLo; loads A with ; $04; stores A to StarFieldPtrHi; loads Y with $07; branches on ; non-negative to NmiHandler_Loop16. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp20, Zp28, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop12: sta StarFieldPtrLo ; CPU:$C33B PRG:433B 85 00 lda #$04 ; CPU:$C33D PRG:433D A9 04 sta StarFieldPtrHi ; CPU:$C33F PRG:433F 85 01 ldy #$07 ; CPU:$C341 PRG:4341 A0 07 bpl NmiHandler_Loop16 ; CPU:$C343 PRG:4343 10 5F ; ----------------------------------------------------------------------------- ; Routine: Sub_C345 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A with $00; stores A to ; StarFieldPtrLo; loads X with $07. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp20, Zp28, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- Sub_C345: lda #$00 ; CPU:$C345 PRG:4345 A9 00 sta StarFieldPtrLo ; CPU:$C347 PRG:4347 85 00 ldx #$07 ; CPU:$C349 PRG:4349 A2 07 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative3 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: loads Y with $00; stores Y to Zp20,x; ORs A ; with $04A0,x; loads Y from $04A0,x; stores Y to Zp28,x; loads Y ; from $04A8,x; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp20, Zp28, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative3: ldy #$00 ; CPU:$C34B PRG:434B A0 00 sty Zp20,x ; CPU:$C34D PRG:434D 94 20 ora $04A0,x ; CPU:$C34F PRG:434F 1D A0 04 ldy $04A0,x ; CPU:$C352 PRG:4352 BC A0 04 sty Zp28,x ; CPU:$C355 PRG:4355 94 28 ldy $04A8,x ; CPU:$C357 PRG:4357 BC A8 04 sty Zp30,x ; CPU:$C35A PRG:435A 94 30 dex ; CPU:$C35C PRG:435C CA bpl NmiHandler_OnNonnegative3 ; CPU:$C35D PRG:435D 10 EC tay ; CPU:$C35F PRG:435F A8 beq NmiHandler_Loop14 ; CPU:$C360 PRG:4360 F0 2C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero8 ; Global: The routine calls Sub_C38F. ; Local: Executes 3 instructions: calls Sub_C38F; branches on carry clear to ; NmiHandler_Loop13; loads X with $07. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp20, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero8: jsr Sub_C38F ; CPU:$C362 PRG:4362 20 8F C3 bcc NmiHandler_Loop13 ; CPU:$C365 PRG:4365 90 10 ldx #$07 ; CPU:$C367 PRG:4367 A2 07 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative4 ; Global: The routine calls NmiHandler_OnNonzero8. ; Local: Executes 7 instructions: loads A from Zp38,x; stores A to Zp30,x; ; decrements X; branches on non-negative to ; NmiHandler_OnNonnegative4; loads X from StarFieldPtrLo; increments ; Zp20,x; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp20, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative4: lda Zp38,x ; CPU:$C369 PRG:4369 B5 38 sta Zp30,x ; CPU:$C36B PRG:436B 95 30 dex ; CPU:$C36D PRG:436D CA bpl NmiHandler_OnNonnegative4 ; CPU:$C36E PRG:436E 10 F9 ldx StarFieldPtrLo ; CPU:$C370 PRG:4370 A6 00 inc Zp20,x ; CPU:$C372 PRG:4372 F6 20 jmp NmiHandler_OnNonzero8 ; CPU:$C374 PRG:4374 4C 62 C3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop13 ; Global: The routine calls Sub_C38F and NmiHandler_OnNonzero8. ; Local: Executes 11 instructions: calls Sub_C38F; branches on carry clear to ; NmiHandler_Loop13; loads X with $07; loads A from Zp38,x; stores A ; to Zp30,x; decrements X; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp20, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop13: ldx #$00 ; CPU:$C377 PRG:4377 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero9 ; Global: The routine calls Sub_C38F and NmiHandler_OnNonzero8. ; Local: Executes 22 instructions: calls Sub_C38F; branches on carry clear to ; NmiHandler_Loop13; loads X with $07; loads A from Zp38,x; stores A ; to Zp30,x; decrements X; and 16 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp20, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero9: lda Zp31,x ; CPU:$C379 PRG:4379 B5 31 sta Zp30,x ; CPU:$C37B PRG:437B 95 30 inx ; CPU:$C37D PRG:437D E8 cpx #$07 ; CPU:$C37E PRG:437E E0 07 bne NmiHandler_OnNonzero9 ; CPU:$C380 PRG:4380 D0 F7 lda #$00 ; CPU:$C382 PRG:4382 A9 00 sta Zp37 ; CPU:$C384 PRG:4384 85 37 inc StarFieldPtrLo ; CPU:$C386 PRG:4386 E6 00 lda StarFieldPtrLo ; CPU:$C388 PRG:4388 A5 00 cmp #$04 ; CPU:$C38A PRG:438A C9 04 bne NmiHandler_OnNonzero8 ; CPU:$C38C PRG:438C D0 D4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop14 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop14: rts ; CPU:$C38E PRG:438E 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C38F ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads X with $07; sets the carry flag. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp38. ; ; ----------------------------------------------------------------------------- Sub_C38F: ldx #$07 ; CPU:$C38F PRG:438F A2 07 sec ; CPU:$C391 PRG:4391 38 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative5 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A from Zp30,x; subtracts Zp28,x from ; A; branches on carry set to NmiHandler_Loop15; adds $0A to A; ; clears the carry flag. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative5: lda Zp30,x ; CPU:$C392 PRG:4392 B5 30 sbc Zp28,x ; CPU:$C394 PRG:4394 F5 28 bcs NmiHandler_Loop15 ; CPU:$C396 PRG:4396 B0 03 adc #$0A ; CPU:$C398 PRG:4398 69 0A clc ; CPU:$C39A PRG:439A 18 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop15 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: loads A from Zp30,x; subtracts Zp28,x from ; A; branches on carry set to NmiHandler_Loop15; adds $0A to A; ; clears the carry flag; stores A to Zp38,x; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop15: sta Zp38,x ; CPU:$C39B PRG:439B 95 38 dex ; CPU:$C39D PRG:439D CA bpl NmiHandler_OnNonnegative5 ; CPU:$C39E PRG:439E 10 F2 rts ; CPU:$C3A0 PRG:43A0 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C3A1 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads Y from Zp02; decrements Y. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- Sub_C3A1: ldy Zp02 ; CPU:$C3A1 PRG:43A1 A4 02 dey ; CPU:$C3A3 PRG:43A3 88 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop16 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: sets the carry flag. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop16: sec ; CPU:$C3A4 PRG:43A4 38 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative6 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: loads A from ((StarFieldPtrLo),y); adds $00 ; to A; compares A with $0A; branches on carry clear to ; NmiHandler_Loop17; loads A with $00; stores A to ; ((StarFieldPtrLo),y); and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative6: lda (StarFieldPtrLo),y ; CPU:$C3A5 PRG:43A5 B1 00 adc #$00 ; CPU:$C3A7 PRG:43A7 69 00 cmp #$0A ; CPU:$C3A9 PRG:43A9 C9 0A bcc NmiHandler_Loop17 ; CPU:$C3AB PRG:43AB 90 08 lda #$00 ; CPU:$C3AD PRG:43AD A9 00 sta (StarFieldPtrLo),y ; CPU:$C3AF PRG:43AF 91 00 dey ; CPU:$C3B1 PRG:43B1 88 bpl NmiHandler_OnNonnegative6 ; CPU:$C3B2 PRG:43B2 10 F1 rts ; CPU:$C3B4 PRG:43B4 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop17 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: stores A to ((StarFieldPtrLo),y); returns ; with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop17: sta (StarFieldPtrLo),y ; CPU:$C3B5 PRG:43B5 91 00 rts ; CPU:$C3B7 PRG:43B7 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C3B8 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads Y from Zp02; decrements Y; clears the ; carry flag. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- Sub_C3B8: ldy Zp02 ; CPU:$C3B8 PRG:43B8 A4 02 dey ; CPU:$C3BA PRG:43BA 88 clc ; CPU:$C3BB PRG:43BB 18 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative7 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads A from ((StarFieldPtrLo),y); subtracts ; $00 from A; branches on carry set to NmiHandler_Loop18; loads A ; with $09; stores A to ((StarFieldPtrLo),y); decrements Y; and 2 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative7: lda (StarFieldPtrLo),y ; CPU:$C3BC PRG:43BC B1 00 sbc #$00 ; CPU:$C3BE PRG:43BE E9 00 bcs NmiHandler_Loop18 ; CPU:$C3C0 PRG:43C0 B0 08 lda #$09 ; CPU:$C3C2 PRG:43C2 A9 09 sta (StarFieldPtrLo),y ; CPU:$C3C4 PRG:43C4 91 00 dey ; CPU:$C3C6 PRG:43C6 88 bpl NmiHandler_OnNonnegative7 ; CPU:$C3C7 PRG:43C7 10 F3 rts ; CPU:$C3C9 PRG:43C9 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop18 ; Global: Swaps the two object buffers at $0300 and $0400. ; Local: Executes 2 instructions: stores A to ((StarFieldPtrLo),y); returns ; with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop18: sta (StarFieldPtrLo),y ; CPU:$C3CA PRG:43CA 91 00 rts ; CPU:$C3CC PRG:43CC 60 ; ----------------------------------------------------------------------------- ; Routine: SwapObjectBuffers ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $C0. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N and Z flags, Zp70, Zp80, the OAM shadow, $0300, ; $03C0, $0400. ; ; ----------------------------------------------------------------------------- SwapObjectBuffers: ldx #$C0 ; CPU:$C3CD PRG:43CD A2 C0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero10 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: decrements X; loads Y from $0400,x; loads A ; from $0300,x; stores A to $0400,x; copies Y into A; stores A to ; $0300,x; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N and Z flags, Zp70, Zp80, the OAM shadow, $0300, ; $03C0, $0400. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero10: dex ; CPU:$C3CF PRG:43CF CA ldy $0400,x ; CPU:$C3D0 PRG:43D0 BC 00 04 lda $0300,x ; CPU:$C3D3 PRG:43D3 BD 00 03 sta $0400,x ; CPU:$C3D6 PRG:43D6 9D 00 04 tya ; CPU:$C3D9 PRG:43D9 98 sta $0300,x ; CPU:$C3DA PRG:43DA 9D 00 03 txa ; CPU:$C3DD PRG:43DD 8A bne NmiHandler_OnNonzero10 ; CPU:$C3DE PRG:43DE D0 EF ldx #$0F ; CPU:$C3E0 PRG:43E0 A2 0F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative8 ; Global: Divides a tile index by sixteen, keeping the remainder in the high nibble. ; Local: Executes 12 instructions: loads Y from Zp70,x; loads A from Zp80,x; ; stores A to Zp70,x; stores Y to Zp80,x; loads Y from $0210,x; loads ; A from $03C0,x; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N and Z flags, Zp70, Zp80, the OAM shadow, $03C0. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative8: ldy Zp70,x ; CPU:$C3E2 PRG:43E2 B4 70 lda Zp80,x ; CPU:$C3E4 PRG:43E4 B5 80 sta Zp70,x ; CPU:$C3E6 PRG:43E6 95 70 sty Zp80,x ; CPU:$C3E8 PRG:43E8 94 80 ldy $0210,x ; CPU:$C3EA PRG:43EA BC 10 02 lda $03C0,x ; CPU:$C3ED PRG:43ED BD C0 03 sta $0210,x ; CPU:$C3F0 PRG:43F0 9D 10 02 tya ; CPU:$C3F3 PRG:43F3 98 sta $03C0,x ; CPU:$C3F4 PRG:43F4 9D C0 03 dex ; CPU:$C3F7 PRG:43F7 CA bpl NmiHandler_OnNonnegative8 ; CPU:$C3F8 PRG:43F8 10 E8 rts ; CPU:$C3FA PRG:43FA 60 ; ----------------------------------------------------------------------------- ; Routine: DivideTileIndexBy16 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: branches on negative to NmiHandler_Loop19; ; shifts a right; shifts a right; shifts a right; shifts a right; ; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; no register, the N, Z and C flags. ; ; ----------------------------------------------------------------------------- DivideTileIndexBy16: bmi NmiHandler_Loop19 ; CPU:$C3FB PRG:43FB 30 05 lsr a ; CPU:$C3FD PRG:43FD 4A lsr a ; CPU:$C3FE PRG:43FE 4A lsr a ; CPU:$C3FF PRG:43FF 4A lsr a ; CPU:$C400 PRG:4400 4A rts ; CPU:$C401 PRG:4401 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop19 ; Global: Works out how far apart two objects are, in pixels. ; Local: Executes 6 instructions: shifts a right; shifts a right; shifts a ; right; shifts a right; ORs A with $F0; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; no register, the N, Z and C flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop19: lsr a ; CPU:$C402 PRG:4402 4A lsr a ; CPU:$C403 PRG:4403 4A lsr a ; CPU:$C404 PRG:4404 4A lsr a ; CPU:$C405 PRG:4405 4A ora #$F0 ; CPU:$C406 PRG:4406 09 F0 rts ; CPU:$C408 PRG:4408 60 ; ----------------------------------------------------------------------------- ; Routine: ComputeObjectDistance ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads X with $00; loads A from Zp11; sets ; the carry flag; subtracts Zp13 from A. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- ComputeObjectDistance: ldx #$00 ; CPU:$C409 PRG:4409 A2 00 lda Zp11 ; CPU:$C40B PRG:440B A5 11 sec ; CPU:$C40D PRG:440D 38 sbc Zp13 ; CPU:$C40E PRG:440E E5 13 .byte $B0, $09 ; CPU:$C410 PRG:4410 B0 09 eor #$FF ; CPU:$C412 PRG:4412 49 FF sta Zp15 ; CPU:$C414 PRG:4414 85 15 inc Zp15 ; CPU:$C416 PRG:4416 E6 15 ldx #$04 ; CPU:$C418 PRG:4418 A2 04 ; ----------------------------------------------------------------------------- ; Routine: SubCC41A ; Global: The routine reads $1585. ; Local: Executes 4 instructions: tests the bits of $1585; loads A from Zp10; ; sets the carry flag; subtracts Zp12 from A. ; Parameters: Reads $1585 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- SubCC41A: bit $1585 ; CPU:$C41A PRG:441A 2C 85 15 lda Zp10 ; CPU:$C41D PRG:441D A5 10 sec ; CPU:$C41F PRG:441F 38 sbc Zp12 ; CPU:$C420 PRG:4420 E5 12 .byte $B0, $09 ; CPU:$C422 PRG:4422 B0 09 eor #$FF ; CPU:$C424 PRG:4424 49 FF sta Zp14 ; CPU:$C426 PRG:4426 85 14 inc Zp14 ; CPU:$C428 PRG:4428 E6 14 inx ; CPU:$C42A PRG:442A E8 inx ; CPU:$C42B PRG:442B E8 ; ----------------------------------------------------------------------------- ; Routine: SubCC42C ; Global: The routine reads $1485. ; Local: Executes 8 instructions: tests the bits of $1485; loads A from Zp15; ; compares A with Zp14; branches on carry set to NmiHandler_Loop22; ; loads Y from Zp14; stores A to Zp14; and 2 more instructions. ; Parameters: Reads $1485 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp14, Zp15, Zp17. ; ; ----------------------------------------------------------------------------- SubCC42C: bit $1485 ; CPU:$C42C PRG:442C 2C 85 14 lda Zp15 ; CPU:$C42F PRG:442F A5 15 cmp Zp14 ; CPU:$C431 PRG:4431 C5 14 bcs NmiHandler_Loop22 ; CPU:$C433 PRG:4433 B0 07 ldy Zp14 ; CPU:$C435 PRG:4435 A4 14 sta Zp14 ; CPU:$C437 PRG:4437 85 14 sty Zp15 ; CPU:$C439 PRG:4439 84 15 inx ; CPU:$C43B PRG:443B E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop22 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 20 instructions: copies X into A; shifts a left; shifts a ; left; copies A into X; loads A from Zp15; shifts a right; and 14 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop22: txa ; CPU:$C43C PRG:443C 8A asl a ; CPU:$C43D PRG:443D 0A asl a ; CPU:$C43E PRG:443E 0A tax ; CPU:$C43F PRG:443F AA lda Zp15 ; CPU:$C440 PRG:4440 A5 15 lsr a ; CPU:$C442 PRG:4442 4A lsr a ; CPU:$C443 PRG:4443 4A sta Zp17 ; CPU:$C444 PRG:4444 85 17 lsr a ; CPU:$C446 PRG:4446 4A cmp Zp14 ; CPU:$C447 PRG:4447 C5 14 bcs NmiHandler_Loop23 ; CPU:$C449 PRG:4449 B0 0E inx ; CPU:$C44B PRG:444B E8 adc Zp17 ; CPU:$C44C PRG:444C 65 17 cmp Zp14 ; CPU:$C44E PRG:444E C5 14 bcs NmiHandler_Loop23 ; CPU:$C450 PRG:4450 B0 07 inx ; CPU:$C452 PRG:4452 E8 asl a ; CPU:$C453 PRG:4453 0A cmp Zp14 ; CPU:$C454 PRG:4454 C5 14 bcs NmiHandler_Loop23 ; CPU:$C456 PRG:4456 B0 01 inx ; CPU:$C458 PRG:4458 E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop23 ; Global: Works out the player ship's position from the OAM shadow and the joystick. ; Local: Executes 3 instructions: loads A from $C480,x; stores A to SpriteX; ; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N and Z flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop23: lda $C480,x ; CPU:$C459 PRG:4459 BD 80 C4 sta SpriteX ; CPU:$C45C PRG:445C 85 16 rts ; CPU:$C45E PRG:445E 60 ; ----------------------------------------------------------------------------- ; Routine: ComputePlayerShipPosition ; Global: The routine calls ComputeObjectDistance, reads $0202 and $0203. ; Local: Executes 11 instructions: loads A from $0202; stores A to Zp10; loads ; A from $0203; stores A to Zp11; calls ComputeObjectDistance; loads A from ; SpriteX; and 5 more instructions. ; Parameters: Reads $0202 and $0203 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp10, Zp11, Zp17. ; ; ----------------------------------------------------------------------------- ComputePlayerShipPosition: lda $0202 ; CPU:$C45F PRG:445F AD 02 02 sta Zp10 ; CPU:$C462 PRG:4462 85 10 lda $0203 ; CPU:$C464 PRG:4464 AD 03 02 sta Zp11 ; CPU:$C467 PRG:4467 85 11 jsr ComputeObjectDistance ; CPU:$C469 PRG:4469 20 09 C4 lda SpriteX ; CPU:$C46C PRG:446C A5 16 cmp #$0B ; CPU:$C46E PRG:446E C9 0B bcs NmiHandler_Loop24 ; CPU:$C470 PRG:4470 B0 05 lda #$0B ; CPU:$C472 PRG:4472 A9 0B sta Zp17 ; CPU:$C474 PRG:4474 85 17 rts ; CPU:$C476 PRG:4476 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop24 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: compares A with $0E; branches on carry clear ; to NmiHandler_Loop25; loads A with $0D. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, the N, Z and C flags, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop24: cmp #$0E ; CPU:$C477 PRG:4477 C9 0E bcc NmiHandler_Loop25 ; CPU:$C479 PRG:4479 90 02 lda #$0D ; CPU:$C47B PRG:447B A9 0D ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop25 ; Global: Sets up the four OAM group records the game hands to the sprite routine. ; Local: Executes 2 instructions: stores A to Zp17; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; no register, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop25: sta Zp17 ; CPU:$C47D PRG:447D 85 17 rts ; CPU:$C47F PRG:447F 60 ; ---- data $C480-$C49F (32 bytes) ---- ; referenced by `lda $C480,x` at $C459 (operand $C480 falls inside this region) EnemyFormationXTable: .byte $06, $07, $08, $09, $0C, $0B, $0A, $09, $06, $05, $04, $03, $00, $01, $02, $03 ; CPU:$C480 PRG:4480 06 07 08 09 0C 0B 0A 09 06 05 04 03 .byte $12, $11, $10, $0F, $0C, $0D, $0E, $0F, $12, $13, $14, $15, $00, $17, $16, $15 ; CPU:$C490 PRG:4490 12 11 10 0F 0C 0D 0E 0F 12 13 14 15 ; ----------------------------------------------------------------------------- ; Routine: SetupOamGroupTable ; Global: The routine calls Sub_C4EF, writes $0496 and $03F8. ; Local: Executes 37 instructions: loads A with $80; stores A to PpuAddrLow; ; stores A to $0496; loads A with $00; stores A to StarFieldPtrLo; ; loads A with $02; and 31 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0496 and $03F8 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $03F8, $0496. ; ; ----------------------------------------------------------------------------- SetupOamGroupTable: lda #$80 ; CPU:$C4A0 PRG:44A0 A9 80 sta PpuAddrLow ; CPU:$C4A2 PRG:44A2 85 04 sta $0496 ; CPU:$C4A4 PRG:44A4 8D 96 04 lda #$00 ; CPU:$C4A7 PRG:44A7 A9 00 sta StarFieldPtrLo ; CPU:$C4A9 PRG:44A9 85 00 lda #$02 ; CPU:$C4AB PRG:44AB A9 02 sta StarFieldPtrHi ; CPU:$C4AD PRG:44AD 85 01 ldx #$0E ; CPU:$C4AF PRG:44AF A2 0E lda #$10 ; CPU:$C4B1 PRG:44B1 A9 10 sta Zp02 ; CPU:$C4B3 PRG:44B3 85 02 jsr Sub_C4EF ; CPU:$C4B5 PRG:44B5 20 EF C4 lda #$90 ; CPU:$C4B8 PRG:44B8 A9 90 sta StarFieldPtrLo ; CPU:$C4BA PRG:44BA 85 00 lda #$00 ; CPU:$C4BC PRG:44BC A9 00 sta StarFieldPtrHi ; CPU:$C4BE PRG:44BE 85 01 ldx #$04 ; CPU:$C4C0 PRG:44C0 A2 04 stx Zp02 ; CPU:$C4C2 PRG:44C2 86 02 ldx #$08 ; CPU:$C4C4 PRG:44C4 A2 08 jsr Sub_C4EF ; CPU:$C4C6 PRG:44C6 20 EF C4 lda #$E0 ; CPU:$C4C9 PRG:44C9 A9 E0 sta StarFieldPtrLo ; CPU:$C4CB PRG:44CB 85 00 lda #$02 ; CPU:$C4CD PRG:44CD A9 02 sta StarFieldPtrHi ; CPU:$C4CF PRG:44CF 85 01 ldx #$08 ; CPU:$C4D1 PRG:44D1 A2 08 stx Zp02 ; CPU:$C4D3 PRG:44D3 86 02 ldx #$04 ; CPU:$C4D5 PRG:44D5 A2 04 jsr Sub_C4EF ; CPU:$C4D7 PRG:44D7 20 EF C4 lda #$00 ; CPU:$C4DA PRG:44DA A9 00 sta PpuAddrLow ; CPU:$C4DC PRG:44DC 85 04 sta $03F8 ; CPU:$C4DE PRG:44DE 8D F8 03 lda #$D8 ; CPU:$C4E1 PRG:44E1 A9 D8 sta StarFieldPtrLo ; CPU:$C4E3 PRG:44E3 85 00 lda #$03 ; CPU:$C4E5 PRG:44E5 A9 03 sta StarFieldPtrHi ; CPU:$C4E7 PRG:44E7 85 01 lda #$04 ; CPU:$C4E9 PRG:44E9 A9 04 sta Zp02 ; CPU:$C4EB PRG:44EB 85 02 ldx #$08 ; CPU:$C4ED PRG:44ED A2 08 ; ----------------------------------------------------------------------------- ; Routine: Sub_C4EF ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads Y with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- Sub_C4EF: ldy #$00 ; CPU:$C4EF PRG:44EF A0 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero11 ; Global: Draws the game screen: the score panel, the counter rows and the bottom of the playfield. ; Local: Executes 9 instructions: loads A from PpuAddrLow; stores A to ; ((StarFieldPtrLo),y); loads A from Zp02; clears the carry flag; ; adds StarFieldPtrLo to A; stores A to StarFieldPtrLo; and 3 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero11: lda PpuAddrLow ; CPU:$C4F1 PRG:44F1 A5 04 sta (StarFieldPtrLo),y ; CPU:$C4F3 PRG:44F3 91 00 lda Zp02 ; CPU:$C4F5 PRG:44F5 A5 02 clc ; CPU:$C4F7 PRG:44F7 18 adc StarFieldPtrLo ; CPU:$C4F8 PRG:44F8 65 00 sta StarFieldPtrLo ; CPU:$C4FA PRG:44FA 85 00 dex ; CPU:$C4FC PRG:44FC CA bne NmiHandler_OnNonzero11 ; CPU:$C4FD PRG:44FD D0 F2 rts ; CPU:$C4FF PRG:44FF 60 ; ----------------------------------------------------------------------------- ; Routine: DrawGameScreen ; Global: The routine calls NmiHandler_OnNonzero16, NmiHandler_OnNonzero14, ; Sub_C7A8 and Sub_C710. ; Local: Executes 39 instructions: copies the stack pointer into X; stores X ; to Zp0E; loads X with $00; stores X to TilePtrLo; loads A with $E0; ; stores A to ScreenPtrLo; and 33 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- DrawGameScreen: tsx ; CPU:$C500 PRG:4500 BA stx Zp0E ; CPU:$C501 PRG:4501 86 0E ldx #$00 ; CPU:$C503 PRG:4503 A2 00 stx TilePtrLo ; CPU:$C505 PRG:4505 86 08 lda #$E0 ; CPU:$C507 PRG:4507 A9 E0 sta ScreenPtrLo ; CPU:$C509 PRG:4509 85 0A lda #$02 ; CPU:$C50B PRG:450B A9 02 sta ScreenPtrHi ; CPU:$C50D PRG:450D 85 0B lda #$04 ; CPU:$C50F PRG:450F A9 04 sta Zp0C ; CPU:$C511 PRG:4511 85 0C lda #$08 ; CPU:$C513 PRG:4513 A9 08 sta Zp0D ; CPU:$C515 PRG:4515 85 0D lda #$03 ; CPU:$C517 PRG:4517 A9 03 sta Zp03 ; CPU:$C519 PRG:4519 85 03 jsr NmiHandler_OnNonzero16 ; CPU:$C51B PRG:451B 20 D1 C6 lda #$00 ; CPU:$C51E PRG:451E A9 00 sta ScreenPtrLo ; CPU:$C520 PRG:4520 85 0A lda #$02 ; CPU:$C522 PRG:4522 A9 02 sta ScreenPtrHi ; CPU:$C524 PRG:4524 85 0B lda #$02 ; CPU:$C526 PRG:4526 A9 02 sta Zp0C ; CPU:$C528 PRG:4528 85 0C jsr NmiHandler_OnNonzero14 ; CPU:$C52A PRG:452A 20 E5 C5 jsr Sub_C7A8 ; CPU:$C52D PRG:452D 20 A8 C7 lda #$90 ; CPU:$C530 PRG:4530 A9 90 sta ScreenPtrLo ; CPU:$C532 PRG:4532 85 0A lda #$00 ; CPU:$C534 PRG:4534 A9 00 sta ScreenPtrHi ; CPU:$C536 PRG:4536 85 0B lda #$08 ; CPU:$C538 PRG:4538 A9 08 sta Zp0C ; CPU:$C53A PRG:453A 85 0C lda #$04 ; CPU:$C53C PRG:453C A9 04 sta Zp0D ; CPU:$C53E PRG:453E 85 0D lda #$00 ; CPU:$C540 PRG:4540 A9 00 sta Zp03 ; CPU:$C542 PRG:4542 85 03 jsr NmiHandler_OnNonzero16 ; CPU:$C544 PRG:4544 20 D1 C6 lda Zp48 ; CPU:$C547 PRG:4547 A5 48 ror a ; CPU:$C549 PRG:4549 6A ror a ; CPU:$C54A PRG:454A 6A bcc NmiHandler_Loop26 ; CPU:$C54B PRG:454B 90 03 jsr Sub_C710 ; CPU:$C54D PRG:454D 20 10 C7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop26 ; Global: The routine calls Sub_C693, Sub_C5D4 and Sub_C710. ; Local: Executes 7 instructions: calls Sub_C693; calls Sub_C5D4; loads A from ; Zp48; rotates a right; rotates a right; branches on carry set to ; NmiHandler_Loop27; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop26: jsr Sub_C693 ; CPU:$C550 PRG:4550 20 93 C6 jsr Sub_C5D4 ; CPU:$C553 PRG:4553 20 D4 C5 lda Zp48 ; CPU:$C556 PRG:4556 A5 48 ror a ; CPU:$C558 PRG:4558 6A ror a ; CPU:$C559 PRG:4559 6A bcs NmiHandler_Loop27 ; CPU:$C55A PRG:455A B0 03 jsr Sub_C710 ; CPU:$C55C PRG:455C 20 10 C7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop27 ; Global: The routine reads $0471. ; Local: Executes 4 instructions: loads Y with $FF; loads A from $0471; ; branches on negative to NmiHandler_Loop28; increments Y. ; Parameters: Reads $0471 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp1C, Zp1D, Zp51, Zp52, ; $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop27: ldy #$FF ; CPU:$C55F PRG:455F A0 FF lda $0471 ; CPU:$C561 PRG:4561 AD 71 04 bmi NmiHandler_Loop28 ; CPU:$C564 PRG:4564 30 01 iny ; CPU:$C566 PRG:4566 C8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop28 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 17 instructions: stores Y to Zp1D; clears the carry flag; ; adds Zp51 to A; stores A to Zp51; stores A to Zp1C; loads A from ; Zp1D; and 11 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp1C, Zp1D, Zp51, Zp52, ; $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop28: sty Zp1D ; CPU:$C567 PRG:4567 84 1D clc ; CPU:$C569 PRG:4569 18 adc Zp51 ; CPU:$C56A PRG:456A 65 51 sta Zp51 ; CPU:$C56C PRG:456C 85 51 sta Zp1C ; CPU:$C56E PRG:456E 85 1C lda Zp1D ; CPU:$C570 PRG:4570 A5 1D adc Zp52 ; CPU:$C572 PRG:4572 65 52 sta Zp52 ; CPU:$C574 PRG:4574 85 52 ror a ; CPU:$C576 PRG:4576 6A ror Zp1C ; CPU:$C577 PRG:4577 66 1C ror a ; CPU:$C579 PRG:4579 6A ror Zp1C ; CPU:$C57A PRG:457A 66 1C ror a ; CPU:$C57C PRG:457C 6A lda Zp1C ; CPU:$C57D PRG:457D A5 1C ror a ; CPU:$C57F PRG:457F 6A sta Zp1D ; CPU:$C580 PRG:4580 85 1D ldy #$40 ; CPU:$C582 PRG:4582 A0 40 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero12 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: loads A from $0481,y; compares A with Zp50; ; branches on carry set to NmiHandler_Loop30; stores A to ; PpuAddrHigh; loads A from $0482,y; stores A to Zp02; and 5 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero12: lda $0481,y ; CPU:$C584 PRG:4584 B9 81 04 cmp Zp50 ; CPU:$C587 PRG:4587 C5 50 bcs NmiHandler_Loop30 ; CPU:$C589 PRG:4589 B0 38 sta PpuAddrHigh ; CPU:$C58B PRG:458B 85 05 lda $0482,y ; CPU:$C58D PRG:458D B9 82 04 sta Zp02 ; CPU:$C590 PRG:4590 85 02 adc Zp48 ; CPU:$C592 PRG:4592 65 48 and #$10 ; CPU:$C594 PRG:4594 29 10 bne NmiHandler_Loop30 ; CPU:$C596 PRG:4596 D0 2B lda Zp02 ; CPU:$C598 PRG:4598 A5 02 and #$02 ; CPU:$C59A PRG:459A 29 02 .byte $D0, $03 ; CPU:$C59C PRG:459C D0 03 lda Zp1C ; CPU:$C59E PRG:459E A5 1C ; ----------------------------------------------------------------------------- ; Routine: SubCC5A0 ; Global: The routine reads $1DA5. ; Local: Executes 28 instructions: loads A from $0481,y; compares A with Zp50; ; branches on carry set to NmiHandler_Loop30; stores A to ; PpuAddrHigh; loads A from $0482,y; stores A to Zp02; and 22 more ; instructions. ; Parameters: Reads $1DA5 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- SubCC5A0: bit $1DA5 ; CPU:$C5A0 PRG:45A0 2C A5 1D clc ; CPU:$C5A3 PRG:45A3 18 adc $0480,y ; CPU:$C5A4 PRG:45A4 79 80 04 sta $0700,x ; CPU:$C5A7 PRG:45A7 9D 00 07 inx ; CPU:$C5AA PRG:45AA E8 lda #$FE ; CPU:$C5AB PRG:45AB A9 FE sta $0700,x ; CPU:$C5AD PRG:45AD 9D 00 07 inx ; CPU:$C5B0 PRG:45B0 E8 lda Zp02 ; CPU:$C5B1 PRG:45B1 A5 02 and #$03 ; CPU:$C5B3 PRG:45B3 29 03 ora #$20 ; CPU:$C5B5 PRG:45B5 09 20 sta $0700,x ; CPU:$C5B7 PRG:45B7 9D 00 07 inx ; CPU:$C5BA PRG:45BA E8 lda PpuAddrHigh ; CPU:$C5BB PRG:45BB A5 05 sta $0700,x ; CPU:$C5BD PRG:45BD 9D 00 07 inx ; CPU:$C5C0 PRG:45C0 E8 beq NmiHandler_Loop31 ; CPU:$C5C1 PRG:45C1 F0 10 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop30 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 16 instructions: loads A from $0481,y; compares A with Zp50; ; branches on carry set to NmiHandler_Loop30; stores A to ; PpuAddrHigh; loads A from $0482,y; stores A to Zp02; and 10 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop30: iny ; CPU:$C5C3 PRG:45C3 C8 iny ; CPU:$C5C4 PRG:45C4 C8 iny ; CPU:$C5C5 PRG:45C5 C8 bne NmiHandler_OnNonzero12 ; CPU:$C5C6 PRG:45C6 D0 BC lda #$F0 ; CPU:$C5C8 PRG:45C8 A9 F0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero13 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: stores A to $0700,x; increments X; ; increments X; increments X; increments X; branches on not equal to ; NmiHandler_OnNonzero13. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; X, the N and Z flags, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero13: sta $0700,x ; CPU:$C5CA PRG:45CA 9D 00 07 inx ; CPU:$C5CD PRG:45CD E8 inx ; CPU:$C5CE PRG:45CE E8 inx ; CPU:$C5CF PRG:45CF E8 inx ; CPU:$C5D0 PRG:45D0 E8 bne NmiHandler_OnNonzero13 ; CPU:$C5D1 PRG:45D1 D0 F7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop31 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop31: rts ; CPU:$C5D3 PRG:45D3 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C5D4 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: loads A with $0C; stores A to Zp0C; loads A ; with $02; stores A to ScreenPtrHi; loads A from Zp48; rotates a ; right; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp0C, Zp1C, $0700. ; ; ----------------------------------------------------------------------------- Sub_C5D4: lda #$0C ; CPU:$C5D4 PRG:45D4 A9 0C sta Zp0C ; CPU:$C5D6 PRG:45D6 85 0C lda #$02 ; CPU:$C5D8 PRG:45D8 A9 02 sta ScreenPtrHi ; CPU:$C5DA PRG:45DA 85 0B lda Zp48 ; CPU:$C5DC PRG:45DC A5 48 ror a ; CPU:$C5DE PRG:45DE 6A bcc NmiHandler_Loop32 ; CPU:$C5DF PRG:45DF 90 13 lda #$20 ; CPU:$C5E1 PRG:45E1 A9 20 sta ScreenPtrLo ; CPU:$C5E3 PRG:45E3 85 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero14 ; Global: The routine calls Sub_C607. ; Local: Executes 8 instructions: calls Sub_C607; loads A from ScreenPtrLo; ; clears the carry flag; adds $10 to A; stores A to ScreenPtrLo; ; decrements Zp0C; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp0C, Zp1C, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero14: jsr Sub_C607 ; CPU:$C5E5 PRG:45E5 20 07 C6 lda ScreenPtrLo ; CPU:$C5E8 PRG:45E8 A5 0A clc ; CPU:$C5EA PRG:45EA 18 adc #$10 ; CPU:$C5EB PRG:45EB 69 10 sta ScreenPtrLo ; CPU:$C5ED PRG:45ED 85 0A dec Zp0C ; CPU:$C5EF PRG:45EF C6 0C bne NmiHandler_OnNonzero14 ; CPU:$C5F1 PRG:45F1 D0 F2 rts ; CPU:$C5F3 PRG:45F3 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop32 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $D0; stores A to ScreenPtrLo. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp0C, Zp1C, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop32: lda #$D0 ; CPU:$C5F4 PRG:45F4 A9 D0 sta ScreenPtrLo ; CPU:$C5F6 PRG:45F6 85 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero15 ; Global: The routine calls Sub_C607. ; Local: Executes 8 instructions: calls Sub_C607; loads A from ScreenPtrLo; ; sets the carry flag; subtracts $10 from A; stores A to ScreenPtrLo; ; decrements Zp0C; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp0C, Zp1C, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero15: jsr Sub_C607 ; CPU:$C5F8 PRG:45F8 20 07 C6 lda ScreenPtrLo ; CPU:$C5FB PRG:45FB A5 0A sec ; CPU:$C5FD PRG:45FD 38 sbc #$10 ; CPU:$C5FE PRG:45FE E9 10 sta ScreenPtrLo ; CPU:$C600 PRG:4600 85 0A dec Zp0C ; CPU:$C602 PRG:4602 C6 0C bne NmiHandler_OnNonzero15 ; CPU:$C604 PRG:4604 D0 F2 rts ; CPU:$C606 PRG:4606 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C607 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads Y with $02; loads A from ; ((ScreenPtrLo),y); clears the carry flag; adds $08 to A; compares A ; with $F0; branches on carry clear to NmiHandler_Loop33. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp1C, $0700. ; ; ----------------------------------------------------------------------------- Sub_C607: ldy #$02 ; CPU:$C607 PRG:4607 A0 02 lda (ScreenPtrLo),y ; CPU:$C609 PRG:4609 B1 0A clc ; CPU:$C60B PRG:460B 18 adc #$08 ; CPU:$C60C PRG:460C 69 08 cmp #$F0 ; CPU:$C60E PRG:460E C9 F0 bcc NmiHandler_Loop33 ; CPU:$C610 PRG:4610 90 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNegative ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNegative: rts ; CPU:$C612 PRG:4612 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop33 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 24 instructions: returns with RTS; loads Y with $00; loads A ; from ((ScreenPtrLo),y); branches on negative to ; NmiHandler_OnNegative; shifts a left; copies A into Y; and 18 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp1C, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop33: ldy #$00 ; CPU:$C613 PRG:4613 A0 00 lda (ScreenPtrLo),y ; CPU:$C615 PRG:4615 B1 0A bmi NmiHandler_OnNegative ; CPU:$C617 PRG:4617 30 F9 asl a ; CPU:$C619 PRG:4619 0A tay ; CPU:$C61A PRG:461A A8 lda $FA0C,y ; CPU:$C61B PRG:461B B9 0C FA sta StarFieldPtrLo ; CPU:$C61E PRG:461E 85 00 iny ; CPU:$C620 PRG:4620 C8 lda $FA0C,y ; CPU:$C621 PRG:4621 B9 0C FA sta Zp02 ; CPU:$C624 PRG:4624 85 02 cpy #$17 ; CPU:$C626 PRG:4626 C0 17 beq NmiHandler_Loop40 ; CPU:$C628 PRG:4628 F0 51 ldy #$01 ; CPU:$C62A PRG:462A A0 01 lda (ScreenPtrLo),y ; CPU:$C62C PRG:462C B1 0A and #$1F ; CPU:$C62E PRG:462E 29 1F tay ; CPU:$C630 PRG:4630 A8 lda $FA58,y ; CPU:$C631 PRG:4631 B9 58 FA and #$C0 ; CPU:$C634 PRG:4634 29 C0 ora Zp02 ; CPU:$C636 PRG:4636 05 02 sta Zp02 ; CPU:$C638 PRG:4638 85 02 and #$40 ; CPU:$C63A PRG:463A 29 40 beq NmiHandler_Loop34 ; CPU:$C63C PRG:463C F0 02 lda #$02 ; CPU:$C63E PRG:463E A9 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop34 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 13 instructions: stores A to StarFieldCount; loads A from ; $FA58,y; ANDs A with $3E; stores A to Zp1C; clears the carry flag; ; adds StarFieldPtrLo to A; and 7 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp1C, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop34: sta StarFieldCount ; CPU:$C640 PRG:4640 85 06 lda $FA58,y ; CPU:$C642 PRG:4642 B9 58 FA and #$3E ; CPU:$C645 PRG:4645 29 3E sta Zp1C ; CPU:$C647 PRG:4647 85 1C clc ; CPU:$C649 PRG:4649 18 adc StarFieldPtrLo ; CPU:$C64A PRG:464A 65 00 sta StarFieldPtrLo ; CPU:$C64C PRG:464C 85 00 ldy Zp1C ; CPU:$C64E PRG:464E A4 1C bne NmiHandler_Loop36 ; CPU:$C650 PRG:4650 D0 0C cmp #$82 ; CPU:$C652 PRG:4652 C9 82 bne NmiHandler_Loop35 ; CPU:$C654 PRG:4654 D0 04 lda #$FC ; CPU:$C656 PRG:4656 A9 FC bne NmiHandler_Loop37 ; CPU:$C658 PRG:4658 D0 07 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop35 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: increments StarFieldCount; branches on ; non-negative to NmiHandler_Loop38. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop35: inc StarFieldCount ; CPU:$C65A PRG:465A E6 06 bpl NmiHandler_Loop38 ; CPU:$C65C PRG:465C 10 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop36 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: clears the carry flag; adds $02 to A. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop36: clc ; CPU:$C65E PRG:465E 18 adc #$02 ; CPU:$C65F PRG:465F 69 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop37 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores A to StarFieldPtrHi. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop37: sta StarFieldPtrHi ; CPU:$C661 PRG:4661 85 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop38 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads Y with $02; loads A from ; ((ScreenPtrLo),y); stores A to PpuAddrLow; compares A with $88; ; branches on carry clear to NmiHandler_Loop39; loads A from Zp02; ; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop38: ldy #$02 ; CPU:$C663 PRG:4663 A0 02 lda (ScreenPtrLo),y ; CPU:$C665 PRG:4665 B1 0A sta PpuAddrLow ; CPU:$C667 PRG:4667 85 04 cmp #$88 ; CPU:$C669 PRG:4669 C9 88 bcc NmiHandler_Loop39 ; CPU:$C66B PRG:466B 90 06 lda Zp02 ; CPU:$C66D PRG:466D A5 02 ora #$20 ; CPU:$C66F PRG:466F 09 20 sta Zp02 ; CPU:$C671 PRG:4671 85 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop39 ; Global: The routine calls Sub_C855. ; Local: Executes 4 instructions: increments Y; loads A from ; ((ScreenPtrLo),y); stores A to PpuAddrHigh; calls Sub_C855. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop39: iny ; CPU:$C673 PRG:4673 C8 lda (ScreenPtrLo),y ; CPU:$C674 PRG:4674 B1 0A sta PpuAddrHigh ; CPU:$C676 PRG:4676 85 05 jmp Sub_C855 ; CPU:$C678 PRG:4678 4C 55 C8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop40 ; Global: The routine calls NmiHandler_Loop38. ; Local: Executes 12 instructions: loads Y with $01; loads A from ; ((ScreenPtrLo),y); ANDs A with $1F; copies A into Y; loads A from ; $FA28,y; stores A to StarFieldPtrLo; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop40: ldy #$01 ; CPU:$C67B PRG:467B A0 01 lda (ScreenPtrLo),y ; CPU:$C67D PRG:467D B1 0A and #$1F ; CPU:$C67F PRG:467F 29 1F tay ; CPU:$C681 PRG:4681 A8 lda $FA28,y ; CPU:$C682 PRG:4682 B9 28 FA sta StarFieldPtrLo ; CPU:$C685 PRG:4685 85 00 clc ; CPU:$C687 PRG:4687 18 adc #$02 ; CPU:$C688 PRG:4688 69 02 sta StarFieldPtrHi ; CPU:$C68A PRG:468A 85 01 lda #$00 ; CPU:$C68C PRG:468C A9 00 sta StarFieldCount ; CPU:$C68E PRG:468E 85 06 jmp NmiHandler_Loop38 ; CPU:$C690 PRG:4690 4C 63 C6 ; ----------------------------------------------------------------------------- ; Routine: Sub_C693 ; Global: The routine reads $0496. ; Local: Executes 4 instructions: loads A from $0496; compares A with $02; ; branches on carry set to NmiHandler_Loop42; loads Y with $03. ; Parameters: Reads $0496 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp10, Zp11, Zp1E, Zp1F, ; $0700. ; ; ----------------------------------------------------------------------------- Sub_C693: lda $0496 ; CPU:$C693 PRG:4693 AD 96 04 cmp #$02 ; CPU:$C696 PRG:4696 C9 02 bcs NmiHandler_Loop42 ; CPU:$C698 PRG:4698 B0 0D ldy #$03 ; CPU:$C69A PRG:469A A0 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative9 ; Global: The routine calls Sub_C6A8. ; Local: Executes 3 instructions: loads A from $0497,y; branches on equal to ; NmiHandler_Loop41; calls Sub_C6A8. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp10, Zp11, Zp1E, Zp1F, ; $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative9: lda $0497,y ; CPU:$C69C PRG:469C B9 97 04 beq NmiHandler_Loop41 ; CPU:$C69F PRG:469F F0 03 jsr Sub_C6A8 ; CPU:$C6A1 PRG:46A1 20 A8 C6 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop41 ; Global: The routine calls Sub_C6A8. ; Local: Executes 5 instructions: loads A from $0497,y; branches on equal to ; NmiHandler_Loop41; calls Sub_C6A8; decrements Y; branches on ; non-negative to NmiHandler_OnNonnegative9. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp10, Zp11, Zp1E, Zp1F, ; $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop41: dey ; CPU:$C6A4 PRG:46A4 88 bpl NmiHandler_OnNonnegative9 ; CPU:$C6A5 PRG:46A5 10 F5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop42 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop42: rts ; CPU:$C6A7 PRG:46A7 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C6A8 ; Global: The routine calls ComputeEnemyShipScreenPosition, reads $0496 and $040F. ; Local: Executes 16 instructions: stores Y to TilePtrHi; stores X to ; TilePtrLo; calls ComputeEnemyShipScreenPosition; loads X from TilePtrLo; loads A from ; Zp10; stores A to PpuAddrLow; and 10 more instructions. ; Parameters: Reads $0496 and $040F from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp10, Zp11, Zp1E, Zp1F, ; $0700. ; ; ----------------------------------------------------------------------------- Sub_C6A8: sty TilePtrHi ; CPU:$C6A8 PRG:46A8 84 09 stx TilePtrLo ; CPU:$C6AA PRG:46AA 86 08 jsr ComputeEnemyShipScreenPosition ; CPU:$C6AC PRG:46AC 20 BA D7 ldx TilePtrLo ; CPU:$C6AF PRG:46AF A6 08 lda Zp10 ; CPU:$C6B1 PRG:46B1 A5 10 sta PpuAddrLow ; CPU:$C6B3 PRG:46B3 85 04 lda Zp11 ; CPU:$C6B5 PRG:46B5 A5 11 sta PpuAddrHigh ; CPU:$C6B7 PRG:46B7 85 05 lda $0496 ; CPU:$C6B9 PRG:46B9 AD 96 04 asl a ; CPU:$C6BC PRG:46BC 0A sta Zp02 ; CPU:$C6BD PRG:46BD 85 02 lda $040F ; CPU:$C6BF PRG:46BF AD 0F 04 ror a ; CPU:$C6C2 PRG:46C2 6A lda #$71 ; CPU:$C6C3 PRG:46C3 A9 71 bcc NmiHandler_Loop43 ; CPU:$C6C5 PRG:46C5 90 02 adc #$03 ; CPU:$C6C7 PRG:46C7 69 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop43 ; Global: The routine calls NmiHandler_Loop60. ; Local: Executes 4 instructions: stores A to StarFieldPtrLo; calls ; NmiHandler_Loop60; loads Y from TilePtrHi; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop43: sta StarFieldPtrLo ; CPU:$C6C9 PRG:46C9 85 00 jsr NmiHandler_Loop60 ; CPU:$C6CB PRG:46CB 20 76 C8 ldy TilePtrHi ; CPU:$C6CE PRG:46CE A4 09 rts ; CPU:$C6D0 PRG:46D0 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero16 ; Global: The routine calls Sub_C6E0. ; Local: Executes 8 instructions: calls Sub_C6E0; loads A from ScreenPtrLo; ; clears the carry flag; adds Zp0D to A; stores A to ScreenPtrLo; ; decrements Zp0C; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp0C, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero16: jsr Sub_C6E0 ; CPU:$C6D1 PRG:46D1 20 E0 C6 lda ScreenPtrLo ; CPU:$C6D4 PRG:46D4 A5 0A clc ; CPU:$C6D6 PRG:46D6 18 adc Zp0D ; CPU:$C6D7 PRG:46D7 65 0D sta ScreenPtrLo ; CPU:$C6D9 PRG:46D9 85 0A dec Zp0C ; CPU:$C6DB PRG:46DB C6 0C bne NmiHandler_OnNonzero16 ; CPU:$C6DD PRG:46DD D0 F2 rts ; CPU:$C6DF PRG:46DF 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C6E0 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads Y with $01; loads A from ; ((ScreenPtrLo),y); stores A to PpuAddrLow; clears the carry flag; ; adds $08 to A; compares A with $F0; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- Sub_C6E0: ldy #$01 ; CPU:$C6E0 PRG:46E0 A0 01 lda (ScreenPtrLo),y ; CPU:$C6E2 PRG:46E2 B1 0A sta PpuAddrLow ; CPU:$C6E4 PRG:46E4 85 04 clc ; CPU:$C6E6 PRG:46E6 18 adc #$08 ; CPU:$C6E7 PRG:46E7 69 08 cmp #$F0 ; CPU:$C6E9 PRG:46E9 C9 F0 bcc NmiHandler_Loop44 ; CPU:$C6EB PRG:46EB 90 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNegative2 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNegative2: rts ; CPU:$C6ED PRG:46ED 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop44 ; Global: The routine calls Sub_C886. ; Local: Executes 18 instructions: returns with RTS; decrements Y; loads A ; from ((ScreenPtrLo),y); branches on negative to ; NmiHandler_OnNegative2; ANDs A with $1F; copies A into Y; and 12 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop44: dey ; CPU:$C6EE PRG:46EE 88 lda (ScreenPtrLo),y ; CPU:$C6EF PRG:46EF B1 0A bmi NmiHandler_OnNegative2 ; CPU:$C6F1 PRG:46F1 30 FA and #$1F ; CPU:$C6F3 PRG:46F3 29 1F tay ; CPU:$C6F5 PRG:46F5 A8 lda $FA58,y ; CPU:$C6F6 PRG:46F6 B9 58 FA and #$C0 ; CPU:$C6F9 PRG:46F9 29 C0 ora Zp03 ; CPU:$C6FB PRG:46FB 05 03 sta Zp02 ; CPU:$C6FD PRG:46FD 85 02 lda $FA40,y ; CPU:$C6FF PRG:46FF B9 40 FA sta StarFieldPtrLo ; CPU:$C702 PRG:4702 85 00 ldy #$02 ; CPU:$C704 PRG:4704 A0 02 lda (ScreenPtrLo),y ; CPU:$C706 PRG:4706 B1 0A clc ; CPU:$C708 PRG:4708 18 adc #$04 ; CPU:$C709 PRG:4709 69 04 sta PpuAddrHigh ; CPU:$C70B PRG:470B 85 05 jmp Sub_C886 ; CPU:$C70D PRG:470D 4C 86 C8 ; ----------------------------------------------------------------------------- ; Routine: Sub_C710 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A with $D8; stores A to ScreenPtrLo; ; loads A with $03; stores A to ScreenPtrHi; loads A with $08; stores ; A to Zp0C. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp0C, Zp1C, Zp1D, ; $0700. ; ; ----------------------------------------------------------------------------- Sub_C710: lda #$D8 ; CPU:$C710 PRG:4710 A9 D8 sta ScreenPtrLo ; CPU:$C712 PRG:4712 85 0A lda #$03 ; CPU:$C714 PRG:4714 A9 03 sta ScreenPtrHi ; CPU:$C716 PRG:4716 85 0B lda #$08 ; CPU:$C718 PRG:4718 A9 08 sta Zp0C ; CPU:$C71A PRG:471A 85 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero17 ; Global: The routine calls Sub_C731. ; Local: Executes 4 instructions: loads Y with $00; loads A from ; ((ScreenPtrLo),y); branches on equal to NmiHandler_Loop45; calls ; Sub_C731. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp0C, Zp1C, Zp1D, ; $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero17: ldy #$00 ; CPU:$C71C PRG:471C A0 00 lda (ScreenPtrLo),y ; CPU:$C71E PRG:471E B1 0A beq NmiHandler_Loop45 ; CPU:$C720 PRG:4720 F0 03 jsr Sub_C731 ; CPU:$C722 PRG:4722 20 31 C7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop45 ; Global: The routine calls Sub_C731. ; Local: Executes 11 instructions: loads Y with $00; loads A from ; ((ScreenPtrLo),y); branches on equal to NmiHandler_Loop45; calls ; Sub_C731; loads A from ScreenPtrLo; clears the carry flag; and 5 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp0C, Zp1C, Zp1D, ; $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop45: lda ScreenPtrLo ; CPU:$C725 PRG:4725 A5 0A clc ; CPU:$C727 PRG:4727 18 adc #$04 ; CPU:$C728 PRG:4728 69 04 sta ScreenPtrLo ; CPU:$C72A PRG:472A 85 0A dec Zp0C ; CPU:$C72C PRG:472C C6 0C bne NmiHandler_OnNonzero17 ; CPU:$C72E PRG:472E D0 EC rts ; CPU:$C730 PRG:4730 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C731 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 13 instructions: sets the carry flag; subtracts $01 from A; ; stores A to ((ScreenPtrLo),y); compares A with $FA; branches on ; carry set to NmiHandler_Loop47; compares A with $F4; and 7 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- Sub_C731: sec ; CPU:$C731 PRG:4731 38 sbc #$01 ; CPU:$C732 PRG:4732 E9 01 sta (ScreenPtrLo),y ; CPU:$C734 PRG:4734 91 0A cmp #$FA ; CPU:$C736 PRG:4736 C9 FA bcs NmiHandler_Loop47 ; CPU:$C738 PRG:4738 B0 32 cmp #$F4 ; CPU:$C73A PRG:473A C9 F4 bcs NmiHandler_Loop48 ; CPU:$C73C PRG:473C B0 38 cmp #$EE ; CPU:$C73E PRG:473E C9 EE bcs NmiHandler_Loop50 ; CPU:$C740 PRG:4740 B0 4E cmp #$EB ; CPU:$C742 PRG:4742 C9 EB bcs NmiHandler_Loop51 ; CPU:$C744 PRG:4744 B0 4E cmp #$C3 ; CPU:$C746 PRG:4746 C9 C3 bcs NmiHandler_Loop46 ; CPU:$C748 PRG:4748 B0 06 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero2 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $00; copies A into Y; stores A ; to ((ScreenPtrLo),y); returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N and Z flags. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero2: lda #$00 ; CPU:$C74A PRG:474A A9 00 tay ; CPU:$C74C PRG:474C A8 sta (ScreenPtrLo),y ; CPU:$C74D PRG:474D 91 0A rts ; CPU:$C74F PRG:474F 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop46 ; Global: The routine calls Sub_C782. ; Local: Executes 17 instructions: loads A with $00; copies A into Y; stores A ; to ((ScreenPtrLo),y); returns with RTS; loads Y with $03; loads A ; from ((ScreenPtrLo),y); and 11 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop46: ldy #$03 ; CPU:$C750 PRG:4750 A0 03 lda (ScreenPtrLo),y ; CPU:$C752 PRG:4752 B1 0A beq NmiHandler_OnZero2 ; CPU:$C754 PRG:4754 F0 F4 asl a ; CPU:$C756 PRG:4756 0A adc (ScreenPtrLo),y ; CPU:$C757 PRG:4757 71 0A tay ; CPU:$C759 PRG:4759 A8 lda $FA6D,y ; CPU:$C75A PRG:475A B9 6D FA sta StarFieldPtrLo ; CPU:$C75D PRG:475D 85 00 lda $FA6E,y ; CPU:$C75F PRG:475F B9 6E FA sta StarFieldPtrHi ; CPU:$C762 PRG:4762 85 01 lda $FA6F,y ; CPU:$C764 PRG:4764 B9 6F FA sta Zp02 ; CPU:$C767 PRG:4767 85 02 jmp Sub_C782 ; CPU:$C769 PRG:4769 4C 82 C7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop47 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A with $D1; stores A to ; StarFieldPtrLo; loads A with $D3; stores A to StarFieldPtrHi; ; branches on not equal to NmiHandler_Loop49. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop47: lda #$D1 ; CPU:$C76C PRG:476C A9 D1 sta StarFieldPtrLo ; CPU:$C76E PRG:476E 85 00 lda #$D3 ; CPU:$C770 PRG:4770 A9 D3 sta StarFieldPtrHi ; CPU:$C772 PRG:4772 85 01 bne NmiHandler_Loop49 ; CPU:$C774 PRG:4774 D0 08 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop48 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $D5; stores A to ; StarFieldPtrLo; loads A with $D7; stores A to StarFieldPtrHi. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop48: lda #$D5 ; CPU:$C776 PRG:4776 A9 D5 sta StarFieldPtrLo ; CPU:$C778 PRG:4778 85 00 lda #$D7 ; CPU:$C77A PRG:477A A9 D7 sta StarFieldPtrHi ; CPU:$C77C PRG:477C 85 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop49 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $02; stores A to Zp02. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop49: lda #$02 ; CPU:$C77E PRG:477E A9 02 sta Zp02 ; CPU:$C780 PRG:4780 85 02 ; ----------------------------------------------------------------------------- ; Routine: Sub_C782 ; Global: The routine calls NmiHandler_Loop59. ; Local: Executes 7 instructions: loads Y with $01; loads A from ; ((ScreenPtrLo),y); stores A to PpuAddrLow; increments Y; loads A ; from ((ScreenPtrLo),y); stores A to PpuAddrHigh; and 1 more ; instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, $0700. ; ; ----------------------------------------------------------------------------- Sub_C782: ldy #$01 ; CPU:$C782 PRG:4782 A0 01 lda (ScreenPtrLo),y ; CPU:$C784 PRG:4784 B1 0A sta PpuAddrLow ; CPU:$C786 PRG:4786 85 04 iny ; CPU:$C788 PRG:4788 C8 lda (ScreenPtrLo),y ; CPU:$C789 PRG:4789 B1 0A sta PpuAddrHigh ; CPU:$C78B PRG:478B 85 05 jmp NmiHandler_Loop59 ; CPU:$C78D PRG:478D 4C 65 C8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop50 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $D9; branches on negative to ; NmiHandler_Loop52. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop50: lda #$D9 ; CPU:$C790 PRG:4790 A9 D9 bmi NmiHandler_Loop52 ; CPU:$C792 PRG:4792 30 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop51 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads A with $DD. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop51: lda #$DD ; CPU:$C794 PRG:4794 A9 DD ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop52 ; Global: The routine calls Sub_C7EA. ; Local: Executes 9 instructions: stores A to StarFieldPtrLo; loads Y with ; $02; stores Y to Zp03; loads A from ((ScreenPtrLo),y); stores A to ; PpuAddrHigh; decrements Y; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop52: sta StarFieldPtrLo ; CPU:$C796 PRG:4796 85 00 ldy #$02 ; CPU:$C798 PRG:4798 A0 02 sty Zp03 ; CPU:$C79A PRG:479A 84 03 lda (ScreenPtrLo),y ; CPU:$C79C PRG:479C B1 0A sta PpuAddrHigh ; CPU:$C79E PRG:479E 85 05 dey ; CPU:$C7A0 PRG:47A0 88 lda (ScreenPtrLo),y ; CPU:$C7A1 PRG:47A1 B1 0A sta PpuAddrLow ; CPU:$C7A3 PRG:47A3 85 04 jmp Sub_C7EA ; CPU:$C7A5 PRG:47A5 4C EA C7 ; ----------------------------------------------------------------------------- ; Routine: Sub_C7A8 ; Global: The routine writes $03F8, reads $03F8. ; Local: Executes 14 instructions: loads Y from $03F8; branches on equal to ; NmiHandler_Loop53; decrements Y; stores Y to $03F8; compares Y with ; $F8; branches on carry set to NmiHandler_Loop54; and 8 more ; instructions. ; Parameters: Reads $03F8 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $03F8 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $03F8, ; $0700. ; ; ----------------------------------------------------------------------------- Sub_C7A8: ldy $03F8 ; CPU:$C7A8 PRG:47A8 AC F8 03 beq NmiHandler_Loop53 ; CPU:$C7AB PRG:47AB F0 19 dey ; CPU:$C7AD PRG:47AD 88 sty $03F8 ; CPU:$C7AE PRG:47AE 8C F8 03 cpy #$F8 ; CPU:$C7B1 PRG:47B1 C0 F8 bcs NmiHandler_Loop54 ; CPU:$C7B3 PRG:47B3 B0 12 cpy #$F0 ; CPU:$C7B5 PRG:47B5 C0 F0 bcs NmiHandler_Loop55 ; CPU:$C7B7 PRG:47B7 B0 12 cpy #$E8 ; CPU:$C7B9 PRG:47B9 C0 E8 bcs NmiHandler_Loop56 ; CPU:$C7BB PRG:47BB B0 12 cpy #$E0 ; CPU:$C7BD PRG:47BD C0 E0 bcs NmiHandler_Loop57 ; CPU:$C7BF PRG:47BF B0 12 lda #$00 ; CPU:$C7C1 PRG:47C1 A9 00 sta $03F8 ; CPU:$C7C3 PRG:47C3 8D F8 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop53 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop53: rts ; CPU:$C7C6 PRG:47C6 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop54 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $E1; branches on negative to ; NmiHandler_Loop58. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop54: lda #$E1 ; CPU:$C7C7 PRG:47C7 A9 E1 bmi NmiHandler_Loop58 ; CPU:$C7C9 PRG:47C9 30 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop55 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $E5; branches on negative to ; NmiHandler_Loop58. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop55: lda #$E5 ; CPU:$C7CB PRG:47CB A9 E5 bmi NmiHandler_Loop58 ; CPU:$C7CD PRG:47CD 30 06 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop56 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $E9; branches on negative to ; NmiHandler_Loop58. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop56: lda #$E9 ; CPU:$C7CF PRG:47CF A9 E9 bmi NmiHandler_Loop58 ; CPU:$C7D1 PRG:47D1 30 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop57 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads A with $ED. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop57: lda #$ED ; CPU:$C7D3 PRG:47D3 A9 ED ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop58 ; Global: The routine reads $03F9 and $03FA. ; Local: Executes 10 instructions: stores A to StarFieldPtrLo; clears the ; carry flag; adds $02 to A; stores A to StarFieldPtrHi; loads A with ; $00; stores A to Zp03; and 4 more instructions. ; Parameters: Reads $03F9 and $03FA from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop58: sta StarFieldPtrLo ; CPU:$C7D5 PRG:47D5 85 00 clc ; CPU:$C7D7 PRG:47D7 18 adc #$02 ; CPU:$C7D8 PRG:47D8 69 02 sta StarFieldPtrHi ; CPU:$C7DA PRG:47DA 85 01 lda #$00 ; CPU:$C7DC PRG:47DC A9 00 sta Zp03 ; CPU:$C7DE PRG:47DE 85 03 lda $03F9 ; CPU:$C7E0 PRG:47E0 AD F9 03 sta PpuAddrLow ; CPU:$C7E3 PRG:47E3 85 04 lda $03FA ; CPU:$C7E5 PRG:47E5 AD FA 03 sta PpuAddrHigh ; CPU:$C7E8 PRG:47E8 85 05 ; ----------------------------------------------------------------------------- ; Routine: Sub_C7EA ; Global: The routine calls NmiHandler_Loop59 and Sub_C85D. ; Local: Executes 55 instructions: loads A from PpuAddrLow; sets the carry ; flag; subtracts $08 from A; stores A to PpuAddrLow; loads A from ; PpuAddrHigh; sets the carry flag; and 49 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp1C, Zp1D, $0700. ; ; ----------------------------------------------------------------------------- Sub_C7EA: lda PpuAddrLow ; CPU:$C7EA PRG:47EA A5 04 sec ; CPU:$C7EC PRG:47EC 38 sbc #$08 ; CPU:$C7ED PRG:47ED E9 08 sta PpuAddrLow ; CPU:$C7EF PRG:47EF 85 04 lda PpuAddrHigh ; CPU:$C7F1 PRG:47F1 A5 05 sec ; CPU:$C7F3 PRG:47F3 38 sbc #$08 ; CPU:$C7F4 PRG:47F4 E9 08 sta PpuAddrHigh ; CPU:$C7F6 PRG:47F6 85 05 sta Zp1D ; CPU:$C7F8 PRG:47F8 85 1D lda Zp03 ; CPU:$C7FA PRG:47FA A5 03 sta Zp02 ; CPU:$C7FC PRG:47FC 85 02 lda StarFieldPtrLo ; CPU:$C7FE PRG:47FE A5 00 sta Zp1C ; CPU:$C800 PRG:4800 85 1C clc ; CPU:$C802 PRG:4802 18 adc #$02 ; CPU:$C803 PRG:4803 69 02 sta StarFieldPtrHi ; CPU:$C805 PRG:4805 85 01 jsr NmiHandler_Loop59 ; CPU:$C807 PRG:4807 20 65 C8 lda PpuAddrLow ; CPU:$C80A PRG:480A A5 04 clc ; CPU:$C80C PRG:480C 18 adc #$10 ; CPU:$C80D PRG:480D 69 10 sta PpuAddrLow ; CPU:$C80F PRG:480F 85 04 lda Zp1D ; CPU:$C811 PRG:4811 A5 1D sta PpuAddrHigh ; CPU:$C813 PRG:4813 85 05 lda Zp03 ; CPU:$C815 PRG:4815 A5 03 ora #$80 ; CPU:$C817 PRG:4817 09 80 sta Zp02 ; CPU:$C819 PRG:4819 85 02 lda Zp1C ; CPU:$C81B PRG:481B A5 1C sta StarFieldPtrLo ; CPU:$C81D PRG:481D 85 00 jsr NmiHandler_Loop59 ; CPU:$C81F PRG:481F 20 65 C8 lda Zp1D ; CPU:$C822 PRG:4822 A5 1D clc ; CPU:$C824 PRG:4824 18 adc #$10 ; CPU:$C825 PRG:4825 69 10 sta PpuAddrHigh ; CPU:$C827 PRG:4827 85 05 sta Zp1D ; CPU:$C829 PRG:4829 85 1D lda Zp03 ; CPU:$C82B PRG:482B A5 03 ora #$C0 ; CPU:$C82D PRG:482D 09 C0 sta Zp02 ; CPU:$C82F PRG:482F 85 02 lda Zp1C ; CPU:$C831 PRG:4831 A5 1C sta StarFieldPtrLo ; CPU:$C833 PRG:4833 85 00 jsr Sub_C85D ; CPU:$C835 PRG:4835 20 5D C8 lda PpuAddrLow ; CPU:$C838 PRG:4838 A5 04 sec ; CPU:$C83A PRG:483A 38 sbc #$10 ; CPU:$C83B PRG:483B E9 10 sta PpuAddrLow ; CPU:$C83D PRG:483D 85 04 lda Zp1D ; CPU:$C83F PRG:483F A5 1D sta PpuAddrHigh ; CPU:$C841 PRG:4841 85 05 lda Zp03 ; CPU:$C843 PRG:4843 A5 03 ora #$40 ; CPU:$C845 PRG:4845 09 40 sta Zp02 ; CPU:$C847 PRG:4847 85 02 lda Zp1C ; CPU:$C849 PRG:4849 A5 1C sta StarFieldPtrLo ; CPU:$C84B PRG:484B 85 00 clc ; CPU:$C84D PRG:484D 18 adc #$02 ; CPU:$C84E PRG:484E 69 02 sta StarFieldPtrHi ; CPU:$C850 PRG:4850 85 01 jmp Sub_C85D ; CPU:$C852 PRG:4852 4C 5D C8 ; ----------------------------------------------------------------------------- ; Routine: Sub_C855 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A from StarFieldCount; branches on ; equal to NmiHandler_Loop59; ANDs A with $02; branches on equal to ; NmiHandler_Loop60. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- Sub_C855: lda StarFieldCount ; CPU:$C855 PRG:4855 A5 06 beq NmiHandler_Loop59 ; CPU:$C857 PRG:4857 F0 0C and #$02 ; CPU:$C859 PRG:4859 29 02 beq NmiHandler_Loop60 ; CPU:$C85B PRG:485B F0 19 ; ----------------------------------------------------------------------------- ; Routine: Sub_C85D ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads Y from StarFieldPtrHi; loads A from ; StarFieldPtrLo; stores A to StarFieldPtrHi; stores Y to ; StarFieldPtrLo. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, $0700. ; ; ----------------------------------------------------------------------------- Sub_C85D: ldy StarFieldPtrHi ; CPU:$C85D PRG:485D A4 01 lda StarFieldPtrLo ; CPU:$C85F PRG:485F A5 00 sta StarFieldPtrHi ; CPU:$C861 PRG:4861 85 01 sty StarFieldPtrLo ; CPU:$C863 PRG:4863 84 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop59 ; Global: The routine calls Sub_C886. ; Local: Executes 8 instructions: calls Sub_C886; loads A from StarFieldPtrHi; ; stores A to StarFieldPtrLo; loads A from PpuAddrHigh; clears the ; carry flag; adds $08 to A; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop59: jsr Sub_C886 ; CPU:$C865 PRG:4865 20 86 C8 lda StarFieldPtrHi ; CPU:$C868 PRG:4868 A5 01 sta StarFieldPtrLo ; CPU:$C86A PRG:486A 85 00 lda PpuAddrHigh ; CPU:$C86C PRG:486C A5 05 clc ; CPU:$C86E PRG:486E 18 adc #$08 ; CPU:$C86F PRG:486F 69 08 sta PpuAddrHigh ; CPU:$C871 PRG:4871 85 05 jmp Sub_C886 ; CPU:$C873 PRG:4873 4C 86 C8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop60 ; Global: The routine calls Sub_C886. ; Local: Executes 8 instructions: calls Sub_C886; loads A from Zp02; EORs A ; with $40; stores A to Zp02; loads A from PpuAddrHigh; clears the ; carry flag; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp02, $0700. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop60: jsr Sub_C886 ; CPU:$C876 PRG:4876 20 86 C8 lda Zp02 ; CPU:$C879 PRG:4879 A5 02 eor #$40 ; CPU:$C87B PRG:487B 49 40 sta Zp02 ; CPU:$C87D PRG:487D 85 02 lda PpuAddrHigh ; CPU:$C87F PRG:487F A5 05 clc ; CPU:$C881 PRG:4881 18 adc #$07 ; CPU:$C882 PRG:4882 69 07 sta PpuAddrHigh ; CPU:$C884 PRG:4884 85 05 ; ----------------------------------------------------------------------------- ; Routine: Sub_C886 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 16 instructions: loads A from PpuAddrHigh; compares A with ; $C1; branches on carry set to NmiHandler_Loop61; loads A from ; PpuAddrLow; stores A to $0700,x; increments X; and 10 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z and C flags, $0700. ; ; ----------------------------------------------------------------------------- Sub_C886: lda PpuAddrHigh ; CPU:$C886 PRG:4886 A5 05 cmp #$C1 ; CPU:$C888 PRG:4888 C9 C1 bcs NmiHandler_Loop61 ; CPU:$C88A PRG:488A B0 1A lda PpuAddrLow ; CPU:$C88C PRG:488C A5 04 sta $0700,x ; CPU:$C88E PRG:488E 9D 00 07 inx ; CPU:$C891 PRG:4891 E8 lda StarFieldPtrLo ; CPU:$C892 PRG:4892 A5 00 sta $0700,x ; CPU:$C894 PRG:4894 9D 00 07 inx ; CPU:$C897 PRG:4897 E8 lda Zp02 ; CPU:$C898 PRG:4898 A5 02 sta $0700,x ; CPU:$C89A PRG:489A 9D 00 07 inx ; CPU:$C89D PRG:489D E8 lda PpuAddrHigh ; CPU:$C89E PRG:489E A5 05 sta $0700,x ; CPU:$C8A0 PRG:48A0 9D 00 07 inx ; CPU:$C8A3 PRG:48A3 E8 beq NmiHandler_Loop62 ; CPU:$C8A4 PRG:48A4 F0 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop61 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop61: rts ; CPU:$C8A6 PRG:48A6 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop62 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads X from Zp0E; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; X, the N and Z flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop62: ldx Zp0E ; CPU:$C8A7 PRG:48A7 A6 0E txs ; CPU:$C8A9 PRG:48A9 9A rts ; CPU:$C8AA PRG:48AA 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_C8AB ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads X from Zp62; branches on not equal to ; NmiHandler_Loop63. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_C8AB: ldx Zp62 ; CPU:$C8AB PRG:48AB A6 62 bne NmiHandler_Loop63 ; CPU:$C8AD PRG:48AD D0 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero18 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero18: rts ; CPU:$C8AF PRG:48AF 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop63 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 12 instructions: returns with RTS; loads A from ; StarFieldPtrLo; shifts a left; shifts a left; adds StarFieldPtrLo ; to A; adds $04 to A; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop63: lda StarFieldPtrLo ; CPU:$C8B0 PRG:48B0 A5 00 asl a ; CPU:$C8B2 PRG:48B2 0A asl a ; CPU:$C8B3 PRG:48B3 0A adc StarFieldPtrLo ; CPU:$C8B4 PRG:48B4 65 00 adc #$04 ; CPU:$C8B6 PRG:48B6 69 04 tay ; CPU:$C8B8 PRG:48B8 A8 ldx Zp61 ; CPU:$C8B9 PRG:48B9 A6 61 dex ; CPU:$C8BB PRG:48BB CA bne NmiHandler_Loop64 ; CPU:$C8BC PRG:48BC D0 04 ldx #$E0 ; CPU:$C8BE PRG:48BE A2 E0 bmi NmiHandler_Loop65 ; CPU:$C8C0 PRG:48C0 30 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop64 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: returns with RTS; loads X with $E8. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop64: ldx #$E8 ; CPU:$C8C2 PRG:48C2 A2 E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop65 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: returns with RTS; stores X to Zp02; clears ; the carry flag; loads A with $05; stores A to StarFieldPtrHi. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop65: stx Zp02 ; CPU:$C8C4 PRG:48C4 86 02 clc ; CPU:$C8C6 PRG:48C6 18 lda #$05 ; CPU:$C8C7 PRG:48C7 A9 05 sta StarFieldPtrHi ; CPU:$C8C9 PRG:48C9 85 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero19 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: returns with RTS; loads A from $FA88,y; ; decrements Y; adds PpuAddrHigh,x to A; compares A with $0A; ; branches on carry clear to NmiHandler_Loop66; and 1 more ; instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero19: lda $FA88,y ; CPU:$C8CB PRG:48CB B9 88 FA dey ; CPU:$C8CE PRG:48CE 88 adc PpuAddrHigh,x ; CPU:$C8CF PRG:48CF 75 05 cmp #$0A ; CPU:$C8D1 PRG:48D1 C9 0A bcc NmiHandler_Loop66 ; CPU:$C8D3 PRG:48D3 90 02 sbc #$0A ; CPU:$C8D5 PRG:48D5 E9 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop66 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 19 instructions: returns with RTS; loads A from $FA88,y; ; decrements Y; adds PpuAddrHigh,x to A; compares A with $0A; ; branches on carry clear to NmiHandler_Loop66; and 13 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop66: sta PpuAddrHigh,x ; CPU:$C8D7 PRG:48D7 95 05 dex ; CPU:$C8D9 PRG:48D9 CA dec StarFieldPtrHi ; CPU:$C8DA PRG:48DA C6 01 bne NmiHandler_OnNonzero19 ; CPU:$C8DC PRG:48DC D0 ED lda PpuAddrHigh,x ; CPU:$C8DE PRG:48DE B5 05 adc #$00 ; CPU:$C8E0 PRG:48E0 69 00 sta PpuAddrHigh,x ; CPU:$C8E2 PRG:48E2 95 05 inc Zp63 ; CPU:$C8E4 PRG:48E4 E6 63 ldx Zp02 ; CPU:$C8E6 PRG:48E6 A6 02 ldy #$00 ; CPU:$C8E8 PRG:48E8 A0 00 lda #$06 ; CPU:$C8EA PRG:48EA A9 06 sta StarFieldPtrHi ; CPU:$C8EC PRG:48EC 85 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero20 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: returns with RTS; loads A from ; StarFieldPtrLo,x; compares A with $00F8,y; branches on carry clear ; to NmiHandler_Loop67; branches on not equal to NmiHandler_Loop68; ; increments Y; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero20: lda StarFieldPtrLo,x ; CPU:$C8EE PRG:48EE B5 00 cmp a:$00F8,y ; CPU:$C8F0 PRG:48F0 D9 F8 00 bcc NmiHandler_Loop67 ; CPU:$C8F3 PRG:48F3 90 08 bne NmiHandler_Loop68 ; CPU:$C8F5 PRG:48F5 D0 0B iny ; CPU:$C8F7 PRG:48F7 C8 inx ; CPU:$C8F8 PRG:48F8 E8 dec StarFieldPtrHi ; CPU:$C8F9 PRG:48F9 C6 01 bne NmiHandler_OnNonzero20 ; CPU:$C8FB PRG:48FB D0 F1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop67 ; Global: The routine calls Sub_C90B. ; Local: Executes 1 instruction: calls Sub_C90B. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop67: jmp Sub_C90B ; CPU:$C8FD PRG:48FD 4C 0B C9 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero21 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: returns with RTS; loads A from ; StarFieldPtrLo,x. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero21: lda StarFieldPtrLo,x ; CPU:$C900 PRG:4900 B5 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop68 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: returns with RTS; loads A from ; StarFieldPtrLo,x; stores A to $00F8,y; increments Y; increments X; ; decrements StarFieldPtrHi; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop68: sta a:$00F8,y ; CPU:$C902 PRG:4902 99 F8 00 iny ; CPU:$C905 PRG:4905 C8 inx ; CPU:$C906 PRG:4906 E8 dec StarFieldPtrHi ; CPU:$C907 PRG:4907 C6 01 bne NmiHandler_OnNonzero21 ; CPU:$C909 PRG:4909 D0 F5 ; ----------------------------------------------------------------------------- ; Routine: Sub_C90B ; Global: The routine reads $0488 and $0489. ; Local: Executes 10 instructions: returns with RTS; loads X from Zp02; loads ; A from Zp02,x; compares A with $0488; branches on not equal to ; NmiHandler_OnNonzero18; loads X from $0489; and 4 more ; instructions. ; Parameters: Reads $0488 and $0489 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_C90B: ldx Zp02 ; CPU:$C90B PRG:490B A6 02 lda Zp02,x ; CPU:$C90D PRG:490D B5 02 cmp $0488 ; CPU:$C90F PRG:490F CD 88 04 bne NmiHandler_OnNonzero18 ; CPU:$C912 PRG:4912 D0 9B ldx $0489 ; CPU:$C914 PRG:4914 AE 89 04 bne NmiHandler_Loop69 ; CPU:$C917 PRG:4917 D0 07 inc $0489 ; CPU:$C919 PRG:4919 EE 89 04 lda #$07 ; CPU:$C91C PRG:491C A9 07 bpl NmiHandler_Loop70 ; CPU:$C91E PRG:491E 10 09 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop69 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: clears the carry flag; adds $07 to A; ; compares A with $0A; branches on carry clear to NmiHandler_Loop70; ; subtracts $0A from A. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop69: clc ; CPU:$C920 PRG:4920 18 adc #$07 ; CPU:$C921 PRG:4921 69 07 cmp #$0A ; CPU:$C923 PRG:4923 C9 0A bcc NmiHandler_Loop70 ; CPU:$C925 PRG:4925 90 02 sbc #$0A ; CPU:$C927 PRG:4927 E9 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop70 ; Global: Queues the records that draw the stage screen and the enemies' starting positions. ; Local: Executes 5 instructions: stores A to $0488; loads A with $01; stores ; A to $0581; stores A to $0582; calls Sub_CBA8. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0488, $0581 and $0582 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop70: sta $0488 ; CPU:$C929 PRG:4929 8D 88 04 lda #$01 ; CPU:$C92C PRG:492C A9 01 sta $0581 ; CPU:$C92E PRG:492E 8D 81 05 sta $0582 ; CPU:$C931 PRG:4931 8D 82 05 jmp Sub_CBA8 ; CPU:$C934 PRG:4934 4C A8 CB ; ----------------------------------------------------------------------------- ; Routine: SetupStageScreen ; Global: Queues the record that draws the stage number. ; Local: Executes 14 instructions: loads A with $E5; stores A to ; StarFieldPtrLo; loads A with $FA; stores A to StarFieldPtrHi; loads ; A with $02; stores A to StarFieldCount; and 8 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- SetupStageScreen: lda #$E5 ; CPU:$C937 PRG:4937 A9 E5 sta StarFieldPtrLo ; CPU:$C939 PRG:4939 85 00 lda #$FA ; CPU:$C93B PRG:493B A9 FA sta StarFieldPtrHi ; CPU:$C93D PRG:493D 85 01 lda #$02 ; CPU:$C93F PRG:493F A9 02 sta StarFieldCount ; CPU:$C941 PRG:4941 85 06 jsr AdvanceVramWriteQueue ; CPU:$C943 PRG:4943 20 91 C1 jsr QueueStageRecord ; CPU:$C946 PRG:4946 20 57 C9 jsr NmiHandler_Loop80 ; CPU:$C949 PRG:4949 20 1D CA jsr NmiHandler_Loop78 ; CPU:$C94C PRG:494C 20 01 CA ldx ZpDE ; CPU:$C94F PRG:494F A6 DE dex ; CPU:$C951 PRG:4951 CA beq NmiHandler_Loop75 ; CPU:$C952 PRG:4952 F0 6E jmp NmiHandler_Loop79 ; CPU:$C954 PRG:4954 4C 0F CA ; ----------------------------------------------------------------------------- ; Routine: QueueStageRecord ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A with $02; loads X from ZpDE; ; decrements X; branches on not equal to NmiHandler_Loop71; loads A ; with $01. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- QueueStageRecord: lda #$02 ; CPU:$C957 PRG:4957 A9 02 ldx ZpDE ; CPU:$C959 PRG:4959 A6 DE dex ; CPU:$C95B PRG:495B CA bne NmiHandler_Loop71 ; CPU:$C95C PRG:495C D0 02 lda #$01 ; CPU:$C95E PRG:495E A9 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop71 ; Global: The routine calls AdvanceVramWriteQueue. ; Local: Executes 6 instructions: stores A to StarFieldCount; loads A with ; $F4; stores A to StarFieldPtrLo; loads A with $FA; stores A to ; StarFieldPtrHi; calls AdvanceVramWriteQueue. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop71: sta StarFieldCount ; CPU:$C960 PRG:4960 85 06 lda #$F4 ; CPU:$C962 PRG:4962 A9 F4 sta StarFieldPtrLo ; CPU:$C964 PRG:4964 85 00 lda #$FA ; CPU:$C966 PRG:4966 A9 FA sta StarFieldPtrHi ; CPU:$C968 PRG:4968 85 01 jmp AdvanceVramWriteQueue ; CPU:$C96A PRG:496A 4C 91 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear2 ; Global: The routine calls QueueVramWritePointer and Sub_C997. ; Local: Executes 16 instructions: ANDs A with $03; branches on not equal to ; NmiHandler_Loop75; loads X from ZpDE; decrements X; branches on ; equal to NmiHandler_Loop73; decrements X; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear2: and #$03 ; CPU:$C96D PRG:496D 29 03 bne NmiHandler_Loop75 ; CPU:$C96F PRG:496F D0 51 ldx ZpDE ; CPU:$C971 PRG:4971 A6 DE dex ; CPU:$C973 PRG:4973 CA beq NmiHandler_Loop73 ; CPU:$C974 PRG:4974 F0 1D dex ; CPU:$C976 PRG:4976 CA bne NmiHandler_Loop75 ; CPU:$C977 PRG:4977 D0 49 ldx Zp61 ; CPU:$C979 PRG:4979 A6 61 dex ; CPU:$C97B PRG:497B CA beq NmiHandler_Loop72 ; CPU:$C97C PRG:497C F0 0E ldx #$F4 ; CPU:$C97E PRG:497E A2 F4 lda #$FA ; CPU:$C980 PRG:4980 A9 FA jsr QueueVramWritePointer ; CPU:$C982 PRG:4982 20 17 C1 ldx #$FA ; CPU:$C985 PRG:4985 A2 FA ldy #$FA ; CPU:$C987 PRG:4987 A0 FA jmp Sub_C997 ; CPU:$C989 PRG:4989 4C 97 C9 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop72 ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 3 instructions: loads X with $FA; loads A with $FA; calls ; QueueVramWritePointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop72: ldx #$FA ; CPU:$C98C PRG:498C A2 FA lda #$FA ; CPU:$C98E PRG:498E A9 FA jsr QueueVramWritePointer ; CPU:$C990 PRG:4990 20 17 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop73 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads X with $F4; loads Y with $FA. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop73: ldx #$F4 ; CPU:$C993 PRG:4993 A2 F4 ldy #$FA ; CPU:$C995 PRG:4995 A0 FA ; ----------------------------------------------------------------------------- ; Routine: Sub_C997 ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 5 instructions: loads A from Zp48; ANDs A with $10; branches ; on equal to NmiHandler_Loop74; copies Y into A; calls QueueVramWritePointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_C997: lda Zp48 ; CPU:$C997 PRG:4997 A5 48 and #$10 ; CPU:$C999 PRG:4999 29 10 beq NmiHandler_Loop74 ; CPU:$C99B PRG:499B F0 04 tya ; CPU:$C99D PRG:499D 98 jmp QueueVramWritePointer ; CPU:$C99E PRG:499E 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop74 ; Global: The routine calls ParseVramWriteRecord. ; Local: Executes 2 instructions: copies Y into A; calls ParseVramWriteRecord. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop74: tya ; CPU:$C9A1 PRG:49A1 98 jmp ParseVramWriteRecord ; CPU:$C9A2 PRG:49A2 4C 2D C1 ; ----------------------------------------------------------------------------- ; Routine: Sub_C9A5 ; Global: Updates the enemy formation: it moves the enemies along their flight paths and redraws them. ; Local: Executes 32 instructions: ANDs A with $03; branches on not equal to ; NmiHandler_Loop75; loads X from ZpDE; decrements X; branches on ; equal to NmiHandler_Loop73; decrements X; and 26 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_C9A5: lda Zp48 ; CPU:$C9A5 PRG:49A5 A5 48 ror a ; CPU:$C9A7 PRG:49A7 6A bcc NmiHandler_Loop80 ; CPU:$C9A8 PRG:49A8 90 73 bcs NmiHandler_Loop76 ; CPU:$C9AA PRG:49AA B0 17 ; ----------------------------------------------------------------------------- ; Routine: UpdateEnemyFormation ; Global: The routine calls QueueVramWritePointer, Sub_C997 and ParseVramWriteRecord. ; Local: Executes 40 instructions: ANDs A with $03; branches on not equal to ; NmiHandler_Loop75; loads X from ZpDE; decrements X; branches on ; equal to NmiHandler_Loop73; decrements X; and 34 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- UpdateEnemyFormation: lda Zp62 ; CPU:$C9AC PRG:49AC A5 62 beq NmiHandler_Loop75 ; CPU:$C9AE PRG:49AE F0 12 lda Zp48 ; CPU:$C9B0 PRG:49B0 A5 48 ror a ; CPU:$C9B2 PRG:49B2 6A bcc NmiHandler_Loop75 ; CPU:$C9B3 PRG:49B3 90 0D ror a ; CPU:$C9B5 PRG:49B5 6A bcc NmiHandler_OnCarryClear2 ; CPU:$C9B6 PRG:49B6 90 B5 lda Zp48 ; CPU:$C9B8 PRG:49B8 A5 48 and #$04 ; CPU:$C9BA PRG:49BA 29 04 bne NmiHandler_Loop80 ; CPU:$C9BC PRG:49BC D0 5F ldy Zp63 ; CPU:$C9BE PRG:49BE A4 63 bne NmiHandler_Loop76 ; CPU:$C9C0 PRG:49C0 D0 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop75 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop75: rts ; CPU:$C9C2 PRG:49C2 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop76 ; Global: Queues the attract screen's row of PPU writes. ; Local: Executes 7 instructions: returns with RTS; loads A with $00; stores A ; to Zp63; loads X from Zp61; decrements X; branches on equal to ; NmiHandler_Loop78; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop76: lda #$00 ; CPU:$C9C3 PRG:49C3 A9 00 sta Zp63 ; CPU:$C9C5 PRG:49C5 85 63 ldx Zp61 ; CPU:$C9C7 PRG:49C7 A6 61 dex ; CPU:$C9C9 PRG:49C9 CA beq NmiHandler_Loop78 ; CPU:$C9CA PRG:49CA F0 35 bne NmiHandler_Loop79 ; CPU:$C9CC PRG:49CC D0 41 ; ----------------------------------------------------------------------------- ; Routine: QueueAttractScreenRow ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 10 instructions: returns with RTS; loads A with $CE; stores ; A to StarFieldPtrLo; loads A with $FA; stores A to StarFieldPtrHi; ; loads Y with $03; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- QueueAttractScreenRow: lda #$CE ; CPU:$C9CE PRG:49CE A9 CE sta StarFieldPtrLo ; CPU:$C9D0 PRG:49D0 85 00 lda #$FA ; CPU:$C9D2 PRG:49D2 A9 FA sta StarFieldPtrHi ; CPU:$C9D4 PRG:49D4 85 01 ldy #$03 ; CPU:$C9D6 PRG:49D6 A0 03 ldx ZpDE ; CPU:$C9D8 PRG:49D8 A6 DE dex ; CPU:$C9DA PRG:49DA CA bne NmiHandler_Loop77 ; CPU:$C9DB PRG:49DB D0 01 dey ; CPU:$C9DD PRG:49DD 88 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop77 ; Global: The routine calls AdvanceVramWriteQueue, Sub_CA25, Sub_CA09 and Sub_CA17. ; Local: Executes 17 instructions: returns with RTS; stores Y to ; StarFieldCount; calls AdvanceVramWriteQueue; loads A with $28; stores A to ; PpuAddrHigh; loads A with $4B; and 11 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop77: sty StarFieldCount ; CPU:$C9DE PRG:49DE 84 06 jsr AdvanceVramWriteQueue ; CPU:$C9E0 PRG:49E0 20 91 C1 lda #$28 ; CPU:$C9E3 PRG:49E3 A9 28 sta PpuAddrHigh ; CPU:$C9E5 PRG:49E5 85 05 lda #$4B ; CPU:$C9E7 PRG:49E7 A9 4B sta PpuAddrLow ; CPU:$C9E9 PRG:49E9 85 04 jsr Sub_CA25 ; CPU:$C9EB PRG:49EB 20 25 CA lda #$42 ; CPU:$C9EE PRG:49EE A9 42 sta PpuAddrLow ; CPU:$C9F0 PRG:49F0 85 04 jsr Sub_CA09 ; CPU:$C9F2 PRG:49F2 20 09 CA ldx ZpDE ; CPU:$C9F5 PRG:49F5 A6 DE dex ; CPU:$C9F7 PRG:49F7 CA beq NmiHandler_Loop75 ; CPU:$C9F8 PRG:49F8 F0 C8 lda #$54 ; CPU:$C9FA PRG:49FA A9 54 sta PpuAddrLow ; CPU:$C9FC PRG:49FC 85 04 jmp Sub_CA17 ; CPU:$C9FE PRG:49FE 4C 17 CA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop78 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $18; stores A to PpuAddrLow; ; loads A with $21; stores A to PpuAddrHigh. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop78: lda #$18 ; CPU:$CA01 PRG:4A01 A9 18 sta PpuAddrLow ; CPU:$CA03 PRG:4A03 85 04 lda #$21 ; CPU:$CA05 PRG:4A05 A9 21 sta PpuAddrHigh ; CPU:$CA07 PRG:4A07 85 05 ; ----------------------------------------------------------------------------- ; Routine: Sub_CA09 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A with $E0; stores A to ; StarFieldPtrLo; branches on negative to NmiHandler_Loop81. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and Y, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- Sub_CA09: lda #$E0 ; CPU:$CA09 PRG:4A09 A9 E0 sta StarFieldPtrLo ; CPU:$CA0B PRG:4A0B 85 00 bmi NmiHandler_Loop81 ; CPU:$CA0D PRG:4A0D 30 1A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop79 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $98; stores A to PpuAddrLow; ; loads A with $21; stores A to PpuAddrHigh. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop79: lda #$98 ; CPU:$CA0F PRG:4A0F A9 98 sta PpuAddrLow ; CPU:$CA11 PRG:4A11 85 04 lda #$21 ; CPU:$CA13 PRG:4A13 A9 21 sta PpuAddrHigh ; CPU:$CA15 PRG:4A15 85 05 ; ----------------------------------------------------------------------------- ; Routine: Sub_CA17 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A with $E8; stores A to ; StarFieldPtrLo; branches on negative to NmiHandler_Loop81. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and Y, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- Sub_CA17: lda #$E8 ; CPU:$CA17 PRG:4A17 A9 E8 sta StarFieldPtrLo ; CPU:$CA19 PRG:4A19 85 00 bmi NmiHandler_Loop81 ; CPU:$CA1B PRG:4A1B 30 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop80 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $98; stores A to PpuAddrLow; ; loads A with $20; stores A to PpuAddrHigh. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop80: lda #$98 ; CPU:$CA1D PRG:4A1D A9 98 sta PpuAddrLow ; CPU:$CA1F PRG:4A1F 85 04 lda #$20 ; CPU:$CA21 PRG:4A21 A9 20 sta PpuAddrHigh ; CPU:$CA23 PRG:4A23 85 05 ; ----------------------------------------------------------------------------- ; Routine: Sub_CA25 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $F8; stores A to ; StarFieldPtrLo. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- Sub_CA25: lda #$F8 ; CPU:$CA25 PRG:4A25 A9 F8 sta StarFieldPtrLo ; CPU:$CA27 PRG:4A27 85 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop81 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A with $00; stores A to ; StarFieldPtrHi; loads A with $06; stores A to Zp02; loads Y with ; $00; loads A from ((StarFieldPtrLo),y). ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop81: lda #$00 ; CPU:$CA29 PRG:4A29 A9 00 sta StarFieldPtrHi ; CPU:$CA2B PRG:4A2B 85 01 lda #$06 ; CPU:$CA2D PRG:4A2D A9 06 sta Zp02 ; CPU:$CA2F PRG:4A2F 85 02 ldy #$00 ; CPU:$CA31 PRG:4A31 A0 00 lda (StarFieldPtrLo),y ; CPU:$CA33 PRG:4A33 B1 00 .byte $D0, $03 ; CPU:$CA35 PRG:4A35 D0 03 lda #$04 ; CPU:$CA37 PRG:4A37 A9 04 ; ----------------------------------------------------------------------------- ; Routine: SubCCA39 ; Global: The routine calls QueuePpuWriteRecordAlt2, reads $00A9. ; Local: Executes 9 instructions: tests the bits of $00A9; stores A to Zp03; ; increments StarFieldPtrLo; calls QueuePpuWriteRecordAlt2; loads Y with $00; ; decrements StarFieldPtrLo; and 3 more instructions. ; Parameters: Reads $00A9 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCCA39: bit a:$00A9 ; CPU:$CA39 PRG:4A39 2C A9 00 sta Zp03 ; CPU:$CA3C PRG:4A3C 85 03 inc StarFieldPtrLo ; CPU:$CA3E PRG:4A3E E6 00 jsr QueuePpuWriteRecordAlt2 ; CPU:$CA40 PRG:4A40 20 77 C1 ldy #$00 ; CPU:$CA43 PRG:4A43 A0 00 dec StarFieldPtrLo ; CPU:$CA45 PRG:4A45 C6 00 lda (StarFieldPtrLo),y ; CPU:$CA47 PRG:4A47 B1 00 bne NmiHandler_Loop83 ; CPU:$CA49 PRG:4A49 D0 01 rts ; CPU:$CA4B PRG:4A4B 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop83 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: pushes A; loads A with $06; stores A to ; Zp02; clears the carry flag; loads A with $20; adds PpuAddrLow to ; A; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop83: pha ; CPU:$CA4C PRG:4A4C 48 lda #$06 ; CPU:$CA4D PRG:4A4D A9 06 sta Zp02 ; CPU:$CA4F PRG:4A4F 85 02 clc ; CPU:$CA51 PRG:4A51 18 lda #$20 ; CPU:$CA52 PRG:4A52 A9 20 adc PpuAddrLow ; CPU:$CA54 PRG:4A54 65 04 sta PpuAddrLow ; CPU:$CA56 PRG:4A56 85 04 bcc NmiHandler_Loop84 ; CPU:$CA58 PRG:4A58 90 02 inc PpuAddrHigh ; CPU:$CA5A PRG:4A5A E6 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop84 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 10 instructions: loads A with $20; stores A to ; StarFieldPtrLo; loads A with $00; stores A to StarFieldPtrHi; pulls ; A; compares A with $07; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop84: lda #$20 ; CPU:$CA5C PRG:4A5C A9 20 sta StarFieldPtrLo ; CPU:$CA5E PRG:4A5E 85 00 lda #$00 ; CPU:$CA60 PRG:4A60 A9 00 sta StarFieldPtrHi ; CPU:$CA62 PRG:4A62 85 01 pla ; CPU:$CA64 PRG:4A64 68 cmp #$07 ; CPU:$CA65 PRG:4A65 C9 07 bcs NmiHandler_Loop85 ; CPU:$CA67 PRG:4A67 B0 19 sta StarFieldCount ; CPU:$CA69 PRG:4A69 85 06 ldy #$05 ; CPU:$CA6B PRG:4A6B A0 05 lda #$24 ; CPU:$CA6D PRG:4A6D A9 24 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative10 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: stores A to ((StarFieldPtrLo),y); decrements ; Y; branches on non-negative to NmiHandler_OnNonnegative10; loads Y ; with $05; loads A with $2B. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative10: sta (StarFieldPtrLo),y ; CPU:$CA6F PRG:4A6F 91 00 dey ; CPU:$CA71 PRG:4A71 88 bpl NmiHandler_OnNonnegative10 ; CPU:$CA72 PRG:4A72 10 FB ldy #$05 ; CPU:$CA74 PRG:4A74 A0 05 lda #$2B ; CPU:$CA76 PRG:4A76 A9 2B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero22 ; Global: The routine calls QueuePpuWriteRecordAlt. ; Local: Executes 5 instructions: stores A to ((StarFieldPtrLo),y); decrements ; Y; decrements StarFieldCount; branches on not equal to ; NmiHandler_OnNonzero22; calls QueuePpuWriteRecordAlt. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp4E, Zp4F, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero22: sta (StarFieldPtrLo),y ; CPU:$CA78 PRG:4A78 91 00 dey ; CPU:$CA7A PRG:4A7A 88 dec StarFieldCount ; CPU:$CA7B PRG:4A7B C6 06 bne NmiHandler_OnNonzero22 ; CPU:$CA7D PRG:4A7D D0 F9 jmp QueuePpuWriteRecordAlt ; CPU:$CA7F PRG:4A7F 4C 5F C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop85 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: stores A to SpriteY; loads X with $04. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop85: sta SpriteY ; CPU:$CA82 PRG:4A82 85 25 ldx #$04 ; CPU:$CA84 PRG:4A84 A2 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative11 ; Global: The routine calls QueuePpuWriteRecordAlt. ; Local: Executes 5 instructions: loads A from $FB00,x; stores A to Zp20,x; ; decrements X; branches on non-negative to ; NmiHandler_OnNonnegative11; calls QueuePpuWriteRecordAlt. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative11: lda $FB00,x ; CPU:$CA86 PRG:4A86 BD 00 FB sta Zp20,x ; CPU:$CA89 PRG:4A89 95 20 dex ; CPU:$CA8B PRG:4A8B CA bpl NmiHandler_OnNonnegative11 ; CPU:$CA8C PRG:4A8C 10 F8 jmp QueuePpuWriteRecordAlt ; CPU:$CA8E PRG:4A8E 4C 5F C1 ; ----------------------------------------------------------------------------- ; Routine: Sub_CA91 ; Global: Clears the flag that says the player ship is on screen. ; Local: Executes 8 instructions: loads A with $B8; stores A to PpuAddrLow; ; loads A with $22; stores A to PpuAddrHigh; loads A with $06; stores ; A to Zp02; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CA91: lda #$B8 ; CPU:$CA91 PRG:4A91 A9 B8 sta PpuAddrLow ; CPU:$CA93 PRG:4A93 85 04 lda #$22 ; CPU:$CA95 PRG:4A95 A9 22 sta PpuAddrHigh ; CPU:$CA97 PRG:4A97 85 05 lda #$06 ; CPU:$CA99 PRG:4A99 A9 06 sta Zp02 ; CPU:$CA9B PRG:4A9B 85 02 sta Zp03 ; CPU:$CA9D PRG:4A9D 85 03 jmp NmiHandler_OnNonzero7 ; CPU:$CA9F PRG:4A9F 4C 62 C2 ; ----------------------------------------------------------------------------- ; Routine: ResetPlayerShip ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $FF; stores A to Zp64. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- ResetPlayerShip: lda #$FF ; CPU:$CAA2 PRG:4AA2 A9 FF sta Zp64 ; CPU:$CAA4 PRG:4AA4 85 64 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero23 ; Global: The routine calls Sub_CABB, writes $059A. ; Local: Executes 6 instructions: calls Sub_CABB; loads A from Zp64; branches ; on not equal to NmiHandler_OnNonzero23; loads A with $00; stores A ; to $059A; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $059A changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero23: jsr Sub_CABB ; CPU:$CAA6 PRG:4AA6 20 BB CA lda Zp64 ; CPU:$CAA9 PRG:4AA9 A5 64 bne NmiHandler_OnNonzero23 ; CPU:$CAAB PRG:4AAB D0 F9 lda #$00 ; CPU:$CAAD PRG:4AAD A9 00 sta $059A ; CPU:$CAAF PRG:4AAF 8D 9A 05 rts ; CPU:$CAB2 PRG:4AB2 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_CAB3 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A from Zp48; ANDs A with $07; copies A ; into X; decrements X; branches on not equal to NmiHandler_Loop86. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CAB3: lda Zp48 ; CPU:$CAB3 PRG:4AB3 A5 48 and #$07 ; CPU:$CAB5 PRG:4AB5 29 07 tax ; CPU:$CAB7 PRG:4AB7 AA dex ; CPU:$CAB8 PRG:4AB8 CA bne NmiHandler_Loop86 ; CPU:$CAB9 PRG:4AB9 D0 04 ; ----------------------------------------------------------------------------- ; Routine: Sub_CABB ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads X from Zp64; branches on not equal to ; NmiHandler_Loop87. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CABB: ldx Zp64 ; CPU:$CABB PRG:4ABB A6 64 bne NmiHandler_Loop87 ; CPU:$CABD PRG:4ABD D0 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop86 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop86: rts ; CPU:$CABF PRG:4ABF 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop87 ; Global: The routine calls Sub_CA91, reads $0483. ; Local: Executes 9 instructions: increments X; branches on not equal to ; NmiHandler_Loop88; loads X from $0483; stores X to Zp65; loads X ; with $00; stores X to Zp66; and 3 more instructions. ; Parameters: Reads $0483 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop87: inx ; CPU:$CAC0 PRG:4AC0 E8 bne NmiHandler_Loop88 ; CPU:$CAC1 PRG:4AC1 D0 33 ldx $0483 ; CPU:$CAC3 PRG:4AC3 AE 83 04 stx Zp65 ; CPU:$CAC6 PRG:4AC6 86 65 ldx #$00 ; CPU:$CAC8 PRG:4AC8 A2 00 stx Zp66 ; CPU:$CACA PRG:4ACA 86 66 inx ; CPU:$CACC PRG:4ACC E8 stx Zp64 ; CPU:$CACD PRG:4ACD 86 64 jmp Sub_CA91 ; CPU:$CACF PRG:4ACF 4C 91 CA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarrySet ; Global: The routine calls QueueVramWritePointer, SetVramRecordFlags and NmiHandler_Loop89, writes ; $059A. ; Local: Executes 16 instructions: loads X with $1D; loads A with $FB; calls ; QueueVramWritePointer; loads A with $DB; stores A to PpuAddrLow; loads A with ; $22; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $059A changed. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarrySet: ldx #$1D ; CPU:$CAD2 PRG:4AD2 A2 1D lda #$FB ; CPU:$CAD4 PRG:4AD4 A9 FB jsr QueueVramWritePointer ; CPU:$CAD6 PRG:4AD6 20 17 C1 lda #$DB ; CPU:$CAD9 PRG:4AD9 A9 DB sta PpuAddrLow ; CPU:$CADB PRG:4ADB 85 04 lda #$22 ; CPU:$CADD PRG:4ADD A9 22 sta PpuAddrHigh ; CPU:$CADF PRG:4ADF 85 05 lda #$00 ; CPU:$CAE1 PRG:4AE1 A9 00 sta Zp03 ; CPU:$CAE3 PRG:4AE3 85 03 ldy #$03 ; CPU:$CAE5 PRG:4AE5 A0 03 ldx #$80 ; CPU:$CAE7 PRG:4AE7 A2 80 lda #$04 ; CPU:$CAE9 PRG:4AE9 A9 04 jsr SetVramRecordFlags ; CPU:$CAEB PRG:4AEB 20 74 C1 lda #$01 ; CPU:$CAEE PRG:4AEE A9 01 sta $059A ; CPU:$CAF0 PRG:4AF0 8D 9A 05 jmp NmiHandler_Loop89 ; CPU:$CAF3 PRG:4AF3 4C 0E CB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop88 ; Global: The routine calls QueueVramWritePointer, SetVramRecordFlags and NmiHandler_Loop89, writes ; $059A, reads $0483. ; Local: Executes 22 instructions: loads X with $1D; loads A with $FB; calls ; QueueVramWritePointer; loads A with $DB; stores A to PpuAddrLow; loads A with ; $22; and 16 more instructions. ; Parameters: Reads $0483 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $059A changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop88: ldx $0483 ; CPU:$CAF6 PRG:4AF6 AE 83 04 cpx #$C8 ; CPU:$CAF9 PRG:4AF9 E0 C8 bcs NmiHandler_OnCarrySet ; CPU:$CAFB PRG:4AFB B0 D5 lda Zp65 ; CPU:$CAFD PRG:4AFD A5 65 beq NmiHandler_Loop89 ; CPU:$CAFF PRG:4AFF F0 0D ldx #$00 ; CPU:$CB01 PRG:4B01 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative12 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: compares A with $FB05,x; branches on carry ; set to NmiHandler_Loop90; increments X; increments X; increments X; ; increments X; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative12: cmp $FB05,x ; CPU:$CB03 PRG:4B03 DD 05 FB bcs NmiHandler_Loop90 ; CPU:$CB06 PRG:4B06 B0 0B inx ; CPU:$CB08 PRG:4B08 E8 inx ; CPU:$CB09 PRG:4B09 E8 inx ; CPU:$CB0A PRG:4B0A E8 inx ; CPU:$CB0B PRG:4B0B E8 bpl NmiHandler_OnNonnegative12 ; CPU:$CB0C PRG:4B0C 10 F5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop89 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A with $00; stores A to Zp64; returns ; with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N and Z flags, Zp64. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop89: lda #$00 ; CPU:$CB0E PRG:4B0E A9 00 sta Zp64 ; CPU:$CB10 PRG:4B10 85 64 rts ; CPU:$CB12 PRG:4B12 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop90 ; Global: The routine calls NmiHandler_Loop89. ; Local: Executes 5 instructions: stores X to StarFieldCount; subtracts ; $FB05,x from A; stores A to Zp65; branches on not equal to ; NmiHandler_Loop91; calls NmiHandler_Loop89. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop90: stx StarFieldCount ; CPU:$CB13 PRG:4B13 86 06 sbc $FB05,x ; CPU:$CB15 PRG:4B15 FD 05 FB sta Zp65 ; CPU:$CB18 PRG:4B18 85 65 bne NmiHandler_Loop91 ; CPU:$CB1A PRG:4B1A D0 03 jsr NmiHandler_Loop89 ; CPU:$CB1C PRG:4B1C 20 0E CB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop91 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 14 instructions: loads A from $FB06,x; stores A to Zp02; ; clears the carry flag; adds Zp66 to A; pushes A; ANDs A with $1F; ; and 8 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop91: lda $FB06,x ; CPU:$CB1F PRG:4B1F BD 06 FB sta Zp02 ; CPU:$CB22 PRG:4B22 85 02 clc ; CPU:$CB24 PRG:4B24 18 adc Zp66 ; CPU:$CB25 PRG:4B25 65 66 pha ; CPU:$CB27 PRG:4B27 48 and #$1F ; CPU:$CB28 PRG:4B28 29 1F cmp #$07 ; CPU:$CB2A PRG:4B2A C9 07 pla ; CPU:$CB2C PRG:4B2C 68 bcc NmiHandler_Loop92 ; CPU:$CB2D PRG:4B2D 90 09 adc #$40 ; CPU:$CB2F PRG:4B2F 69 40 and #$E0 ; CPU:$CB31 PRG:4B31 29 E0 sta Zp66 ; CPU:$CB33 PRG:4B33 85 66 clc ; CPU:$CB35 PRG:4B35 18 adc Zp02 ; CPU:$CB36 PRG:4B36 65 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop92 ; Global: The routine calls NmiHandler_Loop93. ; Local: Executes 16 instructions: loads X from Zp66; stores A to Zp66; copies ; X into A; clears the carry flag; adds $B8 to A; stores A to ; PpuAddrLow; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop92: ldx Zp66 ; CPU:$CB38 PRG:4B38 A6 66 sta Zp66 ; CPU:$CB3A PRG:4B3A 85 66 txa ; CPU:$CB3C PRG:4B3C 8A clc ; CPU:$CB3D PRG:4B3D 18 adc #$B8 ; CPU:$CB3E PRG:4B3E 69 B8 sta PpuAddrLow ; CPU:$CB40 PRG:4B40 85 04 lda #$22 ; CPU:$CB42 PRG:4B42 A9 22 adc #$00 ; CPU:$CB44 PRG:4B44 69 00 sta PpuAddrHigh ; CPU:$CB46 PRG:4B46 85 05 jsr NmiHandler_Loop93 ; CPU:$CB48 PRG:4B48 20 56 CB clc ; CPU:$CB4B PRG:4B4B 18 lda #$20 ; CPU:$CB4C PRG:4B4C A9 20 adc PpuAddrLow ; CPU:$CB4E PRG:4B4E 65 04 sta PpuAddrLow ; CPU:$CB50 PRG:4B50 85 04 bcc NmiHandler_Loop93 ; CPU:$CB52 PRG:4B52 90 02 inc PpuAddrHigh ; CPU:$CB54 PRG:4B54 E6 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop93 ; Global: Draws the game's counter panel and the number of lives still to be shown. ; Local: Executes 10 instructions: increments StarFieldCount; loads X from ; StarFieldCount; loads Y from $FB06,x; stores Y to Zp20; increments ; Y; stores Y to Zp21; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $059A changed. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop93: inc StarFieldCount ; CPU:$CB56 PRG:4B56 E6 06 ldx StarFieldCount ; CPU:$CB58 PRG:4B58 A6 06 ldy $FB06,x ; CPU:$CB5A PRG:4B5A BC 06 FB sty Zp20 ; CPU:$CB5D PRG:4B5D 84 20 iny ; CPU:$CB5F PRG:4B5F C8 sty Zp21 ; CPU:$CB60 PRG:4B60 84 21 jsr Sub_C156 ; CPU:$CB62 PRG:4B62 20 56 C1 lda #$01 ; CPU:$CB65 PRG:4B65 A9 01 sta $059A ; CPU:$CB67 PRG:4B67 8D 9A 05 rts ; CPU:$CB6A PRG:4B6A 60 ; ----------------------------------------------------------------------------- ; Routine: SetupHudCounters ; Global: The routine calls DrawHudCounterRow, reads $0487. ; Local: Executes 6 instructions: calls DrawHudCounterRow; loads A from $0487; branches ; on equal to NmiHandler_Loop95; compares A with $05; branches on ; carry clear to NmiHandler_Loop94; loads A with $05. ; Parameters: Reads $0487 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SetupHudCounters: jsr DrawHudCounterRow ; CPU:$CB6B PRG:4B6B 20 20 CC lda $0487 ; CPU:$CB6E PRG:4B6E AD 87 04 beq NmiHandler_Loop95 ; CPU:$CB71 PRG:4B71 F0 16 cmp #$05 ; CPU:$CB73 PRG:4B73 C9 05 bcc NmiHandler_Loop94 ; CPU:$CB75 PRG:4B75 90 02 lda #$05 ; CPU:$CB77 PRG:4B77 A9 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop94 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores A to StarFieldCount. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop94: sta StarFieldCount ; CPU:$CB79 PRG:4B79 85 06 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero24 ; Global: The routine calls NmiHandler_Loop100, reads $0487. ; Local: Executes 6 instructions: calls NmiHandler_Loop100; decrements ; StarFieldCount; branches on not equal to NmiHandler_OnNonzero24; ; loads A from $0487; compares A with $06; branches on carry set to ; NmiHandler_Loop98. ; Parameters: Reads $0487 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero24: jsr NmiHandler_Loop100 ; CPU:$CB7B PRG:4B7B 20 E6 CB dec StarFieldCount ; CPU:$CB7E PRG:4B7E C6 06 bne NmiHandler_OnNonzero24 ; CPU:$CB80 PRG:4B80 D0 F9 lda $0487 ; CPU:$CB82 PRG:4B82 AD 87 04 cmp #$06 ; CPU:$CB85 PRG:4B85 C9 06 bcs NmiHandler_Loop98 ; CPU:$CB87 PRG:4B87 B0 41 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop95 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop95: rts ; CPU:$CB89 PRG:4B89 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_CB8A ; Global: The routine calls Sub_C3B8, writes $0487, reads $0487. ; Local: Executes 14 instructions: loads A with $84; stores A to ; StarFieldPtrLo; loads A with $04; stores A to StarFieldPtrHi; loads ; A with $02; stores A to Zp02; and 8 more instructions. ; Parameters: Reads $0487 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0487 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CB8A: lda #$84 ; CPU:$CB8A PRG:4B8A A9 84 sta StarFieldPtrLo ; CPU:$CB8C PRG:4B8C 85 00 lda #$04 ; CPU:$CB8E PRG:4B8E A9 04 sta StarFieldPtrHi ; CPU:$CB90 PRG:4B90 85 01 lda #$02 ; CPU:$CB92 PRG:4B92 A9 02 sta Zp02 ; CPU:$CB94 PRG:4B94 85 02 jsr Sub_C3B8 ; CPU:$CB96 PRG:4B96 20 B8 C3 ldx $0487 ; CPU:$CB99 PRG:4B99 AE 87 04 stx StarFieldCount ; CPU:$CB9C PRG:4B9C 86 06 dex ; CPU:$CB9E PRG:4B9E CA stx $0487 ; CPU:$CB9F PRG:4B9F 8E 87 04 cpx #$06 ; CPU:$CBA2 PRG:4BA2 E0 06 bcs NmiHandler_Loop98 ; CPU:$CBA4 PRG:4BA4 B0 24 bcc NmiHandler_Loop99 ; CPU:$CBA6 PRG:4BA6 90 36 ; ----------------------------------------------------------------------------- ; Routine: Sub_CBA8 ; Global: The routine reads $0487. ; Local: Executes 4 instructions: increments $0487; branches on not equal to ; NmiHandler_Loop96; decrements $0487; branches on not equal to ; NmiHandler_Loop97. ; Parameters: Reads $0487 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CBA8: inc $0487 ; CPU:$CBA8 PRG:4BA8 EE 87 04 bne NmiHandler_Loop96 ; CPU:$CBAB PRG:4BAB D0 05 dec $0487 ; CPU:$CBAD PRG:4BAD CE 87 04 bne NmiHandler_Loop97 ; CPU:$CBB0 PRG:4BB0 D0 0F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop96 ; Global: The routine calls Sub_C3A1. ; Local: Executes 7 instructions: loads A with $84; stores A to ; StarFieldPtrLo; loads A with $04; stores A to StarFieldPtrHi; loads ; A with $02; stores A to Zp02; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop96: lda #$84 ; CPU:$CBB2 PRG:4BB2 A9 84 sta StarFieldPtrLo ; CPU:$CBB4 PRG:4BB4 85 00 lda #$04 ; CPU:$CBB6 PRG:4BB6 A9 04 sta StarFieldPtrHi ; CPU:$CBB8 PRG:4BB8 85 01 lda #$02 ; CPU:$CBBA PRG:4BBA A9 02 sta Zp02 ; CPU:$CBBC PRG:4BBC 85 02 jsr Sub_C3A1 ; CPU:$CBBE PRG:4BBE 20 A1 C3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop97 ; Global: The routine reads $0487. ; Local: Executes 4 instructions: loads X from $0487; stores X to ; StarFieldCount; compares X with $06; branches on carry clear to ; NmiHandler_Loop100. ; Parameters: Reads $0487 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop97: ldx $0487 ; CPU:$CBC1 PRG:4BC1 AE 87 04 stx StarFieldCount ; CPU:$CBC4 PRG:4BC4 86 06 cpx #$06 ; CPU:$CBC6 PRG:4BC6 E0 06 bcc NmiHandler_Loop100 ; CPU:$CBC8 PRG:4BC8 90 1C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop98 ; Global: The routine calls SetVramRecordFlags. ; Local: Executes 10 instructions: loads A with $7C; stores A to PpuAddrLow; ; loads A with $22; stores A to PpuAddrHigh; loads Y with $01; stores ; Y to Zp03; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop98: lda #$7C ; CPU:$CBCA PRG:4BCA A9 7C sta PpuAddrLow ; CPU:$CBCC PRG:4BCC 85 04 lda #$22 ; CPU:$CBCE PRG:4BCE A9 22 sta PpuAddrHigh ; CPU:$CBD0 PRG:4BD0 85 05 ldy #$01 ; CPU:$CBD2 PRG:4BD2 A0 01 sty Zp03 ; CPU:$CBD4 PRG:4BD4 84 03 iny ; CPU:$CBD6 PRG:4BD6 C8 ldx #$84 ; CPU:$CBD7 PRG:4BD7 A2 84 lda #$04 ; CPU:$CBD9 PRG:4BD9 A9 04 jmp SetVramRecordFlags ; CPU:$CBDB PRG:4BDB 4C 74 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop99 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads X with $24; stores X to Zp20; stores X ; to Zp21; branches on non-negative to NmiHandler_Loop101. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop99: ldx #$24 ; CPU:$CBDE PRG:4BDE A2 24 stx Zp20 ; CPU:$CBE0 PRG:4BE0 86 20 stx Zp21 ; CPU:$CBE2 PRG:4BE2 86 21 bpl NmiHandler_Loop101 ; CPU:$CBE4 PRG:4BE4 10 07 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop100 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads X with $4A; stores X to Zp20; ; increments X; stores X to Zp21. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop100: ldx #$4A ; CPU:$CBE6 PRG:4BE6 A2 4A stx Zp20 ; CPU:$CBE8 PRG:4BE8 86 20 inx ; CPU:$CBEA PRG:4BEA E8 stx Zp21 ; CPU:$CBEB PRG:4BEB 86 21 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop101 ; Global: The routine calls Sub_C156. ; Local: Executes 18 instructions: loads A with $02; stores A to Zp02; loads X ; from StarFieldCount; decrements X; loads A from $CC32,x; clears the ; carry flag; and 12 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop101: lda #$02 ; CPU:$CBED PRG:4BED A9 02 sta Zp02 ; CPU:$CBEF PRG:4BEF 85 02 ldx StarFieldCount ; CPU:$CBF1 PRG:4BF1 A6 06 dex ; CPU:$CBF3 PRG:4BF3 CA lda $CC32,x ; CPU:$CBF4 PRG:4BF4 BD 32 CC clc ; CPU:$CBF7 PRG:4BF7 18 adc #$F8 ; CPU:$CBF8 PRG:4BF8 69 F8 sta PpuAddrLow ; CPU:$CBFA PRG:4BFA 85 04 lda #$21 ; CPU:$CBFC PRG:4BFC A9 21 adc #$00 ; CPU:$CBFE PRG:4BFE 69 00 sta PpuAddrHigh ; CPU:$CC00 PRG:4C00 85 05 jsr Sub_C156 ; CPU:$CC02 PRG:4C02 20 56 C1 lda #$20 ; CPU:$CC05 PRG:4C05 A9 20 clc ; CPU:$CC07 PRG:4C07 18 adc PpuAddrLow ; CPU:$CC08 PRG:4C08 65 04 sta PpuAddrLow ; CPU:$CC0A PRG:4C0A 85 04 bcc NmiHandler_Loop102 ; CPU:$CC0C PRG:4C0C 90 02 inc PpuAddrHigh ; CPU:$CC0E PRG:4C0E E6 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop102 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads X from Zp20; compares X with $24; ; branches on equal to NmiHandler_Loop103; loads X with $4C; stores X ; to Zp20; increments X; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop102: ldx Zp20 ; CPU:$CC10 PRG:4C10 A6 20 cpx #$24 ; CPU:$CC12 PRG:4C12 E0 24 beq NmiHandler_Loop103 ; CPU:$CC14 PRG:4C14 F0 07 ldx #$4C ; CPU:$CC16 PRG:4C16 A2 4C stx Zp20 ; CPU:$CC18 PRG:4C18 86 20 inx ; CPU:$CC1A PRG:4C1A E8 stx Zp21 ; CPU:$CC1B PRG:4C1B 86 21 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop103 ; Global: Draws one row of the two-digit counter panel. ; Local: Executes 1 instruction: calls Sub_C156. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop103: jmp Sub_C156 ; CPU:$CC1D PRG:4C1D 4C 56 C1 ; ----------------------------------------------------------------------------- ; Routine: DrawHudCounterRow ; Global: The routine calls NmiHandler_OnNonzero7. ; Local: Executes 9 instructions: loads A with $F8; stores A to PpuAddrLow; ; loads A with $21; stores A to PpuAddrHigh; loads X with $06; stores ; X to Zp02; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- DrawHudCounterRow: lda #$F8 ; CPU:$CC20 PRG:4C20 A9 F8 sta PpuAddrLow ; CPU:$CC22 PRG:4C22 85 04 lda #$21 ; CPU:$CC24 PRG:4C24 A9 21 sta PpuAddrHigh ; CPU:$CC26 PRG:4C26 85 05 ldx #$06 ; CPU:$CC28 PRG:4C28 A2 06 stx Zp02 ; CPU:$CC2A PRG:4C2A 86 02 dex ; CPU:$CC2C PRG:4C2C CA stx Zp03 ; CPU:$CC2D PRG:4C2D 86 03 jmp NmiHandler_OnNonzero7 ; CPU:$CC2F PRG:4C2F 4C 62 C2 ; ---- data $CC32-$CC37 (6 bytes) ---- ; referenced by `lda $CC32,x` at $CBF4 (operand $CC32 falls inside this region) HudCounterPositionTable: .byte $00, $02, $04, $60, $62, $64 ; CPU:$CC32 PRG:4C32 00 02 04 60 62 64 ; ----------------------------------------------------------------------------- ; Routine: Sub_CC38 ; Global: The routine calls QueueVramWritePointer, writes $0471, reads $058D and $045C. ; Local: Executes 18 instructions: loads X from Zp48; decrements X; copies X ; into A; ANDs A with $03; branches on not equal to ; NmiHandler_Loop104; loads X from Zp54; and 12 more instructions. ; Parameters: Reads $058D and $045C from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0471 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CC38: ldx Zp48 ; CPU:$CC38 PRG:4C38 A6 48 dex ; CPU:$CC3A PRG:4C3A CA txa ; CPU:$CC3B PRG:4C3B 8A and #$03 ; CPU:$CC3C PRG:4C3C 29 03 bne NmiHandler_Loop104 ; CPU:$CC3E PRG:4C3E D0 1E ldx Zp54 ; CPU:$CC40 PRG:4C40 A6 54 bne NmiHandler_Loop105 ; CPU:$CC42 PRG:4C42 D0 1B lda Zp5D ; CPU:$CC44 PRG:4C44 A5 5D beq NmiHandler_Loop104 ; CPU:$CC46 PRG:4C46 F0 16 lda $058D ; CPU:$CC48 PRG:4C48 AD 8D 05 beq NmiHandler_Loop104 ; CPU:$CC4B PRG:4C4B F0 11 lda #$00 ; CPU:$CC4D PRG:4C4D A9 00 sta Zp5D ; CPU:$CC4F PRG:4C4F 85 5D lda $045C ; CPU:$CC51 PRG:4C51 AD 5C 04 sta $0471 ; CPU:$CC54 PRG:4C54 8D 71 04 ldx #$60 ; CPU:$CC57 PRG:4C57 A2 60 lda #$F9 ; CPU:$CC59 PRG:4C59 A9 F9 jsr QueueVramWritePointer ; CPU:$CC5B PRG:4C5B 20 17 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop104 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop104: rts ; CPU:$CC5E PRG:4C5E 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop105 ; Global: The routine calls CallHandlerThroughPointer, writes $D0CC, reads $CC8D. ; Local: Executes 7 instructions: loads X from Zp54; decrements X; branches on ; negative to NmiHandler_Loop106; copies X into A; calls CallHandlerThroughPointer; ; stores A to $D0CC; and 1 more instruction. ; Parameters: Reads $CC8D from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $D0CC changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop105: ldx Zp54 ; CPU:$CC5F PRG:4C5F A6 54 dex ; CPU:$CC61 PRG:4C61 CA bmi NmiHandler_Loop106 ; CPU:$CC62 PRG:4C62 30 0C txa ; CPU:$CC64 PRG:4C64 8A jsr CallHandlerThroughPointer ; CPU:$CC65 PRG:4C65 20 01 C3 sta $D0CC ; CPU:$CC68 PRG:4C68 8D CC D0 cpy $CC8D ; CPU:$CC6B PRG:4C6B CC 8D CC .byte $B3, $CC ; CPU:$CC6E PRG:4C6E B3 CC -- lax (ZpCC),y (undocumented; ca65 cannot encode) ; CPU:$CC6E PRG:4C6E B3 CC ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop106 ; Global: The routine calls Sub_CCF0, QueuePpuWriteRecordAlt and NmiHandler_Loop109, writes ; $059B, reads $045D. ; Local: Executes 33 instructions: loads A with $00; stores A to Zp55; stores ; A to Zp56; stores A to Zp59; loads A with $03; stores A to Zp54; ; and 27 more instructions. ; Parameters: Reads $045D from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $059B changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop106: lda #$00 ; CPU:$CC70 PRG:4C70 A9 00 sta Zp55 ; CPU:$CC72 PRG:4C72 85 55 sta Zp56 ; CPU:$CC74 PRG:4C74 85 56 sta Zp59 ; CPU:$CC76 PRG:4C76 85 59 lda #$03 ; CPU:$CC78 PRG:4C78 A9 03 sta Zp54 ; CPU:$CC7A PRG:4C7A 85 54 lda Zp58 ; CPU:$CC7C PRG:4C7C A5 58 sec ; CPU:$CC7E PRG:4C7E 38 sbc #$14 ; CPU:$CC7F PRG:4C7F E9 14 lsr a ; CPU:$CC81 PRG:4C81 4A lsr a ; CPU:$CC82 PRG:4C82 4A lsr a ; CPU:$CC83 PRG:4C83 4A sta Zp57 ; CPU:$CC84 PRG:4C84 85 57 lda #$01 ; CPU:$CC86 PRG:4C86 A9 01 sta $059B ; CPU:$CC88 PRG:4C88 8D 9B 05 bne NmiHandler_Loop109 ; CPU:$CC8B PRG:4C8B D0 4D inc Zp55 ; CPU:$CC8D PRG:4C8D E6 55 lda Zp55 ; CPU:$CC8F PRG:4C8F A5 55 cmp $045D ; CPU:$CC91 PRG:4C91 CD 5D 04 bcc NmiHandler_Loop109 ; CPU:$CC94 PRG:4C94 90 44 lda #$00 ; CPU:$CC96 PRG:4C96 A9 00 sta Zp55 ; CPU:$CC98 PRG:4C98 85 55 lda Zp54 ; CPU:$CC9A PRG:4C9A A5 54 and #$02 ; CPU:$CC9C PRG:4C9C 29 02 beq NmiHandler_Loop107 ; CPU:$CC9E PRG:4C9E F0 13 jsr Sub_CCF0 ; CPU:$CCA0 PRG:4CA0 20 F0 CC jsr QueuePpuWriteRecordAlt ; CPU:$CCA3 PRG:4CA3 20 5F C1 inc Zp56 ; CPU:$CCA6 PRG:4CA6 E6 56 lda Zp56 ; CPU:$CCA8 PRG:4CA8 A5 56 cmp #$07 ; CPU:$CCAA PRG:4CAA C9 07 bcc NmiHandler_Loop109 ; CPU:$CCAC PRG:4CAC 90 2C dec Zp54 ; CPU:$CCAE PRG:4CAE C6 54 jmp NmiHandler_Loop109 ; CPU:$CCB0 PRG:4CB0 4C DA CC ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop107 ; Global: The routine calls Sub_CCF0, QueuePpuWriteRecord and NmiHandler_Loop109. ; Local: Executes 5 instructions: decrements Zp56; branches on negative to ; NmiHandler_Loop108; calls Sub_CCF0; calls QueuePpuWriteRecord; calls ; NmiHandler_Loop109. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop107: dec Zp56 ; CPU:$CCB3 PRG:4CB3 C6 56 bmi NmiHandler_Loop108 ; CPU:$CCB5 PRG:4CB5 30 09 jsr Sub_CCF0 ; CPU:$CCB7 PRG:4CB7 20 F0 CC jsr QueuePpuWriteRecord ; CPU:$CCBA PRG:4CBA 20 44 C1 jmp NmiHandler_Loop109 ; CPU:$CCBD PRG:4CBD 4C DA CC ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop108 ; Global: The routine calls Sub_ED70 and QueueVramWritePointer. ; Local: Executes 7 instructions: loads A with $00; stores A to Zp54; loads A ; with $1B; calls Sub_ED70; loads X with $25; loads A with $FB; and 1 ; more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop108: lda #$00 ; CPU:$CCC0 PRG:4CC0 A9 00 sta Zp54 ; CPU:$CCC2 PRG:4CC2 85 54 lda #$1B ; CPU:$CCC4 PRG:4CC4 A9 1B jsr Sub_ED70 ; CPU:$CCC6 PRG:4CC6 20 70 ED ldx #$25 ; CPU:$CCC9 PRG:4CC9 A2 25 lda #$FB ; CPU:$CCCB PRG:4CCB A9 FB jmp QueueVramWritePointer ; CPU:$CCCD PRG:4CCD 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: SubCCCD0 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: increments Zp55; loads A from Zp55; compares ; A with $1E; branches on carry clear to NmiHandler_Loop109; ; decrements Zp54. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCCCD0: inc Zp55 ; CPU:$CCD0 PRG:4CD0 E6 55 lda Zp55 ; CPU:$CCD2 PRG:4CD2 A5 55 cmp #$1E ; CPU:$CCD4 PRG:4CD4 C9 1E bcc NmiHandler_Loop109 ; CPU:$CCD6 PRG:4CD6 90 02 dec Zp54 ; CPU:$CCD8 PRG:4CD8 C6 54 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop109 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A from Zp59; sets the carry flag; ; subtracts $06 from A; branches on non-negative to ; NmiHandler_Loop110; loads A with $0C. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, Zp59, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop109: lda Zp59 ; CPU:$CCDA PRG:4CDA A5 59 sec ; CPU:$CCDC PRG:4CDC 38 sbc #$06 ; CPU:$CCDD PRG:4CDD E9 06 bpl NmiHandler_Loop110 ; CPU:$CCDF PRG:4CDF 10 02 lda #$0C ; CPU:$CCE1 PRG:4CE1 A9 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop110 ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 7 instructions: stores A to Zp59; clears the carry flag; ; adds $25 to A; copies A into X; loads A with $00; adds $FB to A; ; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp4E, Zp4F, Zp59, $0100, PPUADDR, ; PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop110: sta Zp59 ; CPU:$CCE3 PRG:4CE3 85 59 clc ; CPU:$CCE5 PRG:4CE5 18 adc #$25 ; CPU:$CCE6 PRG:4CE6 69 25 tax ; CPU:$CCE8 PRG:4CE8 AA lda #$00 ; CPU:$CCE9 PRG:4CE9 A9 00 adc #$FB ; CPU:$CCEB PRG:4CEB 69 FB jmp QueueVramWritePointer ; CPU:$CCED PRG:4CED 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: Sub_CCF0 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 24 instructions: loads A from Zp56; shifts a left; shifts a ; left; shifts a left; adds $37 to A; stores A to StarFieldPtrLo; and ; 18 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and Y, the N, Z, C and V flags, Zp02. ; ; ----------------------------------------------------------------------------- Sub_CCF0: lda Zp56 ; CPU:$CCF0 PRG:4CF0 A5 56 asl a ; CPU:$CCF2 PRG:4CF2 0A asl a ; CPU:$CCF3 PRG:4CF3 0A asl a ; CPU:$CCF4 PRG:4CF4 0A adc #$37 ; CPU:$CCF5 PRG:4CF5 69 37 sta StarFieldPtrLo ; CPU:$CCF7 PRG:4CF7 85 00 lda #$FB ; CPU:$CCF9 PRG:4CF9 A9 FB adc #$00 ; CPU:$CCFB PRG:4CFB 69 00 sta StarFieldPtrHi ; CPU:$CCFD PRG:4CFD 85 01 ldy #$00 ; CPU:$CCFF PRG:4CFF A0 00 lda Zp57 ; CPU:$CD01 PRG:4D01 A5 57 clc ; CPU:$CD03 PRG:4D03 18 adc (StarFieldPtrLo),y ; CPU:$CD04 PRG:4D04 71 00 sta PpuAddrLow ; CPU:$CD06 PRG:4D06 85 04 iny ; CPU:$CD08 PRG:4D08 C8 lda (StarFieldPtrLo),y ; CPU:$CD09 PRG:4D09 B1 00 adc #$00 ; CPU:$CD0B PRG:4D0B 69 00 sta PpuAddrHigh ; CPU:$CD0D PRG:4D0D 85 05 clc ; CPU:$CD0F PRG:4D0F 18 lda StarFieldPtrLo ; CPU:$CD10 PRG:4D10 A5 00 adc #$02 ; CPU:$CD12 PRG:4D12 69 02 sta StarFieldPtrLo ; CPU:$CD14 PRG:4D14 85 00 bcc NmiHandler_Loop111 ; CPU:$CD16 PRG:4D16 90 02 inc StarFieldPtrHi ; CPU:$CD18 PRG:4D18 E6 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop111 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A with $06; stores A to Zp02; returns ; with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N and Z flags, Zp02. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop111: lda #$06 ; CPU:$CD1A PRG:4D1A A9 06 sta Zp02 ; CPU:$CD1C PRG:4D1C 85 02 rts ; CPU:$CD1E PRG:4D1E 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_CD1F ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A with $E0; stores A to ; StarFieldPtrLo; loads A with $00; stores A to StarFieldPtrHi; loads ; A with $00; loads Y with $17. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N and Z flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- Sub_CD1F: lda #$E0 ; CPU:$CD1F PRG:4D1F A9 E0 sta StarFieldPtrLo ; CPU:$CD21 PRG:4D21 85 00 lda #$00 ; CPU:$CD23 PRG:4D23 A9 00 sta StarFieldPtrHi ; CPU:$CD25 PRG:4D25 85 01 lda #$00 ; CPU:$CD27 PRG:4D27 A9 00 ldy #$17 ; CPU:$CD29 PRG:4D29 A0 17 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative13 ; Global: Clears the two object buffers and the sprite counters. ; Local: Executes 3 instructions: stores A to ((StarFieldPtrLo),y); decrements ; Y; branches on non-negative to NmiHandler_OnNonnegative13. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N and Z flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative13: sta (StarFieldPtrLo),y ; CPU:$CD2B PRG:4D2B 91 00 dey ; CPU:$CD2D PRG:4D2D 88 bpl NmiHandler_OnNonnegative13 ; CPU:$CD2E PRG:4D2E 10 FB ; ----------------------------------------------------------------------------- ; Routine: ClearObjectBuffers ; Global: The routine calls Sub_CD3A and SwapObjectBuffers. ; Local: Executes 4 instructions: loads A with $00; stores A to Zp54; calls ; Sub_CD3A; calls SwapObjectBuffers. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N and Z flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- ClearObjectBuffers: lda #$00 ; CPU:$CD30 PRG:4D30 A9 00 sta Zp54 ; CPU:$CD32 PRG:4D32 85 54 jsr Sub_CD3A ; CPU:$CD34 PRG:4D34 20 3A CD jsr SwapObjectBuffers ; CPU:$CD37 PRG:4D37 20 CD C3 ; ----------------------------------------------------------------------------- ; Routine: Sub_CD3A ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads X with $C0; loads A with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- Sub_CD3A: ldx #$C0 ; CPU:$CD3A PRG:4D3A A2 C0 lda #$00 ; CPU:$CD3C PRG:4D3C A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero25 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: decrements X; stores A to $0400,x; branches ; on not equal to NmiHandler_OnNonzero25; loads X with $10. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N and Z flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero25: dex ; CPU:$CD3E PRG:4D3E CA sta $0400,x ; CPU:$CD3F PRG:4D3F 9D 00 04 bne NmiHandler_OnNonzero25 ; CPU:$CD42 PRG:4D42 D0 FA ldx #$10 ; CPU:$CD44 PRG:4D44 A2 10 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero26 ; Global: Resets the stage's counters and the number of bonus flags the stage is worth. ; Local: Executes 14 instructions: decrements X; stores A to Zp70,x; branches ; on not equal to NmiHandler_OnNonzero26; loads A with $03; stores A ; to $0488; stores A to $0487; and 8 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0488, $0487 and $0485 changed. ; Clobbers: ; A and X, the N and Z flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero26: dex ; CPU:$CD46 PRG:4D46 CA sta Zp70,x ; CPU:$CD47 PRG:4D47 95 70 bne NmiHandler_OnNonzero26 ; CPU:$CD49 PRG:4D49 D0 FB lda #$03 ; CPU:$CD4B PRG:4D4B A9 03 sta $0488 ; CPU:$CD4D PRG:4D4D 8D 88 04 sta $0487 ; CPU:$CD50 PRG:4D50 8D 87 04 sta $0485 ; CPU:$CD53 PRG:4D53 8D 85 04 lda #$FF ; CPU:$CD56 PRG:4D56 A9 FF sta $0472 ; CPU:$CD58 PRG:4D58 8D 72 04 lda #$01 ; CPU:$CD5B PRG:4D5B A9 01 sta Zp7F ; CPU:$CD5D PRG:4D5D 85 7F lda #$80 ; CPU:$CD5F PRG:4D5F A9 80 sta $0210 ; CPU:$CD61 PRG:4D61 8D 10 02 rts ; CPU:$CD64 PRG:4D64 60 ; ----------------------------------------------------------------------------- ; Routine: ResetStageState ; Global: The routine calls Sub_CD9C and AdvancePlayerSpawnCount, writes $0473, $0474, $048A, ; $048B and 1 more. ; Local: Executes 12 instructions: calls Sub_CD9C; loads A with $00; stores A ; to $0473; stores A to $0474; calls AdvancePlayerSpawnCount; loads A with $A5; and ; 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0473, $0474 and $048A changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- ResetStageState: jsr Sub_CD9C ; CPU:$CD65 PRG:4D65 20 9C CD lda #$00 ; CPU:$CD68 PRG:4D68 A9 00 sta $0473 ; CPU:$CD6A PRG:4D6A 8D 73 04 sta $0474 ; CPU:$CD6D PRG:4D6D 8D 74 04 jsr AdvancePlayerSpawnCount ; CPU:$CD70 PRG:4D70 20 D7 E8 lda #$A5 ; CPU:$CD73 PRG:4D73 A9 A5 sta $048A ; CPU:$CD75 PRG:4D75 8D 8A 04 sta $048B ; CPU:$CD78 PRG:4D78 8D 8B 04 lda #$0F ; CPU:$CD7B PRG:4D7B A9 0F sta $049F ; CPU:$CD7D PRG:4D7D 8D 9F 04 ldx #$04 ; CPU:$CD80 PRG:4D80 A2 04 lda #$00 ; CPU:$CD82 PRG:4D82 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative14 ; Global: The routine calls QueueVramWritePointer and Sub_D81A. ; Local: Executes 8 instructions: stores A to $0496,x; decrements X; branches ; on non-negative to NmiHandler_OnNonnegative14; loads X with $6F; ; loads A with $FB; calls QueueVramWritePointer; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative14: sta $0496,x ; CPU:$CD84 PRG:4D84 9D 96 04 dex ; CPU:$CD87 PRG:4D87 CA bpl NmiHandler_OnNonnegative14 ; CPU:$CD88 PRG:4D88 10 FA ldx #$6F ; CPU:$CD8A PRG:4D8A A2 6F lda #$FB ; CPU:$CD8C PRG:4D8C A9 FB jsr QueueVramWritePointer ; CPU:$CD8E PRG:4D8E 20 17 C1 jsr Sub_D81A ; CPU:$CD91 PRG:4D91 20 1A D8 rts ; CPU:$CD94 PRG:4D94 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_CD95 ; Global: The routine calls Sub_CD9C and Sub_D7C7. ; Local: Executes 3 instructions: calls Sub_CD9C; calls Sub_D7C7; returns with ; RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CD95: jsr Sub_CD9C ; CPU:$CD95 PRG:4D95 20 9C CD jsr Sub_D7C7 ; CPU:$CD98 PRG:4D98 20 C7 D7 rts ; CPU:$CD9B PRG:4D9B 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_CD9C ; Global: The routine calls Sub_C3A1, reads $0483. ; Local: Executes 11 instructions: loads A with $80; stores A to ; StarFieldPtrLo; loads A with $04; stores A to StarFieldPtrHi; loads ; A with $03; stores A to Zp02; and 5 more instructions. ; Parameters: Reads $0483 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, $0483. ; ; ----------------------------------------------------------------------------- Sub_CD9C: lda #$80 ; CPU:$CD9C PRG:4D9C A9 80 sta StarFieldPtrLo ; CPU:$CD9E PRG:4D9E 85 00 lda #$04 ; CPU:$CDA0 PRG:4DA0 A9 04 sta StarFieldPtrHi ; CPU:$CDA2 PRG:4DA2 85 01 lda #$03 ; CPU:$CDA4 PRG:4DA4 A9 03 sta Zp02 ; CPU:$CDA6 PRG:4DA6 85 02 jsr Sub_C3A1 ; CPU:$CDA8 PRG:4DA8 20 A1 C3 ldx $0483 ; CPU:$CDAB PRG:4DAB AE 83 04 inx ; CPU:$CDAE PRG:4DAE E8 bne NmiHandler_Loop112 ; CPU:$CDAF PRG:4DAF D0 02 ldx #$FC ; CPU:$CDB1 PRG:4DB1 A2 FC ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop112 ; Global: Starts the attract mode: it clears the screen and runs the attract loop. ; Local: Executes 2 instructions: stores X to $0483; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0483 changed. ; Clobbers: ; no register, $0483. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop112: stx $0483 ; CPU:$CDB3 PRG:4DB3 8E 83 04 rts ; CPU:$CDB6 PRG:4DB6 60 ; ----------------------------------------------------------------------------- ; Routine: StartAttractMode ; Global: The routine calls SetupAttractScreen and Sub_Loop. ; Local: Executes 5 instructions: loads X with $00; stores X to Zp43; stores X ; to Zp62; calls SetupAttractScreen; calls Sub_Loop. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- StartAttractMode: ldx #$00 ; CPU:$CDB7 PRG:4DB7 A2 00 stx Zp43 ; CPU:$CDB9 PRG:4DB9 86 43 stx Zp62 ; CPU:$CDBB PRG:4DBB 86 62 jsr SetupAttractScreen ; CPU:$CDBD PRG:4DBD 20 00 BE jsr Sub_Loop ; CPU:$CDC0 PRG:4DC0 20 52 BE ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear3 ; Global: The routine calls PrepareQueueStackExchange. ; Local: Executes 9 instructions: calls PrepareQueueStackExchange; loads A from Zp46; ANDs A ; with $30; branches on not equal to NmiHandler_OnNonzero27; ; increments Zp43; loads A from Zp43; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear3: jsr PrepareQueueStackExchange ; CPU:$CDC3 PRG:4DC3 20 F1 C0 lda Zp46 ; CPU:$CDC6 PRG:4DC6 A5 46 and #$30 ; CPU:$CDC8 PRG:4DC8 29 30 bne NmiHandler_OnNonzero27 ; CPU:$CDCA PRG:4DCA D0 0A inc Zp43 ; CPU:$CDCC PRG:4DCC E6 43 lda Zp43 ; CPU:$CDCE PRG:4DCE A5 43 cmp #$E0 ; CPU:$CDD0 PRG:4DD0 C9 E0 bcc NmiHandler_OnCarryClear3 ; CPU:$CDD2 PRG:4DD2 90 EF bcs NmiHandler_Loop113 ; CPU:$CDD4 PRG:4DD4 B0 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero27 ; Global: The routine calls SetupAttractScreen and Sub_Loop. ; Local: Executes 4 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero27: lda #$E0 ; CPU:$CDD6 PRG:4DD6 A9 E0 sta Zp43 ; CPU:$CDD8 PRG:4DD8 85 43 jsr SetupAttractScreen ; CPU:$CDDA PRG:4DDA 20 00 BE jsr Sub_Loop ; CPU:$CDDD PRG:4DDD 20 52 BE ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop113 ; Global: The routine calls SetupAttractScreen and Sub_Loop. ; Local: Executes 7 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop; loads A with $00; stores A to Zp48; and 1 ; more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop113: lda #$00 ; CPU:$CDE0 PRG:4DE0 A9 00 sta Zp48 ; CPU:$CDE2 PRG:4DE2 85 48 sta Zp49 ; CPU:$CDE4 PRG:4DE4 85 49 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear4 ; Global: The routine calls SetupAttractScreen, Sub_Loop, PrepareQueueStackExchange and QueueAttractScreenRecord. ; Local: Executes 19 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop; loads A with $00; stores A to Zp48; and ; 13 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear4: jsr PrepareQueueStackExchange ; CPU:$CDE6 PRG:4DE6 20 F1 C0 jsr QueueAttractScreenRecord ; CPU:$CDE9 PRG:4DE9 20 33 BE lda Zp46 ; CPU:$CDEC PRG:4DEC A5 46 and #$20 ; CPU:$CDEE PRG:4DEE 29 20 beq NmiHandler_Loop114 ; CPU:$CDF0 PRG:4DF0 F0 0E lda ZpDF ; CPU:$CDF2 PRG:4DF2 A5 DF eor #$03 ; CPU:$CDF4 PRG:4DF4 49 03 sta ZpDF ; CPU:$CDF6 PRG:4DF6 85 DF lda Zp49 ; CPU:$CDF8 PRG:4DF8 A5 49 cmp #$02 ; CPU:$CDFA PRG:4DFA C9 02 bcc NmiHandler_Loop114 ; CPU:$CDFC PRG:4DFC 90 02 dec Zp49 ; CPU:$CDFE PRG:4DFE C6 49 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop114 ; Global: The routine calls SetupAttractScreen, Sub_Loop, PrepareQueueStackExchange, QueueAttractScreenRecord and 4 more. ; Local: Executes 33 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop; loads A with $00; stores A to Zp48; and ; 27 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop114: jsr Sub_CE4F ; CPU:$CE00 PRG:4E00 20 4F CE lda Zp46 ; CPU:$CE03 PRG:4E03 A5 46 and #$10 ; CPU:$CE05 PRG:4E05 29 10 bne NmiHandler_Loop118 ; CPU:$CE07 PRG:4E07 D0 66 lda Zp49 ; CPU:$CE09 PRG:4E09 A5 49 cmp #$03 ; CPU:$CE0B PRG:4E0B C9 03 bcc NmiHandler_OnCarryClear4 ; CPU:$CE0D PRG:4E0D 90 D7 lda #$78 ; CPU:$CE0F PRG:4E0F A9 78 sta ZpC8 ; CPU:$CE11 PRG:4E11 85 C8 lda #$01 ; CPU:$CE13 PRG:4E13 A9 01 sta Zp61 ; CPU:$CE15 PRG:4E15 85 61 jsr ClearObjectBuffers ; CPU:$CE17 PRG:4E17 20 30 CD jsr ResetGameScreen ; CPU:$CE1A PRG:4E1A 20 9C D2 jsr ResetStageState ; CPU:$CE1D PRG:4E1D 20 65 CD ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative15 ; Global: The routine calls SetupAttractScreen, Sub_Loop, PrepareQueueStackExchange, QueueAttractScreenRecord and 5 more. ; Local: Executes 34 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop; loads A with $00; stores A to Zp48; and ; 28 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative15: jsr ResetPlayerShipToStart ; CPU:$CE20 PRG:4E20 20 16 D0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero28 ; Global: The routine calls SetupAttractScreen, Sub_Loop, PrepareQueueStackExchange, QueueAttractScreenRecord and 7 more, ; reads $0494. ; Local: Executes 44 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop; loads A with $00; stores A to Zp48; and ; 38 more instructions. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero28: jsr PrepareQueueStackExchange ; CPU:$CE23 PRG:4E23 20 F1 C0 lda Zp46 ; CPU:$CE26 PRG:4E26 A5 46 and #$30 ; CPU:$CE28 PRG:4E28 29 30 bne NmiHandler_OnNonzero27 ; CPU:$CE2A PRG:4E2A D0 AA jsr CallEnemyPathHandler ; CPU:$CE2C PRG:4E2C 20 74 D8 jsr UpdateAllGameObjects ; CPU:$CE2F PRG:4E2F 20 38 D2 ldx Zp7B ; CPU:$CE32 PRG:4E32 A6 7B bne NmiHandler_Loop115 ; CPU:$CE34 PRG:4E34 D0 0C lda $0494 ; CPU:$CE36 PRG:4E36 AD 94 04 bne NmiHandler_OnNonzero28 ; CPU:$CE39 PRG:4E39 D0 E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero3 ; Global: The routine calls SetupAttractScreen, Sub_Loop, PrepareQueueStackExchange, QueueAttractScreenRecord and 8 more, ; reads $0494. ; Local: Executes 47 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop; loads A with $00; stores A to Zp48; and ; 41 more instructions. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero3: dec ZpC8 ; CPU:$CE3B PRG:4E3B C6 C8 bne NmiHandler_OnNonzero28 ; CPU:$CE3D PRG:4E3D D0 E4 jmp StartAttractMode ; CPU:$CE3F PRG:4E3F 4C B7 CD ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop115 ; Global: The routine calls SetupAttractScreen, Sub_Loop, PrepareQueueStackExchange, QueueAttractScreenRecord and 8 more, ; reads $0494 and $0487. ; Local: Executes 54 instructions: loads A with $E0; stores A to Zp43; calls ; SetupAttractScreen; calls Sub_Loop; loads A with $00; stores A to Zp48; and ; 48 more instructions. ; Parameters: Reads $0494 and $0487 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop115: lda Zp79 ; CPU:$CE42 PRG:4E42 A5 79 beq NmiHandler_OnZero3 ; CPU:$CE44 PRG:4E44 F0 F5 ldx $0487 ; CPU:$CE46 PRG:4E46 AE 87 04 dex ; CPU:$CE49 PRG:4E49 CA dex ; CPU:$CE4A PRG:4E4A CA bmi NmiHandler_OnZero3 ; CPU:$CE4B PRG:4E4B 30 EE bpl NmiHandler_OnNonnegative15 ; CPU:$CE4D PRG:4E4D 10 D1 ; ----------------------------------------------------------------------------- ; Routine: Sub_CE4F ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 9 instructions: loads X from ZpDF; decrements X; branches on ; not equal to NmiHandler_Loop116; loads X with $44; loads A with ; $F8; calls QueueVramWritePointer; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CE4F: ldx ZpDF ; CPU:$CE4F PRG:4E4F A6 DF dex ; CPU:$CE51 PRG:4E51 CA bne NmiHandler_Loop116 ; CPU:$CE52 PRG:4E52 D0 0D ldx #$44 ; CPU:$CE54 PRG:4E54 A2 44 lda #$F8 ; CPU:$CE56 PRG:4E56 A9 F8 jsr QueueVramWritePointer ; CPU:$CE58 PRG:4E58 20 17 C1 ldx #$48 ; CPU:$CE5B PRG:4E5B A2 48 lda #$F8 ; CPU:$CE5D PRG:4E5D A9 F8 bne NmiHandler_Loop117 ; CPU:$CE5F PRG:4E5F D0 0B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop116 ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 5 instructions: loads X with $48; loads A with $F8; calls ; QueueVramWritePointer; loads X with $44; loads A with $F8. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop116: ldx #$48 ; CPU:$CE61 PRG:4E61 A2 48 lda #$F8 ; CPU:$CE63 PRG:4E63 A9 F8 jsr QueueVramWritePointer ; CPU:$CE65 PRG:4E65 20 17 C1 ldx #$44 ; CPU:$CE68 PRG:4E68 A2 44 lda #$F8 ; CPU:$CE6A PRG:4E6A A9 F8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop117 ; Global: The routine calls ParseVramWriteRecord. ; Local: Executes 1 instruction: calls ParseVramWriteRecord. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop117: jmp ParseVramWriteRecord ; CPU:$CE6C PRG:4E6C 4C 2D C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop118 ; Global: The routine calls ClearSoundEffectState, Sub_CD1F and Sub_CE8B. ; Local: Executes 8 instructions: loads A from ZpDF; stores A to ZpDE; loads A ; with $01; stores A to Zp61; stores A to Zp62; calls ClearSoundEffectState; and 2 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop118: lda ZpDF ; CPU:$CE6F PRG:4E6F A5 DF sta ZpDE ; CPU:$CE71 PRG:4E71 85 DE lda #$01 ; CPU:$CE73 PRG:4E73 A9 01 sta Zp61 ; CPU:$CE75 PRG:4E75 85 61 sta Zp62 ; CPU:$CE77 PRG:4E77 85 62 jsr ClearSoundEffectState ; CPU:$CE79 PRG:4E79 20 E4 EA jsr Sub_CD1F ; CPU:$CE7C PRG:4E7C 20 1F CD jmp Sub_CE8B ; CPU:$CE7F PRG:4E7F 4C 8B CE ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero29 ; Global: The routine calls PrepareQueueStackExchange, CallEnemyPathHandler and UpdateAllGameObjects. ; Local: Executes 3 instructions: calls PrepareQueueStackExchange; calls CallEnemyPathHandler; calls ; UpdateAllGameObjects. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero29: jsr PrepareQueueStackExchange ; CPU:$CE82 PRG:4E82 20 F1 C0 jsr CallEnemyPathHandler ; CPU:$CE85 PRG:4E85 20 74 D8 jsr UpdateAllGameObjects ; CPU:$CE88 PRG:4E88 20 38 D2 ; ----------------------------------------------------------------------------- ; Routine: Sub_CE8B ; Global: The routine calls PrepareQueueStackExchange, CallEnemyPathHandler, UpdateAllGameObjects and RestartStage. ; Local: Executes 6 instructions: calls PrepareQueueStackExchange; calls CallEnemyPathHandler; calls ; UpdateAllGameObjects; loads A from Zp7F; branches on equal to ; NmiHandler_Loop119; calls RestartStage. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- Sub_CE8B: lda Zp7F ; CPU:$CE8B PRG:4E8B A5 7F beq NmiHandler_Loop119 ; CPU:$CE8D PRG:4E8D F0 03 jsr RestartStage ; CPU:$CE8F PRG:4E8F 20 A1 CE ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop119 ; Global: The routine calls PrepareQueueStackExchange, CallEnemyPathHandler, UpdateAllGameObjects, RestartStage and 1 more, ; reads $0494. ; Local: Executes 11 instructions: calls PrepareQueueStackExchange; calls CallEnemyPathHandler; calls ; UpdateAllGameObjects; loads A from Zp7F; branches on equal to ; NmiHandler_Loop119; calls RestartStage; and 5 more instructions. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop119: ldx Zp7B ; CPU:$CE92 PRG:4E92 A6 7B bne NmiHandler_Loop121 ; CPU:$CE94 PRG:4E94 D0 4A lda $0494 ; CPU:$CE96 PRG:4E96 AD 94 04 bne NmiHandler_Loop120 ; CPU:$CE99 PRG:4E99 D0 03 jsr Sub_D033 ; CPU:$CE9B PRG:4E9B 20 33 D0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop120 ; Global: Starts the stage again from the beginning. ; Local: Executes 1 instruction: calls NmiHandler_OnNonzero29. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop120: jmp NmiHandler_OnNonzero29 ; CPU:$CE9E PRG:4E9E 4C 82 CE ; ----------------------------------------------------------------------------- ; Routine: RestartStage ; Global: The routine calls ResetGameScreen, QueueVramWritePointer and Sub_D274, writes $0583, ; $0584, $0585 and $0471. ; Local: Executes 13 instructions: loads A with $00; stores A to Zp7F; calls ; ResetGameScreen; loads A with $01; stores A to $0583; stores A to $0584; ; and 7 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0583, $0584 and $0585 changed. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- RestartStage: lda #$00 ; CPU:$CEA1 PRG:4EA1 A9 00 sta Zp7F ; CPU:$CEA3 PRG:4EA3 85 7F jsr ResetGameScreen ; CPU:$CEA5 PRG:4EA5 20 9C D2 lda #$01 ; CPU:$CEA8 PRG:4EA8 A9 01 sta $0583 ; CPU:$CEAA PRG:4EAA 8D 83 05 sta $0584 ; CPU:$CEAD PRG:4EAD 8D 84 05 sta $0585 ; CPU:$CEB0 PRG:4EB0 8D 85 05 lda #$00 ; CPU:$CEB3 PRG:4EB3 A9 00 sta $0471 ; CPU:$CEB5 PRG:4EB5 8D 71 04 ldx #$72 ; CPU:$CEB8 PRG:4EB8 A2 72 lda #$F8 ; CPU:$CEBA PRG:4EBA A9 F8 jsr QueueVramWritePointer ; CPU:$CEBC PRG:4EBC 20 17 C1 jsr Sub_D274 ; CPU:$CEBF PRG:4EBF 20 74 D2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero30 ; Global: The routine calls PrepareQueueStackExchange, ParseVramWriteRecord, SetHudCounterAddress, Sub_D033 and 2 more, ; reads $0583. ; Local: Executes 12 instructions: calls PrepareQueueStackExchange; loads A from $0583; ; branches on not equal to NmiHandler_OnNonzero30; loads X with $72; ; loads A with $F8; calls ParseVramWriteRecord; and 6 more instructions. ; Parameters: Reads $0583 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero30: jsr PrepareQueueStackExchange ; CPU:$CEC2 PRG:4EC2 20 F1 C0 lda $0583 ; CPU:$CEC5 PRG:4EC5 AD 83 05 bne NmiHandler_OnNonzero30 ; CPU:$CEC8 PRG:4EC8 D0 F8 ldx #$72 ; CPU:$CECA PRG:4ECA A2 72 lda #$F8 ; CPU:$CECC PRG:4ECC A9 F8 jsr ParseVramWriteRecord ; CPU:$CECE PRG:4ECE 20 2D C1 jsr SetHudCounterAddress ; CPU:$CED1 PRG:4ED1 20 93 D2 jsr Sub_D033 ; CPU:$CED4 PRG:4ED4 20 33 D0 jsr Sub_CFFD ; CPU:$CED7 PRG:4ED7 20 FD CF lda #$3C ; CPU:$CEDA PRG:4EDA A9 3C jsr NmiHandler_OnNonzero38 ; CPU:$CEDC PRG:4EDC 20 2A D2 rts ; CPU:$CEDF PRG:4EDF 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop121 ; Global: The routine calls PrepareQueueStackExchange, CallEnemyPathHandler, UpdateAllGameObjects, RestartStage and 2 more, ; reads $0494, $0477 and $0495. ; Local: Executes 25 instructions: calls PrepareQueueStackExchange; calls CallEnemyPathHandler; calls ; UpdateAllGameObjects; loads A from Zp7F; branches on equal to ; NmiHandler_Loop119; calls RestartStage; and 19 more instructions. ; Parameters: Reads $0494, $0477 and $0495 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop121: lda $0477 ; CPU:$CEE0 PRG:4EE0 AD 77 04 ora $0495 ; CPU:$CEE3 PRG:4EE3 0D 95 04 ora Zp54 ; CPU:$CEE6 PRG:4EE6 05 54 bne NmiHandler_OnNonzero29 ; CPU:$CEE8 PRG:4EE8 D0 98 lda Zp7C ; CPU:$CEEA PRG:4EEA A5 7C cmp #$02 ; CPU:$CEEC PRG:4EEC C9 02 beq NmiHandler_OnNonzero29 ; CPU:$CEEE PRG:4EEE F0 92 lda Zp79 ; CPU:$CEF0 PRG:4EF0 A5 79 beq NmiHandler_Loop122 ; CPU:$CEF2 PRG:4EF2 F0 08 cmp #$04 ; CPU:$CEF4 PRG:4EF4 C9 04 beq NmiHandler_Loop122 ; CPU:$CEF6 PRG:4EF6 F0 04 cmp #$07 ; CPU:$CEF8 PRG:4EF8 C9 07 bne NmiHandler_OnNonzero29 ; CPU:$CEFA PRG:4EFA D0 86 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop122 ; Global: The routine calls NmiHandler_OnNonzero38, reads $0487. ; Local: Executes 7 instructions: loads A with $3C; calls ; NmiHandler_OnNonzero38; loads X from ZpDE; decrements X; branches ; on not equal to NmiHandler_Loop124; loads A from $0487; and 1 more ; instruction. ; Parameters: Reads $0487 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop122: lda #$3C ; CPU:$CEFC PRG:4EFC A9 3C jsr NmiHandler_OnNonzero38 ; CPU:$CEFE PRG:4EFE 20 2A D2 ldx ZpDE ; CPU:$CF01 PRG:4F01 A6 DE dex ; CPU:$CF03 PRG:4F03 CA bne NmiHandler_Loop124 ; CPU:$CF04 PRG:4F04 D0 17 lda $0487 ; CPU:$CF06 PRG:4F06 AD 87 04 beq NmiHandler_Loop123 ; CPU:$CF09 PRG:4F09 F0 06 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero4 ; Global: The routine calls Sub_CFFD. ; Local: Executes 1 instruction: calls Sub_CFFD. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero4: jsr Sub_CFFD ; CPU:$CF0B PRG:4F0B 20 FD CF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero31 ; Global: The routine calls NmiHandler_OnNonzero29. ; Local: Executes 1 instruction: calls NmiHandler_OnNonzero29. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero31: jmp NmiHandler_OnNonzero29 ; CPU:$CF0E PRG:4F0E 4C 82 CE ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop123 ; Global: The routine calls StartStageSequence. ; Local: Executes 1 instruction: calls StartStageSequence. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop123: jsr StartStageSequence ; CPU:$CF11 PRG:4F11 20 52 CF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero5 ; Global: The routine calls TurnOffRendering, SetupOamGroupTable and DisablePpuRendering. ; Local: Executes 3 instructions: calls TurnOffRendering; calls SetupOamGroupTable; calls ; DisablePpuRendering. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero5: jsr TurnOffRendering ; CPU:$CF14 PRG:4F14 20 8A C2 jsr SetupOamGroupTable ; CPU:$CF17 PRG:4F17 20 A0 C4 jmp DisablePpuRendering ; CPU:$CF1A PRG:4F1A 4C 02 C0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop124 ; Global: The routine calls Sub_CFFD, NmiHandler_OnNonzero29, TurnOffRendering, ; SetupOamGroupTable and 2 more, reads $0487 and $0387. ; Local: Executes 10 instructions: calls Sub_CFFD; calls ; NmiHandler_OnNonzero29; calls TurnOffRendering; calls SetupOamGroupTable; calls ; DisablePpuRendering; loads A from $0487; and 4 more instructions. ; Parameters: Reads $0487 and $0387 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop124: lda $0487 ; CPU:$CF1D PRG:4F1D AD 87 04 bne NmiHandler_Loop125 ; CPU:$CF20 PRG:4F20 D0 23 jsr StartStageSequence ; CPU:$CF22 PRG:4F22 20 52 CF lda $0387 ; CPU:$CF25 PRG:4F25 AD 87 03 beq NmiHandler_OnZero5 ; CPU:$CF28 PRG:4F28 F0 EA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero32 ; Global: The routine calls NmiHandler_OnNonzero29, SwapObjectBuffers, ResetGameScreen, ; Sub_D60E and 1 more, writes $049E. ; Local: Executes 12 instructions: calls NmiHandler_OnNonzero29; calls ; SwapObjectBuffers; loads A from Zp61; EORs A with $03; stores A to Zp61; ; loads A with $FF; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $049E changed. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero32: jsr SwapObjectBuffers ; CPU:$CF2A PRG:4F2A 20 CD C3 lda Zp61 ; CPU:$CF2D PRG:4F2D A5 61 eor #$03 ; CPU:$CF2F PRG:4F2F 49 03 sta Zp61 ; CPU:$CF31 PRG:4F31 85 61 lda #$FF ; CPU:$CF33 PRG:4F33 A9 FF sta $049E ; CPU:$CF35 PRG:4F35 8D 9E 04 lda Zp7F ; CPU:$CF38 PRG:4F38 A5 7F bne NmiHandler_OnNonzero31 ; CPU:$CF3A PRG:4F3A D0 D2 jsr ResetGameScreen ; CPU:$CF3C PRG:4F3C 20 9C D2 jsr Sub_D60E ; CPU:$CF3F PRG:4F3F 20 0E D6 jmp NmiHandler_OnZero4 ; CPU:$CF42 PRG:4F42 4C 0B CF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop125 ; Global: Runs the stage-start sequence: it draws the score panel, sets up the enemies and turns rendering on. ; Local: Executes 20 instructions: calls Sub_CFFD; calls ; NmiHandler_OnNonzero29; calls SwapObjectBuffers; loads A from Zp61; EORs A ; with $03; stores A to Zp61; and 14 more instructions. ; Parameters: Reads $0387 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $049E changed. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop125: ldx Zp7B ; CPU:$CF45 PRG:4F45 A6 7B dex ; CPU:$CF47 PRG:4F47 CA dex ; CPU:$CF48 PRG:4F48 CA beq NmiHandler_OnZero4 ; CPU:$CF49 PRG:4F49 F0 C0 lda $0387 ; CPU:$CF4B PRG:4F4B AD 87 03 beq NmiHandler_OnZero4 ; CPU:$CF4E PRG:4F4E F0 BB bne NmiHandler_OnNonzero32 ; CPU:$CF50 PRG:4F50 D0 D8 ; ----------------------------------------------------------------------------- ; Routine: StartStageSequence ; Global: The routine calls PrepareQueueStackExchange, QueueVramWritePointer, Sub_D274, ; NmiHandler_OnNonzero38 and 8 more, writes $0471, $0596, $0597 and ; $0598, reads $045C. ; Local: Executes 62 instructions: calls PrepareQueueStackExchange; loads X with $56; loads A ; with $F8; calls QueueVramWritePointer; calls Sub_D274; loads A with $B4; and 56 ; more instructions. ; Parameters: Reads $045C from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0471, $0596 and $0597 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- StartStageSequence: jsr PrepareQueueStackExchange ; CPU:$CF52 PRG:4F52 20 F1 C0 ldx #$56 ; CPU:$CF55 PRG:4F55 A2 56 lda #$F8 ; CPU:$CF57 PRG:4F57 A9 F8 jsr QueueVramWritePointer ; CPU:$CF59 PRG:4F59 20 17 C1 jsr Sub_D274 ; CPU:$CF5C PRG:4F5C 20 74 D2 lda #$B4 ; CPU:$CF5F PRG:4F5F A9 B4 jsr NmiHandler_OnNonzero38 ; CPU:$CF61 PRG:4F61 20 2A D2 lda $045C ; CPU:$CF64 PRG:4F64 AD 5C 04 sta $0471 ; CPU:$CF67 PRG:4F67 8D 71 04 jsr SetupOamGroupTable ; CPU:$CF6A PRG:4F6A 20 A0 C4 jsr ResetGameScreen ; CPU:$CF6D PRG:4F6D 20 9C D2 jsr TurnOffRendering ; CPU:$CF70 PRG:4F70 20 8A C2 lda #$05 ; CPU:$CF73 PRG:4F73 A9 05 sta StarFieldCount ; CPU:$CF75 PRG:4F75 85 06 lda #$DE ; CPU:$CF77 PRG:4F77 A9 DE sta StarFieldPtrLo ; CPU:$CF79 PRG:4F79 85 00 lda #$F8 ; CPU:$CF7B PRG:4F7B A9 F8 sta StarFieldPtrHi ; CPU:$CF7D PRG:4F7D 85 01 jsr AdvanceVramWriteQueue ; CPU:$CF7F PRG:4F7F 20 91 C1 lda #$AF ; CPU:$CF82 PRG:4F82 A9 AF sta PpuAddrLow ; CPU:$CF84 PRG:4F84 85 04 lda #$21 ; CPU:$CF86 PRG:4F86 A9 21 sta PpuAddrHigh ; CPU:$CF88 PRG:4F88 85 05 ldy #$07 ; CPU:$CF8A PRG:4F8A A0 07 sty Zp03 ; CPU:$CF8C PRG:4F8C 84 03 iny ; CPU:$CF8E PRG:4F8E C8 ldx #$A0 ; CPU:$CF8F PRG:4F8F A2 A0 lda #$04 ; CPU:$CF91 PRG:4F91 A9 04 jsr SetVramRecordFlags ; CPU:$CF93 PRG:4F93 20 74 C1 lda #$0F ; CPU:$CF96 PRG:4F96 A9 0F sta PpuAddrLow ; CPU:$CF98 PRG:4F98 85 04 lda #$22 ; CPU:$CF9A PRG:4F9A A9 22 sta PpuAddrHigh ; CPU:$CF9C PRG:4F9C 85 05 ldy #$07 ; CPU:$CF9E PRG:4F9E A0 07 sty Zp03 ; CPU:$CFA0 PRG:4FA0 84 03 iny ; CPU:$CFA2 PRG:4FA2 C8 ldx #$A8 ; CPU:$CFA3 PRG:4FA3 A2 A8 lda #$04 ; CPU:$CFA5 PRG:4FA5 A9 04 jsr SetVramRecordFlags ; CPU:$CFA7 PRG:4FA7 20 74 C1 jsr Sub_C345 ; CPU:$CFAA PRG:4FAA 20 45 C3 lda Zp23 ; CPU:$CFAD PRG:4FAD A5 23 sta Zp24 ; CPU:$CFAF PRG:4FAF 85 24 lda #$28 ; CPU:$CFB1 PRG:4FB1 A9 28 sta Zp23 ; CPU:$CFB3 PRG:4FB3 85 23 lda #$25 ; CPU:$CFB5 PRG:4FB5 A9 25 sta SpriteY ; CPU:$CFB7 PRG:4FB7 85 25 lda #$72 ; CPU:$CFB9 PRG:4FB9 A9 72 sta PpuAddrLow ; CPU:$CFBB PRG:4FBB 85 04 lda #$22 ; CPU:$CFBD PRG:4FBD A9 22 sta PpuAddrHigh ; CPU:$CFBF PRG:4FBF 85 05 lda #$02 ; CPU:$CFC1 PRG:4FC1 A9 02 sta Zp03 ; CPU:$CFC3 PRG:4FC3 85 03 ldy #$06 ; CPU:$CFC5 PRG:4FC5 A0 06 ldx #$20 ; CPU:$CFC7 PRG:4FC7 A2 20 lda #$00 ; CPU:$CFC9 PRG:4FC9 A9 00 jsr SetVramRecordFlags ; CPU:$CFCB PRG:4FCB 20 74 C1 jsr QueueStageRecord ; CPU:$CFCE PRG:4FCE 20 57 C9 jsr TurnOnRendering ; CPU:$CFD1 PRG:4FD1 20 AD C2 lda #$01 ; CPU:$CFD4 PRG:4FD4 A9 01 sta $0596 ; CPU:$CFD6 PRG:4FD6 8D 96 05 sta $0597 ; CPU:$CFD9 PRG:4FD9 8D 97 05 sta $0598 ; CPU:$CFDC PRG:4FDC 8D 98 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero33 ; Global: The routine calls PrepareQueueStackExchange, reads $0596. ; Local: Executes 6 instructions: calls PrepareQueueStackExchange; loads A from Zp46; ORs A ; with Zp47; branches on not equal to NmiHandler_Loop126; loads A ; from $0596; branches on not equal to NmiHandler_OnNonzero33. ; Parameters: Reads $0596 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero33: jsr PrepareQueueStackExchange ; CPU:$CFDF PRG:4FDF 20 F1 C0 lda Zp46 ; CPU:$CFE2 PRG:4FE2 A5 46 ora Zp47 ; CPU:$CFE4 PRG:4FE4 05 47 bne NmiHandler_Loop126 ; CPU:$CFE6 PRG:4FE6 D0 05 lda $0596 ; CPU:$CFE8 PRG:4FE8 AD 96 05 bne NmiHandler_OnNonzero33 ; CPU:$CFEB PRG:4FEB D0 F2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop126 ; Global: The routine calls ClearSoundEffectState, ResetGameScreen, QueueVramWritePointer and TurnOnRendering. ; Local: Executes 6 instructions: calls ClearSoundEffectState; calls ResetGameScreen; loads X with ; $57; loads A with $F9; calls QueueVramWritePointer; calls TurnOnRendering. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop126: jsr ClearSoundEffectState ; CPU:$CFED PRG:4FED 20 E4 EA jsr ResetGameScreen ; CPU:$CFF0 PRG:4FF0 20 9C D2 ldx #$57 ; CPU:$CFF3 PRG:4FF3 A2 57 lda #$F9 ; CPU:$CFF5 PRG:4FF5 A9 F9 jsr QueueVramWritePointer ; CPU:$CFF7 PRG:4FF7 20 17 C1 jmp TurnOnRendering ; CPU:$CFFA PRG:4FFA 4C AD C2 ; ----------------------------------------------------------------------------- ; Routine: Sub_CFFD ; Global: Resets the player ship to the left of the playfield. ; Local: Executes 10 instructions: loads X with $6A; loads A with $F8; calls ; QueueVramWritePointer; calls Sub_D274; loads A with $78; calls ; NmiHandler_OnNonzero38; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_CFFD: ldx #$6A ; CPU:$CFFD PRG:4FFD A2 6A lda #$F8 ; CPU:$CFFF PRG:4FFF A9 F8 jsr QueueVramWritePointer ; CPU:$D001 PRG:5001 20 17 C1 jsr Sub_D274 ; CPU:$D004 PRG:5004 20 74 D2 lda #$78 ; CPU:$D007 PRG:5007 A9 78 jsr NmiHandler_OnNonzero38 ; CPU:$D009 PRG:5009 20 2A D2 ldx #$6A ; CPU:$D00C PRG:500C A2 6A lda #$F8 ; CPU:$D00E PRG:500E A9 F8 jsr ParseVramWriteRecord ; CPU:$D010 PRG:5010 20 2D C1 jsr SetHudCounterAddress ; CPU:$D013 PRG:5013 20 93 D2 ; ----------------------------------------------------------------------------- ; Routine: ResetPlayerShipToStart ; Global: The routine calls Sub_CB8A and Sub_E1D2, writes $0200, $0203 and ; $0471, reads $045C. ; Local: Executes 12 instructions: calls Sub_CB8A; loads A with $00; stores A ; to $0200; loads A with $60; stores A to $0203; calls Sub_E1D2; and ; 6 more instructions. ; Parameters: Reads $045C from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0200, $0203 and $0471 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- ResetPlayerShipToStart: jsr Sub_CB8A ; CPU:$D016 PRG:5016 20 8A CB lda #$00 ; CPU:$D019 PRG:5019 A9 00 sta $0200 ; CPU:$D01B PRG:501B 8D 00 02 lda #$60 ; CPU:$D01E PRG:501E A9 60 sta $0203 ; CPU:$D020 PRG:5020 8D 03 02 jsr Sub_E1D2 ; CPU:$D023 PRG:5023 20 D2 E1 lda $045C ; CPU:$D026 PRG:5026 AD 5C 04 sta $0471 ; CPU:$D029 PRG:5029 8D 71 04 lda #$00 ; CPU:$D02C PRG:502C A9 00 sta Zp7A ; CPU:$D02E PRG:502E 85 7A sta Zp7B ; CPU:$D030 PRG:5030 85 7B rts ; CPU:$D032 PRG:5032 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D033 ; Global: The routine reads $0477. ; Local: Executes 9 instructions: loads A from $0477; branches on not equal to ; NmiHandler_Loop127; loads A from Zp79; compares A with $02; ; branches on carry clear to NmiHandler_Loop128; compares A with $07; ; and 3 more instructions. ; Parameters: Reads $0477 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D033: lda $0477 ; CPU:$D033 PRG:5033 AD 77 04 bne NmiHandler_Loop127 ; CPU:$D036 PRG:5036 D0 0E lda Zp79 ; CPU:$D038 PRG:5038 A5 79 cmp #$02 ; CPU:$D03A PRG:503A C9 02 bcc NmiHandler_Loop128 ; CPU:$D03C PRG:503C 90 09 cmp #$07 ; CPU:$D03E PRG:503E C9 07 bne NmiHandler_Loop127 ; CPU:$D040 PRG:5040 D0 04 lda Zp7C ; CPU:$D042 PRG:5042 A5 7C bmi NmiHandler_Loop128 ; CPU:$D044 PRG:5044 30 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop127 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop127: rts ; CPU:$D046 PRG:5046 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop128 ; Global: The routine calls NmiHandler_OnNonzero38, PrepareQueueStackExchange, ResetStageState, ; QueueVramWritePointer and 1 more, reads $0483. ; Local: Executes 27 instructions: loads A with $3C; calls ; NmiHandler_OnNonzero38; calls PrepareQueueStackExchange; loads X from $0483; ; increments X; increments X; and 21 more instructions. ; Parameters: Reads $0483 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop128: lda #$3C ; CPU:$D047 PRG:5047 A9 3C jsr NmiHandler_OnNonzero38 ; CPU:$D049 PRG:5049 20 2A D2 jsr PrepareQueueStackExchange ; CPU:$D04C PRG:504C 20 F1 C0 ldx $0483 ; CPU:$D04F PRG:504F AE 83 04 inx ; CPU:$D052 PRG:5052 E8 inx ; CPU:$D053 PRG:5053 E8 txa ; CPU:$D054 PRG:5054 8A and #$03 ; CPU:$D055 PRG:5055 29 03 beq NmiHandler_Loop129 ; CPU:$D057 PRG:5057 F0 40 jsr ResetStageState ; CPU:$D059 PRG:5059 20 65 CD ldx #$62 ; CPU:$D05C PRG:505C A2 62 lda #$F8 ; CPU:$D05E PRG:505E A9 F8 jsr QueueVramWritePointer ; CPU:$D060 PRG:5060 20 17 C1 lda #$AD ; CPU:$D063 PRG:5063 A9 AD sta PpuAddrLow ; CPU:$D065 PRG:5065 85 04 lda #$21 ; CPU:$D067 PRG:5067 A9 21 sta PpuAddrHigh ; CPU:$D069 PRG:5069 85 05 ldy #$02 ; CPU:$D06B PRG:506B A0 02 sty Zp03 ; CPU:$D06D PRG:506D 84 03 iny ; CPU:$D06F PRG:506F C8 ldx #$80 ; CPU:$D070 PRG:5070 A2 80 lda #$04 ; CPU:$D072 PRG:5072 A9 04 jsr SetVramRecordFlags ; CPU:$D074 PRG:5074 20 74 C1 lda #$FF ; CPU:$D077 PRG:5077 A9 FF sta Zp64 ; CPU:$D079 PRG:5079 85 64 lda #$5A ; CPU:$D07B PRG:507B A9 5A jsr NmiHandler_OnNonzero38 ; CPU:$D07D PRG:507D 20 2A D2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero34 ; Global: The routine calls NmiHandler_OnNonzero38 and SetPpuWriteAddress, writes $0471, ; reads $045C. ; Local: Executes 11 instructions: loads A with $01; calls ; NmiHandler_OnNonzero38; loads A from Zp64; branches on not equal to ; NmiHandler_OnNonzero34; loads Y with $09; loads X with $A7; and 5 ; more instructions. ; Parameters: Reads $045C from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0471 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero34: lda #$01 ; CPU:$D080 PRG:5080 A9 01 jsr NmiHandler_OnNonzero38 ; CPU:$D082 PRG:5082 20 2A D2 lda Zp64 ; CPU:$D085 PRG:5085 A5 64 bne NmiHandler_OnNonzero34 ; CPU:$D087 PRG:5087 D0 F7 ldy #$09 ; CPU:$D089 PRG:5089 A0 09 ldx #$A7 ; CPU:$D08B PRG:508B A2 A7 lda #$21 ; CPU:$D08D PRG:508D A9 21 jsr SetPpuWriteAddress ; CPU:$D08F PRG:508F 20 3E C1 lda $045C ; CPU:$D092 PRG:5092 AD 5C 04 sta $0471 ; CPU:$D095 PRG:5095 8D 71 04 rts ; CPU:$D098 PRG:5098 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop129 ; Global: The routine calls Sub_CD95, QueueVramWritePointer, ClearSoundEffectState and ; NmiHandler_OnNonzero38, writes $0587, $0588 and $0589. ; Local: Executes 15 instructions: calls Sub_CD95; loads X with $7A; loads A ; with $F8; calls QueueVramWritePointer; calls ClearSoundEffectState; loads A with $01; and 9 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0587, $0588 and $0589 changed. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop129: jsr Sub_CD95 ; CPU:$D099 PRG:5099 20 95 CD ldx #$7A ; CPU:$D09C PRG:509C A2 7A lda #$F8 ; CPU:$D09E PRG:509E A9 F8 jsr QueueVramWritePointer ; CPU:$D0A0 PRG:50A0 20 17 C1 jsr ClearSoundEffectState ; CPU:$D0A3 PRG:50A3 20 E4 EA lda #$01 ; CPU:$D0A6 PRG:50A6 A9 01 sta $0587 ; CPU:$D0A8 PRG:50A8 8D 87 05 sta $0588 ; CPU:$D0AB PRG:50AB 8D 88 05 sta $0589 ; CPU:$D0AE PRG:50AE 8D 89 05 lda #$5A ; CPU:$D0B1 PRG:50B1 A9 5A jsr NmiHandler_OnNonzero38 ; CPU:$D0B3 PRG:50B3 20 2A D2 lda #$FF ; CPU:$D0B6 PRG:50B6 A9 FF sta Zp64 ; CPU:$D0B8 PRG:50B8 85 64 lda #$5A ; CPU:$D0BA PRG:50BA A9 5A jsr NmiHandler_OnNonzero38 ; CPU:$D0BC PRG:50BC 20 2A D2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero35 ; Global: The routine calls PrepareQueueStackExchange, UpdateAllGameObjects and ParseVramWriteRecord. ; Local: Executes 7 instructions: calls PrepareQueueStackExchange; calls UpdateAllGameObjects; loads A from ; Zp64; branches on not equal to NmiHandler_OnNonzero35; loads X with ; $7A; loads A with $F8; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero35: jsr PrepareQueueStackExchange ; CPU:$D0BF PRG:50BF 20 F1 C0 jsr UpdateAllGameObjects ; CPU:$D0C2 PRG:50C2 20 38 D2 lda Zp64 ; CPU:$D0C5 PRG:50C5 A5 64 bne NmiHandler_OnNonzero35 ; CPU:$D0C7 PRG:50C7 D0 F6 ldx #$7A ; CPU:$D0C9 PRG:50C9 A2 7A lda #$F8 ; CPU:$D0CB PRG:50CB A9 F8 jsr ParseVramWriteRecord ; CPU:$D0CD PRG:50CD 20 2D C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero36 ; Global: The routine calls PrepareQueueStackExchange, CallEnemyPathHandler, UpdateAllGameObjects, ; NmiHandler_OnNonzero38 and 1 more, writes $058A, $058B and $058C, ; reads $0494. ; Local: Executes 21 instructions: calls PrepareQueueStackExchange; calls CallEnemyPathHandler; calls ; UpdateAllGameObjects; loads A from $0494; branches on not equal to ; NmiHandler_OnNonzero36; loads A with $3C; and 15 more instructions. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $058A, $058B and $058C ; changed. ; Clobbers: ; A, X and Y, the N, Z, C, D and V flags, the OAM shadow and the RAM ; fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero36: jsr PrepareQueueStackExchange ; CPU:$D0D0 PRG:50D0 20 F1 C0 jsr CallEnemyPathHandler ; CPU:$D0D3 PRG:50D3 20 74 D8 jsr UpdateAllGameObjects ; CPU:$D0D6 PRG:50D6 20 38 D2 lda $0494 ; CPU:$D0D9 PRG:50D9 AD 94 04 bne NmiHandler_OnNonzero36 ; CPU:$D0DC PRG:50DC D0 F2 lda #$3C ; CPU:$D0DE PRG:50DE A9 3C jsr NmiHandler_OnNonzero38 ; CPU:$D0E0 PRG:50E0 20 2A D2 lda ZpC4 ; CPU:$D0E3 PRG:50E3 A5 C4 cmp #$28 ; CPU:$D0E5 PRG:50E5 C9 28 bne NmiHandler_Loop130 ; CPU:$D0E7 PRG:50E7 D0 1A lda #$01 ; CPU:$D0E9 PRG:50E9 A9 01 sta ZpC6 ; CPU:$D0EB PRG:50EB 85 C6 lda #$50 ; CPU:$D0ED PRG:50ED A9 50 sta ZpC7 ; CPU:$D0EF PRG:50EF 85 C7 lda #$01 ; CPU:$D0F1 PRG:50F1 A9 01 sta $058A ; CPU:$D0F3 PRG:50F3 8D 8A 05 sta $058B ; CPU:$D0F6 PRG:50F6 8D 8B 05 sta $058C ; CPU:$D0F9 PRG:50F9 8D 8C 05 ldx #$24 ; CPU:$D0FC PRG:50FC A2 24 lda #$F9 ; CPU:$D0FE PRG:50FE A9 F9 jmp Sub_D117 ; CPU:$D100 PRG:5100 4C 17 D1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop130 ; Global: The routine writes $0583 and $0586. ; Local: Executes 9 instructions: loads A with $00; stores A to ZpC6; loads A ; with $60; stores A to ZpC7; loads A with $01; stores A to $0583; ; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0583 and $0586 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop130: lda #$00 ; CPU:$D103 PRG:5103 A9 00 sta ZpC6 ; CPU:$D105 PRG:5105 85 C6 lda #$60 ; CPU:$D107 PRG:5107 A9 60 sta ZpC7 ; CPU:$D109 PRG:5109 85 C7 lda #$01 ; CPU:$D10B PRG:510B A9 01 sta $0583 ; CPU:$D10D PRG:510D 8D 83 05 sta $0586 ; CPU:$D110 PRG:5110 8D 86 05 ldx #$35 ; CPU:$D113 PRG:5113 A2 35 lda #$F9 ; CPU:$D115 PRG:5115 A9 F9 ; ----------------------------------------------------------------------------- ; Routine: Sub_D117 ; Global: The routine calls QueueVramWritePointer, NmiHandler_OnNonzero38 and SetVramRecordFlags. ; Local: Executes 19 instructions: calls QueueVramWritePointer; loads X with $9A; loads A ; with $F8; calls QueueVramWritePointer; loads A from ZpC7; calls ; NmiHandler_OnNonzero38; and 13 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_D117: jsr QueueVramWritePointer ; CPU:$D117 PRG:5117 20 17 C1 ldx #$9A ; CPU:$D11A PRG:511A A2 9A lda #$F8 ; CPU:$D11C PRG:511C A9 F8 jsr QueueVramWritePointer ; CPU:$D11E PRG:511E 20 17 C1 lda ZpC7 ; CPU:$D121 PRG:5121 A5 C7 jsr NmiHandler_OnNonzero38 ; CPU:$D123 PRG:5123 20 2A D2 lda #$72 ; CPU:$D126 PRG:5126 A9 72 sta PpuAddrLow ; CPU:$D128 PRG:5128 85 04 lda #$21 ; CPU:$D12A PRG:512A A9 21 sta PpuAddrHigh ; CPU:$D12C PRG:512C 85 05 ldy #$01 ; CPU:$D12E PRG:512E A0 01 sty Zp03 ; CPU:$D130 PRG:5130 84 03 iny ; CPU:$D132 PRG:5132 C8 ldx #$C2 ; CPU:$D133 PRG:5133 A2 C2 lda #$00 ; CPU:$D135 PRG:5135 A9 00 jsr SetVramRecordFlags ; CPU:$D137 PRG:5137 20 74 C1 lda ZpC6 ; CPU:$D13A PRG:513A A5 C6 beq NmiHandler_Loop131 ; CPU:$D13C PRG:513C F0 3D lda #$04 ; CPU:$D13E PRG:513E A9 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarrySet2 ; Global: The routine calls Sub_D163, QueueVramWritePointer and Sub_D18B. ; Local: Executes 18 instructions: pushes A; calls Sub_D163; pulls A; sets the ; carry flag; subtracts $01 from A; branches on carry set to ; NmiHandler_OnCarrySet2; and 12 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarrySet2: pha ; CPU:$D140 PRG:5140 48 jsr Sub_D163 ; CPU:$D141 PRG:5141 20 63 D1 pla ; CPU:$D144 PRG:5144 68 sec ; CPU:$D145 PRG:5145 38 sbc #$01 ; CPU:$D146 PRG:5146 E9 01 bcs NmiHandler_OnCarrySet2 ; CPU:$D148 PRG:5148 B0 F6 ldx #$B6 ; CPU:$D14A PRG:514A A2 B6 lda #$F8 ; CPU:$D14C PRG:514C A9 F8 jsr QueueVramWritePointer ; CPU:$D14E PRG:514E 20 17 C1 ldx #$01 ; CPU:$D151 PRG:5151 A2 01 stx ZpC1 ; CPU:$D153 PRG:5153 86 C1 dex ; CPU:$D155 PRG:5155 CA stx ZpC2 ; CPU:$D156 PRG:5156 86 C2 lda #$64 ; CPU:$D158 PRG:5158 A9 64 sta ZpC4 ; CPU:$D15A PRG:515A 85 C4 lda #$78 ; CPU:$D15C PRG:515C A9 78 sta ZpC7 ; CPU:$D15E PRG:515E 85 C7 jmp Sub_D18B ; CPU:$D160 PRG:5160 4C 8B D1 ; ----------------------------------------------------------------------------- ; Routine: Sub_D163 ; Global: The routine calls NmiHandler_OnNonzero38, ParseVramWriteRecord and QueueVramWritePointer. ; Local: Executes 10 instructions: loads A with $0A; calls ; NmiHandler_OnNonzero38; loads X with $8E; loads A with $F8; calls ; ParseVramWriteRecord; loads A with $0A; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_D163: lda #$0A ; CPU:$D163 PRG:5163 A9 0A jsr NmiHandler_OnNonzero38 ; CPU:$D165 PRG:5165 20 2A D2 ldx #$8E ; CPU:$D168 PRG:5168 A2 8E lda #$F8 ; CPU:$D16A PRG:516A A9 F8 jsr ParseVramWriteRecord ; CPU:$D16C PRG:516C 20 2D C1 lda #$0A ; CPU:$D16F PRG:516F A9 0A jsr NmiHandler_OnNonzero38 ; CPU:$D171 PRG:5171 20 2A D2 ldx #$8E ; CPU:$D174 PRG:5174 A2 8E lda #$F8 ; CPU:$D176 PRG:5176 A9 F8 jmp QueueVramWritePointer ; CPU:$D178 PRG:5178 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop131 ; Global: The routine calls NmiHandler_OnNonzero38 and QueueVramWritePointer. ; Local: Executes 7 instructions: loads A from ZpC7; calls ; NmiHandler_OnNonzero38; loads X with $AE; loads A with $F8; calls ; QueueVramWritePointer; loads A with $D8; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop131: lda ZpC7 ; CPU:$D17B PRG:517B A5 C7 jsr NmiHandler_OnNonzero38 ; CPU:$D17D PRG:517D 20 2A D2 ldx #$AE ; CPU:$D180 PRG:5180 A2 AE lda #$F8 ; CPU:$D182 PRG:5182 A9 F8 jsr QueueVramWritePointer ; CPU:$D184 PRG:5184 20 17 C1 lda #$D8 ; CPU:$D187 PRG:5187 A9 D8 sta ZpC7 ; CPU:$D189 PRG:5189 85 C7 ; ----------------------------------------------------------------------------- ; Routine: Sub_D18B ; Global: The routine calls Sub_D210 and NmiHandler_OnNonzero38, writes $05A6. ; Local: Executes 8 instructions: calls Sub_D210; loads A from ZpC7; calls ; NmiHandler_OnNonzero38; loads A from ZpC4; branches on equal to ; NmiHandler_Loop132; loads A from ZpC6; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $05A6 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_D18B: jsr Sub_D210 ; CPU:$D18B PRG:518B 20 10 D2 lda ZpC7 ; CPU:$D18E PRG:518E A5 C7 jsr NmiHandler_OnNonzero38 ; CPU:$D190 PRG:5190 20 2A D2 lda ZpC4 ; CPU:$D193 PRG:5193 A5 C4 beq NmiHandler_Loop132 ; CPU:$D195 PRG:5195 F0 38 lda ZpC6 ; CPU:$D197 PRG:5197 A5 C6 eor #$01 ; CPU:$D199 PRG:5199 49 01 sta $05A6 ; CPU:$D19B PRG:519B 8D A6 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero37 ; Global: The routine calls PrepareQueueStackExchange, Sub_E1D2, UpdatePlayerShot, Sub_D25C and 5 more. ; Local: Executes 20 instructions: calls PrepareQueueStackExchange; calls Sub_E1D2; calls ; UpdatePlayerShot; calls Sub_D25C; loads A with $0A; stores A to ; StarFieldPtrLo; and 14 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero37: jsr PrepareQueueStackExchange ; CPU:$D19E PRG:519E 20 F1 C0 jsr Sub_E1D2 ; CPU:$D1A1 PRG:51A1 20 D2 E1 jsr UpdatePlayerShot ; CPU:$D1A4 PRG:51A4 20 20 E0 jsr Sub_D25C ; CPU:$D1A7 PRG:51A7 20 5C D2 lda #$0A ; CPU:$D1AA PRG:51AA A9 0A sta StarFieldPtrLo ; CPU:$D1AC PRG:51AC 85 00 jsr Sub_C8AB ; CPU:$D1AE PRG:51AE 20 AB C8 jsr Sub_C9A5 ; CPU:$D1B1 PRG:51B1 20 A5 C9 lda #$C1 ; CPU:$D1B4 PRG:51B4 A9 C1 sta StarFieldPtrLo ; CPU:$D1B6 PRG:51B6 85 00 lda #$00 ; CPU:$D1B8 PRG:51B8 A9 00 sta StarFieldPtrHi ; CPU:$D1BA PRG:51BA 85 01 lda #$03 ; CPU:$D1BC PRG:51BC A9 03 sta Zp02 ; CPU:$D1BE PRG:51BE 85 02 jsr Sub_C3B8 ; CPU:$D1C0 PRG:51C0 20 B8 C3 jsr Sub_D210 ; CPU:$D1C3 PRG:51C3 20 10 D2 dec ZpC4 ; CPU:$D1C6 PRG:51C6 C6 C4 bne NmiHandler_OnNonzero37 ; CPU:$D1C8 PRG:51C8 D0 D4 lda #$26 ; CPU:$D1CA PRG:51CA A9 26 jsr Sub_ED70 ; CPU:$D1CC PRG:51CC 20 70 ED ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop132 ; Global: The routine calls SetPpuWriteAddress, NmiHandler_OnNonzero38, ParseVramWriteRecord and ; QueueVramWritePointer. ; Local: Executes 28 instructions: loads Y with $02; loads X with $EA; loads A ; with $21; calls SetPpuWriteAddress; loads A with $B4; calls ; NmiHandler_OnNonzero38; and 22 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop132: ldy #$02 ; CPU:$D1CF PRG:51CF A0 02 ldx #$EA ; CPU:$D1D1 PRG:51D1 A2 EA lda #$21 ; CPU:$D1D3 PRG:51D3 A9 21 jsr SetPpuWriteAddress ; CPU:$D1D5 PRG:51D5 20 3E C1 lda #$B4 ; CPU:$D1D8 PRG:51D8 A9 B4 jsr NmiHandler_OnNonzero38 ; CPU:$D1DA PRG:51DA 20 2A D2 ldx #$8E ; CPU:$D1DD PRG:51DD A2 8E lda #$F8 ; CPU:$D1DF PRG:51DF A9 F8 jsr ParseVramWriteRecord ; CPU:$D1E1 PRG:51E1 20 2D C1 ldx #$AB ; CPU:$D1E4 PRG:51E4 A2 AB lda #$F8 ; CPU:$D1E6 PRG:51E6 A9 F8 jsr ParseVramWriteRecord ; CPU:$D1E8 PRG:51E8 20 2D C1 lda #$01 ; CPU:$D1EB PRG:51EB A9 01 jsr NmiHandler_OnNonzero38 ; CPU:$D1ED PRG:51ED 20 2A D2 ldx #$B6 ; CPU:$D1F0 PRG:51F0 A2 B6 lda #$F8 ; CPU:$D1F2 PRG:51F2 A9 F8 jsr ParseVramWriteRecord ; CPU:$D1F4 PRG:51F4 20 2D C1 ldx #$DB ; CPU:$D1F7 PRG:51F7 A2 DB lda #$F8 ; CPU:$D1F9 PRG:51F9 A9 F8 jsr ParseVramWriteRecord ; CPU:$D1FB PRG:51FB 20 2D C1 lda #$01 ; CPU:$D1FE PRG:51FE A9 01 jsr NmiHandler_OnNonzero38 ; CPU:$D200 PRG:5200 20 2A D2 ldx #$46 ; CPU:$D203 PRG:5203 A2 46 lda #$F9 ; CPU:$D205 PRG:5205 A9 F9 jsr QueueVramWritePointer ; CPU:$D207 PRG:5207 20 17 C1 lda #$3C ; CPU:$D20A PRG:520A A9 3C jsr NmiHandler_OnNonzero38 ; CPU:$D20C PRG:520C 20 2A D2 rts ; CPU:$D20F PRG:520F 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D210 ; Global: The routine calls SetVramRecordFlags and QueueVramWritePointer. ; Local: Executes 12 instructions: loads A with $E7; stores A to PpuAddrLow; ; loads A with $21; stores A to PpuAddrHigh; loads Y with $03; stores ; Y to Zp03; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D210: lda #$E7 ; CPU:$D210 PRG:5210 A9 E7 sta PpuAddrLow ; CPU:$D212 PRG:5212 85 04 lda #$21 ; CPU:$D214 PRG:5214 A9 21 sta PpuAddrHigh ; CPU:$D216 PRG:5216 85 05 ldy #$03 ; CPU:$D218 PRG:5218 A0 03 sty Zp03 ; CPU:$D21A PRG:521A 84 03 ldx #$C1 ; CPU:$D21C PRG:521C A2 C1 lda #$00 ; CPU:$D21E PRG:521E A9 00 jsr SetVramRecordFlags ; CPU:$D220 PRG:5220 20 74 C1 ldx #$D2 ; CPU:$D223 PRG:5223 A2 D2 lda #$F8 ; CPU:$D225 PRG:5225 A9 F8 jmp QueueVramWritePointer ; CPU:$D227 PRG:5227 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero38 ; Global: The routine calls PrepareQueueStackExchange and UpdateAllGameObjects. ; Local: Executes 7 instructions: pushes A; calls PrepareQueueStackExchange; calls UpdateAllGameObjects; ; pulls A; sets the carry flag; subtracts $01 from A; and 1 more ; instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero38: pha ; CPU:$D22A PRG:522A 48 jsr PrepareQueueStackExchange ; CPU:$D22B PRG:522B 20 F1 C0 jsr UpdateAllGameObjects ; CPU:$D22E PRG:522E 20 38 D2 pla ; CPU:$D231 PRG:5231 68 sec ; CPU:$D232 PRG:5232 38 sbc #$01 ; CPU:$D233 PRG:5233 E9 01 bne NmiHandler_OnNonzero38 ; CPU:$D235 PRG:5235 D0 F3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero6 ; Global: Updates everything that moves: the player ship, the enemies, the shots and the explosions. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero6: rts ; CPU:$D237 PRG:5237 60 ; ----------------------------------------------------------------------------- ; Routine: UpdateAllGameObjects ; Global: The routine calls Sub_CAB3, Sub_DB35, Sub_E113, Sub_E1D2 and 8 more. ; Local: Executes 12 instructions: calls Sub_CAB3; calls Sub_DB35; calls ; Sub_E113; calls Sub_E1D2; calls UpdatePlayerShot; calls Sub_D2C9; and 6 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- UpdateAllGameObjects: jsr Sub_CAB3 ; CPU:$D238 PRG:5238 20 B3 CA jsr Sub_DB35 ; CPU:$D23B PRG:523B 20 35 DB jsr Sub_E113 ; CPU:$D23E PRG:523E 20 13 E1 jsr Sub_E1D2 ; CPU:$D241 PRG:5241 20 D2 E1 jsr UpdatePlayerShot ; CPU:$D244 PRG:5244 20 20 E0 jsr Sub_D2C9 ; CPU:$D247 PRG:5247 20 C9 D2 jsr ResetPlayerSpriteBuffer ; CPU:$D24A PRG:524A 20 F5 E4 jsr Sub_E7B6 ; CPU:$D24D PRG:524D 20 B6 E7 jsr Sub_D56F ; CPU:$D250 PRG:5250 20 6F D5 jsr AdvancePlayerFrameCounter ; CPU:$D253 PRG:5253 20 39 E9 jsr UpdateEnemyFormation ; CPU:$D256 PRG:5256 20 AC C9 jsr Sub_CC38 ; CPU:$D259 PRG:5259 20 38 CC ; ----------------------------------------------------------------------------- ; Routine: Sub_D25C ; Global: The routine writes $0580, reads $0200. ; Local: Executes 10 instructions: loads A from Zp62; branches on equal to ; NmiHandler_Loop133; loads A from $0200; branches on negative to ; NmiHandler_Loop133; loads A from Zp46; ANDs A with $10; and 4 more ; instructions. ; Parameters: Reads $0200 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0580 changed. ; Clobbers: ; A, the N and Z flags, Zp5B, $0580. ; ; ----------------------------------------------------------------------------- Sub_D25C: lda a:Zp62 ; CPU:$D25C PRG:525C AD 62 00 beq NmiHandler_Loop133 ; CPU:$D25F PRG:525F F0 12 lda $0200 ; CPU:$D261 PRG:5261 AD 00 02 bmi NmiHandler_Loop133 ; CPU:$D264 PRG:5264 30 0D lda Zp46 ; CPU:$D266 PRG:5266 A5 46 and #$10 ; CPU:$D268 PRG:5268 29 10 beq NmiHandler_Loop133 ; CPU:$D26A PRG:526A F0 07 lda #$01 ; CPU:$D26C PRG:526C A9 01 sta Zp5B ; CPU:$D26E PRG:526E 85 5B sta $0580 ; CPU:$D270 PRG:5270 8D 80 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop133 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop133: rts ; CPU:$D273 PRG:5273 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D274 ; Global: Sets the PPU address the counter panel is drawn at. ; Local: Executes 16 instructions: returns with RTS; loads X from ZpDE; ; decrements X; branches on equal to NmiHandler_OnZero6; loads X with ; $4C; loads A with $F8; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D274: ldx ZpDE ; CPU:$D274 PRG:5274 A6 DE dex ; CPU:$D276 PRG:5276 CA beq NmiHandler_OnZero6 ; CPU:$D277 PRG:5277 F0 BE ldx #$4C ; CPU:$D279 PRG:5279 A2 4C lda #$F8 ; CPU:$D27B PRG:527B A9 F8 jsr QueueVramWritePointer ; CPU:$D27D PRG:527D 20 17 C1 lda #$AF ; CPU:$D280 PRG:5280 A9 AF sta PpuAddrLow ; CPU:$D282 PRG:5282 85 04 lda #$21 ; CPU:$D284 PRG:5284 A9 21 sta PpuAddrHigh ; CPU:$D286 PRG:5286 85 05 ldy #$01 ; CPU:$D288 PRG:5288 A0 01 sty Zp03 ; CPU:$D28A PRG:528A 84 03 ldx #$61 ; CPU:$D28C PRG:528C A2 61 lda #$00 ; CPU:$D28E PRG:528E A9 00 jmp SetVramRecordFlags ; CPU:$D290 PRG:5290 4C 74 C1 ; ----------------------------------------------------------------------------- ; Routine: SetHudCounterAddress ; Global: Clears both nametables, sets up the formation and turns rendering on. ; Local: Executes 4 instructions: loads X with $A8; loads A with $21; loads Y ; with $08; calls SetPpuWriteAddress. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SetHudCounterAddress: ldx #$A8 ; CPU:$D293 PRG:5293 A2 A8 lda #$21 ; CPU:$D295 PRG:5295 A9 21 ldy #$08 ; CPU:$D297 PRG:5297 A0 08 jmp SetPpuWriteAddress ; CPU:$D299 PRG:5299 4C 3E C1 ; ----------------------------------------------------------------------------- ; Routine: ResetGameScreen ; Global: The routine calls TurnOffRendering, FillNametableWithTile24, QueueScreenUpdateRecord, SetupStageScreen and 3 more, ; writes the PPUCTRL register. ; Local: Executes 19 instructions: calls TurnOffRendering; loads A with $C0; stores A ; to Zp50; loads X with $20; calls FillNametableWithTile24; calls QueueScreenUpdateRecord; and 13 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves the PPUCTRL register set. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- ResetGameScreen: jsr TurnOffRendering ; CPU:$D29C PRG:529C 20 8A C2 lda #$C0 ; CPU:$D29F PRG:529F A9 C0 sta Zp50 ; CPU:$D2A1 PRG:52A1 85 50 ldx #$20 ; CPU:$D2A3 PRG:52A3 A2 20 jsr FillNametableWithTile24 ; CPU:$D2A5 PRG:52A5 20 42 C2 jsr QueueScreenUpdateRecord ; CPU:$D2A8 PRG:52A8 20 BC C2 jsr SetupStageScreen ; CPU:$D2AB PRG:52AB 20 37 C9 jsr SetupHudCounters ; CPU:$D2AE PRG:52AE 20 6B CB jsr ResetPlayerShip ; CPU:$D2B1 PRG:52B1 20 A2 CA lda #$F8 ; CPU:$D2B4 PRG:52B4 A9 F8 sta Zp42 ; CPU:$D2B6 PRG:52B6 85 42 lda #$E8 ; CPU:$D2B8 PRG:52B8 A9 E8 sta Zp43 ; CPU:$D2BA PRG:52BA 85 43 lda PpuCtrlShadow ; CPU:$D2BC PRG:52BC A5 40 ora #$02 ; CPU:$D2BE PRG:52BE 09 02 sta PpuCtrlShadow ; CPU:$D2C0 PRG:52C0 85 40 sta PPUCTRL ; CPU:$D2C2 PRG:52C2 8D 00 20 jsr TurnOnRendering ; CPU:$D2C5 PRG:52C5 20 AD C2 rts ; CPU:$D2C8 PRG:52C8 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D2C9 ; Global: The routine reads $0494. ; Local: Executes 5 instructions: loads A from $0494; branches on equal to ; NmiHandler_Loop134; loads A from Zp48; rotates a right; branches on ; carry clear to NmiHandler_Loop135. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D2C9: lda $0494 ; CPU:$D2C9 PRG:52C9 AD 94 04 beq NmiHandler_Loop134 ; CPU:$D2CC PRG:52CC F0 05 lda Zp48 ; CPU:$D2CE PRG:52CE A5 48 ror a ; CPU:$D2D0 PRG:52D0 6A bcc NmiHandler_Loop135 ; CPU:$D2D1 PRG:52D1 90 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop134 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop134: rts ; CPU:$D2D3 PRG:52D3 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop135 ; Global: The routine writes $049E, reads $049F and $049E. ; Local: Executes 13 instructions: loads A from $049F; compares A with $0C; ; branches on carry set to NmiHandler_Loop140; increments $049E; ; loads A from $049E; ANDs A with $0F; and 7 more instructions. ; Parameters: Reads $049F and $049E from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $049E changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop135: lda $049F ; CPU:$D2D4 PRG:52D4 AD 9F 04 cmp #$0C ; CPU:$D2D7 PRG:52D7 C9 0C bcs NmiHandler_Loop140 ; CPU:$D2D9 PRG:52D9 B0 42 inc $049E ; CPU:$D2DB PRG:52DB EE 9E 04 lda $049E ; CPU:$D2DE PRG:52DE AD 9E 04 and #$0F ; CPU:$D2E1 PRG:52E1 29 0F sta $049E ; CPU:$D2E3 PRG:52E3 8D 9E 04 bne NmiHandler_Loop142 ; CPU:$D2E6 PRG:52E6 D0 6E inc $049F ; CPU:$D2E8 PRG:52E8 EE 9F 04 lda $049F ; CPU:$D2EB PRG:52EB AD 9F 04 cmp #$0C ; CPU:$D2EE PRG:52EE C9 0C bcc NmiHandler_Loop136 ; CPU:$D2F0 PRG:52F0 90 02 lda #$00 ; CPU:$D2F2 PRG:52F2 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop136 ; Global: The routine calls NmiHandler_Loop142, writes $049F, $05A4 and $05A5, ; reads $0490. ; Local: Executes 6 instructions: stores A to $049F; loads A from $0490; ; branches on not equal to NmiHandler_Loop137; stores A to $05A4; ; stores A to $05A5; calls NmiHandler_Loop142. ; Parameters: Reads $0490 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $049F, $05A4 and $05A5 ; changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop136: sta $049F ; CPU:$D2F4 PRG:52F4 8D 9F 04 lda $0490 ; CPU:$D2F7 PRG:52F7 AD 90 04 bne NmiHandler_Loop137 ; CPU:$D2FA PRG:52FA D0 09 sta $05A4 ; CPU:$D2FC PRG:52FC 8D A4 05 sta $05A5 ; CPU:$D2FF PRG:52FF 8D A5 05 jmp NmiHandler_Loop142 ; CPU:$D302 PRG:5302 4C 56 D3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop137 ; Global: The routine writes $05A4, reads $049F. ; Local: Executes 8 instructions: loads A with $01; loads X from $049F; ; compares X with $07; branches on equal to NmiHandler_Loop138; ; compares X with $01; branches on not equal to NmiHandler_Loop139; ; and 2 more instructions. ; Parameters: Reads $049F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $05A4 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop137: lda #$01 ; CPU:$D305 PRG:5305 A9 01 ldx $049F ; CPU:$D307 PRG:5307 AE 9F 04 cpx #$07 ; CPU:$D30A PRG:530A E0 07 beq NmiHandler_Loop138 ; CPU:$D30C PRG:530C F0 09 cpx #$01 ; CPU:$D30E PRG:530E E0 01 bne NmiHandler_Loop139 ; CPU:$D310 PRG:5310 D0 08 sta $05A4 ; CPU:$D312 PRG:5312 8D A4 05 beq NmiHandler_Loop139 ; CPU:$D315 PRG:5315 F0 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop138 ; Global: The routine writes $05A5. ; Local: Executes 1 instruction: stores A to $05A5. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $05A5 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop138: sta $05A5 ; CPU:$D317 PRG:5317 8D A5 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop139 ; Global: The routine calls NmiHandler_Loop142. ; Local: Executes 1 instruction: calls NmiHandler_Loop142. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop139: jmp NmiHandler_Loop142 ; CPU:$D31A PRG:531A 4C 56 D3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop140 ; Global: The routine writes $049E, reads $049E and $049F. ; Local: Executes 11 instructions: increments $049E; loads A from $049E; ; compares A with $0C; branches on carry clear to NmiHandler_Loop142; ; loads A with $00; stores A to $049E; and 5 more instructions. ; Parameters: Reads $049E and $049F from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $049E changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop140: inc $049E ; CPU:$D31D PRG:531D EE 9E 04 lda $049E ; CPU:$D320 PRG:5320 AD 9E 04 cmp #$0C ; CPU:$D323 PRG:5323 C9 0C bcc NmiHandler_Loop142 ; CPU:$D325 PRG:5325 90 2F lda #$00 ; CPU:$D327 PRG:5327 A9 00 sta $049E ; CPU:$D329 PRG:5329 8D 9E 04 inc $049F ; CPU:$D32C PRG:532C EE 9F 04 lda $049F ; CPU:$D32F PRG:532F AD 9F 04 cmp #$1C ; CPU:$D332 PRG:5332 C9 1C bcc NmiHandler_Loop141 ; CPU:$D334 PRG:5334 90 02 lda #$0C ; CPU:$D336 PRG:5336 A9 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop141 ; Global: The routine calls NmiHandler_Loop184, writes $049F and $0496, reads ; $0464. ; Local: Executes 13 instructions: stores A to $049F; sets the carry flag; ; subtracts $01 from A; ANDs A with $07; branches on not equal to ; NmiHandler_Loop142; loads A from $0464; and 7 more instructions. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $049F and $0496 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop141: sta $049F ; CPU:$D338 PRG:5338 8D 9F 04 sec ; CPU:$D33B PRG:533B 38 sbc #$01 ; CPU:$D33C PRG:533C E9 01 and #$07 ; CPU:$D33E PRG:533E 29 07 bne NmiHandler_Loop142 ; CPU:$D340 PRG:5340 D0 14 lda $0464 ; CPU:$D342 PRG:5342 AD 64 04 cmp #$02 ; CPU:$D345 PRG:5345 C9 02 beq NmiHandler_Loop142 ; CPU:$D347 PRG:5347 F0 0D lda #$02 ; CPU:$D349 PRG:5349 A9 02 sta $0496 ; CPU:$D34B PRG:534B 8D 96 04 jsr NmiHandler_Loop184 ; CPU:$D34E PRG:534E 20 6F D7 lda #$01 ; CPU:$D351 PRG:5351 A9 01 sta $049F ; CPU:$D353 PRG:5353 8D 9F 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop142 ; Global: The routine reads $049E. ; Local: Executes 4 instructions: loads A from $049E; compares A with $05; ; branches on carry clear to NmiHandler_Loop143; returns with RTS. ; Parameters: Reads $049E from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop142: lda $049E ; CPU:$D356 PRG:5356 AD 9E 04 cmp #$05 ; CPU:$D359 PRG:5359 C9 05 bcc NmiHandler_Loop143 ; CPU:$D35B PRG:535B 90 01 rts ; CPU:$D35D PRG:535D 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop143 ; Global: The routine reads $049F. ; Local: Executes 19 instructions: shifts a left; shifts a left; shifts a ; left; shifts a left; stores A to StarFieldCount; adds $10 to A; and ; 13 more instructions. ; Parameters: Reads $049F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop143: asl a ; CPU:$D35E PRG:535E 0A asl a ; CPU:$D35F PRG:535F 0A asl a ; CPU:$D360 PRG:5360 0A asl a ; CPU:$D361 PRG:5361 0A sta StarFieldCount ; CPU:$D362 PRG:5362 85 06 adc #$10 ; CPU:$D364 PRG:5364 69 10 asl a ; CPU:$D366 PRG:5366 0A asl a ; CPU:$D367 PRG:5367 0A sta PpuAddrLow ; CPU:$D368 PRG:5368 85 04 lda #$20 ; CPU:$D36A PRG:536A A9 20 adc #$00 ; CPU:$D36C PRG:536C 69 00 sta PpuAddrHigh ; CPU:$D36E PRG:536E 85 05 lda #$04 ; CPU:$D370 PRG:5370 A9 04 sta Zp07 ; CPU:$D372 PRG:5372 85 07 ldy #$0F ; CPU:$D374 PRG:5374 A0 0F lda $049F ; CPU:$D376 PRG:5376 AD 9F 04 sta (StarFieldCount),y ; CPU:$D379 PRG:5379 91 06 ldx #$17 ; CPU:$D37B PRG:537B A2 17 lda #$24 ; CPU:$D37D PRG:537D A9 24 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative16 ; Global: The routine calls Sub_D4AF, reads $049E. ; Local: Executes 6 instructions: stores A to Zp20,x; decrements X; branches ; on non-negative to NmiHandler_OnNonnegative16; loads A from $049E; ; branches on equal to NmiHandler_Loop144; calls Sub_D4AF. ; Parameters: Reads $049E from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative16: sta Zp20,x ; CPU:$D37F PRG:537F 95 20 dex ; CPU:$D381 PRG:5381 CA bpl NmiHandler_OnNonnegative16 ; CPU:$D382 PRG:5382 10 FB lda $049E ; CPU:$D384 PRG:5384 AD 9E 04 beq NmiHandler_Loop144 ; CPU:$D387 PRG:5387 F0 03 jmp Sub_D4AF ; CPU:$D389 PRG:5389 4C AF D4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop144 ; Global: The routine reads $049F. ; Local: Executes 12 instructions: loads X from $049F; compares X with $0C; ; branches on carry set to NmiHandler_Loop147; loads A with $48; ; stores A to PpuAddrLow; loads A with $08; and 6 more instructions. ; Parameters: Reads $049F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop144: ldx $049F ; CPU:$D38C PRG:538C AE 9F 04 cpx #$0C ; CPU:$D38F PRG:538F E0 0C bcs NmiHandler_Loop147 ; CPU:$D391 PRG:5391 B0 30 lda #$48 ; CPU:$D393 PRG:5393 A9 48 sta PpuAddrLow ; CPU:$D395 PRG:5395 85 04 lda #$08 ; CPU:$D397 PRG:5397 A9 08 sta Zp02 ; CPU:$D399 PRG:5399 85 02 lda $049F ; CPU:$D39B PRG:539B AD 9F 04 ror a ; CPU:$D39E PRG:539E 6A lda #$70 ; CPU:$D39F PRG:539F A9 70 bcs NmiHandler_Loop145 ; CPU:$D3A1 PRG:53A1 B0 02 lda #$74 ; CPU:$D3A3 PRG:53A3 A9 74 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop145 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: stores A to Zp0C; loads X with $00; loads Y ; with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop145: sta Zp0C ; CPU:$D3A5 PRG:53A5 85 0C ldx #$00 ; CPU:$D3A7 PRG:53A7 A2 00 ldy #$00 ; CPU:$D3A9 PRG:53A9 A0 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear5 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads A from $0403,y; branches on equal to ; NmiHandler_Loop146; loads A from Zp0C; stores A to Zp20,x; clears ; the carry flag; adds $02 to A; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear5: lda $0403,y ; CPU:$D3AB PRG:53AB B9 03 04 beq NmiHandler_Loop146 ; CPU:$D3AE PRG:53AE F0 09 lda Zp0C ; CPU:$D3B0 PRG:53B0 A5 0C sta Zp20,x ; CPU:$D3B2 PRG:53B2 95 20 clc ; CPU:$D3B4 PRG:53B4 18 adc #$02 ; CPU:$D3B5 PRG:53B5 69 02 sta Zp21,x ; CPU:$D3B7 PRG:53B7 95 21 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop146 ; Global: The routine calls WritePpuTileColumn. ; Local: Executes 13 instructions: loads A from $0403,y; branches on equal to ; NmiHandler_Loop146; loads A from Zp0C; stores A to Zp20,x; clears ; the carry flag; adds $02 to A; and 7 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop146: inx ; CPU:$D3B9 PRG:53B9 E8 inx ; CPU:$D3BA PRG:53BA E8 iny ; CPU:$D3BB PRG:53BB C8 cpy #$04 ; CPU:$D3BC PRG:53BC C0 04 bcc NmiHandler_OnCarryClear5 ; CPU:$D3BE PRG:53BE 90 EB jmp WritePpuTileColumn ; CPU:$D3C0 PRG:53C0 4C F8 D4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop147 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 16 instructions: loads A from $FB85,x; copies A into X; ; loads A from $FBA1,x; ANDs A with $07; clears the carry flag; adds ; $44 to A; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop147: lda $FB85,x ; CPU:$D3C3 PRG:53C3 BD 85 FB tax ; CPU:$D3C6 PRG:53C6 AA lda $FBA1,x ; CPU:$D3C7 PRG:53C7 BD A1 FB and #$07 ; CPU:$D3CA PRG:53CA 29 07 clc ; CPU:$D3CC PRG:53CC 18 adc #$44 ; CPU:$D3CD PRG:53CD 69 44 sta PpuAddrLow ; CPU:$D3CF PRG:53CF 85 04 lda #$0B ; CPU:$D3D1 PRG:53D1 A9 0B sta Zp02 ; CPU:$D3D3 PRG:53D3 85 02 lda $FBA1,x ; CPU:$D3D5 PRG:53D5 BD A1 FB and #$F8 ; CPU:$D3D8 PRG:53D8 29 F8 sta Zp0C ; CPU:$D3DA PRG:53DA 85 0C lda #$00 ; CPU:$D3DC PRG:53DC A9 00 sta TilePtrLo ; CPU:$D3DE PRG:53DE 85 08 sta TilePtrHi ; CPU:$D3E0 PRG:53E0 85 09 ldx #$03 ; CPU:$D3E2 PRG:53E2 A2 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative17 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A from $0403,x; branches on equal to ; NmiHandler_Loop149; rotates a right; branches on carry clear to ; NmiHandler_Loop148; increments TilePtrLo; branches on non-negative ; to NmiHandler_Loop149. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative17: lda $0403,x ; CPU:$D3E4 PRG:53E4 BD 03 04 beq NmiHandler_Loop149 ; CPU:$D3E7 PRG:53E7 F0 09 ror a ; CPU:$D3E9 PRG:53E9 6A bcc NmiHandler_Loop148 ; CPU:$D3EA PRG:53EA 90 04 inc TilePtrLo ; CPU:$D3EC PRG:53EC E6 08 bpl NmiHandler_Loop149 ; CPU:$D3EE PRG:53EE 10 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop148 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads A from $0403,x; branches on equal to ; NmiHandler_Loop149; rotates a right; branches on carry clear to ; NmiHandler_Loop148; increments TilePtrLo; branches on non-negative ; to NmiHandler_Loop149; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop148: inc TilePtrHi ; CPU:$D3F0 PRG:53F0 E6 09 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop149 ; Global: The routine reads $0496. ; Local: Executes 13 instructions: loads A from $0403,x; branches on equal to ; NmiHandler_Loop149; rotates a right; branches on carry clear to ; NmiHandler_Loop148; increments TilePtrLo; branches on non-negative ; to NmiHandler_Loop149; and 7 more instructions. ; Parameters: Reads $0496 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop149: dex ; CPU:$D3F2 PRG:53F2 CA bpl NmiHandler_OnNonnegative17 ; CPU:$D3F3 PRG:53F3 10 EF ldx $0496 ; CPU:$D3F5 PRG:53F5 AE 96 04 beq NmiHandler_Loop150 ; CPU:$D3F8 PRG:53F8 F0 04 lda #$01 ; CPU:$D3FA PRG:53FA A9 01 bpl NmiHandler_Loop152 ; CPU:$D3FC PRG:53FC 10 15 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop150 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A from TilePtrLo; compares A with $03. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N, Z and C flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop150: lda TilePtrLo ; CPU:$D3FE PRG:53FE A5 08 cmp #$03 ; CPU:$D400 PRG:5400 C9 03 .byte $90, $0D ; CPU:$D402 PRG:5402 90 0D ldx #$78 ; CPU:$D404 PRG:5404 A2 78 lda #$FB ; CPU:$D406 PRG:5406 A9 FB jsr QueueVramWritePointer ; CPU:$D408 PRG:5408 20 17 C1 lda #$01 ; CPU:$D40B PRG:540B A9 01 sta $0496 ; CPU:$D40D PRG:540D 8D 96 04 ; ----------------------------------------------------------------------------- ; Routine: SubCD410 ; Global: The routine reads $02A9. ; Local: Executes 1 instruction: tests the bits of $02A9. ; Parameters: Reads $02A9 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCD410: bit $02A9 ; CPU:$D410 PRG:5410 2C A9 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop152 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: stores A to ScreenPtrLo; loads X with $03; ; loads A with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop152: sta ScreenPtrLo ; CPU:$D413 PRG:5413 85 0A ldx #$03 ; CPU:$D415 PRG:5415 A2 03 lda #$00 ; CPU:$D417 PRG:5417 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative18 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: stores A to $0497,x; decrements X; branches ; on non-negative to NmiHandler_OnNonnegative18; loads A from Zp0C; ; branches on equal to NmiHandler_Loop155; loads X with $02; and 1 ; more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative18: sta $0497,x ; CPU:$D419 PRG:5419 9D 97 04 dex ; CPU:$D41C PRG:541C CA bpl NmiHandler_OnNonnegative18 ; CPU:$D41D PRG:541D 10 FA lda Zp0C ; CPU:$D41F PRG:541F A5 0C beq NmiHandler_Loop155 ; CPU:$D421 PRG:5421 F0 32 ldx #$02 ; CPU:$D423 PRG:5423 A2 02 ldy #$03 ; CPU:$D425 PRG:5425 A0 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero39 ; Global: The routine calls NmiHandler_Loop154. ; Local: Executes 9 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop154; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop153; loads A with $70; stores A to Zp20,x; ; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero39: lda $0400,y ; CPU:$D427 PRG:5427 B9 00 04 beq NmiHandler_Loop154 ; CPU:$D42A PRG:542A F0 1F cmp ScreenPtrLo ; CPU:$D42C PRG:542C C5 0A bne NmiHandler_Loop153 ; CPU:$D42E PRG:542E D0 0B lda #$70 ; CPU:$D430 PRG:5430 A9 70 sta Zp20,x ; CPU:$D432 PRG:5432 95 20 lda #$72 ; CPU:$D434 PRG:5434 A9 72 sta Zp21,x ; CPU:$D436 PRG:5436 95 21 jmp NmiHandler_Loop154 ; CPU:$D438 PRG:5438 4C 4B D4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop153 ; Global: The routine calls NmiHandler_Loop154. ; Local: Executes 11 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop154; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop153; loads A with $70; stores A to Zp20,x; ; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop153: stx ScreenPtrHi ; CPU:$D43B PRG:543B 86 0B ldx #$FF ; CPU:$D43D PRG:543D A2 FF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero40 ; Global: The routine calls NmiHandler_Loop154. ; Local: Executes 17 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop154; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop153; loads A with $70; stores A to Zp20,x; ; and 11 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero40: inx ; CPU:$D43F PRG:543F E8 lda $0497,x ; CPU:$D440 PRG:5440 BD 97 04 bne NmiHandler_OnNonzero40 ; CPU:$D443 PRG:5443 D0 FA tya ; CPU:$D445 PRG:5445 98 sta $0497,x ; CPU:$D446 PRG:5446 9D 97 04 ldx ScreenPtrHi ; CPU:$D449 PRG:5449 A6 0B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop154 ; Global: The routine calls NmiHandler_Loop154 and WritePpuTileColumn. ; Local: Executes 23 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop154; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop153; loads A with $70; stores A to Zp20,x; ; and 17 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop154: inx ; CPU:$D44B PRG:544B E8 inx ; CPU:$D44C PRG:544C E8 iny ; CPU:$D44D PRG:544D C8 cpy #$07 ; CPU:$D44E PRG:544E C0 07 bne NmiHandler_OnNonzero39 ; CPU:$D450 PRG:5450 D0 D5 jmp WritePpuTileColumn ; CPU:$D452 PRG:5452 4C F8 D4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop155 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $00; stores A to Zp0C; loads X ; with $01; loads Y with $03. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop155: lda #$00 ; CPU:$D455 PRG:5455 A9 00 sta Zp0C ; CPU:$D457 PRG:5457 85 0C ldx #$01 ; CPU:$D459 PRG:5459 A2 01 ldy #$03 ; CPU:$D45B PRG:545B A0 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero41 ; Global: The routine calls Sub_D473. ; Local: Executes 9 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop158; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop157; loads A from Zp0C; compares A with ; ScreenPtrLo; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero41: lda $0400,y ; CPU:$D45D PRG:545D B9 00 04 beq NmiHandler_Loop158 ; CPU:$D460 PRG:5460 F0 2A cmp ScreenPtrLo ; CPU:$D462 PRG:5462 C5 0A bne NmiHandler_Loop157 ; CPU:$D464 PRG:5464 D0 16 lda Zp0C ; CPU:$D466 PRG:5466 A5 0C cmp ScreenPtrLo ; CPU:$D468 PRG:5468 C5 0A bne NmiHandler_Loop156 ; CPU:$D46A PRG:546A D0 05 lda #$7E ; CPU:$D46C PRG:546C A9 7E jmp Sub_D473 ; CPU:$D46E PRG:546E 4C 73 D4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop156 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads A with $7C. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop156: lda #$7C ; CPU:$D471 PRG:5471 A9 7C ; ----------------------------------------------------------------------------- ; Routine: Sub_D473 ; Global: The routine calls NmiHandler_Loop159. ; Local: Executes 4 instructions: stores A to Zp20,x; loads A with $78; stores ; A to Zp21,x; calls NmiHandler_Loop159. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D473: sta Zp20,x ; CPU:$D473 PRG:5473 95 20 lda #$78 ; CPU:$D475 PRG:5475 A9 78 sta Zp21,x ; CPU:$D477 PRG:5477 95 21 jmp NmiHandler_Loop159 ; CPU:$D479 PRG:5479 4C 96 D4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop157 ; Global: The routine calls Sub_D473 and NmiHandler_Loop159. ; Local: Executes 16 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop158; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop157; loads A from Zp0C; compares A with ; ScreenPtrLo; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop157: stx ScreenPtrHi ; CPU:$D47C PRG:547C 86 0B ldx #$FF ; CPU:$D47E PRG:547E A2 FF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero42 ; Global: The routine calls Sub_D473 and NmiHandler_Loop159. ; Local: Executes 22 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop158; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop157; loads A from Zp0C; compares A with ; ScreenPtrLo; and 16 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero42: inx ; CPU:$D480 PRG:5480 E8 lda $0497,x ; CPU:$D481 PRG:5481 BD 97 04 bne NmiHandler_OnNonzero42 ; CPU:$D484 PRG:5484 D0 FA tya ; CPU:$D486 PRG:5486 98 sta $0497,x ; CPU:$D487 PRG:5487 9D 97 04 ldx ScreenPtrHi ; CPU:$D48A PRG:548A A6 0B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop158 ; Global: The routine calls Sub_D473 and NmiHandler_Loop159. ; Local: Executes 27 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop158; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop157; loads A from Zp0C; compares A with ; ScreenPtrLo; and 21 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop158: lda Zp0C ; CPU:$D48C PRG:548C A5 0C cmp ScreenPtrLo ; CPU:$D48E PRG:548E C5 0A bne NmiHandler_Loop159 ; CPU:$D490 PRG:5490 D0 04 lda #$7A ; CPU:$D492 PRG:5492 A9 7A sta Zp20,x ; CPU:$D494 PRG:5494 95 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop159 ; Global: The routine calls Sub_D473 and NmiHandler_Loop159. ; Local: Executes 39 instructions: loads A from $0400,y; branches on equal to ; NmiHandler_Loop158; compares A with ScreenPtrLo; branches on not ; equal to NmiHandler_Loop157; loads A from Zp0C; compares A with ; ScreenPtrLo; and 33 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop159: lda $0400,y ; CPU:$D496 PRG:5496 B9 00 04 sta Zp0C ; CPU:$D499 PRG:5499 85 0C inx ; CPU:$D49B PRG:549B E8 inx ; CPU:$D49C PRG:549C E8 iny ; CPU:$D49D PRG:549D C8 cpy #$07 ; CPU:$D49E PRG:549E C0 07 bne NmiHandler_OnNonzero41 ; CPU:$D4A0 PRG:54A0 D0 BB lda Zp0C ; CPU:$D4A2 PRG:54A2 A5 0C cmp ScreenPtrLo ; CPU:$D4A4 PRG:54A4 C5 0A bne NmiHandler_Loop160 ; CPU:$D4A6 PRG:54A6 D0 04 lda #$7A ; CPU:$D4A8 PRG:54A8 A9 7A sta Zp20,x ; CPU:$D4AA PRG:54AA 95 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop160 ; Global: The routine calls WritePpuTileColumn. ; Local: Executes 1 instruction: calls WritePpuTileColumn. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop160: jmp WritePpuTileColumn ; CPU:$D4AC PRG:54AC 4C F8 D4 ; ----------------------------------------------------------------------------- ; Routine: Sub_D4AF ; Global: The routine reads $049F and $049E. ; Local: Executes 8 instructions: loads A with $18; stores A to Zp02; loads X ; from $049F; loads Y with $80; loads A from $049E; compares A with ; $03; and 2 more instructions. ; Parameters: Reads $049F and $049E from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D4AF: lda #$18 ; CPU:$D4AF PRG:54AF A9 18 sta Zp02 ; CPU:$D4B1 PRG:54B1 85 02 ldx $049F ; CPU:$D4B3 PRG:54B3 AE 9F 04 ldy #$80 ; CPU:$D4B6 PRG:54B6 A0 80 lda $049E ; CPU:$D4B8 PRG:54B8 AD 9E 04 cmp #$03 ; CPU:$D4BB PRG:54BB C9 03 bcc NmiHandler_Loop161 ; CPU:$D4BD PRG:54BD 90 02 ldy #$9C ; CPU:$D4BF PRG:54BF A0 9C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop161 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 10 instructions: loads A from $FB85,x; stores Y to Zp0C; ; clears the carry flag; adds $A1 to A; stores A to TilePtrLo; loads ; A with $FB; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop161: lda $FB85,x ; CPU:$D4C1 PRG:54C1 BD 85 FB sty Zp0C ; CPU:$D4C4 PRG:54C4 84 0C clc ; CPU:$D4C6 PRG:54C6 18 adc #$A1 ; CPU:$D4C7 PRG:54C7 69 A1 sta TilePtrLo ; CPU:$D4C9 PRG:54C9 85 08 lda #$FB ; CPU:$D4CB PRG:54CB A9 FB adc #$00 ; CPU:$D4CD PRG:54CD 69 00 sta TilePtrHi ; CPU:$D4CF PRG:54CF 85 09 ldy #$00 ; CPU:$D4D1 PRG:54D1 A0 00 sty ScreenPtrLo ; CPU:$D4D3 PRG:54D3 84 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear6 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 15 instructions: loads A from ((StarFieldCount),y); branches ; on equal to NmiHandler_Loop162; loads A from ((TilePtrLo),y); ANDs ; A with $07; clears the carry flag; adds ScreenPtrLo to A; and 9 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear6: lda (StarFieldCount),y ; CPU:$D4D5 PRG:54D5 B1 06 beq NmiHandler_Loop162 ; CPU:$D4D7 PRG:54D7 F0 16 lda (TilePtrLo),y ; CPU:$D4D9 PRG:54D9 B1 08 and #$07 ; CPU:$D4DB PRG:54DB 29 07 clc ; CPU:$D4DD PRG:54DD 18 adc ScreenPtrLo ; CPU:$D4DE PRG:54DE 65 0A tax ; CPU:$D4E0 PRG:54E0 AA lda (TilePtrLo),y ; CPU:$D4E1 PRG:54E1 B1 08 and #$F8 ; CPU:$D4E3 PRG:54E3 29 F8 lsr a ; CPU:$D4E5 PRG:54E5 4A adc Zp0C ; CPU:$D4E6 PRG:54E6 65 0C sta Zp20,x ; CPU:$D4E8 PRG:54E8 95 20 adc #$02 ; CPU:$D4EA PRG:54EA 69 02 inx ; CPU:$D4EC PRG:54EC E8 sta Zp20,x ; CPU:$D4ED PRG:54ED 95 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop162 ; Global: Writes one column of tiles to the PPU and steps the PPU address on. ; Local: Executes 20 instructions: loads A from ((StarFieldCount),y); branches ; on equal to NmiHandler_Loop162; loads A from ((TilePtrLo),y); ANDs ; A with $07; clears the carry flag; adds ScreenPtrLo to A; and 14 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop162: inc ScreenPtrLo ; CPU:$D4EF PRG:54EF E6 0A inc ScreenPtrLo ; CPU:$D4F1 PRG:54F1 E6 0A iny ; CPU:$D4F3 PRG:54F3 C8 cpy #$0A ; CPU:$D4F4 PRG:54F4 C0 0A bcc NmiHandler_OnCarryClear6 ; CPU:$D4F6 PRG:54F6 90 DD ; ----------------------------------------------------------------------------- ; Routine: WritePpuTileColumn ; Global: The routine calls Sub_C156. ; Local: Executes 9 instructions: calls Sub_C156; loads X from Zp02; ; decrements X; clears the carry flag; loads A with $20; adds ; PpuAddrLow to A; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- WritePpuTileColumn: jsr Sub_C156 ; CPU:$D4F8 PRG:54F8 20 56 C1 ldx Zp02 ; CPU:$D4FB PRG:54FB A6 02 dex ; CPU:$D4FD PRG:54FD CA clc ; CPU:$D4FE PRG:54FE 18 lda #$20 ; CPU:$D4FF PRG:54FF A9 20 adc PpuAddrLow ; CPU:$D501 PRG:5501 65 04 sta PpuAddrLow ; CPU:$D503 PRG:5503 85 04 bcc NmiHandler_OnNonnegative19 ; CPU:$D505 PRG:5505 90 02 inc PpuAddrHigh ; CPU:$D507 PRG:5507 E6 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative19 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads Y from Zp20,x; compares Y with $24; ; branches on equal to NmiHandler_Loop163; increments Y; stores Y to ; Zp20,x. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative19: ldy Zp20,x ; CPU:$D509 PRG:5509 B4 20 cpy #$24 ; CPU:$D50B PRG:550B C0 24 beq NmiHandler_Loop163 ; CPU:$D50D PRG:550D F0 03 iny ; CPU:$D50F PRG:550F C8 sty Zp20,x ; CPU:$D510 PRG:5510 94 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop163 ; Global: Spawns an enemy ship: it clears the slot and stores the ship's sprite type. ; Local: Executes 8 instructions: loads Y from Zp20,x; compares Y with $24; ; branches on equal to NmiHandler_Loop163; increments Y; stores Y to ; Zp20,x; decrements X; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop163: dex ; CPU:$D512 PRG:5512 CA bpl NmiHandler_OnNonnegative19 ; CPU:$D513 PRG:5513 10 F4 jmp Sub_C156 ; CPU:$D515 PRG:5515 4C 56 C1 ; ----------------------------------------------------------------------------- ; Routine: SpawnEnemyShip ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 13 instructions: copies A into X; ORs A with $80; stores A ; to Zp1E; loads A with $00; stores A to $0400,x; copies X into A; ; and 7 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z and C flags, Zp1E, Zp69, $03D0, $0400, $0490, $0491. ; ; ----------------------------------------------------------------------------- SpawnEnemyShip: tax ; CPU:$D518 PRG:5518 AA ora #$80 ; CPU:$D519 PRG:5519 09 80 sta Zp1E ; CPU:$D51B PRG:551B 85 1E lda #$00 ; CPU:$D51D PRG:551D A9 00 sta $0400,x ; CPU:$D51F PRG:551F 9D 00 04 txa ; CPU:$D522 PRG:5522 8A ldx #$00 ; CPU:$D523 PRG:5523 A2 00 cmp #$10 ; CPU:$D525 PRG:5525 C9 10 bcc NmiHandler_Loop164 ; CPU:$D527 PRG:5527 90 06 inx ; CPU:$D529 PRG:5529 E8 cmp #$30 ; CPU:$D52A PRG:552A C9 30 bcc NmiHandler_Loop164 ; CPU:$D52C PRG:552C 90 01 inx ; CPU:$D52E PRG:552E E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop164 ; Global: Spawns an enemy ship of the second kind. ; Local: Executes 3 instructions: decrements $0491,x; decrements $0490; calls ; StoreEnemyShipSpriteType. ; Parameters: Reads $0490 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp69, $03D0, $0490, $0491. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop164: dec $0491,x ; CPU:$D52F PRG:552F DE 91 04 dec $0490 ; CPU:$D532 PRG:5532 CE 90 04 jmp StoreEnemyShipSpriteType ; CPU:$D535 PRG:5535 4C 61 D5 ; ----------------------------------------------------------------------------- ; Routine: SpawnEnemyShipAlt ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: stores A to Zp1E; loads Y with $01; compares ; A with $10; branches on carry set to NmiHandler_Loop165; compares A ; with $08; branches on carry clear to NmiHandler_Loop165; and 3 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp69, $03D0, $0400, $0490, ; $0491. ; ; ----------------------------------------------------------------------------- SpawnEnemyShipAlt: sta Zp1E ; CPU:$D538 PRG:5538 85 1E ldy #$01 ; CPU:$D53A PRG:553A A0 01 cmp #$10 ; CPU:$D53C PRG:553C C9 10 bcs NmiHandler_Loop165 ; CPU:$D53E PRG:553E B0 09 cmp #$08 ; CPU:$D540 PRG:5540 C9 08 bcc NmiHandler_Loop165 ; CPU:$D542 PRG:5542 90 05 sbc #$08 ; CPU:$D544 PRG:5544 E9 08 sta Zp1E ; CPU:$D546 PRG:5546 85 1E iny ; CPU:$D548 PRG:5548 C8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop165 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: copies A into X; copies Y into A; stores A ; to $0400,x; copies X into A; loads X with $00; compares A with $10; ; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z and C flags, Zp69, $03D0, $0400, $0490, $0491. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop165: tax ; CPU:$D549 PRG:5549 AA tya ; CPU:$D54A PRG:554A 98 sta $0400,x ; CPU:$D54B PRG:554B 9D 00 04 txa ; CPU:$D54E PRG:554E 8A ldx #$00 ; CPU:$D54F PRG:554F A2 00 cmp #$10 ; CPU:$D551 PRG:5551 C9 10 bcc NmiHandler_Loop166 ; CPU:$D553 PRG:5553 90 06 inx ; CPU:$D555 PRG:5555 E8 cmp #$30 ; CPU:$D556 PRG:5556 C9 30 bcc NmiHandler_Loop166 ; CPU:$D558 PRG:5558 90 01 inx ; CPU:$D55A PRG:555A E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop166 ; Global: Stores the sprite type of an enemy ship in the sprite table. ; Local: Executes 2 instructions: increments $0491,x; increments $0490. ; Parameters: Reads $0490 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp69, $03D0, $0490, $0491. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop166: inc $0491,x ; CPU:$D55B PRG:555B FE 91 04 inc $0490 ; CPU:$D55E PRG:555E EE 90 04 ; ----------------------------------------------------------------------------- ; Routine: StoreEnemyShipSpriteType ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads A from Zp1E; loads X from Zp69; stores ; A to $03D0,x; increments X; copies X into A; ANDs A with $07; and 1 ; more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp69, $03D0. ; ; ----------------------------------------------------------------------------- StoreEnemyShipSpriteType: lda Zp1E ; CPU:$D561 PRG:5561 A5 1E ldx Zp69 ; CPU:$D563 PRG:5563 A6 69 sta $03D0,x ; CPU:$D565 PRG:5565 9D D0 03 inx ; CPU:$D568 PRG:5568 E8 txa ; CPU:$D569 PRG:5569 8A and #$07 ; CPU:$D56A PRG:556A 29 07 sta Zp69 ; CPU:$D56C PRG:556C 85 69 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero7 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero7: rts ; CPU:$D56E PRG:556E 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D56F ; Global: Draws the sprites of the enemy ship that is being moved. ; Local: Executes 4 instructions: returns with RTS; loads A with $02; stores A ; to Zp02; stores A to Zp0E. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D56F: lda #$02 ; CPU:$D56F PRG:556F A9 02 sta Zp02 ; CPU:$D571 PRG:5571 85 02 sta Zp0E ; CPU:$D573 PRG:5573 85 0E ; ----------------------------------------------------------------------------- ; Routine: DrawEnemyShipSprites ; Global: The routine calls Sub_D703. ; Local: Executes 12 instructions: returns with RTS; loads X from Zp68; ; compares X with Zp69; branches on equal to NmiHandler_OnZero7; ; loads A from $03D0,x; stores A to StarFieldCount; and 6 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- DrawEnemyShipSprites: ldx Zp68 ; CPU:$D575 PRG:5575 A6 68 cpx Zp69 ; CPU:$D577 PRG:5577 E4 69 beq NmiHandler_OnZero7 ; CPU:$D579 PRG:5579 F0 F3 lda $03D0,x ; CPU:$D57B PRG:557B BD D0 03 sta StarFieldCount ; CPU:$D57E PRG:557E 85 06 beq NmiHandler_Loop170 ; CPU:$D580 PRG:5580 F0 75 and #$7F ; CPU:$D582 PRG:5582 29 7F sta Zp07 ; CPU:$D584 PRG:5584 85 07 cmp #$10 ; CPU:$D586 PRG:5586 C9 10 bcs NmiHandler_Loop167 ; CPU:$D588 PRG:5588 B0 03 jmp Sub_D703 ; CPU:$D58A PRG:558A 4C 03 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop167 ; Global: The routine calls Sub_D5BE. ; Local: Executes 25 instructions: shifts a left; stores A to TilePtrLo; ANDs ; A with $E0; adds $20 to A; shifts a left; stores A to PpuAddrLow; ; and 19 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop167: asl a ; CPU:$D58D PRG:558D 0A sta TilePtrLo ; CPU:$D58E PRG:558E 85 08 and #$E0 ; CPU:$D590 PRG:5590 29 E0 adc #$20 ; CPU:$D592 PRG:5592 69 20 asl a ; CPU:$D594 PRG:5594 0A sta PpuAddrLow ; CPU:$D595 PRG:5595 85 04 lda #$20 ; CPU:$D597 PRG:5597 A9 20 adc #$00 ; CPU:$D599 PRG:5599 69 00 sta PpuAddrHigh ; CPU:$D59B PRG:559B 85 05 lda TilePtrLo ; CPU:$D59D PRG:559D A5 08 and #$1F ; CPU:$D59F PRG:559F 29 1F clc ; CPU:$D5A1 PRG:55A1 18 adc PpuAddrLow ; CPU:$D5A2 PRG:55A2 65 04 sta PpuAddrLow ; CPU:$D5A4 PRG:55A4 85 04 lda StarFieldCount ; CPU:$D5A6 PRG:55A6 A5 06 and #$70 ; CPU:$D5A8 PRG:55A8 29 70 ora #$0F ; CPU:$D5AA PRG:55AA 09 0F tay ; CPU:$D5AC PRG:55AC A8 lda $0400,y ; CPU:$D5AD PRG:55AD B9 00 04 tay ; CPU:$D5B0 PRG:55B0 A8 ldx Zp07 ; CPU:$D5B1 PRG:55B1 A6 07 cpx #$30 ; CPU:$D5B3 PRG:55B3 E0 30 bcs NmiHandler_Loop168 ; CPU:$D5B5 PRG:55B5 B0 05 lda #$80 ; CPU:$D5B7 PRG:55B7 A9 80 jmp Sub_D5BE ; CPU:$D5B9 PRG:55B9 4C BE D5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop168 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads A with $9C. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop168: lda #$9C ; CPU:$D5BC PRG:55BC A9 9C ; ----------------------------------------------------------------------------- ; Routine: Sub_D5BE ; Global: The routine calls Sub_D736. ; Local: Executes 25 instructions: stores A to Zp0C; loads A from $FB85,y; ; stores A to TilePtrLo; loads A from StarFieldCount; ANDs A with ; $0F; clears the carry flag; and 19 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and Y, the N, Z, C and V flags, Zp0C, Zp0D, Zp20, Zp21. ; ; ----------------------------------------------------------------------------- Sub_D5BE: sta Zp0C ; CPU:$D5BE PRG:55BE 85 0C lda $FB85,y ; CPU:$D5C0 PRG:55C0 B9 85 FB sta TilePtrLo ; CPU:$D5C3 PRG:55C3 85 08 lda StarFieldCount ; CPU:$D5C5 PRG:55C5 A5 06 and #$0F ; CPU:$D5C7 PRG:55C7 29 0F clc ; CPU:$D5C9 PRG:55C9 18 adc TilePtrLo ; CPU:$D5CA PRG:55CA 65 08 tay ; CPU:$D5CC PRG:55CC A8 lda $FBA1,y ; CPU:$D5CD PRG:55CD B9 A1 FB sta Zp0D ; CPU:$D5D0 PRG:55D0 85 0D and #$07 ; CPU:$D5D2 PRG:55D2 29 07 clc ; CPU:$D5D4 PRG:55D4 18 adc PpuAddrLow ; CPU:$D5D5 PRG:55D5 65 04 sta PpuAddrLow ; CPU:$D5D7 PRG:55D7 85 04 lda StarFieldCount ; CPU:$D5D9 PRG:55D9 A5 06 bmi NmiHandler_Loop169 ; CPU:$D5DB PRG:55DB 30 11 lda Zp0D ; CPU:$D5DD PRG:55DD A5 0D and #$F8 ; CPU:$D5DF PRG:55DF 29 F8 lsr a ; CPU:$D5E1 PRG:55E1 4A adc Zp0C ; CPU:$D5E2 PRG:55E2 65 0C sta Zp20 ; CPU:$D5E4 PRG:55E4 85 20 clc ; CPU:$D5E6 PRG:55E6 18 adc #$02 ; CPU:$D5E7 PRG:55E7 69 02 sta Zp21 ; CPU:$D5E9 PRG:55E9 85 21 jmp Sub_D736 ; CPU:$D5EB PRG:55EB 4C 36 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop169 ; Global: The routine calls Sub_D736. ; Local: Executes 4 instructions: loads A with $24; stores A to Zp20; stores A ; to Zp21; calls Sub_D736. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop169: lda #$24 ; CPU:$D5EE PRG:55EE A9 24 sta Zp20 ; CPU:$D5F0 PRG:55F0 85 20 sta Zp21 ; CPU:$D5F2 PRG:55F2 85 21 jmp Sub_D736 ; CPU:$D5F4 PRG:55F4 4C 36 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop170 ; Global: The routine calls NmiHandler_OnNonzero43 and Sub_D739. ; Local: Executes 2 instructions: calls NmiHandler_OnNonzero43; calls ; Sub_D739. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop170: jsr NmiHandler_OnNonzero43 ; CPU:$D5F7 PRG:55F7 20 FD D5 jmp Sub_D739 ; CPU:$D5FA PRG:55FA 4C 39 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero43 ; Global: The routine calls SetVramRecordCount. ; Local: Executes 8 instructions: loads A with $C2; stores A to PpuAddrLow; ; loads A with $23; stores A to PpuAddrHigh; loads Y with $02; loads ; X with $8A; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero43: lda #$C2 ; CPU:$D5FD PRG:55FD A9 C2 sta PpuAddrLow ; CPU:$D5FF PRG:55FF 85 04 lda #$23 ; CPU:$D601 PRG:5601 A9 23 sta PpuAddrHigh ; CPU:$D603 PRG:5603 85 05 ldy #$02 ; CPU:$D605 PRG:5605 A0 02 ldx #$8A ; CPU:$D607 PRG:5607 A2 8A lda #$04 ; CPU:$D609 PRG:5609 A9 04 jmp SetVramRecordCount ; CPU:$D60B PRG:560B 4C 5C C1 ; ----------------------------------------------------------------------------- ; Routine: Sub_D60E ; Global: The routine calls SetVramRecordCount and QueueVramWritePointer, reads $0496. ; Local: Executes 15 instructions: loads A with $C2; stores A to PpuAddrLow; ; loads A with $23; stores A to PpuAddrHigh; loads Y with $02; loads ; X with $8A; and 9 more instructions. ; Parameters: Reads $0496 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D60E: ldx $0496 ; CPU:$D60E PRG:560E AE 96 04 beq NmiHandler_Loop171 ; CPU:$D611 PRG:5611 F0 0A dex ; CPU:$D613 PRG:5613 CA bne NmiHandler_OnNonzero43 ; CPU:$D614 PRG:5614 D0 E7 ldx #$78 ; CPU:$D616 PRG:5616 A2 78 lda #$FB ; CPU:$D618 PRG:5618 A9 FB jmp QueueVramWritePointer ; CPU:$D61A PRG:561A 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop171 ; Global: The routine calls QueueVramWritePointer. ; Local: Executes 3 instructions: loads X with $6F; loads A with $FB; calls ; QueueVramWritePointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp4E, Zp4F, $0100, PPUADDR, PPUDATA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop171: ldx #$6F ; CPU:$D61D PRG:561D A2 6F lda #$FB ; CPU:$D61F PRG:561F A9 FB jmp QueueVramWritePointer ; CPU:$D621 PRG:5621 4C 17 C1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero8 ; Global: The routine calls Sub_D739. ; Local: Executes 3 instructions: loads A with $00; stores A to $0497,x; calls ; Sub_D739. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp0E, Zp68, $0497. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero8: lda #$00 ; CPU:$D624 PRG:5624 A9 00 sta $0497,x ; CPU:$D626 PRG:5626 9D 97 04 jmp Sub_D739 ; CPU:$D629 PRG:5629 4C 39 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNegative3 ; Global: The routine calls Sub_D739. ; Local: Executes 4 instructions: loads A with $00; stores A to $0497,x; calls ; Sub_D739; loads X with $03. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNegative3: ldx #$03 ; CPU:$D62C PRG:562C A2 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative20 ; Global: The routine calls Sub_D739 and Sub_D736, reads $040F. ; Local: Executes 27 instructions: loads A with $00; stores A to $0497,x; ; calls Sub_D739; loads A from $0497,x; compares A with Zp07; ; branches on equal to NmiHandler_OnZero8; and 21 more instructions. ; Parameters: Reads $040F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative20: lda $0497,x ; CPU:$D62E PRG:562E BD 97 04 cmp Zp07 ; CPU:$D631 PRG:5631 C5 07 beq NmiHandler_OnZero8 ; CPU:$D633 PRG:5633 F0 EF dex ; CPU:$D635 PRG:5635 CA bpl NmiHandler_OnNonnegative20 ; CPU:$D636 PRG:5636 10 F6 ldx $040F ; CPU:$D638 PRG:5638 AE 0F 04 lda $FB85,x ; CPU:$D63B PRG:563B BD 85 FB tax ; CPU:$D63E PRG:563E AA lda $FBA1,x ; CPU:$D63F PRG:563F BD A1 FB and #$07 ; CPU:$D642 PRG:5642 29 07 sta PpuAddrLow ; CPU:$D644 PRG:5644 85 04 lda Zp07 ; CPU:$D646 PRG:5646 A5 07 asl a ; CPU:$D648 PRG:5648 0A adc PpuAddrLow ; CPU:$D649 PRG:5649 65 04 clc ; CPU:$D64B PRG:564B 18 adc #$40 ; CPU:$D64C PRG:564C 69 40 sta PpuAddrLow ; CPU:$D64E PRG:564E 85 04 lda $040F ; CPU:$D650 PRG:5650 AD 0F 04 ror a ; CPU:$D653 PRG:5653 6A bcs NmiHandler_Loop172 ; CPU:$D654 PRG:5654 B0 09 lda #$24 ; CPU:$D656 PRG:5656 A9 24 sta Zp20 ; CPU:$D658 PRG:5658 85 20 sta Zp21 ; CPU:$D65A PRG:565A 85 21 jmp Sub_D736 ; CPU:$D65C PRG:565C 4C 36 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop172 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: decrements PpuAddrLow; loads X from Zp07; ; loads A from $03FF,x; loads Y with $24; compares A with TilePtrLo; ; branches on not equal to NmiHandler_Loop173; and 1 more ; instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop172: dec PpuAddrLow ; CPU:$D65F PRG:565F C6 04 ldx Zp07 ; CPU:$D661 PRG:5661 A6 07 lda $03FF,x ; CPU:$D663 PRG:5663 BD FF 03 ldy #$24 ; CPU:$D666 PRG:5666 A0 24 cmp TilePtrLo ; CPU:$D668 PRG:5668 C5 08 bne NmiHandler_Loop173 ; CPU:$D66A PRG:566A D0 02 ldy #$7A ; CPU:$D66C PRG:566C A0 7A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop173 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: stores Y to Zp20; loads A with $24; stores A ; to Zp21; loads A from $0401,x; loads Y with $24; compares A with ; TilePtrLo; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop173: sty Zp20 ; CPU:$D66E PRG:566E 84 20 lda #$24 ; CPU:$D670 PRG:5670 A9 24 sta Zp21 ; CPU:$D672 PRG:5672 85 21 lda $0401,x ; CPU:$D674 PRG:5674 BD 01 04 ldy #$24 ; CPU:$D677 PRG:5677 A0 24 cmp TilePtrLo ; CPU:$D679 PRG:5679 C5 08 bne NmiHandler_Loop174 ; CPU:$D67B PRG:567B D0 02 ldy #$7C ; CPU:$D67D PRG:567D A0 7C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop174 ; Global: The routine calls Sub_D6E9. ; Local: Executes 2 instructions: stores Y to Zp22; calls Sub_D6E9. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop174: sty Zp22 ; CPU:$D67F PRG:567F 84 22 jmp Sub_D6E9 ; CPU:$D681 PRG:5681 4C E9 D6 ; ----------------------------------------------------------------------------- ; Routine: Sub_D684 ; Global: The routine calls Sub_D739, Sub_D736 and Sub_D6E9, reads $040F and ; $0496. ; Local: Executes 78 instructions: loads A with $00; stores A to $0497,x; ; calls Sub_D739; loads X with $03; loads A from $0497,x; compares A ; with Zp07; and 72 more instructions. ; Parameters: Reads $040F and $0496 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D684: lda #$20 ; CPU:$D684 PRG:5684 A9 20 sta PpuAddrHigh ; CPU:$D686 PRG:5686 85 05 ldx $0496 ; CPU:$D688 PRG:5688 AE 96 04 inx ; CPU:$D68B PRG:568B E8 txa ; CPU:$D68C PRG:568C 8A eor #$03 ; CPU:$D68D PRG:568D 49 03 sta TilePtrLo ; CPU:$D68F PRG:568F 85 08 lda StarFieldCount ; CPU:$D691 PRG:5691 A5 06 bmi NmiHandler_OnNegative3 ; CPU:$D693 PRG:5693 30 97 ldx Zp07 ; CPU:$D695 PRG:5695 A6 07 lda $0400,x ; CPU:$D697 PRG:5697 BD 00 04 cmp TilePtrLo ; CPU:$D69A PRG:569A C5 08 bne NmiHandler_Loop178 ; CPU:$D69C PRG:569C D0 55 ldx $040F ; CPU:$D69E PRG:569E AE 0F 04 lda $FB85,x ; CPU:$D6A1 PRG:56A1 BD 85 FB tax ; CPU:$D6A4 PRG:56A4 AA lda $FBA1,x ; CPU:$D6A5 PRG:56A5 BD A1 FB and #$07 ; CPU:$D6A8 PRG:56A8 29 07 sta PpuAddrLow ; CPU:$D6AA PRG:56AA 85 04 lda Zp07 ; CPU:$D6AC PRG:56AC A5 07 asl a ; CPU:$D6AE PRG:56AE 0A adc PpuAddrLow ; CPU:$D6AF PRG:56AF 65 04 clc ; CPU:$D6B1 PRG:56B1 18 adc #$40 ; CPU:$D6B2 PRG:56B2 69 40 sta PpuAddrLow ; CPU:$D6B4 PRG:56B4 85 04 lda $040F ; CPU:$D6B6 PRG:56B6 AD 0F 04 ror a ; CPU:$D6B9 PRG:56B9 6A bcs NmiHandler_Loop175 ; CPU:$D6BA PRG:56BA B0 0B lda #$70 ; CPU:$D6BC PRG:56BC A9 70 sta Zp20 ; CPU:$D6BE PRG:56BE 85 20 lda #$72 ; CPU:$D6C0 PRG:56C0 A9 72 sta Zp21 ; CPU:$D6C2 PRG:56C2 85 21 jmp Sub_D736 ; CPU:$D6C4 PRG:56C4 4C 36 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop175 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: decrements PpuAddrLow; loads X from Zp07; ; loads A from $03FF,x; loads Y with $7C; compares A with TilePtrLo; ; branches on not equal to NmiHandler_Loop176; and 1 more ; instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop175: dec PpuAddrLow ; CPU:$D6C7 PRG:56C7 C6 04 ldx Zp07 ; CPU:$D6C9 PRG:56C9 A6 07 lda $03FF,x ; CPU:$D6CB PRG:56CB BD FF 03 ldy #$7C ; CPU:$D6CE PRG:56CE A0 7C cmp TilePtrLo ; CPU:$D6D0 PRG:56D0 C5 08 bne NmiHandler_Loop176 ; CPU:$D6D2 PRG:56D2 D0 02 ldy #$7E ; CPU:$D6D4 PRG:56D4 A0 7E ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop176 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: stores Y to Zp20; loads A with $78; stores A ; to Zp21; loads A from $0401,x; loads Y with $7A; compares A with ; TilePtrLo; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop176: sty Zp20 ; CPU:$D6D6 PRG:56D6 84 20 lda #$78 ; CPU:$D6D8 PRG:56D8 A9 78 sta Zp21 ; CPU:$D6DA PRG:56DA 85 21 lda $0401,x ; CPU:$D6DC PRG:56DC BD 01 04 ldy #$7A ; CPU:$D6DF PRG:56DF A0 7A cmp TilePtrLo ; CPU:$D6E1 PRG:56E1 C5 08 bne NmiHandler_Loop177 ; CPU:$D6E3 PRG:56E3 D0 02 ldy #$7E ; CPU:$D6E5 PRG:56E5 A0 7E ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop177 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores Y to Zp22. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop177: sty Zp22 ; CPU:$D6E7 PRG:56E7 84 22 ; ----------------------------------------------------------------------------- ; Routine: Sub_D6E9 ; Global: The routine calls WritePpuTileColumn and Sub_D739. ; Local: Executes 4 instructions: increments Zp02; calls WritePpuTileColumn; decrements ; Zp02; calls Sub_D739. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D6E9: inc Zp02 ; CPU:$D6E9 PRG:56E9 E6 02 jsr WritePpuTileColumn ; CPU:$D6EB PRG:56EB 20 F8 D4 dec Zp02 ; CPU:$D6EE PRG:56EE C6 02 jmp Sub_D739 ; CPU:$D6F0 PRG:56F0 4C 39 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop178 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $04. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp0E, Zp68, $0497. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop178: ldx #$04 ; CPU:$D6F3 PRG:56F3 A2 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero44 ; Global: The routine calls Sub_D739. ; Local: Executes 6 instructions: decrements X; loads A from $0497,x; branches ; on not equal to NmiHandler_OnNonzero44; loads A from Zp07; stores A ; to $0497,x; calls Sub_D739. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N and Z flags, Zp0E, Zp68, $0497. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero44: dex ; CPU:$D6F5 PRG:56F5 CA lda $0497,x ; CPU:$D6F6 PRG:56F6 BD 97 04 bne NmiHandler_OnNonzero44 ; CPU:$D6F9 PRG:56F9 D0 FA lda Zp07 ; CPU:$D6FB PRG:56FB A5 07 sta $0497,x ; CPU:$D6FD PRG:56FD 9D 97 04 jmp Sub_D739 ; CPU:$D700 PRG:5700 4C 39 D7 ; ----------------------------------------------------------------------------- ; Routine: Sub_D703 ; Global: The routine calls Sub_D684, reads $040F. ; Local: Executes 4 instructions: loads X from $040F; compares X with $0C; ; branches on carry clear to NmiHandler_Loop179; calls Sub_D684. ; Parameters: Reads $040F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D703: ldx $040F ; CPU:$D703 PRG:5703 AE 0F 04 cpx #$0C ; CPU:$D706 PRG:5706 E0 0C bcc NmiHandler_Loop179 ; CPU:$D708 PRG:5708 90 03 jmp Sub_D684 ; CPU:$D70A PRG:570A 4C 84 D6 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop179 ; Global: The routine calls Sub_D736. ; Local: Executes 13 instructions: copies A into X; shifts a left; adds $42 to ; A; stores A to PpuAddrLow; loads A with $20; adds $00 to A; and 7 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop179: tax ; CPU:$D70D PRG:570D AA asl a ; CPU:$D70E PRG:570E 0A adc #$42 ; CPU:$D70F PRG:570F 69 42 sta PpuAddrLow ; CPU:$D711 PRG:5711 85 04 lda #$20 ; CPU:$D713 PRG:5713 A9 20 adc #$00 ; CPU:$D715 PRG:5715 69 00 sta PpuAddrHigh ; CPU:$D717 PRG:5717 85 05 lda StarFieldCount ; CPU:$D719 PRG:5719 A5 06 bpl NmiHandler_Loop180 ; CPU:$D71B PRG:571B 10 09 lda #$24 ; CPU:$D71D PRG:571D A9 24 sta Zp20 ; CPU:$D71F PRG:571F 85 20 sta Zp21 ; CPU:$D721 PRG:5721 85 21 jmp Sub_D736 ; CPU:$D723 PRG:5723 4C 36 D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop180 ; Global: The routine reads $040F. ; Local: Executes 5 instructions: loads A from $040F; rotates a right; loads X ; with $70; branches on carry set to NmiHandler_Loop181; loads X with ; $74. ; Parameters: Reads $040F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop180: lda $040F ; CPU:$D726 PRG:5726 AD 0F 04 ror a ; CPU:$D729 PRG:5729 6A ldx #$70 ; CPU:$D72A PRG:572A A2 70 bcs NmiHandler_Loop181 ; CPU:$D72C PRG:572C B0 02 ldx #$74 ; CPU:$D72E PRG:572E A2 74 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop181 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: stores X to Zp20; increments X; increments ; X; stores X to Zp21. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop181: stx Zp20 ; CPU:$D730 PRG:5730 86 20 inx ; CPU:$D732 PRG:5732 E8 inx ; CPU:$D733 PRG:5733 E8 stx Zp21 ; CPU:$D734 PRG:5734 86 21 ; ----------------------------------------------------------------------------- ; Routine: Sub_D736 ; Global: The routine calls WritePpuTileColumn. ; Local: Executes 1 instruction: calls WritePpuTileColumn. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D736: jsr WritePpuTileColumn ; CPU:$D736 PRG:5736 20 F8 D4 ; ----------------------------------------------------------------------------- ; Routine: Sub_D739 ; Global: The routine calls DrawEnemyShipSprites. ; Local: Executes 8 instructions: loads X from Zp68; increments X; copies X ; into A; ANDs A with $07; stores A to Zp68; decrements Zp0E; and 2 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N and Z flags, Zp0E, Zp68. ; ; ----------------------------------------------------------------------------- Sub_D739: ldx Zp68 ; CPU:$D739 PRG:5739 A6 68 inx ; CPU:$D73B PRG:573B E8 txa ; CPU:$D73C PRG:573C 8A and #$07 ; CPU:$D73D PRG:573D 29 07 sta Zp68 ; CPU:$D73F PRG:573F 85 68 dec Zp0E ; CPU:$D741 PRG:5741 C6 0E beq NmiHandler_OnCarryClear7 ; CPU:$D743 PRG:5743 F0 03 jmp DrawEnemyShipSprites ; CPU:$D745 PRG:5745 4C 75 D5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear7 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear7: rts ; CPU:$D748 PRG:5748 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D749 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: returns with RTS; stores A to Zp1F; sets the ; carry flag; subtracts $03 from A; branches on carry clear to ; NmiHandler_OnCarryClear7; rotates a right; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp1E, Zp1F, Zp69, $03D0, $048A. ; ; ----------------------------------------------------------------------------- Sub_D749: sta Zp1F ; CPU:$D749 PRG:5749 85 1F sec ; CPU:$D74B PRG:574B 38 sbc #$03 ; CPU:$D74C PRG:574C E9 03 bcc NmiHandler_OnCarryClear7 ; CPU:$D74E PRG:574E 90 F8 ror a ; CPU:$D750 PRG:5750 6A ldx #$CF ; CPU:$D751 PRG:5751 A2 CF bcc NmiHandler_Loop182 ; CPU:$D753 PRG:5753 90 02 ldx #$3F ; CPU:$D755 PRG:5755 A2 3F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop182 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: stores X to Zp1E; rotates a right; loads X ; with $00; branches on carry clear to NmiHandler_Loop183; increments ; X. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z and C flags, Zp1E, Zp69, $03D0, $048A. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop182: stx Zp1E ; CPU:$D757 PRG:5757 86 1E ror a ; CPU:$D759 PRG:5759 6A ldx #$00 ; CPU:$D75A PRG:575A A2 00 bcc NmiHandler_Loop183 ; CPU:$D75C PRG:575C 90 01 inx ; CPU:$D75E PRG:575E E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop183 ; Global: The routine reads $040F. ; Local: Executes 7 instructions: loads A from $048A,x; ANDs A with Zp1E; ; stores A to $048A,x; loads A from $040F; compares A with $0C; ; branches on carry clear to NmiHandler_Loop184; and 1 more ; instruction. ; Parameters: Reads $040F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z and C flags, Zp1E, Zp69, $03D0, $048A. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop183: lda $048A,x ; CPU:$D75F PRG:575F BD 8A 04 and Zp1E ; CPU:$D762 PRG:5762 25 1E sta $048A,x ; CPU:$D764 PRG:5764 9D 8A 04 lda $040F ; CPU:$D767 PRG:5767 AD 0F 04 cmp #$0C ; CPU:$D76A PRG:576A C9 0C bcc NmiHandler_Loop184 ; CPU:$D76C PRG:576C 90 01 rts ; CPU:$D76E PRG:576E 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop184 ; Global: The routine calls StoreEnemyShipSpriteType. ; Local: Executes 3 instructions: loads A with $00; stores A to Zp1E; calls ; StoreEnemyShipSpriteType. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp1E, Zp69, $03D0. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop184: lda #$00 ; CPU:$D76F PRG:576F A9 00 sta Zp1E ; CPU:$D771 PRG:5771 85 1E jmp StoreEnemyShipSpriteType ; CPU:$D773 PRG:5773 4C 61 D5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear8 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads X from Zp1F; compares X with $0C; ; branches on carry set to NmiHandler_Loop185; copies A into X; loads ; A from $FB7E,x; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear8: ldx Zp1F ; CPU:$D776 PRG:5776 A6 1F cpx #$0C ; CPU:$D778 PRG:5778 E0 0C bcs NmiHandler_Loop185 ; CPU:$D77A PRG:577A B0 05 tax ; CPU:$D77C PRG:577C AA lda $FB7E,x ; CPU:$D77D PRG:577D BD 7E FB rts ; CPU:$D780 PRG:5780 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop185 ; Global: Looks the tile id of an enemy ship up in the ship's own table. ; Local: Executes 7 instructions: clears the carry flag; adds Zp1E to A; ; copies A into X; loads A from $FC41,x; sets the carry flag; ; subtracts $01 from A; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop185: clc ; CPU:$D781 PRG:5781 18 adc Zp1E ; CPU:$D782 PRG:5782 65 1E tax ; CPU:$D784 PRG:5784 AA lda $FC41,x ; CPU:$D785 PRG:5785 BD 41 FC sec ; CPU:$D788 PRG:5788 38 sbc #$01 ; CPU:$D789 PRG:5789 E9 01 rts ; CPU:$D78B PRG:578B 60 ; ----------------------------------------------------------------------------- ; Routine: GetEnemyShipTileId ; Global: Works out the Y coordinate an enemy ship is drawn at. ; Local: Executes 30 instructions: loads X from Zp1F; compares X with $0C; ; branches on carry set to NmiHandler_Loop185; copies A into X; loads ; A from $FB7E,x; returns with RTS; and 24 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- GetEnemyShipTileId: pha ; CPU:$D78C PRG:578C 48 ora #$0F ; CPU:$D78D PRG:578D 09 0F tax ; CPU:$D78F PRG:578F AA lda $0400,x ; CPU:$D790 PRG:5790 BD 00 04 tax ; CPU:$D793 PRG:5793 AA sta Zp1F ; CPU:$D794 PRG:5794 85 1F lda $FB85,x ; CPU:$D796 PRG:5796 BD 85 FB sta Zp1E ; CPU:$D799 PRG:5799 85 1E pla ; CPU:$D79B PRG:579B 68 cmp #$10 ; CPU:$D79C PRG:579C C9 10 bcc NmiHandler_OnCarryClear8 ; CPU:$D79E PRG:579E 90 D6 and #$0F ; CPU:$D7A0 PRG:57A0 29 0F clc ; CPU:$D7A2 PRG:57A2 18 adc Zp1E ; CPU:$D7A3 PRG:57A3 65 1E tax ; CPU:$D7A5 PRG:57A5 AA lda $FC41,x ; CPU:$D7A6 PRG:57A6 BD 41 FC rts ; CPU:$D7A9 PRG:57A9 60 ; ----------------------------------------------------------------------------- ; Routine: ComputeEnemyShipY ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: ANDs A with $F0; clears the carry flag; adds ; $17 to A; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; no register, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- ComputeEnemyShipY: and #$F0 ; CPU:$D7AA PRG:57AA 29 F0 clc ; CPU:$D7AC PRG:57AC 18 adc #$17 ; CPU:$D7AD PRG:57AD 69 17 rts ; CPU:$D7AF PRG:57AF 60 ; ----------------------------------------------------------------------------- ; Routine: SubCD7B0 ; Global: Works out the screen position of an enemy ship from its table entry. ; Local: Executes 5 instructions: calls GetEnemyShipTileId; stores A to Zp11; loads A ; with $17; stores A to Zp10; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp10, Zp11, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- SubCD7B0: jsr GetEnemyShipTileId ; CPU:$D7B0 PRG:57B0 20 8C D7 sta Zp11 ; CPU:$D7B3 PRG:57B3 85 11 lda #$17 ; CPU:$D7B5 PRG:57B5 A9 17 sta Zp10 ; CPU:$D7B7 PRG:57B7 85 10 rts ; CPU:$D7B9 PRG:57B9 60 ; ----------------------------------------------------------------------------- ; Routine: ComputeEnemyShipScreenPosition ; Global: The routine calls ComputeEnemyShipY and GetEnemyShipTileId. ; Local: Executes 7 instructions: pushes A; calls ComputeEnemyShipY; stores A to Zp10; ; pulls A; calls GetEnemyShipTileId; stores A to Zp11; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp10, Zp11, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- ComputeEnemyShipScreenPosition: pha ; CPU:$D7BA PRG:57BA 48 jsr ComputeEnemyShipY ; CPU:$D7BB PRG:57BB 20 AA D7 sta Zp10 ; CPU:$D7BE PRG:57BE 85 10 pla ; CPU:$D7C0 PRG:57C0 68 jsr GetEnemyShipTileId ; CPU:$D7C1 PRG:57C1 20 8C D7 sta Zp11 ; CPU:$D7C4 PRG:57C4 85 11 rts ; CPU:$D7C6 PRG:57C6 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D7C7 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A from Zp78; stores A to Zp1C; copies ; A into X; increments X; branches on not equal to ; NmiHandler_Loop186; loads X with $F8. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D7C7: lda Zp78 ; CPU:$D7C7 PRG:57C7 A5 78 sta Zp1C ; CPU:$D7C9 PRG:57C9 85 1C tax ; CPU:$D7CB PRG:57CB AA inx ; CPU:$D7CC PRG:57CC E8 bne NmiHandler_Loop186 ; CPU:$D7CD PRG:57CD D0 02 ldx #$F8 ; CPU:$D7CF PRG:57CF A2 F8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop186 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: stores X to Zp78; ANDs A with $07; copies A ; into Y; copies A into X; increments X; increments X; and 3 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop186: stx Zp78 ; CPU:$D7D1 PRG:57D1 86 78 and #$07 ; CPU:$D7D3 PRG:57D3 29 07 tay ; CPU:$D7D5 PRG:57D5 A8 tax ; CPU:$D7D6 PRG:57D6 AA inx ; CPU:$D7D7 PRG:57D7 E8 inx ; CPU:$D7D8 PRG:57D8 E8 inx ; CPU:$D7D9 PRG:57D9 E8 lda $FDC7,y ; CPU:$D7DA PRG:57DA B9 C7 FD ldy #$09 ; CPU:$D7DD PRG:57DD A0 09 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative21 ; Global: The routine writes $04B2, $0464, $0452 and $049C. ; Local: Executes 21 instructions: stores A to $04B0,y; decrements Y; branches ; on non-negative to NmiHandler_OnNonnegative21; loads A with $02; ; stores A to $04B2; loads A with $03; and 15 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $04B2, $0464 and $0452 ; changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative21: sta $04B0,y ; CPU:$D7DF PRG:57DF 99 B0 04 dey ; CPU:$D7E2 PRG:57E2 88 bpl NmiHandler_OnNonnegative21 ; CPU:$D7E3 PRG:57E3 10 FA lda #$02 ; CPU:$D7E5 PRG:57E5 A9 02 sta $04B2 ; CPU:$D7E7 PRG:57E7 8D B2 04 lda #$03 ; CPU:$D7EA PRG:57EA A9 03 sta $0464 ; CPU:$D7EC PRG:57EC 8D 64 04 lda #$00 ; CPU:$D7EF PRG:57EF A9 00 sta $0452 ; CPU:$D7F1 PRG:57F1 8D 52 04 sta $049C ; CPU:$D7F4 PRG:57F4 8D 9C 04 sta ZpC1 ; CPU:$D7F7 PRG:57F7 85 C1 sta ZpC2 ; CPU:$D7F9 PRG:57F9 85 C2 sta ZpC3 ; CPU:$D7FB PRG:57FB 85 C3 sta ZpC4 ; CPU:$D7FD PRG:57FD 85 C4 lda #$08 ; CPU:$D7FF PRG:57FF A9 08 sta ZpC0 ; CPU:$D801 PRG:5801 85 C0 lda Zp1C ; CPU:$D803 PRG:5803 A5 1C lsr a ; CPU:$D805 PRG:5805 4A cmp #$03 ; CPU:$D806 PRG:5806 C9 03 bcc NmiHandler_Loop187 ; CPU:$D808 PRG:5808 90 02 lda #$03 ; CPU:$D80A PRG:580A A9 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop187 ; Global: The routine calls InitEnemyPathTable, writes $0478. ; Local: Executes 4 instructions: copies A into Y; loads A from $D816,y; ; stores A to $0478; calls InitEnemyPathTable. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0478 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop187: tay ; CPU:$D80C PRG:580C A8 lda $D816,y ; CPU:$D80D PRG:580D B9 16 D8 sta $0478 ; CPU:$D810 PRG:5810 8D 78 04 jmp InitEnemyPathTable ; CPU:$D813 PRG:5813 4C 42 D8 ; ---- data $D816-$D819 (4 bytes) ---- ; referenced by `lda $D816,y` at $D80D (operand $D816 falls inside this region) StageFlagCountTable: .byte $04, $03, $01, $00 ; CPU:$D816 PRG:5816 04 03 01 00 ; ----------------------------------------------------------------------------- ; Routine: Sub_D81A ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $09. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_D81A: ldx #$09 ; CPU:$D81A PRG:581A A2 09 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative22 ; Global: Initialises the table the enemy ships' flight paths are read from. ; Local: Executes 16 instructions: loads A from $FDBD,x; stores A to $04B0,x; ; decrements X; branches on non-negative to ; NmiHandler_OnNonnegative22; loads A with $02; stores A to $0464; ; and 10 more instructions. ; Parameters: Reads $0452, $045B and $0450 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0464, $049C and $0478 ; changed. ; Clobbers: ; A and X, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative22: lda $FDBD,x ; CPU:$D81C PRG:581C BD BD FD sta $04B0,x ; CPU:$D81F PRG:581F 9D B0 04 dex ; CPU:$D822 PRG:5822 CA bpl NmiHandler_OnNonnegative22 ; CPU:$D823 PRG:5823 10 F7 lda #$02 ; CPU:$D825 PRG:5825 A9 02 sta $0464 ; CPU:$D827 PRG:5827 8D 64 04 lda $0452 ; CPU:$D82A PRG:582A AD 52 04 asl a ; CPU:$D82D PRG:582D 0A asl a ; CPU:$D82E PRG:582E 0A adc $0452 ; CPU:$D82F PRG:582F 6D 52 04 tax ; CPU:$D832 PRG:5832 AA lda $FDA4,x ; CPU:$D833 PRG:5833 BD A4 FD sta $049C ; CPU:$D836 PRG:5836 8D 9C 04 lda $045B ; CPU:$D839 PRG:5839 AD 5B 04 sta $0478 ; CPU:$D83C PRG:583C 8D 78 04 ldx $0450 ; CPU:$D83F PRG:583F AE 50 04 ; ----------------------------------------------------------------------------- ; Routine: InitEnemyPathTable ; Global: The routine writes $0494 and $049B. ; Local: Executes 23 instructions: copies X into A; shifts a left; copies A ; into X; loads A from $FE3D,x; stores A to Zp74; loads A from ; $FE3E,x; and 17 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0494 and $049B changed. ; Clobbers: ; A and X, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- InitEnemyPathTable: txa ; CPU:$D842 PRG:5842 8A asl a ; CPU:$D843 PRG:5843 0A tax ; CPU:$D844 PRG:5844 AA lda $FE3D,x ; CPU:$D845 PRG:5845 BD 3D FE sta Zp74 ; CPU:$D848 PRG:5848 85 74 lda $FE3E,x ; CPU:$D84A PRG:584A BD 3E FE sta Zp75 ; CPU:$D84D PRG:584D 85 75 txa ; CPU:$D84F PRG:584F 8A sta Zp1C ; CPU:$D850 PRG:5850 85 1C asl a ; CPU:$D852 PRG:5852 0A asl a ; CPU:$D853 PRG:5853 0A adc Zp1C ; CPU:$D854 PRG:5854 65 1C adc #$CF ; CPU:$D856 PRG:5856 69 CF sta Zp76 ; CPU:$D858 PRG:5858 85 76 lda #$FD ; CPU:$D85A PRG:585A A9 FD adc #$00 ; CPU:$D85C PRG:585C 69 00 sta Zp77 ; CPU:$D85E PRG:585E 85 77 lda #$28 ; CPU:$D860 PRG:5860 A9 28 sta $0494 ; CPU:$D862 PRG:5862 8D 94 04 lda #$00 ; CPU:$D865 PRG:5865 A9 00 sta Zp73 ; CPU:$D867 PRG:5867 85 73 sta $049B ; CPU:$D869 PRG:5869 8D 9B 04 ldx #$02 ; CPU:$D86C PRG:586C A2 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative23 ; Global: Calls the flight path handler the enemy ship's state selects. ; Local: Executes 4 instructions: stores A to Zp70,x; decrements X; branches ; on non-negative to NmiHandler_OnNonnegative23; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; X, the N and Z flags, Zp70. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative23: sta Zp70,x ; CPU:$D86E PRG:586E 95 70 dex ; CPU:$D870 PRG:5870 CA bpl NmiHandler_OnNonnegative23 ; CPU:$D871 PRG:5871 10 FB rts ; CPU:$D873 PRG:5873 60 ; ----------------------------------------------------------------------------- ; Routine: CallEnemyPathHandler ; Global: The routine calls CallHandlerThroughPointer, writes $8CD8, reads $0464. ; Local: Executes 6 instructions: loads A from $0464; calls CallHandlerThroughPointer; EORs A ; with ((ZpD9),y); rotates ZpD9 right; stores Y to $8CD8; clears the ; decimal flag. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $8CD8 changed. ; Clobbers: ; A, X and Y, the N, Z, C and D flags, Zp1E, Zp1F, ZpC0, ZpD9, $0464, ; $8CD8. ; ; ----------------------------------------------------------------------------- CallEnemyPathHandler: lda $0464 ; CPU:$D874 PRG:5874 AD 64 04 jsr CallHandlerThroughPointer ; CPU:$D877 PRG:5877 20 01 C3 eor (ZpD9),y ; CPU:$D87A PRG:587A 51 D9 ror ZpD9 ; CPU:$D87C PRG:587C 66 D9 sty $8CD8 ; CPU:$D87E PRG:587E 8C D8 8C cld ; CPU:$D881 PRG:5881 D8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero9 ; Global: The routine writes $0464. ; Local: Executes 5 instructions: loads A with $00; stores A to $0464; loads A ; with $03; stores A to ZpC0; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0464 changed. ; Clobbers: ; A, the N and Z flags, ZpC0, $0464. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero9: lda #$00 ; CPU:$D882 PRG:5882 A9 00 sta $0464 ; CPU:$D884 PRG:5884 8D 64 04 lda #$03 ; CPU:$D887 PRG:5887 A9 03 sta ZpC0 ; CPU:$D889 PRG:5889 85 C0 rts ; CPU:$D88B PRG:588B 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_D88C ; Global: The routine writes $0464. ; Local: Executes 8 instructions: loads A with $00; stores A to $0464; loads A ; with $03; stores A to ZpC0; returns with RTS; loads X from Zp70; ; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0464 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_D88C: ldx Zp70 ; CPU:$D88C PRG:588C A6 70 lda $FE8F,x ; CPU:$D88E PRG:588E BD 8F FE bpl NmiHandler_Loop190 ; CPU:$D891 PRG:5891 10 45 ; ----------------------------------------------------------------------------- ; Routine: Sub_D893 ; Global: The routine writes $0464, reads $0495. ; Local: Executes 8 instructions: loads A with $00; stores A to $0464; loads A ; with $03; stores A to ZpC0; returns with RTS; loads A from $0495; ; and 2 more instructions. ; Parameters: Reads $0495 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0464 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_D893: lda $0495 ; CPU:$D893 PRG:5893 AD 95 04 ora Zp7A ; CPU:$D896 PRG:5896 05 7A beq NmiHandler_Loop188 ; CPU:$D898 PRG:5898 F0 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero10 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero10: rts ; CPU:$D89A PRG:589A 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop188 ; Global: The routine writes $0464, reads $0464. ; Local: Executes 20 instructions: loads A with $00; stores A to $0464; loads ; A with $03; stores A to ZpC0; returns with RTS; returns with RTS; ; and 14 more instructions. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0464 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop188: lda Zp7C ; CPU:$D89B PRG:589B A5 7C cmp #$02 ; CPU:$D89D PRG:589D C9 02 beq NmiHandler_OnZero10 ; CPU:$D89F PRG:589F F0 F9 dec Zp73 ; CPU:$D8A1 PRG:58A1 C6 73 bpl NmiHandler_OnZero10 ; CPU:$D8A3 PRG:58A3 10 F5 inc Zp70 ; CPU:$D8A5 PRG:58A5 E6 70 lda $FE8F,x ; CPU:$D8A7 PRG:58A7 BD 8F FE cmp #$FF ; CPU:$D8AA PRG:58AA C9 FF beq NmiHandler_OnZero9 ; CPU:$D8AC PRG:58AC F0 D4 ldx #$00 ; CPU:$D8AE PRG:58AE A2 00 lda $0464 ; CPU:$D8B0 PRG:58B0 AD 64 04 ror a ; CPU:$D8B3 PRG:58B3 6A bcc NmiHandler_Loop189 ; CPU:$D8B4 PRG:58B4 90 02 ldx #$3C ; CPU:$D8B6 PRG:58B6 A2 3C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop189 ; Global: The routine writes $049C, reads $0452. ; Local: Executes 16 instructions: stores X to Zp73; increments Zp71; ; increments Zp71; loads A from $0452; shifts a left; shifts a left; ; and 10 more instructions. ; Parameters: Reads $0452 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $049C changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop189: stx Zp73 ; CPU:$D8B8 PRG:58B8 86 73 inc Zp71 ; CPU:$D8BA PRG:58BA E6 71 inc Zp71 ; CPU:$D8BC PRG:58BC E6 71 lda $0452 ; CPU:$D8BE PRG:58BE AD 52 04 asl a ; CPU:$D8C1 PRG:58C1 0A asl a ; CPU:$D8C2 PRG:58C2 0A adc $0452 ; CPU:$D8C3 PRG:58C3 6D 52 04 sta Zp1C ; CPU:$D8C6 PRG:58C6 85 1C lda Zp71 ; CPU:$D8C8 PRG:58C8 A5 71 lsr a ; CPU:$D8CA PRG:58CA 4A adc Zp1C ; CPU:$D8CB PRG:58CB 65 1C tax ; CPU:$D8CD PRG:58CD AA lda $FDA4,x ; CPU:$D8CE PRG:58CE BD A4 FD sta $049C ; CPU:$D8D1 PRG:58D1 8D 9C 04 lda #$08 ; CPU:$D8D4 PRG:58D4 A9 08 sta ZpC0 ; CPU:$D8D6 PRG:58D6 85 C0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop190 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads Y from Zp71; loads A from Zp72; ; compares A with ((Zp74),y); branches on carry set to ; NmiHandler_Loop191; increments Zp72; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop190: ldy Zp71 ; CPU:$D8D8 PRG:58D8 A4 71 lda Zp72 ; CPU:$D8DA PRG:58DA A5 72 cmp (Zp74),y ; CPU:$D8DC PRG:58DC D1 74 bcs NmiHandler_Loop191 ; CPU:$D8DE PRG:58DE B0 03 inc Zp72 ; CPU:$D8E0 PRG:58E0 E6 72 rts ; CPU:$D8E2 PRG:58E2 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop191 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $00; stores A to Zp72. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop191: lda #$00 ; CPU:$D8E3 PRG:58E3 A9 00 sta Zp72 ; CPU:$D8E5 PRG:58E5 85 72 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative24 ; Global: The routine calls ClearPlayerSpriteBuffer, Sub_D93F, NmiHandler_Loop210 and ; NmiHandler_Loop194, reads $0464. ; Local: Executes 20 instructions: calls ClearPlayerSpriteBuffer; loads X from Zp70; loads A ; from $FE8F,x; stores A to SpriteIndex; branches on equal to ; NmiHandler_OnZero11; compares A with $01; and 14 more instructions. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative24: jsr ClearPlayerSpriteBuffer ; CPU:$D8E7 PRG:58E7 20 D8 DA ldx Zp70 ; CPU:$D8EA PRG:58EA A6 70 lda $FE8F,x ; CPU:$D8EC PRG:58EC BD 8F FE sta SpriteIndex ; CPU:$D8EF PRG:58EF 85 2B beq NmiHandler_OnZero11 ; CPU:$D8F1 PRG:58F1 F0 20 cmp #$01 ; CPU:$D8F3 PRG:58F3 C9 01 bne NmiHandler_Loop193 ; CPU:$D8F5 PRG:58F5 D0 31 lda Zp7C ; CPU:$D8F7 PRG:58F7 A5 7C bpl NmiHandler_Loop194 ; CPU:$D8F9 PRG:58F9 10 3F lda $0464 ; CPU:$D8FB PRG:58FB AD 64 04 ror a ; CPU:$D8FE PRG:58FE 6A bcs NmiHandler_Loop194 ; CPU:$D8FF PRG:58FF B0 39 jsr Sub_D93F ; CPU:$D901 PRG:5901 20 3F D9 ldx #$01 ; CPU:$D904 PRG:5904 A2 01 stx Zp20 ; CPU:$D906 PRG:5906 86 20 inx ; CPU:$D908 PRG:5908 E8 stx Zp7C ; CPU:$D909 PRG:5909 86 7C ldy #$10 ; CPU:$D90B PRG:590B A0 10 jsr NmiHandler_Loop210 ; CPU:$D90D PRG:590D 20 21 DB jmp NmiHandler_Loop194 ; CPU:$D910 PRG:5910 4C 3A D9 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero11 ; Global: The routine calls ClearPlayerSpriteBuffer, Sub_D93F, NmiHandler_Loop210, ; NmiHandler_Loop194 and 1 more, reads $0464 and $049C. ; Local: Executes 28 instructions: calls ClearPlayerSpriteBuffer; loads X from Zp70; loads A ; from $FE8F,x; stores A to SpriteIndex; branches on equal to ; NmiHandler_OnZero11; compares A with $01; and 22 more instructions. ; Parameters: Reads $0464 and $049C from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero11: lda $049C ; CPU:$D913 PRG:5913 AD 9C 04 bne NmiHandler_Loop192 ; CPU:$D916 PRG:5916 D0 0D inx ; CPU:$D918 PRG:5918 E8 inc Zp70 ; CPU:$D919 PRG:5919 E6 70 lda $FE8F,x ; CPU:$D91B PRG:591B BD 8F FE beq NmiHandler_OnZero11 ; CPU:$D91E PRG:591E F0 F3 bpl NmiHandler_OnNonnegative24 ; CPU:$D920 PRG:5920 10 C5 jmp Sub_D893 ; CPU:$D922 PRG:5922 4C 93 D8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop192 ; Global: The routine reads $049C. ; Local: Executes 1 instruction: decrements $049C. ; Parameters: Reads $049C from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop192: dec $049C ; CPU:$D925 PRG:5925 CE 9C 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop193 ; Global: The routine calls Sub_D93F and Sub_DB10, reads $0453. ; Local: Executes 8 instructions: calls Sub_D93F; stores A to Zp20; copies Y ; into A; EORs A with $01; stores A to Zp71; loads A from $0453; and ; 2 more instructions. ; Parameters: Reads $0453 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop193: jsr Sub_D93F ; CPU:$D928 PRG:5928 20 3F D9 sta Zp20 ; CPU:$D92B PRG:592B 85 20 tya ; CPU:$D92D PRG:592D 98 eor #$01 ; CPU:$D92E PRG:592E 49 01 sta Zp71 ; CPU:$D930 PRG:5930 85 71 lda $0453 ; CPU:$D932 PRG:5932 AD 53 04 sta Zp2C ; CPU:$D935 PRG:5935 85 2C jsr Sub_DB10 ; CPU:$D937 PRG:5937 20 10 DB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop194 ; Global: The routine calls Sub_D88C. ; Local: Executes 2 instructions: increments Zp70; calls Sub_D88C. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; no register, the N and Z flags, Zp70. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop194: inc Zp70 ; CPU:$D93A PRG:593A E6 70 jmp Sub_D88C ; CPU:$D93C PRG:593C 4C 8C D8 ; ----------------------------------------------------------------------------- ; Routine: Sub_D93F ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads Y from Zp71; loads A from ((Zp76),y); ; ANDs A with $80; stores A to Zp27; loads A from ((Zp76),y); ANDs A ; with $7F; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, Zp27. ; ; ----------------------------------------------------------------------------- Sub_D93F: ldy Zp71 ; CPU:$D93F PRG:593F A4 71 lda (Zp76),y ; CPU:$D941 PRG:5941 B1 76 and #$80 ; CPU:$D943 PRG:5943 29 80 sta Zp27 ; CPU:$D945 PRG:5945 85 27 lda (Zp76),y ; CPU:$D947 PRG:5947 B1 76 and #$7F ; CPU:$D949 PRG:5949 29 7F sta SpriteY ; CPU:$D94B PRG:594B 85 25 lda $04B0,y ; CPU:$D94D PRG:594D B9 B0 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarrySet3 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarrySet3: rts ; CPU:$D950 PRG:5950 60 ; ----------------------------------------------------------------------------- ; Routine: SubCD951 ; Global: The routine writes $0464, reads $0459, $0494, $0495 and $0476. ; Local: Executes 9 instructions: returns with RTS; loads A from $0459; ; compares A with $0494; branches on carry clear to ; NmiHandler_Loop195; loads A with $01; stores A to $0464; and 3 more ; instructions. ; Parameters: Reads $0459, $0494, $0495 and $0476 from the zero page and RAM; ; the values it acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0464 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCD951: lda $0459 ; CPU:$D951 PRG:5951 AD 59 04 cmp $0494 ; CPU:$D954 PRG:5954 CD 94 04 bcc NmiHandler_Loop195 ; CPU:$D957 PRG:5957 90 0D lda #$01 ; CPU:$D959 PRG:5959 A9 01 sta $0464 ; CPU:$D95B PRG:595B 8D 64 04 lda $0495 ; CPU:$D95E PRG:595E AD 95 04 cmp $0476 ; CPU:$D961 PRG:5961 CD 76 04 bcs NmiHandler_OnCarrySet3 ; CPU:$D964 PRG:5964 B0 EA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop195 ; Global: The routine calls ClearPlayerSpriteBuffer, reads $0495, $045A and $0494. ; Local: Executes 15 instructions: returns with RTS; loads A from $0495; ; compares A with $08; branches on carry set to ; NmiHandler_OnCarrySet3; loads A from Zp7A; branches on not equal to ; NmiHandler_OnCarrySet3; and 9 more instructions. ; Parameters: Reads $0495, $045A and $0494 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop195: lda $0495 ; CPU:$D966 PRG:5966 AD 95 04 cmp #$08 ; CPU:$D969 PRG:5969 C9 08 bcs NmiHandler_OnCarrySet3 ; CPU:$D96B PRG:596B B0 E3 lda Zp7A ; CPU:$D96D PRG:596D A5 7A bne NmiHandler_OnCarrySet3 ; CPU:$D96F PRG:596F D0 DF jsr ClearPlayerSpriteBuffer ; CPU:$D971 PRG:5971 20 D8 DA lda $045A ; CPU:$D974 PRG:5974 AD 5A 04 beq NmiHandler_Loop197 ; CPU:$D977 PRG:5977 F0 57 lda $0494 ; CPU:$D979 PRG:5979 AD 94 04 sec ; CPU:$D97C PRG:597C 38 sbc #$05 ; CPU:$D97D PRG:597D E9 05 cmp #$06 ; CPU:$D97F PRG:597F C9 06 bcs NmiHandler_Loop197 ; CPU:$D981 PRG:5981 B0 4D ldx #$00 ; CPU:$D983 PRG:5983 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear9 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads A from $FED5,x; copies A into Y; loads ; A from $0400,y; branches on not equal to NmiHandler_Loop196; ; increments X; compares X with $24; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear9: lda $FED5,x ; CPU:$D985 PRG:5985 BD D5 FE tay ; CPU:$D988 PRG:5988 A8 lda $0400,y ; CPU:$D989 PRG:5989 B9 00 04 bne NmiHandler_Loop196 ; CPU:$D98C PRG:598C D0 07 inx ; CPU:$D98E PRG:598E E8 cpx #$24 ; CPU:$D98F PRG:598F E0 24 bcc NmiHandler_OnCarryClear9 ; CPU:$D991 PRG:5991 90 F2 bcs NmiHandler_Loop197 ; CPU:$D993 PRG:5993 B0 3B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop196 ; Global: The routine calls Sub_DAE2 and NmiHandler_Loop210, writes $05A0, ; $045A and $0599, reads $045A. ; Local: Executes 23 instructions: stores Y to SpriteIndex; loads X from ; $045A; loads A from $D9C9,x; stores A to Zp20; stores A to ; SpriteAttr; loads A from $D9CC,x; and 17 more instructions. ; Parameters: Reads $045A from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $05A0, $045A and $0599 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop196: sty SpriteIndex ; CPU:$D995 PRG:5995 84 2B ldx $045A ; CPU:$D997 PRG:5997 AE 5A 04 lda $D9C9,x ; CPU:$D99A PRG:599A BD C9 D9 sta Zp20 ; CPU:$D99D PRG:599D 85 20 sta SpriteAttr ; CPU:$D99F PRG:599F 85 2D lda $D9CC,x ; CPU:$D9A1 PRG:59A1 BD CC D9 sta SpriteY ; CPU:$D9A4 PRG:59A4 85 25 jsr Sub_DAE2 ; CPU:$D9A6 PRG:59A6 20 E2 DA ldy #$00 ; CPU:$D9A9 PRG:59A9 A0 00 sty $05A0 ; CPU:$D9AB PRG:59AB 8C A0 05 sty $045A ; CPU:$D9AE PRG:59AE 8C 5A 04 sty SpriteIndex ; CPU:$D9B1 PRG:59B1 84 2B iny ; CPU:$D9B3 PRG:59B3 C8 sty $0599 ; CPU:$D9B4 PRG:59B4 8C 99 05 inc SpriteY ; CPU:$D9B7 PRG:59B7 E6 25 lda Zp20 ; CPU:$D9B9 PRG:59B9 A5 20 ora #$80 ; CPU:$D9BB PRG:59BB 09 80 sta Zp20 ; CPU:$D9BD PRG:59BD 85 20 ldy #$C0 ; CPU:$D9BF PRG:59BF A0 C0 jsr NmiHandler_Loop210 ; CPU:$D9C1 PRG:59C1 20 21 DB ldy #$D0 ; CPU:$D9C4 PRG:59C4 A0 D0 jsr NmiHandler_Loop210 ; CPU:$D9C6 PRG:59C6 20 21 DB rts ; CPU:$D9C9 PRG:59C9 60 ; ---- data $D9CA-$D9CF (6 bytes) ---- ; referenced by `lda $D9CC,x` at $D9A1 (operand $D9CC falls inside this region) EnemySpritePositionTable: .byte $07, $08, $06, $29, $2B, $2D ; CPU:$D9CA PRG:59CA 07 08 06 29 2B 2D ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop197 ; Global: The routine reads $0473, $046A and $0467. ; Local: Executes 7 instructions: loads A from $0473; branches on not equal to ; NmiHandler_Loop198; increments $046A; loads A from $046A; compares ; A with $0467; branches on carry clear to NmiHandler_Loop198; and 1 ; more instruction. ; Parameters: Reads $0473, $046A and $0467 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop197: lda $0473 ; CPU:$D9D0 PRG:59D0 AD 73 04 bne NmiHandler_Loop198 ; CPU:$D9D3 PRG:59D3 D0 1B inc $046A ; CPU:$D9D5 PRG:59D5 EE 6A 04 lda $046A ; CPU:$D9D8 PRG:59D8 AD 6A 04 cmp $0467 ; CPU:$D9DB PRG:59DB CD 67 04 bcc NmiHandler_Loop198 ; CPU:$D9DE PRG:59DE 90 10 ldx #$00 ; CPU:$D9E0 PRG:59E0 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear10 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads A from $FED1,x; copies A into Y; loads ; A from $0400,y; branches on not equal to NmiHandler_Loop199; ; increments X; compares X with $04; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear10: lda $FED1,x ; CPU:$D9E2 PRG:59E2 BD D1 FE tay ; CPU:$D9E5 PRG:59E5 A8 lda $0400,y ; CPU:$D9E6 PRG:59E6 B9 00 04 bne NmiHandler_Loop199 ; CPU:$D9E9 PRG:59E9 D0 08 inx ; CPU:$D9EB PRG:59EB E8 cpx #$04 ; CPU:$D9EC PRG:59EC E0 04 bcc NmiHandler_OnCarryClear10 ; CPU:$D9EE PRG:59EE 90 F2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop198 ; Global: The routine calls Sub_DA73. ; Local: Executes 1 instruction: calls Sub_DA73. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop198: jmp Sub_DA73 ; CPU:$D9F0 PRG:59F0 4C 73 DA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop199 ; Global: The routine calls Sub_C317, NmiHandler_Loop209 and Sub_DA6D, reads ; $049B. ; Local: Executes 18 instructions: stores Y to SpriteIndex; EORs A with $FF; ; sets the carry flag; adds $04 to A; stores A to Zp20; calls ; Sub_C317; and 12 more instructions. ; Parameters: Reads $049B from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop199: sty SpriteIndex ; CPU:$D9F3 PRG:59F3 84 2B eor #$FF ; CPU:$D9F5 PRG:59F5 49 FF sec ; CPU:$D9F7 PRG:59F7 38 adc #$04 ; CPU:$D9F8 PRG:59F8 69 04 sta Zp20 ; CPU:$D9FA PRG:59FA 85 20 jsr Sub_C317 ; CPU:$D9FC PRG:59FC 20 17 C3 and #$80 ; CPU:$D9FF PRG:59FF 29 80 sta Zp27 ; CPU:$DA01 PRG:5A01 85 27 lda Zp79 ; CPU:$DA03 PRG:5A03 A5 79 bne NmiHandler_Loop200 ; CPU:$DA05 PRG:5A05 D0 13 lda $049B ; CPU:$DA07 PRG:5A07 AD 9B 04 inc $049B ; CPU:$DA0A PRG:5A0A EE 9B 04 ror a ; CPU:$DA0D PRG:5A0D 6A bcc NmiHandler_Loop200 ; CPU:$DA0E PRG:5A0E 90 0A lda #$21 ; CPU:$DA10 PRG:5A10 A9 21 sta SpriteY ; CPU:$DA12 PRG:5A12 85 25 jsr NmiHandler_Loop209 ; CPU:$DA14 PRG:5A14 20 F9 DA jmp Sub_DA6D ; CPU:$DA17 PRG:5A17 4C 6D DA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop200 ; Global: The routine calls Sub_DAF4. ; Local: Executes 14 instructions: loads A with $20; stores A to SpriteY; ; calls Sub_DAF4; stores Y to Zp1C; loads A from SpriteIndex; clears ; the carry flag; and 8 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop200: lda #$20 ; CPU:$DA1A PRG:5A1A A9 20 sta SpriteY ; CPU:$DA1C PRG:5A1C 85 25 jsr Sub_DAF4 ; CPU:$DA1E PRG:5A1E 20 F4 DA sty Zp1C ; CPU:$DA21 PRG:5A21 84 1C lda SpriteIndex ; CPU:$DA23 PRG:5A23 A5 2B clc ; CPU:$DA25 PRG:5A25 18 adc #$0F ; CPU:$DA26 PRG:5A26 69 0F sta Zp1D ; CPU:$DA28 PRG:5A28 85 1D lda Zp27 ; CPU:$DA2A PRG:5A2A A5 27 sta Zp1A ; CPU:$DA2C PRG:5A2C 85 1A lda #$00 ; CPU:$DA2E PRG:5A2E A9 00 sta Zp18 ; CPU:$DA30 PRG:5A30 85 18 lda #$03 ; CPU:$DA32 PRG:5A32 A9 03 sta Zp1B ; CPU:$DA34 PRG:5A34 85 1B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero45 ; Global: The routine calls ClearPlayerSpriteBuffer and Sub_DAF4. ; Local: Executes 18 instructions: loads X from Zp1D; loads A from $0400,x; ; branches on equal to NmiHandler_Loop201; calls ClearPlayerSpriteBuffer; loads A ; from Zp1D; stores A to SpriteIndex; and 12 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero45: ldx Zp1D ; CPU:$DA36 PRG:5A36 A6 1D lda $0400,x ; CPU:$DA38 PRG:5A38 BD 00 04 beq NmiHandler_Loop201 ; CPU:$DA3B PRG:5A3B F0 20 jsr ClearPlayerSpriteBuffer ; CPU:$DA3D PRG:5A3D 20 D8 DA lda Zp1D ; CPU:$DA40 PRG:5A40 A5 1D sta SpriteIndex ; CPU:$DA42 PRG:5A42 85 2B lda Zp1A ; CPU:$DA44 PRG:5A44 A5 1A sta Zp27 ; CPU:$DA46 PRG:5A46 85 27 lda #$04 ; CPU:$DA48 PRG:5A48 A9 04 sta Zp20 ; CPU:$DA4A PRG:5A4A 85 20 sta SpriteAttr ; CPU:$DA4C PRG:5A4C 85 2D lda #$27 ; CPU:$DA4E PRG:5A4E A9 27 sta SpriteY ; CPU:$DA50 PRG:5A50 85 25 jsr Sub_DAF4 ; CPU:$DA52 PRG:5A52 20 F4 DA inc Zp18 ; CPU:$DA55 PRG:5A55 E6 18 lda Zp18 ; CPU:$DA57 PRG:5A57 A5 18 cmp #$02 ; CPU:$DA59 PRG:5A59 C9 02 bcs NmiHandler_Loop202 ; CPU:$DA5B PRG:5A5B B0 06 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop201 ; Global: The routine calls ClearPlayerSpriteBuffer and Sub_DAF4. ; Local: Executes 21 instructions: loads X from Zp1D; loads A from $0400,x; ; branches on equal to NmiHandler_Loop201; calls ClearPlayerSpriteBuffer; loads A ; from Zp1D; stores A to SpriteIndex; and 15 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop201: inc Zp1D ; CPU:$DA5D PRG:5A5D E6 1D dec Zp1B ; CPU:$DA5F PRG:5A5F C6 1B bne NmiHandler_OnNonzero45 ; CPU:$DA61 PRG:5A61 D0 D3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop202 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads X from Zp1C; decrements X; decrements ; X; decrements X; loads A from Zp18; stores A to $0200,x. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, the OAM shadow, $046A. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop202: ldx Zp1C ; CPU:$DA63 PRG:5A63 A6 1C dex ; CPU:$DA65 PRG:5A65 CA dex ; CPU:$DA66 PRG:5A66 CA dex ; CPU:$DA67 PRG:5A67 CA lda Zp18 ; CPU:$DA68 PRG:5A68 A5 18 sta $0200,x ; CPU:$DA6A PRG:5A6A 9D 00 02 ; ----------------------------------------------------------------------------- ; Routine: Sub_DA6D ; Global: The routine writes $046A. ; Local: Executes 3 instructions: loads A with $00; stores A to $046A; returns ; with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $046A changed. ; Clobbers: ; A, the N and Z flags, $046A. ; ; ----------------------------------------------------------------------------- Sub_DA6D: lda #$00 ; CPU:$DA6D PRG:5A6D A9 00 sta $046A ; CPU:$DA6F PRG:5A6F 8D 6A 04 rts ; CPU:$DA72 PRG:5A72 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_DA73 ; Global: The routine reads $0468 and $0465. ; Local: Executes 8 instructions: loads A from Zp48; rotates a right; branches ; on carry clear to NmiHandler_Loop205; increments $0468; loads A ; from $0468; compares A with $0465; and 2 more instructions. ; Parameters: Reads $0468 and $0465 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_DA73: lda Zp48 ; CPU:$DA73 PRG:5A73 A5 48 ror a ; CPU:$DA75 PRG:5A75 6A bcc NmiHandler_Loop205 ; CPU:$DA76 PRG:5A76 90 30 inc $0468 ; CPU:$DA78 PRG:5A78 EE 68 04 lda $0468 ; CPU:$DA7B PRG:5A7B AD 68 04 cmp $0465 ; CPU:$DA7E PRG:5A7E CD 65 04 bcs NmiHandler_Loop203 ; CPU:$DA81 PRG:5A81 B0 01 rts ; CPU:$DA83 PRG:5A83 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop203 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop203: ldx #$00 ; CPU:$DA84 PRG:5A84 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear11 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads A from $FEE9,x; copies A into Y; loads ; A from $0400,y; branches on not equal to NmiHandler_Loop204; ; increments X; compares X with $10; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear11: lda $FEE9,x ; CPU:$DA86 PRG:5A86 BD E9 FE tay ; CPU:$DA89 PRG:5A89 A8 lda $0400,y ; CPU:$DA8A PRG:5A8A B9 00 04 bne NmiHandler_Loop204 ; CPU:$DA8D PRG:5A8D D0 06 inx ; CPU:$DA8F PRG:5A8F E8 cpx #$10 ; CPU:$DA90 PRG:5A90 E0 10 bcc NmiHandler_OnCarryClear11 ; CPU:$DA92 PRG:5A92 90 F2 rts ; CPU:$DA94 PRG:5A94 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop204 ; Global: The routine calls Sub_DAE2, writes $0468. ; Local: Executes 9 instructions: stores Y to SpriteIndex; loads A with $04; ; stores A to Zp20; loads A with $1E; stores A to SpriteY; calls ; Sub_DAE2; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0468 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop204: sty SpriteIndex ; CPU:$DA95 PRG:5A95 84 2B lda #$04 ; CPU:$DA97 PRG:5A97 A9 04 sta Zp20 ; CPU:$DA99 PRG:5A99 85 20 lda #$1E ; CPU:$DA9B PRG:5A9B A9 1E sta SpriteY ; CPU:$DA9D PRG:5A9D 85 25 jsr Sub_DAE2 ; CPU:$DA9F PRG:5A9F 20 E2 DA lda #$00 ; CPU:$DAA2 PRG:5AA2 A9 00 sta $0468 ; CPU:$DAA4 PRG:5AA4 8D 68 04 rts ; CPU:$DAA7 PRG:5AA7 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop205 ; Global: The routine reads $0469 and $0466. ; Local: Executes 5 instructions: increments $0469; loads A from $0469; ; compares A with $0466; branches on carry set to NmiHandler_Loop206; ; returns with RTS. ; Parameters: Reads $0469 and $0466 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop205: inc $0469 ; CPU:$DAA8 PRG:5AA8 EE 69 04 lda $0469 ; CPU:$DAAB PRG:5AAB AD 69 04 cmp $0466 ; CPU:$DAAE PRG:5AAE CD 66 04 bcs NmiHandler_Loop206 ; CPU:$DAB1 PRG:5AB1 B0 01 rts ; CPU:$DAB3 PRG:5AB3 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop206 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop206: ldx #$00 ; CPU:$DAB4 PRG:5AB4 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear12 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads A from $FED5,x; copies A into Y; loads ; A from $0400,y; branches on not equal to NmiHandler_Loop207; ; increments X; compares X with $14; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear12: lda $FED5,x ; CPU:$DAB6 PRG:5AB6 BD D5 FE tay ; CPU:$DAB9 PRG:5AB9 A8 lda $0400,y ; CPU:$DABA PRG:5ABA B9 00 04 bne NmiHandler_Loop207 ; CPU:$DABD PRG:5ABD D0 06 inx ; CPU:$DABF PRG:5ABF E8 cpx #$14 ; CPU:$DAC0 PRG:5AC0 E0 14 bcc NmiHandler_OnCarryClear12 ; CPU:$DAC2 PRG:5AC2 90 F2 rts ; CPU:$DAC4 PRG:5AC4 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop207 ; Global: Clears the sixteen bytes of the player ship's sprite buffer. ; Local: Executes 9 instructions: stores Y to SpriteIndex; loads A with $05; ; stores A to Zp20; loads A with $1A; stores A to SpriteY; calls ; Sub_DAE2; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0469 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop207: sty SpriteIndex ; CPU:$DAC5 PRG:5AC5 84 2B lda #$05 ; CPU:$DAC7 PRG:5AC7 A9 05 sta Zp20 ; CPU:$DAC9 PRG:5AC9 85 20 lda #$1A ; CPU:$DACB PRG:5ACB A9 1A sta SpriteY ; CPU:$DACD PRG:5ACD 85 25 jsr Sub_DAE2 ; CPU:$DACF PRG:5ACF 20 E2 DA lda #$00 ; CPU:$DAD2 PRG:5AD2 A9 00 sta $0469 ; CPU:$DAD4 PRG:5AD4 8D 69 04 rts ; CPU:$DAD7 PRG:5AD7 60 ; ----------------------------------------------------------------------------- ; Routine: ClearPlayerSpriteBuffer ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads X with $0F; loads A with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp20. ; ; ----------------------------------------------------------------------------- ClearPlayerSpriteBuffer: ldx #$0F ; CPU:$DAD8 PRG:5AD8 A2 0F lda #$00 ; CPU:$DADA PRG:5ADA A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative25 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: stores A to Zp20,x; decrements X; branches ; on non-negative to NmiHandler_OnNonnegative25; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; X, the N and Z flags, Zp20. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative25: sta Zp20,x ; CPU:$DADC PRG:5ADC 95 20 dex ; CPU:$DADE PRG:5ADE CA bpl NmiHandler_OnNonnegative25 ; CPU:$DADF PRG:5ADF 10 FB rts ; CPU:$DAE1 PRG:5AE1 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_DAE2 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A from SpriteIndex; ANDs A with $0F; ; compares A with $05; branches on carry set to NmiHandler_Loop208; ; loads A with $80; stores A to Zp27. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_DAE2: lda SpriteIndex ; CPU:$DAE2 PRG:5AE2 A5 2B and #$0F ; CPU:$DAE4 PRG:5AE4 29 0F cmp #$05 ; CPU:$DAE6 PRG:5AE6 C9 05 bcs NmiHandler_Loop208 ; CPU:$DAE8 PRG:5AE8 B0 04 lda #$80 ; CPU:$DAEA PRG:5AEA A9 80 sta Zp27 ; CPU:$DAEC PRG:5AEC 85 27 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop208 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A from Zp20; compares A with $06; ; branches on carry set to NmiHandler_Loop209. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop208: lda Zp20 ; CPU:$DAEE PRG:5AEE A5 20 cmp #$06 ; CPU:$DAF0 PRG:5AF0 C9 06 bcs NmiHandler_Loop209 ; CPU:$DAF2 PRG:5AF2 B0 05 ; ----------------------------------------------------------------------------- ; Routine: Sub_DAF4 ; Global: The routine reads $0470. ; Local: Executes 2 instructions: loads A from $0470; stores A to Zp2C. ; Parameters: Reads $0470 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_DAF4: lda $0470 ; CPU:$DAF4 PRG:5AF4 AD 70 04 sta Zp2C ; CPU:$DAF7 PRG:5AF7 85 2C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop209 ; Global: The routine calls SpawnEnemyShip and ComputeEnemyShipScreenPosition, writes $05A0. ; Local: Executes 10 instructions: loads A from SpriteIndex; calls SpawnEnemyShip; ; loads A from SpriteIndex; calls ComputeEnemyShipScreenPosition; loads A from Zp10; stores ; A to Zp22; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $05A0 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop209: lda SpriteIndex ; CPU:$DAF9 PRG:5AF9 A5 2B jsr SpawnEnemyShip ; CPU:$DAFB PRG:5AFB 20 18 D5 lda SpriteIndex ; CPU:$DAFE PRG:5AFE A5 2B jsr ComputeEnemyShipScreenPosition ; CPU:$DB00 PRG:5B00 20 BA D7 lda Zp10 ; CPU:$DB03 PRG:5B03 A5 10 sta Zp22 ; CPU:$DB05 PRG:5B05 85 22 lda Zp11 ; CPU:$DB07 PRG:5B07 A5 11 sta Zp23 ; CPU:$DB09 PRG:5B09 85 23 lda #$01 ; CPU:$DB0B PRG:5B0B A9 01 sta $05A0 ; CPU:$DB0D PRG:5B0D 8D A0 05 ; ----------------------------------------------------------------------------- ; Routine: Sub_DB10 ; Global: The routine reads $0495. ; Local: Executes 2 instructions: increments $0495; loads Y with $20. ; Parameters: Reads $0495 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp29, Zp2A, the OAM shadow, $0495. ; ; ----------------------------------------------------------------------------- Sub_DB10: inc $0495 ; CPU:$DB10 PRG:5B10 EE 95 04 ldy #$20 ; CPU:$DB13 PRG:5B13 A0 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero46 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads A from $0200,y; branches on negative ; to NmiHandler_Loop210; copies Y into A; clears the carry flag; adds ; $10 to A; copies A into Y; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp29, Zp2A, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero46: lda $0200,y ; CPU:$DB15 PRG:5B15 B9 00 02 bmi NmiHandler_Loop210 ; CPU:$DB18 PRG:5B18 30 07 tya ; CPU:$DB1A PRG:5B1A 98 clc ; CPU:$DB1B PRG:5B1B 18 adc #$10 ; CPU:$DB1C PRG:5B1C 69 10 tay ; CPU:$DB1E PRG:5B1E A8 bne NmiHandler_OnNonzero46 ; CPU:$DB1F PRG:5B1F D0 F4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop210 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $08; stores A to Zp29; stores A ; to Zp2A; loads X with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp29, Zp2A, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop210: lda #$08 ; CPU:$DB21 PRG:5B21 A9 08 sta Zp29 ; CPU:$DB23 PRG:5B23 85 29 sta Zp2A ; CPU:$DB25 PRG:5B25 85 2A ldx #$00 ; CPU:$DB27 PRG:5B27 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero47 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads A from Zp20,x; stores A to $0200,y; ; increments Y; increments X; compares X with $10; branches on not ; equal to NmiHandler_OnNonzero47; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero47: lda Zp20,x ; CPU:$DB29 PRG:5B29 B5 20 sta $0200,y ; CPU:$DB2B PRG:5B2B 99 00 02 iny ; CPU:$DB2E PRG:5B2E C8 inx ; CPU:$DB2F PRG:5B2F E8 cpx #$10 ; CPU:$DB30 PRG:5B30 E0 10 bne NmiHandler_OnNonzero47 ; CPU:$DB32 PRG:5B32 D0 F5 rts ; CPU:$DB34 PRG:5B34 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_DB35 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads A with $02; stores A to ; StarFieldPtrHi; loads X with $20; loads A from Zp7C; compares A ; with $02; branches on not equal to NmiHandler_Loop211; and 1 more ; instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- Sub_DB35: lda #$02 ; CPU:$DB35 PRG:5B35 A9 02 sta StarFieldPtrHi ; CPU:$DB37 PRG:5B37 85 01 ldx #$20 ; CPU:$DB39 PRG:5B39 A2 20 lda Zp7C ; CPU:$DB3B PRG:5B3B A5 7C cmp #$02 ; CPU:$DB3D PRG:5B3D C9 02 bne NmiHandler_Loop211 ; CPU:$DB3F PRG:5B3F D0 02 ldx #$10 ; CPU:$DB41 PRG:5B41 A2 10 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop211 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores X to StarFieldPtrLo. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop211: stx StarFieldPtrLo ; CPU:$DB43 PRG:5B43 86 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear13 ; Global: The routine calls Sub_DB5A. ; Local: Executes 4 instructions: loads Y with $00; loads A from ; ((StarFieldPtrLo),y); branches on negative to NmiHandler_Loop212; ; calls Sub_DB5A. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear13: ldy #$00 ; CPU:$DB45 PRG:5B45 A0 00 lda (StarFieldPtrLo),y ; CPU:$DB47 PRG:5B47 B1 00 bmi NmiHandler_Loop212 ; CPU:$DB49 PRG:5B49 30 03 jsr Sub_DB5A ; CPU:$DB4B PRG:5B4B 20 5A DB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop212 ; Global: The routine calls Sub_DB5A. ; Local: Executes 11 instructions: loads Y with $00; loads A from ; ((StarFieldPtrLo),y); branches on negative to NmiHandler_Loop212; ; calls Sub_DB5A; loads A from StarFieldPtrLo; clears the carry flag; ; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop212: lda StarFieldPtrLo ; CPU:$DB4E PRG:5B4E A5 00 clc ; CPU:$DB50 PRG:5B50 18 adc #$10 ; CPU:$DB51 PRG:5B51 69 10 sta StarFieldPtrLo ; CPU:$DB53 PRG:5B53 85 00 cmp #$E0 ; CPU:$DB55 PRG:5B55 C9 E0 bcc NmiHandler_OnCarryClear13 ; CPU:$DB57 PRG:5B57 90 EC rts ; CPU:$DB59 PRG:5B59 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_DB5A ; Global: The routine calls GetEnemyPathTableEntry. ; Local: Executes 1 instruction: calls GetEnemyPathTableEntry. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp02, Zp03, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- Sub_DB5A: jsr GetEnemyPathTableEntry ; CPU:$DB5A PRG:5B5A 20 E0 DF ; ----------------------------------------------------------------------------- ; Routine: Sub_DB5D ; Global: The routine calls CallHandlerThroughPointer. ; Local: Executes 4 instructions: loads Y with $07; loads A from ; ((StarFieldPtrLo),y); ANDs A with $7F; calls CallHandlerThroughPointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- Sub_DB5D: ldy #$07 ; CPU:$DB5D PRG:5B5D A0 07 lda (StarFieldPtrLo),y ; CPU:$DB5F PRG:5B5F B1 00 and #$7F ; CPU:$DB61 PRG:5B61 29 7F jsr CallHandlerThroughPointer ; CPU:$DB63 PRG:5B63 20 01 C3 .byte $80, $DB ; CPU:$DB66 PRG:5B66 80 DB -- nop #$DB (undocumented; ca65 cannot encode) ; CPU:$DB66 PRG:5B66 80 DB cmp (ZpDE,x) ; CPU:$DB68 PRG:5B68 C1 DE cld ; CPU:$DB6A PRG:5B6A D8 cmp $DF84,x ; CPU:$DB6B PRG:5B6B DD 84 DF .byte $6F, $DF, $97 ; CPU:$DB6E PRG:5B6E 6F DF 97 -- rra $97DF (undocumented; ca65 cannot encode) ; CPU:$DB6E PRG:5B6E 6F DF 97 .byte $DF, $BC, $DF ; CPU:$DB71 PRG:5B71 DF BC DF -- dcp $DFBC,x (undocumented; ca65 cannot encode) ; CPU:$DB71 PRG:5B71 DF BC DF stx ZpDE ; CPU:$DB74 PRG:5B74 86 DE lda ZpDE,x ; CPU:$DB76 PRG:5B76 B5 DE stx $C2DF ; CPU:$DB78 PRG:5B78 8E DF C2 .byte $DF, $97, $DD ; CPU:$DB7B PRG:5B7B DF 97 DD -- dcp $DD97,x (undocumented; ca65 cannot encode) ; CPU:$DB7B PRG:5B7B DF 97 DD lda ZpDE,x ; CPU:$DB7E PRG:5B7E B5 DE ; ----------------------------------------------------------------------------- ; Routine: SubCDB80 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 10 instructions: loads Y with $08; loads A from ; ((StarFieldPtrLo),y); ANDs A with $E0; copies A into X; loads Y ; with $04; loads A from ((StarFieldPtrLo),y); and 4 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- SubCDB80: ldy #$08 ; CPU:$DB80 PRG:5B80 A0 08 lda (StarFieldPtrLo),y ; CPU:$DB82 PRG:5B82 B1 00 and #$E0 ; CPU:$DB84 PRG:5B84 29 E0 tax ; CPU:$DB86 PRG:5B86 AA ldy #$04 ; CPU:$DB87 PRG:5B87 A0 04 lda (StarFieldPtrLo),y ; CPU:$DB89 PRG:5B89 B1 00 sec ; CPU:$DB8B PRG:5B8B 38 sbc $FF59,x ; CPU:$DB8C PRG:5B8C FD 59 FF sta (StarFieldPtrLo),y ; CPU:$DB8F PRG:5B8F 91 00 bmi NmiHandler_Loop214 ; CPU:$DB91 PRG:5B91 30 4C ; ----------------------------------------------------------------------------- ; Routine: Sub_DB93 ; Global: The routine calls DivideTileIndexBy16. ; Local: Executes 39 instructions: loads Y with $08; loads A from ; ((StarFieldPtrLo),y); ANDs A with $E0; branches on equal to ; NmiHandler_Loop213; stores A to PpuAddrLow; loads Y with $01; and ; 33 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- Sub_DB93: ldy #$08 ; CPU:$DB93 PRG:5B93 A0 08 lda (StarFieldPtrLo),y ; CPU:$DB95 PRG:5B95 B1 00 and #$E0 ; CPU:$DB97 PRG:5B97 29 E0 beq NmiHandler_Loop213 ; CPU:$DB99 PRG:5B99 F0 43 sta PpuAddrLow ; CPU:$DB9B PRG:5B9B 85 04 ldy #$01 ; CPU:$DB9D PRG:5B9D A0 01 lda (StarFieldPtrLo),y ; CPU:$DB9F PRG:5B9F B1 00 and #$1F ; CPU:$DBA1 PRG:5BA1 29 1F clc ; CPU:$DBA3 PRG:5BA3 18 adc PpuAddrLow ; CPU:$DBA4 PRG:5BA4 65 04 tax ; CPU:$DBA6 PRG:5BA6 AA lda $FF3A,x ; CPU:$DBA7 PRG:5BA7 BD 3A FF ldy #$09 ; CPU:$DBAA PRG:5BAA A0 09 adc (StarFieldPtrLo),y ; CPU:$DBAC PRG:5BAC 71 00 sta PpuAddrLow ; CPU:$DBAE PRG:5BAE 85 04 and #$0F ; CPU:$DBB0 PRG:5BB0 29 0F sta (StarFieldPtrLo),y ; CPU:$DBB2 PRG:5BB2 91 00 lda PpuAddrLow ; CPU:$DBB4 PRG:5BB4 A5 04 jsr DivideTileIndexBy16 ; CPU:$DBB6 PRG:5BB6 20 FB C3 ldy #$02 ; CPU:$DBB9 PRG:5BB9 A0 02 clc ; CPU:$DBBB PRG:5BBB 18 adc (StarFieldPtrLo),y ; CPU:$DBBC PRG:5BBC 71 00 sta (StarFieldPtrLo),y ; CPU:$DBBE PRG:5BBE 91 00 txa ; CPU:$DBC0 PRG:5BC0 8A clc ; CPU:$DBC1 PRG:5BC1 18 adc #$06 ; CPU:$DBC2 PRG:5BC2 69 06 tax ; CPU:$DBC4 PRG:5BC4 AA lda $FF3A,x ; CPU:$DBC5 PRG:5BC5 BD 3A FF ldy #$0A ; CPU:$DBC8 PRG:5BC8 A0 0A adc (StarFieldPtrLo),y ; CPU:$DBCA PRG:5BCA 71 00 sta PpuAddrLow ; CPU:$DBCC PRG:5BCC 85 04 and #$0F ; CPU:$DBCE PRG:5BCE 29 0F sta (StarFieldPtrLo),y ; CPU:$DBD0 PRG:5BD0 91 00 lda PpuAddrLow ; CPU:$DBD2 PRG:5BD2 A5 04 jsr DivideTileIndexBy16 ; CPU:$DBD4 PRG:5BD4 20 FB C3 ldy #$03 ; CPU:$DBD7 PRG:5BD7 A0 03 clc ; CPU:$DBD9 PRG:5BD9 18 adc (StarFieldPtrLo),y ; CPU:$DBDA PRG:5BDA 71 00 sta (StarFieldPtrLo),y ; CPU:$DBDC PRG:5BDC 91 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop213 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop213: rts ; CPU:$DBDE PRG:5BDE 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop214 ; Global: The routine calls DecrementEnemyPathIndex. ; Local: Executes 7 instructions: loads Y with $0F; loads A from ; ((StarFieldPtrLo),y); branches on equal to NmiHandler_Loop215; sets ; the carry flag; subtracts $01 from A; stores A to ; ((StarFieldPtrLo),y); and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop214: ldy #$0F ; CPU:$DBDF PRG:5BDF A0 0F lda (StarFieldPtrLo),y ; CPU:$DBE1 PRG:5BE1 B1 00 beq NmiHandler_Loop215 ; CPU:$DBE3 PRG:5BE3 F0 08 sec ; CPU:$DBE5 PRG:5BE5 38 sbc #$01 ; CPU:$DBE6 PRG:5BE6 E9 01 sta (StarFieldPtrLo),y ; CPU:$DBE8 PRG:5BE8 91 00 jsr DecrementEnemyPathIndex ; CPU:$DBEA PRG:5BEA 20 16 E0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop215 ; Global: The routine calls AdvanceEnemyPathIndex. ; Local: Executes 6 instructions: calls AdvanceEnemyPathIndex; rotates a left; branches on ; carry set to NmiHandler_Loop216; rotates a left; branches on carry ; set to NmiHandler_Loop217; branches on carry clear to ; NmiHandler_Loop220. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop215: jsr AdvanceEnemyPathIndex ; CPU:$DBED PRG:5BED 20 F1 DF rol a ; CPU:$DBF0 PRG:5BF0 2A bcs NmiHandler_Loop216 ; CPU:$DBF1 PRG:5BF1 B0 05 rol a ; CPU:$DBF3 PRG:5BF3 2A bcs NmiHandler_Loop217 ; CPU:$DBF4 PRG:5BF4 B0 19 bcc NmiHandler_Loop220 ; CPU:$DBF6 PRG:5BF6 90 2D ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop216 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: rotates a left; branches on carry set to ; NmiHandler_Loop222; loads Y with $07; loads A from ; ((StarFieldPtrLo),y); rotates a left; branches on carry set to ; NmiHandler_Loop218. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop216: rol a ; CPU:$DBF8 PRG:5BF8 2A bcs NmiHandler_Loop222 ; CPU:$DBF9 PRG:5BF9 B0 42 ldy #$07 ; CPU:$DBFB PRG:5BFB A0 07 lda (StarFieldPtrLo),y ; CPU:$DBFD PRG:5BFD B1 00 rol a ; CPU:$DBFF PRG:5BFF 2A bcs NmiHandler_Loop218 ; CPU:$DC00 PRG:5C00 B0 14 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarrySet4 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads Y with $01; loads A from ; ((StarFieldPtrLo),y); sets the carry flag; subtracts $01 from A; ; branches on carry set to NmiHandler_Loop219; loads A with $17; and ; 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarrySet4: ldy #$01 ; CPU:$DC02 PRG:5C02 A0 01 lda (StarFieldPtrLo),y ; CPU:$DC04 PRG:5C04 B1 00 sec ; CPU:$DC06 PRG:5C06 38 sbc #$01 ; CPU:$DC07 PRG:5C07 E9 01 bcs NmiHandler_Loop219 ; CPU:$DC09 PRG:5C09 B0 18 lda #$17 ; CPU:$DC0B PRG:5C0B A9 17 bcc NmiHandler_Loop219 ; CPU:$DC0D PRG:5C0D 90 14 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop217 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: loads Y with $01; loads A from ; ((StarFieldPtrLo),y); sets the carry flag; subtracts $01 from A; ; branches on carry set to NmiHandler_Loop219; loads A with $17; and ; 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop217: ldy #$07 ; CPU:$DC0F PRG:5C0F A0 07 lda (StarFieldPtrLo),y ; CPU:$DC11 PRG:5C11 B1 00 rol a ; CPU:$DC13 PRG:5C13 2A bcs NmiHandler_OnCarrySet4 ; CPU:$DC14 PRG:5C14 B0 EC ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop218 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads Y with $01; loads A from ; ((StarFieldPtrLo),y); clears the carry flag; adds $01 to A; ; compares A with $18; branches on carry clear to NmiHandler_Loop219; ; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop218: ldy #$01 ; CPU:$DC16 PRG:5C16 A0 01 lda (StarFieldPtrLo),y ; CPU:$DC18 PRG:5C18 B1 00 clc ; CPU:$DC1A PRG:5C1A 18 adc #$01 ; CPU:$DC1B PRG:5C1B 69 01 cmp #$18 ; CPU:$DC1D PRG:5C1D C9 18 bcc NmiHandler_Loop219 ; CPU:$DC1F PRG:5C1F 90 02 lda #$00 ; CPU:$DC21 PRG:5C21 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop219 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores A to ((StarFieldPtrLo),y). ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop219: sta (StarFieldPtrLo),y ; CPU:$DC23 PRG:5C23 91 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop220 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: loads A from Zp07; ANDs A with $3F; shifts ; a left; shifts a left; stores A to PpuAddrLow; loads Y with $04; ; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop220: lda Zp07 ; CPU:$DC25 PRG:5C25 A5 07 and #$3F ; CPU:$DC27 PRG:5C27 29 3F asl a ; CPU:$DC29 PRG:5C29 0A asl a ; CPU:$DC2A PRG:5C2A 0A sta PpuAddrLow ; CPU:$DC2B PRG:5C2B 85 04 ldy #$04 ; CPU:$DC2D PRG:5C2D A0 04 lda (StarFieldPtrLo),y ; CPU:$DC2F PRG:5C2F B1 00 clc ; CPU:$DC31 PRG:5C31 18 adc PpuAddrLow ; CPU:$DC32 PRG:5C32 65 04 bpl NmiHandler_Loop221 ; CPU:$DC34 PRG:5C34 10 02 lda #$00 ; CPU:$DC36 PRG:5C36 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop221 ; Global: The routine calls Sub_DB93. ; Local: Executes 2 instructions: stores A to ((StarFieldPtrLo),y); calls ; Sub_DB93. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop221: sta (StarFieldPtrLo),y ; CPU:$DC38 PRG:5C38 91 00 jmp Sub_DB93 ; CPU:$DC3A PRG:5C3A 4C 93 DB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop222 ; Global: The routine calls NmiHandler_Loop215. ; Local: Executes 7 instructions: rotates a left; branches on carry set to ; NmiHandler_Loop223; loads A from Zp07; ANDs A with $1F; loads Y ; with $0F; stores A to ((StarFieldPtrLo),y); and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop222: rol a ; CPU:$DC3D PRG:5C3D 2A bcs NmiHandler_Loop223 ; CPU:$DC3E PRG:5C3E B0 0B lda Zp07 ; CPU:$DC40 PRG:5C40 A5 07 and #$1F ; CPU:$DC42 PRG:5C42 29 1F ldy #$0F ; CPU:$DC44 PRG:5C44 A0 0F sta (StarFieldPtrLo),y ; CPU:$DC46 PRG:5C46 91 00 jmp NmiHandler_Loop215 ; CPU:$DC48 PRG:5C48 4C ED DB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop223 ; Global: The routine calls CallHandlerThroughPointer, reads $86DC. ; Local: Executes 4 instructions: loads A from Zp07; ANDs A with $1F; calls ; CallHandlerThroughPointer; rotates $86DC right. ; Parameters: Reads $86DC from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop223: lda Zp07 ; CPU:$DC4B PRG:5C4B A5 07 and #$1F ; CPU:$DC4D PRG:5C4D 29 1F jsr CallHandlerThroughPointer ; CPU:$DC4F PRG:5C4F 20 01 C3 ror $86DC ; CPU:$DC52 PRG:5C52 6E DC 86 .byte $DC, $8F, $DC ; CPU:$DC55 PRG:5C55 DC 8F DC -- nop $DC8F,x (undocumented; ca65 cannot encode) ; CPU:$DC55 PRG:5C55 DC 8F DC ldx ZpDC ; CPU:$DC58 PRG:5C58 A6 DC .byte $AF, $DC, $BF ; CPU:$DC5A PRG:5C5A AF DC BF -- lax $BFDC (undocumented; ca65 cannot encode) ; CPU:$DC5A PRG:5C5A AF DC BF .byte $DC, $58, $DD ; CPU:$DC5D PRG:5C5D DC 58 DD -- nop $DD58,x (undocumented; ca65 cannot encode) ; CPU:$DC5D PRG:5C5D DC 58 DD .byte $CF, $DC, $49 ; CPU:$DC60 PRG:5C60 CF DC 49 -- dcp $49DC (undocumented; ca65 cannot encode) ; CPU:$DC60 PRG:5C60 CF DC 49 cmp $DCEE,x ; CPU:$DC63 PRG:5C63 DD EE DC pla ; CPU:$DC66 PRG:5C66 68 cmp $DCDC,x ; CPU:$DC67 PRG:5C67 DD DC DC .byte $7A ; CPU:$DC6A PRG:5C6A 7A -- nop (undocumented; ca65 cannot encode) ; CPU:$DC6A PRG:5C6A 7A cmp $DD7E,x ; CPU:$DC6B PRG:5C6B DD 7E DD ; ----------------------------------------------------------------------------- ; Routine: SubCDC6E ; Global: The routine calls AdvanceEnemyPathIndex. ; Local: Executes 4 instructions: calls AdvanceEnemyPathIndex; loads Y with $07; loads A ; from ((StarFieldPtrLo),y); rotates a left. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N, Z, C and V flags, Zp07. ; ; ----------------------------------------------------------------------------- SubCDC6E: jsr AdvanceEnemyPathIndex ; CPU:$DC6E PRG:5C6E 20 F1 DF ldy #$07 ; CPU:$DC71 PRG:5C71 A0 07 lda (StarFieldPtrLo),y ; CPU:$DC73 PRG:5C73 B1 00 rol a ; CPU:$DC75 PRG:5C75 2A .byte $90, $06 ; CPU:$DC76 PRG:5C76 90 06 lda #$C0 ; CPU:$DC78 PRG:5C78 A9 C0 sec ; CPU:$DC7A PRG:5C7A 38 sbc Zp07 ; CPU:$DC7B PRG:5C7B E5 07 ; ----------------------------------------------------------------------------- ; Routine: SubCDC7D ; Global: The routine calls AdvanceEnemyPathIndex, reads $07A5. ; Local: Executes 17 instructions: tests the bits of $07A5; loads Y with $03; ; stores A to ((StarFieldPtrLo),y); branches on non-negative to ; NmiHandler_Loop227; calls AdvanceEnemyPathIndex; loads Y with $02; and 11 more ; instructions. ; Parameters: Reads $07A5 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- SubCDC7D: bit $07A5 ; CPU:$DC7D PRG:5C7D 2C A5 07 ldy #$03 ; CPU:$DC80 PRG:5C80 A0 03 sta (StarFieldPtrLo),y ; CPU:$DC82 PRG:5C82 91 00 bpl NmiHandler_Loop227 ; CPU:$DC84 PRG:5C84 10 36 jsr AdvanceEnemyPathIndex ; CPU:$DC86 PRG:5C86 20 F1 DF ldy #$02 ; CPU:$DC89 PRG:5C89 A0 02 sta (StarFieldPtrLo),y ; CPU:$DC8B PRG:5C8B 91 00 bpl NmiHandler_Loop227 ; CPU:$DC8D PRG:5C8D 10 2D jsr AdvanceEnemyPathIndex ; CPU:$DC8F PRG:5C8F 20 F1 DF ldy #$07 ; CPU:$DC92 PRG:5C92 A0 07 lda (StarFieldPtrLo),y ; CPU:$DC94 PRG:5C94 B1 00 rol a ; CPU:$DC96 PRG:5C96 2A lda Zp07 ; CPU:$DC97 PRG:5C97 A5 07 bcc NmiHandler_Loop225 ; CPU:$DC99 PRG:5C99 90 05 eor #$FF ; CPU:$DC9B PRG:5C9B 49 FF sec ; CPU:$DC9D PRG:5C9D 38 adc #$18 ; CPU:$DC9E PRG:5C9E 69 18 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop225 ; Global: The routine calls AdvanceEnemyPathIndex. ; Local: Executes 13 instructions: loads Y with $01; stores A to ; ((StarFieldPtrLo),y); branches on non-negative to ; NmiHandler_Loop227; calls AdvanceEnemyPathIndex; loads Y with $08; stores A to ; ((StarFieldPtrLo),y); and 7 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop225: ldy #$01 ; CPU:$DCA0 PRG:5CA0 A0 01 sta (StarFieldPtrLo),y ; CPU:$DCA2 PRG:5CA2 91 00 bpl NmiHandler_Loop227 ; CPU:$DCA4 PRG:5CA4 10 16 jsr AdvanceEnemyPathIndex ; CPU:$DCA6 PRG:5CA6 20 F1 DF ldy #$08 ; CPU:$DCA9 PRG:5CA9 A0 08 sta (StarFieldPtrLo),y ; CPU:$DCAB PRG:5CAB 91 00 bpl NmiHandler_Loop227 ; CPU:$DCAD PRG:5CAD 10 0D ldy #$08 ; CPU:$DCAF PRG:5CAF A0 08 lda (StarFieldPtrLo),y ; CPU:$DCB1 PRG:5CB1 B1 00 cmp #$A0 ; CPU:$DCB3 PRG:5CB3 C9 A0 beq NmiHandler_Loop226 ; CPU:$DCB5 PRG:5CB5 F0 03 clc ; CPU:$DCB7 PRG:5CB7 18 adc #$20 ; CPU:$DCB8 PRG:5CB8 69 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop226 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores A to ((StarFieldPtrLo),y). ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop226: sta (StarFieldPtrLo),y ; CPU:$DCBA PRG:5CBA 91 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop227 ; Global: The routine calls NmiHandler_Loop215. ; Local: Executes 1 instruction: calls NmiHandler_Loop215. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop227: jmp NmiHandler_Loop215 ; CPU:$DCBC PRG:5CBC 4C ED DB ; ----------------------------------------------------------------------------- ; Routine: SubCDCBF ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads Y with $08; loads A from ; ((StarFieldPtrLo),y); compares A with $A0; branches on equal to ; NmiHandler_Loop228; sets the carry flag; subtracts $20 from A. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- SubCDCBF: ldy #$08 ; CPU:$DCBF PRG:5CBF A0 08 lda (StarFieldPtrLo),y ; CPU:$DCC1 PRG:5CC1 B1 00 cmp #$A0 ; CPU:$DCC3 PRG:5CC3 C9 A0 beq NmiHandler_Loop228 ; CPU:$DCC5 PRG:5CC5 F0 03 sec ; CPU:$DCC7 PRG:5CC7 38 sbc #$20 ; CPU:$DCC8 PRG:5CC8 E9 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop228 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores A to ((StarFieldPtrLo),y). ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop228: sta (StarFieldPtrLo),y ; CPU:$DCCA PRG:5CCA 91 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero48 ; Global: The routine calls NmiHandler_Loop215. ; Local: Executes 1 instruction: calls NmiHandler_Loop215. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero48: jmp NmiHandler_Loop215 ; CPU:$DCCC PRG:5CCC 4C ED DB ; ----------------------------------------------------------------------------- ; Routine: SubCDCCF ; Global: The routine calls NmiHandler_Loop215, reads $0451. ; Local: Executes 7 instructions: calls NmiHandler_Loop215; loads A from ; $0451; branches on equal to NmiHandler_OnNonzero48; loads Y with ; $08; loads A with $A0; stores A to ((StarFieldPtrLo),y); and 1 more ; instruction. ; Parameters: Reads $0451 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- SubCDCCF: lda $0451 ; CPU:$DCCF PRG:5CCF AD 51 04 beq NmiHandler_OnNonzero48 ; CPU:$DCD2 PRG:5CD2 F0 F8 ldy #$08 ; CPU:$DCD4 PRG:5CD4 A0 08 lda #$A0 ; CPU:$DCD6 PRG:5CD6 A9 A0 sta (StarFieldPtrLo),y ; CPU:$DCD8 PRG:5CD8 91 00 bne NmiHandler_OnNonzero48 ; CPU:$DCDA PRG:5CDA D0 F0 ; ----------------------------------------------------------------------------- ; Routine: SubCDCDC ; Global: The routine calls NmiHandler_Loop215, reads $0458. ; Local: Executes 7 instructions: calls NmiHandler_Loop215; loads Y from ; $0458; branches on equal to NmiHandler_OnNonzero48; loads A with ; $60; decrements Y; branches on not equal to NmiHandler_Loop229; and ; 1 more instruction. ; Parameters: Reads $0458 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- SubCDCDC: ldy $0458 ; CPU:$DCDC PRG:5CDC AC 58 04 beq NmiHandler_OnNonzero48 ; CPU:$DCDF PRG:5CDF F0 EB lda #$60 ; CPU:$DCE1 PRG:5CE1 A9 60 dey ; CPU:$DCE3 PRG:5CE3 88 bne NmiHandler_Loop229 ; CPU:$DCE4 PRG:5CE4 D0 02 lda #$40 ; CPU:$DCE6 PRG:5CE6 A9 40 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop229 ; Global: The routine calls NmiHandler_Loop215. ; Local: Executes 4 instructions: calls NmiHandler_Loop215; loads Y with $08; ; stores A to ((StarFieldPtrLo),y); branches on not equal to ; NmiHandler_OnNonzero48. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop229: ldy #$08 ; CPU:$DCE8 PRG:5CE8 A0 08 sta (StarFieldPtrLo),y ; CPU:$DCEA PRG:5CEA 91 00 bne NmiHandler_OnNonzero48 ; CPU:$DCEC PRG:5CEC D0 DE ; ----------------------------------------------------------------------------- ; Routine: SubCDCEE ; Global: The routine calls NmiHandler_Loop215, reads $0464. ; Local: Executes 5 instructions: calls NmiHandler_Loop215; loads A from Zp7A; ; branches on not equal to NmiHandler_Loop230; loads A from $0464; ; branches on not equal to NmiHandler_Loop232. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- SubCDCEE: lda Zp7A ; CPU:$DCEE PRG:5CEE A5 7A bne NmiHandler_Loop230 ; CPU:$DCF0 PRG:5CF0 D0 05 lda $0464 ; CPU:$DCF2 PRG:5CF2 AD 64 04 bne NmiHandler_Loop232 ; CPU:$DCF5 PRG:5CF5 D0 27 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop230 ; Global: The routine calls GetEnemyShipTileId and NmiHandler_Loop234. ; Local: Executes 4 instructions: loads Y with $0B; loads A from ; ((StarFieldPtrLo),y); calls GetEnemyShipTileId; calls NmiHandler_Loop234. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop230: ldy #$0B ; CPU:$DCF7 PRG:5CF7 A0 0B lda (StarFieldPtrLo),y ; CPU:$DCF9 PRG:5CF9 B1 00 jsr GetEnemyShipTileId ; CPU:$DCFB PRG:5CFB 20 8C D7 jmp NmiHandler_Loop234 ; CPU:$DCFE PRG:5CFE 4C 3E DD ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero49 ; Global: The routine calls NmiHandler_Loop215 and GetEnemyShipTileId. ; Local: Executes 12 instructions: calls NmiHandler_Loop215; loads Y with $0B; ; loads A from ((StarFieldPtrLo),y); calls GetEnemyShipTileId; stores A to ; PpuAddrLow; loads Y with $07; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero49: ldy #$0B ; CPU:$DD01 PRG:5D01 A0 0B lda (StarFieldPtrLo),y ; CPU:$DD03 PRG:5D03 B1 00 jsr GetEnemyShipTileId ; CPU:$DD05 PRG:5D05 20 8C D7 sta PpuAddrLow ; CPU:$DD08 PRG:5D08 85 04 ldy #$07 ; CPU:$DD0A PRG:5D0A A0 07 lda (StarFieldPtrLo),y ; CPU:$DD0C PRG:5D0C B1 00 bpl NmiHandler_Loop231 ; CPU:$DD0E PRG:5D0E 10 07 lda PpuAddrLow ; CPU:$DD10 PRG:5D10 A5 04 sec ; CPU:$DD12 PRG:5D12 38 sbc #$20 ; CPU:$DD13 PRG:5D13 E9 20 bne NmiHandler_Loop234 ; CPU:$DD15 PRG:5D15 D0 27 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop231 ; Global: The routine calls NmiHandler_Loop215 and GetEnemyShipTileId. ; Local: Executes 16 instructions: calls NmiHandler_Loop215; loads Y with $0B; ; loads A from ((StarFieldPtrLo),y); calls GetEnemyShipTileId; stores A to ; PpuAddrLow; loads Y with $07; and 10 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop231: lda PpuAddrLow ; CPU:$DD17 PRG:5D17 A5 04 clc ; CPU:$DD19 PRG:5D19 18 adc #$20 ; CPU:$DD1A PRG:5D1A 69 20 bne NmiHandler_Loop234 ; CPU:$DD1C PRG:5D1C D0 20 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop232 ; Global: The routine calls NmiHandler_Loop215 and GetEnemyShipTileId, reads $0470. ; Local: Executes 27 instructions: calls NmiHandler_Loop215; loads Y with $0B; ; loads A from ((StarFieldPtrLo),y); calls GetEnemyShipTileId; stores A to ; PpuAddrLow; loads Y with $07; and 21 more instructions. ; Parameters: Reads $0470 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop232: ldy #$0C ; CPU:$DD1E PRG:5D1E A0 0C lda $0470 ; CPU:$DD20 PRG:5D20 AD 70 04 sta (StarFieldPtrLo),y ; CPU:$DD23 PRG:5D23 91 00 iny ; CPU:$DD25 PRG:5D25 C8 lda (StarFieldPtrLo),y ; CPU:$DD26 PRG:5D26 B1 00 bne NmiHandler_OnNonzero49 ; CPU:$DD28 PRG:5D28 D0 D7 ldy #$07 ; CPU:$DD2A PRG:5D2A A0 07 ldx #$70 ; CPU:$DD2C PRG:5D2C A2 70 lda (StarFieldPtrLo),y ; CPU:$DD2E PRG:5D2E B1 00 bpl NmiHandler_Loop233 ; CPU:$DD30 PRG:5D30 10 02 ldx #$10 ; CPU:$DD32 PRG:5D32 A2 10 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop233 ; Global: The routine calls NmiHandler_Loop215 and Sub_C317. ; Local: Executes 6 instructions: calls NmiHandler_Loop215; stores X to ; PpuAddrLow; calls Sub_C317; ANDs A with $3F; clears the carry flag; ; adds PpuAddrLow to A. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp6E, Zp6F, ; $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop233: stx PpuAddrLow ; CPU:$DD34 PRG:5D34 86 04 jsr Sub_C317 ; CPU:$DD36 PRG:5D36 20 17 C3 and #$3F ; CPU:$DD39 PRG:5D39 29 3F clc ; CPU:$DD3B PRG:5D3B 18 adc PpuAddrLow ; CPU:$DD3C PRG:5D3C 65 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop234 ; Global: The routine calls NmiHandler_Loop215, reads $0464. ; Local: Executes 11 instructions: calls NmiHandler_Loop215; loads Y with $03; ; stores A to ((StarFieldPtrLo),y); loads A with $00; decrements Y; ; stores A to ((StarFieldPtrLo),y); and 5 more instructions. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop234: ldy #$03 ; CPU:$DD3E PRG:5D3E A0 03 sta (StarFieldPtrLo),y ; CPU:$DD40 PRG:5D40 91 00 lda #$00 ; CPU:$DD42 PRG:5D42 A9 00 dey ; CPU:$DD44 PRG:5D44 88 sta (StarFieldPtrLo),y ; CPU:$DD45 PRG:5D45 91 00 bne NmiHandler_OnNonzero48 ; CPU:$DD47 PRG:5D47 D0 83 lda Zp7A ; CPU:$DD49 PRG:5D49 A5 7A bne NmiHandler_Loop235 ; CPU:$DD4B PRG:5D4B D0 05 lda $0464 ; CPU:$DD4D PRG:5D4D AD 64 04 bne NmiHandler_OnNonzero50 ; CPU:$DD50 PRG:5D50 D0 25 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop235 ; Global: The routine calls AdvanceEnemyPathIndex. ; Local: Executes 4 instructions: loads A with $01; stores A to Zp07; branches ; on not equal to NmiHandler_Loop236; calls AdvanceEnemyPathIndex. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop235: lda #$01 ; CPU:$DD52 PRG:5D52 A9 01 sta Zp07 ; CPU:$DD54 PRG:5D54 85 07 bne NmiHandler_Loop236 ; CPU:$DD56 PRG:5D56 D0 03 jsr AdvanceEnemyPathIndex ; CPU:$DD58 PRG:5D58 20 F1 DF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop236 ; Global: The routine calls Sub_DB5D. ; Local: Executes 6 instructions: loads Y with $07; loads A from ; ((StarFieldPtrLo),y); ANDs A with $80; ORs A with Zp07; stores A to ; ((StarFieldPtrLo),y); calls Sub_DB5D. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop236: ldy #$07 ; CPU:$DD5B PRG:5D5B A0 07 lda (StarFieldPtrLo),y ; CPU:$DD5D PRG:5D5D B1 00 and #$80 ; CPU:$DD5F PRG:5D5F 29 80 ora Zp07 ; CPU:$DD61 PRG:5D61 05 07 sta (StarFieldPtrLo),y ; CPU:$DD63 PRG:5D63 91 00 jmp Sub_DB5D ; CPU:$DD65 PRG:5D65 4C 5D DB ; ----------------------------------------------------------------------------- ; Routine: SubCDD68 ; Global: The routine calls ReadEnemyPathTableEntry and GetEnemyPathTableEntry. ; Local: Executes 7 instructions: calls ReadEnemyPathTableEntry; loads Y with $05; stores A ; to ((StarFieldPtrLo),y); increments Y; loads A with $00; stores A ; to ((StarFieldPtrLo),y); and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, Zp03, Zp07, Zp1E, Zp1F, ; $86DC. ; ; ----------------------------------------------------------------------------- SubCDD68: jsr ReadEnemyPathTableEntry ; CPU:$DD68 PRG:5D68 20 02 E0 ldy #$05 ; CPU:$DD6B PRG:5D6B A0 05 sta (StarFieldPtrLo),y ; CPU:$DD6D PRG:5D6D 91 00 iny ; CPU:$DD6F PRG:5D6F C8 lda #$00 ; CPU:$DD70 PRG:5D70 A9 00 sta (StarFieldPtrLo),y ; CPU:$DD72 PRG:5D72 91 00 jsr GetEnemyPathTableEntry ; CPU:$DD74 PRG:5D74 20 E0 DF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero50 ; Global: The routine calls NmiHandler_Loop215. ; Local: Executes 1 instruction: calls NmiHandler_Loop215. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero50: jmp NmiHandler_Loop215 ; CPU:$DD77 PRG:5D77 4C ED DB ; ----------------------------------------------------------------------------- ; Routine: SubCDD7A ; Global: The routine calls NmiHandler_Loop215. ; Local: Executes 4 instructions: calls NmiHandler_Loop215; loads X with $C0; ; branches on not equal to NmiHandler_Loop237; loads X with $D0. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, the OAM shadow, ; $0495, $86DC. ; ; ----------------------------------------------------------------------------- SubCDD7A: ldx #$C0 ; CPU:$DD7A PRG:5D7A A2 C0 bne NmiHandler_Loop237 ; CPU:$DD7C PRG:5D7C D0 02 ldx #$D0 ; CPU:$DD7E PRG:5D7E A2 D0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop237 ; Global: The routine calls NmiHandler_Loop215. ; Local: Executes 4 instructions: calls NmiHandler_Loop215; loads A with $20; ; stores A to $0208,x; loads Y with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, the OAM shadow, ; $0495, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop237: lda #$20 ; CPU:$DD80 PRG:5D80 A9 20 sta $0208,x ; CPU:$DD82 PRG:5D82 9D 08 02 ldy #$00 ; CPU:$DD85 PRG:5D85 A0 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero51 ; Global: The routine calls NmiHandler_Loop215 and GetEnemyShipTileId, reads $0495. ; Local: Executes 32 instructions: calls NmiHandler_Loop215; loads A from ; ((StarFieldPtrLo),y); stores A to $0200,x; increments X; increments ; Y; compares Y with $04; and 26 more instructions. ; Parameters: Reads $0495 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, the OAM shadow, ; $0495, $86DC. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero51: lda (StarFieldPtrLo),y ; CPU:$DD87 PRG:5D87 B1 00 sta $0200,x ; CPU:$DD89 PRG:5D89 9D 00 02 inx ; CPU:$DD8C PRG:5D8C E8 iny ; CPU:$DD8D PRG:5D8D C8 cpy #$04 ; CPU:$DD8E PRG:5D8E C0 04 bne NmiHandler_OnNonzero51 ; CPU:$DD90 PRG:5D90 D0 F5 inc $0495 ; CPU:$DD92 PRG:5D92 EE 95 04 bne NmiHandler_OnNonzero50 ; CPU:$DD95 PRG:5D95 D0 E0 ldy #$0E ; CPU:$DD97 PRG:5D97 A0 0E lda (StarFieldPtrLo),y ; CPU:$DD99 PRG:5D99 B1 00 clc ; CPU:$DD9B PRG:5D9B 18 adc #$01 ; CPU:$DD9C PRG:5D9C 69 01 cmp #$40 ; CPU:$DD9E PRG:5D9E C9 40 bcs NmiHandler_Loop238 ; CPU:$DDA0 PRG:5DA0 B0 20 sta (StarFieldPtrLo),y ; CPU:$DDA2 PRG:5DA2 91 00 and #$08 ; CPU:$DDA4 PRG:5DA4 29 08 sta PpuAddrLow ; CPU:$DDA6 PRG:5DA6 85 04 ldy #$0B ; CPU:$DDA8 PRG:5DA8 A0 0B lda (StarFieldPtrLo),y ; CPU:$DDAA PRG:5DAA B1 00 pha ; CPU:$DDAC PRG:5DAC 48 cmp #$30 ; CPU:$DDAD PRG:5DAD C9 30 lda #$00 ; CPU:$DDAF PRG:5DAF A9 00 adc #$04 ; CPU:$DDB1 PRG:5DB1 69 04 adc PpuAddrLow ; CPU:$DDB3 PRG:5DB3 65 04 ldy #$00 ; CPU:$DDB5 PRG:5DB5 A0 00 sta (StarFieldPtrLo),y ; CPU:$DDB7 PRG:5DB7 91 00 pla ; CPU:$DDB9 PRG:5DB9 68 jsr GetEnemyShipTileId ; CPU:$DDBA PRG:5DBA 20 8C D7 ldy #$03 ; CPU:$DDBD PRG:5DBD A0 03 sta (StarFieldPtrLo),y ; CPU:$DDBF PRG:5DBF 91 00 rts ; CPU:$DDC1 PRG:5DC1 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop238 ; Global: The routine calls NmiHandler_Loop266. ; Local: Executes 12 instructions: decrements Y; loads A from ; ((StarFieldPtrLo),y); pushes A; loads A with $00; stores A to ; ((StarFieldPtrLo),y); pulls A; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop238: dey ; CPU:$DDC2 PRG:5DC2 88 lda (StarFieldPtrLo),y ; CPU:$DDC3 PRG:5DC3 B1 00 pha ; CPU:$DDC5 PRG:5DC5 48 lda #$00 ; CPU:$DDC6 PRG:5DC6 A9 00 sta (StarFieldPtrLo),y ; CPU:$DDC8 PRG:5DC8 91 00 pla ; CPU:$DDCA PRG:5DCA 68 ldy #$00 ; CPU:$DDCB PRG:5DCB A0 00 sta (StarFieldPtrLo),y ; CPU:$DDCD PRG:5DCD 91 00 lda #$20 ; CPU:$DDCF PRG:5DCF A9 20 ldy #$08 ; CPU:$DDD1 PRG:5DD1 A0 08 sta (StarFieldPtrLo),y ; CPU:$DDD3 PRG:5DD3 91 00 jmp NmiHandler_Loop266 ; CPU:$DDD5 PRG:5DD5 4C D1 DF ; ----------------------------------------------------------------------------- ; Routine: Sub_DDD8 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: loads Y with $07; loads A with $02; stores ; A to ((StarFieldPtrLo),y); loads A with $00; stores A to TilePtrLo; ; loads Y with $0B; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- Sub_DDD8: ldy #$07 ; CPU:$DDD8 PRG:5DD8 A0 07 lda #$02 ; CPU:$DDDA PRG:5DDA A9 02 sta (StarFieldPtrLo),y ; CPU:$DDDC PRG:5DDC 91 00 lda #$00 ; CPU:$DDDE PRG:5DDE A9 00 sta TilePtrLo ; CPU:$DDE0 PRG:5DE0 85 08 ldy #$0B ; CPU:$DDE2 PRG:5DE2 A0 0B lda (StarFieldPtrLo),y ; CPU:$DDE4 PRG:5DE4 B1 00 sta StarFieldCount ; CPU:$DDE6 PRG:5DE6 85 06 cmp #$01 ; CPU:$DDE8 PRG:5DE8 C9 01 bne NmiHandler_Loop239 ; CPU:$DDEA PRG:5DEA D0 02 lda Zp7D ; CPU:$DDEC PRG:5DEC A5 7D ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop239 ; Global: The routine calls GetEnemyShipTileId. ; Local: Executes 7 instructions: calls GetEnemyShipTileId; stores A to Zp07; loads Y ; with $03; loads A from ((StarFieldPtrLo),y); compares A with Zp07; ; branches on equal to NmiHandler_Loop241; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp1E, Zp1F, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop239: jsr GetEnemyShipTileId ; CPU:$DDEE PRG:5DEE 20 8C D7 sta Zp07 ; CPU:$DDF1 PRG:5DF1 85 07 ldy #$03 ; CPU:$DDF3 PRG:5DF3 A0 03 lda (StarFieldPtrLo),y ; CPU:$DDF5 PRG:5DF5 B1 00 cmp Zp07 ; CPU:$DDF7 PRG:5DF7 C5 07 beq NmiHandler_Loop241 ; CPU:$DDF9 PRG:5DF9 F0 09 inc TilePtrLo ; CPU:$DDFB PRG:5DFB E6 08 .byte $B0, $03 ; CPU:$DDFD PRG:5DFD B0 03 adc #$01 ; CPU:$DDFF PRG:5DFF 69 01 ; ----------------------------------------------------------------------------- ; Routine: SubCDE01 ; Global: The routine reads $01E9. ; Local: Executes 1 instruction: tests the bits of $01E9. ; Parameters: Reads $01E9 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- SubCDE01: bit $01E9 ; CPU:$DE01 PRG:5E01 2C E9 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop241 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: stores A to ((StarFieldPtrLo),y); loads A ; from StarFieldCount; compares A with $01; branches on not equal to ; NmiHandler_Loop242; loads A with $07; branches on non-negative to ; NmiHandler_Loop243. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop241: sta (StarFieldPtrLo),y ; CPU:$DE04 PRG:5E04 91 00 lda StarFieldCount ; CPU:$DE06 PRG:5E06 A5 06 cmp #$01 ; CPU:$DE08 PRG:5E08 C9 01 bne NmiHandler_Loop242 ; CPU:$DE0A PRG:5E0A D0 04 lda #$07 ; CPU:$DE0C PRG:5E0C A9 07 bpl NmiHandler_Loop243 ; CPU:$DE0E PRG:5E0E 10 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop242 ; Global: The routine calls ComputeEnemyShipY. ; Local: Executes 1 instruction: calls ComputeEnemyShipY. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop242: jsr ComputeEnemyShipY ; CPU:$DE10 PRG:5E10 20 AA D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop243 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: stores A to Zp07; loads Y with $02; loads A ; from ((StarFieldPtrLo),y); compares A with Zp07; branches on equal ; to NmiHandler_Loop245; increments TilePtrLo. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp07, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop243: sta Zp07 ; CPU:$DE13 PRG:5E13 85 07 ldy #$02 ; CPU:$DE15 PRG:5E15 A0 02 lda (StarFieldPtrLo),y ; CPU:$DE17 PRG:5E17 B1 00 cmp Zp07 ; CPU:$DE19 PRG:5E19 C5 07 beq NmiHandler_Loop245 ; CPU:$DE1B PRG:5E1B F0 09 inc TilePtrLo ; CPU:$DE1D PRG:5E1D E6 08 .byte $B0, $03 ; CPU:$DE1F PRG:5E1F B0 03 adc #$01 ; CPU:$DE21 PRG:5E21 69 01 ; ----------------------------------------------------------------------------- ; Routine: SubCDE23 ; Global: The routine reads $01E9. ; Local: Executes 1 instruction: tests the bits of $01E9. ; Parameters: Reads $01E9 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- SubCDE23: bit $01E9 ; CPU:$DE23 PRG:5E23 2C E9 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop245 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: stores A to ((StarFieldPtrLo),y); loads A ; from Zp48; ANDs A with $03; branches on equal to ; NmiHandler_Loop246; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop245: sta (StarFieldPtrLo),y ; CPU:$DE26 PRG:5E26 91 00 lda Zp48 ; CPU:$DE28 PRG:5E28 A5 48 and #$03 ; CPU:$DE2A PRG:5E2A 29 03 beq NmiHandler_Loop246 ; CPU:$DE2C PRG:5E2C F0 01 rts ; CPU:$DE2E PRG:5E2E 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop246 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 12 instructions: loads Y with $01; loads A from ; ((StarFieldPtrLo),y); ANDs A with $1F; copies A into X; branches on ; equal to NmiHandler_Loop249; compares A with $0C; and 6 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop246: ldy #$01 ; CPU:$DE2F PRG:5E2F A0 01 lda (StarFieldPtrLo),y ; CPU:$DE31 PRG:5E31 B1 00 and #$1F ; CPU:$DE33 PRG:5E33 29 1F tax ; CPU:$DE35 PRG:5E35 AA beq NmiHandler_Loop249 ; CPU:$DE36 PRG:5E36 F0 18 cmp #$0C ; CPU:$DE38 PRG:5E38 C9 0C bcc NmiHandler_Loop247 ; CPU:$DE3A PRG:5E3A 90 09 inx ; CPU:$DE3C PRG:5E3C E8 cpx #$18 ; CPU:$DE3D PRG:5E3D E0 18 bcc NmiHandler_Loop248 ; CPU:$DE3F PRG:5E3F 90 09 ldx #$00 ; CPU:$DE41 PRG:5E41 A2 00 bcs NmiHandler_Loop248 ; CPU:$DE43 PRG:5E43 B0 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop247 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: decrements X; branches on non-negative to ; NmiHandler_Loop248; loads X with $17. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop247: dex ; CPU:$DE45 PRG:5E45 CA bpl NmiHandler_Loop248 ; CPU:$DE46 PRG:5E46 10 02 ldx #$17 ; CPU:$DE48 PRG:5E48 A2 17 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop248 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: copies X into A; stores A to ; ((StarFieldPtrLo),y); branches on equal to NmiHandler_Loop249. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and Y, the N, Z and C flags, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop248: txa ; CPU:$DE4A PRG:5E4A 8A sta (StarFieldPtrLo),y ; CPU:$DE4B PRG:5E4B 91 00 beq NmiHandler_Loop249 ; CPU:$DE4D PRG:5E4D F0 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero52 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero52: rts ; CPU:$DE4F PRG:5E4F 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop249 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: returns with RTS; loads A from TilePtrLo; ; branches on not equal to NmiHandler_OnNonzero52; loads Y with $00; ; loads A from ((StarFieldPtrLo),y); compares A with $01; and 2 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N, Z and C flags, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop249: lda TilePtrLo ; CPU:$DE50 PRG:5E50 A5 08 bne NmiHandler_OnNonzero52 ; CPU:$DE52 PRG:5E52 D0 FB ldy #$00 ; CPU:$DE54 PRG:5E54 A0 00 lda (StarFieldPtrLo),y ; CPU:$DE56 PRG:5E56 B1 00 cmp #$01 ; CPU:$DE58 PRG:5E58 C9 01 beq NmiHandler_Loop251 ; CPU:$DE5A PRG:5E5A F0 11 cmp #$02 ; CPU:$DE5C PRG:5E5C C9 02 .byte $D0, $05 ; CPU:$DE5E PRG:5E5E D0 05 lda StarFieldCount ; CPU:$DE60 PRG:5E60 A5 06 ora #$08 ; CPU:$DE62 PRG:5E62 09 08 ; ----------------------------------------------------------------------------- ; Routine: SubCDE64 ; Global: The routine calls SpawnEnemyShipAlt and DecrementPlayerSpawnTimer, reads $06A5. ; Local: Executes 3 instructions: tests the bits of $06A5; calls SpawnEnemyShipAlt; ; calls DecrementPlayerSpawnTimer. ; Parameters: Reads $06A5 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCDE64: bit $06A5 ; CPU:$DE64 PRG:5E64 2C A5 06 jsr SpawnEnemyShipAlt ; CPU:$DE67 PRG:5E67 20 38 D5 jmp DecrementPlayerSpawnTimer ; CPU:$DE6A PRG:5E6A 4C 84 DF ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop251 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A with $01; stores A to Zp7C; loads A ; with $04; stores A to Zp79; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N and Z flags, Zp79, Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop251: lda #$01 ; CPU:$DE6D PRG:5E6D A9 01 sta Zp7C ; CPU:$DE6F PRG:5E6F 85 7C lda #$04 ; CPU:$DE71 PRG:5E71 A9 04 sta Zp79 ; CPU:$DE73 PRG:5E73 85 79 rts ; CPU:$DE75 PRG:5E75 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero12 ; Global: The routine calls Sub_DB93 and ComputePlayerShipPosition. ; Local: Executes 21 instructions: loads Y with $07; loads A from ; ((StarFieldPtrLo),y); ANDs A with $80; ORs A with $07; stores A to ; ((StarFieldPtrLo),y); loads Y with $08; and 15 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp10, Zp11, Zp12, Zp13, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero12: ldy #$07 ; CPU:$DE76 PRG:5E76 A0 07 lda (StarFieldPtrLo),y ; CPU:$DE78 PRG:5E78 B1 00 and #$80 ; CPU:$DE7A PRG:5E7A 29 80 ora #$07 ; CPU:$DE7C PRG:5E7C 09 07 sta (StarFieldPtrLo),y ; CPU:$DE7E PRG:5E7E 91 00 ldy #$08 ; CPU:$DE80 PRG:5E80 A0 08 lda #$60 ; CPU:$DE82 PRG:5E82 A9 60 sta (StarFieldPtrLo),y ; CPU:$DE84 PRG:5E84 91 00 jsr Sub_DB93 ; CPU:$DE86 PRG:5E86 20 93 DB ldy #$02 ; CPU:$DE89 PRG:5E89 A0 02 lda (StarFieldPtrLo),y ; CPU:$DE8B PRG:5E8B B1 00 sta Zp12 ; CPU:$DE8D PRG:5E8D 85 12 iny ; CPU:$DE8F PRG:5E8F C8 lda (StarFieldPtrLo),y ; CPU:$DE90 PRG:5E90 B1 00 sta Zp13 ; CPU:$DE92 PRG:5E92 85 13 jsr ComputePlayerShipPosition ; CPU:$DE94 PRG:5E94 20 5F C4 ldy #$01 ; CPU:$DE97 PRG:5E97 A0 01 lda (StarFieldPtrLo),y ; CPU:$DE99 PRG:5E99 B1 00 and #$1F ; CPU:$DE9B PRG:5E9B 29 1F cmp Zp17 ; CPU:$DE9D PRG:5E9D C5 17 beq NmiHandler_Loop253 ; CPU:$DE9F PRG:5E9F F0 0A .byte $B0, $03 ; CPU:$DEA1 PRG:5EA1 B0 03 adc #$01 ; CPU:$DEA3 PRG:5EA3 69 01 ; ----------------------------------------------------------------------------- ; Routine: SubCDEA5 ; Global: The routine reads $01E9. ; Local: Executes 3 instructions: tests the bits of $01E9; stores A to ; ((StarFieldPtrLo),y); returns with RTS. ; Parameters: Reads $01E9 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; no register, the N, Z and V flags. ; ; ----------------------------------------------------------------------------- SubCDEA5: bit $01E9 ; CPU:$DEA5 PRG:5EA5 2C E9 01 sta (StarFieldPtrLo),y ; CPU:$DEA8 PRG:5EA8 91 00 rts ; CPU:$DEAA PRG:5EAA 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop253 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads Y with $07; loads A from ; ((StarFieldPtrLo),y); clears the carry flag; adds $01 to A; stores ; A to ((StarFieldPtrLo),y); returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop253: ldy #$07 ; CPU:$DEAB PRG:5EAB A0 07 lda (StarFieldPtrLo),y ; CPU:$DEAD PRG:5EAD B1 00 clc ; CPU:$DEAF PRG:5EAF 18 adc #$01 ; CPU:$DEB0 PRG:5EB0 69 01 sta (StarFieldPtrLo),y ; CPU:$DEB2 PRG:5EB2 91 00 rts ; CPU:$DEB4 PRG:5EB4 60 ; ----------------------------------------------------------------------------- ; Routine: SubCDEB5 ; Global: The routine calls Sub_DF6F, writes $0494, reads $0494. ; Local: Executes 6 instructions: loads A from $0494; pushes A; calls ; Sub_DF6F; pulls A; stores A to $0494; returns with RTS. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0494 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, $0494, $0495. ; ; ----------------------------------------------------------------------------- SubCDEB5: lda $0494 ; CPU:$DEB5 PRG:5EB5 AD 94 04 pha ; CPU:$DEB8 PRG:5EB8 48 jsr Sub_DF6F ; CPU:$DEB9 PRG:5EB9 20 6F DF pla ; CPU:$DEBC PRG:5EBC 68 sta $0494 ; CPU:$DEBD PRG:5EBD 8D 94 04 rts ; CPU:$DEC0 PRG:5EC0 60 ; ----------------------------------------------------------------------------- ; Routine: SubCDEC1 ; Global: The routine calls Sub_DB93 and ComputePlayerShipPosition. ; Local: Executes 41 instructions: loads Y with $07; loads A from ; ((StarFieldPtrLo),y); ANDs A with $80; ORs A with $07; stores A to ; ((StarFieldPtrLo),y); loads Y with $08; and 35 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCDEC1: ldy #$0B ; CPU:$DEC1 PRG:5EC1 A0 0B lda (StarFieldPtrLo),y ; CPU:$DEC3 PRG:5EC3 B1 00 beq NmiHandler_OnZero12 ; CPU:$DEC5 PRG:5EC5 F0 AF pha ; CPU:$DEC7 PRG:5EC7 48 ldy #$02 ; CPU:$DEC8 PRG:5EC8 A0 02 lda (StarFieldPtrLo),y ; CPU:$DECA PRG:5ECA B1 00 sta Zp12 ; CPU:$DECC PRG:5ECC 85 12 iny ; CPU:$DECE PRG:5ECE C8 lda (StarFieldPtrLo),y ; CPU:$DECF PRG:5ECF B1 00 sta Zp13 ; CPU:$DED1 PRG:5ED1 85 13 pla ; CPU:$DED3 PRG:5ED3 68 cmp #$01 ; CPU:$DED4 PRG:5ED4 C9 01 bne NmiHandler_Loop255 ; CPU:$DED6 PRG:5ED6 D0 19 ldy #$03 ; CPU:$DED8 PRG:5ED8 A0 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero53 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A from $0400,y; branches on not equal ; to NmiHandler_Loop254; increments Y; compares Y with $06; branches ; on not equal to NmiHandler_OnNonzero53. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero53: lda $0400,y ; CPU:$DEDA PRG:5EDA B9 00 04 bne NmiHandler_Loop254 ; CPU:$DEDD PRG:5EDD D0 05 iny ; CPU:$DEDF PRG:5EDF C8 cpy #$06 ; CPU:$DEE0 PRG:5EE0 C0 06 bne NmiHandler_OnNonzero53 ; CPU:$DEE2 PRG:5EE2 D0 F6 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop254 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: stores Y to Zp7D; loads A from $FB7E,y; ; stores A to Zp11; loads A with $07; stores A to Zp10; branches on ; non-negative to NmiHandler_Loop256. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop254: sty Zp7D ; CPU:$DEE4 PRG:5EE4 84 7D lda $FB7E,y ; CPU:$DEE6 PRG:5EE6 B9 7E FB sta Zp11 ; CPU:$DEE9 PRG:5EE9 85 11 lda #$07 ; CPU:$DEEB PRG:5EEB A9 07 sta Zp10 ; CPU:$DEED PRG:5EED 85 10 bpl NmiHandler_Loop256 ; CPU:$DEEF PRG:5EEF 10 07 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop255 ; Global: The routine calls ComputeEnemyShipScreenPosition. ; Local: Executes 3 instructions: loads Y with $0B; loads A from ; ((StarFieldPtrLo),y); calls ComputeEnemyShipScreenPosition. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop255: ldy #$0B ; CPU:$DEF1 PRG:5EF1 A0 0B lda (StarFieldPtrLo),y ; CPU:$DEF3 PRG:5EF3 B1 00 jsr ComputeEnemyShipScreenPosition ; CPU:$DEF5 PRG:5EF5 20 BA D7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop256 ; Global: The routine calls ComputeObjectDistance and Sub_DDD8. ; Local: Executes 8 instructions: calls ComputeObjectDistance; loads A from Zp14; clears ; the carry flag; adds Zp15 to A; branches on carry set to ; NmiHandler_Loop257; compares A with $08; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07, Zp17, Zp1E, Zp1F, Zp79, ; Zp7C. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop256: jsr ComputeObjectDistance ; CPU:$DEF8 PRG:5EF8 20 09 C4 lda Zp14 ; CPU:$DEFB PRG:5EFB A5 14 clc ; CPU:$DEFD PRG:5EFD 18 adc Zp15 ; CPU:$DEFE PRG:5EFE 65 15 bcs NmiHandler_Loop257 ; CPU:$DF00 PRG:5F00 B0 07 cmp #$08 ; CPU:$DF02 PRG:5F02 C9 08 bcs NmiHandler_Loop257 ; CPU:$DF04 PRG:5F04 B0 03 jmp Sub_DDD8 ; CPU:$DF06 PRG:5F06 4C D8 DD ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop257 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: loads X with $00; loads Y with $01; loads A ; from ((StarFieldPtrLo),y); stores A to Zp17; ANDs A with $1F; sets ; the carry flag; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop257: ldx #$00 ; CPU:$DF09 PRG:5F09 A2 00 ldy #$01 ; CPU:$DF0B PRG:5F0B A0 01 lda (StarFieldPtrLo),y ; CPU:$DF0D PRG:5F0D B1 00 sta Zp17 ; CPU:$DF0F PRG:5F0F 85 17 and #$1F ; CPU:$DF11 PRG:5F11 29 1F sec ; CPU:$DF13 PRG:5F13 38 sbc SpriteX ; CPU:$DF14 PRG:5F14 E5 16 bcs NmiHandler_Loop258 ; CPU:$DF16 PRG:5F16 B0 05 eor #$FF ; CPU:$DF18 PRG:5F18 49 FF adc #$01 ; CPU:$DF1A PRG:5F1A 69 01 inx ; CPU:$DF1C PRG:5F1C E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop258 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: compares A with $0C; branches on carry clear ; to NmiHandler_Loop259; EORs A with $FF; adds $18 to A; increments ; X. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop258: cmp #$0C ; CPU:$DF1D PRG:5F1D C9 0C bcc NmiHandler_Loop259 ; CPU:$DF1F PRG:5F1F 90 05 eor #$FF ; CPU:$DF21 PRG:5F21 49 FF adc #$18 ; CPU:$DF23 PRG:5F23 69 18 inx ; CPU:$DF25 PRG:5F25 E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop259 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 15 instructions: compares A with $01; branches on equal to ; NmiHandler_Loop262; loads A from Zp17; ANDs A with $1F; stores A to ; Zp17; branches on carry clear to NmiHandler_Loop263; and 9 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop259: cmp #$01 ; CPU:$DF26 PRG:5F26 C9 01 beq NmiHandler_Loop262 ; CPU:$DF28 PRG:5F28 F0 27 lda Zp17 ; CPU:$DF2A PRG:5F2A A5 17 and #$1F ; CPU:$DF2C PRG:5F2C 29 1F sta Zp17 ; CPU:$DF2E PRG:5F2E 85 17 bcc NmiHandler_Loop263 ; CPU:$DF30 PRG:5F30 90 36 txa ; CPU:$DF32 PRG:5F32 8A ror a ; CPU:$DF33 PRG:5F33 6A bcc NmiHandler_Loop260 ; CPU:$DF34 PRG:5F34 90 0C inc Zp17 ; CPU:$DF36 PRG:5F36 E6 17 lda Zp17 ; CPU:$DF38 PRG:5F38 A5 17 cmp #$18 ; CPU:$DF3A PRG:5F3A C9 18 bcc NmiHandler_Loop261 ; CPU:$DF3C PRG:5F3C 90 0C lda #$00 ; CPU:$DF3E PRG:5F3E A9 00 bcs NmiHandler_Loop261 ; CPU:$DF40 PRG:5F40 B0 08 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop260 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: decrements Zp17; loads A from Zp17; branches ; on non-negative to NmiHandler_Loop261; loads A with $17. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp17. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop260: dec Zp17 ; CPU:$DF42 PRG:5F42 C6 17 lda Zp17 ; CPU:$DF44 PRG:5F44 A5 17 bpl NmiHandler_Loop261 ; CPU:$DF46 PRG:5F46 10 02 lda #$17 ; CPU:$DF48 PRG:5F48 A9 17 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop261 ; Global: The routine calls Sub_DB93. ; Local: Executes 3 instructions: ANDs A with $1F; stores A to ; ((StarFieldPtrLo),y); calls Sub_DB93. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop261: and #$1F ; CPU:$DF4A PRG:5F4A 29 1F sta (StarFieldPtrLo),y ; CPU:$DF4C PRG:5F4C 91 00 jmp Sub_DB93 ; CPU:$DF4E PRG:5F4E 4C 93 DB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop262 ; Global: The routine calls Sub_DB93. ; Local: Executes 13 instructions: loads A from Zp17; branches on negative to ; NmiHandler_Loop263; loads A from SpriteX; stores A to ; ((StarFieldPtrLo),y); loads A from Zp17; pushes A; and 7 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop262: lda Zp17 ; CPU:$DF51 PRG:5F51 A5 17 bmi NmiHandler_Loop263 ; CPU:$DF53 PRG:5F53 30 13 lda SpriteX ; CPU:$DF55 PRG:5F55 A5 16 sta (StarFieldPtrLo),y ; CPU:$DF57 PRG:5F57 91 00 lda Zp17 ; CPU:$DF59 PRG:5F59 A5 17 pha ; CPU:$DF5B PRG:5F5B 48 jsr Sub_DB93 ; CPU:$DF5C PRG:5F5C 20 93 DB pla ; CPU:$DF5F PRG:5F5F 68 clc ; CPU:$DF60 PRG:5F60 18 adc #$20 ; CPU:$DF61 PRG:5F61 69 20 ldy #$01 ; CPU:$DF63 PRG:5F63 A0 01 sta (StarFieldPtrLo),y ; CPU:$DF65 PRG:5F65 91 00 rts ; CPU:$DF67 PRG:5F67 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop263 ; Global: The routine calls Sub_DB93. ; Local: Executes 3 instructions: loads A from SpriteX; stores A to ; ((StarFieldPtrLo),y); calls Sub_DB93. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop263: lda SpriteX ; CPU:$DF68 PRG:5F68 A5 16 sta (StarFieldPtrLo),y ; CPU:$DF6A PRG:5F6A 91 00 jmp Sub_DB93 ; CPU:$DF6C PRG:5F6C 4C 93 DB ; ----------------------------------------------------------------------------- ; Routine: Sub_DF6F ; Global: The routine calls Sub_DB93. ; Local: Executes 9 instructions: calls Sub_DB93; loads Y with $02; loads A ; from ((StarFieldPtrLo),y); compares A with $E8; branches on carry ; set to NmiHandler_Loop264; increments Y; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, $0494, $0495. ; ; ----------------------------------------------------------------------------- Sub_DF6F: jsr Sub_DB93 ; CPU:$DF6F PRG:5F6F 20 93 DB ldy #$02 ; CPU:$DF72 PRG:5F72 A0 02 lda (StarFieldPtrLo),y ; CPU:$DF74 PRG:5F74 B1 00 cmp #$E8 ; CPU:$DF76 PRG:5F76 C9 E8 bcs NmiHandler_Loop264 ; CPU:$DF78 PRG:5F78 B0 07 iny ; CPU:$DF7A PRG:5F7A C8 lda (StarFieldPtrLo),y ; CPU:$DF7B PRG:5F7B B1 00 cmp #$C0 ; CPU:$DF7D PRG:5F7D C9 C0 bcc NmiHandler_Loop265 ; CPU:$DF7F PRG:5F7F 90 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop264 ; Global: Counts the player ship's spawn timer down. ; Local: Executes 1 instruction: decrements $0494. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, $0494, $0495. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop264: dec $0494 ; CPU:$DF81 PRG:5F81 CE 94 04 ; ----------------------------------------------------------------------------- ; Routine: DecrementPlayerSpawnTimer ; Global: The routine reads $0495. ; Local: Executes 4 instructions: decrements $0495; loads A with $80; loads Y ; with $00; stores A to ((StarFieldPtrLo),y). ; Parameters: Reads $0495 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags, $0495. ; ; ----------------------------------------------------------------------------- DecrementPlayerSpawnTimer: dec $0495 ; CPU:$DF84 PRG:5F84 CE 95 04 lda #$80 ; CPU:$DF87 PRG:5F87 A9 80 ldy #$00 ; CPU:$DF89 PRG:5F89 A0 00 sta (StarFieldPtrLo),y ; CPU:$DF8B PRG:5F8B 91 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop265 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop265: rts ; CPU:$DF8D PRG:5F8D 60 ; ----------------------------------------------------------------------------- ; Routine: SubCDF8E ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A with $80; loads Y with $00; stores A ; to ((StarFieldPtrLo),y); stores A to Zp7C; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N and Z flags, Zp7C. ; ; ----------------------------------------------------------------------------- SubCDF8E: lda #$80 ; CPU:$DF8E PRG:5F8E A9 80 ldy #$00 ; CPU:$DF90 PRG:5F90 A0 00 sta (StarFieldPtrLo),y ; CPU:$DF92 PRG:5F92 91 00 sta Zp7C ; CPU:$DF94 PRG:5F94 85 7C rts ; CPU:$DF96 PRG:5F96 60 ; ----------------------------------------------------------------------------- ; Routine: SubCDF97 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 18 instructions: loads A from Zp54; ORs A with Zp79; ; branches on not equal to NmiHandler_Loop266; loads A with $FF; ; stores A to Zp54; loads Y with $03; and 12 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and Y, the N and Z flags, Zp54, Zp58, Zp7D, Zp7E. ; ; ----------------------------------------------------------------------------- SubCDF97: lda Zp54 ; CPU:$DF97 PRG:5F97 A5 54 ora Zp79 ; CPU:$DF99 PRG:5F99 05 79 bne NmiHandler_Loop266 ; CPU:$DF9B PRG:5F9B D0 34 lda #$FF ; CPU:$DF9D PRG:5F9D A9 FF sta Zp54 ; CPU:$DF9F PRG:5F9F 85 54 ldy #$03 ; CPU:$DFA1 PRG:5FA1 A0 03 lda (StarFieldPtrLo),y ; CPU:$DFA3 PRG:5FA3 B1 00 sta Zp58 ; CPU:$DFA5 PRG:5FA5 85 58 ldy #$07 ; CPU:$DFA7 PRG:5FA7 A0 07 lda (StarFieldPtrLo),y ; CPU:$DFA9 PRG:5FA9 B1 00 and #$80 ; CPU:$DFAB PRG:5FAB 29 80 ora #$06 ; CPU:$DFAD PRG:5FAD 09 06 sta (StarFieldPtrLo),y ; CPU:$DFAF PRG:5FAF 91 00 ldy #$0B ; CPU:$DFB1 PRG:5FB1 A0 0B lda (StarFieldPtrLo),y ; CPU:$DFB3 PRG:5FB3 B1 00 sta Zp7D ; CPU:$DFB5 PRG:5FB5 85 7D lda StarFieldPtrLo ; CPU:$DFB7 PRG:5FB7 A5 00 sta Zp7E ; CPU:$DFB9 PRG:5FB9 85 7E ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero54 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero54: rts ; CPU:$DFBB PRG:5FBB 60 ; ----------------------------------------------------------------------------- ; Routine: SubCDFBC ; Global: The routine calls Sub_DB93, ReadEnemyPathTableEntry and IncrementEnemyPathIndex. ; Local: Executes 10 instructions: returns with RTS; loads A from Zp54; ; branches on equal to NmiHandler_Loop266; branches on not equal to ; NmiHandler_OnNonzero54; calls Sub_DB93; calls ReadEnemyPathTableEntry; and 4 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp07. ; ; ----------------------------------------------------------------------------- SubCDFBC: lda Zp54 ; CPU:$DFBC PRG:5FBC A5 54 beq NmiHandler_Loop266 ; CPU:$DFBE PRG:5FBE F0 11 bne NmiHandler_OnNonzero54 ; CPU:$DFC0 PRG:5FC0 D0 F9 jsr Sub_DB93 ; CPU:$DFC2 PRG:5FC2 20 93 DB jsr ReadEnemyPathTableEntry ; CPU:$DFC5 PRG:5FC5 20 02 E0 ldy #$02 ; CPU:$DFC8 PRG:5FC8 A0 02 cmp (StarFieldPtrLo),y ; CPU:$DFCA PRG:5FCA D1 00 bcs NmiHandler_Loop267 ; CPU:$DFCC PRG:5FCC B0 11 jsr IncrementEnemyPathIndex ; CPU:$DFCE PRG:5FCE 20 0C E0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop266 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 7 instructions: loads Y with $04; loads A with $00; stores A ; to ((StarFieldPtrLo),y); loads Y with $07; loads A from ; ((StarFieldPtrLo),y); ANDs A with $80; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and Y, the N and Z flags. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop266: ldy #$04 ; CPU:$DFD1 PRG:5FD1 A0 04 lda #$00 ; CPU:$DFD3 PRG:5FD3 A9 00 sta (StarFieldPtrLo),y ; CPU:$DFD5 PRG:5FD5 91 00 ldy #$07 ; CPU:$DFD7 PRG:5FD7 A0 07 lda (StarFieldPtrLo),y ; CPU:$DFD9 PRG:5FD9 B1 00 and #$80 ; CPU:$DFDB PRG:5FDB 29 80 sta (StarFieldPtrLo),y ; CPU:$DFDD PRG:5FDD 91 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop267 ; Global: Reads the pointer of the enemy flight path the current state selects. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop267: rts ; CPU:$DFDF PRG:5FDF 60 ; ----------------------------------------------------------------------------- ; Routine: GetEnemyPathTableEntry ; Global: Steps the index into the enemy flight path on by one and reads the entry. ; Local: Executes 9 instructions: loads Y with $05; loads A from ; ((StarFieldPtrLo),y); shifts a left; copies A into X; loads A from ; $FEF9,x; stores A to Zp02; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp02, Zp03. ; ; ----------------------------------------------------------------------------- GetEnemyPathTableEntry: ldy #$05 ; CPU:$DFE0 PRG:5FE0 A0 05 lda (StarFieldPtrLo),y ; CPU:$DFE2 PRG:5FE2 B1 00 asl a ; CPU:$DFE4 PRG:5FE4 0A tax ; CPU:$DFE5 PRG:5FE5 AA lda $FEF9,x ; CPU:$DFE6 PRG:5FE6 BD F9 FE sta Zp02 ; CPU:$DFE9 PRG:5FE9 85 02 lda $FEFA,x ; CPU:$DFEB PRG:5FEB BD FA FE sta Zp03 ; CPU:$DFEE PRG:5FEE 85 03 rts ; CPU:$DFF0 PRG:5FF0 60 ; ----------------------------------------------------------------------------- ; Routine: AdvanceEnemyPathIndex ; Global: Reads the entry of the enemy flight path the current index points at. ; Local: Executes 11 instructions: loads Y with $06; loads A from ; ((StarFieldPtrLo),y); pushes A; clears the carry flag; adds $01 to ; A; stores A to ((StarFieldPtrLo),y); and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N, Z, C and V flags, Zp07. ; ; ----------------------------------------------------------------------------- AdvanceEnemyPathIndex: ldy #$06 ; CPU:$DFF1 PRG:5FF1 A0 06 lda (StarFieldPtrLo),y ; CPU:$DFF3 PRG:5FF3 B1 00 pha ; CPU:$DFF5 PRG:5FF5 48 clc ; CPU:$DFF6 PRG:5FF6 18 adc #$01 ; CPU:$DFF7 PRG:5FF7 69 01 sta (StarFieldPtrLo),y ; CPU:$DFF9 PRG:5FF9 91 00 pla ; CPU:$DFFB PRG:5FFB 68 tay ; CPU:$DFFC PRG:5FFC A8 lda (Zp02),y ; CPU:$DFFD PRG:5FFD B1 02 sta Zp07 ; CPU:$DFFF PRG:5FFF 85 07 rts ; CPU:$E001 PRG:6001 60 ; ----------------------------------------------------------------------------- ; Routine: ReadEnemyPathTableEntry ; Global: Steps the index into the enemy flight path on by one. ; Local: Executes 6 instructions: loads Y with $06; loads A from ; ((StarFieldPtrLo),y); copies A into Y; loads A from ((Zp02),y); ; stores A to Zp07; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N and Z flags, Zp07. ; ; ----------------------------------------------------------------------------- ReadEnemyPathTableEntry: ldy #$06 ; CPU:$E002 PRG:6002 A0 06 lda (StarFieldPtrLo),y ; CPU:$E004 PRG:6004 B1 00 tay ; CPU:$E006 PRG:6006 A8 lda (Zp02),y ; CPU:$E007 PRG:6007 B1 02 sta Zp07 ; CPU:$E009 PRG:6009 85 07 rts ; CPU:$E00B PRG:600B 60 ; ----------------------------------------------------------------------------- ; Routine: IncrementEnemyPathIndex ; Global: Steps the index into the enemy flight path back by one. ; Local: Executes 6 instructions: loads Y with $06; loads A from ; ((StarFieldPtrLo),y); clears the carry flag; adds $01 to A; stores ; A to ((StarFieldPtrLo),y); returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- IncrementEnemyPathIndex: ldy #$06 ; CPU:$E00C PRG:600C A0 06 lda (StarFieldPtrLo),y ; CPU:$E00E PRG:600E B1 00 clc ; CPU:$E010 PRG:6010 18 adc #$01 ; CPU:$E011 PRG:6011 69 01 sta (StarFieldPtrLo),y ; CPU:$E013 PRG:6013 91 00 rts ; CPU:$E015 PRG:6015 60 ; ----------------------------------------------------------------------------- ; Routine: DecrementEnemyPathIndex ; Global: Updates the player's shot: it moves it and checks what it hits. ; Local: Executes 6 instructions: loads Y with $06; loads A from ; ((StarFieldPtrLo),y); sets the carry flag; subtracts $01 from A; ; stores A to ((StarFieldPtrLo),y); returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N, Z, C and V flags. ; ; ----------------------------------------------------------------------------- DecrementEnemyPathIndex: ldy #$06 ; CPU:$E016 PRG:6016 A0 06 lda (StarFieldPtrLo),y ; CPU:$E018 PRG:6018 B1 00 sec ; CPU:$E01A PRG:601A 38 sbc #$01 ; CPU:$E01B PRG:601B E9 01 sta (StarFieldPtrLo),y ; CPU:$E01D PRG:601D 91 00 rts ; CPU:$E01F PRG:601F 60 ; ----------------------------------------------------------------------------- ; Routine: UpdatePlayerShot ; Global: The routine calls Sub_C317, reads $0200. ; Local: Executes 14 instructions: loads A from $0200; branches on negative to ; NmiHandler_Loop273; loads A from Zp79; compares A with $06; ; branches on equal to NmiHandler_Loop273; loads A from Zp62; and 8 ; more instructions. ; Parameters: Reads $0200 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- UpdatePlayerShot: lda $0200 ; CPU:$E020 PRG:6020 AD 00 02 bmi NmiHandler_Loop273 ; CPU:$E023 PRG:6023 30 73 lda Zp79 ; CPU:$E025 PRG:6025 A5 79 cmp #$06 ; CPU:$E027 PRG:6027 C9 06 beq NmiHandler_Loop273 ; CPU:$E029 PRG:6029 F0 6D lda Zp62 ; CPU:$E02B PRG:602B A5 62 bne NmiHandler_Loop268 ; CPU:$E02D PRG:602D D0 0F dec ZpC9 ; CPU:$E02F PRG:602F C6 C9 bpl NmiHandler_Loop273 ; CPU:$E031 PRG:6031 10 65 jsr Sub_C317 ; CPU:$E033 PRG:6033 20 17 C3 and #$1F ; CPU:$E036 PRG:6036 29 1F adc #$10 ; CPU:$E038 PRG:6038 69 10 sta ZpC9 ; CPU:$E03A PRG:603A 85 C9 bne NmiHandler_Loop270 ; CPU:$E03C PRG:603C D0 1A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop268 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: loads X from Zp61; loads A from Zp45,x; ANDs ; A with $C0; branches on not equal to NmiHandler_Loop270; loads A ; from Zp43,x; ANDs A with $C0; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop268: ldx Zp61 ; CPU:$E03E PRG:603E A6 61 lda Zp45,x ; CPU:$E040 PRG:6040 B5 45 and #$C0 ; CPU:$E042 PRG:6042 29 C0 bne NmiHandler_Loop270 ; CPU:$E044 PRG:6044 D0 12 lda Zp43,x ; CPU:$E046 PRG:6046 B5 43 and #$C0 ; CPU:$E048 PRG:6048 29 C0 bne NmiHandler_Loop269 ; CPU:$E04A PRG:604A D0 04 sta Zp60 ; CPU:$E04C PRG:604C 85 60 beq NmiHandler_Loop273 ; CPU:$E04E PRG:604E F0 48 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop269 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: increments Zp60; loads A from Zp60; compares ; A with $14; branches on carry clear to NmiHandler_Loop273. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop269: inc Zp60 ; CPU:$E050 PRG:6050 E6 60 lda Zp60 ; CPU:$E052 PRG:6052 A5 60 cmp #$14 ; CPU:$E054 PRG:6054 C9 14 bcc NmiHandler_Loop273 ; CPU:$E056 PRG:6056 90 40 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop270 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads A with $00; stores A to Zp60; loads X ; with $00; loads A from $02E0,x; branches on negative to ; NmiHandler_Loop271; loads X with $08; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop270: lda #$00 ; CPU:$E058 PRG:6058 A9 00 sta Zp60 ; CPU:$E05A PRG:605A 85 60 ldx #$00 ; CPU:$E05C PRG:605C A2 00 lda $02E0,x ; CPU:$E05E PRG:605E BD E0 02 bmi NmiHandler_Loop271 ; CPU:$E061 PRG:6061 30 07 ldx #$08 ; CPU:$E063 PRG:6063 A2 08 lda $02E0,x ; CPU:$E065 PRG:6065 BD E0 02 bpl NmiHandler_Loop273 ; CPU:$E068 PRG:6068 10 2E ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop271 ; Global: The routine reads $0201, $0202 and $0203. ; Local: Executes 15 instructions: loads A from $0201; ANDs A with $1F; stores ; A to $02E0,x; loads A from $0202; stores A to $02E1,x; loads A from ; $0203; and 9 more instructions. ; Parameters: Reads $0201, $0202 and $0203 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop271: lda $0201 ; CPU:$E06A PRG:606A AD 01 02 and #$1F ; CPU:$E06D PRG:606D 29 1F sta $02E0,x ; CPU:$E06F PRG:606F 9D E0 02 lda $0202 ; CPU:$E072 PRG:6072 AD 02 02 sta $02E1,x ; CPU:$E075 PRG:6075 9D E1 02 lda $0203 ; CPU:$E078 PRG:6078 AD 03 02 sta $02E2,x ; CPU:$E07B PRG:607B 9D E2 02 lda #$00 ; CPU:$E07E PRG:607E A9 00 sta $02E3,x ; CPU:$E080 PRG:6080 9D E3 02 sta $02E4,x ; CPU:$E083 PRG:6083 9D E4 02 ldy Zp79 ; CPU:$E086 PRG:6086 A4 79 dey ; CPU:$E088 PRG:6088 88 bne NmiHandler_Loop272 ; CPU:$E089 PRG:6089 D0 05 lda #$00 ; CPU:$E08B PRG:608B A9 00 sta $02F0,x ; CPU:$E08D PRG:608D 9D F0 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop272 ; Global: The routine calls Sub_C335, writes $05A2. ; Local: Executes 3 instructions: loads A with $01; stores A to $05A2; calls ; Sub_C335. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $05A2 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop272: lda #$01 ; CPU:$E090 PRG:6090 A9 01 sta $05A2 ; CPU:$E092 PRG:6092 8D A2 05 jsr Sub_C335 ; CPU:$E095 PRG:6095 20 35 C3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop273 ; Global: The routine calls Sub_E09F. ; Local: Executes 3 instructions: loads X with $00; calls Sub_E09F; loads X ; with $08. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop273: ldx #$00 ; CPU:$E098 PRG:6098 A2 00 jsr Sub_E09F ; CPU:$E09A PRG:609A 20 9F E0 ldx #$08 ; CPU:$E09D PRG:609D A2 08 ; ----------------------------------------------------------------------------- ; Routine: Sub_E09F ; Global: The routine calls MoveEnemyShipAlongPath. ; Local: Executes 14 instructions: loads A from $02E0,x; branches on negative ; to NmiHandler_Loop275; copies A into Y; calls MoveEnemyShipAlongPath; compares A ; with $F8; branches on carry set to NmiHandler_Loop274; and 8 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp02, the OAM shadow. ; ; ----------------------------------------------------------------------------- Sub_E09F: lda $02E0,x ; CPU:$E09F PRG:609F BD E0 02 bmi NmiHandler_Loop275 ; CPU:$E0A2 PRG:60A2 30 1A tay ; CPU:$E0A4 PRG:60A4 A8 jsr MoveEnemyShipAlongPath ; CPU:$E0A5 PRG:60A5 20 D9 E0 cmp #$F8 ; CPU:$E0A8 PRG:60A8 C9 F8 bcs NmiHandler_Loop274 ; CPU:$E0AA PRG:60AA B0 0D tya ; CPU:$E0AC PRG:60AC 98 adc #$06 ; CPU:$E0AD PRG:60AD 69 06 tay ; CPU:$E0AF PRG:60AF A8 inx ; CPU:$E0B0 PRG:60B0 E8 jsr MoveEnemyShipAlongPath ; CPU:$E0B1 PRG:60B1 20 D9 E0 dex ; CPU:$E0B4 PRG:60B4 CA cmp #$BC ; CPU:$E0B5 PRG:60B5 C9 BC bcc NmiHandler_Loop275 ; CPU:$E0B7 PRG:60B7 90 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop274 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $80; stores A to $02E0,x. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N, Z, C and V flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop274: lda #$80 ; CPU:$E0B9 PRG:60B9 A9 80 sta $02E0,x ; CPU:$E0BB PRG:60BB 9D E0 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop275 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 10 instructions: loads A from $02F0,x; branches on negative ; to NmiHandler_Loop276; loads A from $02E0,x; stores A to $02F0,x; ; loads A from $02E1,x; stores A to $02F1,x; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, the N, Z, C and V flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop275: lda $02F0,x ; CPU:$E0BE PRG:60BE BD F0 02 bmi NmiHandler_Loop276 ; CPU:$E0C1 PRG:60C1 30 15 lda $02E0,x ; CPU:$E0C3 PRG:60C3 BD E0 02 sta $02F0,x ; CPU:$E0C6 PRG:60C6 9D F0 02 lda $02E1,x ; CPU:$E0C9 PRG:60C9 BD E1 02 sta $02F1,x ; CPU:$E0CC PRG:60CC 9D F1 02 lda $02E2,x ; CPU:$E0CF PRG:60CF BD E2 02 clc ; CPU:$E0D2 PRG:60D2 18 adc #$0E ; CPU:$E0D3 PRG:60D3 69 0E sta $02F2,x ; CPU:$E0D5 PRG:60D5 9D F2 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop276 ; Global: Moves an enemy ship along its flight path by the step in the path table. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop276: rts ; CPU:$E0D8 PRG:60D8 60 ; ----------------------------------------------------------------------------- ; Routine: MoveEnemyShipAlongPath ; Global: The routine calls DivideTileIndexBy16. ; Local: Executes 11 instructions: loads A from $02E3,x; clears the carry ; flag; adds $E0F3,y to A; stores A to Zp02; ANDs A with $0F; stores ; A to $02E3,x; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N, Z, C and V flags, Zp02, the OAM shadow. ; ; ----------------------------------------------------------------------------- MoveEnemyShipAlongPath: lda $02E3,x ; CPU:$E0D9 PRG:60D9 BD E3 02 clc ; CPU:$E0DC PRG:60DC 18 adc $E0F3,y ; CPU:$E0DD PRG:60DD 79 F3 E0 sta Zp02 ; CPU:$E0E0 PRG:60E0 85 02 and #$0F ; CPU:$E0E2 PRG:60E2 29 0F sta $02E3,x ; CPU:$E0E4 PRG:60E4 9D E3 02 lda Zp02 ; CPU:$E0E7 PRG:60E7 A5 02 jsr DivideTileIndexBy16 ; CPU:$E0E9 PRG:60E9 20 FB C3 adc $02E1,x ; CPU:$E0EC PRG:60EC 7D E1 02 sta $02E1,x ; CPU:$E0EF PRG:60EF 9D E1 02 rts ; CPU:$E0F2 PRG:60F2 60 ; ---- data $E0F3-$E112 (32 bytes) ---- ; referenced by `adc $E0F3,y` at $E0DD (operand $E0F3 falls inside this region) EnemyPathDeltaTable: .byte $B0, $B3, $BB, $C7, $D8, $EB, $00, $15, $28, $39, $45, $4D, $50, $4D, $45, $39 ; CPU:$E0F3 PRG:60F3 B0 B3 BB C7 D8 EB 00 15 28 39 45 4D .byte $28, $15, $00, $EB, $D8, $C7, $BB, $B3, $B0, $B3, $BB, $C7, $D8, $EB, $00, $15 ; CPU:$E103 PRG:6103 28 15 00 EB D8 C7 BB B3 B0 B3 BB C7 ; ----------------------------------------------------------------------------- ; Routine: Sub_E113 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A from Zp5F; branches on equal to ; NmiHandler_Loop277; decrements Zp5F; branches on not equal to ; NmiHandler_Loop280. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_E113: lda Zp5F ; CPU:$E113 PRG:6113 A5 5F beq NmiHandler_Loop277 ; CPU:$E115 PRG:6115 F0 04 dec Zp5F ; CPU:$E117 PRG:6117 C6 5F bne NmiHandler_Loop280 ; CPU:$E119 PRG:6119 D0 75 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop277 ; Global: The routine calls Sub_C317, reads $0464 and $045E. ; Local: Executes 33 instructions: loads A from $0464; compares A with $03; ; branches on equal to NmiHandler_Loop280; loads A from Zp7A; ; branches on not equal to NmiHandler_Loop280; loads A from Zp48; and ; 27 more instructions. ; Parameters: Reads $0464 and $045E from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop277: lda $0464 ; CPU:$E11B PRG:611B AD 64 04 cmp #$03 ; CPU:$E11E PRG:611E C9 03 beq NmiHandler_Loop280 ; CPU:$E120 PRG:6120 F0 6E lda Zp7A ; CPU:$E122 PRG:6122 A5 7A bne NmiHandler_Loop280 ; CPU:$E124 PRG:6124 D0 6A lda Zp48 ; CPU:$E126 PRG:6126 A5 48 and $045E ; CPU:$E128 PRG:6128 2D 5E 04 bne NmiHandler_Loop278 ; CPU:$E12B PRG:612B D0 42 jsr Sub_C317 ; CPU:$E12D PRG:612D 20 17 C3 and #$70 ; CPU:$E130 PRG:6130 29 70 tay ; CPU:$E132 PRG:6132 A8 lda $0220,y ; CPU:$E133 PRG:6133 B9 20 02 bmi NmiHandler_Loop278 ; CPU:$E136 PRG:6136 30 37 lda $0227,y ; CPU:$E138 PRG:6138 B9 27 02 and #$7F ; CPU:$E13B PRG:613B 29 7F bne NmiHandler_Loop278 ; CPU:$E13D PRG:613D D0 30 lda $0221,y ; CPU:$E13F PRG:613F B9 21 02 and #$1F ; CPU:$E142 PRG:6142 29 1F sec ; CPU:$E144 PRG:6144 38 sbc #$06 ; CPU:$E145 PRG:6145 E9 06 cmp #$0D ; CPU:$E147 PRG:6147 C9 0D bcs NmiHandler_Loop278 ; CPU:$E149 PRG:6149 B0 24 lda $0222,y ; CPU:$E14B PRG:614B B9 22 02 sec ; CPU:$E14E PRG:614E 38 sbc #$10 ; CPU:$E14F PRG:614F E9 10 cmp #$80 ; CPU:$E151 PRG:6151 C9 80 bcs NmiHandler_Loop278 ; CPU:$E153 PRG:6153 B0 1A lda $022C,y ; CPU:$E155 PRG:6155 B9 2C 02 beq NmiHandler_Loop278 ; CPU:$E158 PRG:6158 F0 15 sec ; CPU:$E15A PRG:615A 38 sbc #$01 ; CPU:$E15B PRG:615B E9 01 sta $022C,y ; CPU:$E15D PRG:615D 99 2C 02 ldx #$00 ; CPU:$E160 PRG:6160 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear14 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads A from Zp90,x; branches on negative to ; NmiHandler_Loop279; copies X into A; clears the carry flag; adds ; $04 to A; copies A into X; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear14: lda Zp90,x ; CPU:$E162 PRG:6162 B5 90 bmi NmiHandler_Loop279 ; CPU:$E164 PRG:6164 30 0C txa ; CPU:$E166 PRG:6166 8A clc ; CPU:$E167 PRG:6167 18 adc #$04 ; CPU:$E168 PRG:6168 69 04 tax ; CPU:$E16A PRG:616A AA cmp #$20 ; CPU:$E16B PRG:616B C9 20 bcc NmiHandler_OnCarryClear14 ; CPU:$E16D PRG:616D 90 F3 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop278 ; Global: The routine calls NmiHandler_Loop280. ; Local: Executes 1 instruction: calls NmiHandler_Loop280. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop278: jmp NmiHandler_Loop280 ; CPU:$E16F PRG:616F 4C 90 E1 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop279 ; Global: The routine calls ComputePlayerShipPosition, reads $0477. ; Local: Executes 13 instructions: stores X to StarFieldPtrLo; increments ; $0477; loads A from $0222,y; stores A to Zp12; stores A to Zp91,x; ; loads A from $0223,y; and 7 more instructions. ; Parameters: Reads $0477 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop279: stx StarFieldPtrLo ; CPU:$E172 PRG:6172 86 00 inc $0477 ; CPU:$E174 PRG:6174 EE 77 04 lda $0222,y ; CPU:$E177 PRG:6177 B9 22 02 sta Zp12 ; CPU:$E17A PRG:617A 85 12 sta Zp91,x ; CPU:$E17C PRG:617C 95 91 lda $0223,y ; CPU:$E17E PRG:617E B9 23 02 sta Zp13 ; CPU:$E181 PRG:6181 85 13 sta Zp92,x ; CPU:$E183 PRG:6183 95 92 jsr ComputePlayerShipPosition ; CPU:$E185 PRG:6185 20 5F C4 ldx StarFieldPtrLo ; CPU:$E188 PRG:6188 A6 00 sta Zp90,x ; CPU:$E18A PRG:618A 95 90 lda #$00 ; CPU:$E18C PRG:618C A9 00 sta Zp93,x ; CPU:$E18E PRG:618E 95 93 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop280 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop280: ldx #$00 ; CPU:$E190 PRG:6190 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear15 ; Global: The routine calls DivideTileIndexBy16. ; Local: Executes 25 instructions: loads A from Zp90,x; branches on negative ; to NmiHandler_OnNegative4; copies A into Y; loads A from Zp48; ; rotates a right; loads A from Zp91,x; and 19 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear15: lda Zp90,x ; CPU:$E192 PRG:6192 B5 90 bmi NmiHandler_OnNegative4 ; CPU:$E194 PRG:6194 30 29 tay ; CPU:$E196 PRG:6196 A8 lda Zp48 ; CPU:$E197 PRG:6197 A5 48 ror a ; CPU:$E199 PRG:6199 6A lda Zp91,x ; CPU:$E19A PRG:619A B5 91 adc #$02 ; CPU:$E19C PRG:619C 69 02 sta Zp91,x ; CPU:$E19E PRG:619E 95 91 cmp #$E8 ; CPU:$E1A0 PRG:61A0 C9 E8 bcs NmiHandler_Loop281 ; CPU:$E1A2 PRG:61A2 B0 25 lda $FFA0,y ; CPU:$E1A4 PRG:61A4 B9 A0 FF clc ; CPU:$E1A7 PRG:61A7 18 adc Zp93,x ; CPU:$E1A8 PRG:61A8 75 93 pha ; CPU:$E1AA PRG:61AA 48 and #$0F ; CPU:$E1AB PRG:61AB 29 0F sta Zp93,x ; CPU:$E1AD PRG:61AD 95 93 pla ; CPU:$E1AF PRG:61AF 68 jsr DivideTileIndexBy16 ; CPU:$E1B0 PRG:61B0 20 FB C3 clc ; CPU:$E1B3 PRG:61B3 18 adc Zp92,x ; CPU:$E1B4 PRG:61B4 75 92 sta Zp92,x ; CPU:$E1B6 PRG:61B6 95 92 sec ; CPU:$E1B8 PRG:61B8 38 sbc #$04 ; CPU:$E1B9 PRG:61B9 E9 04 cmp #$B8 ; CPU:$E1BB PRG:61BB C9 B8 bcs NmiHandler_Loop281 ; CPU:$E1BD PRG:61BD B0 0A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNegative4 ; Global: The routine calls DivideTileIndexBy16. ; Local: Executes 32 instructions: loads A from Zp90,x; branches on negative ; to NmiHandler_OnNegative4; copies A into Y; loads A from Zp48; ; rotates a right; loads A from Zp91,x; and 26 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNegative4: txa ; CPU:$E1BF PRG:61BF 8A clc ; CPU:$E1C0 PRG:61C0 18 adc #$04 ; CPU:$E1C1 PRG:61C1 69 04 tax ; CPU:$E1C3 PRG:61C3 AA cmp #$20 ; CPU:$E1C4 PRG:61C4 C9 20 bcc NmiHandler_OnCarryClear15 ; CPU:$E1C6 PRG:61C6 90 CA rts ; CPU:$E1C8 PRG:61C8 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop281 ; Global: The routine calls DivideTileIndexBy16, reads $0477. ; Local: Executes 36 instructions: loads A from Zp90,x; branches on negative ; to NmiHandler_OnNegative4; copies A into Y; loads A from Zp48; ; rotates a right; loads A from Zp91,x; and 30 more instructions. ; Parameters: Reads $0477 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop281: dec $0477 ; CPU:$E1C9 PRG:61C9 CE 77 04 lda #$FF ; CPU:$E1CC PRG:61CC A9 FF sta Zp90,x ; CPU:$E1CE PRG:61CE 95 90 bmi NmiHandler_OnNegative4 ; CPU:$E1D0 PRG:61D0 30 ED ; ----------------------------------------------------------------------------- ; Routine: Sub_E1D2 ; Global: The routine calls CallHandlerThroughPointer. ; Local: Executes 4 instructions: loads A from Zp79; calls CallHandlerThroughPointer; subtracts ; $E1 from A; EORs A with $CBE4,x. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- Sub_E1D2: lda Zp79 ; CPU:$E1D2 PRG:61D2 A5 79 jsr CallHandlerThroughPointer ; CPU:$E1D4 PRG:61D4 20 01 C3 sbc #$E1 ; CPU:$E1D7 PRG:61D7 E9 E1 eor $CBE4,x ; CPU:$E1D9 PRG:61D9 5D E4 CB .byte $E2, $36 ; CPU:$E1DC PRG:61DC E2 36 -- nop #$36 (undocumented; ca65 cannot encode) ; CPU:$E1DC PRG:61DC E2 36 .byte $E3, $AC ; CPU:$E1DE PRG:61DE E3 AC -- isc (ZpAC,x) (undocumented; ca65 cannot encode) ; CPU:$E1DE PRG:61DE E3 AC .byte $E3, $26 ; CPU:$E1E0 PRG:61E0 E3 26 -- isc (Zp26,x) (undocumented; ca65 cannot encode) ; CPU:$E1E0 PRG:61E0 E3 26 cpx Zp73 ; CPU:$E1E2 PRG:61E2 E4 73 cpx Zp23 ; CPU:$E1E4 PRG:61E4 E4 23 .byte $E2, $99 ; CPU:$E1E6 PRG:61E6 E2 99 -- nop #$99 (undocumented; ca65 cannot encode) ; CPU:$E1E6 PRG:61E6 E2 99 ; ---- data $E1E8-$E1E8 (1 bytes) ---- UnreachedByte: .byte $E2 ; CPU:$E1E8 PRG:61E8 E2 ; ----------------------------------------------------------------------------- ; Routine: SubCE1E9 ; Global: The routine calls Sub_ED70, writes $05A1, $0204 and $0471, reads ; $0200, $0203 and $0202. ; Local: Executes 27 instructions: loads A from $0200; branches on negative to ; NmiHandler_Loop285; loads A from Zp54; compares A with $02; ; branches on not equal to NmiHandler_Loop282; loads A from Zp58; and ; 21 more instructions. ; Parameters: Reads $0200, $0203 and $0202 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $05A1, $0204 and $0471 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCE1E9: lda $0200 ; CPU:$E1E9 PRG:61E9 AD 00 02 bmi NmiHandler_Loop285 ; CPU:$E1EC PRG:61EC 30 7B lda Zp54 ; CPU:$E1EE PRG:61EE A5 54 cmp #$02 ; CPU:$E1F0 PRG:61F0 C9 02 bne NmiHandler_Loop282 ; CPU:$E1F2 PRG:61F2 D0 2F lda Zp58 ; CPU:$E1F4 PRG:61F4 A5 58 sec ; CPU:$E1F6 PRG:61F6 38 sbc #$24 ; CPU:$E1F7 PRG:61F7 E9 24 cmp $0203 ; CPU:$E1F9 PRG:61F9 CD 03 02 bcs NmiHandler_Loop282 ; CPU:$E1FC PRG:61FC B0 25 clc ; CPU:$E1FE PRG:61FE 18 adc #$48 ; CPU:$E1FF PRG:61FF 69 48 cmp $0203 ; CPU:$E201 PRG:6201 CD 03 02 bcc NmiHandler_Loop282 ; CPU:$E204 PRG:6204 90 1D ldx #$02 ; CPU:$E206 PRG:6206 A2 02 stx Zp79 ; CPU:$E208 PRG:6208 86 79 dex ; CPU:$E20A PRG:620A CA stx Zp7A ; CPU:$E20B PRG:620B 86 7A stx $05A1 ; CPU:$E20D PRG:620D 8E A1 05 lda #$1B ; CPU:$E210 PRG:6210 A9 1B jsr Sub_ED70 ; CPU:$E212 PRG:6212 20 70 ED dec $0202 ; CPU:$E215 PRG:6215 CE 02 02 lda #$00 ; CPU:$E218 PRG:6218 A9 00 sta $0204 ; CPU:$E21A PRG:621A 8D 04 02 lda #$F0 ; CPU:$E21D PRG:621D A9 F0 sta $0471 ; CPU:$E21F PRG:621F 8D 71 04 rts ; CPU:$E222 PRG:6222 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop282 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $B8; stores A to TilePtrLo. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp44, Zp6E, Zp6F, ZpCA, ZpCB, the OAM ; shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop282: lda #$B8 ; CPU:$E223 PRG:6223 A9 B8 sta TilePtrLo ; CPU:$E225 PRG:6225 85 08 ; ----------------------------------------------------------------------------- ; Routine: Sub_E227 ; Global: The routine calls Sub_C317, reads $0200. ; Local: Executes 15 instructions: loads A from $0200; branches on negative to ; NmiHandler_Loop285; loads A from Zp62; branches on not equal to ; NmiHandler_Loop284; decrements ZpCA; branches on non-negative to ; NmiHandler_Loop283; and 9 more instructions. ; Parameters: Reads $0200 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp44, Zp6E, Zp6F, ZpCA, ZpCB, the OAM ; shadow. ; ; ----------------------------------------------------------------------------- Sub_E227: lda $0200 ; CPU:$E227 PRG:6227 AD 00 02 bmi NmiHandler_Loop285 ; CPU:$E22A PRG:622A 30 3D lda Zp62 ; CPU:$E22C PRG:622C A5 62 bne NmiHandler_Loop284 ; CPU:$E22E PRG:622E D0 1D dec ZpCA ; CPU:$E230 PRG:6230 C6 CA bpl NmiHandler_Loop283 ; CPU:$E232 PRG:6232 10 11 jsr Sub_C317 ; CPU:$E234 PRG:6234 20 17 C3 and #$3F ; CPU:$E237 PRG:6237 29 3F sta ZpCA ; CPU:$E239 PRG:6239 85 CA lda #$00 ; CPU:$E23B PRG:623B A9 00 lsr ZpCA ; CPU:$E23D PRG:623D 46 CA rol a ; CPU:$E23F PRG:623F 2A lsr ZpCA ; CPU:$E240 PRG:6240 46 CA rol a ; CPU:$E242 PRG:6242 2A sta ZpCB ; CPU:$E243 PRG:6243 85 CB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop283 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A from Zp44; ANDs A with $FC; ORs A ; with ZpCB; stores A to Zp44. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z and C flags, Zp44, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop283: lda Zp44 ; CPU:$E245 PRG:6245 A5 44 and #$FC ; CPU:$E247 PRG:6247 29 FC ora ZpCB ; CPU:$E249 PRG:6249 05 CB sta Zp44 ; CPU:$E24B PRG:624B 85 44 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop284 ; Global: The routine writes $0200, $0201 and $0202. ; Local: Executes 15 instructions: loads A with $00; stores A to $0200; stores ; A to $0201; loads A with $C7; stores A to $0202; loads X from Zp61; ; and 9 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0200, $0201 and $0202 ; changed. ; Clobbers: ; A and X, the N, Z and C flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop284: lda #$00 ; CPU:$E24D PRG:624D A9 00 sta $0200 ; CPU:$E24F PRG:624F 8D 00 02 sta $0201 ; CPU:$E252 PRG:6252 8D 01 02 lda #$C7 ; CPU:$E255 PRG:6255 A9 C7 sta $0202 ; CPU:$E257 PRG:6257 8D 02 02 ldx Zp61 ; CPU:$E25A PRG:625A A6 61 dex ; CPU:$E25C PRG:625C CA txa ; CPU:$E25D PRG:625D 8A and #$01 ; CPU:$E25E PRG:625E 29 01 tax ; CPU:$E260 PRG:6260 AA lda Zp44,x ; CPU:$E261 PRG:6261 B5 44 ror a ; CPU:$E263 PRG:6263 6A bcs NmiHandler_Loop286 ; CPU:$E264 PRG:6264 B0 04 ror a ; CPU:$E266 PRG:6266 6A bcs NmiHandler_Loop289 ; CPU:$E267 PRG:6267 B0 1A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop285 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop285: rts ; CPU:$E269 PRG:6269 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop286 ; Global: The routine reads $0204 and $0203. ; Local: Executes 10 instructions: returns with RTS; rotates a right; branches ; on carry set to NmiHandler_Loop285; increments $0204; loads A from ; $0204; rotates a right; and 4 more instructions. ; Parameters: Reads $0204 and $0203 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z and C flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop286: ror a ; CPU:$E26A PRG:626A 6A bcs NmiHandler_Loop285 ; CPU:$E26B PRG:626B B0 FC inc $0204 ; CPU:$E26D PRG:626D EE 04 02 lda $0204 ; CPU:$E270 PRG:6270 AD 04 02 ror a ; CPU:$E273 PRG:6273 6A ldx $0203 ; CPU:$E274 PRG:6274 AE 03 02 inx ; CPU:$E277 PRG:6277 E8 bcc NmiHandler_Loop287 ; CPU:$E278 PRG:6278 90 01 inx ; CPU:$E27A PRG:627A E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop287 ; Global: The routine writes $0203. ; Local: Executes 3 instructions: compares X with TilePtrLo; branches on carry ; set to NmiHandler_Loop288; stores X to $0203. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0203 changed. ; Clobbers: ; no register, the N, Z and C flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop287: cpx TilePtrLo ; CPU:$E27B PRG:627B E4 08 bcs NmiHandler_Loop288 ; CPU:$E27D PRG:627D B0 03 stx $0203 ; CPU:$E27F PRG:627F 8E 03 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop288 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop288: rts ; CPU:$E282 PRG:6282 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop289 ; Global: The routine reads $0204 and $0203. ; Local: Executes 7 instructions: increments $0204; loads A from $0204; ; rotates a right; loads X from $0203; decrements X; branches on ; carry clear to NmiHandler_Loop290; and 1 more instruction. ; Parameters: Reads $0204 and $0203 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z and C flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop289: inc $0204 ; CPU:$E283 PRG:6283 EE 04 02 lda $0204 ; CPU:$E286 PRG:6286 AD 04 02 ror a ; CPU:$E289 PRG:6289 6A ldx $0203 ; CPU:$E28A PRG:628A AE 03 02 dex ; CPU:$E28D PRG:628D CA bcc NmiHandler_Loop290 ; CPU:$E28E PRG:628E 90 01 dex ; CPU:$E290 PRG:6290 CA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop290 ; Global: The routine writes $0203. ; Local: Executes 3 instructions: compares X with $08; branches on carry clear ; to NmiHandler_OnNonzero55; stores X to $0203. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0203 changed. ; Clobbers: ; no register, the N, Z and C flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop290: cpx #$08 ; CPU:$E291 PRG:6291 E0 08 bcc NmiHandler_OnNonzero55 ; CPU:$E293 PRG:6293 90 03 stx $0203 ; CPU:$E295 PRG:6295 8E 03 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero55 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero55: rts ; CPU:$E298 PRG:6298 60 ; ----------------------------------------------------------------------------- ; Routine: SubCE299 ; Global: The routine calls AdvancePlayerShipAnimation, reads $0201. ; Local: Executes 4 instructions: returns with RTS; loads A from $0201; ; branches on equal to NmiHandler_Loop291; calls AdvancePlayerShipAnimation. ; Parameters: Reads $0201 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, the N, Z, C and V flags, Zp79, Zp7A, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- SubCE299: lda $0201 ; CPU:$E299 PRG:6299 AD 01 02 beq NmiHandler_Loop291 ; CPU:$E29C PRG:629C F0 03 jsr AdvancePlayerShipAnimation ; CPU:$E29E PRG:629E 20 D5 E4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop291 ; Global: The routine writes $0202 and $0471, reads $0202, $0201 and $045C. ; Local: Executes 15 instructions: returns with RTS; increments $0202; loads A ; from $0202; compares A with $C7; branches on carry clear to ; NmiHandler_OnNonzero55; loads A with $C7; and 9 more instructions. ; Parameters: Reads $0202, $0201 and $045C from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0202 and $0471 changed. ; Clobbers: ; A, the N, Z and C flags, Zp79, Zp7A, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop291: inc $0202 ; CPU:$E2A1 PRG:62A1 EE 02 02 lda $0202 ; CPU:$E2A4 PRG:62A4 AD 02 02 cmp #$C7 ; CPU:$E2A7 PRG:62A7 C9 C7 bcc NmiHandler_OnNonzero55 ; CPU:$E2A9 PRG:62A9 90 ED lda #$C7 ; CPU:$E2AB PRG:62AB A9 C7 sta $0202 ; CPU:$E2AD PRG:62AD 8D 02 02 lda $0201 ; CPU:$E2B0 PRG:62B0 AD 01 02 bne NmiHandler_OnNonzero55 ; CPU:$E2B3 PRG:62B3 D0 E3 lda $045C ; CPU:$E2B5 PRG:62B5 AD 5C 04 sta $0471 ; CPU:$E2B8 PRG:62B8 8D 71 04 lda #$00 ; CPU:$E2BB PRG:62BB A9 00 sta Zp79 ; CPU:$E2BD PRG:62BD 85 79 sta Zp7A ; CPU:$E2BF PRG:62BF 85 7A rts ; CPU:$E2C1 PRG:62C1 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNegative5 ; Global: The routine calls Sub_ED70. ; Local: Executes 4 instructions: loads A with $08; stores A to Zp79; loads A ; with $21; calls Sub_ED70. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F, Zp79, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNegative5: lda #$08 ; CPU:$E2C2 PRG:62C2 A9 08 sta Zp79 ; CPU:$E2C4 PRG:62C4 85 79 lda #$21 ; CPU:$E2C6 PRG:62C6 A9 21 jmp Sub_ED70 ; CPU:$E2C8 PRG:62C8 4C 70 ED ; ----------------------------------------------------------------------------- ; Routine: SubCE2CB ; Global: The routine calls Sub_ED70, AdvancePlayerShipAnimation and NmiHandler_Loop293, reads ; $0203. ; Local: Executes 14 instructions: loads A with $08; stores A to Zp79; loads A ; with $21; calls Sub_ED70; calls AdvancePlayerShipAnimation; loads X from Zp7E; and 8 ; more instructions. ; Parameters: Reads $0203 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F, Zp54, Zp79, the OAM ; shadow, $0580. ; ; ----------------------------------------------------------------------------- SubCE2CB: jsr AdvancePlayerShipAnimation ; CPU:$E2CB PRG:62CB 20 D5 E4 ldx Zp7E ; CPU:$E2CE PRG:62CE A6 7E lda $0200,x ; CPU:$E2D0 PRG:62D0 BD 00 02 bmi NmiHandler_OnNegative5 ; CPU:$E2D3 PRG:62D3 30 ED lda $0203 ; CPU:$E2D5 PRG:62D5 AD 03 02 cmp Zp58 ; CPU:$E2D8 PRG:62D8 C5 58 beq NmiHandler_Loop293 ; CPU:$E2DA PRG:62DA F0 0B bcc NmiHandler_Loop292 ; CPU:$E2DC PRG:62DC 90 06 dec $0203 ; CPU:$E2DE PRG:62DE CE 03 02 jmp NmiHandler_Loop293 ; CPU:$E2E1 PRG:62E1 4C E7 E2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop292 ; Global: The routine reads $0203. ; Local: Executes 1 instruction: increments $0203. ; Parameters: Reads $0203 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F, Zp54, Zp79, the OAM ; shadow, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop292: inc $0203 ; CPU:$E2E4 PRG:62E4 EE 03 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop293 ; Global: The routine reads $0202 and $0204. ; Local: Executes 10 instructions: loads A with $02; stores A to Zp54; loads A ; from $0202; compares A with $9B; branches on carry clear to ; NmiHandler_Loop294; increments $0204; and 4 more instructions. ; Parameters: Reads $0202 and $0204 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F, Zp54, Zp79, the OAM ; shadow, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop293: lda #$02 ; CPU:$E2E7 PRG:62E7 A9 02 sta Zp54 ; CPU:$E2E9 PRG:62E9 85 54 lda $0202 ; CPU:$E2EB PRG:62EB AD 02 02 cmp #$9B ; CPU:$E2EE PRG:62EE C9 9B bcc NmiHandler_Loop294 ; CPU:$E2F0 PRG:62F0 90 0E inc $0204 ; CPU:$E2F2 PRG:62F2 EE 04 02 lda $0204 ; CPU:$E2F5 PRG:62F5 AD 04 02 and #$03 ; CPU:$E2F8 PRG:62F8 29 03 beq NmiHandler_OnNonzero56 ; CPU:$E2FA PRG:62FA F0 03 dec $0202 ; CPU:$E2FC PRG:62FC CE 02 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero56 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero56: rts ; CPU:$E2FF PRG:62FF 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop294 ; Global: The routine calls Sub_ED70, writes $0200, $0210, $0212, $0213 and 1 ; more, reads $0201. ; Local: Executes 24 instructions: returns with RTS; loads A from $0201; ; branches on not equal to NmiHandler_OnNonzero56; increments Zp79; ; loads A with $80; stores A to $0200; and 18 more instructions. ; Parameters: Reads $0201 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0200, $0210 and $0212 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F, Zp54, Zp79, the OAM ; shadow, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop294: lda $0201 ; CPU:$E300 PRG:6300 AD 01 02 bne NmiHandler_OnNonzero56 ; CPU:$E303 PRG:6303 D0 FA inc Zp79 ; CPU:$E305 PRG:6305 E6 79 lda #$80 ; CPU:$E307 PRG:6307 A9 80 sta $0200 ; CPU:$E309 PRG:6309 8D 00 02 lda #$01 ; CPU:$E30C PRG:630C A9 01 sta $0210 ; CPU:$E30E PRG:630E 8D 10 02 lda #$9B ; CPU:$E311 PRG:6311 A9 9B sta $0212 ; CPU:$E313 PRG:6313 8D 12 02 lda Zp58 ; CPU:$E316 PRG:6316 A5 58 sta $0213 ; CPU:$E318 PRG:6318 8D 13 02 ldx Zp7E ; CPU:$E31B PRG:631B A6 7E lda #$25 ; CPU:$E31D PRG:631D A9 25 sta $0205,x ; CPU:$E31F PRG:631F 9D 05 02 lda #$00 ; CPU:$E322 PRG:6322 A9 00 sta $0206,x ; CPU:$E324 PRG:6324 9D 06 02 lda #$04 ; CPU:$E327 PRG:6327 A9 04 sta Zp54 ; CPU:$E329 PRG:6329 85 54 lda #$21 ; CPU:$E32B PRG:632B A9 21 jsr Sub_ED70 ; CPU:$E32D PRG:632D 20 70 ED lda #$3C ; CPU:$E330 PRG:6330 A9 3C sta $020E ; CPU:$E332 PRG:6332 8D 0E 02 rts ; CPU:$E335 PRG:6335 60 ; ----------------------------------------------------------------------------- ; Routine: SubCE336 ; Global: The routine writes $0211, $0212, $0213, $058D and 2 more, reads ; $020E. ; Local: Executes 20 instructions: loads X from Zp7E; loads A from $0200,x; ; branches on negative to NmiHandler_Loop296; loads A with $00; ; stores A to $0211; loads A from $0202,x; and 14 more instructions. ; Parameters: Reads $020E from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0211, $0212 and $0213 ; changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCE336: ldx Zp7E ; CPU:$E336 PRG:6336 A6 7E lda $0200,x ; CPU:$E338 PRG:6338 BD 00 02 bmi NmiHandler_Loop296 ; CPU:$E33B PRG:633B 30 46 lda #$00 ; CPU:$E33D PRG:633D A9 00 sta $0211 ; CPU:$E33F PRG:633F 8D 11 02 lda $0202,x ; CPU:$E342 PRG:6342 BD 02 02 clc ; CPU:$E345 PRG:6345 18 adc #$10 ; CPU:$E346 PRG:6346 69 10 sta $0212 ; CPU:$E348 PRG:6348 8D 12 02 lda $0203,x ; CPU:$E34B PRG:634B BD 03 02 sta $0213 ; CPU:$E34E PRG:634E 8D 13 02 lda $020E ; CPU:$E351 PRG:6351 AD 0E 02 beq NmiHandler_Loop295 ; CPU:$E354 PRG:6354 F0 12 dec $020E ; CPU:$E356 PRG:6356 CE 0E 02 bne NmiHandler_Loop295 ; CPU:$E359 PRG:6359 D0 0D lda #$01 ; CPU:$E35B PRG:635B A9 01 sta $058D ; CPU:$E35D PRG:635D 8D 8D 05 sta $058E ; CPU:$E360 PRG:6360 8D 8E 05 sta $058F ; CPU:$E363 PRG:6363 8D 8F 05 sta Zp5D ; CPU:$E366 PRG:6366 85 5D ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop295 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop295: rts ; CPU:$E368 PRG:6368 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarrySet5 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 3 instructions: loads A with $08; stores A to Zp79; loads X ; with $03. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp79, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarrySet5: lda #$08 ; CPU:$E369 PRG:6369 A9 08 sta Zp79 ; CPU:$E36B PRG:636B 85 79 ldx #$03 ; CPU:$E36D PRG:636D A2 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero57 ; Global: The routine writes $0210 and $0200. ; Local: Executes 9 instructions: loads A from $0210,x; stores A to $0200,x; ; decrements X; branches on not equal to NmiHandler_OnNonzero57; ; loads A with $80; stores A to $0210; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0210 and $0200 changed. ; Clobbers: ; A and X, the N and Z flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero57: lda $0210,x ; CPU:$E36F PRG:636F BD 10 02 sta $0200,x ; CPU:$E372 PRG:6372 9D 00 02 dex ; CPU:$E375 PRG:6375 CA bne NmiHandler_OnNonzero57 ; CPU:$E376 PRG:6376 D0 F7 lda #$80 ; CPU:$E378 PRG:6378 A9 80 sta $0210 ; CPU:$E37A PRG:637A 8D 10 02 lda #$00 ; CPU:$E37D PRG:637D A9 00 sta $0200 ; CPU:$E37F PRG:637F 8D 00 02 rts ; CPU:$E382 PRG:6382 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop296 ; Global: The routine writes $0210, $0200 and $0211, reads $0212. ; Local: Executes 22 instructions: loads A with $08; stores A to Zp79; loads X ; with $03; loads A from $0210,x; stores A to $0200,x; decrements X; ; and 16 more instructions. ; Parameters: Reads $0212 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0210, $0200 and $0211 changed. ; Clobbers: ; A, X and Y, the N, Z and C flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop296: lda $0212 ; CPU:$E383 PRG:6383 AD 12 02 cmp #$80 ; CPU:$E386 PRG:6386 C9 80 bcs NmiHandler_OnCarrySet5 ; CPU:$E388 PRG:6388 B0 DF lda #$00 ; CPU:$E38A PRG:638A A9 00 sta $0211 ; CPU:$E38C PRG:638C 8D 11 02 lda $0212 ; CPU:$E38F PRG:638F AD 12 02 cmp #$07 ; CPU:$E392 PRG:6392 C9 07 beq NmiHandler_Loop297 ; CPU:$E394 PRG:6394 F0 04 dec $0212 ; CPU:$E396 PRG:6396 CE 12 02 rts ; CPU:$E399 PRG:6399 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop297 ; Global: The routine calls ParseVramWriteRecord. ; Local: Executes 9 instructions: loads A with $04; stores A to Zp79; loads X ; with $02; stores X to Zp7B; decrements X; stores X to Zp7C; and 3 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop297: lda #$04 ; CPU:$E39A PRG:639A A9 04 sta Zp79 ; CPU:$E39C PRG:639C 85 79 ldx #$02 ; CPU:$E39E PRG:639E A2 02 stx Zp7B ; CPU:$E3A0 PRG:63A0 86 7B dex ; CPU:$E3A2 PRG:63A2 CA stx Zp7C ; CPU:$E3A3 PRG:63A3 86 7C ldx #$60 ; CPU:$E3A5 PRG:63A5 A2 60 lda #$F9 ; CPU:$E3A7 PRG:63A7 A9 F9 jmp ParseVramWriteRecord ; CPU:$E3A9 PRG:63A9 4C 2D C1 ; ----------------------------------------------------------------------------- ; Routine: SubCE3AC ; Global: The routine calls GetEnemyShipTileId and NmiHandler_Loop282, writes $0213, ; $0212 and $0211. ; Local: Executes 11 instructions: loads X from Zp7D; loads A from $0400,x; ; branches on equal to NmiHandler_Loop298; copies X into A; calls ; GetEnemyShipTileId; stores A to $0213; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0213, $0212 and $0211 ; changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCE3AC: ldx Zp7D ; CPU:$E3AC PRG:63AC A6 7D lda $0400,x ; CPU:$E3AE PRG:63AE BD 00 04 beq NmiHandler_Loop298 ; CPU:$E3B1 PRG:63B1 F0 14 txa ; CPU:$E3B3 PRG:63B3 8A jsr GetEnemyShipTileId ; CPU:$E3B4 PRG:63B4 20 8C D7 sta $0213 ; CPU:$E3B7 PRG:63B7 8D 13 02 lda #$07 ; CPU:$E3BA PRG:63BA A9 07 sta $0212 ; CPU:$E3BC PRG:63BC 8D 12 02 lda #$00 ; CPU:$E3BF PRG:63BF A9 00 sta $0211 ; CPU:$E3C1 PRG:63C1 8D 11 02 jmp NmiHandler_Loop282 ; CPU:$E3C4 PRG:63C4 4C 23 E2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop298 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: copies X into A; loads X from Zp7E; compares ; A with $022B,x; branches on not equal to NmiHandler_Loop299; loads ; A from $0220,x; branches on non-negative to NmiHandler_Loop301. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop298: txa ; CPU:$E3C7 PRG:63C7 8A ldx Zp7E ; CPU:$E3C8 PRG:63C8 A6 7E cmp $022B,x ; CPU:$E3CA PRG:63CA DD 2B 02 bne NmiHandler_Loop299 ; CPU:$E3CD PRG:63CD D0 05 lda $0220,x ; CPU:$E3CF PRG:63CF BD 20 02 bpl NmiHandler_Loop301 ; CPU:$E3D2 PRG:63D2 10 1A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop299 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop299: ldx #$00 ; CPU:$E3D4 PRG:63D4 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear16 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A from Zp7D; compares A with $022B,x; ; branches on not equal to NmiHandler_Loop300; loads Y from $0220,x; ; branches on non-negative to NmiHandler_Loop301. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear16: lda Zp7D ; CPU:$E3D6 PRG:63D6 A5 7D cmp $022B,x ; CPU:$E3D8 PRG:63D8 DD 2B 02 bne NmiHandler_Loop300 ; CPU:$E3DB PRG:63DB D0 05 ldy $0220,x ; CPU:$E3DD PRG:63DD BC 20 02 bpl NmiHandler_Loop301 ; CPU:$E3E0 PRG:63E0 10 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop300 ; Global: The routine calls Sub_E406. ; Local: Executes 12 instructions: loads A from Zp7D; compares A with $022B,x; ; branches on not equal to NmiHandler_Loop300; loads Y from $0220,x; ; branches on non-negative to NmiHandler_Loop301; copies X into A; ; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop300: txa ; CPU:$E3E2 PRG:63E2 8A clc ; CPU:$E3E3 PRG:63E3 18 adc #$10 ; CPU:$E3E4 PRG:63E4 69 10 tax ; CPU:$E3E6 PRG:63E6 AA cmp #$C0 ; CPU:$E3E7 PRG:63E7 C9 C0 bcc NmiHandler_OnCarryClear16 ; CPU:$E3E9 PRG:63E9 90 EB jmp Sub_E406 ; CPU:$E3EB PRG:63EB 4C 06 E4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop301 ; Global: The routine calls NmiHandler_Loop282, writes $0211, $0212 and $0213. ; Local: Executes 9 instructions: loads A from $0221,x; stores A to $0211; ; loads A from $0222,x; sets the carry flag; subtracts $10 from A; ; stores A to $0212; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0211, $0212 and $0213 changed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp44, Zp6E, Zp6F, ZpCA, ZpCB, the OAM ; shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop301: lda $0221,x ; CPU:$E3EE PRG:63EE BD 21 02 sta $0211 ; CPU:$E3F1 PRG:63F1 8D 11 02 lda $0222,x ; CPU:$E3F4 PRG:63F4 BD 22 02 sec ; CPU:$E3F7 PRG:63F7 38 sbc #$10 ; CPU:$E3F8 PRG:63F8 E9 10 sta $0212 ; CPU:$E3FA PRG:63FA 8D 12 02 lda $0223,x ; CPU:$E3FD PRG:63FD BD 23 02 sta $0213 ; CPU:$E400 PRG:6400 8D 13 02 jmp NmiHandler_Loop282 ; CPU:$E403 PRG:6403 4C 23 E2 ; ----------------------------------------------------------------------------- ; Routine: Sub_E406 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A with $07; stores A to Zp79; loads A ; with $02; stores A to Zp7C; loads X with $0B; loads A with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp6E, Zp6F, Zp79, Zp7C, the OAM ; shadow. ; ; ----------------------------------------------------------------------------- Sub_E406: lda #$07 ; CPU:$E406 PRG:6406 A9 07 sta Zp79 ; CPU:$E408 PRG:6408 85 79 lda #$02 ; CPU:$E40A PRG:640A A9 02 sta Zp7C ; CPU:$E40C PRG:640C 85 7C ldx #$0B ; CPU:$E40E PRG:640E A2 0B lda #$00 ; CPU:$E410 PRG:6410 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative26 ; Global: The routine calls Sub_C317, writes $0217 and $0215. ; Local: Executes 9 instructions: stores A to $0214,x; decrements X; branches ; on non-negative to NmiHandler_OnNonnegative26; calls Sub_C317; ANDs ; A with $80; stores A to $0217; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0217 and $0215 changed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp6E, Zp6F, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative26: sta $0214,x ; CPU:$E412 PRG:6412 9D 14 02 dex ; CPU:$E415 PRG:6415 CA bpl NmiHandler_OnNonnegative26 ; CPU:$E416 PRG:6416 10 FA jsr Sub_C317 ; CPU:$E418 PRG:6418 20 17 C3 and #$80 ; CPU:$E41B PRG:641B 29 80 sta $0217 ; CPU:$E41D PRG:641D 8D 17 02 lda #$26 ; CPU:$E420 PRG:6420 A9 26 sta $0215 ; CPU:$E422 PRG:6422 8D 15 02 rts ; CPU:$E425 PRG:6425 60 ; ----------------------------------------------------------------------------- ; Routine: SubCE426 ; Global: The routine reads $0590, $0591 and $0592. ; Local: Executes 7 instructions: loads A with $01; stores A to Zp7A; loads A ; from $0590; branches on not equal to NmiHandler_Loop302; increments ; $0590; increments $0591; and 1 more instruction. ; Parameters: Reads $0590, $0591 and $0592 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- SubCE426: lda #$01 ; CPU:$E426 PRG:6426 A9 01 sta Zp7A ; CPU:$E428 PRG:6428 85 7A lda $0590 ; CPU:$E42A PRG:642A AD 90 05 bne NmiHandler_Loop302 ; CPU:$E42D PRG:642D D0 09 inc $0590 ; CPU:$E42F PRG:642F EE 90 05 inc $0591 ; CPU:$E432 PRG:6432 EE 91 05 inc $0592 ; CPU:$E435 PRG:6435 EE 92 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop302 ; Global: The routine writes $0210, reads $0205, $0495 and $0477. ; Local: Executes 10 instructions: loads A with $00; stores A to $0210; loads ; X from $0205; branches on not equal to NmiHandler_Loop303; loads A ; from $0495; branches on not equal to NmiHandler_Loop304; and 4 more ; instructions. ; Parameters: Reads $0205, $0495 and $0477 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0210 changed. ; Clobbers: ; A and X, the N, Z, C and V flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop302: lda #$00 ; CPU:$E438 PRG:6438 A9 00 sta $0210 ; CPU:$E43A PRG:643A 8D 10 02 ldx $0205 ; CPU:$E43D PRG:643D AE 05 02 bne NmiHandler_Loop303 ; CPU:$E440 PRG:6440 D0 0D lda $0495 ; CPU:$E442 PRG:6442 AD 95 04 bne NmiHandler_Loop304 ; CPU:$E445 PRG:6445 D0 0B lda $0477 ; CPU:$E447 PRG:6447 AD 77 04 bne NmiHandler_Loop304 ; CPU:$E44A PRG:644A D0 06 inc Zp79 ; CPU:$E44C PRG:644C E6 79 rts ; CPU:$E44E PRG:644E 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop303 ; Global: The routine reads $0205. ; Local: Executes 1 instruction: decrements $0205. ; Parameters: Reads $0205 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp44, Zp6E, Zp6F, ZpCA, ZpCB, the OAM ; shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop303: dec $0205 ; CPU:$E44F PRG:644F CE 05 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop304 ; Global: The routine calls AdvanceEnemyShipAnimation and NmiHandler_Loop282, writes $0210. ; Local: Executes 4 instructions: loads A with $00; stores A to $0210; calls ; AdvanceEnemyShipAnimation; calls NmiHandler_Loop282. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0210 changed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp44, Zp6E, Zp6F, ZpCA, ZpCB, the OAM ; shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop304: lda #$00 ; CPU:$E452 PRG:6452 A9 00 sta $0210 ; CPU:$E454 PRG:6454 8D 10 02 jsr AdvanceEnemyShipAnimation ; CPU:$E457 PRG:6457 20 E5 E4 jmp NmiHandler_Loop282 ; CPU:$E45A PRG:645A 4C 23 E2 ; ----------------------------------------------------------------------------- ; Routine: SubCE45D ; Global: The routine calls Sub_E227, writes $0212 and $0213, reads $0203. ; Local: Executes 10 instructions: loads A with $AA; stores A to TilePtrLo; ; calls Sub_E227; loads A with $C7; stores A to $0212; loads A from ; $0203; and 4 more instructions. ; Parameters: Reads $0203 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0212 and $0213 changed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp44, Zp6E, Zp6F, ZpCA, ZpCB, the OAM ; shadow. ; ; ----------------------------------------------------------------------------- SubCE45D: lda #$AA ; CPU:$E45D PRG:645D A9 AA sta TilePtrLo ; CPU:$E45F PRG:645F 85 08 jsr Sub_E227 ; CPU:$E461 PRG:6461 20 27 E2 lda #$C7 ; CPU:$E464 PRG:6464 A9 C7 sta $0212 ; CPU:$E466 PRG:6466 8D 12 02 lda $0203 ; CPU:$E469 PRG:6469 AD 03 02 clc ; CPU:$E46C PRG:646C 18 adc #$0E ; CPU:$E46D PRG:646D 69 0E sta $0213 ; CPU:$E46F PRG:646F 8D 13 02 rts ; CPU:$E472 PRG:6472 60 ; ----------------------------------------------------------------------------- ; Routine: SubCE473 ; Global: The routine calls AdvanceEnemyShipAnimation, reads $0203. ; Local: Executes 6 instructions: loads A from $0203; compares A with $59; ; branches on equal to NmiHandler_Loop306; branches on carry set to ; NmiHandler_Loop305; increments $0203; calls AdvanceEnemyShipAnimation. ; Parameters: Reads $0203 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp79, Zp7A, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- SubCE473: lda $0203 ; CPU:$E473 PRG:6473 AD 03 02 cmp #$59 ; CPU:$E476 PRG:6476 C9 59 beq NmiHandler_Loop306 ; CPU:$E478 PRG:6478 F0 0E bcs NmiHandler_Loop305 ; CPU:$E47A PRG:647A B0 06 inc $0203 ; CPU:$E47C PRG:647C EE 03 02 jmp AdvanceEnemyShipAnimation ; CPU:$E47F PRG:647F 4C E5 E4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop305 ; Global: The routine calls AdvanceEnemyShipAnimation, reads $0203. ; Local: Executes 2 instructions: decrements $0203; calls AdvanceEnemyShipAnimation. ; Parameters: Reads $0203 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N, Z, C and V flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop305: dec $0203 ; CPU:$E482 PRG:6482 CE 03 02 jmp AdvanceEnemyShipAnimation ; CPU:$E485 PRG:6485 4C E5 E4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop306 ; Global: The routine calls AdvanceEnemyShipAnimation, reads $0211. ; Local: Executes 3 instructions: loads A from $0211; branches on equal to ; NmiHandler_Loop307; calls AdvanceEnemyShipAnimation. ; Parameters: Reads $0211 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp79, Zp7A, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop306: lda $0211 ; CPU:$E488 PRG:6488 AD 11 02 beq NmiHandler_Loop307 ; CPU:$E48B PRG:648B F0 03 jmp AdvanceEnemyShipAnimation ; CPU:$E48D PRG:648D 4C E5 E4 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop307 ; Global: The routine reads $0213. ; Local: Executes 6 instructions: loads A from $0213; compares A with $67; ; branches on equal to NmiHandler_Loop309; branches on carry set to ; NmiHandler_Loop308; increments $0213; returns with RTS. ; Parameters: Reads $0213 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z and C flags, Zp79, Zp7A, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop307: lda $0213 ; CPU:$E490 PRG:6490 AD 13 02 cmp #$67 ; CPU:$E493 PRG:6493 C9 67 beq NmiHandler_Loop309 ; CPU:$E495 PRG:6495 F0 0A bcs NmiHandler_Loop308 ; CPU:$E497 PRG:6497 B0 04 inc $0213 ; CPU:$E499 PRG:6499 EE 13 02 rts ; CPU:$E49C PRG:649C 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop308 ; Global: The routine reads $0213. ; Local: Executes 2 instructions: decrements $0213; returns with RTS. ; Parameters: Reads $0213 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; no register, the N and Z flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop308: dec $0213 ; CPU:$E49D PRG:649D CE 13 02 rts ; CPU:$E4A0 PRG:64A0 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop309 ; Global: The routine reads $0212. ; Local: Executes 5 instructions: loads A from $0212; compares A with $C7; ; branches on equal to NmiHandler_Loop310; increments $0212; returns ; with RTS. ; Parameters: Reads $0212 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z and C flags, Zp79, Zp7A, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop309: lda $0212 ; CPU:$E4A1 PRG:64A1 AD 12 02 cmp #$C7 ; CPU:$E4A4 PRG:64A4 C9 C7 beq NmiHandler_Loop310 ; CPU:$E4A6 PRG:64A6 F0 04 inc $0212 ; CPU:$E4A8 PRG:64A8 EE 12 02 rts ; CPU:$E4AB PRG:64AB 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop310 ; Global: The routine reads $0200. ; Local: Executes 7 instructions: loads A with $00; stores A to Zp7A; loads A ; from $0200; branches on negative to NmiHandler_Loop311; loads A ; with $01; stores A to Zp79; and 1 more instruction. ; Parameters: Reads $0200 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N and Z flags, Zp79, Zp7A, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop310: lda #$00 ; CPU:$E4AC PRG:64AC A9 00 sta Zp7A ; CPU:$E4AE PRG:64AE 85 7A lda $0200 ; CPU:$E4B0 PRG:64B0 AD 00 02 bmi NmiHandler_Loop311 ; CPU:$E4B3 PRG:64B3 30 05 lda #$01 ; CPU:$E4B5 PRG:64B5 A9 01 sta Zp79 ; CPU:$E4B7 PRG:64B7 85 79 rts ; CPU:$E4B9 PRG:64B9 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop311 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $03. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N and Z flags, Zp79, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop311: ldx #$03 ; CPU:$E4BA PRG:64BA A2 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative27 ; Global: Steps the player ship's animation frame on, wrapping after $18 frames. ; Local: Executes 11 instructions: loads A from $0210,x; stores A to $0200,x; ; decrements X; branches on non-negative to ; NmiHandler_OnNonnegative27; loads A with $80; stores A to $0210; ; and 5 more instructions. ; Parameters: Reads $045C from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0210 and $0471 changed. ; Clobbers: ; A and X, the N and Z flags, Zp79, the OAM shadow, $0471. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative27: lda $0210,x ; CPU:$E4BC PRG:64BC BD 10 02 sta $0200,x ; CPU:$E4BF PRG:64BF 9D 00 02 dex ; CPU:$E4C2 PRG:64C2 CA bpl NmiHandler_OnNonnegative27 ; CPU:$E4C3 PRG:64C3 10 F7 lda #$80 ; CPU:$E4C5 PRG:64C5 A9 80 sta $0210 ; CPU:$E4C7 PRG:64C7 8D 10 02 lda #$00 ; CPU:$E4CA PRG:64CA A9 00 sta Zp79 ; CPU:$E4CC PRG:64CC 85 79 lda $045C ; CPU:$E4CE PRG:64CE AD 5C 04 sta $0471 ; CPU:$E4D1 PRG:64D1 8D 71 04 rts ; CPU:$E4D4 PRG:64D4 60 ; ----------------------------------------------------------------------------- ; Routine: AdvancePlayerShipAnimation ; Global: The routine reads $0201. ; Local: Executes 6 instructions: loads A from $0201; clears the carry flag; ; adds $01 to A; compares A with $18; branches on not equal to ; NmiHandler_Loop312; loads A with $00. ; Parameters: Reads $0201 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, the N, Z, C and V flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- AdvancePlayerShipAnimation: lda $0201 ; CPU:$E4D5 PRG:64D5 AD 01 02 clc ; CPU:$E4D8 PRG:64D8 18 adc #$01 ; CPU:$E4D9 PRG:64D9 69 01 cmp #$18 ; CPU:$E4DB PRG:64DB C9 18 bne NmiHandler_Loop312 ; CPU:$E4DD PRG:64DD D0 02 lda #$00 ; CPU:$E4DF PRG:64DF A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop312 ; Global: Steps an enemy ship's animation frame on, wrapping after $18 frames. ; Local: Executes 2 instructions: stores A to $0201; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0201 changed. ; Clobbers: ; no register, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop312: sta $0201 ; CPU:$E4E1 PRG:64E1 8D 01 02 rts ; CPU:$E4E4 PRG:64E4 60 ; ----------------------------------------------------------------------------- ; Routine: AdvanceEnemyShipAnimation ; Global: The routine reads $0211. ; Local: Executes 6 instructions: loads A from $0211; clears the carry flag; ; adds $01 to A; compares A with $18; branches on not equal to ; NmiHandler_Loop313; loads A with $00. ; Parameters: Reads $0211 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, the N, Z, C and V flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- AdvanceEnemyShipAnimation: lda $0211 ; CPU:$E4E5 PRG:64E5 AD 11 02 clc ; CPU:$E4E8 PRG:64E8 18 adc #$01 ; CPU:$E4E9 PRG:64E9 69 01 cmp #$18 ; CPU:$E4EB PRG:64EB C9 18 bne NmiHandler_Loop313 ; CPU:$E4ED PRG:64ED D0 02 lda #$00 ; CPU:$E4EF PRG:64EF A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop313 ; Global: Points the sprite buffer at the player ship's own buffer. ; Local: Executes 2 instructions: stores A to $0211; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0211 changed. ; Clobbers: ; no register, the OAM shadow. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop313: sta $0211 ; CPU:$E4F1 PRG:64F1 8D 11 02 rts ; CPU:$E4F4 PRG:64F4 60 ; ----------------------------------------------------------------------------- ; Routine: ResetPlayerSpriteBuffer ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A with $E0; stores A to TilePtrLo; ; loads A with $02; stores A to TilePtrHi. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- ResetPlayerSpriteBuffer: lda #$E0 ; CPU:$E4F5 PRG:64F5 A9 E0 sta TilePtrLo ; CPU:$E4F7 PRG:64F7 85 08 lda #$02 ; CPU:$E4F9 PRG:64F9 A9 02 sta TilePtrHi ; CPU:$E4FB PRG:64FB 85 09 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNegative6 ; Global: The routine calls Sub_E540. ; Local: Executes 18 instructions: loads Y with $00; loads A from ; ((TilePtrLo),y); branches on negative to NmiHandler_Loop314; ; increments Y; loads A from ((TilePtrLo),y); sets the carry flag; ; and 12 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNegative6: ldy #$00 ; CPU:$E4FD PRG:64FD A0 00 lda (TilePtrLo),y ; CPU:$E4FF PRG:64FF B1 08 bmi NmiHandler_Loop314 ; CPU:$E501 PRG:6501 30 1B iny ; CPU:$E503 PRG:6503 C8 lda (TilePtrLo),y ; CPU:$E504 PRG:6504 B1 08 sec ; CPU:$E506 PRG:6506 38 sbc #$05 ; CPU:$E507 PRG:6507 E9 05 sta Zp14 ; CPU:$E509 PRG:6509 85 14 lda #$0B ; CPU:$E50B PRG:650B A9 0B sta Zp15 ; CPU:$E50D PRG:650D 85 15 iny ; CPU:$E50F PRG:650F C8 lda (TilePtrLo),y ; CPU:$E510 PRG:6510 B1 08 sec ; CPU:$E512 PRG:6512 38 sbc #$05 ; CPU:$E513 PRG:6513 E9 05 sta SpriteX ; CPU:$E515 PRG:6515 85 16 lda #$0B ; CPU:$E517 PRG:6517 A9 0B sta Zp17 ; CPU:$E519 PRG:6519 85 17 jsr Sub_E540 ; CPU:$E51B PRG:651B 20 40 E5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop314 ; Global: Merges the two sprite buffers into one. ; Local: Executes 29 instructions: loads Y with $00; loads A from ; ((TilePtrLo),y); branches on negative to NmiHandler_Loop314; ; increments Y; loads A from ((TilePtrLo),y); sets the carry flag; ; and 23 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop314: lda TilePtrLo ; CPU:$E51E PRG:651E A5 08 clc ; CPU:$E520 PRG:6520 18 adc #$08 ; CPU:$E521 PRG:6521 69 08 sta TilePtrLo ; CPU:$E523 PRG:6523 85 08 bmi NmiHandler_OnNegative6 ; CPU:$E525 PRG:6525 30 D6 ldx Zp79 ; CPU:$E527 PRG:6527 A6 79 dex ; CPU:$E529 PRG:6529 CA bne NmiHandler_Loop315 ; CPU:$E52A PRG:652A D0 13 ldx #$00 ; CPU:$E52C PRG:652C A2 00 jsr MergeSpriteBuffers ; CPU:$E52E PRG:652E 20 33 E5 ldx #$08 ; CPU:$E531 PRG:6531 A2 08 ; ----------------------------------------------------------------------------- ; Routine: MergeSpriteBuffers ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: loads A from $02E0,x; ORs A with $02F0,x; ; stores A to $02E0,x; stores A to $02F0,x. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N and Z flags, the OAM shadow. ; ; ----------------------------------------------------------------------------- MergeSpriteBuffers: lda $02E0,x ; CPU:$E533 PRG:6533 BD E0 02 ora $02F0,x ; CPU:$E536 PRG:6536 1D F0 02 sta $02E0,x ; CPU:$E539 PRG:6539 9D E0 02 sta $02F0,x ; CPU:$E53C PRG:653C 9D F0 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop315 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop315: rts ; CPU:$E53F PRG:653F 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_E540 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads X with $10; loads A from Zp7C; ; branches on equal to NmiHandler_Loop316; branches on negative to ; NmiHandler_Loop316; loads X with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_E540: ldx #$10 ; CPU:$E540 PRG:6540 A2 10 lda Zp7C ; CPU:$E542 PRG:6542 A5 7C beq NmiHandler_Loop316 ; CPU:$E544 PRG:6544 F0 04 bmi NmiHandler_Loop316 ; CPU:$E546 PRG:6546 30 02 ldx #$00 ; CPU:$E548 PRG:6548 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop316 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores X to Zp18. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop316: stx Zp18 ; CPU:$E54A PRG:654A 86 18 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear17 ; Global: The routine calls Sub_E606. ; Local: Executes 16 instructions: loads A from $0210,x; branches on negative ; to NmiHandler_Loop317; loads A from $0212,x; sets the carry flag; ; subtracts Zp14 from A; compares A with Zp15; and 10 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear17: lda $0210,x ; CPU:$E54C PRG:654C BD 10 02 bmi NmiHandler_Loop317 ; CPU:$E54F PRG:654F 30 1D lda $0212,x ; CPU:$E551 PRG:6551 BD 12 02 sec ; CPU:$E554 PRG:6554 38 sbc Zp14 ; CPU:$E555 PRG:6555 E5 14 cmp Zp15 ; CPU:$E557 PRG:6557 C5 15 bcs NmiHandler_Loop317 ; CPU:$E559 PRG:6559 B0 13 lda $0213,x ; CPU:$E55B PRG:655B BD 13 02 sec ; CPU:$E55E PRG:655E 38 sbc SpriteX ; CPU:$E55F PRG:655F E5 16 cmp Zp17 ; CPU:$E561 PRG:6561 C5 17 bcs NmiHandler_Loop317 ; CPU:$E563 PRG:6563 B0 09 jsr Sub_E606 ; CPU:$E565 PRG:6565 20 06 E6 lda #$80 ; CPU:$E568 PRG:6568 A9 80 ldy #$00 ; CPU:$E56A PRG:656A A0 00 sta (TilePtrLo),y ; CPU:$E56C PRG:656C 91 08 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop317 ; Global: The routine calls Sub_E606. ; Local: Executes 28 instructions: loads A from $0210,x; branches on negative ; to NmiHandler_Loop317; loads A from $0212,x; sets the carry flag; ; subtracts Zp14 from A; compares A with Zp15; and 22 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop317: lda Zp18 ; CPU:$E56E PRG:656E A5 18 clc ; CPU:$E570 PRG:6570 18 adc #$10 ; CPU:$E571 PRG:6571 69 10 sta Zp18 ; CPU:$E573 PRG:6573 85 18 tax ; CPU:$E575 PRG:6575 AA cmp #$D0 ; CPU:$E576 PRG:6576 C9 D0 bcc NmiHandler_OnCarryClear17 ; CPU:$E578 PRG:6578 90 D2 dec SpriteX ; CPU:$E57A PRG:657A C6 16 inc Zp17 ; CPU:$E57C PRG:657C E6 17 inc Zp17 ; CPU:$E57E PRG:657E E6 17 ldx #$4F ; CPU:$E580 PRG:6580 A2 4F stx Zp18 ; CPU:$E582 PRG:6582 86 18 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative28 ; Global: The routine calls ComputeEnemyShipY. ; Local: Executes 13 instructions: loads A from Zp18; calls ComputeEnemyShipY; stores A ; to ScreenPtrLo; sets the carry flag; subtracts Zp14 from A; ; branches on carry clear to NmiHandler_Loop318; and 7 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative28: lda Zp18 ; CPU:$E584 PRG:6584 A5 18 jsr ComputeEnemyShipY ; CPU:$E586 PRG:6586 20 AA D7 sta ScreenPtrLo ; CPU:$E589 PRG:6589 85 0A sec ; CPU:$E58B PRG:658B 38 sbc Zp14 ; CPU:$E58C PRG:658C E5 14 bcc NmiHandler_Loop318 ; CPU:$E58E PRG:658E 90 0D cmp Zp15 ; CPU:$E590 PRG:6590 C5 15 bcc NmiHandler_Loop319 ; CPU:$E592 PRG:6592 90 0A lda Zp18 ; CPU:$E594 PRG:6594 A5 18 sec ; CPU:$E596 PRG:6596 38 sbc #$10 ; CPU:$E597 PRG:6597 E9 10 sta Zp18 ; CPU:$E599 PRG:6599 85 18 bpl NmiHandler_OnNonnegative28 ; CPU:$E59B PRG:659B 10 E7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop318 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop318: rts ; CPU:$E59D PRG:659D 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop319 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: loads X from Zp18; compares X with $10; ; branches on carry clear to NmiHandler_Loop323; loads A from ; $0400,x; rotates a right; branches on carry clear to ; NmiHandler_Loop320; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop319: ldx Zp18 ; CPU:$E59E PRG:659E A6 18 cpx #$10 ; CPU:$E5A0 PRG:65A0 E0 10 bcc NmiHandler_Loop323 ; CPU:$E5A2 PRG:65A2 90 3D lda $0400,x ; CPU:$E5A4 PRG:65A4 BD 00 04 ror a ; CPU:$E5A7 PRG:65A7 6A bcc NmiHandler_Loop320 ; CPU:$E5A8 PRG:65A8 90 06 inc SpriteX ; CPU:$E5AA PRG:65AA E6 16 dec Zp17 ; CPU:$E5AC PRG:65AC C6 17 dec Zp17 ; CPU:$E5AE PRG:65AE C6 17 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop320 ; Global: The routine calls GetEnemyShipTileId. ; Local: Executes 5 instructions: copies X into A; ANDs A with $F0; stores A ; to Zp0C; calls GetEnemyShipTileId; stores X to Zp0D. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop320: txa ; CPU:$E5B0 PRG:65B0 8A and #$F0 ; CPU:$E5B1 PRG:65B1 29 F0 sta Zp0C ; CPU:$E5B3 PRG:65B3 85 0C jsr GetEnemyShipTileId ; CPU:$E5B5 PRG:65B5 20 8C D7 stx Zp0D ; CPU:$E5B8 PRG:65B8 86 0D ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear18 ; Global: The routine calls Sub_E74A. ; Local: Executes 12 instructions: loads X from Zp0D; loads A from $FC41,x; ; stores A to ScreenPtrHi; sets the carry flag; subtracts SpriteX ; from A; branches on carry clear to NmiHandler_Loop321; and 6 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear18: ldx Zp0D ; CPU:$E5BA PRG:65BA A6 0D lda $FC41,x ; CPU:$E5BC PRG:65BC BD 41 FC sta ScreenPtrHi ; CPU:$E5BF PRG:65BF 85 0B sec ; CPU:$E5C1 PRG:65C1 38 sbc SpriteX ; CPU:$E5C2 PRG:65C2 E5 16 bcc NmiHandler_Loop321 ; CPU:$E5C4 PRG:65C4 90 0E cmp Zp17 ; CPU:$E5C6 PRG:65C6 C5 17 bcs NmiHandler_Loop322 ; CPU:$E5C8 PRG:65C8 B0 16 ldx Zp0C ; CPU:$E5CA PRG:65CA A6 0C lda $0400,x ; CPU:$E5CC PRG:65CC BD 00 04 beq NmiHandler_Loop322 ; CPU:$E5CF PRG:65CF F0 0F jmp Sub_E74A ; CPU:$E5D1 PRG:65D1 4C 4A E7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop321 ; Global: The routine calls Sub_E74A. ; Local: Executes 18 instructions: loads X from Zp0D; loads A from $FC41,x; ; stores A to ScreenPtrHi; sets the carry flag; subtracts SpriteX ; from A; branches on carry clear to NmiHandler_Loop321; and 12 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop321: inc Zp0C ; CPU:$E5D4 PRG:65D4 E6 0C inc Zp0D ; CPU:$E5D6 PRG:65D6 E6 0D lda Zp0C ; CPU:$E5D8 PRG:65D8 A5 0C and #$0F ; CPU:$E5DA PRG:65DA 29 0F cmp #$0A ; CPU:$E5DC PRG:65DC C9 0A bcc NmiHandler_OnCarryClear18 ; CPU:$E5DE PRG:65DE 90 DA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop322 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop322: rts ; CPU:$E5E0 PRG:65E0 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop323 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $03; stores A to Zp0C. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop323: lda #$03 ; CPU:$E5E1 PRG:65E1 A9 03 sta Zp0C ; CPU:$E5E3 PRG:65E3 85 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear19 ; Global: The routine calls GetEnemyShipTileId and Sub_E746. ; Local: Executes 12 instructions: loads A from Zp0C; calls GetEnemyShipTileId; loads X ; from Zp0C; stores A to ScreenPtrHi; sets the carry flag; subtracts ; SpriteX from A; and 6 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear19: lda Zp0C ; CPU:$E5E5 PRG:65E5 A5 0C jsr GetEnemyShipTileId ; CPU:$E5E7 PRG:65E7 20 8C D7 ldx Zp0C ; CPU:$E5EA PRG:65EA A6 0C sta ScreenPtrHi ; CPU:$E5EC PRG:65EC 85 0B sec ; CPU:$E5EE PRG:65EE 38 sbc SpriteX ; CPU:$E5EF PRG:65EF E5 16 bcc NmiHandler_Loop324 ; CPU:$E5F1 PRG:65F1 90 0C cmp Zp17 ; CPU:$E5F3 PRG:65F3 C5 17 bcs NmiHandler_Loop325 ; CPU:$E5F5 PRG:65F5 B0 0E lda $0400,x ; CPU:$E5F7 PRG:65F7 BD 00 04 beq NmiHandler_Loop325 ; CPU:$E5FA PRG:65FA F0 09 jmp Sub_E746 ; CPU:$E5FC PRG:65FC 4C 46 E7 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop324 ; Global: The routine calls GetEnemyShipTileId and Sub_E746. ; Local: Executes 15 instructions: loads A from Zp0C; calls GetEnemyShipTileId; loads X ; from Zp0C; stores A to ScreenPtrHi; sets the carry flag; subtracts ; SpriteX from A; and 9 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop324: inc Zp0C ; CPU:$E5FF PRG:65FF E6 0C cpx #$07 ; CPU:$E601 PRG:6601 E0 07 bcc NmiHandler_OnCarryClear19 ; CPU:$E603 PRG:6603 90 E0 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop325 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop325: rts ; CPU:$E605 PRG:6605 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_E606 ; Global: The routine calls Sub_C339. ; Local: Executes 1 instruction: calls Sub_C339. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_E606: jsr Sub_C339 ; CPU:$E606 PRG:6606 20 39 C3 ; ----------------------------------------------------------------------------- ; Routine: Sub_E609 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads X from Zp18; loads A from $0210,x; ; stores A to Zp0E; loads X from Zp0E; decrements X; compares X with ; $05; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp0E, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- Sub_E609: ldx Zp18 ; CPU:$E609 PRG:6609 A6 18 lda $0210,x ; CPU:$E60B PRG:660B BD 10 02 sta Zp0E ; CPU:$E60E PRG:660E 85 0E ldx Zp0E ; CPU:$E610 PRG:6610 A6 0E dex ; CPU:$E612 PRG:6612 CA cpx #$05 ; CPU:$E613 PRG:6613 E0 05 bcc NmiHandler_Loop326 ; CPU:$E615 PRG:6615 90 02 ldx #$05 ; CPU:$E617 PRG:6617 A2 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop326 ; Global: Interrupt handler - the CPU enters it from the vector table; it ; calls CallHandlerThroughPointer. ; Local: Executes 4 instructions: copies X into A; calls CallHandlerThroughPointer; ANDs A with ; $E6; returns from the interrupt with RTI. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns from the interrupt with RTI. ; Clobbers: ; A, X and Y, the N, Z and C flags, Zp1E, Zp1F. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop326: txa ; CPU:$E619 PRG:6619 8A jsr CallHandlerThroughPointer ; CPU:$E61A PRG:661A 20 01 C3 and #$E6 ; CPU:$E61D PRG:661D 29 E6 rti ; CPU:$E61F PRG:661F 40 ; ----------------------------------------------------------------------------- ; Routine: SubCE620 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: increments Zp51; increments Zp9B; increments ; ZpAD; increments ZpBF; increments ZpA2; ends in BRK. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Ends in BRK. ; Clobbers: ; no register, the N, Z and I flags, Zp51, Zp9B, ZpA2, ZpAD, ZpBF. ; ; ----------------------------------------------------------------------------- SubCE620: inc Zp51 ; CPU:$E620 PRG:6620 E6 51 inc Zp9B ; CPU:$E622 PRG:6622 E6 9B inc ZpAD ; CPU:$E624 PRG:6624 E6 AD inc ZpBF ; CPU:$E626 PRG:6626 E6 BF inc ZpA2 ; CPU:$E628 PRG:6628 E6 A2 brk ; CPU:$E62A PRG:662A 00 ; ----------------------------------------------------------------------------- ; Routine: SubCE62B ; Global: The routine calls Sub_E6F6, writes $0593, $0594 and $0595. ; Local: Executes 9 instructions: stores X to Zp79; stores X to Zp7C; ; increments X; stores X to $0593; stores X to $0594; stores X to ; $0595; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0593, $0594 and $0595 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCE62B: stx Zp79 ; CPU:$E62B PRG:662B 86 79 stx Zp7C ; CPU:$E62D PRG:662D 86 7C inx ; CPU:$E62F PRG:662F E8 stx $0593 ; CPU:$E630 PRG:6630 8E 93 05 stx $0594 ; CPU:$E633 PRG:6633 8E 94 05 stx $0595 ; CPU:$E636 PRG:6636 8E 95 05 lda #$04 ; CPU:$E639 PRG:6639 A9 04 sta Zp0F ; CPU:$E63B PRG:663B 85 0F jmp Sub_E6F6 ; CPU:$E63D PRG:663D 4C F6 E6 ; ----------------------------------------------------------------------------- ; Routine: SubCE640 ; Global: The routine calls Sub_D749, writes $059C. ; Local: Executes 7 instructions: loads X from Zp18; increments $0210,x; loads ; A from $021B,x; calls Sub_D749; loads A with $01; stores A to ; $059C; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $059C changed. ; Clobbers: ; A and X, the N, Z, C and V flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- SubCE640: ldx Zp18 ; CPU:$E640 PRG:6640 A6 18 inc $0210,x ; CPU:$E642 PRG:6642 FE 10 02 lda $021B,x ; CPU:$E645 PRG:6645 BD 1B 02 jsr Sub_D749 ; CPU:$E648 PRG:6648 20 49 D7 lda #$01 ; CPU:$E64B PRG:664B A9 01 sta $059C ; CPU:$E64D PRG:664D 8D 9C 05 rts ; CPU:$E650 PRG:6650 60 ; ----------------------------------------------------------------------------- ; Routine: SubCE651 ; Global: The routine writes $059D, reads $0464. ; Local: Executes 20 instructions: loads A with $01; stores A to $059D; loads ; A with $F0; stores A to Zp5F; loads X from Zp18; loads A from ; $021D,x; and 14 more instructions. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $059D changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCE651: lda #$01 ; CPU:$E651 PRG:6651 A9 01 sta $059D ; CPU:$E653 PRG:6653 8D 9D 05 lda #$F0 ; CPU:$E656 PRG:6656 A9 F0 sta Zp5F ; CPU:$E658 PRG:6658 85 5F ldx Zp18 ; CPU:$E65A PRG:665A A6 18 lda $021D,x ; CPU:$E65C PRG:665C BD 1D 02 tax ; CPU:$E65F PRG:665F AA lda $E698,x ; CPU:$E660 PRG:6660 BD 98 E6 sta Zp0F ; CPU:$E663 PRG:6663 85 0F lda $0464 ; CPU:$E665 PRG:6665 AD 64 04 cmp #$03 ; CPU:$E668 PRG:6668 C9 03 beq NmiHandler_Loop328 ; CPU:$E66A PRG:666A F0 5C ldx Zp18 ; CPU:$E66C PRG:666C A6 18 lda Zp54 ; CPU:$E66E PRG:666E A5 54 beq NmiHandler_Loop327 ; CPU:$E670 PRG:6670 F0 0B lda $021B,x ; CPU:$E672 PRG:6672 BD 1B 02 cmp Zp7D ; CPU:$E675 PRG:6675 C5 7D bne NmiHandler_Loop327 ; CPU:$E677 PRG:6677 D0 04 lda #$04 ; CPU:$E679 PRG:6679 A9 04 sta Zp54 ; CPU:$E67B PRG:667B 85 54 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop327 ; Global: The routine writes $0205. ; Local: Executes 13 instructions: loads Y from Zp7C; decrements Y; branches ; on not equal to NmiHandler_Loop329; loads A from $021B,x; compares ; A with Zp7D; branches on not equal to NmiHandler_Loop329; and 7 ; more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0205 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop327: ldy Zp7C ; CPU:$E67D PRG:667D A4 7C dey ; CPU:$E67F PRG:667F 88 bne NmiHandler_Loop329 ; CPU:$E680 PRG:6680 D0 67 lda $021B,x ; CPU:$E682 PRG:6682 BD 1B 02 cmp Zp7D ; CPU:$E685 PRG:6685 C5 7D bne NmiHandler_Loop329 ; CPU:$E687 PRG:6687 D0 60 inc Zp79 ; CPU:$E689 PRG:6689 E6 79 lda #$78 ; CPU:$E68B PRG:668B A9 78 sta $0205 ; CPU:$E68D PRG:668D 8D 05 02 lda #$00 ; CPU:$E690 PRG:6690 A9 00 sta Zp7C ; CPU:$E692 PRG:6692 85 7C sta Zp7B ; CPU:$E694 PRG:6694 85 7B bpl NmiHandler_Loop329 ; CPU:$E696 PRG:6696 10 51 .byte $07, $05 ; CPU:$E698 PRG:6698 07 05 -- slo Zp05 (undocumented; ca65 cannot encode) ; CPU:$E698 PRG:6698 07 05 ; ---- data $E69A-$E69A (1 bytes) ---- UnreachedByte2: .byte $02 ; CPU:$E69A PRG:669A 02 ; ----------------------------------------------------------------------------- ; Routine: SubCE69B ; Global: The routine writes $059E, reads $0464. ; Local: Executes 8 instructions: loads A with $08; stores A to Zp0F; loads A ; with $01; stores A to $059E; loads A from $0464; compares A with ; $03; and 2 more instructions. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $059E changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCE69B: lda #$08 ; CPU:$E69B PRG:669B A9 08 sta Zp0F ; CPU:$E69D PRG:669D 85 0F lda #$01 ; CPU:$E69F PRG:669F A9 01 sta $059E ; CPU:$E6A1 PRG:66A1 8D 9E 05 lda $0464 ; CPU:$E6A4 PRG:66A4 AD 64 04 cmp #$03 ; CPU:$E6A7 PRG:66A7 C9 03 bne NmiHandler_Loop329 ; CPU:$E6A9 PRG:66A9 D0 3E beq NmiHandler_Loop328 ; CPU:$E6AB PRG:66AB F0 1B ; ----------------------------------------------------------------------------- ; Routine: SubCE6AD ; Global: The routine writes $059F, reads $0464. ; Local: Executes 12 instructions: loads A with $0A; stores A to Zp0F; loads A ; with $01; stores A to $059F; loads A from $0464; compares A with ; $03; and 6 more instructions. ; Parameters: Reads $0464 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $059F changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- SubCE6AD: lda #$0A ; CPU:$E6AD PRG:66AD A9 0A sta Zp0F ; CPU:$E6AF PRG:66AF 85 0F lda #$01 ; CPU:$E6B1 PRG:66B1 A9 01 sta $059F ; CPU:$E6B3 PRG:66B3 8D 9F 05 lda $0464 ; CPU:$E6B6 PRG:66B6 AD 64 04 cmp #$03 ; CPU:$E6B9 PRG:66B9 C9 03 bne NmiHandler_Loop329 ; CPU:$E6BB PRG:66BB D0 2C beq NmiHandler_Loop328 ; CPU:$E6BD PRG:66BD F0 09 lda #$0A ; CPU:$E6BF PRG:66BF A9 0A sta Zp0F ; CPU:$E6C1 PRG:66C1 85 0F lda #$01 ; CPU:$E6C3 PRG:66C3 A9 01 sta $059F ; CPU:$E6C5 PRG:66C5 8D 9F 05 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop328 ; Global: The routine calls Sub_C3A1 and Sub_C8AB, reads $0478. ; Local: Executes 15 instructions: loads A with $C1; stores A to ; StarFieldPtrLo; loads A with $00; stores A to StarFieldPtrHi; loads ; A with $03; stores A to Zp02; and 9 more instructions. ; Parameters: Reads $0478 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop328: lda #$C1 ; CPU:$E6C8 PRG:66C8 A9 C1 sta StarFieldPtrLo ; CPU:$E6CA PRG:66CA 85 00 lda #$00 ; CPU:$E6CC PRG:66CC A9 00 sta StarFieldPtrHi ; CPU:$E6CE PRG:66CE 85 01 lda #$03 ; CPU:$E6D0 PRG:66D0 A9 03 sta Zp02 ; CPU:$E6D2 PRG:66D2 85 02 jsr Sub_C3A1 ; CPU:$E6D4 PRG:66D4 20 A1 C3 inc ZpC4 ; CPU:$E6D7 PRG:66D7 E6 C4 dec ZpC0 ; CPU:$E6D9 PRG:66D9 C6 C0 bne NmiHandler_Loop329 ; CPU:$E6DB PRG:66DB D0 0C lda Zp0F ; CPU:$E6DD PRG:66DD A5 0F sta StarFieldPtrLo ; CPU:$E6DF PRG:66DF 85 00 jsr Sub_C8AB ; CPU:$E6E1 PRG:66E1 20 AB C8 lda $0478 ; CPU:$E6E4 PRG:66E4 AD 78 04 sta Zp0F ; CPU:$E6E7 PRG:66E7 85 0F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop329 ; Global: The routine reads $0494. ; Local: Executes 4 instructions: loads X from Zp18; loads A from $021B,x; ; branches on equal to NmiHandler_Loop330; decrements $0494. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop329: ldx Zp18 ; CPU:$E6E9 PRG:66E9 A6 18 lda $021B,x ; CPU:$E6EB PRG:66EB BD 1B 02 beq NmiHandler_Loop330 ; CPU:$E6EE PRG:66EE F0 03 dec $0494 ; CPU:$E6F0 PRG:66F0 CE 94 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop330 ; Global: The routine reads $0495. ; Local: Executes 1 instruction: decrements $0495. ; Parameters: Reads $0495 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop330: dec $0495 ; CPU:$E6F3 PRG:66F3 CE 95 04 ; ----------------------------------------------------------------------------- ; Routine: Sub_E6F6 ; Global: The routine calls Sub_E78E. ; Local: Executes 15 instructions: loads X from Zp18; loads A with $80; stores ; A to $0210,x; loads A from $0212,x; stores A to ScreenPtrLo; loads ; A from $0213,x; and 9 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_E6F6: ldx Zp18 ; CPU:$E6F6 PRG:66F6 A6 18 lda #$80 ; CPU:$E6F8 PRG:66F8 A9 80 sta $0210,x ; CPU:$E6FA PRG:66FA 9D 10 02 lda $0212,x ; CPU:$E6FD PRG:66FD BD 12 02 sta ScreenPtrLo ; CPU:$E700 PRG:6700 85 0A lda $0213,x ; CPU:$E702 PRG:6702 BD 13 02 sta ScreenPtrHi ; CPU:$E705 PRG:6705 85 0B jsr Sub_E78E ; CPU:$E707 PRG:6707 20 8E E7 lda Zp0F ; CPU:$E70A PRG:670A A5 0F sta StarFieldPtrLo ; CPU:$E70C PRG:670C 85 00 lda #$08 ; CPU:$E70E PRG:670E A9 08 sec ; CPU:$E710 PRG:6710 38 sbc StarFieldPtrLo ; CPU:$E711 PRG:6711 E5 00 bcs NmiHandler_Loop331 ; CPU:$E713 PRG:6713 B0 02 lda #$00 ; CPU:$E715 PRG:6715 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop331 ; Global: The routine calls Sub_C8AB. ; Local: Executes 3 instructions: stores A to $03DB,x; calls Sub_C8AB; returns ; with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop331: sta $03DB,x ; CPU:$E717 PRG:6717 9D DB 03 jsr Sub_C8AB ; CPU:$E71A PRG:671A 20 AB C8 rts ; CPU:$E71D PRG:671D 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero13 ; Global: The routine calls Sub_D749, SpawnEnemyShip and SpawnEnemyShipAlt, writes $059C, ; reads $040F. ; Local: Executes 16 instructions: loads A with $01; stores A to $059C; stores ; A to $0400,x; loads A with $80; loads Y with $00; stores A to ; ((TilePtrLo),y); and 10 more instructions. ; Parameters: Reads $040F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $059C changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero13: lda #$01 ; CPU:$E71E PRG:671E A9 01 sta $059C ; CPU:$E720 PRG:6720 8D 9C 05 sta $0400,x ; CPU:$E723 PRG:6723 9D 00 04 lda #$80 ; CPU:$E726 PRG:6726 A9 80 ldy #$00 ; CPU:$E728 PRG:6728 A0 00 sta (TilePtrLo),y ; CPU:$E72A PRG:672A 91 08 txa ; CPU:$E72C PRG:672C 8A sta Zp1A ; CPU:$E72D PRG:672D 85 1A jsr Sub_D749 ; CPU:$E72F PRG:672F 20 49 D7 lda $040F ; CPU:$E732 PRG:6732 AD 0F 04 cmp #$0C ; CPU:$E735 PRG:6735 C9 0C bcc NmiHandler_Loop332 ; CPU:$E737 PRG:6737 90 0A lda Zp1A ; CPU:$E739 PRG:6739 A5 1A jsr SpawnEnemyShip ; CPU:$E73B PRG:673B 20 18 D5 lda Zp1A ; CPU:$E73E PRG:673E A5 1A jsr SpawnEnemyShipAlt ; CPU:$E740 PRG:6740 20 38 D5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop332 ; Global: The routine calls Sub_C339. ; Local: Executes 1 instruction: calls Sub_C339. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp20, Zp28, Zp30, Zp37, Zp38. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop332: jmp Sub_C339 ; CPU:$E743 PRG:6743 4C 39 C3 ; ----------------------------------------------------------------------------- ; Routine: Sub_E746 ; Global: The routine calls Sub_D749, SpawnEnemyShip, SpawnEnemyShipAlt and Sub_C339, writes ; $059C, reads $040F. ; Local: Executes 19 instructions: loads A with $01; stores A to $059C; stores ; A to $0400,x; loads A with $80; loads Y with $00; stores A to ; ((TilePtrLo),y); and 13 more instructions. ; Parameters: Reads $040F from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $059C changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_E746: cmp #$02 ; CPU:$E746 PRG:6746 C9 02 beq NmiHandler_OnZero13 ; CPU:$E748 PRG:6748 F0 D4 ; ----------------------------------------------------------------------------- ; Routine: Sub_E74A ; Global: The routine calls SpawnEnemyShip, Sub_E78E, Sub_C8AB and Sub_C339, writes ; $059F, reads $0494. ; Local: Executes 29 instructions: decrements $0494; stores X to Zp0E; copies ; X into A; calls SpawnEnemyShip; loads Y with $00; loads A with $80; and ; 23 more instructions. ; Parameters: Reads $0494 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $059F changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_E74A: dec $0494 ; CPU:$E74A PRG:674A CE 94 04 stx Zp0E ; CPU:$E74D PRG:674D 86 0E txa ; CPU:$E74F PRG:674F 8A jsr SpawnEnemyShip ; CPU:$E750 PRG:6750 20 18 D5 ldy #$00 ; CPU:$E753 PRG:6753 A0 00 lda #$80 ; CPU:$E755 PRG:6755 A9 80 sta (TilePtrLo),y ; CPU:$E757 PRG:6757 91 08 jsr Sub_E78E ; CPU:$E759 PRG:6759 20 8E E7 lda #$00 ; CPU:$E75C PRG:675C A9 00 sta $03DB,x ; CPU:$E75E PRG:675E 9D DB 03 jsr Sub_E78E ; CPU:$E761 PRG:6761 20 8E E7 lda ScreenPtrLo ; CPU:$E764 PRG:6764 A5 0A lsr a ; CPU:$E766 PRG:6766 4A lsr a ; CPU:$E767 PRG:6767 4A lsr a ; CPU:$E768 PRG:6768 4A lsr a ; CPU:$E769 PRG:6769 4A tay ; CPU:$E76A PRG:676A A8 lda $E7B0,y ; CPU:$E76B PRG:676B B9 B0 E7 sta StarFieldPtrLo ; CPU:$E76E PRG:676E 85 00 jsr Sub_C8AB ; CPU:$E770 PRG:6770 20 AB C8 jsr Sub_C339 ; CPU:$E773 PRG:6773 20 39 C3 ldx #$01 ; CPU:$E776 PRG:6776 A2 01 lda Zp0E ; CPU:$E778 PRG:6778 A5 0E cmp #$10 ; CPU:$E77A PRG:677A C9 10 bcc NmiHandler_Loop334 ; CPU:$E77C PRG:677C 90 0C cmp #$30 ; CPU:$E77E PRG:677E C9 30 bcc NmiHandler_Loop333 ; CPU:$E780 PRG:6780 90 04 stx $059F ; CPU:$E782 PRG:6782 8E 9F 05 rts ; CPU:$E785 PRG:6785 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop333 ; Global: The routine writes $059E. ; Local: Executes 2 instructions: stores X to $059E; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $059E changed. ; Clobbers: ; no register, $059E. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop333: stx $059E ; CPU:$E786 PRG:6786 8E 9E 05 rts ; CPU:$E789 PRG:6789 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop334 ; Global: The routine writes $059D. ; Local: Executes 2 instructions: stores X to $059D; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $059D changed. ; Clobbers: ; no register, $059D. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop334: stx $059D ; CPU:$E78A PRG:678A 8E 9D 05 rts ; CPU:$E78D PRG:678D 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_E78E ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A from Zp5A; clears the carry flag; ; adds $04 to A; compares A with $20; branches on carry clear to ; NmiHandler_Loop335; loads A with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp5A, $03D8, $03D9, $03DA, $03DB. ; ; ----------------------------------------------------------------------------- Sub_E78E: lda Zp5A ; CPU:$E78E PRG:678E A5 5A clc ; CPU:$E790 PRG:6790 18 adc #$04 ; CPU:$E791 PRG:6791 69 04 cmp #$20 ; CPU:$E793 PRG:6793 C9 20 bcc NmiHandler_Loop335 ; CPU:$E795 PRG:6795 90 02 lda #$00 ; CPU:$E797 PRG:6797 A9 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop335 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: stores A to Zp5A; copies A into X; loads A ; with $FF; stores A to $03D8,x; loads A from ScreenPtrLo; stores A ; to $03D9,x; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N and Z flags, Zp5A, $03D8, $03D9, $03DA, $03DB. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop335: sta Zp5A ; CPU:$E799 PRG:6799 85 5A tax ; CPU:$E79B PRG:679B AA lda #$FF ; CPU:$E79C PRG:679C A9 FF sta $03D8,x ; CPU:$E79E PRG:679E 9D D8 03 lda ScreenPtrLo ; CPU:$E7A1 PRG:67A1 A5 0A sta $03D9,x ; CPU:$E7A3 PRG:67A3 9D D9 03 lda ScreenPtrHi ; CPU:$E7A6 PRG:67A6 A5 0B sta $03DA,x ; CPU:$E7A8 PRG:67A8 9D DA 03 lda #$00 ; CPU:$E7AB PRG:67AB A9 00 sta $03DB,x ; CPU:$E7AD PRG:67AD 9D DB 03 rts ; CPU:$E7B0 PRG:67B0 60 ; ---- data $E7B1-$E7B5 (5 bytes) ---- UnreachedCode: .byte $09, $0B, $0B, $0C, $0C ; CPU:$E7B1 PRG:67B1 09 0B 0B 0C 0C ; ----------------------------------------------------------------------------- ; Routine: Sub_E7B6 ; Global: The routine reads $0200. ; Local: Executes 4 instructions: loads A from Zp5C; branches on not equal to ; NmiHandler_OnNonzero58; loads A from $0200; branches on ; non-negative to NmiHandler_Loop336. ; Parameters: Reads $0200 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- Sub_E7B6: lda Zp5C ; CPU:$E7B6 PRG:67B6 A5 5C bne NmiHandler_OnNonzero58 ; CPU:$E7B8 PRG:67B8 D0 05 lda $0200 ; CPU:$E7BA PRG:67BA AD 00 02 bpl NmiHandler_Loop336 ; CPU:$E7BD PRG:67BD 10 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero58 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero58: rts ; CPU:$E7BF PRG:67BF 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop336 ; Global: The routine reads $0202. ; Local: Executes 12 instructions: returns with RTS; loads A from Zp79; ; compares A with $08; branches on carry set to ; NmiHandler_OnNonzero58; loads A from $0202; compares A with $C7; ; and 6 more instructions. ; Parameters: Reads $0202 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop336: lda Zp79 ; CPU:$E7C0 PRG:67C0 A5 79 cmp #$08 ; CPU:$E7C2 PRG:67C2 C9 08 bcs NmiHandler_OnNonzero58 ; CPU:$E7C4 PRG:67C4 B0 F9 lda $0202 ; CPU:$E7C6 PRG:67C6 AD 02 02 cmp #$C7 ; CPU:$E7C9 PRG:67C9 C9 C7 bne NmiHandler_OnNonzero58 ; CPU:$E7CB PRG:67CB D0 F2 ldx #$0D ; CPU:$E7CD PRG:67CD A2 0D ldy Zp79 ; CPU:$E7CF PRG:67CF A4 79 dey ; CPU:$E7D1 PRG:67D1 88 bne NmiHandler_Loop337 ; CPU:$E7D2 PRG:67D2 D0 02 ldx #$1B ; CPU:$E7D4 PRG:67D4 A2 1B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop337 ; Global: The routine reads $0203. ; Local: Executes 11 instructions: stores X to ScreenPtrHi; loads A from ; $0203; stores A to Zp14; sets the carry flag; subtracts $06 from A; ; stores A to SpriteX; and 5 more instructions. ; Parameters: Reads $0203 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop337: stx ScreenPtrHi ; CPU:$E7D6 PRG:67D6 86 0B lda $0203 ; CPU:$E7D8 PRG:67D8 AD 03 02 sta Zp14 ; CPU:$E7DB PRG:67DB 85 14 sec ; CPU:$E7DD PRG:67DD 38 sbc #$06 ; CPU:$E7DE PRG:67DE E9 06 sta SpriteX ; CPU:$E7E0 PRG:67E0 85 16 clc ; CPU:$E7E2 PRG:67E2 18 adc ScreenPtrHi ; CPU:$E7E3 PRG:67E3 65 0B sta Zp17 ; CPU:$E7E5 PRG:67E5 85 17 ldx #$00 ; CPU:$E7E7 PRG:67E7 A2 00 stx Zp18 ; CPU:$E7E9 PRG:67E9 86 18 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear20 ; Global: The routine calls Sub_E86D. ; Local: Executes 17 instructions: loads X from Zp18; loads A from Zp90,x; ; branches on negative to NmiHandler_Loop338; loads A from Zp91,x; ; compares A with $C2; branches on carry clear to NmiHandler_Loop338; ; and 11 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear20: ldx Zp18 ; CPU:$E7EB PRG:67EB A6 18 lda Zp90,x ; CPU:$E7ED PRG:67ED B5 90 bmi NmiHandler_Loop338 ; CPU:$E7EF PRG:67EF 30 1B lda Zp91,x ; CPU:$E7F1 PRG:67F1 B5 91 cmp #$C2 ; CPU:$E7F3 PRG:67F3 C9 C2 bcc NmiHandler_Loop338 ; CPU:$E7F5 PRG:67F5 90 15 cmp #$CC ; CPU:$E7F7 PRG:67F7 C9 CC bcs NmiHandler_Loop338 ; CPU:$E7F9 PRG:67F9 B0 11 lda Zp92,x ; CPU:$E7FB PRG:67FB B5 92 cmp Zp17 ; CPU:$E7FD PRG:67FD C5 17 bcs NmiHandler_Loop338 ; CPU:$E7FF PRG:67FF B0 0B sec ; CPU:$E801 PRG:6801 38 sbc SpriteX ; CPU:$E802 PRG:6802 E5 16 bcc NmiHandler_Loop338 ; CPU:$E804 PRG:6804 90 06 clc ; CPU:$E806 PRG:6806 18 adc #$02 ; CPU:$E807 PRG:6807 69 02 jmp Sub_E86D ; CPU:$E809 PRG:6809 4C 6D E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop338 ; Global: The routine calls Sub_E86D. ; Local: Executes 33 instructions: loads X from Zp18; loads A from Zp90,x; ; branches on negative to NmiHandler_Loop338; loads A from Zp91,x; ; compares A with $C2; branches on carry clear to NmiHandler_Loop338; ; and 27 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop338: lda Zp18 ; CPU:$E80C PRG:680C A5 18 clc ; CPU:$E80E PRG:680E 18 adc #$04 ; CPU:$E80F PRG:680F 69 04 sta Zp18 ; CPU:$E811 PRG:6811 85 18 cmp #$20 ; CPU:$E813 PRG:6813 C9 20 bcc NmiHandler_OnCarryClear20 ; CPU:$E815 PRG:6815 90 D4 dec SpriteX ; CPU:$E817 PRG:6817 C6 16 dec SpriteX ; CPU:$E819 PRG:6819 C6 16 inc Zp17 ; CPU:$E81B PRG:681B E6 17 inc Zp17 ; CPU:$E81D PRG:681D E6 17 inc Zp17 ; CPU:$E81F PRG:681F E6 17 inc Zp17 ; CPU:$E821 PRG:6821 E6 17 ldx #$10 ; CPU:$E823 PRG:6823 A2 10 lda Zp7C ; CPU:$E825 PRG:6825 A5 7C beq NmiHandler_Loop339 ; CPU:$E827 PRG:6827 F0 02 ldx #$00 ; CPU:$E829 PRG:6829 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop339 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: stores X to Zp18. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop339: stx Zp18 ; CPU:$E82B PRG:682B 86 18 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear21 ; Global: The routine calls Sub_E85A. ; Local: Executes 15 instructions: loads X from Zp18; loads A from $0210,x; ; branches on negative to NmiHandler_Loop340; loads A from $0212,x; ; compares A with $C4; branches on carry clear to NmiHandler_Loop340; ; and 9 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear21: ldx Zp18 ; CPU:$E82D PRG:682D A6 18 lda $0210,x ; CPU:$E82F PRG:682F BD 10 02 bmi NmiHandler_Loop340 ; CPU:$E832 PRG:6832 30 1A lda $0212,x ; CPU:$E834 PRG:6834 BD 12 02 cmp #$C4 ; CPU:$E837 PRG:6837 C9 C4 bcc NmiHandler_Loop340 ; CPU:$E839 PRG:6839 90 13 cmp #$CC ; CPU:$E83B PRG:683B C9 CC bcs NmiHandler_Loop340 ; CPU:$E83D PRG:683D B0 0F lda $0213,x ; CPU:$E83F PRG:683F BD 13 02 cmp Zp17 ; CPU:$E842 PRG:6842 C5 17 bcs NmiHandler_Loop340 ; CPU:$E844 PRG:6844 B0 08 sec ; CPU:$E846 PRG:6846 38 sbc SpriteX ; CPU:$E847 PRG:6847 E5 16 bcc NmiHandler_Loop340 ; CPU:$E849 PRG:6849 90 03 jmp Sub_E85A ; CPU:$E84B PRG:684B 4C 5A E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop340 ; Global: The routine calls Sub_E85A. ; Local: Executes 22 instructions: loads X from Zp18; loads A from $0210,x; ; branches on negative to NmiHandler_Loop340; loads A from $0212,x; ; compares A with $C4; branches on carry clear to NmiHandler_Loop340; ; and 16 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the OAM shadow and the RAM fields ; it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop340: lda Zp18 ; CPU:$E84E PRG:684E A5 18 clc ; CPU:$E850 PRG:6850 18 adc #$10 ; CPU:$E851 PRG:6851 69 10 sta Zp18 ; CPU:$E853 PRG:6853 85 18 cmp #$D0 ; CPU:$E855 PRG:6855 C9 D0 bcc NmiHandler_OnCarryClear21 ; CPU:$E857 PRG:6857 90 D4 rts ; CPU:$E859 PRG:6859 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_E85A ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: pushes A; loads X from Zp18; loads A from ; $0210,x; compares A with $02; branches on not equal to ; NmiHandler_Loop341; increments $0210,x. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- Sub_E85A: pha ; CPU:$E85A PRG:685A 48 ldx Zp18 ; CPU:$E85B PRG:685B A6 18 lda $0210,x ; CPU:$E85D PRG:685D BD 10 02 cmp #$02 ; CPU:$E860 PRG:6860 C9 02 bne NmiHandler_Loop341 ; CPU:$E862 PRG:6862 D0 03 inc $0210,x ; CPU:$E864 PRG:6864 FE 10 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop341 ; Global: The routine calls Sub_E609 and Sub_E877. ; Local: Executes 2 instructions: calls Sub_E609; calls Sub_E877. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z and C flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop341: jsr Sub_E609 ; CPU:$E867 PRG:6867 20 09 E6 jmp Sub_E877 ; CPU:$E86A PRG:686A 4C 77 E8 ; ----------------------------------------------------------------------------- ; Routine: Sub_E86D ; Global: The routine reads $0477. ; Local: Executes 5 instructions: pushes A; decrements $0477; loads X from ; Zp18; loads A with $FF; stores A to Zp90,x. ; Parameters: Reads $0477 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z and C flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- Sub_E86D: pha ; CPU:$E86D PRG:686D 48 dec $0477 ; CPU:$E86E PRG:686E CE 77 04 ldx Zp18 ; CPU:$E871 PRG:6871 A6 18 lda #$FF ; CPU:$E873 PRG:6873 A9 FF sta Zp90,x ; CPU:$E875 PRG:6875 95 90 ; ----------------------------------------------------------------------------- ; Routine: Sub_E877 ; Global: Puts the player ship back to its starting state and clears the ship's frame counters. ; Local: Executes 11 instructions: loads A with $01; stores A to $05A3; pulls ; A; loads X from Zp79; decrements X; branches on not equal to ; NmiHandler_Loop343; and 5 more instructions. ; Parameters: Reads $0213 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $05A3 and $0203 changed. ; Clobbers: ; A and X, the N, Z and C flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- Sub_E877: lda #$01 ; CPU:$E877 PRG:6877 A9 01 sta $05A3 ; CPU:$E879 PRG:6879 8D A3 05 pla ; CPU:$E87C PRG:687C 68 ldx Zp79 ; CPU:$E87D PRG:687D A6 79 dex ; CPU:$E87F PRG:687F CA bne NmiHandler_Loop343 ; CPU:$E880 PRG:6880 D0 29 cmp #$10 ; CPU:$E882 PRG:6882 C9 10 bcs NmiHandler_Loop342 ; CPU:$E884 PRG:6884 B0 1F lda $0213 ; CPU:$E886 PRG:6886 AD 13 02 sta $0203 ; CPU:$E889 PRG:6889 8D 03 02 lda Zp14 ; CPU:$E88C PRG:688C A5 14 ; ----------------------------------------------------------------------------- ; Routine: ResetPlayerShipState ; Global: The routine writes $03FA, $03F9, $03F8 and $0210. ; Local: Executes 10 instructions: stores A to $03FA; loads A with $C7; stores ; A to $03F9; loads A with $FF; stores A to $03F8; loads A with $80; ; and 4 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $03FA, $03F9 and $03F8 changed. ; Clobbers: ; A, the N and Z flags, Zp79, the OAM shadow, $03F8, $03F9, $03FA. ; ; ----------------------------------------------------------------------------- ResetPlayerShipState: sta $03FA ; CPU:$E88E PRG:688E 8D FA 03 lda #$C7 ; CPU:$E891 PRG:6891 A9 C7 sta $03F9 ; CPU:$E893 PRG:6893 8D F9 03 lda #$FF ; CPU:$E896 PRG:6896 A9 FF sta $03F8 ; CPU:$E898 PRG:6898 8D F8 03 lda #$80 ; CPU:$E89B PRG:689B A9 80 sta $0210 ; CPU:$E89D PRG:689D 8D 10 02 lda #$00 ; CPU:$E8A0 PRG:68A0 A9 00 sta Zp79 ; CPU:$E8A2 PRG:68A2 85 79 rts ; CPU:$E8A4 PRG:68A4 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop342 ; Global: The routine calls ResetPlayerShipState, reads $0213. ; Local: Executes 2 instructions: loads A from $0213; calls ResetPlayerShipState. ; Parameters: Reads $0213 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, the N and Z flags, Zp79, the OAM shadow, $03F8, $03F9, $03FA. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop342: lda $0213 ; CPU:$E8A5 PRG:68A5 AD 13 02 jmp ResetPlayerShipState ; CPU:$E8A8 PRG:68A8 4C 8E E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop343 ; Global: The routine writes $0200, $03F8, $03F9, $03FA and 1 more, reads ; $0203. ; Local: Executes 19 instructions: loads A with $80; stores A to $0200; loads ; A with $FF; stores A to $03F8; loads A with $C7; stores A to $03F9; ; and 13 more instructions. ; Parameters: Reads $0203 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0200, $03F8 and $03F9 ; changed. ; Clobbers: ; A and X, the N, Z and C flags, the OAM shadow and the RAM fields it ; writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop343: lda #$80 ; CPU:$E8AB PRG:68AB A9 80 sta $0200 ; CPU:$E8AD PRG:68AD 8D 00 02 lda #$FF ; CPU:$E8B0 PRG:68B0 A9 FF sta $03F8 ; CPU:$E8B2 PRG:68B2 8D F8 03 lda #$C7 ; CPU:$E8B5 PRG:68B5 A9 C7 sta $03F9 ; CPU:$E8B7 PRG:68B7 8D F9 03 lda $0203 ; CPU:$E8BA PRG:68BA AD 03 02 sta $03FA ; CPU:$E8BD PRG:68BD 8D FA 03 lda #$01 ; CPU:$E8C0 PRG:68C0 A9 01 sta Zp7A ; CPU:$E8C2 PRG:68C2 85 7A lda Zp79 ; CPU:$E8C4 PRG:68C4 A5 79 cmp #$06 ; CPU:$E8C6 PRG:68C6 C9 06 beq NmiHandler_Loop344 ; CPU:$E8C8 PRG:68C8 F0 0C cmp #$05 ; CPU:$E8CA PRG:68CA C9 05 beq NmiHandler_Loop344 ; CPU:$E8CC PRG:68CC F0 08 ldx #$00 ; CPU:$E8CE PRG:68CE A2 00 stx $0471 ; CPU:$E8D0 PRG:68D0 8E 71 04 inx ; CPU:$E8D3 PRG:68D3 E8 stx Zp7B ; CPU:$E8D4 PRG:68D4 86 7B ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop344 ; Global: Counts the player ship's spawns on and works out the next spawn delay. ; Local: Executes 1 instruction: returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; nothing. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop344: rts ; CPU:$E8D6 PRG:68D6 60 ; ----------------------------------------------------------------------------- ; Routine: AdvancePlayerSpawnCount ; Global: The routine reads $0472. ; Local: Executes 5 instructions: loads X from $0472; increments X; compares X ; with $14; branches on carry clear to NmiHandler_Loop345; loads X ; with $11. ; Parameters: Reads $0472 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- AdvancePlayerSpawnCount: ldx $0472 ; CPU:$E8D7 PRG:68D7 AE 72 04 inx ; CPU:$E8DA PRG:68DA E8 cpx #$14 ; CPU:$E8DB PRG:68DB E0 14 bcc NmiHandler_Loop345 ; CPU:$E8DD PRG:68DD 90 02 ldx #$11 ; CPU:$E8DF PRG:68DF A2 11 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop345 ; Global: The routine writes $0472 and $0475. ; Local: Executes 10 instructions: stores X to $0472; copies X into A; shifts ; a left; stores A to $0475; shifts a left; shifts a left; and 4 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0472 and $0475 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop345: stx $0472 ; CPU:$E8E1 PRG:68E1 8E 72 04 txa ; CPU:$E8E4 PRG:68E4 8A asl a ; CPU:$E8E5 PRG:68E5 0A sta $0475 ; CPU:$E8E6 PRG:68E6 8D 75 04 asl a ; CPU:$E8E9 PRG:68E9 0A asl a ; CPU:$E8EA PRG:68EA 0A tax ; CPU:$E8EB PRG:68EB AA lda #$08 ; CPU:$E8EC PRG:68EC A9 08 sta Zp02 ; CPU:$E8EE PRG:68EE 85 02 ldy #$00 ; CPU:$E8F0 PRG:68F0 A0 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero59 ; Global: Copies the sprite attributes and the tile ids of a ship into the sprite table. ; Local: Executes 20 instructions: calls CopySpriteAttributes; decrements Zp02; branches ; on not equal to NmiHandler_OnNonzero59; shifts $0456 left; shifts ; $0456 left; shifts $0457 left; and 14 more instructions. ; Parameters: Reads $0456, $0457, $0455, $0454 and 1 more from the zero page ; and RAM; the values it acts on are those fields' contents. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0455 and $0454 changed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero59: jsr CopySpriteAttributes ; CPU:$E8F2 PRG:68F2 20 22 E9 dec Zp02 ; CPU:$E8F5 PRG:68F5 C6 02 bne NmiHandler_OnNonzero59 ; CPU:$E8F7 PRG:68F7 D0 F9 asl $0456 ; CPU:$E8F9 PRG:68F9 0E 56 04 asl $0456 ; CPU:$E8FC PRG:68FC 0E 56 04 asl $0457 ; CPU:$E8FF PRG:68FF 0E 57 04 asl $0457 ; CPU:$E902 PRG:6902 0E 57 04 lda $0455 ; CPU:$E905 PRG:6905 AD 55 04 asl a ; CPU:$E908 PRG:6908 0A adc $0455 ; CPU:$E909 PRG:6909 6D 55 04 sta $0455 ; CPU:$E90C PRG:690C 8D 55 04 lda $0454 ; CPU:$E90F PRG:690F AD 54 04 asl a ; CPU:$E912 PRG:6912 0A adc $0454 ; CPU:$E913 PRG:6913 6D 54 04 sta $0454 ; CPU:$E916 PRG:6916 8D 54 04 sec ; CPU:$E919 PRG:6919 38 rol $045E ; CPU:$E91A PRG:691A 2E 5E 04 sec ; CPU:$E91D PRG:691D 38 rol $045E ; CPU:$E91E PRG:691E 2E 5E 04 rts ; CPU:$E921 PRG:6921 60 ; ----------------------------------------------------------------------------- ; Routine: CopySpriteAttributes ; Global: Counts the player ship's frame counter on and rolls it over after $3C frames. ; Local: Executes 16 instructions: loads A from $E9AA,x; increments X; pushes ; A; ANDs A with $0F; increments Y; stores A to $0450,y; and 10 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z and C flags, $0450. ; ; ----------------------------------------------------------------------------- CopySpriteAttributes: lda $E9AA,x ; CPU:$E922 PRG:6922 BD AA E9 inx ; CPU:$E925 PRG:6925 E8 pha ; CPU:$E926 PRG:6926 48 and #$0F ; CPU:$E927 PRG:6927 29 0F iny ; CPU:$E929 PRG:6929 C8 sta $0450,y ; CPU:$E92A PRG:692A 99 50 04 dey ; CPU:$E92D PRG:692D 88 pla ; CPU:$E92E PRG:692E 68 lsr a ; CPU:$E92F PRG:692F 4A lsr a ; CPU:$E930 PRG:6930 4A lsr a ; CPU:$E931 PRG:6931 4A lsr a ; CPU:$E932 PRG:6932 4A sta $0450,y ; CPU:$E933 PRG:6933 99 50 04 iny ; CPU:$E936 PRG:6936 C8 iny ; CPU:$E937 PRG:6937 C8 rts ; CPU:$E938 PRG:6938 60 ; ----------------------------------------------------------------------------- ; Routine: AdvancePlayerFrameCounter ; Global: The routine reads $0473 and $0474. ; Local: Executes 7 instructions: increments $0473; loads X from $0473; ; compares X with $3C; branches on carry clear to NmiHandler_Loop347; ; increments $0474; branches on not equal to NmiHandler_Loop346; and ; 1 more instruction. ; Parameters: Reads $0473 and $0474 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- AdvancePlayerFrameCounter: inc $0473 ; CPU:$E939 PRG:6939 EE 73 04 ldx $0473 ; CPU:$E93C PRG:693C AE 73 04 cpx #$3C ; CPU:$E93F PRG:693F E0 3C bcc NmiHandler_Loop347 ; CPU:$E941 PRG:6941 90 0D inc $0474 ; CPU:$E943 PRG:6943 EE 74 04 bne NmiHandler_Loop346 ; CPU:$E946 PRG:6946 D0 03 dec $0474 ; CPU:$E948 PRG:6948 CE 74 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop346 ; Global: The routine writes $0473. ; Local: Executes 2 instructions: loads X with $00; stores X to $0473. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves $0473 changed. ; Clobbers: ; A, X and Y, the N, Z and C flags, $0465, $0466, $0467, $0470, $0473, ; $0476. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop346: ldx #$00 ; CPU:$E94B PRG:694B A2 00 stx $0473 ; CPU:$E94D PRG:694D 8E 73 04 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop347 ; Global: The routine reads $0454, $0455 and $0474. ; Local: Executes 11 instructions: loads X from $0454; loads Y from $0455; ; loads A from $0474; compares A with $30; branches on carry clear to ; NmiHandler_Loop348; increments X; and 5 more instructions. ; Parameters: Reads $0454, $0455 and $0474 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z and C flags, $0465, $0466, $0467, $0470, $0476. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop347: ldx $0454 ; CPU:$E950 PRG:6950 AE 54 04 ldy $0455 ; CPU:$E953 PRG:6953 AC 55 04 lda $0474 ; CPU:$E956 PRG:6956 AD 74 04 cmp #$30 ; CPU:$E959 PRG:6959 C9 30 bcc NmiHandler_Loop348 ; CPU:$E95B PRG:695B 90 08 inx ; CPU:$E95D PRG:695D E8 iny ; CPU:$E95E PRG:695E C8 cmp #$60 ; CPU:$E95F PRG:695F C9 60 bcc NmiHandler_Loop348 ; CPU:$E961 PRG:6961 90 02 inx ; CPU:$E963 PRG:6963 E8 iny ; CPU:$E964 PRG:6964 C8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop348 ; Global: The routine writes $0466 and $0465, reads $0474 and $0475. ; Local: Executes 9 instructions: loads A from $EA4A,x; stores A to $0466; ; loads A from $EA68,x; stores A to $0465; loads A from $0474; loads ; X from $0475; and 3 more instructions. ; Parameters: Reads $0474 and $0475 from the zero page and RAM; the values it ; acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0466 and $0465 changed. ; Clobbers: ; A, X and Y, the N, Z and C flags, $0465, $0466, $0467, $0470, $0476. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop348: lda $EA4A,x ; CPU:$E965 PRG:6965 BD 4A EA sta $0466 ; CPU:$E968 PRG:6968 8D 66 04 lda $EA68,x ; CPU:$E96B PRG:696B BD 68 EA sta $0465 ; CPU:$E96E PRG:696E 8D 65 04 lda $0474 ; CPU:$E971 PRG:6971 AD 74 04 ldx $0475 ; CPU:$E974 PRG:6974 AE 75 04 cmp #$30 ; CPU:$E977 PRG:6977 C9 30 bcc NmiHandler_Loop349 ; CPU:$E979 PRG:6979 90 01 inx ; CPU:$E97B PRG:697B E8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop349 ; Global: The routine writes $0476, reads $0457, $0456 and $0494. ; Local: Executes 17 instructions: loads A from $EA86,x; stores A to $0476; ; loads X from $0457; loads Y from $0456; loads A from $0494; ; compares A with $1E; and 11 more instructions. ; Parameters: Reads $0457, $0456 and $0494 from the zero page and RAM; the ; values it acts on are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. Leaves $0476 changed. ; Clobbers: ; A, X and Y, the N, Z and C flags, $0467, $0470, $0476. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop349: lda $EA86,x ; CPU:$E97C PRG:697C BD 86 EA sta $0476 ; CPU:$E97F PRG:697F 8D 76 04 ldx $0457 ; CPU:$E982 PRG:6982 AE 57 04 ldy $0456 ; CPU:$E985 PRG:6985 AC 56 04 lda $0494 ; CPU:$E988 PRG:6988 AD 94 04 cmp #$1E ; CPU:$E98B PRG:698B C9 1E bcs NmiHandler_Loop350 ; CPU:$E98D PRG:698D B0 0E inx ; CPU:$E98F PRG:698F E8 iny ; CPU:$E990 PRG:6990 C8 cmp #$14 ; CPU:$E991 PRG:6991 C9 14 bcs NmiHandler_Loop350 ; CPU:$E993 PRG:6993 B0 08 inx ; CPU:$E995 PRG:6995 E8 iny ; CPU:$E996 PRG:6996 C8 cmp #$0A ; CPU:$E997 PRG:6997 C9 0A bcs NmiHandler_Loop350 ; CPU:$E999 PRG:6999 B0 02 inx ; CPU:$E99B PRG:699B E8 iny ; CPU:$E99C PRG:699C C8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop350 ; Global: Switches the APU and the expansion port back to their power-on state. ; Local: Executes 5 instructions: loads A from $EAAE,x; stores A to $0470; ; loads A from $EACE,y; stores A to $0467; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. Leaves $0470 and $0467 changed. ; Clobbers: ; A, the N and Z flags, $0467, $0470. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop350: lda $EAAE,x ; CPU:$E99D PRG:699D BD AE EA sta $0470 ; CPU:$E9A0 PRG:69A0 8D 70 04 lda $EACE,y ; CPU:$E9A3 PRG:69A3 B9 CE EA sta $0467 ; CPU:$E9A6 PRG:69A6 8D 67 04 rts ; CPU:$E9A9 PRG:69A9 60 ; ---- data $E9AA-$EAD9 (304 bytes) ---- ; referenced by `lda $E9AA,x` at $E922 (operand $E9AA falls inside this region) ; referenced by `lda $EA4A,x` at $E965 (operand $EA4A falls inside this region) ; referenced by `lda $EA68,x` at $E96B (operand $EA68 falls inside this region) ; referenced by `lda $EA86,x` at $E97C (operand $EA86 falls inside this region) ; referenced by `lda $EAAE,x` at $E99D (operand $EAAE falls inside this region) ; referenced by `lda $EACE,y` at $E9A3 (operand $EACE falls inside this region) SpriteAttributeTable: .byte $00, $00, $00, $00, $06, $00, $44, $F0, $10, $01, $11, $00, $07, $00, $44, $F0 ; CPU:$E9AA PRG:69AA 00 00 00 00 06 00 44 F0 10 01 11 00 .byte $20, $11, $21, $11, $07, $14, $53, $70, $10, $11, $32, $11, $08, $14, $53, $70 ; CPU:$E9BA PRG:69BA 20 11 21 11 07 14 53 70 10 11 32 11 .byte $00, $11, $42, $12, $08, $14, $54, $70, $21, $12, $52, $22, $19, $21, $63, $70 ; CPU:$E9CA PRG:69CA 00 11 42 12 08 14 54 70 21 12 52 22 .byte $11, $22, $63, $22, $19, $21, $62, $70, $00, $00, $11, $01, $17, $21, $63, $F0 ; CPU:$E9DA PRG:69DA 11 22 63 22 19 21 62 70 00 00 11 01 .byte $21, $23, $64, $23, $17, $30, $72, $30, $11, $33, $76, $23, $18, $30, $72, $30 ; CPU:$E9EA PRG:69EA 21 23 64 23 17 30 72 30 11 33 76 23 .byte $01, $33, $76, $23, $18, $30, $72, $30, $21, $34, $87, $24, $29, $14, $82, $30 ; CPU:$E9FA PRG:69FA 01 33 76 23 18 30 72 30 21 34 87 24 .byte $11, $44, $87, $24, $29, $14, $82, $30, $01, $02, $22, $11, $27, $14, $83, $70 ; CPU:$EA0A PRG:6A0A 11 44 87 24 29 14 82 30 01 02 22 11 .byte $21, $34, $88, $25, $2A, $21, $81, $30, $11, $44, $88, $25, $2A, $21, $81, $30 ; CPU:$EA1A PRG:6A1A 21 34 88 25 2A 21 81 30 11 44 88 25 .byte $01, $44, $88, $25, $2C, $21, $81, $30, $21, $34, $98, $26, $2C, $30, $80, $10 ; CPU:$EA2A PRG:6A2A 01 44 88 25 2C 21 81 30 21 34 98 26 .byte $11, $44, $99, $26, $2C, $30, $80, $10, $01, $44, $99, $26, $2C, $30, $80, $10 ; CPU:$EA3A PRG:6A3A 11 44 99 26 2C 30 80 10 01 44 99 26 .byte $60, $50, $40, $50, $40, $30, $50, $30, $30, $40, $30, $20, $40, $20, $20, $30 ; CPU:$EA4A PRG:6A4A 60 50 40 50 40 30 50 30 30 40 30 20 .byte $30, $20, $30, $20, $10, $20, $20, $10, $20, $10, $10, $10, $10, $10, $90, $70 ; CPU:$EA5A PRG:6A5A 30 20 30 20 10 20 20 10 20 10 10 10 .byte $50, $80, $60, $40, $70, $50, $40, $60, $40, $30, $50, $30, $30, $40, $30, $30 ; CPU:$EA6A PRG:6A6A 50 80 60 40 70 50 40 60 40 30 50 30 .byte $40, $20, $20, $30, $30, $20, $30, $20, $20, $20, $20, $20, $02, $02, $02, $03 ; CPU:$EA7A PRG:6A7A 40 20 20 30 30 20 30 20 20 20 20 20 .byte $02, $03, $02, $03, $03, $03, $03, $03, $03, $04, $02, $03, $03, $04, $04, $04 ; CPU:$EA8A PRG:6A8A 02 03 02 03 03 03 03 03 03 04 02 03 .byte $04, $05, $04, $05, $04, $05, $02, $03, $04, $06, $05, $06, $05, $06, $05, $07 ; CPU:$EA9A PRG:6A9A 04 05 04 05 04 05 02 03 04 06 05 06 .byte $05, $07, $05, $07, $01, $01, $02, $02, $01, $02, $02, $02, $01, $02, $02, $03 ; CPU:$EAAA PRG:6AAA 05 07 05 07 01 01 02 02 01 02 02 02 .byte $02, $02, $02, $03, $02, $02, $03, $03, $02, $02, $03, $04, $02, $03, $03, $04 ; CPU:$EABA PRG:6ABA 02 02 02 03 02 02 03 03 02 02 03 04 .byte $03, $03, $03, $04, $07, $07, $06, $04, $06, $06, $05, $04, $05, $05, $04, $03 ; CPU:$EACA PRG:6ACA 03 03 03 04 07 07 06 04 06 06 05 04 ; ----------------------------------------------------------------------------- ; Routine: ResetApuAndExpansionPort ; Global: Clears the sound effect state in the work area at $05B0. ; Local: Executes 4 instructions: loads A with $0F; stores A to the APUSTATUS ; register; loads A with $C0; stores A to the JOY2 register. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. Leaves the APUSTATUS and JOY2 registers set. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, $0580, APUSTATUS, JOY2. ; ; ----------------------------------------------------------------------------- ResetApuAndExpansionPort: lda #$0F ; CPU:$EADA PRG:6ADA A9 0F sta APUSTATUS ; CPU:$EADC PRG:6ADC 8D 15 40 lda #$C0 ; CPU:$EADF PRG:6ADF A9 C0 sta JOY2 ; CPU:$EAE1 PRG:6AE1 8D 17 40 ; ----------------------------------------------------------------------------- ; Routine: ClearSoundEffectState ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 6 instructions: loads A with $B0; stores A to ; StarFieldPtrLo; loads A with $05; stores A to StarFieldPtrHi; loads ; X with $00; loads Y with $00. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, $0580. ; ; ----------------------------------------------------------------------------- ClearSoundEffectState: lda #$B0 ; CPU:$EAE4 PRG:6AE4 A9 B0 sta StarFieldPtrLo ; CPU:$EAE6 PRG:6AE6 85 00 lda #$05 ; CPU:$EAE8 PRG:6AE8 A9 05 sta StarFieldPtrHi ; CPU:$EAEA PRG:6AEA 85 01 ldx #$00 ; CPU:$EAEC PRG:6AEC A2 00 ldy #$00 ; CPU:$EAEE PRG:6AEE A0 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero60 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 9 instructions: loads A with $00; stores A to ; ((StarFieldPtrLo),y); stores A to $0580,x; clears the carry flag; ; loads A from StarFieldPtrLo; adds $08 to A; and 3 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero60: lda #$00 ; CPU:$EAF0 PRG:6AF0 A9 00 sta (StarFieldPtrLo),y ; CPU:$EAF2 PRG:6AF2 91 00 sta $0580,x ; CPU:$EAF4 PRG:6AF4 9D 80 05 clc ; CPU:$EAF7 PRG:6AF7 18 lda StarFieldPtrLo ; CPU:$EAF8 PRG:6AF8 A5 00 adc #$08 ; CPU:$EAFA PRG:6AFA 69 08 sta StarFieldPtrLo ; CPU:$EAFC PRG:6AFC 85 00 bcc NmiHandler_Loop351 ; CPU:$EAFE PRG:6AFE 90 02 inc StarFieldPtrHi ; CPU:$EB00 PRG:6B00 E6 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop351 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 13 instructions: loads A with $00; stores A to ; ((StarFieldPtrLo),y); stores A to $0580,x; clears the carry flag; ; loads A from StarFieldPtrLo; adds $08 to A; and 7 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop351: inx ; CPU:$EB02 PRG:6B02 E8 cpx #$27 ; CPU:$EB03 PRG:6B03 E0 27 bne NmiHandler_OnNonzero60 ; CPU:$EB05 PRG:6B05 D0 E9 rts ; CPU:$EB07 PRG:6B07 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_EB08 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads X with $27; loads A from Zp62; ; branches on equal to NmiHandler_Loop352; loads A from Zp5B; ; branches on equal to NmiHandler_Loop353. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- Sub_EB08: ldx #$27 ; CPU:$EB08 PRG:6B08 A2 27 lda Zp62 ; CPU:$EB0A PRG:6B0A A5 62 beq NmiHandler_Loop352 ; CPU:$EB0C PRG:6B0C F0 04 lda Zp5B ; CPU:$EB0E PRG:6B0E A5 5B beq NmiHandler_Loop353 ; CPU:$EB10 PRG:6B10 F0 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop352 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 1 instruction: loads X with $01. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop352: ldx #$01 ; CPU:$EB12 PRG:6B12 A2 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop353 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: stores X to TilePtrLo; loads A with $00; ; stores A to ZpB0; stores A to ZpB1; stores A to ZpB2; stores A to ; ZpB3; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop353: stx TilePtrLo ; CPU:$EB14 PRG:6B14 86 08 lda #$00 ; CPU:$EB16 PRG:6B16 A9 00 sta ZpB0 ; CPU:$EB18 PRG:6B18 85 B0 sta ZpB1 ; CPU:$EB1A PRG:6B1A 85 B1 sta ZpB2 ; CPU:$EB1C PRG:6B1C 85 B2 sta ZpB3 ; CPU:$EB1E PRG:6B1E 85 B3 stx PpuAddrLow ; CPU:$EB20 PRG:6B20 86 04 lda #$B0 ; CPU:$EB22 PRG:6B22 A9 B0 sta StarFieldPtrLo ; CPU:$EB24 PRG:6B24 85 00 lda #$05 ; CPU:$EB26 PRG:6B26 A9 05 sta StarFieldPtrHi ; CPU:$EB28 PRG:6B28 85 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero61 ; Global: The routine calls NmiHandler_Loop355. ; Local: Executes 11 instructions: loads Y with $00; loads A from ; ((StarFieldPtrLo),y); branches on equal to NmiHandler_Loop355; ; compares A with $05; branches on carry clear to NmiHandler_Loop354; ; sets the carry flag; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero61: ldy #$00 ; CPU:$EB2A PRG:6B2A A0 00 lda (StarFieldPtrLo),y ; CPU:$EB2C PRG:6B2C B1 00 beq NmiHandler_Loop355 ; CPU:$EB2E PRG:6B2E F0 35 cmp #$05 ; CPU:$EB30 PRG:6B30 C9 05 bcc NmiHandler_Loop354 ; CPU:$EB32 PRG:6B32 90 0B sec ; CPU:$EB34 PRG:6B34 38 sbc #$05 ; CPU:$EB35 PRG:6B35 E9 05 tax ; CPU:$EB37 PRG:6B37 AA lda #$01 ; CPU:$EB38 PRG:6B38 A9 01 sta ZpB0,x ; CPU:$EB3A PRG:6B3A 95 B0 jmp NmiHandler_Loop355 ; CPU:$EB3C PRG:6B3C 4C 65 EB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop354 ; Global: The routine calls NmiHandler_Loop355. ; Local: Executes 29 instructions: loads Y with $00; loads A from ; ((StarFieldPtrLo),y); branches on equal to NmiHandler_Loop355; ; compares A with $05; branches on carry clear to NmiHandler_Loop354; ; sets the carry flag; and 23 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop354: tax ; CPU:$EB3F PRG:6B3F AA dex ; CPU:$EB40 PRG:6B40 CA lda ZpB0,x ; CPU:$EB41 PRG:6B41 B5 B0 bne NmiHandler_Loop355 ; CPU:$EB43 PRG:6B43 D0 20 lda #$01 ; CPU:$EB45 PRG:6B45 A9 01 sta ZpB0,x ; CPU:$EB47 PRG:6B47 95 B0 txa ; CPU:$EB49 PRG:6B49 8A tay ; CPU:$EB4A PRG:6B4A A8 clc ; CPU:$EB4B PRG:6B4B 18 adc #$05 ; CPU:$EB4C PRG:6B4C 69 05 ldy #$00 ; CPU:$EB4E PRG:6B4E A0 00 sta (StarFieldPtrLo),y ; CPU:$EB50 PRG:6B50 91 00 txa ; CPU:$EB52 PRG:6B52 8A asl a ; CPU:$EB53 PRG:6B53 0A asl a ; CPU:$EB54 PRG:6B54 0A tax ; CPU:$EB55 PRG:6B55 AA lda #$04 ; CPU:$EB56 PRG:6B56 A9 04 sta StarFieldCount ; CPU:$EB58 PRG:6B58 85 06 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero62 ; Global: The routine calls NmiHandler_Loop355. ; Local: Executes 35 instructions: loads Y with $00; loads A from ; ((StarFieldPtrLo),y); branches on equal to NmiHandler_Loop355; ; compares A with $05; branches on carry clear to NmiHandler_Loop354; ; sets the carry flag; and 29 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero62: iny ; CPU:$EB5A PRG:6B5A C8 lda (StarFieldPtrLo),y ; CPU:$EB5B PRG:6B5B B1 00 sta APUPULSE1CTRL,x ; CPU:$EB5D PRG:6B5D 9D 00 40 inx ; CPU:$EB60 PRG:6B60 E8 dec StarFieldCount ; CPU:$EB61 PRG:6B61 C6 06 bne NmiHandler_OnNonzero62 ; CPU:$EB63 PRG:6B63 D0 F5 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop355 ; Global: The routine calls NmiHandler_Loop355. ; Local: Executes 41 instructions: loads Y with $00; loads A from ; ((StarFieldPtrLo),y); branches on equal to NmiHandler_Loop355; ; compares A with $05; branches on carry clear to NmiHandler_Loop354; ; sets the carry flag; and 35 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop355: clc ; CPU:$EB65 PRG:6B65 18 lda StarFieldPtrLo ; CPU:$EB66 PRG:6B66 A5 00 adc #$08 ; CPU:$EB68 PRG:6B68 69 08 sta StarFieldPtrLo ; CPU:$EB6A PRG:6B6A 85 00 bcc NmiHandler_Loop356 ; CPU:$EB6C PRG:6B6C 90 02 inc StarFieldPtrHi ; CPU:$EB6E PRG:6B6E E6 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop356 ; Global: The routine calls NmiHandler_Loop355. ; Local: Executes 44 instructions: loads Y with $00; loads A from ; ((StarFieldPtrLo),y); branches on equal to NmiHandler_Loop355; ; compares A with $05; branches on carry clear to NmiHandler_Loop354; ; sets the carry flag; and 38 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop356: dec PpuAddrLow ; CPU:$EB70 PRG:6B70 C6 04 bne NmiHandler_OnNonzero61 ; CPU:$EB72 PRG:6B72 D0 B6 ldx #$00 ; CPU:$EB74 PRG:6B74 A2 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear22 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: stores X to Zp1E; loads A from ZpB0,x; ; branches on not equal to NmiHandler_Loop357; copies X into A; ; shifts a left; shifts a left; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear22: stx Zp1E ; CPU:$EB76 PRG:6B76 86 1E lda ZpB0,x ; CPU:$EB78 PRG:6B78 B5 B0 bne NmiHandler_Loop357 ; CPU:$EB7A PRG:6B7A D0 0C txa ; CPU:$EB7C PRG:6B7C 8A asl a ; CPU:$EB7D PRG:6B7D 0A asl a ; CPU:$EB7E PRG:6B7E 0A tax ; CPU:$EB7F PRG:6B7F AA asl a ; CPU:$EB80 PRG:6B80 0A and #$10 ; CPU:$EB81 PRG:6B81 29 10 eor #$10 ; CPU:$EB83 PRG:6B83 49 10 sta APUPULSE1CTRL,x ; CPU:$EB85 PRG:6B85 9D 00 40 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop357 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 21 instructions: stores X to Zp1E; loads A from ZpB0,x; ; branches on not equal to NmiHandler_Loop357; copies X into A; ; shifts a left; shifts a left; and 15 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop357: ldx Zp1E ; CPU:$EB88 PRG:6B88 A6 1E inx ; CPU:$EB8A PRG:6B8A E8 cpx #$04 ; CPU:$EB8B PRG:6B8B E0 04 bcc NmiHandler_OnCarryClear22 ; CPU:$EB8D PRG:6B8D 90 E7 ldy #$00 ; CPU:$EB8F PRG:6B8F A0 00 sty PpuAddrLow ; CPU:$EB91 PRG:6B91 84 04 lda #$B0 ; CPU:$EB93 PRG:6B93 A9 B0 sta StarFieldPtrLo ; CPU:$EB95 PRG:6B95 85 00 lda #$05 ; CPU:$EB97 PRG:6B97 A9 05 sta StarFieldPtrHi ; CPU:$EB99 PRG:6B99 85 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnCarryClear23 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads X from PpuAddrLow; loads Y from ; $0580,x; branches on equal to NmiHandler_Loop359; decrements Y; ; branches on not equal to NmiHandler_Loop358; loads A with $02; and ; 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnCarryClear23: ldx PpuAddrLow ; CPU:$EB9B PRG:6B9B A6 04 ldy $0580,x ; CPU:$EB9D PRG:6B9D BC 80 05 beq NmiHandler_Loop359 ; CPU:$EBA0 PRG:6BA0 F0 15 dey ; CPU:$EBA2 PRG:6BA2 88 bne NmiHandler_Loop358 ; CPU:$EBA3 PRG:6BA3 D0 07 lda #$02 ; CPU:$EBA5 PRG:6BA5 A9 02 sta $0580,x ; CPU:$EBA7 PRG:6BA7 9D 80 05 bpl NmiHandler_Loop361 ; CPU:$EBAA PRG:6BAA 10 1F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop358 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 14 instructions: loads X from PpuAddrLow; loads Y from ; $0580,x; branches on equal to NmiHandler_Loop359; decrements Y; ; branches on not equal to NmiHandler_Loop358; loads A with $02; and ; 8 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop358: ldy #$07 ; CPU:$EBAC PRG:6BAC A0 07 lda (StarFieldPtrLo),y ; CPU:$EBAE PRG:6BAE B1 00 sec ; CPU:$EBB0 PRG:6BB0 38 sbc #$01 ; CPU:$EBB1 PRG:6BB1 E9 01 sta (StarFieldPtrLo),y ; CPU:$EBB3 PRG:6BB3 91 00 beq NmiHandler_Loop362 ; CPU:$EBB5 PRG:6BB5 F0 4A ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop359 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 20 instructions: loads X from PpuAddrLow; loads Y from ; $0580,x; branches on equal to NmiHandler_Loop359; decrements Y; ; branches on not equal to NmiHandler_Loop358; loads A with $02; and ; 14 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop359: clc ; CPU:$EBB7 PRG:6BB7 18 lda StarFieldPtrLo ; CPU:$EBB8 PRG:6BB8 A5 00 adc #$08 ; CPU:$EBBA PRG:6BBA 69 08 sta StarFieldPtrLo ; CPU:$EBBC PRG:6BBC 85 00 bcc NmiHandler_Loop360 ; CPU:$EBBE PRG:6BBE 90 02 inc StarFieldPtrHi ; CPU:$EBC0 PRG:6BC0 E6 01 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop360 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 25 instructions: loads X from PpuAddrLow; loads Y from ; $0580,x; branches on equal to NmiHandler_Loop359; decrements Y; ; branches on not equal to NmiHandler_Loop358; loads A with $02; and ; 19 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop360: inc PpuAddrLow ; CPU:$EBC2 PRG:6BC2 E6 04 lda PpuAddrLow ; CPU:$EBC4 PRG:6BC4 A5 04 cmp TilePtrLo ; CPU:$EBC6 PRG:6BC6 C5 08 bcc NmiHandler_OnCarryClear23 ; CPU:$EBC8 PRG:6BC8 90 D1 rts ; CPU:$EBCA PRG:6BCA 60 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop361 ; Global: The routine calls GetPathTablePointer and Sub_ED60. ; Local: Executes 24 instructions: loads A with $00; loads Y with $05; stores ; A to ((StarFieldPtrLo),y); calls GetPathTablePointer; calls Sub_ED60; loads Y ; with $00; and 18 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop361: lda #$00 ; CPU:$EBCB PRG:6BCB A9 00 ldy #$05 ; CPU:$EBCD PRG:6BCD A0 05 sta (StarFieldPtrLo),y ; CPU:$EBCF PRG:6BCF 91 00 jsr GetPathTablePointer ; CPU:$EBD1 PRG:6BD1 20 51 ED jsr Sub_ED60 ; CPU:$EBD4 PRG:6BD4 20 60 ED ldy #$00 ; CPU:$EBD7 PRG:6BD7 A0 00 sta (StarFieldPtrLo),y ; CPU:$EBD9 PRG:6BD9 91 00 jsr Sub_ED60 ; CPU:$EBDB PRG:6BDB 20 60 ED ldy #$01 ; CPU:$EBDE PRG:6BDE A0 01 sta (StarFieldPtrLo),y ; CPU:$EBE0 PRG:6BE0 91 00 jsr Sub_ED60 ; CPU:$EBE2 PRG:6BE2 20 60 ED ldy #$02 ; CPU:$EBE5 PRG:6BE5 A0 02 sta (StarFieldPtrLo),y ; CPU:$EBE7 PRG:6BE7 91 00 jsr Sub_ED60 ; CPU:$EBE9 PRG:6BE9 20 60 ED ldy #$04 ; CPU:$EBEC PRG:6BEC A0 04 sta (StarFieldPtrLo),y ; CPU:$EBEE PRG:6BEE 91 00 ldy #$00 ; CPU:$EBF0 PRG:6BF0 A0 00 lda (StarFieldPtrLo),y ; CPU:$EBF2 PRG:6BF2 B1 00 cmp #$04 ; CPU:$EBF4 PRG:6BF4 C9 04 bne NmiHandler_Loop363 ; CPU:$EBF6 PRG:6BF6 D0 0C jsr Sub_ED60 ; CPU:$EBF8 PRG:6BF8 20 60 ED ldy #$03 ; CPU:$EBFB PRG:6BFB A0 03 sta (StarFieldPtrLo),y ; CPU:$EBFD PRG:6BFD 91 00 bpl NmiHandler_Loop363 ; CPU:$EBFF PRG:6BFF 10 03 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop362 ; Global: The routine calls GetPathTablePointer. ; Local: Executes 1 instruction: calls GetPathTablePointer. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop362: jsr GetPathTablePointer ; CPU:$EC01 PRG:6C01 20 51 ED ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop363 ; Global: The routine calls Sub_ED60. ; Local: Executes 19 instructions: calls Sub_ED60; compares A with $E8; ; branches on carry set to NmiHandler_Loop367; compares A with $60; ; branches on equal to NmiHandler_Loop365; branches on carry set to ; NmiHandler_Loop366; and 13 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop363: jsr Sub_ED60 ; CPU:$EC04 PRG:6C04 20 60 ED cmp #$E8 ; CPU:$EC07 PRG:6C07 C9 E8 bcs NmiHandler_Loop367 ; CPU:$EC09 PRG:6C09 B0 51 cmp #$60 ; CPU:$EC0B PRG:6C0B C9 60 beq NmiHandler_Loop365 ; CPU:$EC0D PRG:6C0D F0 3B bcs NmiHandler_Loop366 ; CPU:$EC0F PRG:6C0F B0 43 pha ; CPU:$EC11 PRG:6C11 48 and #$F8 ; CPU:$EC12 PRG:6C12 29 F8 lsr a ; CPU:$EC14 PRG:6C14 4A lsr a ; CPU:$EC15 PRG:6C15 4A tax ; CPU:$EC16 PRG:6C16 AA lda $ED8E,x ; CPU:$EC17 PRG:6C17 BD 8E ED sta StarFieldCount ; CPU:$EC1A PRG:6C1A 85 06 lda $ED8F,x ; CPU:$EC1C PRG:6C1C BD 8F ED sta Zp07 ; CPU:$EC1F PRG:6C1F 85 07 pla ; CPU:$EC21 PRG:6C21 68 and #$07 ; CPU:$EC22 PRG:6C22 29 07 beq NmiHandler_Loop364 ; CPU:$EC24 PRG:6C24 F0 08 tax ; CPU:$EC26 PRG:6C26 AA ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero63 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 4 instructions: shifts StarFieldCount right; rotates Zp07 ; right; decrements X; branches on not equal to ; NmiHandler_OnNonzero63. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero63: lsr StarFieldCount ; CPU:$EC27 PRG:6C27 46 06 ror Zp07 ; CPU:$EC29 PRG:6C29 66 07 dex ; CPU:$EC2B PRG:6C2B CA bne NmiHandler_OnNonzero63 ; CPU:$EC2C PRG:6C2C D0 F9 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop364 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 15 instructions: loads Y with $04; loads A from ; ((StarFieldPtrLo),y); ANDs A with $F8; ORs A with StarFieldCount; ; stores A to ((StarFieldPtrLo),y); loads A from Zp07; and 9 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop364: ldy #$04 ; CPU:$EC2E PRG:6C2E A0 04 lda (StarFieldPtrLo),y ; CPU:$EC30 PRG:6C30 B1 00 and #$F8 ; CPU:$EC32 PRG:6C32 29 F8 ora StarFieldCount ; CPU:$EC34 PRG:6C34 05 06 sta (StarFieldPtrLo),y ; CPU:$EC36 PRG:6C36 91 00 lda Zp07 ; CPU:$EC38 PRG:6C38 A5 07 dey ; CPU:$EC3A PRG:6C3A 88 sta (StarFieldPtrLo),y ; CPU:$EC3B PRG:6C3B 91 00 ldy #$00 ; CPU:$EC3D PRG:6C3D A0 00 lda (StarFieldPtrLo),y ; CPU:$EC3F PRG:6C3F B1 00 cmp #$05 ; CPU:$EC41 PRG:6C41 C9 05 bcc NmiHandler_Loop365 ; CPU:$EC43 PRG:6C43 90 05 sec ; CPU:$EC45 PRG:6C45 38 sbc #$04 ; CPU:$EC46 PRG:6C46 E9 04 sta (StarFieldPtrLo),y ; CPU:$EC48 PRG:6C48 91 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop365 ; Global: The routine calls NmiHandler_Loop359. ; Local: Executes 5 instructions: loads Y with $06; loads A from ; ((StarFieldPtrLo),y); increments Y; stores A to ; ((StarFieldPtrLo),y); calls NmiHandler_Loop359. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop365: ldy #$06 ; CPU:$EC4A PRG:6C4A A0 06 lda (StarFieldPtrLo),y ; CPU:$EC4C PRG:6C4C B1 00 iny ; CPU:$EC4E PRG:6C4E C8 sta (StarFieldPtrLo),y ; CPU:$EC4F PRG:6C4F 91 00 jmp NmiHandler_Loop359 ; CPU:$EC51 PRG:6C51 4C B7 EB ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop366 ; Global: The routine calls Sub_ED60 and NmiHandler_Loop359. ; Local: Executes 47 instructions: calls Sub_ED60; compares A with $E8; ; branches on carry set to NmiHandler_Loop367; compares A with $60; ; branches on equal to NmiHandler_Loop365; branches on carry set to ; NmiHandler_Loop366; and 41 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop366: sbc #$60 ; CPU:$EC54 PRG:6C54 E9 60 ldy #$06 ; CPU:$EC56 PRG:6C56 A0 06 sta (StarFieldPtrLo),y ; CPU:$EC58 PRG:6C58 91 00 bpl NmiHandler_Loop363 ; CPU:$EC5A PRG:6C5A 10 A8 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop367 ; Global: The routine calls CallHandlerThroughPointer. ; Local: Executes 3 instructions: subtracts $E8 from A; calls CallHandlerThroughPointer; stores ; A to ZpEC. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F, ZpEC. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop367: sbc #$E8 ; CPU:$EC5C PRG:6C5C E9 E8 jsr CallHandlerThroughPointer ; CPU:$EC5E PRG:6C5E 20 01 C3 sta ZpEC ; CPU:$EC61 PRG:6C61 85 EC .byte $93, $EC ; CPU:$EC63 PRG:6C63 93 EC -- sha (ZpEC),y (undocumented; ca65 cannot encode) ; CPU:$EC63 PRG:6C63 93 EC lda ZpEC ; CPU:$EC65 PRG:6C65 A5 EC .byte $B7, $EC ; CPU:$EC67 PRG:6C67 B7 EC -- lax ZpEC,y (undocumented; ca65 cannot encode) ; CPU:$EC67 PRG:6C67 B7 EC cmp #$EC ; CPU:$EC69 PRG:6C69 C9 EC .byte $D3, $EC ; CPU:$EC6B PRG:6C6B D3 EC -- dcp (ZpEC),y (undocumented; ca65 cannot encode) ; CPU:$EC6B PRG:6C6B D3 EC cmp $E7EC,x ; CPU:$EC6D PRG:6C6D DD EC E7 cpx $ECF3 ; CPU:$EC70 PRG:6C70 EC F3 EC .byte $F7, $EC ; CPU:$EC73 PRG:6C73 F7 EC -- isc ZpEC,y (undocumented; ca65 cannot encode) ; CPU:$EC73 PRG:6C73 F7 EC .byte $FA, $EC, $0B ; CPU:$EC75 PRG:6C75 FA EC 0B -- nop $0BEC,x (undocumented; ca65 cannot encode) ; CPU:$EC75 PRG:6C75 FA EC 0B sbc $ED0F ; CPU:$EC78 PRG:6C78 ED 0F ED ; ---- data $EC7B-$EC84 (10 bytes) ---- EnemyBehaviourPointerTable: .byte $12, $ED, $23, $ED, $27, $ED, $2A, $ED, $47, $ED ; CPU:$EC7B PRG:6C7B 12 ED 23 ED 27 ED 2A ED 47 ED ; ----------------------------------------------------------------------------- ; Routine: SubCEC85 ; Global: The routine calls NmiHandler_Loop359. ; Local: Executes 6 instructions: loads X from PpuAddrLow; loads A with $00; ; stores A to $0580,x; loads Y with $00; stores A to ; ((StarFieldPtrLo),y); calls NmiHandler_Loop359. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCEC85: ldx PpuAddrLow ; CPU:$EC85 PRG:6C85 A6 04 lda #$00 ; CPU:$EC87 PRG:6C87 A9 00 sta $0580,x ; CPU:$EC89 PRG:6C89 9D 80 05 ldy #$00 ; CPU:$EC8C PRG:6C8C A0 00 sta (StarFieldPtrLo),y ; CPU:$EC8E PRG:6C8E 91 00 jmp NmiHandler_Loop359 ; CPU:$EC90 PRG:6C90 4C B7 EB ; ----------------------------------------------------------------------------- ; Routine: SubCEC93 ; Global: The routine calls Sub_ED60 and NmiHandler_Loop363. ; Local: Executes 8 instructions: calls Sub_ED60; stores A to StarFieldCount; ; loads Y with $01; loads A from ((StarFieldPtrLo),y); ANDs A with ; $3F; ORs A with StarFieldCount; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCEC93: jsr Sub_ED60 ; CPU:$EC93 PRG:6C93 20 60 ED sta StarFieldCount ; CPU:$EC96 PRG:6C96 85 06 ldy #$01 ; CPU:$EC98 PRG:6C98 A0 01 lda (StarFieldPtrLo),y ; CPU:$EC9A PRG:6C9A B1 00 and #$3F ; CPU:$EC9C PRG:6C9C 29 3F ora StarFieldCount ; CPU:$EC9E PRG:6C9E 05 06 sta (StarFieldPtrLo),y ; CPU:$ECA0 PRG:6CA0 91 00 jmp NmiHandler_Loop363 ; CPU:$ECA2 PRG:6CA2 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: SubCECA5 ; Global: The routine calls Sub_ED60 and NmiHandler_Loop363. ; Local: Executes 8 instructions: calls Sub_ED60; stores A to StarFieldCount; ; loads Y with $01; loads A from ((StarFieldPtrLo),y); ANDs A with ; $C0; ORs A with StarFieldCount; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCECA5: jsr Sub_ED60 ; CPU:$ECA5 PRG:6CA5 20 60 ED sta StarFieldCount ; CPU:$ECA8 PRG:6CA8 85 06 ldy #$01 ; CPU:$ECAA PRG:6CAA A0 01 lda (StarFieldPtrLo),y ; CPU:$ECAC PRG:6CAC B1 00 and #$C0 ; CPU:$ECAE PRG:6CAE 29 C0 ora StarFieldCount ; CPU:$ECB0 PRG:6CB0 05 06 sta (StarFieldPtrLo),y ; CPU:$ECB2 PRG:6CB2 91 00 jmp NmiHandler_Loop363 ; CPU:$ECB4 PRG:6CB4 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: SubCECB7 ; Global: The routine calls Sub_ED60 and NmiHandler_Loop363. ; Local: Executes 8 instructions: calls Sub_ED60; stores A to StarFieldCount; ; loads Y with $01; loads A from ((StarFieldPtrLo),y); ANDs A with ; $F0; ORs A with StarFieldCount; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCECB7: jsr Sub_ED60 ; CPU:$ECB7 PRG:6CB7 20 60 ED sta StarFieldCount ; CPU:$ECBA PRG:6CBA 85 06 ldy #$01 ; CPU:$ECBC PRG:6CBC A0 01 lda (StarFieldPtrLo),y ; CPU:$ECBE PRG:6CBE B1 00 and #$F0 ; CPU:$ECC0 PRG:6CC0 29 F0 ora StarFieldCount ; CPU:$ECC2 PRG:6CC2 05 06 sta (StarFieldPtrLo),y ; CPU:$ECC4 PRG:6CC4 91 00 jmp NmiHandler_Loop363 ; CPU:$ECC6 PRG:6CC6 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: SubCECC9 ; Global: The routine calls Sub_ED60 and NmiHandler_Loop363. ; Local: Executes 4 instructions: calls Sub_ED60; loads Y with $02; stores A ; to ((StarFieldPtrLo),y); calls NmiHandler_Loop363. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCECC9: jsr Sub_ED60 ; CPU:$ECC9 PRG:6CC9 20 60 ED ldy #$02 ; CPU:$ECCC PRG:6CCC A0 02 sta (StarFieldPtrLo),y ; CPU:$ECCE PRG:6CCE 91 00 jmp NmiHandler_Loop363 ; CPU:$ECD0 PRG:6CD0 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: SubCECD3 ; Global: The routine calls Sub_ED60 and NmiHandler_Loop363. ; Local: Executes 4 instructions: calls Sub_ED60; loads Y with $04; stores A ; to ((StarFieldPtrLo),y); calls NmiHandler_Loop363. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCECD3: jsr Sub_ED60 ; CPU:$ECD3 PRG:6CD3 20 60 ED ldy #$04 ; CPU:$ECD6 PRG:6CD6 A0 04 sta (StarFieldPtrLo),y ; CPU:$ECD8 PRG:6CD8 91 00 jmp NmiHandler_Loop363 ; CPU:$ECDA PRG:6CDA 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: SubCECDD ; Global: The routine calls Sub_ED60 and NmiHandler_Loop363. ; Local: Executes 4 instructions: calls Sub_ED60; loads Y with $01; stores A ; to ((StarFieldPtrLo),y); calls NmiHandler_Loop363. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCECDD: jsr Sub_ED60 ; CPU:$ECDD PRG:6CDD 20 60 ED ldy #$01 ; CPU:$ECE0 PRG:6CE0 A0 01 sta (StarFieldPtrLo),y ; CPU:$ECE2 PRG:6CE2 91 00 jmp NmiHandler_Loop363 ; CPU:$ECE4 PRG:6CE4 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: SubCECE7 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads A with $00; loads X with $08. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCECE7: lda #$00 ; CPU:$ECE7 PRG:6CE7 A9 00 ldx #$08 ; CPU:$ECE9 PRG:6CE9 A2 08 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonnegative29 ; Global: The routine calls NmiHandler_Loop363. ; Local: Executes 4 instructions: stores A to ZpB4,x; decrements X; branches ; on non-negative to NmiHandler_OnNonnegative29; calls ; NmiHandler_Loop363. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonnegative29: sta ZpB4,x ; CPU:$ECEB PRG:6CEB 95 B4 dex ; CPU:$ECED PRG:6CED CA bpl NmiHandler_OnNonnegative29 ; CPU:$ECEE PRG:6CEE 10 FB jmp NmiHandler_Loop363 ; CPU:$ECF0 PRG:6CF0 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: SubCECF3 ; Global: The routine reads $02A2. ; Local: Executes 4 instructions: loads X with $00; branches on equal to ; NmiHandler_Loop368; loads X with $01; tests the bits of $02A2. ; Parameters: Reads $02A2 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCECF3: ldx #$00 ; CPU:$ECF3 PRG:6CF3 A2 00 beq NmiHandler_Loop368 ; CPU:$ECF5 PRG:6CF5 F0 05 ldx #$01 ; CPU:$ECF7 PRG:6CF7 A2 01 bit $02A2 ; CPU:$ECF9 PRG:6CF9 2C A2 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop368 ; Global: The routine calls Sub_ED60. ; Local: Executes 7 instructions: calls Sub_ED60; increments ZpB4,x; compares ; A with ZpB4,x; branches on not equal to NmiHandler_Loop372; loads A ; with $00; stores A to ZpB4,x; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop368: jsr Sub_ED60 ; CPU:$ECFC PRG:6CFC 20 60 ED inc ZpB4,x ; CPU:$ECFF PRG:6CFF F6 B4 cmp ZpB4,x ; CPU:$ED01 PRG:6D01 D5 B4 bne NmiHandler_Loop372 ; CPU:$ED03 PRG:6D03 D0 42 lda #$00 ; CPU:$ED05 PRG:6D05 A9 00 sta ZpB4,x ; CPU:$ED07 PRG:6D07 95 B4 beq NmiHandler_Loop371 ; CPU:$ED09 PRG:6D09 F0 30 ; ----------------------------------------------------------------------------- ; Routine: SubCED0B ; Global: The routine reads $02A2. ; Local: Executes 4 instructions: loads X with $00; branches on equal to ; NmiHandler_Loop369; loads X with $01; tests the bits of $02A2. ; Parameters: Reads $02A2 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- SubCED0B: ldx #$00 ; CPU:$ED0B PRG:6D0B A2 00 beq NmiHandler_Loop369 ; CPU:$ED0D PRG:6D0D F0 05 ldx #$01 ; CPU:$ED0F PRG:6D0F A2 01 bit $02A2 ; CPU:$ED11 PRG:6D11 2C A2 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop369 ; Global: The routine calls Sub_ED60, reads $02A2. ; Local: Executes 11 instructions: calls Sub_ED60; increments ZpB7,x; compares ; A with ZpB7,x; branches on not equal to NmiHandler_Loop371; loads A ; with $00; stores A to ZpB7,x; and 5 more instructions. ; Parameters: Reads $02A2 from the zero page and RAM; the values it acts on ; are those fields' contents. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop369: jsr Sub_ED60 ; CPU:$ED14 PRG:6D14 20 60 ED inc ZpB7,x ; CPU:$ED17 PRG:6D17 F6 B7 cmp ZpB7,x ; CPU:$ED19 PRG:6D19 D5 B7 bne NmiHandler_Loop371 ; CPU:$ED1B PRG:6D1B D0 1E lda #$00 ; CPU:$ED1D PRG:6D1D A9 00 sta ZpB7,x ; CPU:$ED1F PRG:6D1F 95 B7 beq NmiHandler_Loop372 ; CPU:$ED21 PRG:6D21 F0 24 ldx #$00 ; CPU:$ED23 PRG:6D23 A2 00 beq NmiHandler_Loop370 ; CPU:$ED25 PRG:6D25 F0 05 ldx #$01 ; CPU:$ED27 PRG:6D27 A2 01 bit $02A2 ; CPU:$ED29 PRG:6D29 2C A2 02 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop370 ; Global: The routine calls Sub_ED60. ; Local: Executes 7 instructions: calls Sub_ED60; increments ZpBA,x; compares ; A with ZpBA,x; branches on not equal to NmiHandler_Loop371; loads A ; with $00; stores A to ZpBA,x; and 1 more instruction. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop370: jsr Sub_ED60 ; CPU:$ED2C PRG:6D2C 20 60 ED inc ZpBA,x ; CPU:$ED2F PRG:6D2F F6 BA cmp ZpBA,x ; CPU:$ED31 PRG:6D31 D5 BA bne NmiHandler_Loop371 ; CPU:$ED33 PRG:6D33 D0 06 lda #$00 ; CPU:$ED35 PRG:6D35 A9 00 sta ZpBA,x ; CPU:$ED37 PRG:6D37 95 BA beq NmiHandler_Loop372 ; CPU:$ED39 PRG:6D39 F0 0C ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop371 ; Global: The routine calls NmiHandler_Loop363. ; Local: Executes 6 instructions: loads Y with $05; loads A from ; ((StarFieldPtrLo),y); clears the carry flag; adds $01 to A; stores ; A to ((StarFieldPtrLo),y); calls NmiHandler_Loop363. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop371: ldy #$05 ; CPU:$ED3B PRG:6D3B A0 05 lda (StarFieldPtrLo),y ; CPU:$ED3D PRG:6D3D B1 00 clc ; CPU:$ED3F PRG:6D3F 18 adc #$01 ; CPU:$ED40 PRG:6D40 69 01 sta (StarFieldPtrLo),y ; CPU:$ED42 PRG:6D42 91 00 jmp NmiHandler_Loop363 ; CPU:$ED44 PRG:6D44 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop372 ; Global: Reads the 16-bit pointer of the path table the current state selects. ; Local: Executes 4 instructions: calls Sub_ED60; loads Y with $05; stores A ; to ((StarFieldPtrLo),y); calls NmiHandler_Loop363. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, the RAM fields it writes. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop372: jsr Sub_ED60 ; CPU:$ED47 PRG:6D47 20 60 ED ldy #$05 ; CPU:$ED4A PRG:6D4A A0 05 sta (StarFieldPtrLo),y ; CPU:$ED4C PRG:6D4C 91 00 jmp NmiHandler_Loop363 ; CPU:$ED4E PRG:6D4E 4C 04 EC ; ----------------------------------------------------------------------------- ; Routine: GetPathTablePointer ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: loads A from PpuAddrLow; shifts a left; ; copies A into X; loads A from $EDA6,x; stores A to Zp02; loads A ; from $EDA7,x; and 2 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z and C flags, Zp02, Zp03. ; ; ----------------------------------------------------------------------------- GetPathTablePointer: lda PpuAddrLow ; CPU:$ED51 PRG:6D51 A5 04 asl a ; CPU:$ED53 PRG:6D53 0A tax ; CPU:$ED54 PRG:6D54 AA lda $EDA6,x ; CPU:$ED55 PRG:6D55 BD A6 ED sta Zp02 ; CPU:$ED58 PRG:6D58 85 02 lda $EDA7,x ; CPU:$ED5A PRG:6D5A BD A7 ED sta Zp03 ; CPU:$ED5D PRG:6D5D 85 03 rts ; CPU:$ED5F PRG:6D5F 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_ED60 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 11 instructions: loads Y with $05; loads A from ; ((StarFieldPtrLo),y); copies A into Y; loads A from ((Zp02),y); ; pushes A; increments Y; and 5 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N and Z flags. ; ; ----------------------------------------------------------------------------- Sub_ED60: ldy #$05 ; CPU:$ED60 PRG:6D60 A0 05 lda (StarFieldPtrLo),y ; CPU:$ED62 PRG:6D62 B1 00 tay ; CPU:$ED64 PRG:6D64 A8 lda (Zp02),y ; CPU:$ED65 PRG:6D65 B1 02 pha ; CPU:$ED67 PRG:6D67 48 iny ; CPU:$ED68 PRG:6D68 C8 tya ; CPU:$ED69 PRG:6D69 98 ldy #$05 ; CPU:$ED6A PRG:6D6A A0 05 sta (StarFieldPtrLo),y ; CPU:$ED6C PRG:6D6C 91 00 pla ; CPU:$ED6E PRG:6D6E 68 rts ; CPU:$ED6F PRG:6D6F 60 ; ----------------------------------------------------------------------------- ; Routine: Sub_ED70 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 8 instructions: copies A into X; loads Y with $05; stores Y ; to Zp1F; shifts a left; shifts a left; shifts a left; and 2 more ; instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A, X and Y, the N, Z, C and V flags, Zp1E, Zp1F, $0580. ; ; ----------------------------------------------------------------------------- Sub_ED70: tax ; CPU:$ED70 PRG:6D70 AA ldy #$05 ; CPU:$ED71 PRG:6D71 A0 05 sty Zp1F ; CPU:$ED73 PRG:6D73 84 1F asl a ; CPU:$ED75 PRG:6D75 0A asl a ; CPU:$ED76 PRG:6D76 0A asl a ; CPU:$ED77 PRG:6D77 0A bcc NmiHandler_Loop373 ; CPU:$ED78 PRG:6D78 90 02 inc Zp1F ; CPU:$ED7A PRG:6D7A E6 1F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop373 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: clears the carry flag; adds $B0 to A; stores ; A to Zp1E; branches on carry clear to NmiHandler_Loop374; ; increments Zp1F. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and Y, the N, Z, C and V flags, Zp1E, Zp1F, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop373: clc ; CPU:$ED7C PRG:6D7C 18 adc #$B0 ; CPU:$ED7D PRG:6D7D 69 B0 sta Zp1E ; CPU:$ED7F PRG:6D7F 85 1E bcc NmiHandler_Loop374 ; CPU:$ED81 PRG:6D81 90 02 inc Zp1F ; CPU:$ED83 PRG:6D83 E6 1F ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_Loop374 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 5 instructions: loads A with $00; copies A into Y; stores A ; to ((Zp1E),y); stores A to $0580,x; returns with RTS. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and Y, the N and Z flags, $0580. ; ; ----------------------------------------------------------------------------- NmiHandler_Loop374: lda #$00 ; CPU:$ED85 PRG:6D85 A9 00 tay ; CPU:$ED87 PRG:6D87 A8 sta (Zp1E),y ; CPU:$ED88 PRG:6D88 91 1E sta $0580,x ; CPU:$ED8A PRG:6D8A 9D 80 05 rts ; CPU:$ED8D PRG:6D8D 60 ; ---- data $ED8E-$F78F (2562 bytes) ---- ; referenced by `lda $ED8E,x` at $EC17 (operand $ED8E falls inside this region) ; referenced by `lda $ED8F,x` at $EC1C (operand $ED8F falls inside this region) ; referenced by `lda $EDA6,x` at $ED55 (operand $EDA6 falls inside this region) ; referenced by `lda $EDA7,x` at $ED5A (operand $EDA7 falls inside this region) EnemyPathSineTable: .byte $07, $F2, $07, $80, $07, $14, $06, $AE, $06, $43, $05, $F4, $05, $9E, $05, $4E ; CPU:$ED8E PRG:6D8E 07 F2 07 80 07 14 06 AE 06 43 05 F4 EnemyPathHandlerPointerTable: .byte $05, $02, $04, $BA, $04, $76, $04, $36, $FD, $ED, $66, $F0, $73, $F0, $15, $EE ; CPU:$ED9E PRG:6D9E 05 02 04 BA 04 76 04 36 FD ED 66 F0 73 F0 15 EE .byte $5E, $EE, $A0, $EE, $0B, $EE, $9D, $EF, $AC, $EF, $BB, $EF, $CB, $EE, $39, $EF ; CPU:$EDAE PRG:6DAE 5E EE A0 EE 0B EE 9D EF AC EF BB EF .byte $61, $EF, $42, $F1, $68, $F1, $8E, $F1, $D4, $F0, $FA, $F0, $20, $F1, $80, $F0 ; CPU:$EDBE PRG:6DBE 61 EF 42 F1 68 F1 8E F1 D4 F0 FA F0 .byte $A0, $F0, $C0, $F0, $EF, $F1, $20, $F2, $50, $F2, $8C, $EF, $F4, $ED, $CA, $EF ; CPU:$EDCE PRG:6DCE A0 F0 C0 F0 EF F1 20 F2 50 F2 8C EF .byte $53, $F0, $22, $F0, $0C, $F0, $E8, $EF, $0B, $EF, $D9, $EF, $B0, $F1, $C4, $F1 ; CPU:$EDDE PRG:6DDE 53 F0 22 F0 0C F0 E8 EF 0B EF D9 EF .byte $D3, $F1, $E1, $F1, $6A, $F2, $01, $C6, $7F, $28, $62, $24, $04, $14, $E8, $01 ; CPU:$EDEE PRG:6DEE D3 F1 E1 F1 6A F2 01 C6 7F 28 62 24 .byte $02, $7F, $40, $63, $2B, $3B, $04, $2B, $3B, $04, $6A, $14, $E8, $02, $B0, $7F ; CPU:$EDFE PRG:6DFE 02 7F 40 63 2B 3B 04 2B 3B 04 6A 14 .byte $40, $6C, $60, $EA, $38, $F9, $0F, $01, $4F, $7F, $40, $EF, $72, $51, $66, $1A ; CPU:$EE0E PRG:6E0E 40 6C 60 EA 38 F9 0F 01 4F 7F 40 EF .byte $72, $2A, $66, $42, $72, $3A, $66, $1A, $72, $2A, $66, $03, $72, $52, $66, $1A ; CPU:$EE1E PRG:6E1E 72 2A 66 42 72 3A 66 1A 72 2A 66 03 .byte $72, $2A, $66, $42, $72, $3A, $66, $1A, $72, $52, $66, $13, $72, $1B, $66, $0B ; CPU:$EE2E PRG:6E2E 72 2A 66 42 72 3A 66 1A 72 52 66 13 .byte $72, $5A, $66, $52, $72, $42, $66, $32, $72, $2A, $66, $0A, $72, $0B, $66, $1B ; CPU:$EE3E PRG:6E3E 72 5A 66 52 72 42 66 32 72 2A 66 0A .byte $72, $0B, $66, $52, $68, $03, $42, $2A, $52, $3A, $EA, $1B, $ED, $80, $2A, $E8 ; CPU:$EE4E PRG:6E4E 72 0B 66 52 68 03 42 2A 52 3A EA 1B .byte $02, $4F, $7F, $40, $72, $3A, $66, $51, $72, $2A, $66, $02, $72, $1A, $66, $51 ; CPU:$EE5E PRG:6E5E 02 4F 7F 40 72 3A 66 51 72 2A 66 02 .byte $F3, $02, $19, $72, $02, $66, $12, $F9, $04, $72, $2A, $66, $52, $72, $5A, $66 ; CPU:$EE6E PRG:6E6E F3 02 19 72 02 66 12 F9 04 72 2A 66 .byte $52, $72, $42, $66, $32, $72, $2A, $66, $1A, $72, $0A, $66, $2A, $72, $32, $66 ; CPU:$EE7E PRG:6E7E 52 72 42 66 32 72 2A 66 1A 72 0A 66 .byte $42, $72, $32, $66, $1A, $68, $42, $2A, $02, $2A, $12, $EA, $1B, $ED, $80, $70 ; CPU:$EE8E PRG:6E8E 42 72 32 66 1A 68 42 2A 02 2A 12 EA .byte $02, $E8, $03, $8C, $7F, $08, $78, $52, $72, $03, $66, $1B, $78, $13, $52, $1B ; CPU:$EE9E PRG:6E9E 02 E8 03 8C 7F 08 78 52 72 03 66 1B .byte $72, $2B, $66, $43, $78, $3B, $2B, $33, $72, $2B, $66, $1B, $78, $0B, $33, $0C ; CPU:$EEAE PRG:6EAE 72 2B 66 43 78 3B 2B 33 72 2B 66 1B .byte $72, $53, $66, $33, $78, $2B, $72, $53, $EE, $10, $66, $3B, $E8, $01, $44, $7F ; CPU:$EEBE PRG:6EBE 72 53 66 33 78 2B 72 53 EE 10 66 3B .byte $20, $EF, $6F, $3B, $65, $3B, $6A, $3B, $74, $2B, $2B, $6A, $2B, $6F, $43, $65 ; CPU:$EECE PRG:6ECE 20 EF 6F 3B 65 3B 6A 3B 74 2B 2B 6A .byte $43, $6A, $43, $74, $3B, $3B, $6A, $3B, $EA, $01, $65, $43, $6A, $43, $65, $43 ; CPU:$EEDE PRG:6EDE 43 6A 43 74 3B 3B 6A 3B EA 01 65 43 .byte $6A, $43, $65, $53, $6A, $53, $65, $53, $6A, $53, $53, $53, $65, $04, $6A, $04 ; CPU:$EEEE PRG:6EEE 6A 43 65 53 6A 53 65 53 6A 53 53 53 .byte $65, $04, $6A, $04, $04, $E9, $00, $EA, $07, $ED, $38, $F9, $44, $02, $07, $7F ; CPU:$EEFE PRG:6EFE 65 04 6A 04 04 E9 00 EA 07 ED 38 F9 .byte $38, $63, $1D, $15, $0D, $05, $5C, $54, $4C, $44, $3C, $34, $2C, $24, $1C, $14 ; CPU:$EF0E PRG:6F0E 38 63 1D 15 0D 05 5C 54 4C 44 3C 34 .byte $0C, $04, $5B, $53, $4B, $43, $3B, $33, $2B, $23, $1B, $13, $0B, $03, $5A, $52 ; CPU:$EF1E PRG:6F1E 0C 04 5B 53 4B 43 3B 33 2B 23 1B 13 .byte $4A, $42, $3A, $32, $2A, $22, $1A, $12, $0A, $02, $E8, $02, $49, $7F, $88, $74 ; CPU:$EF2E PRG:6F2E 4A 42 3A 32 2A 22 1A 12 0A 02 E8 02 .byte $1A, $51, $F1, $04, $05, $EA, $01, $65, $59, $6A, $59, $65, $59, $6A, $59, $65 ; CPU:$EF3E PRG:6F3E 1A 51 F1 04 05 EA 01 65 59 6A 59 65 .byte $0A, $6A, $0A, $65, $0A, $6A, $0A, $0A, $0A, $ED, $90, $EA, $0F, $74, $43, $6A ; CPU:$EF4E PRG:6F4E 0A 6A 0A 65 0A 6A 0A 0A 0A ED 90 EA .byte $1B, $42, $E8, $03, $0A, $7F, $08, $EF, $65, $1B, $3B, $53, $1C, $F0, $08, $05 ; CPU:$EF5E PRG:6F5E 1B 42 E8 03 0A 7F 08 EF 65 1B 3B 53 .byte $65, $24, $6A, $24, $65, $24, $6A, $24, $65, $34, $6A, $34, $65, $34, $6A, $34 ; CPU:$EF6E PRG:6F6E 65 24 6A 24 65 24 6A 24 65 34 6A 34 .byte $34, $34, $EE, $0A, $65, $43, $04, $1C, $44, $44, $1C, $04, $43, $E8, $02, $4F ; CPU:$EF7E PRG:6F7E 34 34 EE 0A 65 43 04 1C 44 44 1C 04 .byte $7F, $48, $EF, $64, $52, $03, $F0, $02, $06, $1B, $2B, $F0, $02, $0B, $E8, $01 ; CPU:$EF8E PRG:6F8E 7F 48 EF 64 52 03 F0 02 06 1B 2B F0 .byte $8F, $7F, $C8, $75, $2B, $67, $2B, $33, $43, $ED, $A0, $75, $53, $E8, $02, $CF ; CPU:$EF9E PRG:6F9E 8F 7F C8 75 2B 67 2B 33 43 ED A0 75 .byte $7F, $C8, $75, $03, $67, $03, $0B, $1B, $ED, $A0, $75, $2B, $E8, $03, $36, $7F ; CPU:$EFAE PRG:6FAE 7F C8 75 03 67 03 0B 1B ED A0 75 2B .byte $08, $75, $4B, $67, $4B, $53, $04, $EE, $58, $75, $14, $E8, $02, $44, $7F, $28 ; CPU:$EFBE PRG:6FBE 08 75 4B 67 4B 53 04 EE 58 75 14 E8 .byte $62, $53, $3B, $4B, $2B, $3B, $1B, $2B, $13, $F9, $05, $01, $44, $7F, $28, $62 ; CPU:$EFCE PRG:6FCE 62 53 3B 4B 2B 3B 1B 2B 13 F9 05 01 .byte $1B, $33, $4B, $04, $1C, $04, $4B, $33, $F9, $05, $02, $7F, $7F, $28, $61, $53 ; CPU:$EFDE PRG:6FDE 1B 33 4B 04 1C 04 4B 33 F9 05 02 7F .byte $5B, $04, $62, $14, $0C, $61, $04, $5C, $EA, $0F, $63, $53, $EA, $3F, $61, $1B ; CPU:$EFEE PRG:6FEE 5B 04 62 14 0C 61 04 5C EA 0F 63 53 .byte $23, $2B, $33, $3B, $33, $2B, $23, $1B, $13, $0B, $EA, $0F, $03, $E8, $02, $87 ; CPU:$EFFE PRG:6FFE 23 2B 33 3B 33 2B 23 1B 13 0B EA 0F .byte $7F, $28, $61, $2B, $3B, $4B, $53, $04, $14, $24, $67, $2C, $61, $0C, $04, $5B ; CPU:$F00E PRG:700E 7F 28 61 2B 3B 4B 53 04 14 24 67 2C .byte $53, $4B, $43, $E8, $03, $08, $7F, $08, $61, $42, $4A, $62, $52, $61, $5A, $03 ; CPU:$F01E PRG:701E 53 4B 43 E8 03 08 7F 08 61 42 4A 62 .byte $62, $0B, $61, $13, $1B, $64, $23, $61, $52, $5A, $62, $03, $61, $0B, $13, $62 ; CPU:$F02E PRG:702E 62 0B 61 13 1B 64 23 61 52 5A 62 03 .byte $1B, $61, $23, $2B, $65, $33, $61, $03, $0B, $62, $1B, $61, $1B, $23, $62, $2B ; CPU:$F03E PRG:703E 1B 61 23 2B 65 33 61 03 0B 62 1B 61 .byte $61, $33, $3B, $43, $E8, $03, $08, $7F, $08, $61, $03, $0B, $62, $13, $61, $1B ; CPU:$F04E PRG:704E 61 33 3B 43 E8 03 08 7F 08 61 03 0B .byte $23, $62, $2B, $61, $33, $3B, $43, $E8, $01, $03, $7F, $40, $66, $3B, $2B, $3B ; CPU:$F05E PRG:705E 23 62 2B 61 33 3B 43 E8 01 03 7F 40 .byte $53, $14, $72, $2C, $E8, $02, $03, $7F, $40, $66, $2B, $13, $2B, $3B, $53, $72 ; CPU:$F06E PRG:706E 53 14 72 2C E8 02 03 7F 40 66 2B 13 .byte $14, $E8, $01, $8F, $7F, $A8, $65, $3B, $1B, $2B, $13, $1B, $03, $13, $5A, $03 ; CPU:$F07E PRG:707E 14 E8 01 8F 7F A8 65 3B 1B 2B 13 1B .byte $3A, $3A, $2A, $1A, $12, $02, $59, $02, $12, $1A, $2A, $1A, $3A, $4A, $5A, $74 ; CPU:$F08E PRG:708E 3A 3A 2A 1A 12 02 59 02 12 1A 2A 1A .byte $03, $E8, $02, $4F, $7F, $A8, $65, $1B, $03, $13, $5A, $03, $4A, $5A, $3A, $3A ; CPU:$F09E PRG:709E 03 E8 02 4F 7F A8 65 1B 03 13 5A 03 .byte $1A, $1A, $12, $02, $59, $49, $39, $39, $41, $49, $59, $02, $12, $1A, $2A, $74 ; CPU:$F0AE PRG:70AE 1A 1A 12 02 59 49 39 39 41 49 59 02 .byte $3A, $E8, $03, $30, $7F, $08, $6A, $04, $14, $1C, $14, $04, $5B, $4B, $5B, $04 ; CPU:$F0BE PRG:70BE 3A E8 03 30 7F 08 6A 04 14 1C 14 04 .byte $43, $3B, $1B, $74, $04, $E8, $01, $8F, $7F, $88, $66, $3B, $23, $2B, $13, $23 ; CPU:$F0CE PRG:70CE 43 3B 1B 74 04 E8 01 8F 7F 88 66 3B .byte $03, $13, $5A, $03, $3A, $4A, $2A, $22, $12, $02, $59, $02, $22, $12, $2A, $22 ; CPU:$F0DE PRG:70DE 03 13 5A 03 3A 4A 2A 22 12 02 59 02 .byte $3A, $2A, $4A, $3A, $03, $5A, $03, $13, $3A, $4A, $5A, $E8, $02, $4F, $7F, $88 ; CPU:$F0EE PRG:70EE 3A 2A 4A 3A 03 5A 03 13 3A 4A 5A E8 .byte $66, $23, $03, $13, $5A, $03, $4A, $5A, $3A, $4A, $22, $2A, $12, $02, $59, $49 ; CPU:$F0FE PRG:70FE 66 23 03 13 5A 03 4A 5A 3A 4A 22 2A .byte $39, $39, $02, $59, $12, $02, $22, $12, $2A, $22, $3A, $2A, $4A, $3A, $2A, $22 ; CPU:$F10E PRG:710E 39 39 02 59 12 02 22 12 2A 22 3A 2A .byte $12, $E8, $03, $AD, $7F, $08, $6C, $03, $3B, $72, $04, $66, $3B, $2B, $23, $13 ; CPU:$F11E PRG:711E 12 E8 03 AD 7F 08 6C 03 3B 72 04 66 .byte $6C, $03, $72, $13, $6C, $23, $2B, $3B, $4B, $3B, $66, $2B, $23, $13, $5A, $03 ; CPU:$F12E PRG:712E 6C 03 72 13 6C 23 2B 3B 4B 3B 66 2B .byte $EE, $2A, $13, $E8, $01, $8F, $7F, $88, $66, $3B, $1B, $2B, $13, $1B, $03, $13 ; CPU:$F13E PRG:713E EE 2A 13 E8 01 8F 7F 88 66 3B 1B 2B .byte $5A, $03, $3A, $42, $2A, $1A, $12, $02, $59, $02, $1A, $12, $2A, $1A, $3A, $2A ; CPU:$F14E PRG:714E 5A 03 3A 42 2A 1A 12 02 59 02 1A 12 .byte $42, $3A, $03, $5A, $03, $13, $3A, $4A, $5A, $E8, $02, $8F, $7F, $88, $66, $1B ; CPU:$F15E PRG:715E 42 3A 03 5A 03 13 3A 4A 5A E8 02 8F .byte $03, $13, $5A, $03, $4A, $5A, $3A, $42, $1A, $2A, $12, $02, $59, $49, $39, $39 ; CPU:$F16E PRG:716E 03 13 5A 03 4A 5A 3A 42 1A 2A 12 02 .byte $02, $59, $12, $02, $1A, $12, $2A, $1A, $3A, $2A, $42, $3A, $2A, $1A, $12, $E8 ; CPU:$F17E PRG:717E 02 59 12 02 1A 12 2A 1A 3A 2A 42 3A .byte $03, $AD, $7F, $08, $6C, $03, $3B, $72, $04, $66, $3B, $2B, $1B, $13, $6C, $03 ; CPU:$F18E PRG:718E 03 AD 7F 08 6C 03 3B 72 04 66 3B 2B .byte $72, $13, $6C, $1B, $2B, $3B, $43, $3B, $66, $2B, $1B, $13, $5A, $03, $EE, $2A ; CPU:$F19E PRG:719E 72 13 6C 1B 2B 3B 43 3B 66 2B 1B 13 .byte $13, $E8, $01, $47, $7F, $18, $61, $1D, $15, $0D, $05, $5C, $4C, $3C, $2C, $1C ; CPU:$F1AE PRG:71AE 13 E8 01 47 7F 18 61 1D 15 0D 05 5C .byte $0C, $5B, $4B, $3B, $2B, $E8, $04, $1F, $7F, $40, $0A, $67, $1E, $1E, $EA, $0B ; CPU:$F1BE PRG:71BE 0C 5B 4B 3B 2B E8 04 1F 7F 40 0A 67 .byte $6A, $1E, $1E, $1E, $E8, $02, $93, $ED, $30, $77, $21, $39, $21, $41, $39, $59 ; CPU:$F1CE PRG:71CE 6A 1E 1E 1E E8 02 93 ED 30 77 21 39 .byte $41, $02, $E8, $02, $93, $F5, $30, $77, $13, $4A, $03, $42, $4A, $2A, $42, $22 ; CPU:$F1DE PRG:71DE 41 02 E8 02 93 F5 30 77 13 4A 03 42 .byte $E8, $01, $82, $7F, $F8, $EF, $78, $13, $52, $3A, $1A, $72, $60, $66, $13, $72 ; CPU:$F1EE PRG:71EE E8 01 82 7F F8 EF 78 13 52 3A 1A 72 .byte $52, $66, $3A, $68, $1A, $3A, $52, $32, $4A, $03, $78, $42, $03, $1B, $2B, $72 ; CPU:$F1FE PRG:71FE 52 66 3A 68 1A 3A 52 32 4A 03 78 42 .byte $60, $66, $33, $72, $1B, $66, $5A, $68, $42, $32, $1A, $5A, $32, $1B, $F0, $03 ; CPU:$F20E PRG:720E 60 66 33 72 1B 66 5A 68 42 32 1A 5A .byte $05, $E8, $02, $82, $7F, $F8, $78, $52, $3A, $1A, $12, $72, $60, $66, $51, $72 ; CPU:$F21E PRG:721E 05 E8 02 82 7F F8 78 52 3A 1A 12 72 .byte $3A, $66, $1A, $68, $12, $1A, $3A, $1A, $32, $42, $78, $2A, $42, $03, $1B, $72 ; CPU:$F22E PRG:722E 3A 66 1A 68 12 1A 3A 1A 32 42 78 2A .byte $60, $66, $1B, $72, $5A, $66, $42, $68, $3A, $1A, $59, $42, $32, $59, $F1, $03 ; CPU:$F23E PRG:723E 60 66 1B 72 5A 66 42 68 3A 1A 59 42 .byte $04, $E8, $03, $FE, $7F, $08, $C0, $14, $90, $14, $78, $53, $14, $C0, $04, $90 ; CPU:$F24E PRG:724E 04 E8 03 FE 7F 08 C0 14 90 14 78 53 .byte $5B, $78, $1C, $EE, $40, $2C, $EE, $FE, $F2, $03, $04, $E8, $02, $47, $7F, $18 ; CPU:$F25E PRG:725E 5B 78 1C EE 40 2C EE FE F2 03 04 E8 .byte $63, $53, $F9, $05, $E2, $06, $E0, $00, $E1, $B7, $E3, $60, $10, $C5, $92, $C9 ; CPU:$F26E PRG:726E 63 53 F9 05 E2 06 E0 00 E1 B7 E3 60 .byte $89, $E7, $C9, $89, $E6, $01, $E2, $06, $E0, $00, $E1, $B7, $E3, $80, $10, $C5 ; CPU:$F27E PRG:727E 89 E7 C9 89 E6 01 E2 06 E0 00 E1 B7 .byte $95, $E5, $C9, $89, $E4, $E7, $C9, $89, $E5, $E6, $01, $E2, $06, $E0, $00, $E1 ; CPU:$F28E PRG:728E 95 E5 C9 89 E4 E7 C9 89 E5 E6 01 E2 .byte $A7, $E3, $60, $11, $C5, $91, $E5, $C9, $85, $E7, $C9, $85, $E4, $E6, $01, $E2 ; CPU:$F29E PRG:729E A7 E3 60 11 C5 91 E5 C9 85 E7 C9 85 .byte $0C, $E0, $50, $E1, $FF, $E3, $60, $0E, $C2, $8C, $92, $C2, $14, $E7, $CA, $49 ; CPU:$F2AE PRG:72AE 0C E0 50 E1 FF E3 60 0E C2 8C 92 C2 .byte $E6, $01, $E2, $0C, $E0, $50, $E1, $FF, $E3, $60, $0E, $C2, $8C, $92, $C2, $14 ; CPU:$F2BE PRG:72BE E6 01 E2 0C E0 50 E1 FF E3 60 0E C2 .byte $E7, $E4, $CA, $49, $E5, $E6, $01, $E2, $0C, $E0, $40, $E1, $FF, $E3, $80, $10 ; CPU:$F2CE PRG:72CE E7 E4 CA 49 E5 E6 01 E2 0C E0 40 E1 .byte $C2, $90, $E5, $92, $C2, $14, $E3, $40, $E7, $CA, $45, $E4, $E6, $01, $E6, $0B ; CPU:$F2DE PRG:72DE C2 90 E5 92 C2 14 E3 40 E7 CA 45 E4 .byte $E3, $00, $EC, $0A, $ED, $0A, $E3, $20, $EA, $1A, $E6, $0B, $E3, $20, $CB, $42 ; CPU:$F2EE PRG:72EE E3 00 EC 0A ED 0A E3 20 EA 1A E6 0B .byte $46, $46, $E6, $0A, $6C, $C3, $46, $EC, $06, $ED, $EA, $2F, $E6, $0B, $E3, $20 ; CPU:$F2FE PRG:72FE 46 46 E6 0A 6C C3 46 EC 06 ED EA 2F .byte $CB, $42, $46, $E6, $0A, $6C, $C4, $46, $EC, $14, $ED, $0C, $EA, $2F, $CB, $42 ; CPU:$F30E PRG:730E CB 42 46 E6 0A 6C C4 46 EC 14 ED 0C .byte $C1, $46, $E6, $0A, $6C, $C3, $46, $08, $90, $9A, $97, $93, $8F, $8C, $88, $88 ; CPU:$F31E PRG:731E C1 46 E6 0A 6C C3 46 08 90 9A 97 93 .byte $E6, $0C, $E3, $60, $E6, $01, $E3, $20, $E2, $00, $CB, $42, $C1, $46, $E6, $0A ; CPU:$F32E PRG:732E E6 0C E3 60 E6 01 E3 20 E2 00 CB 42 .byte $6C, $C3, $46, $08, $90, $9A, $97, $93, $8F, $8C, $CB, $88, $E8, $CC, $88, $88 ; CPU:$F33E PRG:733E 6C C3 46 08 90 9A 97 93 8F 8C CB 88 .byte $E6, $0A, $E8, $E9, $E2, $09, $EB, $0E, $4A, $49, $49, $4E, $53, $4E, $52, $C2 ; CPU:$F34E PRG:734E E6 0A E8 E9 E2 09 EB 0E 4A 49 49 4E .byte $14, $92, $14, $8D, $8C, $91, $14, $CB, $88, $E8, $CC, $88, $08, $E6, $0A, $E8 ; CPU:$F35E PRG:735E 14 92 14 8D 8C 91 14 CB 88 E8 CC 88 .byte $E9, $EA, $24, $E2, $00, $E3, $20, $CB, $42, $C2, $46, $E6, $0A, $4C, $46, $17 ; CPU:$F36E PRG:736E E9 EA 24 E2 00 E3 20 CB 42 C2 46 E6 .byte $1E, $C5, $85, $45, $45, $46, $46, $50, $10, $86, $86, $86, $88, $E6, $0A, $E8 ; CPU:$F37E PRG:737E 1E C5 85 45 45 46 46 50 10 86 86 86 .byte $E9, $E8, $EB, $E2, $09, $C2, $0C, $C3, $4A, $4E, $5C, $1E, $88, $86, $86, $86 ; CPU:$F38E PRG:738E E9 E8 EB E2 09 C2 0C C3 4A 4E 5C 1E .byte $8D, $45, $46, $45, $46, $49, $51, $8A, $C4, $85, $E6, $0A, $E8, $E9, $E8, $E2 ; CPU:$F39E PRG:739E 8D 45 46 45 46 49 51 8A C4 85 E6 0A .byte $09, $0C, $C3, $4A, $4E, $52, $56, $14, $50, $14, $99, $88, $C4, $84, $86, $86 ; CPU:$F3AE PRG:73AE 09 0C C3 4A 4E 52 56 14 50 14 99 88 .byte $C4, $46, $4D, $C2, $85, $96, $E6, $0A, $E8, $E9, $E8, $E3, $20, $E2, $09, $C2 ; CPU:$F3BE PRG:73BE C4 46 4D C2 85 96 E6 0A E8 E9 E8 E3 .byte $0C, $C3, $4A, $4E, $5C, $1E, $88, $86, $86, $86, $8D, $45, $46, $45, $46, $49 ; CPU:$F3CE PRG:73CE 0C C3 4A 4E 5C 1E 88 86 86 86 8D 45 .byte $51, $8A, $C4, $85, $E6, $0A, $E8, $E9, $E8, $EA, $23, $E2, $00, $E3, $20, $CB ; CPU:$F3DE PRG:73DE 51 8A C4 85 E6 0A E8 E9 E8 EA 23 E2 .byte $44, $16, $4E, $17, $D7, $46, $0F, $51, $55, $14, $9E, $9E, $88, $E6, $0A, $D8 ; CPU:$F3EE PRG:73EE 44 16 4E 17 D7 46 0F 51 55 14 9E 9E .byte $EB, $E6, $0A, $E8, $E9, $E8, $EA, $22, $E2, $00, $E3, $20, $C5, $44, $C7, $45 ; CPU:$F3FE PRG:73FE EB E6 0A E8 E9 E8 EA 22 E2 00 E3 20 .byte $C5, $10, $0D, $E3, $00, $C1, $84, $E6, $05, $E3, $20, $10, $E6, $0A, $E8, $E9 ; CPU:$F40E PRG:740E C5 10 0D E3 00 C1 84 E6 05 E3 20 10 .byte $E8, $EB, $E2, $09, $10, $47, $46, $45, $4B, $54, $4E, $18, $D7, $46, $C3, $13 ; CPU:$F41E PRG:741E E8 EB E2 09 10 47 46 45 4B 54 4E 18 .byte $9E, $9E, $88, $E6, $0A, $E8, $E9, $E8, $EA, $22, $E3, $00, $C5, $0F, $E3, $20 ; CPU:$F42E PRG:742E 9E 9E 88 E6 0A E8 E9 E8 EA 22 E3 00 .byte $04, $C5, $84, $E6, $01, $E3, $00, $C7, $0F, $E3, $20, $CB, $44, $16, $4E, $17 ; CPU:$F43E PRG:743E 04 C5 84 E6 01 E3 00 C7 0F E3 20 CB .byte $D7, $46, $0F, $51, $55, $14, $94, $14, $9D, $8E, $E6, $0A, $E8, $E6, $09, $E2 ; CPU:$F44E PRG:744E D7 46 0F 51 55 14 94 14 9D 8E E6 0A .byte $00, $E3, $20, $CB, $44, $16, $4E, $17, $D7, $46, $0F, $51, $55, $14, $9E, $9E ; CPU:$F45E PRG:745E 00 E3 20 CB 44 16 4E 17 D7 46 0F 51 .byte $88, $E6, $0A, $E8, $E9, $E8, $EB, $E2, $0C, $10, $E2, $09, $10, $47, $46, $45 ; CPU:$F46E PRG:746E 88 E6 0A E8 E9 E8 EB E2 0C 10 E2 09 .byte $4B, $54, $4E, $18, $D7, $46, $C3, $13, $9E, $9E, $88, $E6, $0A, $E8, $E9, $E8 ; CPU:$F47E PRG:747E 4B 54 4E 18 D7 46 C3 13 9E 9E 88 E6 .byte $EA, $28, $E0, $54, $E1, $FF, $E2, $0C, $E3, $60, $CA, $08, $8E, $14, $97, $94 ; CPU:$F48E PRG:748E EA 28 E0 54 E1 FF E2 0C E3 60 CA 08 .byte $91, $8E, $8C, $8A, $C3, $88, $8A, $8C, $8E, $90, $88, $E6, $04, $E0, $00, $E1 ; CPU:$F49E PRG:749E 91 8E 8C 8A C3 88 8A 8C 8E 90 88 E6 .byte $B7, $E2, $06, $E3, $60, $1F, $97, $92, $14, $94, $14, $97, $8F, $90, $C2, $10 ; CPU:$F4AE PRG:74AE B7 E2 06 E3 60 1F 97 92 14 94 14 97 .byte $CB, $83, $C4, $10, $C9, $86, $E6, $04, $E0, $54, $E1, $FF, $E2, $0C, $E3, $60 ; CPU:$F4BE PRG:74BE CB 83 C4 10 C9 86 E6 04 E0 54 E1 FF .byte $CC, $08, $90, $10, $10, $E3, $00, $CB, $81, $E3, $60, $10, $10, $10, $48, $E6 ; CPU:$F4CE PRG:74CE CC 08 90 10 10 E3 00 CB 81 E3 60 10 .byte $04, $E0, $00, $E1, $B7, $E2, $06, $E3, $60, $1E, $C4, $10, $D7, $95, $E6, $04 ; CPU:$F4DE PRG:74DE 04 E0 00 E1 B7 E2 06 E3 60 1E C4 10 .byte $E0, $54, $E1, $FF, $E2, $0C, $E3, $60, $18, $C4, $10, $06, $C4, $8C, $86, $E3 ; CPU:$F4EE PRG:74EE E0 54 E1 FF E2 0C E3 60 18 C4 10 06 .byte $00, $CB, $81, $E3, $60, $06, $C4, $4C, $4E, $E6, $04, $E0, $54, $E1, $FF, $E2 ; CPU:$F4FE PRG:74FE 00 CB 81 E3 60 06 C4 4C 4E E6 04 E0 .byte $0C, $E3, $60, $18, $C4, $10, $06, $C4, $4C, $46, $E3, $00, $CB, $41, $E3, $60 ; CPU:$F50E PRG:750E 0C E3 60 18 C4 10 06 C4 4C 46 E3 00 .byte $06, $C4, $8C, $8E, $E6, $04, $E0, $00, $E1, $B7, $E2, $06, $E3, $60, $C3, $14 ; CPU:$F51E PRG:751E 06 C4 8C 8E E6 04 E0 00 E1 B7 E2 06 .byte $E3, $00, $CB, $81, $E3, $60, $07, $C5, $50, $C3, $10, $CB, $49, $1C, $E3, $00 ; CPU:$F52E PRG:752E E3 00 CB 81 E3 60 07 C5 50 C3 10 CB .byte $C5, $81, $E3, $60, $E6, $04, $E0, $50, $E1, $FF, $E2, $0C, $E3, $60, $18, $E3 ; CPU:$F53E PRG:753E C5 81 E3 60 E6 04 E0 50 E1 FF E2 0C .byte $00, $C5, $41, $E3, $60, $02, $CB, $85, $CB, $45, $D7, $85, $CB, $45, $CA, $85 ; CPU:$F54E PRG:754E 00 C5 41 E3 60 02 CB 85 CB 45 D7 85 .byte $81, $E3, $00, $C5, $41, $E3, $60, $E6, $04, $E0, $50, $E1, $FF, $E2, $0C, $E3 ; CPU:$F55E PRG:755E 81 E3 00 C5 41 E3 60 E6 04 E0 50 E1 .byte $60, $18, $E3, $00, $C5, $81, $E3, $60, $02, $CB, $45, $CB, $85, $D7, $45, $CB ; CPU:$F56E PRG:756E 60 18 E3 00 C5 81 E3 60 02 CB 45 CB .byte $85, $CA, $45, $41, $E3, $00, $C5, $81, $E3, $60, $E6, $04, $E0, $00, $E1, $B7 ; CPU:$F57E PRG:757E 85 CA 45 41 E3 00 C5 81 E3 60 E6 04 .byte $E2, $03, $E3, $60, $16, $92, $99, $14, $4E, $47, $C6, $46, $C2, $4C, $48, $C6 ; CPU:$F58E PRG:758E E2 03 E3 60 16 92 99 14 4E 47 C6 46 .byte $44, $48, $C2, $4C, $48, $4B, $C3, $4A, $45, $46, $48, $C2, $4C, $48, $C6, $44 ; CPU:$F59E PRG:759E 44 48 C2 4C 48 4B C3 4A 45 46 48 C2 .byte $48, $C2, $4C, $48, $4B, $C3, $4A, $45, $46, $48, $C2, $4C, $48, $C6, $44, $48 ; CPU:$F5AE PRG:75AE 48 C2 4C 48 4B C3 4A 45 46 48 C2 4C .byte $C2, $4C, $48, $46, $44, $43, $46, $46, $46, $47, $4E, $59, $14, $92, $86, $E6 ; CPU:$F5BE PRG:75BE C2 4C 48 46 44 43 46 46 46 47 4E 59 .byte $04, $E0, $50, $E1, $00, $E2, $12, $E3, $60, $CB, $91, $CB, $8D, $CB, $8B, $CB ; CPU:$F5CE PRG:75CE 04 E0 50 E1 00 E2 12 E3 60 CB 91 CB .byte $89, $CB, $86, $CB, $84, $E3, $00, $C2, $44, $20, $E3, $60, $E6, $04, $E0, $00 ; CPU:$F5DE PRG:75DE 89 CB 86 CB 84 E3 00 C2 44 20 E3 60 .byte $E1, $B7, $E2, $06, $E3, $60, $0C, $8F, $9B, $14, $94, $14, $0F, $5A, $4E, $CC ; CPU:$F5EE PRG:75EE E1 B7 E2 06 E3 60 0C 8F 9B 14 94 14 .byte $47, $4E, $5A, $4F, $0F, $9A, $8E, $CC, $87, $8E, $9A, $8F, $16, $9E, $88, $CC ; CPU:$F5FE PRG:75FE 47 4E 5A 4F 0F 9A 8E CC 87 8E 9A 8F .byte $89, $88, $9E, $96, $14, $14, $9B, $14, $8F, $84, $E6, $04, $E0, $50, $E1, $FF ; CPU:$F60E PRG:760E 89 88 9E 96 14 14 9B 14 8F 84 E6 04 .byte $E2, $0C, $E3, $60, $10, $1C, $E3, $00, $C5, $81, $E3, $60, $10, $0C, $E3, $00 ; CPU:$F61E PRG:761E E2 0C E3 60 10 1C E3 00 C5 81 E3 60 .byte $C5, $41, $E3, $60, $10, $14, $E3, $00, $C5, $81, $E3, $60, $10, $0C, $E3, $00 ; CPU:$F62E PRG:762E C5 41 E3 60 10 14 E3 00 C5 81 E3 60 .byte $C5, $41, $E3, $60, $10, $14, $E3, $00, $C5, $81, $E3, $60, $10, $0C, $E3, $00 ; CPU:$F63E PRG:763E C5 41 E3 60 10 14 E3 00 C5 81 E3 60 .byte $C5, $41, $E3, $60, $10, $14, $E3, $00, $C5, $81, $E3, $60, $E6, $04, $E0, $00 ; CPU:$F64E PRG:764E C5 41 E3 60 10 14 E3 00 C5 81 E3 60 .byte $E1, $B7, $E2, $06, $E3, $60, $18, $92, $C6, $10, $8C, $84, $C4, $82, $84, $8C ; CPU:$F65E PRG:765E E1 B7 E2 06 E3 60 18 92 C6 10 8C 84 .byte $90, $10, $90, $12, $52, $48, $44, $C4, $42, $44, $48, $52, $52, $0E, $8E, $86 ; CPU:$F66E PRG:766E 90 10 90 12 52 48 44 C4 42 44 48 52 .byte $83, $C4, $82, $83, $86, $8E, $8E, $0E, $4E, $46, $43, $C4, $42, $43, $46, $4B ; CPU:$F67E PRG:767E 83 C4 82 83 86 8E 8E 0E 4E 46 43 C4 .byte $46, $E3, $00, $C5, $81, $E3, $60, $E6, $04, $E0, $50, $E1, $FF, $E2, $0C, $E3 ; CPU:$F68E PRG:768E 46 E3 00 C5 81 E3 60 E6 04 E0 50 E1 .byte $60, $10, $10, $E3, $00, $C5, $41, $E3, $60, $C6, $08, $E3, $00, $C8, $81, $E3 ; CPU:$F69E PRG:769E 60 10 10 E3 00 C5 41 E3 60 C6 08 E3 .byte $60, $D0, $0C, $E3, $00, $C8, $41, $E3, $60, $E6, $04, $E0, $00, $E1, $B7, $E2 ; CPU:$F6AE PRG:76AE 60 D0 0C E3 00 C8 41 E3 60 E6 04 E0 .byte $06, $E3, $60, $0C, $C5, $84, $C4, $10, $18, $C9, $44, $C2, $10, $C7, $86, $C2 ; CPU:$F6BE PRG:76BE 06 E3 60 0C C5 84 C4 10 18 C9 44 C2 .byte $10, $C9, $44, $18, $C4, $10, $C5, $84, $E6, $04, $E0, $50, $E1, $FF, $E2, $0C ; CPU:$F6CE PRG:76CE 10 C9 44 18 C4 10 C5 84 E6 04 E0 50 .byte $E3, $60, $C8, $08, $E4, $08, $4D, $4B, $48, $C4, $47, $48, $4B, $4D, $50, $4D ; CPU:$F6DE PRG:76DE E3 60 C8 08 E4 08 4D 4B 48 C4 47 48 .byte $4B, $48, $C4, $47, $48, $4B, $4D, $56, $E5, $93, $10, $90, $8E, $98, $91, $E5 ; CPU:$F6EE PRG:76EE 4B 48 C4 47 48 4B 4D 56 E5 93 10 90 .byte $C1, $83, $84, $85, $86, $88, $8C, $88, $86, $85, $84, $C2, $83, $84, $85, $86 ; CPU:$F6FE PRG:76FE C1 83 84 85 86 88 8C 88 86 85 84 C2 .byte $88, $8C, $88, $86, $85, $84, $E4, $92, $E6, $04, $E0, $40, $E1, $FF, $E2, $0C ; CPU:$F70E PRG:770E 88 8C 88 86 85 84 E4 92 E6 04 E0 40 .byte $E3, $60, $C8, $08, $E5, $06, $48, $46, $45, $44, $C2, $43, $44, $45, $46, $48 ; CPU:$F71E PRG:771E E3 60 C8 08 E5 06 48 46 45 44 C2 43 .byte $4C, $48, $46, $45, $44, $C2, $43, $44, $45, $46, $48, $56, $E4, $96, $E4, $10 ; CPU:$F72E PRG:772E 4C 48 46 45 44 C2 43 44 45 46 48 56 .byte $92, $94, $90, $10, $95, $C1, $85, $87, $88, $8B, $8D, $90, $8D, $8B, $88, $C4 ; CPU:$F73E PRG:773E 92 94 90 10 95 C1 85 87 88 8B 8D 90 .byte $87, $88, $8B, $8D, $90, $8D, $8B, $88, $87, $87, $E5, $19, $12, $E6, $04, $E0 ; CPU:$F74E PRG:774E 87 88 8B 8D 90 8D 8B 88 87 87 E5 19 .byte $00, $E1, $A7, $E2, $06, $E3, $60, $1C, $95, $14, $9E, $96, $14, $93, $E5, $D7 ; CPU:$F75E PRG:775E 00 E1 A7 E2 06 E3 60 1C 95 14 9E 96 .byte $89, $E4, $13, $4C, $14, $4E, $E6, $04, $E0, $00, $E1, $B7, $E2, $06, $E3, $60 ; CPU:$F76E PRG:776E 89 E4 13 4C 14 4E E6 04 E0 00 E1 B7 .byte $1D, $9A, $14, $8F, $14, $99, $14, $97, $E4, $D7, $8D, $E5, $06, $51, $14, $4C ; CPU:$F77E PRG:777E 1D 9A 14 8F 14 99 14 97 E4 D7 8D E5 .byte $E6, $04 ; CPU:$F78E PRG:778E E6 04 ; ----------------------------------------------------------------------------- ; Routine: Sub_F790 ; Global: The routine reads no RAM field, writes none and calls nothing - it ; is a straight-line sequence whose only effect is on the registers ; and the flags. ; Local: Executes 2 instructions: loads X with $00; stores X to ; StarFieldPtrLo. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Falls through to the next routine in the source; it has no return ; of its own. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp6E, Zp6F, $04C0. ; ; ----------------------------------------------------------------------------- Sub_F790: ldx #$00 ; CPU:$F790 PRG:7790 A2 00 stx StarFieldPtrLo ; CPU:$F792 PRG:7792 86 00 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnNonzero64 ; Global: The routine calls Sub_C317. ; Local: Executes 6 instructions: loads A from $F7B4,x; stores A to $04C0,x; ; calls Sub_C317; increments X; compares X with $2A; branches on not ; equal to NmiHandler_OnNonzero64. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Leaves through one of its branches rather than a return; the caller ; resumes at the branch target. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp6E, Zp6F, $04C0. ; ; ----------------------------------------------------------------------------- NmiHandler_OnNonzero64: lda $F7B4,x ; CPU:$F794 PRG:7794 BD B4 F7 sta $04C0,x ; CPU:$F797 PRG:7797 9D C0 04 jsr Sub_C317 ; CPU:$F79A PRG:779A 20 17 C3 inx ; CPU:$F79D PRG:779D E8 cpx #$2A ; CPU:$F79E PRG:779E E0 2A bne NmiHandler_OnNonzero64 ; CPU:$F7A0 PRG:77A0 D0 F2 ; ----------------------------------------------------------------------------- ; Routine: NmiHandler_OnZero14 ; Global: The routine calls Sub_C317. ; Local: Executes 9 instructions: calls Sub_C317; stores A to $04C0,x; ANDs A ; with $03; compares A with $03; branches on equal to ; NmiHandler_OnZero14; increments X; and 3 more instructions. ; Parameters: Takes its input from the registers and the immediate values in ; the code; it reads no zero-page or RAM field. ; Returns: Returns with RTS; the registers it loaded still hold the values it ; computed. ; Clobbers: ; A and X, the N, Z, C and V flags, Zp6E, Zp6F, $04C0. ; ; ----------------------------------------------------------------------------- NmiHandler_OnZero14: jsr Sub_C317 ; CPU:$F7A2 PRG:77A2 20 17 C3 sta $04C0,x ; CPU:$F7A5 PRG:77A5 9D C0 04 and #$03 ; CPU:$F7A8 PRG:77A8 29 03 cmp #$03 ; CPU:$F7AA PRG:77AA C9 03 beq NmiHandler_OnZero14 ; CPU:$F7AC PRG:77AC F0 F4 inx ; CPU:$F7AE PRG:77AE E8 cpx #$C0 ; CPU:$F7AF PRG:77AF E0 C0 bne NmiHandler_OnZero14 ; CPU:$F7B1 PRG:77B1 D0 EF rts ; CPU:$F7B3 PRG:77B3 60 ; ---- data $F7B4-$FFFF (2124 bytes) ---- ; referenced by `lda $FA0C,y` at $C61B (operand $FA0C falls inside this region) ; referenced by `lda $FA0C,y` at $C621 (operand $FA0C falls inside this region) ; referenced by `lda $FA58,y` at $C631 (operand $FA58 falls inside this region) ; referenced by `lda $FA58,y` at $C642 (operand $FA58 falls inside this region) ; referenced by `lda $FA28,y` at $C682 (operand $FA28 falls inside this region) ; referenced by `lda $FA58,y` at $C6F6 (operand $FA58 falls inside this region) ; ... and 47 further references from decoded code SpriteOamEntryTable: .byte $42, $57, $1B, $65, $58, $1B, $60, $91, $1B, $3D, $82, $1B, $4A, $6F, $1B, $51 ; CPU:$F7B4 PRG:77B4 42 57 1B 65 58 1B 60 91 1B 3D 82 1B .byte $70, $1B, $58, $71, $1B, $9D, $28, $1B, $9D, $3B, $1B, $B0, $40, $1B, $BA, $2F ; CPU:$F7C4 PRG:77C4 70 1B 58 71 1B 9D 28 1B 9D 3B 1B B0 .byte $1B, $C9, $32, $1B, $DA, $3C, $1B, $EA, $3F, $1B, $46, $2E, $4B, $FF, $FF, $FF ; CPU:$F7D4 PRG:77D4 1B C9 32 1B DA 3C 1B EA 3F 1B 46 2E .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F7E4 PRG:77E4 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F7F4 PRG:77F4 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F804 PRG:7804 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F814 PRG:7814 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F824 PRG:7824 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $98, $22, $05, $19, $0A, $1E, $1C, $0E, $FF ; CPU:$F834 PRG:7834 FF FF FF FF FF FF FF 98 22 05 19 0A .byte $C8, $29, $01, $35, $08, $2A, $01, $35, $A8, $21, $07, $19, $15, $0A, $22, $0E ; CPU:$F844 PRG:7844 C8 29 01 35 08 2A 01 35 A8 21 07 19 .byte $1B, $24, $E7, $21, $09, $10, $0A, $16, $0E, $24, $18, $1F, $0E, $1B, $A7, $21 ; CPU:$F854 PRG:7854 1B 24 E7 21 09 10 0A 16 0E 24 18 1F .byte $05, $1C, $1D, $0A, $10, $0E, $E9, $21, $05, $1B, $0E, $0A, $0D, $22, $E9, $21 ; CPU:$F864 PRG:7864 05 1C 1D 0A 10 0E E9 21 05 1B 0E 0A .byte $05, $1C, $1D, $0A, $1B, $1D, $A3, $21, $11, $0C, $11, $0A, $15, $15, $0E, $17 ; CPU:$F874 PRG:7874 05 1C 1D 0A 1B 1D A3 21 11 0C 11 0A .byte $10, $12, $17, $10, $24, $1C, $1D, $0A, $10, $0E, $08, $21, $09, $19, $0E, $1B ; CPU:$F884 PRG:7884 10 12 17 10 24 1C 1D 0A 10 0E 08 21 .byte $0F, $0E, $0C, $1D, $24, $2A, $63, $21, $0E, $17, $1E, $16, $0B, $0E, $1B, $24 ; CPU:$F894 PRG:7894 0F 0E 0C 1D 24 2A 63 21 0E 17 1E 16 .byte $18, $0F, $24, $11, $12, $1D, $1C, $63, $21, $11, $A9, $21, $05, $0B, $18, $17 ; CPU:$F8A4 PRG:78A4 18 0F 24 11 12 1D 1C 63 21 11 A9 21 .byte $1E, $1C, $A5, $21, $0D, $1C, $19, $0E, $0C, $12, $0A, $15, $24, $0B, $18, $17 ; CPU:$F8B4 PRG:78B4 1E 1C A5 21 0D 1C 19 0E 0C 12 0A 15 .byte $1E, $1C, $E7, $21, $09, $01, $00, $00, $00, $00, $24, $19, $1D, $1C, $EA, $21 ; CPU:$F8C4 PRG:78C4 1E 1C E7 21 09 01 00 00 00 00 24 19 .byte $06, $00, $00, $24, $19, $1D, $1C, $E7, $21, $09, $48, $21, $0A, $27, $24, $1B ; CPU:$F8D4 PRG:78D4 06 00 00 24 19 1D 1C E7 21 09 48 21 .byte $0E, $1C, $1E, $15, $1D, $24, $27, $A1, $21, $0B, $1C, $11, $18, $1D, $1C, $24 ; CPU:$F8E4 PRG:78E4 0E 1C 1E 15 1D 24 27 A1 21 0B 1C 11 .byte $0F, $12, $1B, $0E, $0D, $01, $22, $0E, $17, $1E, $16, $0B, $0E, $1B, $24, $18 ; CPU:$F8F4 PRG:78F4 0F 12 1B 0E 0D 01 22 0E 17 1E 16 0B .byte $0F, $24, $11, $12, $1D, $1C, $61, $22, $0E, $11, $12, $1D, $26, $16, $12, $1C ; CPU:$F904 PRG:7904 0F 24 11 12 1D 1C 61 22 0E 11 12 1D .byte $1C, $24, $1B, $0A, $1D, $12, $18, $E0, $23, $06, $A0, $A0, $A0, $A0, $A0, $A0 ; CPU:$F914 PRG:7914 1C 24 1B 0A 1D 12 18 E0 23 06 A0 A0 .byte $D0, $23, $0D, $F5, $F5, $F5, $F5, $F5, $F5, $50, $50, $AA, $AA, $AA, $AA, $AA ; CPU:$F924 PRG:7924 D0 23 0D F5 F5 F5 F5 F5 F5 50 50 AA .byte $AA, $D0, $23, $0D, $FF, $FF, $FF, $FF, $FF, $FF, $50, $50, $FF, $FF, $FF, $FF ; CPU:$F934 PRG:7934 AA D0 23 0D FF FF FF FF FF FF 50 50 .byte $FF, $FF, $D0, $23, $0D, $55, $55, $55, $55, $55, $55, $50, $50, $5F, $5F, $5F ; CPU:$F944 PRG:7944 FF FF D0 23 0D 55 55 55 55 55 55 50 .byte $5F, $5F, $5F, $E0, $23, $06, $FF, $FF, $FF, $FF, $FF, $FF, $E4, $21, $10, $0F ; CPU:$F954 PRG:7954 5F 5F 5F E0 23 06 FF FF FF FF FF FF .byte $12, $10, $11, $1D, $0E, $1B, $24, $0C, $0A, $19, $1D, $1E, $1B, $0E, $0D, $00 ; CPU:$F964 PRG:7964 12 10 11 1D 0E 1B 24 0C 0A 19 1D 1E .byte $3F, $20, $0F, $16, $12, $30, $0F, $12, $28, $16, $0F, $16, $1A, $28, $0F, $01 ; CPU:$F974 PRG:7974 3F 20 0F 16 12 30 0F 12 28 16 0F 16 .byte $11, $21, $0F, $16, $12, $30, $0F, $12, $28, $16, $0F, $16, $1A, $28, $0F, $10 ; CPU:$F984 PRG:7984 11 21 0F 16 12 30 0F 12 28 16 0F 16 .byte $16, $16, $C0, $23, $38, $AA, $AA, $AA, $AA, $AA, $AA, $55, $55, $00, $00, $00 ; CPU:$F994 PRG:7994 16 16 C0 23 38 AA AA AA AA AA AA 55 .byte $00, $00, $00, $50, $50, $55, $55, $55, $55, $55, $55, $50, $50, $5F, $5F, $5F ; CPU:$F9A4 PRG:79A4 00 00 00 50 50 55 55 55 55 55 55 50 .byte $5F, $5F, $5F, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $FF, $FF, $FF ; CPU:$F9B4 PRG:79B4 5F 5F 5F 00 00 FF FF FF FF FF FF 00 .byte $FF, $FF, $FF, $55, $55, $FF, $FF, $FF, $FF, $FF, $FF, $55, $55, $C0, $2B, $38 ; CPU:$F9C4 PRG:79C4 FF FF FF 55 55 FF FF FF FF FF FF 55 .byte $05, $05, $05, $05, $05, $05, $05, $05, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F9D4 PRG:79D4 05 05 05 05 05 05 05 05 FF FF FF FF .byte $AA, $AA, $AA, $AA, $FA, $AA, $AA, $AA, $00, $00, $00, $00, $00, $00, $00, $00 ; CPU:$F9E4 PRG:79E4 AA AA AA AA FA AA AA AA 00 00 00 00 .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; CPU:$F9F4 PRG:79F4 00 00 00 00 00 00 00 00 00 00 00 00 .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $1A, $02, $1A, $00 ; CPU:$FA04 PRG:7A04 00 00 00 00 00 00 00 00 00 00 00 03 .byte $34, $00, $4E, $01, $68, $01, $82, $01, $9C, $02, $B6, $00, $D0, $00, $EA, $00 ; CPU:$FA14 PRG:7A14 34 00 4E 01 68 01 82 01 9C 02 B6 00 .byte $34, $01, $4E, $02, $EA, $EE, $F2, $EA, $EE, $F2, $EA, $EE, $F2, $EA, $EE, $F2 ; CPU:$FA24 PRG:7A24 34 01 4E 02 EA EE F2 EA EE F2 EA EE .byte $EA, $EE, $F2, $EA, $EE, $F2, $EA, $EE, $F2, $EA, $EE, $F2, $F6, $F6, $F8, $F8 ; CPU:$FA34 PRG:7A34 EA EE F2 EA EE F2 EA EE F2 EA EE F2 .byte $F8, $FA, $FA, $FA, $F8, $F8, $F8, $F6, $F6, $F6, $F8, $F8, $F8, $FA, $FA, $FA ; CPU:$FA44 PRG:7A44 F8 FA FA FA F8 F8 F8 F6 F6 F6 F8 F8 .byte $F8, $F8, $F8, $F6, $00, $02, $06, $0A, $0E, $12, $16, $92, $8E, $8A, $86, $82 ; CPU:$FA54 PRG:7A54 F8 F8 F8 F6 00 02 06 0A 0E 12 16 92 .byte $80, $C2, $C6, $CA, $CE, $D2, $56, $52, $4E, $4A, $46, $42, $B9, $BB, $03, $BD ; CPU:$FA64 PRG:7A64 80 C2 C6 CA CE D2 56 52 4E 4A 46 42 .byte $BB, $03, $BF, $BB, $01, $C1, $BB, $00, $C3, $BB, $02, $C5, $BB, $02, $C9, $CB ; CPU:$FA74 PRG:7A74 BB 03 BF BB 01 C1 BB 00 C3 BB 02 C5 .byte $02, $C7, $CB, $00, $00, $00, $03, $00, $00, $00, $00, $02, $00, $00, $00, $00 ; CPU:$FA84 PRG:7A84 02 C7 CB 00 00 00 03 00 00 00 00 02 .byte $01, $06, $00, $00, $00, $01, $05, $00, $00, $00, $01, $00, $00, $00, $00, $00 ; CPU:$FA94 PRG:7A94 01 06 00 00 00 01 05 00 00 00 01 00 .byte $08, $00, $00, $00, $00, $05, $00, $00, $00, $00, $04, $00, $00, $00, $00, $01 ; CPU:$FAA4 PRG:7AA4 08 00 00 00 00 05 00 00 00 00 04 00 .byte $06, $00, $00, $00, $01, $05, $00, $00, $00, $01, $00, $00, $00, $00, $00, $08 ; CPU:$FAB4 PRG:7AB4 06 00 00 00 01 05 00 00 00 01 00 00 .byte $00, $00, $00, $00, $05, $00, $01, $00, $00, $00, $2A, $28, $08, $11, $12, $26 ; CPU:$FAC4 PRG:7AC4 00 00 00 00 05 00 01 00 00 00 2A 28 .byte $1C, $0C, $18, $1B, $0E, $22, $28, $03, $01, $1E, $19, $34, $28, $03, $02, $1E ; CPU:$FAD4 PRG:7AD4 1C 0C 18 1B 0E 22 28 03 01 1E 19 34 .byte $19, $58, $20, $04, $11, $12, $10, $11, $79, $20, $05, $1C, $0C, $18, $1B, $0E ; CPU:$FAE4 PRG:7AE4 19 58 20 04 11 12 10 11 79 20 05 1C .byte $F8, $20, $03, $01, $1E, $19, $78, $21, $03, $02, $1E, $19, $11, $0E, $1B, $18 ; CPU:$FAF4 PRG:7AF4 F8 20 03 01 1E 19 78 21 03 02 1E 19 .byte $24, $32, $02, $46, $48, $1E, $02, $42, $44, $14, $02, $3E, $40, $0A, $02, $3A ; CPU:$FB04 PRG:7B04 24 32 02 46 48 1E 02 42 44 14 02 3E .byte $3C, $05, $01, $38, $39, $01, $01, $36, $37, $B9, $22, $05, $1C, $1D, $0A, $10 ; CPU:$FB14 PRG:7B14 3C 05 01 38 39 01 01 36 37 B9 22 05 .byte $0E, $0D, $3F, $03, $01, $11, $21, $0D, $3F, $03, $21, $01, $11, $0D, $3F, $03 ; CPU:$FB24 PRG:7B24 0E 0D 3F 03 01 11 21 0D 3F 03 21 01 .byte $11, $21, $01, $40, $22, $24, $4E, $4F, $50, $51, $24, $60, $22, $24, $52, $53 ; CPU:$FB34 PRG:7B34 11 21 01 40 22 24 4E 4F 50 51 24 60 .byte $54, $55, $24, $80, $22, $24, $56, $57, $58, $59, $24, $A0, $22, $24, $5A, $5B ; CPU:$FB44 PRG:7B44 54 55 24 80 22 24 56 57 58 59 24 A0 .byte $5C, $5D, $24, $C0, $22, $5E, $5F, $60, $61, $62, $63, $E0, $22, $64, $65, $66 ; CPU:$FB54 PRG:7B54 5C 5D 24 C0 22 5E 5F 60 61 62 63 E0 .byte $67, $68, $69, $00, $23, $6A, $6B, $6C, $6D, $6E, $6F, $C0, $23, $06, $AA, $AA ; CPU:$FB64 PRG:7B64 67 68 69 00 23 6A 6B 6C 6D 6E 6F C0 .byte $AA, $AA, $AA, $AA, $C0, $23, $06, $00, $00, $00, $00, $00, $00, $48, $58, $68 ; CPU:$FB74 PRG:7B74 AA AA AA AA C0 23 06 00 00 00 00 00 .byte $78, $00, $0A, $14, $1E, $28, $32, $3C, $32, $28, $1E, $14, $0A, $46, $50, $5A ; CPU:$FB84 PRG:7B84 78 00 0A 14 1E 28 32 3C 32 28 1E 14 .byte $64, $6E, $78, $82, $8C, $96, $8C, $82, $78, $6E, $64, $5A, $50, $1A, $1A, $12 ; CPU:$FB94 PRG:7B94 64 6E 78 82 8C 96 8C 82 78 6E 64 5A .byte $12, $12, $0A, $0A, $0A, $02, $02, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A ; CPU:$FBA4 PRG:7BA4 12 12 0A 0A 0A 02 02 2A 2A 2A 2A 2A .byte $2A, $19, $02, $0A, $12, $12, $12, $12, $1A, $03, $0B, $21, $31, $22, $2A, $2A ; CPU:$FBB4 PRG:7BB4 2A 19 02 0A 12 12 12 12 1A 03 0B 21 .byte $2A, $2A, $32, $23, $33, $18, $09, $19, $02, $0A, $1A, $03, $0B, $1B, $0C, $20 ; CPU:$FBC4 PRG:7BC4 2A 2A 32 23 33 18 09 19 02 0A 1A 03 .byte $30, $21, $31, $22, $32, $23, $33, $24, $34, $00, $10, $01, $11, $02, $1A, $13 ; CPU:$FBD4 PRG:7BD4 30 21 31 22 32 23 33 24 34 00 10 01 .byte $1B, $14, $1C, $28, $28, $28, $28, $28, $28, $28, $28, $28, $28, $01, $01, $01 ; CPU:$FBE4 PRG:7BE4 1B 14 1C 28 28 28 28 28 28 28 28 28 .byte $01, $01, $01, $01, $01, $01, $01, $29, $29, $29, $29, $29, $29, $29, $29, $29 ; CPU:$FBF4 PRG:7BF4 01 01 01 01 01 01 01 29 29 29 29 29 .byte $29, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $2A, $2A, $2A, $2A, $2A ; CPU:$FC04 PRG:7C04 29 02 02 02 02 02 02 02 02 02 02 2A .byte $2A, $2A, $2A, $2A, $2A, $03, $03, $03, $03, $03, $03, $03, $03, $03, $03, $2B ; CPU:$FC14 PRG:7C14 2A 2A 2A 2A 2A 03 03 03 03 03 03 03 .byte $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2B, $04, $04, $04, $04, $04, $04, $04 ; CPU:$FC24 PRG:7C24 2B 2B 2B 2B 2B 2B 2B 2B 2B 04 04 04 .byte $04, $04, $04, $2C, $2C, $2C, $2C, $2C, $2C, $2C, $2C, $2C, $2C, $1B, $2B, $39 ; CPU:$FC34 PRG:7C34 04 04 04 2C 2C 2C 2C 2C 2C 2C 2C 2C .byte $49, $59, $67, $77, $87, $95, $A5, $19, $29, $39, $49, $59, $69, $79, $89, $99 ; CPU:$FC44 PRG:7C44 49 59 67 77 87 95 A5 19 29 39 49 59 .byte $A9, $13, $25, $37, $49, $59, $69, $79, $8B, $9D, $AF, $0F, $22, $37, $49, $59 ; CPU:$FC54 PRG:7C54 A9 13 25 37 49 59 69 79 8B 9D AF 0F .byte $69, $79, $8A, $9F, $B2, $09, $1F, $33, $45, $57, $6B, $7D, $8F, $A3, $B7, $08 ; CPU:$FC64 PRG:7C64 69 79 8A 9F B2 09 1F 33 45 57 6B 7D .byte $1A, $2F, $42, $57, $6A, $7F, $92, $A7, $BA, $06, $19, $2D, $41, $57, $6B, $81 ; CPU:$FC74 PRG:7C74 1A 2F 42 57 6A 7F 92 A7 BA 06 19 2D .byte $93, $A9, $BB, $09, $19, $29, $39, $49, $59, $69, $79, $89, $99, $0D, $1D, $2D ; CPU:$FC84 PRG:7C84 93 A9 BB 09 19 29 39 49 59 69 79 89 .byte $3D, $4D, $5D, $6D, $7D, $8D, $9D, $11, $21, $31, $41, $51, $61, $71, $81, $91 ; CPU:$FC94 PRG:7C94 3D 4D 5D 6D 7D 8D 9D 11 21 31 41 51 .byte $A1, $15, $25, $35, $45, $55, $65, $75, $85, $95, $A5, $19, $29, $39, $49, $59 ; CPU:$FCA4 PRG:7CA4 A1 15 25 35 45 55 65 75 85 95 A5 19 .byte $69, $79, $89, $99, $A9, $1D, $2D, $3D, $4D, $5D, $6D, $7D, $8D, $9D, $AD, $21 ; CPU:$FCB4 PRG:7CB4 69 79 89 99 A9 1D 2D 3D 4D 5D 6D 7D .byte $31, $41, $51, $61, $71, $81, $91, $A1, $B1, $25, $35, $45, $55, $65, $75, $85 ; CPU:$FCC4 PRG:7CC4 31 41 51 61 71 81 91 A1 B1 25 35 45 .byte $95, $A5, $B5, $29, $39, $49, $59, $69, $79, $89, $99, $A9, $B9, $FF, $FF, $FF ; CPU:$FCD4 PRG:7CD4 95 A5 B5 29 39 49 59 69 79 89 99 A9 .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FCE4 PRG:7CE4 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FCF4 PRG:7CF4 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD04 PRG:7D04 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD14 PRG:7D14 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD24 PRG:7D24 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD34 PRG:7D34 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD44 PRG:7D44 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD54 PRG:7D54 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD64 PRG:7D64 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD74 PRG:7D74 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD84 PRG:7D84 FF FF FF FF FF FF FF FF FF FF FF FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$FD94 PRG:7D94 FF FF FF FF FF FF FF FF FF FF FF FF .byte $00, $00, $00, $00, $00, $02, $00, $00, $02, $02, $02, $02, $02, $02, $02, $04 ; CPU:$FDA4 PRG:7DA4 00 00 00 00 00 02 00 00 02 02 02 02 .byte $02, $02, $04, $04, $04, $04, $04, $04, $04, $05, $04, $02, $04, $04, $04, $05 ; CPU:$FDB4 PRG:7DB4 02 02 04 04 04 04 04 04 04 05 04 02 .byte $05, $05, $05, $05, $04, $09, $07, $0B, $08, $06, $0A, $97, $17, $14, $14, $94 ; CPU:$FDC4 PRG:7DC4 05 05 05 05 04 09 07 0B 08 06 0A 97 .byte $94, $97, $97, $17, $17, $97, $17, $15, $16, $95, $96, $98, $99, $18, $19, $97 ; CPU:$FDD4 PRG:7DD4 94 97 97 17 17 97 17 15 16 95 96 98 .byte $17, $14, $94, $94, $14, $17, $97, $97, $17, $00, $80, $01, $01, $81, $81, $80 ; CPU:$FDE4 PRG:7DE4 17 14 94 94 14 17 97 97 17 00 80 01 .byte $80, $00, $00, $02, $82, $03, $83, $03, $83, $82, $82, $02, $02, $04, $05, $06 ; CPU:$FDF4 PRG:7DF4 80 00 00 02 82 03 83 03 83 82 82 02 .byte $86, $06, $86, $04, $05, $84, $85, $07, $08, $09, $09, $89, $89, $07, $08, $87 ; CPU:$FE04 PRG:7E04 86 06 86 04 05 84 85 07 08 09 09 89 .byte $88, $0A, $0A, $0B, $0B, $8B, $8B, $0A, $0A, $8A, $8A, $0C, $0C, $0D, $8D, $0D ; CPU:$FE14 PRG:7E14 88 0A 0A 0B 0B 8B 8B 0A 0A 8A 8A 0C .byte $8D, $0C, $0C, $8C, $8C, $0E, $0E, $0F, $0F, $8F, $8F, $0E, $0E, $8E, $8E, $10 ; CPU:$FE24 PRG:7E24 8D 0C 0C 8C 8C 0E 0E 0F 0F 8F 8F 0E .byte $11, $12, $13, $92, $93, $10, $11, $90, $91, $53, $FE, $5D, $FE, $5D, $FE, $53 ; CPU:$FE34 PRG:7E34 11 12 13 92 93 10 11 90 91 53 FE 5D .byte $FE, $67, $FE, $71, $FE, $7B, $FE, $85, $FE, $71, $FE, $85, $FE, $5D, $FE, $08 ; CPU:$FE44 PRG:7E44 FE 67 FE 71 FE 7B FE 85 FE 71 FE 85 .byte $00, $08, $08, $08, $08, $08, $08, $08, $08, $08, $00, $08, $00, $08, $00, $08 ; CPU:$FE54 PRG:7E54 00 08 08 08 08 08 08 08 08 08 00 08 .byte $00, $08, $00, $08, $00, $08, $00, $08, $00, $08, $08, $08, $08, $08, $08, $08 ; CPU:$FE64 PRG:7E64 00 08 00 08 00 08 00 08 00 08 08 08 .byte $00, $08, $00, $08, $08, $08, $08, $08, $00, $08, $08, $08, $08, $08, $00, $08 ; CPU:$FE74 PRG:7E74 00 08 00 08 08 08 08 08 00 08 08 08 .byte $00, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $34, $14, $00, $00, $35 ; CPU:$FE84 PRG:7E84 00 08 08 08 08 08 08 08 08 08 08 34 .byte $15, $44, $24, $45, $25, $00, $00, $FE, $03, $13, $04, $16, $00, $00, $05, $23 ; CPU:$FE94 PRG:7E94 15 44 24 45 25 00 00 FE 03 13 04 16 .byte $00, $00, $06, $26, $FE, $00, $00, $17, $11, $18, $12, $00, $00, $27, $21, $28 ; CPU:$FEA4 PRG:7EA4 00 00 06 26 FE 00 00 17 11 18 12 00 .byte $22, $FE, $36, $32, $37, $00, $00, $33, $46, $42, $00, $00, $47, $43, $FE, $30 ; CPU:$FEB4 PRG:7EB4 22 FE 36 32 37 00 00 33 46 42 00 00 .byte $38, $31, $39, $00, $00, $40, $48, $41, $49, $00, $00, $01, $FF, $03, $06, $05 ; CPU:$FEC4 PRG:7EC4 38 31 39 00 00 40 48 41 49 00 00 01 .byte $04, $40, $49, $48, $41, $42, $47, $46, $43, $44, $45, $30, $39, $38, $31, $32 ; CPU:$FED4 PRG:7ED4 04 40 49 48 41 42 47 46 43 44 45 30 .byte $37, $36, $33, $34, $35, $28, $21, $22, $27, $26, $23, $24, $25, $18, $11, $12 ; CPU:$FEE4 PRG:7EE4 37 36 33 34 35 28 21 22 27 26 23 24 .byte $17, $16, $13, $14, $15, $90, $F4, $AB, $F4, $C6, $F4, $DF, $F4, $09, $F5, $EE ; CPU:$FEF4 PRG:7EF4 17 16 13 14 15 90 F4 AB F4 C6 F4 DF .byte $F4, $24, $F5, $67, $F5, $44, $F5, $8A, $F5, $CF, $F5, $EC, $F5, $1A, $F6, $5C ; CPU:$FF04 PRG:7F04 F4 24 F5 67 F5 44 F5 8A F5 CF F5 EC .byte $F6, $97, $F6, $B9, $F6, $D8, $F6, $18, $F7, $5D, $F7, $76, $F7, $72, $F2, $99 ; CPU:$FF14 PRG:7F14 F6 97 F6 B9 F6 D8 F6 18 F7 5D F7 76 .byte $F2, $84, $F2, $AD, $F2, $C0, $F2, $D5, $F2, $34, $F3, $34, $F3, $34, $F3, $34 ; CPU:$FF24 PRG:7F24 F2 84 F2 AD F2 C0 F2 D5 F2 34 F3 34 .byte $F3, $71, $F3, $71, $F3, $E9, $F3, $06, $F4, $1F, $F4, $90, $F3, $52, $F3, $38 ; CPU:$FF34 PRG:7F34 F3 71 F3 71 F3 E9 F3 06 F4 1F F4 90 .byte $F4, $43, $F4, $5D, $F4, $74, $F4, $EC, $F2, $1C, $F3, $0A, $F3, $26, $F3, $F8 ; CPU:$FF44 PRG:7F44 F4 43 F4 5D F4 74 F4 EC F2 1C F3 0A .byte $F2, $30, $F3, $41, $F3, $04, $E8, $E9, $EB, $EF, $F4, $FA, $00, $06, $0C, $11 ; CPU:$FF54 PRG:7F54 F2 30 F3 41 F3 04 E8 E9 EB EF F4 FA .byte $15, $17, $18, $17, $15, $11, $0C, $06, $00, $FA, $F4, $EF, $EB, $E9, $E8, $E9 ; CPU:$FF64 PRG:7F64 15 17 18 17 15 11 0C 06 00 FA F4 EF .byte $EB, $EF, $F4, $FA, $00, $06, $E0, $E1, $E4, $E9, $F0, $F8, $00, $08, $10, $17 ; CPU:$FF74 PRG:7F74 EB EF F4 FA 00 06 E0 E1 E4 E9 F0 F8 .byte $1C, $1F, $20, $1F, $1C, $17, $10, $08, $00, $F8, $F0, $E9, $E4, $E1, $E0, $E1 ; CPU:$FF84 PRG:7F84 1C 1F 20 1F 1C 17 10 08 00 F8 F0 E9 .byte $E4, $E9, $F0, $F8, $00, $08, $D8, $D9, $DD, $E4, $EC, $F6, $00, $0A, $14, $1C ; CPU:$FF94 PRG:7F94 E4 E9 F0 F8 00 08 D8 D9 DD E4 EC F6 .byte $23, $27, $28, $27, $23, $1C, $14, $0A, $00, $F6, $EC, $E4, $DD, $D9, $D8, $D9 ; CPU:$FFA4 PRG:7FA4 23 27 28 27 23 1C 14 0A 00 F6 EC E4 .byte $DD, $E4, $EC, $F6, $00, $0A, $CC, $CE, $D3, $DB, $E6, $F3, $00, $0D, $1A, $25 ; CPU:$FFB4 PRG:7FB4 DD E4 EC F6 00 0A CC CE D3 DB E6 F3 .byte $2D, $32, $34, $32, $2D, $25, $1A, $0D, $00, $F3, $E6, $DB, $D3, $CE, $CC, $CE ; CPU:$FFC4 PRG:7FC4 2D 32 34 32 2D 25 1A 0D 00 F3 E6 DB .byte $D3, $DB, $E6, $F3, $00, $0D, $C0, $C2, $C9, $D3, $E0, $EF, $00, $11, $20, $2D ; CPU:$FFD4 PRG:7FD4 D3 DB E6 F3 00 0D C0 C2 C9 D3 E0 EF .byte $37, $3E, $40, $3E, $37, $2D, $20, $11, $00, $EF, $E0, $D3, $C9, $C2, $C0, $C2 ; CPU:$FFE4 PRG:7FE4 37 3E 40 3E 37 2D 20 11 00 EF E0 D3 .byte $C9, $D3, $E0, $EF, $00, $10, $C8, $C0, $00, $C0, $00, $C0 ; CPU:$FFF4 PRG:7FF4 C9 D3 E0 EF 00 10 C8 C0 00 C0 00 C0