If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
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 (NES)//ROM map/ASM bank 07 to Dragon Warrior II (NES)/ROM map/ASM bank 07) |
(One intermediate revision by the same user not shown) | |
(No difference)
|
Latest revision as of 13:03, 31 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