Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
Dragon Warrior II (NES)/ROM map/ASM bank 07: Difference between revisions
Jump to navigation
Jump to search
(→top) |
m (Hawk moved page Dragon Warrior II//ROM map/ASM bank 07 to Dragon Warrior II (NES)//ROM map/ASM bank 07) |
(No difference)
|
Revision as of 21:09, 28 January 2024
This is a sub-page of Dragon Warrior II (NES)/ROM map.
- bank 0x07 of 16 starts at file address 0x01C010
; code bytes: $085C (13.06% of bytes in this ROM bank) ; data bytes: $03AE (5.75% of bytes in this ROM bank) ; pcm bytes: $0000 (0.00% of bytes in this ROM bank) ; chr bytes: $0000 (0.00% of bytes in this ROM bank) ; free bytes: $33C4 (80.88% of bytes in this ROM bank) ; unknown bytes: $0032 (0.31% of bytes in this ROM bank) ; $0C0A bytes last seen in RAM bank $8000 - $BFFF (100.00% of bytes seen in this ROM bank, 18.81% of bytes in this ROM bank): ; $085C code bytes (69.44% of bytes seen in this RAM bank, 13.06% of bytes in this ROM bank) ; $03AE data bytes (30.56% of bytes seen in this RAM bank, 5.75% of bytes in this ROM bank) ; PRG Bank 0x07: Moonbrooke prologue + some extra text engine control code handlers ; [bank start] -> data ; from $0F:$C6DE ; possible external indexed data load target (from $0F:$F3ED, $0F:$FF28) ; external indirect data load target (via $0F:$C6DE) 0x01C010|$07:$8000:95 ; possible external indexed data load target (from $0F:$F3F2, $0F:$FF2D) 0x01C011|$07:$8001: 81 ; $07:$8195 0x01C012|$07:$8002:00 00 ; $07:$0000 ; -> $07:$87F1: given monster count in $8F singular monster name in $6119, and monster name length in X, print appropriate singluar/plural monster name to $60F1 ; external indirect data load target (via $02:$BE2F) 0x01C014|$07:$8004:F1 87 ; $07:$87F1; given monster count in $8F singular monster name in $6119, and monster name length in X, print appropriate singluar/plural monster name to $60F1 ; -> $07:$87D8: if $8F-$90 == #$0001, print "s" + [end-FA] to $60F1 and SEC, else LDA [end-FA] and CLC ; external indirect data load target (via $02:$BE37) 0x01C016|$07:$8006:D8 87 ; $07:$87D8; if $8F-$90 == #$0001, print "s" + [end-FA] to $60F1 and SEC, else LDA [end-FA] and CLC ; data -> unknown 0x01C018|$07:$8008:FF ; INVALID OPCODE 0x01C019|$07:$8009:FF ; INVALID OPCODE 0x01C01A|$07:$800A:FF ; INVALID OPCODE 0x01C01B|$07:$800B:FF ; INVALID OPCODE 0x01C01C|$07:$800C:FF ; INVALID OPCODE 0x01C01D|$07:$800D:FF ; INVALID OPCODE 0x01C01E|$07:$800E:FF ; INVALID OPCODE 0x01C01F|$07:$800F:FF ; INVALID OPCODE ; unknown -> data ; motion script for granddaughter in Lianport, part 1 ; external indirect data load target (via $0F:$C937) ; indirect data load target 0x01C020|$07:$8010:03 02 02 02 02 01 01 FF ; motion script for Lianport Gremlin #2 ; external indirect data load target (via $0F:$C957) ; indirect data load target 0x01C028|$07:$8018:01 02 02 02 FF ; motion script for Lianport Gremlin #1 ; external indirect data load target (via $0F:$C950) ; indirect data load target 0x01C02D|$07:$801D:02 02 01 0A FF ; motion script for granddaughter in Lianport, part 2 ; external indirect data load target (via $0F:$C9B7) ; indirect data load target 0x01C032|$07:$8022:01 01 01 01 01 01 01 01 01 01 01 08 FF ; motion script for granddaughter in Lianport, part 3 (from left) ; external indirect data load target (via $0F:$CA01) ; indirect data load target 0x01C03F|$07:$802F:01 02 0B FF ; motion script for granddaughter in Lianport, part 3 (from right) ; external indirect data load target (via $0F:$CA0A) 0x01C043|$07:$8033:03 09 FF ; motion script for grandfather in Lianport, part 1 (from left or bottom) ; external indirect data load target (via $0F:$CA1A) ; indirect data load target 0x01C046|$07:$8036:02 0B FF ; motion script for grandfather in Lianport, part 1 (from bottom) ; external indirect data load target (via $0F:$CA27) 0x01C049|$07:$8039:02 0A FF ; motion script for grandfather in Lianport, part 1 (from right) ; external indirect data load target (via $0F:$CA30) 0x01C04C|$07:$803C:02 09 FF ; motion script for grandfather in Lianport, part 2 ; external indirect data load target (via $0F:$CA41) ; indirect data load target 0x01C04F|$07:$803F:00 ; motion script for grandfather in Lianport, part 3 ; external indirect data load target (via $0F:$CCA7) 0x01C050|$07:$8040: 00 03 09 FF ; motion script for guard #1, Shrine SW of Cannock ; external indirect data load target (via $0F:$CA6B) ; indirect data load target 0x01C054|$07:$8044:01 08 FF ; motion script for guard #1, Shrine SW of Cannock ; external indirect data load target (via $0F:$CA64) ; indirect data load target 0x01C057|$07:$8047:03 08 FF ; motion script for King Midenhall, Lighthouse Wizard part 1 ; external indirect data load target (via $0F:$C862, $0F:$CB59) ; indirect data load target 0x01C05A|$07:$804A:02 02 02 02 FF ; motion script for Saber Lion, Osterfair ; external indirect data load target (via $0F:$CAEE) ; indirect data load target 0x01C05F|$07:$804F:01 01 ; motion script for dog in Zahan, triggered from left/top ; external indirect data load target (via $0F:$CB29) 0x01C061|$07:$8051: 01 01 01 FF ; motion script for Cannock and Moonbrooke, ending part 3, dog in Zahan, triggered from right ; external indirect data load target (via $06:$BB9C, $06:$BBA3, $0F:$CB12) ; indirect data load target 0x01C065|$07:$8055:00 00 00 FF ; motion script for Lighthouse Wizard part 2 ; external indirect data load target (via $0F:$CB9C) ; indirect data load target 0x01C069|$07:$8059:02 02 02 02 03 03 02 03 03 03 03 03 02 02 03 03 03 02 02 03 03 03 03 09 FF ; motion script for Lighthouse Wizard part 3 ; external indirect data load target (via $0F:$CEC7, $0F:$CF54) ; indirect data load target 0x01C082|$07:$8072:02 01 01 01 01 01 01 01 01 02 01 01 01 01 01 01 01 01 01 0B FF ; motion script for Lighthouse Wizard part 4 ; external indirect data load target (via $0F:$CF56) ; indirect data load target 0x01C097|$07:$8087:00 01 00 00 00 00 00 00 00 0A FF ; motion script for Lighthouse Wizard part 5 ; external indirect data load target (via $0F:$CF58) ; indirect data load target 0x01C0A2|$07:$8092:02 02 02 02 02 02 03 03 02 02 03 03 09 FF ; motion script for Lighthouse Wizard part 6 ; external indirect data load target (via $0F:$CF5A) ; indirect data load target 0x01C0B0|$07:$80A0:01 01 01 01 01 01 01 01 01 01 00 00 00 00 00 00 00 0A FF ; motion script for Lighthouse Wizard part 7 ; external indirect data load target (via $0F:$CF5C) ; indirect data load target 0x01C0C3|$07:$80B3:02 02 02 03 03 03 03 03 00 00 00 ; motion script for top 2 guards, ending part 2 ; external indirect data load target (via $06:$BB88, $06:$BB8F) ; indirect data load target 0x01C0CE|$07:$80BE:00 0A FF ; motion script for guard #2 part 9, prologue ; external indirect data load target (via $0F:$C834) ; indirect data load target 0x01C0D1|$07:$80C1:00 08 08 08 00 08 08 08 00 FF ; motion script for Evil Clown #1, Sea Cave B5 ; external indirect data load target (via $0F:$CC7E) ; indirect data load target 0x01C0DB|$07:$80CB:03 03 FF ; indirect data load target 0x01C0DE|$07:$80CE:03 ; motion script for Moonbrooke, ending part 1 (not turned) ; external indirect data load target (via $06:$BAE4) ; indirect data load target 0x01C0DF|$07:$80CF:03 09 09 09 FF ; indirect data load target 0x01C0E4|$07:$80D4:01 ; motion script for Moonbrooke, ending part 1 (turned) ; external indirect data load target (via $06:$BAD1) ; indirect data load target 0x01C0E5|$07:$80D5:01 0B 0B 0B FF ; indirect data load target 0x01C0EA|$07:$80DA:01 ; motion script for Cannock, ending part 1 ; external indirect data load target (via $06:$BADA) ; indirect data load target 0x01C0EB|$07:$80DB:01 00 0B 0B 0B FF ; motion script for guard #1 zig-zag to King, prologue ; indirect data load target (via $822F) 0x01C0F1|$07:$80E1:00 00 00 01 01 00 00 01 00 00 00 ; motion script for monster #1 walk to King, prologue ; indirect data load target (via $8276) 0x01C0FC|$07:$80EC: 01 01 08 FF ; motion script for guard #1 walk left into ambush, prologue ; indirect data load target (via $8240) 0x01C100|$07:$80F0:03 FF ; motion script for King and Princess part 1, prologue ; indirect data load target (via $82D0) 0x01C102|$07:$80F2:03 02 02 01 01 02 02 09 FF ; motion script for King and Princess part 2, prologue ; indirect data load target (via $82F3) 0x01C10B|$07:$80FB:01 ; motion script for facing left (monster #2, guard #2 part 4, prologue) ; indirect data load target (via $8372, $8501) 0x01C10C|$07:$80FC: 0B FF ; data -> unknown 0x01C10E|$07:$80FE:03 ; INVALID OPCODE ; unknown -> data ; motion script for King part 1, prologue ; indirect data load target (via $832E) 0x01C10F|$07:$80FF:00 00 03 03 FF ; motion script for King part 2, prologue ; indirect data load target (via $835D) 0x01C114|$07:$8104:09 FF ; motion script for monster #2, prologue ; indirect data load target (via $8383) 0x01C116|$07:$8106:00 00 03 FF ; motion script for guard #2 part 1, prologue ; indirect data load target (via $8461) 0x01C11A|$07:$810A:09 09 09 09 09 09 09 09 09 09 01 09 01 09 01 09 01 09 01 0A 02 0A 02 0A 02 0A 02 0A 02 FF ; motion script for monster #3, prologue ; indirect data load target (via $849A) 0x01C138|$07:$8128:09 08 FF ; motion script for guard #2 part 2, prologue ; indirect data load target (via $84D3) 0x01C13B|$07:$812B:02 0A 02 0A 02 0A 02 FF ; motion script for guard #2 part 7, prologue ; indirect data load target (via $855E) 0x01C143|$07:$8133:00 08 08 00 08 08 00 08 08 08 00 08 08 08 00 08 08 08 08 00 FF ; motion script for left guard, prologue ; indirect data load target (via $857D) 0x01C158|$07:$8148:01 02 02 09 FF ; motion script for right guard, prologue ; indirect data load target (via $8576) 0x01C15D|$07:$814D:03 02 02 0B FF ; data -> unknown 0x01C162|$07:$8152:08 ; PHP 0x01C163|$07:$8153:FF ; INVALID OPCODE ; unknown -> data ; motion script for guard #2 part 8, prologue ; indirect data load target (via $85EC) 0x01C164|$07:$8154:00 FF ; motion script for left and right guards, prologue ; indirect data load target (via $85B8, $85BF) 0x01C166|$07:$8156:00 FF ; motion script for guard #2 part 3, prologue ; indirect data load target (via $84F4) 0x01C168|$07:$8158:09 01 09 09 01 09 09 09 01 09 09 09 09 01 FF ; motion script for guard #2 part 5, prologue ; indirect data load target (via $851A) 0x01C177|$07:$8167:0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 01 09 01 09 01 09 01 09 FF ; motion script for Princess, prologue ; indirect data load target (via $83F9) 0x01C18E|$07:$817E:03 00 00 03 FF ; motion script for guard #2 part 6, prologue ; indirect data load target (via $8531) 0x01C193|$07:$8183:01 09 01 09 02 0A 01 09 01 09 02 0A 01 09 02 0A 01 FF ; data -> code ; from $0F:$C6DE via $8000 ; indirect control flow target (via $8000) 0x01C1A5|$07:$8195:20 B2 81 JSR $81B2 ; probably this displays the prologue 0x01C1A8|$07:$8198:20 CE 81 JSR $81CE 0x01C1AB|$07:$819B:20 D9 81 JSR $81D9 0x01C1AE|$07:$819E:20 EA 81 JSR $81EA 0x01C1B1|$07:$81A1:A9 00 LDA #$00 0x01C1B3|$07:$81A3:8D AD 61 STA $61AD 0x01C1B6|$07:$81A6:8D D4 05 STA $05D4 ; NPC #$13 X-pos 0x01C1B9|$07:$81A9:8D D5 05 STA $05D5 ; NPC #$13 Y-pos 0x01C1BC|$07:$81AC:A9 6F LDA #$6F 0x01C1BE|$07:$81AE:8D 3B 05 STA $053B 0x01C1C1|$07:$81B1:60 RTS ; probably this displays the prologue ; control flow target (from $8195) 0x01C1C2|$07:$81B2:A9 07 LDA #$07 0x01C1C4|$07:$81B4:85 94 STA $94 ; return bank for various function calls, doubles as index of selected option for multiple-choice menus 0x01C1C6|$07:$81B6:A9 FF LDA #$FF 0x01C1C8|$07:$81B8:85 8E STA $8E ; flag for in battle or not (#$FF)? ; call to code in a different bank ($0F:$C468) 0x01C1CA|$07:$81BA:20 68 C4 JSR $C468 ; set every 4th byte of $0200 - $02FC to #$F0 ; call to code in a different bank ($0F:$C42A) 0x01C1CD|$07:$81BD:20 2A C4 JSR $C42A ; call to code in a different bank ($0F:$C446) 0x01C1D0|$07:$81C0:20 46 C4 JSR $C446 ; turn screen off, write $800 [space] tiles to PPU $2000, turn screen on ; call to code in a different bank ($0F:$C1DC) 0x01C1D3|$07:$81C3:20 DC C1 JSR $C1DC ; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF ; call to code in a different bank ($0F:$C577) 0x01C1D6|$07:$81C6:20 77 C5 JSR $C577 ; set $6144 to #$05 0x01C1D9|$07:$81C9:A2 1E LDX #$1E ; call to code in a different bank ($0F:$C1EE) 0x01C1DB|$07:$81CB:4C EE C1 JMP $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF ; control flow target (from $8198) ; call to code in a different bank ($0F:$FF60) 0x01C1DE|$07:$81CE:20 60 FF JSR $FF60 0x01C1E1|$07:$81D1:E6 8E INC $8E ; flag for in battle or not (#$FF)? 0x01C1E3|$07:$81D3:20 E4 88 JSR $88E4 ; call to code in a different bank ($0F:$C42A) 0x01C1E6|$07:$81D6:4C 2A C4 JMP $C42A ; control flow target (from $819B) 0x01C1E9|$07:$81D9:A9 FF LDA #$FF 0x01C1EB|$07:$81DB:8D AD 61 STA $61AD 0x01C1EE|$07:$81DE:A9 01 LDA #$01 0x01C1F0|$07:$81E0:8D 41 05 STA $0541 ; NPC #$00 sprite ID 0x01C1F3|$07:$81E3:A9 08 LDA #$08 0x01C1F5|$07:$81E5:85 48 STA $48 ; last save point ID ; call to code in a different bank ($0F:$FF5A) 0x01C1F7|$07:$81E7:4C 5A FF JMP $FF5A ; control flow target (from $819E) 0x01C1FA|$07:$81EA:A9 FF LDA #$FF 0x01C1FC|$07:$81EC:85 35 STA $35 ; flag indicating whether any menu is currently open 0x01C1FE|$07:$81EE:A2 14 LDX #$14 ; call to code in a different bank ($0F:$C1EE) 0x01C200|$07:$81F0:20 EE C1 JSR $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF ; call to code in a different bank ($0F:$F6EA) 0x01C203|$07:$81F3:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C206|$07:$81F6:7D ; String ID #$007D: There one day the King and his daughter were talking in a courtyard of the castle when the long years of peace ended suddenly![end-FC] ; data -> code 0x01C207|$07:$81F7:A2 3C LDX #$3C ; call to code in a different bank ($0F:$C1EE) 0x01C209|$07:$81F9:20 EE C1 JSR $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF ; call to code in a different bank ($0F:$D0F5) 0x01C20C|$07:$81FC:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$C577) 0x01C20F|$07:$81FF:20 77 C5 JSR $C577 ; set $6144 to #$05 0x01C212|$07:$8202:20 7D 86 JSR $867D ; set $6007 = #$00, set $00 = #$01, wait for #$50 interrupts, set $00 = #$FF 0x01C215|$07:$8205:A9 00 LDA #$00 ; Music ID #$00: BGM off ; call to code in a different bank ($0F:$C561) 0x01C217|$07:$8207:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) 0x01C21A|$07:$820A:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C21D|$07:$820D:20 82 86 JSR $8682 0x01C220|$07:$8210:20 82 86 JSR $8682 0x01C223|$07:$8213:20 7D 86 JSR $867D ; set $6007 = #$00, set $00 = #$01, wait for #$50 interrupts, set $00 = #$FF 0x01C226|$07:$8216:A9 17 LDA #$17 ; Music ID #$17: normal battle BGM ; call to code in a different bank ($0F:$C561) 0x01C228|$07:$8218:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) 0x01C22B|$07:$821B:20 5A 86 JSR $865A 0x01C22E|$07:$821E:E6 35 INC $35 ; flag indicating whether any menu is currently open 0x01C230|$07:$8220:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF ; call to code in a different bank ($0F:$F6EA) 0x01C233|$07:$8223:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C236|$07:$8226:7E ; String ID #$007E: ‘What in the world is happening?’ cried the King.[end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C237|$07:$8227:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$CCF1) 0x01C23A|$07:$822A:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C23D|$07:$822D:84 ; indirect data load target 0x01C23E|$07:$822E:20 ; indirect data load target 0x01C23F|$07:$822F:E1 80 ; $07:$80E1; motion script for guard #1 zig-zag to King, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C241|$07:$8231:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$F6EA) 0x01C244|$07:$8234:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C247|$07:$8237:7F ; String ID #$007F: ‘Majesty,’ said the King's Guard.[wait][line]‘The castle is besieged by the forces of Hargon, the wizard!’[wait][line]‘Hargon is here?’ asked the King.[wait][line]‘Alas, sire, it is so[.’][wait][line]‘Then we must ride forth and do battle, for these castle walls shall not stand long against the evil magic of Hargon[.’] pronounced the King.[end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C248|$07:$8238:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$CCF1) 0x01C24B|$07:$823B:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C24E|$07:$823E:84 ; indirect data load target 0x01C24F|$07:$823F:23 ; indirect data load target 0x01C250|$07:$8240:F0 80 ; $07:$80F0; motion script for guard #1 walk left into ambush, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C252|$07:$8242:20 84 FF JSR $FF84 0x01C255|$07:$8245:A9 05 LDA #$05 0x01C257|$07:$8247:8D 8B 60 STA $608B 0x01C25A|$07:$824A:8D 8F 60 STA $608F 0x01C25D|$07:$824D:A9 0B LDA #$0B 0x01C25F|$07:$824F:8D 90 60 STA $6090 0x01C262|$07:$8252:A9 01 LDA #$01 0x01C264|$07:$8254:20 98 86 JSR $8698 0x01C267|$07:$8257:20 75 86 JSR $8675 0x01C26A|$07:$825A:20 20 86 JSR $8620 0x01C26D|$07:$825D:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C270|$07:$8260:20 1B 86 JSR $861B 0x01C273|$07:$8263:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C276|$07:$8266:A9 04 LDA #$04 0x01C278|$07:$8268:20 28 86 JSR $8628 0x01C27B|$07:$826B:20 3C 86 JSR $863C 0x01C27E|$07:$826E:20 75 86 JSR $8675 ; call to code in a different bank ($0F:$CCF1) 0x01C281|$07:$8271:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C284|$07:$8274:85 ; indirect data load target 0x01C285|$07:$8275:21 ; indirect data load target 0x01C286|$07:$8276:EC 80 ; $07:$80EC; motion script for monster #1 walk to King, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C288|$07:$8278:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$F6EA) 0x01C28B|$07:$827B:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C28E|$07:$827E:80 ; String ID #$0080: ‘Hargon shall not rule unopposed!’[end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C28F|$07:$827F:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 0x01C292|$07:$8282:A9 F7 LDA #$F7 0x01C294|$07:$8284:8D 3B 05 STA $053B 0x01C297|$07:$8287:A9 07 LDA #$07 0x01C299|$07:$8289:8D 5C 05 STA $055C ; NPC #$04 X-pos 0x01C29C|$07:$828C:A9 0A LDA #$0A 0x01C29E|$07:$828E:8D 5D 05 STA $055D ; NPC #$04 Y-pos ; call to code in a different bank ($0F:$FF8A) 0x01C2A1|$07:$8291:20 8A FF JSR $FF8A 0x01C2A4|$07:$8294:20 16 86 JSR $8616 0x01C2A7|$07:$8297:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C2AA|$07:$829A:A9 01 LDA #$01 0x01C2AC|$07:$829C:20 28 86 JSR $8628 0x01C2AF|$07:$829F:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C2B2|$07:$82A2:A9 6F LDA #$6F 0x01C2B4|$07:$82A4:8D 3B 05 STA $053B 0x01C2B7|$07:$82A7:A9 64 LDA #$64 0x01C2B9|$07:$82A9:8D 5C 05 STA $055C ; NPC #$04 X-pos 0x01C2BC|$07:$82AC:A9 64 LDA #$64 0x01C2BE|$07:$82AE:8D 5D 05 STA $055D ; NPC #$04 Y-pos ; call to code in a different bank ($0F:$FF8A) 0x01C2C1|$07:$82B1:20 8A FF JSR $FF8A 0x01C2C4|$07:$82B4:20 11 86 JSR $8611 0x01C2C7|$07:$82B7:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C2CA|$07:$82BA:20 1B 86 JSR $861B 0x01C2CD|$07:$82BD:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C2D0|$07:$82C0:A9 05 LDA #$05 0x01C2D2|$07:$82C2:20 32 86 JSR $8632 0x01C2D5|$07:$82C5:20 3C 86 JSR $863C 0x01C2D8|$07:$82C8:20 75 86 JSR $8675 ; call to code in a different bank ($0F:$CCF1) 0x01C2DB|$07:$82CB:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C2DE|$07:$82CE:82 ; indirect data load target 0x01C2DF|$07:$82CF:23 ; indirect data load target 0x01C2E0|$07:$82D0:F2 80 ; $07:$80F2; motion script for King and Princess part 1, prologue ; data -> code 0x01C2E2|$07:$82D2:A9 00 LDA #$00 0x01C2E4|$07:$82D4:20 29 87 JSR $8729 0x01C2E7|$07:$82D7:A9 03 LDA #$03 0x01C2E9|$07:$82D9:8D 40 05 STA $0540 ; NPC #$00 ? + direction nybble ; call to code in a different bank ($0F:$FF8A) 0x01C2EC|$07:$82DC:20 8A FF JSR $FF8A 0x01C2EF|$07:$82DF:20 75 86 JSR $8675 0x01C2F2|$07:$82E2:A9 02 LDA #$02 ; call to code in a different bank ($0F:$FC50) 0x01C2F4|$07:$82E4:20 50 FC JSR $FC50 ; print name of hero given by low 2 bits of A to $6119, terminated by #$FA ; call to code in a different bank ($0F:$F6EA) 0x01C2F7|$07:$82E7:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C2FA|$07:$82EA:81 ; String ID #$0081: [no voice]Then the King spoke[line][no voice]to the Princess:[wait][line]‘Thy life is in danger, my daughter. Hide thyself now, and whatever happens to me thou must be strong[.’][wait][line]‘But Father!’ cried the Princess.[wait][line]‘Hurry,’ commanded the King.[wait][line]‘I must go to warn my cousin, the King of Midenhall[.’][end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C2FB|$07:$82EB:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$CCF1) 0x01C2FE|$07:$82EE:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C301|$07:$82F1:82 ; indirect data load target 0x01C302|$07:$82F2:21 ; indirect data load target 0x01C303|$07:$82F3:FB 80 ; $07:$80FB; motion script for King and Princess part 2, prologue ; data -> code 0x01C305|$07:$82F5:A9 01 LDA #$01 0x01C307|$07:$82F7:20 29 87 JSR $8729 0x01C30A|$07:$82FA:4C 1A 83 JMP $831A 0x01C30D|$07:$82FD:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF 0x01C310|$07:$8300:A9 02 LDA #$02 0x01C312|$07:$8302:20 43 86 JSR $8643 0x01C315|$07:$8305:20 75 86 JSR $8675 0x01C318|$07:$8308:A9 F7 LDA #$F7 0x01C31A|$07:$830A:8D 3B 05 STA $053B 0x01C31D|$07:$830D:A9 09 LDA #$09 0x01C31F|$07:$830F:8D 5C 05 STA $055C ; NPC #$04 X-pos 0x01C322|$07:$8312:A9 0E LDA #$0E 0x01C324|$07:$8314:8D 5D 05 STA $055D ; NPC #$04 Y-pos 0x01C327|$07:$8317:4C 05 84 JMP $8405 ; control flow target (from $82FA) 0x01C32A|$07:$831A:A9 F7 LDA #$F7 0x01C32C|$07:$831C:8D 3B 05 STA $053B 0x01C32F|$07:$831F:A9 09 LDA #$09 0x01C331|$07:$8321:8D 5C 05 STA $055C ; NPC #$04 X-pos 0x01C334|$07:$8324:A9 0E LDA #$0E 0x01C336|$07:$8326:8D 5D 05 STA $055D ; NPC #$04 Y-pos ; call to code in a different bank ($0F:$CCF1) 0x01C339|$07:$8329:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C33C|$07:$832C:81 ; indirect data load target 0x01C33D|$07:$832D:20 ; indirect data load target 0x01C33E|$07:$832E:FF 80 ; $07:$80FF; motion script for King part 1, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C340|$07:$8330:20 84 FF JSR $FF84 0x01C343|$07:$8333:A9 05 LDA #$05 0x01C345|$07:$8335:8D 81 05 STA $0581 ; NPC #$08 sprite ID 0x01C348|$07:$8338:A9 01 LDA #$01 0x01C34A|$07:$833A:8D 80 05 STA $0580 ; NPC #$08 motion nybble + direction nybble 0x01C34D|$07:$833D:A9 05 LDA #$05 0x01C34F|$07:$833F:8D 8B 60 STA $608B 0x01C352|$07:$8342:A9 09 LDA #$09 0x01C354|$07:$8344:8D 8F 60 STA $608F 0x01C357|$07:$8347:A9 0E LDA #$0E 0x01C359|$07:$8349:8D 90 60 STA $6090 0x01C35C|$07:$834C:A9 01 LDA #$01 0x01C35E|$07:$834E:20 98 86 JSR $8698 ; call to code in a different bank ($0F:$F6EA) 0x01C361|$07:$8351:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C364|$07:$8354:85 ; String ID #$0085: ‘Father!’ screamed the Princess.[wait][line]‘They are here!’[end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C365|$07:$8355:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$CCF1) 0x01C368|$07:$8358:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C36B|$07:$835B:81 ; indirect data load target 0x01C36C|$07:$835C:21 ; indirect data load target 0x01C36D|$07:$835D:04 81 ; $07:$8104; motion script for King part 2, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C36F|$07:$835F:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$F6EA) 0x01C372|$07:$8362:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C375|$07:$8365:86 ; String ID #$0086: ‘Oh, such a brave beauty,’ the Monster mocked her.[end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C376|$07:$8366:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$F6EA) 0x01C379|$07:$8369:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C37C|$07:$836C:87 ; String ID #$0087: [no voice]The King was enraged.[wait][line]‘Touch her and thou shall not survive this day!’[line]He challenged the fiend.[wait][end-FC] ; data -> code ; call to code in a different bank ($0F:$CCF1) 0x01C37D|$07:$836D:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C380|$07:$8370:85 ; indirect data load target 0x01C381|$07:$8371:23 ; indirect data load target 0x01C382|$07:$8372:FC 80 ; $07:$80FC; motion script for facing left (monster #2, guard #2 part 4, prologue) ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C384|$07:$8374:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$FA2A) 0x01C387|$07:$8377:20 2A FA JSR $FA2A ; display string ID specified by next byte ; code -> data ; indirect data load target 0x01C38A|$07:$837A:88 ; String ID #$0088: ‘So,’ hissed the Monster,[wait][line]‘thou must be the lord of this miserable sandcastle[.’][wait][line]‘But I think not for long[.’][end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C38B|$07:$837B:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$CCF1) 0x01C38E|$07:$837E:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C391|$07:$8381:85 ; indirect data load target 0x01C392|$07:$8382:23 ; indirect data load target 0x01C393|$07:$8383:06 81 ; $07:$8106; motion script for monster #2, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C395|$07:$8385:20 84 FF JSR $FF84 0x01C398|$07:$8388:20 16 86 JSR $8616 0x01C39B|$07:$838B:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C39E|$07:$838E:A9 01 LDA #$01 0x01C3A0|$07:$8390:20 28 86 JSR $8628 0x01C3A3|$07:$8393:20 11 86 JSR $8611 0x01C3A6|$07:$8396:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C3A9|$07:$8399:A9 05 LDA #$05 0x01C3AB|$07:$839B:20 32 86 JSR $8632 0x01C3AE|$07:$839E:20 3C 86 JSR $863C 0x01C3B1|$07:$83A1:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF 0x01C3B4|$07:$83A4:A9 06 LDA #$06 0x01C3B6|$07:$83A6:8D 8B 60 STA $608B 0x01C3B9|$07:$83A9:A9 07 LDA #$07 0x01C3BB|$07:$83AB:8D 8C 60 STA $608C 0x01C3BE|$07:$83AE:A9 07 LDA #$07 0x01C3C0|$07:$83B0:8D 8F 60 STA $608F 0x01C3C3|$07:$83B3:8D 91 60 STA $6091 0x01C3C6|$07:$83B6:A9 0B LDA #$0B 0x01C3C8|$07:$83B8:8D 90 60 STA $6090 0x01C3CB|$07:$83BB:A9 0D LDA #$0D 0x01C3CD|$07:$83BD:8D 92 60 STA $6092 0x01C3D0|$07:$83C0:A9 03 LDA #$03 0x01C3D2|$07:$83C2:20 98 86 JSR $8698 0x01C3D5|$07:$83C5:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF 0x01C3D8|$07:$83C8:20 16 86 JSR $8616 0x01C3DB|$07:$83CB:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C3DE|$07:$83CE:A9 01 LDA #$01 0x01C3E0|$07:$83D0:20 28 86 JSR $8628 0x01C3E3|$07:$83D3:20 16 86 JSR $8616 0x01C3E6|$07:$83D6:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C3E9|$07:$83D9:20 1B 86 JSR $861B 0x01C3EC|$07:$83DC:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C3EF|$07:$83DF:A9 01 LDA #$01 0x01C3F1|$07:$83E1:20 28 86 JSR $8628 0x01C3F4|$07:$83E4:A9 00 LDA #$00 0x01C3F6|$07:$83E6:8D 61 05 STA $0561 ; NPC #$04 sprite ID ; call to code in a different bank ($0F:$C577) 0x01C3F9|$07:$83E9:20 77 C5 JSR $C577 ; set $6144 to #$05 0x01C3FC|$07:$83EC:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF 0x01C3FF|$07:$83EF:A9 12 LDA #$12 ; Music ID #$12: party defeat BGM ; call to code in a different bank ($0F:$C561) 0x01C401|$07:$83F1:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$CCF1) 0x01C404|$07:$83F4:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C407|$07:$83F7:82 ; indirect data load target 0x01C408|$07:$83F8:23 ; indirect data load target 0x01C409|$07:$83F9:7E 81 ; $07:$817E; motion script for Princess, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C40B|$07:$83FB:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$F6EA) 0x01C40E|$07:$83FE:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C411|$07:$8401:89 ; String ID #$0089: [no voice]Then the Princess[line][no voice]gasped in horror.[wait][line]‘No, Father! No!’[end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C412|$07:$8402:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; control flow target (from $8317) 0x01C415|$07:$8405:A0 05 LDY #$05 0x01C417|$07:$8407:A9 00 LDA #$00 0x01C419|$07:$8409:20 45 86 JSR $8645 0x01C41C|$07:$840C:A9 08 LDA #$08 0x01C41E|$07:$840E:20 45 86 JSR $8645 0x01C421|$07:$8411:A9 09 LDA #$09 0x01C423|$07:$8413:20 45 86 JSR $8645 0x01C426|$07:$8416:A2 02 LDX #$02 ; control flow target (from $842E) 0x01C428|$07:$8418:BD 9E 87 LDA $879E,X 0x01C42B|$07:$841B:9D 8B 60 STA $608B,X 0x01C42E|$07:$841E:8A TXA 0x01C42F|$07:$841F:0A ASL 0x01C430|$07:$8420:A8 TAY 0x01C431|$07:$8421:B9 A4 87 LDA $87A4,Y 0x01C434|$07:$8424:99 8F 60 STA $608F,Y 0x01C437|$07:$8427:B9 A5 87 LDA $87A5,Y 0x01C43A|$07:$842A:99 90 60 STA $6090,Y 0x01C43D|$07:$842D:CA DEX 0x01C43E|$07:$842E:10 E8 BPL $8418 0x01C440|$07:$8430:A9 07 LDA #$07 0x01C442|$07:$8432:20 98 86 JSR $8698 0x01C445|$07:$8435:A2 03 LDX #$03 ; control flow target (from $844F) 0x01C447|$07:$8437:BD 9E 87 LDA $879E,X 0x01C44A|$07:$843A:9D 88 60 STA $6088,X 0x01C44D|$07:$843D:8A TXA 0x01C44E|$07:$843E:0A ASL 0x01C44F|$07:$843F:A8 TAY 0x01C450|$07:$8440:B9 A4 87 LDA $87A4,Y 0x01C453|$07:$8443:99 89 60 STA $6089,Y ; string word buffer index 2 0x01C456|$07:$8446:B9 A5 87 LDA $87A5,Y 0x01C459|$07:$8449:99 8A 60 STA $608A,Y 0x01C45C|$07:$844C:E8 INX 0x01C45D|$07:$844D:E0 06 CPX #$06 0x01C45F|$07:$844F:90 E6 BCC $8437 0x01C461|$07:$8451:A9 07 LDA #$07 0x01C463|$07:$8453:20 98 86 JSR $8698 0x01C466|$07:$8456:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF 0x01C469|$07:$8459:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF ; call to code in a different bank ($0F:$CCF1) 0x01C46C|$07:$845C:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C46F|$07:$845F:83 ; indirect data load target 0x01C470|$07:$8460:20 ; indirect data load target 0x01C471|$07:$8461:0A 81 ; $07:$810A; motion script for guard #2 part 1, prologue ; data -> code 0x01C473|$07:$8463:A9 02 LDA #$02 0x01C475|$07:$8465:20 29 87 JSR $8729 0x01C478|$07:$8468:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF 0x01C47B|$07:$846B:20 20 86 JSR $8620 0x01C47E|$07:$846E:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C481|$07:$8471:A9 11 LDA #$11 0x01C483|$07:$8473:20 28 86 JSR $8628 0x01C486|$07:$8476:20 3C 86 JSR $863C 0x01C489|$07:$8479:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C48C|$07:$847C:A9 12 LDA #$12 0x01C48E|$07:$847E:20 28 86 JSR $8628 0x01C491|$07:$8481:20 3C 86 JSR $863C 0x01C494|$07:$8484:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C497|$07:$8487:20 11 86 JSR $8611 0x01C49A|$07:$848A:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C49D|$07:$848D:A9 0F LDA #$0F 0x01C49F|$07:$848F:20 32 86 JSR $8632 0x01C4A2|$07:$8492:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF ; call to code in a different bank ($0F:$CCF1) 0x01C4A5|$07:$8495:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C4A8|$07:$8498:8F ; indirect data load target 0x01C4A9|$07:$8499:22 ; indirect data load target 0x01C4AA|$07:$849A:28 81 ; $07:$8128; motion script for monster #3, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C4AC|$07:$849C:20 84 FF JSR $FF84 0x01C4AF|$07:$849F:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C4B2|$07:$84A2:20 16 86 JSR $8616 0x01C4B5|$07:$84A5:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C4B8|$07:$84A8:A9 03 LDA #$03 0x01C4BA|$07:$84AA:20 28 86 JSR $8628 0x01C4BD|$07:$84AD:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C4C0|$07:$84B0:20 11 86 JSR $8611 0x01C4C3|$07:$84B3:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C4C6|$07:$84B6:20 1B 86 JSR $861B 0x01C4C9|$07:$84B9:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C4CC|$07:$84BC:A9 0F LDA #$0F 0x01C4CE|$07:$84BE:20 28 86 JSR $8628 0x01C4D1|$07:$84C1:20 3C 86 JSR $863C 0x01C4D4|$07:$84C4:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF ; call to code in a different bank ($0F:$F6EA) 0x01C4D7|$07:$84C7:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C4DA|$07:$84CA:82 ; String ID #$0082: ‘I must reach the King of Midenhall and tell him of our defeat!’[end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C4DB|$07:$84CB:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 ; call to code in a different bank ($0F:$CCF1) 0x01C4DE|$07:$84CE:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C4E1|$07:$84D1:83 ; indirect data load target 0x01C4E2|$07:$84D2:22 ; indirect data load target 0x01C4E3|$07:$84D3:2B 81 ; $07:$812B; motion script for guard #2 part 2, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C4E5|$07:$84D5:20 84 FF JSR $FF84 0x01C4E8|$07:$84D8:A9 82 LDA #$82 ; Music ID #$82: Stairs SFX ; call to code in a different bank ($0F:$C561) 0x01C4EA|$07:$84DA:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$C42A) 0x01C4ED|$07:$84DD:20 2A C4 JSR $C42A ; call to code in a different bank ($0F:$C577) 0x01C4F0|$07:$84E0:20 77 C5 JSR $C577 ; set $6144 to #$05 0x01C4F3|$07:$84E3:A9 15 LDA #$15 0x01C4F5|$07:$84E5:8D F7 05 STA $05F7 ; probably BGM for current area 0x01C4F8|$07:$84E8:A9 0A LDA #$0A 0x01C4FA|$07:$84EA:85 48 STA $48 ; last save point ID ; call to code in a different bank ($0F:$FF5A) 0x01C4FC|$07:$84EC:20 5A FF JSR $FF5A ; call to code in a different bank ($0F:$CCF1) 0x01C4FF|$07:$84EF:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C502|$07:$84F2:84 ; indirect data load target 0x01C503|$07:$84F3:21 ; indirect data load target 0x01C504|$07:$84F4:58 81 ; $07:$8158; motion script for guard #2 part 3, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C506|$07:$84F6:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$C511) 0x01C509|$07:$84F9:20 11 C5 JSR $C511 ; flash screen 5 times ; call to code in a different bank ($0F:$CCF1) 0x01C50C|$07:$84FC:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C50F|$07:$84FF:84 ; indirect data load target 0x01C510|$07:$8500:23 ; indirect data load target 0x01C511|$07:$8501:FC 80 ; $07:$80FC; motion script for facing left (monster #2, guard #2 part 4, prologue) ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C513|$07:$8503:20 84 FF JSR $FF84 0x01C516|$07:$8506:A9 02 LDA #$02 0x01C518|$07:$8508:20 02 86 JSR $8602 0x01C51B|$07:$850B:A9 03 LDA #$03 0x01C51D|$07:$850D:20 02 86 JSR $8602 0x01C520|$07:$8510:A9 94 LDA #$94 ; Music ID #$94: burning SFX ; call to code in a different bank ($0F:$C561) 0x01C522|$07:$8512:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$CCF1) 0x01C525|$07:$8515:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C528|$07:$8518:84 ; indirect data load target 0x01C529|$07:$8519:21 ; indirect data load target 0x01C52A|$07:$851A:67 81 ; $07:$8167; motion script for guard #2 part 5, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C52C|$07:$851C:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$C42A) 0x01C52F|$07:$851F:20 2A C4 JSR $C42A 0x01C532|$07:$8522:CE AD 61 DEC $61AD 0x01C535|$07:$8525:A9 0B LDA #$0B 0x01C537|$07:$8527:85 48 STA $48 ; last save point ID ; call to code in a different bank ($0F:$FF5A) 0x01C539|$07:$8529:20 5A FF JSR $FF5A ; call to code in a different bank ($0F:$CCF1) 0x01C53C|$07:$852C:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C53F|$07:$852F:80 ; indirect data load target 0x01C540|$07:$8530:21 ; indirect data load target 0x01C541|$07:$8531:83 81 ; $07:$8183; motion script for guard #2 part 6, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C543|$07:$8533:20 84 FF JSR $FF84 0x01C546|$07:$8536:A9 82 LDA #$82 ; Music ID #$82: Stairs SFX ; call to code in a different bank ($0F:$C561) 0x01C548|$07:$8538:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$C42A) 0x01C54B|$07:$853B:20 2A C4 JSR $C42A 0x01C54E|$07:$853E:A9 0E LDA #$0E 0x01C550|$07:$8540:8D 1A 05 STA $051A ; something to do with whether you've opened the chest containing the Shield of Erdrick 0x01C553|$07:$8543:A9 02 LDA #$02 0x01C555|$07:$8545:8D 1B 05 STA $051B 0x01C558|$07:$8548:A9 0A LDA #$0A 0x01C55A|$07:$854A:8D 41 05 STA $0541 ; NPC #$00 sprite ID 0x01C55D|$07:$854D:A9 09 LDA #$09 0x01C55F|$07:$854F:85 48 STA $48 ; last save point ID 0x01C561|$07:$8551:A9 00 LDA #$00 0x01C563|$07:$8553:8D F7 05 STA $05F7 ; probably BGM for current area ; call to code in a different bank ($0F:$FF5A) 0x01C566|$07:$8556:20 5A FF JSR $FF5A ; call to code in a different bank ($0F:$CCF1) 0x01C569|$07:$8559:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C56C|$07:$855C:80 ; indirect data load target 0x01C56D|$07:$855D:20 ; indirect data load target 0x01C56E|$07:$855E:33 81 ; $07:$8133; motion script for guard #2 part 7, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C570|$07:$8560:20 84 FF JSR $FF84 0x01C573|$07:$8563:20 70 86 JSR $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF 0x01C576|$07:$8566:A9 00 LDA #$00 0x01C578|$07:$8568:8D 59 05 STA $0559 ; NPC #$03 sprite ID ; call to code in a different bank ($0F:$FF8A) 0x01C57B|$07:$856B:20 8A FF JSR $FF8A 0x01C57E|$07:$856E:20 7D 86 JSR $867D ; set $6007 = #$00, set $00 = #$01, wait for #$50 interrupts, set $00 = #$FF ; call to code in a different bank ($0F:$CCF1) 0x01C581|$07:$8571:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C584|$07:$8574:82 ; indirect data load target 0x01C585|$07:$8575:23 ; indirect data load target 0x01C586|$07:$8576:4D 81 ; $07:$814D; motion script for right guard, prologue ; data -> code ; call to code in a different bank ($0F:$CCF1) 0x01C588|$07:$8578:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C58B|$07:$857B:81 ; indirect data load target 0x01C58C|$07:$857C:21 ; indirect data load target 0x01C58D|$07:$857D:48 81 ; $07:$8148; motion script for left guard, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C58F|$07:$857F:20 84 FF JSR $FF84 ; call to code in a different bank ($0F:$F6EA) 0x01C592|$07:$8582:20 EA F6 JSR $F6EA ; open main dialogue window and display string ID specified by byte following JSR ; code -> data ; indirect data load target 0x01C595|$07:$8585:83 ; String ID #$0083: ‘Thy wound looks serious[.’][wait][line]‘What has happened to thee?’[end-FC] ; data -> code 0x01C596|$07:$8586:20 78 86 JSR $8678 ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF 0x01C599|$07:$8589:A9 0A LDA #$0A 0x01C59B|$07:$858B:8D 59 05 STA $0559 ; NPC #$03 sprite ID 0x01C59E|$07:$858E:20 75 86 JSR $8675 ; call to code in a different bank ($0F:$FA2A) 0x01C5A1|$07:$8591:20 2A FA JSR $FA2A ; display string ID specified by next byte ; code -> data ; indirect data load target 0x01C5A4|$07:$8594:84 ; String ID #$0084: [FD]‘Never mind me.[line]I must see the King[.’][wait][line]‘I have evil tidings that cannot wait[.’][end-FC] ; data -> code ; call to code in a different bank ($0F:$D0F5) 0x01C5A5|$07:$8595:20 F5 D0 JSR $D0F5 ; wait for a while and then wipe menu regions #$03, #$00, and #$01 0x01C5A8|$07:$8598:A9 6F LDA #$6F 0x01C5AA|$07:$859A:8D 3B 05 STA $053B 0x01C5AD|$07:$859D:A9 08 LDA #$08 0x01C5AF|$07:$859F:8D 40 05 STA $0540 ; NPC #$00 ? + direction nybble 0x01C5B2|$07:$85A2:A9 0A LDA #$0A 0x01C5B4|$07:$85A4:8D 41 05 STA $0541 ; NPC #$00 sprite ID 0x01C5B7|$07:$85A7:A9 FF LDA #$FF 0x01C5B9|$07:$85A9:8D 59 05 STA $0559 ; NPC #$03 sprite ID ; call to code in a different bank ($0F:$FF8A) 0x01C5BC|$07:$85AC:20 8A FF JSR $FF8A 0x01C5BF|$07:$85AF:A2 0F LDX #$0F ; control flow target (from $85CE) 0x01C5C1|$07:$85B1:8A TXA 0x01C5C2|$07:$85B2:48 PHA ; call to code in a different bank ($0F:$CCF1) 0x01C5C3|$07:$85B3:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C5C6|$07:$85B6:82 ; indirect data load target 0x01C5C7|$07:$85B7:20 ; indirect data load target 0x01C5C8|$07:$85B8:56 81 ; $07:$8156; motion script for left and right guards, prologue ; data -> code ; call to code in a different bank ($0F:$CCF1) 0x01C5CA|$07:$85BA:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C5CD|$07:$85BD:81 ; indirect data load target 0x01C5CE|$07:$85BE:20 ; indirect data load target 0x01C5CF|$07:$85BF:56 81 ; $07:$8156; motion script for left and right guards, prologue ; data -> code 0x01C5D1|$07:$85C1:A9 04 LDA #$04 0x01C5D3|$07:$85C3:20 29 87 JSR $8729 0x01C5D6|$07:$85C6:A2 10 LDX #$10 ; call to code in a different bank ($0F:$C1EE) 0x01C5D8|$07:$85C8:20 EE C1 JSR $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF 0x01C5DB|$07:$85CB:68 PLA 0x01C5DC|$07:$85CC:AA TAX 0x01C5DD|$07:$85CD:CA DEX 0x01C5DE|$07:$85CE:D0 E1 BNE $85B1 0x01C5E0|$07:$85D0:A9 F7 LDA #$F7 0x01C5E2|$07:$85D2:8D 3B 05 STA $053B 0x01C5E5|$07:$85D5:A9 0A LDA #$0A 0x01C5E7|$07:$85D7:8D 59 05 STA $0559 ; NPC #$03 sprite ID 0x01C5EA|$07:$85DA:A9 0F LDA #$0F 0x01C5EC|$07:$85DC:8D 54 05 STA $0554 ; NPC #$03 X-pos 0x01C5EF|$07:$85DF:A9 02 LDA #$02 0x01C5F1|$07:$85E1:8D 55 05 STA $0555 ; NPC #$03 Y-pos ; call to code in a different bank ($0F:$FF8A) 0x01C5F4|$07:$85E4:20 8A FF JSR $FF8A ; call to code in a different bank ($0F:$CCF1) 0x01C5F7|$07:$85E7:20 F1 CC JSR $CCF1 ; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script) ; code -> data ; indirect data load target 0x01C5FA|$07:$85EA:80 ; indirect data load target 0x01C5FB|$07:$85EB:20 ; indirect data load target 0x01C5FC|$07:$85EC:54 81 ; $07:$8154; motion script for guard #2 part 8, prologue ; data -> code ; call to code in a different bank ($0F:$FF84) 0x01C5FE|$07:$85EE:20 84 FF JSR $FF84 0x01C601|$07:$85F1:A9 82 LDA #$82 ; Music ID #$82: Stairs SFX ; call to code in a different bank ($0F:$C561) 0x01C603|$07:$85F3:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$C42A) 0x01C606|$07:$85F6:20 2A C4 JSR $C42A 0x01C609|$07:$85F9:A9 00 LDA #$00 0x01C60B|$07:$85FB:8D 1A 05 STA $051A ; something to do with whether you've opened the chest containing the Shield of Erdrick 0x01C60E|$07:$85FE:8D 1B 05 STA $051B 0x01C611|$07:$8601:60 RTS ; control flow target (from $8508, $850D) 0x01C612|$07:$8602:48 PHA 0x01C613|$07:$8603:A9 91 LDA #$91 ; Music ID #$91: swamp SFX ; call to code in a different bank ($0F:$C561) 0x01C615|$07:$8605:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) 0x01C618|$07:$8608:68 PLA 0x01C619|$07:$8609:A0 04 LDY #$04 0x01C61B|$07:$860B:20 45 86 JSR $8645 0x01C61E|$07:$860E:4C 70 86 JMP $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF ; control flow target (from $82B4, $8393, $8487, $84B0) 0x01C621|$07:$8611:A9 89 LDA #$89 ; Music ID #$89: attack 1 SFX ; call to code in a different bank ($0F:$C561) 0x01C623|$07:$8613:4C 61 C5 JMP $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; control flow target (from $8294, $8388, $83C8, $83D3, $84A2) 0x01C626|$07:$8616:A9 8B LDA #$8B ; Music ID #$8B: attack 2 SFX ; call to code in a different bank ($0F:$C561) 0x01C628|$07:$8618:4C 61 C5 JMP $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; control flow target (from $8260, $82BA, $83D9, $84B6) 0x01C62B|$07:$861B:A9 88 LDA #$88 ; Music ID #$88: critical hit SFX ; call to code in a different bank ($0F:$C561) 0x01C62D|$07:$861D:4C 61 C5 JMP $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; control flow target (from $825A, $846B) 0x01C630|$07:$8620:A9 90 LDA #$90 ; Music ID #$90: casting SFX ; call to code in a different bank ($0F:$C561) 0x01C632|$07:$8622:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$C515) 0x01C635|$07:$8625:4C 15 C5 JMP $C515 ; flash screen 10 times ; control flow target (from $8268, $829C, $8390, $83D0, $83E1, $8473, $847E, $84AA, $84BE) 0x01C638|$07:$8628:48 PHA 0x01C639|$07:$8629:A9 8A LDA #$8A ; Music ID #$8A: hit 3 SFX ; call to code in a different bank ($0F:$C561) 0x01C63B|$07:$862B:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) 0x01C63E|$07:$862E:68 PLA 0x01C63F|$07:$862F:4C F0 86 JMP $86F0 ; control flow target (from $82C2, $839B, $848F) 0x01C642|$07:$8632:48 PHA 0x01C643|$07:$8633:A9 87 LDA #$87 ; Music ID #$87: hit 2 SFX ; call to code in a different bank ($0F:$C561) 0x01C645|$07:$8635:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) 0x01C648|$07:$8638:68 PLA 0x01C649|$07:$8639:4C F0 86 JMP $86F0 ; control flow target (from $826B, $82C5, $839E, $8476, $8481, $84C1) 0x01C64C|$07:$863C:48 PHA 0x01C64D|$07:$863D:A2 1E LDX #$1E ; call to code in a different bank ($0F:$C1EE) 0x01C64F|$07:$863F:20 EE C1 JSR $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF 0x01C652|$07:$8642:68 PLA ; control flow target (from $8302) 0x01C653|$07:$8643:A0 FF LDY #$FF ; control flow target (from $8409, $840E, $8413, $860B) 0x01C655|$07:$8645:18 CLC 0x01C656|$07:$8646:69 03 ADC #$03 0x01C658|$07:$8648:0A ASL 0x01C659|$07:$8649:0A ASL 0x01C65A|$07:$864A:0A ASL 0x01C65B|$07:$864B:AA TAX 0x01C65C|$07:$864C:98 TYA 0x01C65D|$07:$864D:9D 41 05 STA $0541,X ; NPC #$00 sprite ID 0x01C660|$07:$8650:48 PHA ; call to code in a different bank ($0F:$FF8A) 0x01C661|$07:$8651:20 8A FF JSR $FF8A ; call to code in a different bank ($0F:$C1DC) 0x01C664|$07:$8654:20 DC C1 JSR $C1DC ; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF 0x01C667|$07:$8657:68 PLA 0x01C668|$07:$8658:A8 TAY 0x01C669|$07:$8659:60 RTS ; control flow target (from $821B) 0x01C66A|$07:$865A:AD C9 87 LDA $87C9 0x01C66D|$07:$865D:85 0A STA $0A 0x01C66F|$07:$865F:AD CA 87 LDA $87CA 0x01C672|$07:$8662:85 0B STA $0B 0x01C674|$07:$8664:A9 00 LDA #$00 0x01C676|$07:$8666:85 0C STA $0C ; call to code in a different bank ($0F:$C228) 0x01C678|$07:$8668:4C 28 C2 JMP $C228 ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF ; control flow target (from $825D, $8263, $82BD, $838B, $8396, $83CB, $83D6, $83DC, $846E, $849F, $868A) 0x01C67B|$07:$866B:A2 14 LDX #$14 ; call to code in a different bank ($0F:$C1EE) 0x01C67D|$07:$866D:4C EE C1 JMP $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF ; control flow target (from $820A, $8297, $829F, $82B7, $8479, $8484, $848A, $84A5, $84AD, $84B3, $84B9, $84C4, $8563, $860E, $8695) 0x01C680|$07:$8670:A2 1E LDX #$1E ; call to code in a different bank ($0F:$C1EE) 0x01C682|$07:$8672:4C EE C1 JMP $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF ; control flow target (from $8257, $826E, $82C8, $82DF, $8305, $858E) ; call to code in a different bank ($0F:$FF8A) 0x01C685|$07:$8675:20 8A FF JSR $FF8A ; set $6007 = #$00, set $00 = #$01, wait for #$37 interrupts, set $00 = #$FF ; control flow target (from $8220, $82FD, $83A1, $83C5, $83EC, $8456, $8459, $8468, $8492, $8586) 0x01C688|$07:$8678:A2 37 LDX #$37 ; call to code in a different bank ($0F:$C1EE) 0x01C68A|$07:$867A:4C EE C1 JMP $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF ; set $6007 = #$00, set $00 = #$01, wait for #$50 interrupts, set $00 = #$FF ; control flow target (from $8202, $8213, $856E) 0x01C68D|$07:$867D:A2 50 LDX #$50 ; call to code in a different bank ($0F:$C1EE) 0x01C68F|$07:$867F:4C EE C1 JMP $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF ; control flow target (from $820D, $8210) 0x01C692|$07:$8682:A9 94 LDA #$94 ; Music ID #$94: burning SFX ; call to code in a different bank ($0F:$C561) 0x01C694|$07:$8684:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$C511) 0x01C697|$07:$8687:20 11 C5 JSR $C511 ; flash screen 5 times 0x01C69A|$07:$868A:20 6B 86 JSR $866B ; set $6007 = #$00, set $00 = #$01, wait for #$14 interrupts, set $00 = #$FF 0x01C69D|$07:$868D:A9 94 LDA #$94 ; Music ID #$94: burning SFX ; call to code in a different bank ($0F:$C561) 0x01C69F|$07:$868F:20 61 C5 JSR $C561 ; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]) ; call to code in a different bank ($0F:$FF66) 0x01C6A2|$07:$8692:20 66 FF JSR $FF66 0x01C6A5|$07:$8695:4C 70 86 JMP $8670 ; set $6007 = #$00, set $00 = #$01, wait for #$1E interrupts, set $00 = #$FF ; control flow target (from $8254, $834E, $83C2, $8432, $8453) 0x01C6A8|$07:$8698:8D 97 60 STA $6097 0x01C6AB|$07:$869B:A2 78 LDX #$78 ; control flow target (from $86ED) 0x01C6AD|$07:$869D:8A TXA 0x01C6AE|$07:$869E:48 PHA 0x01C6AF|$07:$869F:A0 07 LDY #$07 0x01C6B1|$07:$86A1:C9 4B CMP #$4B 0x01C6B3|$07:$86A3:B0 08 BCS $86AD 0x01C6B5|$07:$86A5:A0 03 LDY #$03 0x01C6B7|$07:$86A7:C9 19 CMP #$19 0x01C6B9|$07:$86A9:B0 02 BCS $86AD 0x01C6BB|$07:$86AB:A0 01 LDY #$01 ; control flow target (from $86A3, $86A9) 0x01C6BD|$07:$86AD:84 6D STY $6D 0x01C6BF|$07:$86AF:A2 FF LDX #$FF 0x01C6C1|$07:$86B1:25 6D AND $6D 0x01C6C3|$07:$86B3:D0 02 BNE $86B7 0x01C6C5|$07:$86B5:A2 80 LDX #$80 ; control flow target (from $86B3) 0x01C6C7|$07:$86B7:86 6D STX $6D 0x01C6C9|$07:$86B9:AD 97 60 LDA $6097 0x01C6CC|$07:$86BC:85 6E STA $6E 0x01C6CE|$07:$86BE:A0 00 LDY #$00 ; control flow target (from $86E0) 0x01C6D0|$07:$86C0:46 6E LSR $6E 0x01C6D2|$07:$86C2:90 18 BCC $86DC 0x01C6D4|$07:$86C4:98 TYA 0x01C6D5|$07:$86C5:4A LSR 0x01C6D6|$07:$86C6:AA TAX 0x01C6D7|$07:$86C7:BD 8B 60 LDA $608B,X 0x01C6DA|$07:$86CA:0A ASL 0x01C6DB|$07:$86CB:0A ASL 0x01C6DC|$07:$86CC:0A ASL 0x01C6DD|$07:$86CD:AA TAX 0x01C6DE|$07:$86CE:20 1F 87 JSR $871F 0x01C6E1|$07:$86D1:9D 54 05 STA $0554,X ; NPC #$03 X-pos 0x01C6E4|$07:$86D4:C8 INY 0x01C6E5|$07:$86D5:20 1F 87 JSR $871F 0x01C6E8|$07:$86D8:9D 55 05 STA $0555,X ; NPC #$03 Y-pos 0x01C6EB|$07:$86DB:88 DEY ; control flow target (from $86C2) 0x01C6EC|$07:$86DC:C8 INY 0x01C6ED|$07:$86DD:C8 INY 0x01C6EE|$07:$86DE:C0 08 CPY #$08 0x01C6F0|$07:$86E0:90 DE BCC $86C0 ; call to code in a different bank ($0F:$FF8A) 0x01C6F2|$07:$86E2:20 8A FF JSR $FF8A ; call to code in a different bank ($0F:$C1DC) 0x01C6F5|$07:$86E5:20 DC C1 JSR $C1DC ; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF 0x01C6F8|$07:$86E8:68 PLA 0x01C6F9|$07:$86E9:AA TAX 0x01C6FA|$07:$86EA:CA DEX 0x01C6FB|$07:$86EB:E0 FF CPX #$FF 0x01C6FD|$07:$86ED:D0 AE BNE $869D 0x01C6FF|$07:$86EF:60 RTS ; control flow target (from $862F, $8639) 0x01C700|$07:$86F0:48 PHA 0x01C701|$07:$86F1:0A ASL 0x01C702|$07:$86F2:0A ASL 0x01C703|$07:$86F3:0A ASL 0x01C704|$07:$86F4:AA TAX 0x01C705|$07:$86F5:8E 8B 60 STX $608B 0x01C708|$07:$86F8:BD 59 05 LDA $0559,X ; NPC #$03 sprite ID 0x01C70B|$07:$86FB:8D 8C 60 STA $608C 0x01C70E|$07:$86FE:A2 18 LDX #$18 ; control flow target (from $871B) 0x01C710|$07:$8700:8A TXA 0x01C711|$07:$8701:48 PHA 0x01C712|$07:$8702:A0 FF LDY #$FF 0x01C714|$07:$8704:29 03 AND #$03 0x01C716|$07:$8706:D0 03 BNE $870B 0x01C718|$07:$8708:AC 8C 60 LDY $608C ; control flow target (from $8706) 0x01C71B|$07:$870B:AE 8B 60 LDX $608B 0x01C71E|$07:$870E:98 TYA 0x01C71F|$07:$870F:9D 59 05 STA $0559,X ; NPC #$03 sprite ID ; call to code in a different bank ($0F:$FF8A) 0x01C722|$07:$8712:20 8A FF JSR $FF8A ; call to code in a different bank ($0F:$C1DC) 0x01C725|$07:$8715:20 DC C1 JSR $C1DC ; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF 0x01C728|$07:$8718:68 PLA 0x01C729|$07:$8719:AA TAX 0x01C72A|$07:$871A:CA DEX 0x01C72B|$07:$871B:10 E3 BPL $8700 0x01C72D|$07:$871D:68 PLA 0x01C72E|$07:$871E:60 RTS ; control flow target (from $86CE, $86D5) 0x01C72F|$07:$871F:B9 8F 60 LDA $608F,Y 0x01C732|$07:$8722:C6 6D DEC $6D 0x01C734|$07:$8724:10 02 BPL $8728 0x01C736|$07:$8726:A9 64 LDA #$64 ; control flow target (from $8724) 0x01C738|$07:$8728:60 RTS ; control flow target (from $82D4, $82F7, $8465, $85C3) 0x01C739|$07:$8729:8D 8E 60 STA $608E 0x01C73C|$07:$872C:0A ASL 0x01C73D|$07:$872D:AA TAX 0x01C73E|$07:$872E:BD B0 87 LDA $87B0,X 0x01C741|$07:$8731:85 55 STA $55 ; pointer to start of sub pointer data, low byte 0x01C743|$07:$8733:BD B1 87 LDA $87B1,X 0x01C746|$07:$8736:85 56 STA $56 ; pointer to start of sub pointer data, high byte 0x01C748|$07:$8738:A9 00 LDA #$00 0x01C74A|$07:$873A:8D 8D 60 STA $608D ; control flow target (from $876F) 0x01C74D|$07:$873D:AC 8D 60 LDY $608D 0x01C750|$07:$8740:B1 55 LDA ($55),Y ; pointer to start of sub pointer data, low byte 0x01C752|$07:$8742:C9 FF CMP #$FF 0x01C754|$07:$8744:F0 2B BEQ $8771 0x01C756|$07:$8746:48 PHA 0x01C757|$07:$8747:29 C0 AND #$C0 0x01C759|$07:$8749:4A LSR 0x01C75A|$07:$874A:4A LSR 0x01C75B|$07:$874B:4A LSR 0x01C75C|$07:$874C:4A LSR 0x01C75D|$07:$874D:4A LSR 0x01C75E|$07:$874E:8D 8B 60 STA $608B 0x01C761|$07:$8751:68 PLA 0x01C762|$07:$8752:29 3F AND #$3F 0x01C764|$07:$8754:8D 8C 60 STA $608C ; control flow target (from $876A) 0x01C767|$07:$8757:AE 8B 60 LDX $608B 0x01C76A|$07:$875A:BD 96 87 LDA $8796,X 0x01C76D|$07:$875D:85 6D STA $6D 0x01C76F|$07:$875F:BD 97 87 LDA $8797,X 0x01C772|$07:$8762:85 6E STA $6E 0x01C774|$07:$8764:20 7A 87 JSR $877A 0x01C777|$07:$8767:CE 8C 60 DEC $608C 0x01C77A|$07:$876A:D0 EB BNE $8757 0x01C77C|$07:$876C:EE 8D 60 INC $608D 0x01C77F|$07:$876F:D0 CC BNE $873D ; control flow target (from $8744) 0x01C781|$07:$8771:20 81 87 JSR $8781 0x01C784|$07:$8774:B0 03 BCS $8779 ; call to code in a different bank ($0F:$FF84) 0x01C786|$07:$8776:20 84 FF JSR $FF84 ; control flow target (from $8774) 0x01C789|$07:$8779:60 RTS ; control flow target (from $8764) 0x01C78A|$07:$877A:A9 00 LDA #$00 0x01C78C|$07:$877C:85 03 STA $03 ; game clock? 0x01C78E|$07:$877E:6C 6D 00 JMP ($006D) ; control flow target (from $8771) 0x01C791|$07:$8781:A2 00 LDX #$00 ; control flow target (from $8793) 0x01C793|$07:$8783:BD 40 05 LDA $0540,X ; NPC #$00 ? + direction nybble 0x01C796|$07:$8786:29 F0 AND #$F0 0x01C798|$07:$8788:C9 20 CMP #$20 0x01C79A|$07:$878A:18 CLC 0x01C79B|$07:$878B:F0 08 BEQ $8795 0x01C79D|$07:$878D:8A TXA 0x01C79E|$07:$878E:69 08 ADC #$08 0x01C7A0|$07:$8790:AA TAX 0x01C7A1|$07:$8791:E0 B8 CPX #$B8 0x01C7A3|$07:$8793:90 EE BCC $8783 ; control flow target (from $878B) 0x01C7A5|$07:$8795:60 RTS ; code -> data ; indexed data load target (from $875A) 0x01C7A6|$07:$8796:78 ; indexed data load target (from $875F) 0x01C7A7|$07:$8797: FF ; $0F:$FF78 0x01C7A8|$07:$8798:6C FF ; $0F:$FF6C 0x01C7AA|$07:$879A:7E FF ; $0F:$FF7E 0x01C7AC|$07:$879C:72 FF ; $0F:$FF72 ; indexed data load target (from $8418, $8437) 0x01C7AE|$07:$879E:0B 0B 0E 0x01C7B1|$07:$87A1:0C 0A 0F ; indexed data load target (from $8421, $8440) 0x01C7B4|$07:$87A4:02 ; indexed data load target (from $8427, $8446) 0x01C7B5|$07:$87A5: 12 0x01C7B6|$07:$87A6:02 12 0x01C7B8|$07:$87A8:0E 09 0x01C7BA|$07:$87AA:09 11 0x01C7BC|$07:$87AC:03 09 0x01C7BE|$07:$87AE:10 11 ; indexed data load target (from $872E) 0x01C7C0|$07:$87B0:BA ; indexed data load target (from $8733) 0x01C7C1|$07:$87B1: 87 ; $07:$87BA 0x01C7C2|$07:$87B2:BF 87 ; $07:$87BF 0x01C7C4|$07:$87B4:C1 87 ; $07:$87C1 0x01C7C6|$07:$87B6:C5 87 ; $07:$87C5 0x01C7C8|$07:$87B8:C7 87 ; $07:$87C7 ; indirect data load target (via $87B0) 0x01C7CA|$07:$87BA:82 ; execute $0F:$FF7E 2 times ; indirect data load target 0x01C7CB|$07:$87BB:42 ; execute $0F:$FF6C 2 times ; indirect data load target 0x01C7CC|$07:$87BC:82 ; execute $0F:$FF7E 2 times ; indirect data load target 0x01C7CD|$07:$87BD:41 ; execute $0F:$FF6C 1 time ; indirect data load target 0x01C7CE|$07:$87BE:FF ; indirect data load target (via $87B2) 0x01C7CF|$07:$87BF:C1 ; execute $0F:$FF72 1 time ; indirect data load target 0x01C7D0|$07:$87C0:FF ; indirect data load target (via $87B4) 0x01C7D1|$07:$87C1:0A ; execute $0F:$FF78 10 times ; indirect data load target 0x01C7D2|$07:$87C2:47 ; execute $0F:$FF6C 7 times ; indirect data load target 0x01C7D3|$07:$87C3:8C ; execute $0F:$FF7E 12 times ; indirect data load target 0x01C7D4|$07:$87C4:FF ; indirect data load target (via $87B6) 0x01C7D5|$07:$87C5:83 ; execute $0F:$FF7E 3 times 0x01C7D6|$07:$87C6:FF ; indirect data load target (via $87B8) 0x01C7D7|$07:$87C7:01 ; execute $0F:$FF78 1 time ; indirect data load target 0x01C7D8|$07:$87C8:FF ; data load target (from $865A) 0x01C7D9|$07:$87C9:CB ; data load target (from $865F) 0x01C7DA|$07:$87CA: 87 ; $07:$87CB ; indirect data load target (via $87C9) 0x01C7DB|$07:$87CB:0F ; indirect data load target 0x01C7DC|$07:$87CC:10 ; indirect data load target 0x01C7DD|$07:$87CD:01 ; indirect data load target 0x01C7DE|$07:$87CE:11 ; indirect data load target 0x01C7DF|$07:$87CF:05 ; indirect data load target 0x01C7E0|$07:$87D0:27 ; indirect data load target 0x01C7E1|$07:$87D1:06 ; indirect data load target 0x01C7E2|$07:$87D2:05 ; indirect data load target 0x01C7E3|$07:$87D3:1B ; indirect data load target 0x01C7E4|$07:$87D4:0B ; indirect data load target 0x01C7E5|$07:$87D5:19 ; indirect data load target 0x01C7E6|$07:$87D6:0A ; indirect data load target 0x01C7E7|$07:$87D7:17 ; data -> code ; if $8F-$90 == #$0001, print "s" + [end-FA] to $60F1 and SEC, else LDA [end-FA] and CLC ; from $02:$BE37 via $8006 ; indirect control flow target (via $8006) 0x01C7E8|$07:$87D8:A5 90 LDA $90 ; if $90 > 0, add "s" 0x01C7EA|$07:$87DA:D0 05 BNE $87E1 0x01C7EC|$07:$87DC:A4 8F LDY $8F 0x01C7EE|$07:$87DE:88 DEY 0x01C7EF|$07:$87DF:F0 0C BEQ $87ED ; if $90 == 0 and $8F - 1 == 0 (i.e. $8F == 1), do not add "s" ; control flow target (from $87DA) 0x01C7F1|$07:$87E1:A9 1C LDA #$1C ; "s" 0x01C7F3|$07:$87E3:8D F1 60 STA $60F1 ; start of text variable buffer 0x01C7F6|$07:$87E6:A9 FA LDA #$FA ; [end-FA] 0x01C7F8|$07:$87E8:8D F2 60 STA $60F2 0x01C7FB|$07:$87EB:38 SEC ; SEC to trigger read of [end-FA]-terminated string from $60F1, CLC to use A 0x01C7FC|$07:$87EC:60 RTS ; BUG: LDA #$FA triggers premature end of string, resulting in "1 piece" instead of "1 piece of gold" ; should write #$FA to $60F1 and SEC instead ; control flow target (from $87DF) 0x01C7FD|$07:$87ED:A9 FA LDA #$FA ; [end-FA] 0x01C7FF|$07:$87EF:18 CLC ; SEC to trigger read of [end-FA]-terminated string from $60F1, CLC to use A 0x01C800|$07:$87F0:60 RTS ; given monster count in $8F singular monster name in $6119, and monster name length in X, print appropriate singluar/plural monster name to $60F1 ; from $02:$BE2F via $8004 ; starts reading the monster name backwards from the end of the string and applies the first applicable transformation ; -ch -> -ches ; -dead -> -dead (i.e. no change) ; -f -> -ves (but no monster has a name that ends in f, so this rule is never used) ; -i -> -ies ; -Man -> -Men ; -man -> -men ; -Mouse -> -Mice ; -mouse -> -mice ; -ngo -> -ngo (i.e. no change) ; -rus -> -rii ; -s -> -ses ; -sh -> -shes ; -y -> -ies ; - -> -s (everything else) ; ; IN: ; A/X/Y/C: irrelevant, they all get potentially clobbered ; $6119-????: singular monster name terminated by [end-FA] ; OUT: ; A/X/Y: unreliable ; C: set ; indirect control flow target (via $8004) ; call to code in a different bank ($0F:$FE97) 0x01C801|$07:$87F1:20 97 FE JSR $FE97 ; read byte following JSR, parse it for bank and pointer index, execute ($8000,X) in selected bank, swap back in original bank ; code -> data ; indirect data load target 0x01C804|$07:$87F4:4B ; $02:$8016; -> $02:$BEBC: copy $6119,X to $60F1,X until we read a #$FA ; data -> code ; at this point, X points to next byte in monster name stored starting at $60F1, i.e. the byte after the end token 0x01C805|$07:$87F5:A4 8F LDY $8F ; number of monsters in the current group 0x01C807|$07:$87F7:88 DEY 0x01C808|$07:$87F8:F0 36 BEQ $8830 ; if only 1 monster, then no need to pluralize, so we're done 0x01C80A|$07:$87FA:CA DEX ; back up to [end-FA] 0x01C80B|$07:$87FB:CA DEX ; back up to final letter of monster name 0x01C80C|$07:$87FC:BD F1 60 LDA $60F1,X ; start of text variable buffer; read final letter of monster name 0x01C80F|$07:$87FF:C9 18 CMP #$18 ; "o" 0x01C811|$07:$8801:F0 32 BEQ $8835 ; -ngo -> -ngo, -o -> -os 0x01C813|$07:$8803:C9 0F CMP #$0F ; "f" 0x01C815|$07:$8805:F0 5E BEQ $8865 ; -f -> -ves (not used) 0x01C817|$07:$8807:C9 22 CMP #$22 ; "y" 0x01C819|$07:$8809:F0 5F BEQ $886A ; -y -> -ies 0x01C81B|$07:$880B:C9 12 CMP #$12 ; "i" 0x01C81D|$07:$880D:F0 5B BEQ $886A ; -i -> -ies 0x01C81F|$07:$880F:C9 1C CMP #$1C ; "s" 0x01C821|$07:$8811:F0 32 BEQ $8845 ; -rus -> -rii, -s -> -ses 0x01C823|$07:$8813:C9 11 CMP #$11 ; "h" 0x01C825|$07:$8815:F0 5B BEQ $8872 ; -ch -> -ches, -sh -> -shes, -h -> -hs 0x01C827|$07:$8817:C9 17 CMP #$17 ; "n" 0x01C829|$07:$8819:F0 64 BEQ $887F ; -man -> -men, -Man -> -Men, -n -> -ns 0x01C82B|$07:$881B:C9 0E CMP #$0E ; "e" 0x01C82D|$07:$881D:F0 79 BEQ $8898 ; -mouse -> -mice, -Mouse -> -Mice, -e -> es 0x01C82F|$07:$881F:C9 0D CMP #$0D ; "d" 0x01C831|$07:$8821:F0 0F BEQ $8832 ; -dead -> -dead, -d -> -ds ; append "s" to monster name ; default pluralization if not handled above ; control flow target (from $883A, $8841, $8863, $887D, $8884, $888F, $889D, $88E1) 0x01C833|$07:$8823:E8 INX 0x01C834|$07:$8824:A9 1C LDA #$1C ; "s" 0x01C836|$07:$8826:9D F1 60 STA $60F1,X ; start of text variable buffer; append "s" to monster name 0x01C839|$07:$8829:E8 INX 0x01C83A|$07:$882A:A9 FA LDA #$FA ; [end-FA] 0x01C83C|$07:$882C:9D F1 60 STA $60F1,X ; start of text variable buffer; append [end-FA] to monster name 0x01C83F|$07:$882F:E8 INX ; control flow target (from $87F8, $8843) 0x01C840|$07:$8830:38 SEC ; SEC to trigger read of [end-FA]-terminated string from $60F1, CLC to use A 0x01C841|$07:$8831:60 RTS ; jump to -d pluralization handler: -dead -> -dead, -d -> -ds ; control flow target (from $8821) 0x01C842|$07:$8832:4C CC 88 JMP $88CC ; -o pluralization handler: -ngo -> -ngo, -o -> -os ; control flow target (from $8801) 0x01C845|$07:$8835:BD F0 60 LDA $60F0,X ; read second-last letter of monster name 0x01C848|$07:$8838:C9 10 CMP #$10 ; "g" 0x01C84A|$07:$883A:D0 E7 BNE $8823 ; if not -go, append "s" 0x01C84C|$07:$883C:BD EF 60 LDA $60EF,X ; read third-last letter of monster name 0x01C84F|$07:$883F:C9 17 CMP #$17 ; "n" 0x01C851|$07:$8841:D0 E0 BNE $8823 ; if not -ngo, append "s" 0x01C853|$07:$8843:F0 EB BEQ $8830 ; if -ngo, plural = singular ; -s pluralization handler: -rus -> -rii, -s -> -ses ; control flow target (from $8811) 0x01C855|$07:$8845:BD F0 60 LDA $60F0,X ; read second-last letter of monster name 0x01C858|$07:$8848:C9 1E CMP #$1E ; "u" 0x01C85A|$07:$884A:D0 11 BNE $885D ; if not -us, append "es" 0x01C85C|$07:$884C:BD EF 60 LDA $60EF,X ; read third-last letter of monster name 0x01C85F|$07:$884F:C9 1B CMP #$1B ; "r" 0x01C861|$07:$8851:D0 0A BNE $885D ; if not -rus, append "es" 0x01C863|$07:$8853:A9 12 LDA #$12 ; "i" 0x01C865|$07:$8855:9D F0 60 STA $60F0,X ; replace -us with -ii 0x01C868|$07:$8858:9D F1 60 STA $60F1,X ; start of text variable buffer 0x01C86B|$07:$885B:38 SEC ; SEC to trigger read of [end-FA]-terminated string from $60F1, CLC to use A 0x01C86C|$07:$885C:60 RTS ; append "es" to monster name ; control flow target (from $884A, $8851, $886F, $8877, $887B) 0x01C86D|$07:$885D:E8 INX 0x01C86E|$07:$885E:A9 0E LDA #$0E ; "e" 0x01C870|$07:$8860:9D F1 60 STA $60F1,X ; start of text variable buffer; append "e" to monster name 0x01C873|$07:$8863:D0 BE BNE $8823 ; append "s" to monster name; note that this branch is always taken ; -f pluralization handler: -f -> -ves ; unused code ; control flow target (from $8805) 0x01C875|$07:$8865:A9 1F LDA #$1F ; "v" 0x01C877|$07:$8867:4C 6C 88 JMP $886C ; replace "f" with "v" then append "es" ; -i pluralization handler: -i -> -ies ; control flow target (from $8809, $880D) 0x01C87A|$07:$886A:A9 12 LDA #$12 ; "i" ; control flow target (from $8867) 0x01C87C|$07:$886C:9D F1 60 STA $60F1,X ; start of text variable buffer; replace final letter with "i" 0x01C87F|$07:$886F:4C 5D 88 JMP $885D ; append "es" ; -h pluralization handler: -ch -> -ches, -sh -> -shes, -h -> -hs ; control flow target (from $8815) 0x01C882|$07:$8872:BD F0 60 LDA $60F0,X ; read second-last letter of monster name 0x01C885|$07:$8875:C9 0C CMP #$0C ; "c" 0x01C887|$07:$8877:F0 E4 BEQ $885D ; if -ch, append "es" 0x01C889|$07:$8879:C9 1C CMP #$1C ; "s" 0x01C88B|$07:$887B:F0 E0 BEQ $885D ; if -sh, append "es" 0x01C88D|$07:$887D:D0 A4 BNE $8823 ; else, append "s" ; -n pluralization handler: -man -> -men, -Man -> -Men, -n -> -ns ; control flow target (from $8819) 0x01C88F|$07:$887F:BD F0 60 LDA $60F0,X ; read second-last letter of monster name 0x01C892|$07:$8882:C9 0A CMP #$0A ; "a" 0x01C894|$07:$8884:D0 9D BNE $8823 ; if not -an, append "s" 0x01C896|$07:$8886:BD EF 60 LDA $60EF,X ; read third-last letter of monster name 0x01C899|$07:$8889:C9 16 CMP #$16 ; "m" 0x01C89B|$07:$888B:F0 04 BEQ $8891 ; -man -> -men 0x01C89D|$07:$888D:C9 30 CMP #$30 ; "M" 0x01C89F|$07:$888F:D0 92 BNE $8823 ; if not -Man, append "s" ; control flow target (from $888B) 0x01C8A1|$07:$8891:A9 0E LDA #$0E ; "e" 0x01C8A3|$07:$8893:9D F0 60 STA $60F0,X ; replace second-last letter of monster name ; control flow target (from $88DF) 0x01C8A6|$07:$8896:38 SEC ; SEC to trigger read of [end-FA]-terminated string from $60F1, CLC to use A 0x01C8A7|$07:$8897:60 RTS ; -e pluralization handler: -mouse -> -mice, -Mouse -> -Mice, -e -> es ; control flow target (from $881D) 0x01C8A8|$07:$8898:BD F0 60 LDA $60F0,X ; read second-last letter of monster name 0x01C8AB|$07:$889B:C9 1C CMP #$1C ; "s" 0x01C8AD|$07:$889D:D0 84 BNE $8823 ; if not -se, append "s" 0x01C8AF|$07:$889F:BD EF 60 LDA $60EF,X ; read third-last letter of monster name 0x01C8B2|$07:$88A2:C9 1E CMP #$1E ; "u" 0x01C8B4|$07:$88A4:D0 3B BNE $88E1 ; if not -use, append "s" 0x01C8B6|$07:$88A6:BD EE 60 LDA $60EE,X ; read fourth-last letter of monster name 0x01C8B9|$07:$88A9:C9 18 CMP #$18 ; "o" 0x01C8BB|$07:$88AB:D0 34 BNE $88E1 ; if not -ouse, append "s" 0x01C8BD|$07:$88AD:BD ED 60 LDA $60ED,X ; read fifth-last letter of monster name 0x01C8C0|$07:$88B0:C9 16 CMP #$16 ; "m" 0x01C8C2|$07:$88B2:F0 04 BEQ $88B8 ; -mouse -> -mice 0x01C8C4|$07:$88B4:C9 30 CMP #$30 ; "M" 0x01C8C6|$07:$88B6:D0 29 BNE $88E1 ; if not -Mouse, append "s" ; control flow target (from $88B2) 0x01C8C8|$07:$88B8:A0 00 LDY #$00 ; replace last 4 letters of monster name with "ice" + [end-FA] ; control flow target (from $88C4) 0x01C8CA|$07:$88BA:B9 C8 88 LDA $88C8,Y 0x01C8CD|$07:$88BD:9D EE 60 STA $60EE,X 0x01C8D0|$07:$88C0:E8 INX 0x01C8D1|$07:$88C1:C8 INY 0x01C8D2|$07:$88C2:C0 04 CPY #$04 0x01C8D4|$07:$88C4:90 F4 BCC $88BA 0x01C8D6|$07:$88C6:38 SEC ; SEC to trigger read of [end-FA]-terminated string from $60F1, CLC to use A 0x01C8D7|$07:$88C7:60 RTS ; code -> data ; indexed data load target (from $88BA) 0x01C8D8|$07:$88C8:12 ; "i" 0x01C8D9|$07:$88C9:0C ; "c" 0x01C8DA|$07:$88CA:0E ; "e" 0x01C8DB|$07:$88CB:FA ; [end-FA] ; data -> code ; -d pluralization handler: -dead -> -dead, -d -> ds ; control flow target (from $8832) 0x01C8DC|$07:$88CC:BD F0 60 LDA $60F0,X ; read second-last letter of monster name 0x01C8DF|$07:$88CF:C9 0A CMP #$0A ; "a" 0x01C8E1|$07:$88D1:D0 0E BNE $88E1 ; if not -ad, append "s" 0x01C8E3|$07:$88D3:BD EF 60 LDA $60EF,X ; read third-last letter of monster name 0x01C8E6|$07:$88D6:C9 0E CMP #$0E ; "e" 0x01C8E8|$07:$88D8:D0 07 BNE $88E1 ; if not -ead, append "s" 0x01C8EA|$07:$88DA:BD EE 60 LDA $60EE,X ; read fourth-last letter of monster name 0x01C8ED|$07:$88DD:C9 0D CMP #$0D ; "d" 0x01C8EF|$07:$88DF:F0 B5 BEQ $8896 ; if -dead, plural = singular ; control flow target (from $88A4, $88AB, $88B6, $88D1, $88D8) 0x01C8F1|$07:$88E1:4C 23 88 JMP $8823 ; else, append "s" ; control flow target (from $81D3) 0x01C8F4|$07:$88E4:48 PHA 0x01C8F5|$07:$88E5:A5 0C LDA $0C 0x01C8F7|$07:$88E7:48 PHA 0x01C8F8|$07:$88E8:A5 0D LDA $0D 0x01C8FA|$07:$88EA:48 PHA 0x01C8FB|$07:$88EB:A5 0E LDA $0E 0x01C8FD|$07:$88ED:48 PHA 0x01C8FE|$07:$88EE:A5 0F LDA $0F 0x01C900|$07:$88F0:48 PHA 0x01C901|$07:$88F1:A5 10 LDA $10 0x01C903|$07:$88F3:48 PHA 0x01C904|$07:$88F4:A5 11 LDA $11 0x01C906|$07:$88F6:48 PHA 0x01C907|$07:$88F7:AD 8B 60 LDA $608B 0x01C90A|$07:$88FA:48 PHA 0x01C90B|$07:$88FB:AD 8C 60 LDA $608C 0x01C90E|$07:$88FE:48 PHA ; call to code in a different bank ($0F:$C42A) 0x01C90F|$07:$88FF:20 2A C4 JSR $C42A ; call to code in a different bank ($0F:$C446) 0x01C912|$07:$8902:20 46 C4 JSR $C446 ; turn screen off, write $800 [space] tiles to PPU $2000, turn screen on ; call to code in a different bank ($0F:$C465) 0x01C915|$07:$8905:20 65 C4 JSR $C465 ; wait for interrupt and then set every 4th byte of $0200 - $02FC to #$F0 ; call to code in a different bank ($0F:$C1DC) 0x01C918|$07:$8908:20 DC C1 JSR $C1DC ; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF 0x01C91B|$07:$890B:A9 00 LDA #$00 0x01C91D|$07:$890D:85 76 STA $76 0x01C91F|$07:$890F:85 04 STA $04 0x01C921|$07:$8911:85 05 STA $05 0x01C923|$07:$8913:85 06 STA $06 0x01C925|$07:$8915:A9 0F LDA #$0F ; call to code in a different bank ($0F:$C61F) 0x01C927|$07:$8917:20 1F C6 JSR $C61F ; set MMC control mode based on A 0x01C92A|$07:$891A:A9 88 LDA #$88 0x01C92C|$07:$891C:8D AE 61 STA $61AE 0x01C92F|$07:$891F:A9 8A LDA #$8A 0x01C931|$07:$8921:8D AF 61 STA $61AF 0x01C934|$07:$8924:20 64 8A JSR $8A64 0x01C937|$07:$8927:AD A1 8A LDA $8AA1 ; -> $07:$8AB2: Prologue text 0x01C93A|$07:$892A:85 77 STA $77 0x01C93C|$07:$892C:AD A2 8A LDA $8AA2 0x01C93F|$07:$892F:85 78 STA $78 0x01C941|$07:$8931:A9 00 LDA #$00 0x01C943|$07:$8933:85 76 STA $76 0x01C945|$07:$8935:A9 10 LDA #$10 0x01C947|$07:$8937:85 75 STA $75 0x01C949|$07:$8939:A9 1E LDA #$1E 0x01C94B|$07:$893B:8D 8C 60 STA $608C ; control flow target (from $8960) 0x01C94E|$07:$893E:A0 00 LDY #$00 0x01C950|$07:$8940:B1 77 LDA ($77),Y 0x01C952|$07:$8942:10 23 BPL $8967 0x01C954|$07:$8944:C9 FF CMP #$FF 0x01C956|$07:$8946:D0 03 BNE $894B 0x01C958|$07:$8948:4C BD 89 JMP $89BD ; control flow target (from $8946) 0x01C95B|$07:$894B:48 PHA 0x01C95C|$07:$894C:29 C0 AND #$C0 0x01C95E|$07:$894E:C9 C0 CMP #$C0 0x01C960|$07:$8950:D0 04 BNE $8956 0x01C962|$07:$8952:A9 08 LDA #$08 0x01C964|$07:$8954:85 75 STA $75 ; control flow target (from $8950) 0x01C966|$07:$8956:68 PLA 0x01C967|$07:$8957:29 1F AND #$1F 0x01C969|$07:$8959:85 76 STA $76 0x01C96B|$07:$895B:20 EE 89 JSR $89EE ; control flow target (from $89BA) 0x01C96E|$07:$895E:A5 76 LDA $76 0x01C970|$07:$8960:F0 DC BEQ $893E 0x01C972|$07:$8962:C6 76 DEC $76 0x01C974|$07:$8964:4C 89 89 JMP $8989 ; control flow target (from $8942) 0x01C977|$07:$8967:8D 8B 60 STA $608B 0x01C97A|$07:$896A:20 EE 89 JSR $89EE ; control flow target (from $8983) 0x01C97D|$07:$896D:A0 00 LDY #$00 0x01C97F|$07:$896F:B1 77 LDA ($77),Y 0x01C981|$07:$8971:C9 FF CMP #$FF 0x01C983|$07:$8973:F0 11 BEQ $8986 0x01C985|$07:$8975:85 09 STA $09 0x01C987|$07:$8977:20 F5 89 JSR $89F5 ; call to code in a different bank ($0F:$C1FA) 0x01C98A|$07:$897A:20 FA C1 JSR $C1FA ; wait for $02 to not be #$C0, write PPU address in $07-$08 and data in $09 to PPU write buffer at $0300,$02, $01 += 1, $02 += 3, and set $0183 to #$00 0x01C98D|$07:$897D:EE 8B 60 INC $608B 0x01C990|$07:$8980:20 EE 89 JSR $89EE 0x01C993|$07:$8983:4C 6D 89 JMP $896D ; control flow target (from $8973) 0x01C996|$07:$8986:20 EE 89 JSR $89EE ; control flow target (from $8964) 0x01C999|$07:$8989:A5 75 LDA $75 0x01C99B|$07:$898B:85 6F STA $6F ; control flow target (from $89B7) 0x01C99D|$07:$898D:A2 03 LDX #$03 ; call to code in a different bank ($0F:$C1EE) 0x01C99F|$07:$898F:20 EE C1 JSR $C1EE ; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF 0x01C9A2|$07:$8992:E6 06 INC $06 0x01C9A4|$07:$8994:A5 06 LDA $06 0x01C9A6|$07:$8996:C9 F0 CMP #$F0 0x01C9A8|$07:$8998:90 0A BCC $89A4 0x01C9AA|$07:$899A:A9 00 LDA #$00 0x01C9AC|$07:$899C:85 06 STA $06 0x01C9AE|$07:$899E:A5 04 LDA $04 0x01C9B0|$07:$89A0:49 08 EOR #$08 0x01C9B2|$07:$89A2:85 04 STA $04 ; control flow target (from $8998) 0x01C9B4|$07:$89A4:A5 06 LDA $06 0x01C9B6|$07:$89A6:29 07 AND #$07 0x01C9B8|$07:$89A8:D0 09 BNE $89B3 0x01C9BA|$07:$89AA:A0 3B LDY #$3B 0x01C9BC|$07:$89AC:A9 5F LDA #$5F 0x01C9BE|$07:$89AE:85 6D STA $6D 0x01C9C0|$07:$89B0:20 79 8A JSR $8A79 ; control flow target (from $89A8) 0x01C9C3|$07:$89B3:C6 6F DEC $6F 0x01C9C5|$07:$89B5:F0 03 BEQ $89BA 0x01C9C7|$07:$89B7:4C 8D 89 JMP $898D ; control flow target (from $89B5) 0x01C9CA|$07:$89BA:4C 5E 89 JMP $895E ; control flow target (from $8948) ; call to code in a different bank ($0F:$C1DC) 0x01C9CD|$07:$89BD:20 DC C1 JSR $C1DC ; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF 0x01C9D0|$07:$89C0:A9 0E LDA #$0E ; call to code in a different bank ($0F:$C61F) 0x01C9D2|$07:$89C2:20 1F C6 JSR $C61F ; set MMC control mode based on A 0x01C9D5|$07:$89C5:A9 88 LDA #$88 0x01C9D7|$07:$89C7:8D AE 61 STA $61AE 0x01C9DA|$07:$89CA:A9 89 LDA #$89 0x01C9DC|$07:$89CC:8D AF 61 STA $61AF ; call to code in a different bank ($0F:$C1DC) 0x01C9DF|$07:$89CF:20 DC C1 JSR $C1DC ; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF 0x01C9E2|$07:$89D2:68 PLA 0x01C9E3|$07:$89D3:8D 8C 60 STA $608C 0x01C9E6|$07:$89D6:68 PLA 0x01C9E7|$07:$89D7:8D 8B 60 STA $608B 0x01C9EA|$07:$89DA:68 PLA 0x01C9EB|$07:$89DB:85 11 STA $11 0x01C9ED|$07:$89DD:68 PLA 0x01C9EE|$07:$89DE:85 10 STA $10 0x01C9F0|$07:$89E0:68 PLA 0x01C9F1|$07:$89E1:85 0F STA $0F 0x01C9F3|$07:$89E3:68 PLA 0x01C9F4|$07:$89E4:85 0E STA $0E 0x01C9F6|$07:$89E6:68 PLA 0x01C9F7|$07:$89E7:85 0D STA $0D 0x01C9F9|$07:$89E9:68 PLA 0x01C9FA|$07:$89EA:85 0C STA $0C 0x01C9FC|$07:$89EC:68 PLA 0x01C9FD|$07:$89ED:60 RTS ; control flow target (from $895B, $896A, $8980, $8986) 0x01C9FE|$07:$89EE:E6 77 INC $77 0x01CA00|$07:$89F0:D0 02 BNE $89F4 0x01CA02|$07:$89F2:E6 78 INC $78 ; control flow target (from $89F0) 0x01CA04|$07:$89F4:60 RTS ; control flow target (from $8977, $8A8D) 0x01CA05|$07:$89F5:A5 04 LDA $04 0x01CA07|$07:$89F7:29 08 AND #$08 0x01CA09|$07:$89F9:09 20 ORA #$20 0x01CA0B|$07:$89FB:85 08 STA $08 0x01CA0D|$07:$89FD:A5 05 LDA $05 0x01CA0F|$07:$89FF:4A LSR 0x01CA10|$07:$8A00:4A LSR 0x01CA11|$07:$8A01:4A LSR 0x01CA12|$07:$8A02:18 CLC 0x01CA13|$07:$8A03:6D 8B 60 ADC $608B 0x01CA16|$07:$8A06:C9 20 CMP #$20 0x01CA18|$07:$8A08:90 02 BCC $8A0C 0x01CA1A|$07:$8A0A:E9 20 SBC #$20 ; control flow target (from $8A08) 0x01CA1C|$07:$8A0C:85 07 STA $07 0x01CA1E|$07:$8A0E:A9 00 LDA #$00 0x01CA20|$07:$8A10:85 6E STA $6E 0x01CA22|$07:$8A12:AD 8C 60 LDA $608C 0x01CA25|$07:$8A15:0A ASL 0x01CA26|$07:$8A16:26 6E ROL $6E 0x01CA28|$07:$8A18:0A ASL 0x01CA29|$07:$8A19:26 6E ROL $6E 0x01CA2B|$07:$8A1B:0A ASL 0x01CA2C|$07:$8A1C:26 6E ROL $6E 0x01CA2E|$07:$8A1E:18 CLC 0x01CA2F|$07:$8A1F:65 06 ADC $06 0x01CA31|$07:$8A21:AA TAX 0x01CA32|$07:$8A22:90 02 BCC $8A26 0x01CA34|$07:$8A24:E6 6E INC $6E ; control flow target (from $8A22) 0x01CA36|$07:$8A26:38 SEC 0x01CA37|$07:$8A27:E9 F0 SBC #$F0 0x01CA39|$07:$8A29:85 6D STA $6D 0x01CA3B|$07:$8A2B:A5 6E LDA $6E 0x01CA3D|$07:$8A2D:E9 00 SBC #$00 0x01CA3F|$07:$8A2F:85 6E STA $6E 0x01CA41|$07:$8A31:90 1B BCC $8A4E 0x01CA43|$07:$8A33:A5 6D LDA $6D 0x01CA45|$07:$8A35:38 SEC 0x01CA46|$07:$8A36:E9 F0 SBC #$F0 0x01CA48|$07:$8A38:A8 TAY 0x01CA49|$07:$8A39:A5 6E LDA $6E 0x01CA4B|$07:$8A3B:E9 00 SBC #$00 0x01CA4D|$07:$8A3D:B0 0B BCS $8A4A 0x01CA4F|$07:$8A3F:A5 08 LDA $08 0x01CA51|$07:$8A41:49 08 EOR #$08 0x01CA53|$07:$8A43:85 08 STA $08 0x01CA55|$07:$8A45:A5 6D LDA $6D 0x01CA57|$07:$8A47:4C 4F 8A JMP $8A4F ; control flow target (from $8A3D) 0x01CA5A|$07:$8A4A:98 TYA 0x01CA5B|$07:$8A4B:4C 4F 8A JMP $8A4F ; control flow target (from $8A31) 0x01CA5E|$07:$8A4E:8A TXA ; control flow target (from $8A47, $8A4B) 0x01CA5F|$07:$8A4F:A2 00 LDX #$00 0x01CA61|$07:$8A51:86 6D STX $6D 0x01CA63|$07:$8A53:0A ASL 0x01CA64|$07:$8A54:26 6D ROL $6D 0x01CA66|$07:$8A56:0A ASL 0x01CA67|$07:$8A57:26 6D ROL $6D 0x01CA69|$07:$8A59:05 07 ORA $07 0x01CA6B|$07:$8A5B:85 07 STA $07 0x01CA6D|$07:$8A5D:A5 6D LDA $6D 0x01CA6F|$07:$8A5F:05 08 ORA $08 0x01CA71|$07:$8A61:85 08 STA $08 0x01CA73|$07:$8A63:60 RTS ; control flow target (from $8924) 0x01CA74|$07:$8A64:AD A3 8A LDA $8AA3 0x01CA77|$07:$8A67:85 0E STA $0E 0x01CA79|$07:$8A69:85 10 STA $10 0x01CA7B|$07:$8A6B:AD A4 8A LDA $8AA4 0x01CA7E|$07:$8A6E:85 0F STA $0F 0x01CA80|$07:$8A70:85 11 STA $11 0x01CA82|$07:$8A72:A9 FF LDA #$FF 0x01CA84|$07:$8A74:85 0D STA $0D ; call to code in a different bank ($0F:$C2CD) 0x01CA86|$07:$8A76:4C CD C2 JMP $C2CD ; control flow target (from $89B0) 0x01CA89|$07:$8A79:AD 8C 60 LDA $608C 0x01CA8C|$07:$8A7C:48 PHA 0x01CA8D|$07:$8A7D:AD 8B 60 LDA $608B 0x01CA90|$07:$8A80:48 PHA 0x01CA91|$07:$8A81:8C 8C 60 STY $608C 0x01CA94|$07:$8A84:A9 20 LDA #$20 0x01CA96|$07:$8A86:8D 8B 60 STA $608B 0x01CA99|$07:$8A89:A5 6D LDA $6D 0x01CA9B|$07:$8A8B:85 09 STA $09 ; control flow target (from $8A96) 0x01CA9D|$07:$8A8D:20 F5 89 JSR $89F5 ; call to code in a different bank ($0F:$C1FA) 0x01CAA0|$07:$8A90:20 FA C1 JSR $C1FA ; wait for $02 to not be #$C0, write PPU address in $07-$08 and data in $09 to PPU write buffer at $0300,$02, $01 += 1, $02 += 3, and set $0183 to #$00 0x01CAA3|$07:$8A93:CE 8B 60 DEC $608B 0x01CAA6|$07:$8A96:D0 F5 BNE $8A8D 0x01CAA8|$07:$8A98:68 PLA 0x01CAA9|$07:$8A99:8D 8B 60 STA $608B 0x01CAAC|$07:$8A9C:68 PLA 0x01CAAD|$07:$8A9D:8D 8C 60 STA $608C 0x01CAB0|$07:$8AA0:60 RTS ; code -> data ; -> $07:$8AB2: Prologue text ; data load target (from $8927) 0x01CAB1|$07:$8AA1:B2 ; data load target (from $892C) 0x01CAB2|$07:$8AA2: 8A ; $07:$8AB2; Prologue text ; data load target (from $8A64) 0x01CAB3|$07:$8AA3:A5 ; data load target (from $8A6B) 0x01CAB4|$07:$8AA4: 8A ; $07:$8AA5 ; indirect data load target (via $8AA3) 0x01CAB5|$07:$8AA5:0F 20 20 20 20 20 20 20 20 20 20 20 20 ; Prologue text ; indirect data load target (via $8AA1) 0x01CAC2|$07:$8AB2:0C 33 35 32 2F 32 2A 38 28 FF 82 05 30 0A 17 22 5F 22 0E 0A 1B 1C 5F 0A 10 18 5F 0A 5F 22 18 1E 17 10 FF 05 20 0A 1B 1B 12 18 1B 5F 20 11 18 5F 20 0A 1C 5F 18 0F 5F 1D 11 0E FF 07 15 12 17 0E 5F 18 0F 5F 1D 11 0E 5F 10 1B 0E 0A 1D FF 04 28 1B 0D 1B 12 0C 14 5F 0C 0A 16 0E 5F 1D 18 5F 24 15 0E 0F 10 0A 1B 0D FF 04 0A 17 0D 5F 0D 0E 0F 0E 0A 1D 0E 0D 5F 1D 11 0E 5F 0D 1B 0E 0A 0D 0E 0D FF 05 27 1B 0A 10 18 17 15 18 1B 0D 69 5F 1B 0E 1C 1D 18 1B 12 17 10 FF 07 19 0E 0A 0C 0E 5F 1D 18 5F 1D 11 0E 5F 15 0A 17 0D 6B FF 82 06 29 18 1B 5F 16 0A 17 22 5F 10 0E 17 0E 1B 0A 1D 12 18 17 1C FF 05 1D 11 0E 5F 0D 0E 1C 0C 0E 17 0D 0A 17 1D 1C 5F 18 0F 5F 1D 11 0A 1D FF 05 20 0A 1B 1B 12 18 1B 5F 1B 1E 15 0E 0D 5F 24 15 0E 0F 10 0A 1B 0D FF 06 0A 17 0D 5F 1D 11 0E 5F 1C 1E 1B 1B 18 1E 17 0D 12 17 10 FF 06 15 0A 17 0D 1C 69 5F 12 17 0C 15 1E 0D 12 17 10 5F 1D 11 0E FF 05 2E 12 17 10 0D 18 16 5F 18 0F 5F 30 18 18 17 0B 1B 18 18 14 0E FF 05 0A 0C 1B 18 1C 1C 5F 1D 11 0E 5F 0E 0A 1C 1D 0E 1B 17 5F 1C 0E 0A FF 09 0F 1B 18 16 5F 24 15 0E 0F 10 0A 1B 0D 6B FF 8F FF ; data -> free 0x01CC23|$07:$8C13:FF ; ... skipping $13EA FF bytes 0x01E00E|$07:$9FFE:FF ; free -> data 0x01E00F|$07:$9FFF:FF ; data -> free 0x01E010|$07:$A000:FF ; ... skipping $1FD6 FF bytes 0x01FFE7|$07:$BFD7:FF ; free -> unknown 0x01FFE8|$07:$BFD8:78 ; SEI 0x01FFE9|$07:$BFD9:EE DF BF ; INC $BFDF 0x01FFEA|$07:$BFDA:DF ; INVALID OPCODE 0x01FFEB|$07:$BFDB:BF ; INVALID OPCODE 0x01FFEC|$07:$BFDC:4C 86 FF ; JMP $FF86 0x01FFED|$07:$BFDD:86 FF ; STX $FF 0x01FFEE|$07:$BFDE:FF ; INVALID OPCODE 0x01FFEF|$07:$BFDF:80 ; INVALID OPCODE 0x01FFF0|$07:$BFE0:44 ; INVALID OPCODE 0x01FFF1|$07:$BFE1:52 ; INVALID OPCODE 0x01FFF2|$07:$BFE2:41 47 ; EOR ($47,X) 0x01FFF3|$07:$BFE3:47 ; INVALID OPCODE 0x01FFF4|$07:$BFE4:4F ; INVALID OPCODE 0x01FFF5|$07:$BFE5:4E 20 57 ; LSR $5720 0x01FFF6|$07:$BFE6:20 57 41 ; JSR $4157 0x01FFF7|$07:$BFE7:57 ; INVALID OPCODE 0x01FFF8|$07:$BFE8:41 52 ; EOR ($52,X) 0x01FFF9|$07:$BFE9:52 ; INVALID OPCODE 0x01FFFA|$07:$BFEA:52 ; INVALID OPCODE 0x01FFFB|$07:$BFEB:49 4F ; EOR #$4F 0x01FFFC|$07:$BFEC:4F ; INVALID OPCODE 0x01FFFD|$07:$BFED:52 ; INVALID OPCODE 0x01FFFE|$07:$BFEE:53 ; INVALID OPCODE 0x01FFFF|$07:$BFEF:32 ; INVALID OPCODE 0x020000|$07:$BFF0:D5 BB ; CMP $BB,X 0x020001|$07:$BFF1:BB ; INVALID OPCODE 0x020002|$07:$BFF2:00 ; BRK 0x020003|$07:$BFF3:00 ; BRK 0x020004|$07:$BFF4:48 ; PHA 0x020005|$07:$BFF5:04 ; INVALID OPCODE 0x020006|$07:$BFF6:01 0F ; ORA ($0F,X) 0x020007|$07:$BFF7:0F ; INVALID OPCODE 0x020008|$07:$BFF8:07 ; INVALID OPCODE 0x020009|$07:$BFF9:9D D8 BF ; STA $BFD8,X 0x02000A|$07:$BFFA:D8 ; CLD 0x02000B|$07:$BFFB:BF ; INVALID OPCODE 0x02000C|$07:$BFFC:D8 ; CLD 0x02000D|$07:$BFFD:BF ; INVALID OPCODE 0x02000E|$07:$BFFE:D8 ; CLD ; unknown -> data 0x02000F|$07:$BFFF:BF