Difference between revisions of "Dragon Warrior II::ROM map/ASM bank 07"

From Data Crystal
Jump to: navigation, search
(Created page with " ; 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:...")
 
(No difference)

Latest revision as of 14:55, 7 July 2019

; 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