Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
The wiki has recently moved; please report any issues in Discord. Pardon the dust.
The Battle of Olympus (NES)/ROM map: Difference between revisions
Jump to navigation
Jump to search
(Created page with "{{rommap|game=The Battle of Olympus}} ==Bank 7 Disassembly (US version)== Bank 7 is the fixed ROM bank and provides much of the game's code, with the other banks supplying dat...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{rommap|game=The Battle of Olympus}} | {{rommap|game=The Battle of Olympus}} | ||
==Bank 7 Disassembly (US version)== | ==Bank 7 Disassembly (US version)== | ||
Bank 7 is the fixed ROM bank and provides much of the game's code, with the other banks supplying data and bank-specific code. | Bank 7 is the fixed ROM bank and provides much of the game's code, with the other banks supplying data and bank-specific code. Addresses are given as they appear in RAM; to get the file address, simply add $10010. | ||
<pre> | <pre> | ||
; data | ; data |
Revision as of 15:27, 24 March 2018
The following article is a ROM map for The Battle of Olympus (NES).
Bank 7 Disassembly (US version)
Bank 7 is the fixed ROM bank and provides much of the game's code, with the other banks supplying data and bank-specific code. Addresses are given as they appear in RAM; to get the file address, simply add $10010.
; data $C000:19 D4 ; $D419 ; reset vector jumps to here ; control flow target $C002:78 SEI $C003:D8 CLD $C004:A2 FF LDX #$FF $C006:9A TXS $C007:20 8C D3 JSR $D38C ; set PPU_Control_Register_1_settings = select 8x8 sprites, background pattern table #1, sprite pattern table #0, PPU auto-increment by 1, name table #0 $C00A:20 94 D3 JSR $D394 ; turn off a bunch of PPU stuff, set PPU_Control_Register_2_settings to #$00 $C00D:8D 10 40 STA $4010 ; pAPU Delta Modulation Control Register $C010:8D 15 40 STA $4015 ; pAPU Sound/Vertical Clock Signal Register $C013:A9 C0 LDA #$C0 $C015:8D 17 40 STA $4017 ; Joypad #2/SOFTCLK ; control flow target $C018:AD 02 20 LDA $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $C01B:10 FB BPL $C018 ; wait for VBlank busy loop ; control flow target $C01D:AD 02 20 LDA $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $C020:10 FB BPL $C01D ; wait for VBlank busy loop $C022:20 1D D3 JSR $D31D ; initialize RAM, VRAM, etc. $C025:20 0C E5 JSR $E50C $C028:A9 AA LDA #$AA $C02A:85 DA STA $DA $C02C:85 DC STA $DC $C02E:85 F5 STA $F5 $C030:A9 10 LDA #$10 $C032:85 EF STA $EF ; max HP $C034:85 4A STA $4A ; current HP $C036:A9 00 LDA #$00 $C038:85 6E STA $6E $C03A:85 6F STA $6F $C03C:85 E0 STA $E0 ; 1's digit of current olive count $C03E:85 E1 STA $E1 ; 10's digit of current olive count $C040:20 20 E3 JSR $E320 ; sets quest status flag specified by A $C043:A2 01 LDX #$01 $C045:20 8A C7 JSR $C78A $C048:20 11 EE JSR $EE11 $C04B:A9 00 LDA #$00 $C04D:A6 DE LDX $DE $C04F:F0 08 BEQ $C059 $C051:85 DE STA $DE $C053:20 38 C1 JSR $C138 $C056:4C 5C C0 JMP $C05C ; control flow target $C059:20 31 C1 JSR $C131 ; control flow target $C05C:20 DD D7 JSR $D7DD ; ask the RNG for a number $C05F:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $C062:E6 47 INC $47 $C064:20 82 C0 JSR $C082 $C067:A5 47 LDA $47 $C069:29 1F AND #$1F $C06B:D0 03 BNE $C070 $C06D:20 47 C3 JSR $C347 ; control flow target $C070:A5 FC LDA $FC $C072:F0 E8 BEQ $C05C $C074:A6 95 LDX $95 $C076:E8 INX $C077:D0 E3 BNE $C05C $C079:20 BE F5 JSR $F5BE $C07C:A9 00 LDA #$00 $C07E:85 FC STA $FC $C080:F0 DA BEQ $C05C ; control flow target $C082:A5 2E LDA $2E $C084:20 A2 D7 JSR $D7A2 ; jump table $C087:8F C0 ; $C08F $C089:6E DA ; $DA6E $C08B:AD C1 ; $C1AD $C08D:00 C2 ; $C200 ; control flow target $C08F:AD E2 03 LDA $03E2 $C092:F0 02 BEQ $C096 $C094:E6 2E INC $2E ; control flow target $C096:20 58 D3 JSR $D358 $C099:20 F2 C3 JSR $C3F2 $C09C:A4 44 LDY $44 $C09E:D0 71 BNE $C111 $C0A0:A5 55 LDA $55 $C0A2:05 54 ORA $54 $C0A4:D0 06 BNE $C0AC $C0A6:A5 51 LDA $51 $C0A8:29 30 AND #$30 $C0AA:D0 40 BNE $C0EC ; control flow target $C0AC:A5 65 LDA $65 $C0AE:C9 E0 CMP #$E0 $C0B0:B0 15 BCS $C0C7 $C0B2:20 BE F1 JSR $F1BE $C0B5:20 19 D0 JSR $D019 $C0B8:20 A0 D8 JSR $D8A0 $C0BB:20 DC C1 JSR $C1DC $C0BE:A5 F8 LDA $F8 $C0C0:29 30 AND #$30 $C0C2:D0 0F BNE $C0D3 $C0C4:85 70 STA $70 ; control flow target $C0C6:60 RTS ; control flow target $C0C7:20 86 C2 JSR $C286 $C0CA:B0 04 BCS $C0D0 $C0CC:84 44 STY $44 $C0CE:90 41 BCC $C111 ; control flow target $C0D0:4C E7 C1 JMP $C1E7 ; control flow target $C0D3:29 20 AND #$20 $C0D5:F0 03 BEQ $C0DA $C0D7:4C 49 E4 JMP $E449 ; control flow target $C0DA:20 9B E0 JSR $E09B $C0DD:20 9B C1 JSR $C19B $C0E0:20 0B F3 JSR $F30B $C0E3:20 2C F6 JSR $F62C $C0E6:20 0F D3 JSR $D30F $C0E9:4C EB D3 JMP $D3EB ; control flow target $C0EC:A0 02 LDY #$02 $C0EE:29 20 AND #$20 $C0F0:D0 01 BNE $C0F3 $C0F2:C8 INY ; control flow target $C0F3:20 09 E7 JSR $E709 $C0F6:B1 3E LDA ($3E),Y $C0F8:F0 CC BEQ $C0C6 $C0FA:30 2B BMI $C127 $C0FC:AA TAX $C0FD:20 7A C1 JSR $C17A $C100:86 2F STX $2F $C102:20 BE F5 JSR $F5BE $C105:20 3D D0 JSR $D03D $C108:20 5C F1 JSR $F15C $C10B:20 65 F1 JSR $F165 $C10E:4C 68 C3 JMP $C368 ; control flow target $C111:20 00 D3 JSR $D300 ; initialize a bunch of stuff $C114:20 5C F1 JSR $F15C $C117:A4 44 LDY $44 $C119:30 12 BMI $C12D $C11B:20 BC CF JSR $CFBC $C11E:A4 44 LDY $44 $C120:88 DEY $C121:20 5E D5 JSR $D55E $C124:4C 67 C1 JMP $C167 ; control flow target $C127:48 PHA $C128:20 00 D3 JSR $D300 ; initialize a bunch of stuff $C12B:68 PLA $C12C:A8 TAY ; control flow target $C12D:88 DEY $C12E:98 TYA $C12F:29 7F AND #$7F ; control flow target $C131:A6 DF LDX $DF ; location $C133:85 DF STA $DF ; location $C135:E8 INX $C136:86 DE STX $DE ; control flow target $C138:20 52 F6 JSR $F652 ; STZ to $8E, $94-$97, $99-$9A, pAPU stuff $C13B:A5 DF LDA $DF ; location $C13D:C9 08 CMP #$08 $C13F:B0 03 BCS $C144 $C141:20 9B EB JSR $EB9B ; control flow target $C144:20 E9 C2 JSR $C2E9 $C147:A9 FF LDA #$FF $C149:85 45 STA $45 $C14B:20 5C F1 JSR $F15C $C14E:20 33 D5 JSR $D533 $C151:A9 4B LDA #$4B ; maximum number of drops per screen? $C153:85 6C STA $6C $C155:85 6D STA $6D $C157:A5 44 LDA $44 $C159:C9 0C CMP #$0C $C15B:D0 0A BNE $C167 $C15D:A2 01 LDX #$01 $C15F:A5 64 LDA $64 $C161:F0 01 BEQ $C164 $C163:E8 INX ; control flow target $C164:20 8A C7 JSR $C78A ; control flow target $C167:A9 00 LDA #$00 $C169:85 70 STA $70 $C16B:20 9B C1 JSR $C19B $C16E:20 65 F1 JSR $F165 $C171:20 0C D3 JSR $D30C $C174:20 EB D3 JSR $D3EB $C177:4C 68 C3 JMP $C368 ; control flow target $C17A:CA DEX $C17B:E0 02 CPX #$02 $C17D:B0 1B BCS $C19A $C17F:A5 DF LDA $DF ; location $C181:C9 06 CMP #$06 $C183:D0 15 BNE $C19A $C185:A5 2F LDA $2F $C187:C9 12 CMP #$12 $C189:F0 0F BEQ $C19A $C18B:A5 F2 LDA $F2 $C18D:4A LSR A $C18E:90 0A BCC $C19A $C190:A5 F1 LDA $F1 $C192:0A ASL A $C193:90 05 BCC $C19A $C195:0A ASL A $C196:90 02 BCC $C19A $C198:A2 12 LDX #$12 ; control flow target $C19A:60 RTS ; control flow target $C19B:20 14 E5 JSR $E514 ; control flow target $C19E:20 75 D8 JSR $D875 $C1A1:20 92 E1 JSR $E192 $C1A4:20 43 CF JSR $CF43 $C1A7:20 FF C2 JSR $C2FF $C1AA:4C 5D D8 JMP $D85D ; copy $D869-$D874 to $0200-$020B ; control flow target $C1AD:20 DB C2 JSR $C2DB $C1B0:20 F2 C3 JSR $C3F2 $C1B3:20 EB D3 JSR $D3EB $C1B6:A5 47 LDA $47 $C1B8:29 03 AND #$03 $C1BA:D0 1F BNE $C1DB $C1BC:A9 09 LDA #$09 $C1BE:85 99 STA $99 $C1C0:A2 01 LDX #$01 $C1C2:A5 F2 LDA $F2 $C1C4:29 02 AND #$02 $C1C6:F0 01 BEQ $C1C9 $C1C8:E8 INX ; control flow target $C1C9:86 6A STX $6A $C1CB:20 A0 D8 JSR $D8A0 $C1CE:A5 4A LDA $4A ; current HP $C1D0:C5 EF CMP $EF ; max HP $C1D2:90 07 BCC $C1DB $C1D4:20 E2 C2 JSR $C2E2 $C1D7:A9 00 LDA #$00 $C1D9:85 2E STA $2E ; control flow target $C1DB:60 RTS ; control flow target $C1DC:A5 4A LDA $4A ; current HP $C1DE:F0 01 BEQ $C1E1 ; control flow target $C1E0:60 RTS ; control flow target $C1E1:A5 66 LDA $66 $C1E3:C9 20 CMP #$20 $C1E5:B0 F9 BCS $C1E0 ; control flow target $C1E7:20 F5 C1 JSR $C1F5 $C1EA:85 1A STA $1A $C1EC:A9 03 LDA #$03 $C1EE:85 2E STA $2E $C1F0:A9 12 LDA #$12 $C1F2:4C ED F5 JMP $F5ED ; control flow target $C1F5:A9 00 LDA #$00 $C1F7:85 4D STA $4D $C1F9:85 59 STA $59 $C1FB:85 5A STA $5A $C1FD:85 4B STA $4B $C1FF:60 RTS ; control flow target $C200:20 58 D3 JSR $D358 $C203:A5 65 LDA $65 $C205:C9 E0 CMP #$E0 $C207:90 05 BCC $C20E $C209:20 E6 D3 JSR $D3E6 $C20C:90 2F BCC $C23D ; control flow target $C20E:A5 51 LDA $51 $C210:29 04 AND #$04 $C212:D0 0E BNE $C222 $C214:A9 00 LDA #$00 $C216:85 44 STA $44 $C218:85 F8 STA $F8 $C21A:85 F9 STA $F9 $C21C:20 F2 C3 JSR $C3F2 $C21F:4C EB D3 JMP $D3EB ; control flow target $C222:20 C4 C3 JSR $C3C4 $C225:E6 1A INC $1A $C227:A2 0C LDX #$0C $C229:A5 1A LDA $1A $C22B:C9 20 CMP #$20 $C22D:90 02 BCC $C231 $C22F:A2 0E LDX #$0E ; control flow target $C231:86 13 STX $13 $C233:A9 00 LDA #$00 $C235:85 5D STA $5D $C237:20 CC CB JSR $CBCC $C23A:20 EB D3 JSR $D3EB ; control flow target $C23D:A6 95 LDX $95 $C23F:E8 INX $C240:F0 01 BEQ $C243 $C242:60 RTS ; control flow target $C243:20 00 D3 JSR $D300 ; initialize a bunch of stuff $C246:20 F5 C1 JSR $C1F5 $C249:85 4C STA $4C $C24B:85 2E STA $2E $C24D:20 D0 ED JSR $EDD0 $C250:20 00 D3 JSR $D300 ; initialize a bunch of stuff $C253:A5 10 LDA $10 $C255:F0 0E BEQ $C265 $C257:20 22 E0 JSR $E022 ; check password? $C25A:B0 09 BCS $C265 $C25C:20 0C C3 JSR $C30C $C25F:A9 00 LDA #$00 $C261:85 DE STA $DE $C263:F0 18 BEQ $C27D ; control flow target $C265:A5 E1 LDA $E1 ; 10's digit of current olive count $C267:A2 0A LDX #$0A $C269:20 6A D7 JSR $D76A ; multiplies A by X, returning low byte in $03 and high byte in A $C26C:A5 03 LDA $03 ; 10's digit is always < 10, so A * X <= 90 and high byte is always #$00; discard the high byte and use the low byte $C26E:18 CLC $C26F:65 E0 ADC $E0 ; 1's digit of current olive count; A now has the total olive count $C271:4A LSR ; death penalty: divide olive count by 2, rounding down $C272:A2 0A LDX #$0A $C274:20 85 D7 JSR $D785 ; divides A by X, returning quotient in $02 and remainder in A $C277:85 E0 STA $E0 ; new 1's digit of current olive count $C279:A5 02 LDA $02 $C27B:85 E1 STA $E1 ; new 10's digit of current olive count ; control flow target $C27D:A5 EF LDA $EF ; max HP $C27F:85 4A STA $4A ; current HP $C281:4C 44 C1 JMP $C144 $C284:10 20 BPL $C2A6 ; control flow target $C286:A2 CA LDX #$CA $C288:A9 C2 LDA #$C2 ; control flow target $C28A:86 04 STX $04 $C28C:85 05 STA $05 $C28E:A5 DF LDA $DF ; location $C290:0A ASL A $C291:0A ASL A $C292:0A ASL A $C293:0A ASL A $C294:65 2F ADC $2F $C296:85 02 STA $02 $C298:A5 64 LDA $64 $C29A:85 03 STA $03 $C29C:A5 63 LDA $63 $C29E:46 03 LSR $03 $C2A0:6A ROR A $C2A1:46 03 LSR $03 $C2A3:6A ROR A $C2A4:4A LSR A $C2A5:85 03 STA $03 $C2A7:A0 00 LDY #$00 ; control flow target $C2A9:B1 04 LDA ($04),Y $C2AB:F0 1B BEQ $C2C8 $C2AD:C5 02 CMP $02 $C2AF:D0 11 BNE $C2C2 $C2B1:C8 INY $C2B2:A5 03 LDA $03 $C2B4:D1 04 CMP ($04),Y $C2B6:90 0B BCC $C2C3 $C2B8:C8 INY $C2B9:D1 04 CMP ($04),Y $C2BB:B0 07 BCS $C2C4 $C2BD:C8 INY $C2BE:B1 04 LDA ($04),Y $C2C0:A8 TAY $C2C1:60 RTS ; control flow target $C2C2:C8 INY ; control flow target $C2C3:C8 INY ; control flow target $C2C4:C8 INY $C2C5:C8 INY $C2C6:D0 E1 BNE $C2A9 ; control flow target $C2C8:38 SEC $C2C9:60 RTS ; data for $C2A9 + unknown $C2CA:27 26 $C2CC:2A $C2CD:06 26 $C2CF:50 54 $C2D1:30 40 $C2D3:26 2A $C2D5:23 41 $C2D7:16 1A $C2D9:24 00 ; control flow target $C2DB:A9 80 LDA #$80 $C2DD:05 4B ORA $4B $C2DF:85 4B STA $4B $C2E1:60 RTS ; control flow target $C2E2:A5 4B LDA $4B $C2E4:29 7F AND #$7F $C2E6:85 4B STA $4B $C2E8:60 RTS ; control flow target $C2E9:20 F9 E5 JSR $E5F9 $C2EC:A0 06 LDY #$06 $C2EE:A5 DF LDA $DF ; location $C2F0:C9 08 CMP #$08 $C2F2:90 01 BCC $C2F5 $C2F4:C8 INY ; control flow target $C2F5:98 TYA $C2F6:4C 00 E6 JMP $E600 ; data $C2F9:08 2C $C2FB:37 16 $C2FD:28 30 ; control flow target $C2FF:A2 18 LDX #$18 $C301:A9 20 LDA #$20 $C303:85 02 STA $02 $C305:A9 F9 LDA #$F9 $C307:A0 C2 LDY #$C2 $C309:4C DF D2 JMP $D2DF ; control flow target $C30C:A2 01 LDX #$01 ; control flow target $C30E:B5 6E LDA $6E,X $C310:F0 0D BEQ $C31F $C312:86 02 STX $02 $C314:20 0D E3 JSR $E30D $C317:08 PHP $C318:A6 02 LDX $02 $C31A:28 PLP $C31B:D0 02 BNE $C31F $C31D:95 6E STA $6E,X ; control flow target $C31F:CA DEX $C320:10 EC BPL $C30E $C322:60 RTS ; data $C323:01 FF $C325:01 FF $C327:FF 01 01 FF $C32B:04 0C $C32D:04 0C $C32F:08 $C330:08 $C331:04 04 $C333:00 06 $C335:0F 18 E8 10 $C339:F0 08 $C33B:07 06 $C33D:05 04 $C33F:FD FC FC $C342:FB $C343:58 $C344:C8 $C345:30 A8 ; control flow target $C347:A5 47 LDA $47 $C349:29 20 AND #$20 $C34B:D0 15 BNE $C362 ; control flow target $C34D:A5 49 LDA $49 $C34F:8D 0C 02 STA $020C $C352:A5 48 LDA $48 $C354:8D 0F 02 STA $020F $C357:A9 03 LDA #$03 $C359:8D 0E 02 STA $020E $C35C:A9 28 LDA #$28 $C35E:8D 0D 02 STA $020D $C361:60 RTS ; control flow target $C362:A9 F8 LDA #$F8 $C364:8D 0C 02 STA $020C ; control flow target $C367:60 RTS ; control flow target $C368:A0 00 LDY #$00 $C36A:84 FC STY $FC $C36C:84 61 STY $61 $C36E:84 62 STY $62 $C370:84 54 STY $54 $C372:84 55 STY $55 $C374:84 52 STY $52 $C376:84 47 STY $47 $C378:84 66 STY $66 $C37A:84 6A STY $6A $C37C:A5 44 LDA $44 $C37E:A2 02 LDX #$02 $C380:20 B5 C3 JSR $C3B5 ; control flow target $C383:A9 00 LDA #$00 $C385:85 17 STA $17 $C387:85 18 STA $18 $C389:85 5D STA $5D $C38B:85 5B STA $5B $C38D:A5 44 LDA $44 $C38F:F0 D6 BEQ $C367 $C391:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $C394:20 58 D3 JSR $D358 $C397:20 C4 C3 JSR $C3C4 $C39A:20 0B C4 JSR $C40B $C39D:A5 44 LDA $44 $C39F:10 06 BPL $C3A7 $C3A1:A5 51 LDA $51 $C3A3:29 FC AND #$FC $C3A5:85 51 STA $51 ; control flow target $C3A7:20 BE F1 JSR $F1BE $C3AA:E6 47 INC $47 $C3AC:20 47 C3 JSR $C347 $C3AF:20 19 D0 JSR $D019 $C3B2:4C 83 C3 JMP $C383 ; control flow target $C3B5:86 02 STX $02 $C3B7:38 SEC $C3B8:E9 0B SBC #$0B $C3BA:10 02 BPL $C3BE $C3BC:A9 00 LDA #$00 ; control flow target $C3BE:18 CLC $C3BF:65 02 ADC $02 $C3C1:85 4B STA $4B $C3C3:60 RTS ; control flow target $C3C4:A9 00 LDA #$00 $C3C6:85 13 STA $13 $C3C8:85 15 STA $15 $C3CA:85 19 STA $19 $C3CC:A5 63 LDA $63 $C3CE:85 10 STA $10 $C3D0:A5 64 LDA $64 $C3D2:85 11 STA $11 $C3D4:A5 65 LDA $65 $C3D6:85 12 STA $12 $C3D8:60 RTS ; control flow target $C3D9:09 80 ORA #$80 $C3DB:85 44 STA $44 $C3DD:29 7F AND #$7F $C3DF:A2 07 LDX #$07 $C3E1:20 B5 C3 JSR $C3B5 $C3E4:20 CC CB JSR $CBCC $C3E7:20 EB D3 JSR $D3EB $C3EA:20 A7 C3 JSR $C3A7 $C3ED:A5 46 LDA $46 $C3EF:85 44 STA $44 $C3F1:60 RTS ; control flow target $C3F2:20 C4 C3 JSR $C3C4 $C3F5:A5 4B LDA $4B $C3F7:30 12 BMI $C40B $C3F9:C9 0C CMP #$0C $C3FB:B0 0E BCS $C40B $C3FD:20 10 C6 JSR $C610 $C400:A5 44 LDA $44 $C402:D0 D5 BNE $C3D9 $C404:A5 30 LDA $30 $C406:F0 03 BEQ $C40B $C408:20 E5 C5 JSR $C5E5 ; control flow target $C40B:20 E8 C4 JSR $C4E8 $C40E:A5 4D LDA $4D $C410:F0 04 BEQ $C416 $C412:A9 08 LDA #$08 $C414:85 13 STA $13 ; control flow target $C416:20 CC CB JSR $CBCC $C419:A5 13 LDA $13 $C41B:05 4C ORA $4C $C41D:AA TAX $C41E:4A LSR A $C41F:A8 TAY $C420:B9 00 CF LDA $CF00,Y $C423:85 68 STA $68 $C425:A5 65 LDA $65 $C427:18 CLC $C428:7D 05 CF ADC $CF05,X $C42B:85 67 STA $67 $C42D:A9 FF LDA #$FF $C42F:85 69 STA $69 $C431:A5 F1 LDA $F1 $C433:29 04 AND #$04 $C435:F0 20 BEQ $C457 $C437:24 5D BIT $5D $C439:70 1C BVS $C457 $C43B:30 15 BMI $C452 $C43D:C0 00 CPY #$00 $C43F:D0 08 BNE $C449 $C441:A5 62 LDA $62 $C443:C9 02 CMP #$02 $C445:D0 0B BNE $C452 $C447:F0 0E BEQ $C457 ; control flow target $C449:C0 03 CPY #$03 $C44B:D0 05 BNE $C452 $C44D:20 DE C6 JSR $C6DE $C450:B0 05 BCS $C457 ; control flow target $C452:BD 0F CF LDA $CF0F,X $C455:85 69 STA $69 ; control flow target $C457:A6 54 LDX $54 $C459:F0 02 BEQ $C45D $C45B:C6 54 DEC $54 ; control flow target $C45D:20 EB D3 JSR $D3EB $C460:A5 10 LDA $10 $C462:85 63 STA $63 $C464:A5 11 LDA $11 $C466:85 64 STA $64 $C468:A5 12 LDA $12 $C46A:85 65 STA $65 $C46C:A5 4C LDA $4C $C46E:F0 02 BEQ $C472 $C470:C6 12 DEC $12 ; control flow target $C472:A9 00 LDA #$00 $C474:85 07 STA $07 $C476:A2 01 LDX #$01 $C478:A5 55 LDA $55 $C47A:F0 01 BEQ $C47D $C47C:E8 INX ; control flow target $C47D:A5 4F LDA $4F $C47F:09 01 ORA #$01 $C481:A8 TAY $C482:20 AB CA JSR $CAAB $C485:85 51 STA $51 $C487:A5 4D LDA $4D $C489:F0 0F BEQ $C49A $C48B:A5 4F LDA $4F $C48D:4A LSR A $C48E:09 08 ORA #$08 $C490:A8 TAY $C491:A2 01 LDX #$01 $C493:20 AB CA JSR $CAAB $C496:05 51 ORA $51 $C498:85 51 STA $51 ; control flow target $C49A:A0 07 LDY #$07 ; control flow target $C49C:A2 02 LDX #$02 $C49E:84 14 STY $14 $C4A0:20 AB CA JSR $CAAB $C4A3:A4 14 LDY $14 $C4A5:88 DEY $C4A6:88 DEY $C4A7:05 07 ORA $07 $C4A9:85 07 STA $07 $C4AB:C0 04 CPY #$04 $C4AD:B0 ED BCS $C49C $C4AF:A6 4C LDX $4C $C4B1:F0 0C BEQ $C4BF $C4B3:AA TAX $C4B4:29 88 AND #$88 $C4B6:4A LSR A $C4B7:85 07 STA $07 $C4B9:8A TXA $C4BA:29 44 AND #$44 $C4BC:0A ASL A $C4BD:05 07 ORA $07 ; control flow target $C4BF:05 51 ORA $51 $C4C1:85 51 STA $51 $C4C3:60 RTS ; control flow target $C4C4:20 A0 C8 JSR $C8A0 $C4C7:20 32 C9 JSR $C932 $C4CA:A9 01 LDA #$01 $C4CC:A6 53 LDX $53 $C4CE:F0 05 BEQ $C4D5 $C4D0:10 01 BPL $C4D3 $C4D2:0A ASL A ; control flow target $C4D3:85 4F STA $4F ; control flow target $C4D5:A5 5D LDA $5D $C4D7:29 84 AND #$84 $C4D9:C9 84 CMP #$84 $C4DB:F0 06 BEQ $C4E3 $C4DD:A5 5B LDA $5B $C4DF:05 54 ORA $54 $C4E1:F0 04 BEQ $C4E7 ; control flow target $C4E3:A9 04 LDA #$04 $C4E5:85 13 STA $13 ; control flow target $C4E7:60 RTS ; control flow target $C4E8:A5 4B LDA $4B $C4EA:30 E9 BMI $C4D5 $C4EC:20 A2 D7 JSR $D7A2 ; jump table $C4EF:C4 C4 ; $C4C4 $C4F1:91 C7 ; $C791 $C4F3:AC C5 ; $C5AC $C4F5:B7 C5 ; $C5B7 $C4F7:A4 C5 ; $C5A4 $C4F9:A4 C5 ; $C5A4 $C4FB:D0 C5 ; $C5D0 $C4FD:79 C5 ; $C579 $C4FF:79 C5 ; $C579 $C501:9B C5 ; $C59B $C503:9B C5 ; $C59B $C505:79 C5 ; $C579 $C507:20 C5 ; $C520 $C509:0B C5 ; $C50B ; control flow target $C50B:A9 0A LDA #$0A $C50D:85 13 STA $13 $C50F:A9 02 LDA #$02 $C511:85 50 STA $50 ; control flow target $C513:A9 00 LDA #$00 $C515:85 19 STA $19 $C517:85 5D STA $5D $C519:85 5C STA $5C $C51B:85 66 STA $66 $C51D:85 5B STA $5B $C51F:60 RTS ; control flow target $C520:20 13 C5 JSR $C513 $C523:A9 80 LDA #$80 $C525:85 F9 STA $F9 $C527:85 18 STA $18 $C529:4C 32 C9 JMP $C932 $C52C:A5 4B LDA $4B $C52E:C9 02 CMP #$02 $C530:B0 46 BCS $C578 $C532:A5 4A LDA $4A ; current HP $C534:18 CLC $C535:65 6A ADC $6A $C537:85 06 STA $06 $C539:A5 7B LDA $7B $C53B:29 7F AND #$7F $C53D:4A LSR A $C53E:4A LSR A $C53F:C5 06 CMP $06 $C541:90 02 BCC $C545 $C543:A5 4A LDA $4A ; current HP ; control flow target $C545:20 9C D7 JSR $D79C $C548:18 CLC $C549:65 6A ADC $6A $C54B:85 6A STA $6A $C54D:A6 59 LDX $59 $C54F:30 1F BMI $C570 $C551:A4 11 LDY $11 $C553:B9 38 C3 LDA $C338,Y $C556:85 53 STA $53 $C558:A9 18 LDA #$18 $C55A:85 57 STA $57 $C55C:A9 FE LDA #$FE $C55E:85 56 STA $56 $C560:A9 02 LDA #$02 $C562:85 55 STA $55 $C564:A9 00 LDA #$00 $C566:85 5D STA $5D $C568:85 59 STA $59 $C56A:85 54 STA $54 $C56C:85 5B STA $5B $C56E:85 4B STA $4B ; control flow target $C570:A9 40 LDA #$40 $C572:85 66 STA $66 $C574:A9 08 LDA #$08 $C576:85 99 STA $99 ; control flow target $C578:60 RTS ; control flow target $C579:20 F2 C6 JSR $C6F2 $C57C:A5 4F LDA $4F $C57E:AA TAX $C57F:B0 10 BCS $C591 $C581:4A LSR A $C582:08 PHP $C583:A5 10 LDA $10 $C585:29 0F AND #$0F $C587:C9 08 CMP #$08 $C589:68 PLA $C58A:20 DE C5 JSR $C5DE $C58D:D0 48 BNE $C5D7 $C58F:A9 03 LDA #$03 ; control flow target $C591:86 16 STX $16 $C593:85 15 STA $15 $C595:20 A0 C8 JSR $C8A0 $C598:4C 32 C9 JMP $C932 ; control flow target $C59B:20 ED C7 JSR $C7ED $C59E:A5 5A LDA $5A $C5A0:C9 08 CMP #$08 $C5A2:B0 07 BCS $C5AB ; control flow target $C5A4:A2 00 LDX #$00 $C5A6:86 44 STX $44 $C5A8:E8 INX $C5A9:86 4B STX $4B ; control flow target $C5AB:60 RTS ; control flow target $C5AC:20 F2 C6 JSR $C6F2 $C5AF:A9 03 LDA #$03 $C5B1:90 06 BCC $C5B9 $C5B3:45 4F EOR $4F $C5B5:B0 02 BCS $C5B9 ; control flow target $C5B7:A9 00 LDA #$00 ; control flow target $C5B9:85 15 STA $15 $C5BB:A4 4F LDY $4F $C5BD:B9 37 C3 LDA $C337,Y $C5C0:85 53 STA $53 $C5C2:20 D9 C8 JSR $C8D9 $C5C5:20 32 C9 JSR $C932 $C5C8:A5 47 LDA $47 $C5CA:C9 10 CMP #$10 $C5CC:90 0F BCC $C5DD $C5CE:B0 07 BCS $C5D7 ; control flow target $C5D0:20 32 C9 JSR $C932 $C5D3:A9 00 LDA #$00 $C5D5:85 53 STA $53 ; control flow target $C5D7:A9 00 LDA #$00 $C5D9:85 44 STA $44 $C5DB:85 4B STA $4B ; control flow target $C5DD:60 RTS ; control flow target $C5DE:29 01 AND #$01 $C5E0:69 00 ADC #$00 $C5E2:C9 01 CMP #$01 $C5E4:60 RTS ; control flow target $C5E5:A2 02 LDX #$02 $C5E7:A5 11 LDA $11 $C5E9:D0 1D BNE $C608 $C5EB:A5 10 LDA $10 $C5ED:C9 28 CMP #$28 $C5EF:B0 0E BCS $C5FF $C5F1:A5 31 LDA $31 ; control flow target $C5F3:85 46 STA $46 $C5F5:20 8A C7 JSR $C78A $C5F8:68 PLA $C5F9:68 PLA $C5FA:A9 0B LDA #$0B $C5FC:4C D9 C3 JMP $C3D9 ; control flow target $C5FF:C9 D8 CMP #$D8 $C601:90 05 BCC $C608 $C603:CA DEX $C604:A5 32 LDA $32 $C606:D0 EB BNE $C5F3 ; control flow target $C608:60 RTS ; STX to $16-$18 ; control flow target $C609:86 18 STX $18 $C60B:86 16 STX $16 $C60D:86 17 STX $17 $C60F:60 RTS ; control flow target $C610:A9 00 LDA #$00 $C612:85 5B STA $5B $C614:A6 66 LDX $66 $C616:F0 0F BEQ $C627 $C618:CA DEX $C619:86 66 STX $66 $C61B:8A TXA $C61C:0A ASL A $C61D:09 80 ORA #$80 $C61F:85 19 STA $19 $C621:E0 20 CPX #$20 $C623:A2 00 LDX #$00 $C625:B0 E2 BCS $C609 ; STX to $16-$18 ; control flow target $C627:A5 5D LDA $5D $C629:4A LSR A $C62A:90 1D BCC $C649 $C62C:2A ROL A $C62D:09 80 ORA #$80 $C62F:A6 5C LDX $5C $C631:E8 INX $C632:E0 12 CPX #$12 $C634:90 05 BCC $C63B $C636:A9 00 LDA #$00 $C638:AA TAX $C639:F0 0A BEQ $C645 ; control flow target $C63B:E0 07 CPX #$07 $C63D:D0 06 BNE $C645 $C63F:09 40 ORA #$40 $C641:A0 01 LDY #$01 $C643:84 99 STY $99 ; control flow target $C645:85 5D STA $5D $C647:86 5C STX $5C ; control flow target $C649:A5 F8 LDA $F8 $C64B:29 C0 AND #$C0 $C64D:85 18 STA $18 $C64F:29 40 AND #$40 $C651:F0 2E BEQ $C681 $C653:24 19 BIT $19 $C655:70 2A BVS $C681 $C657:20 DE C6 JSR $C6DE $C65A:90 25 BCC $C681 $C65C:CA DEX $C65D:E0 08 CPX #$08 $C65F:90 20 BCC $C681 $C661:E8 INX $C662:F0 02 BEQ $C666 $C664:A2 03 LDX #$03 ; control flow target $C666:A0 00 LDY #$00 $C668:A5 55 LDA $55 $C66A:D0 02 BNE $C66E $C66C:84 53 STY $53 ; control flow target $C66E:A5 59 LDA $59 $C670:30 04 BMI $C676 $C672:84 59 STY $59 $C674:84 4B STY $4B ; control flow target $C676:E8 INX $C677:86 5C STX $5C $C679:A5 F9 LDA $F9 $C67B:29 0C AND #$0C $C67D:09 01 ORA #$01 $C67F:85 5D STA $5D ; control flow target $C681:A5 F9 LDA $F9 $C683:AA TAX $C684:29 03 AND #$03 $C686:85 16 STA $16 $C688:F0 02 BEQ $C68C $C68A:85 50 STA $50 ; control flow target $C68C:8A TXA $C68D:29 0C AND #$0C $C68F:85 17 STA $17 $C691:F0 47 BEQ $C6DA $C693:A5 59 LDA $59 $C695:D0 43 BNE $C6DA $C697:A5 55 LDA $55 $C699:05 54 ORA $54 $C69B:D0 13 BNE $C6B0 $C69D:A5 5D LDA $5D $C69F:D0 09 BNE $C6AA $C6A1:24 19 BIT $19 $C6A3:70 05 BVS $C6AA $C6A5:20 24 C7 JSR $C724 $C6A8:90 30 BCC $C6DA ; control flow target $C6AA:A5 17 LDA $17 $C6AC:29 04 AND #$04 $C6AE:D0 2B BNE $C6DB ; control flow target $C6B0:A5 30 LDA $30 $C6B2:05 5D ORA $5D $C6B4:D0 24 BNE $C6DA $C6B6:A5 17 LDA $17 $C6B8:29 08 AND #$08 $C6BA:F0 1E BEQ $C6DA $C6BC:20 F2 C6 JSR $C6F2 $C6BF:90 19 BCC $C6DA $C6C1:A9 02 LDA #$02 $C6C3:20 86 D6 JSR $D686 $C6C6:B0 12 BCS $C6DA $C6C8:A5 10 LDA $10 $C6CA:29 0F AND #$0F $C6CC:4A LSR A $C6CD:4A LSR A $C6CE:4A LSR A $C6CF:AA TAX $C6D0:20 E6 C6 JSR $C6E6 $C6D3:20 89 C7 JSR $C789 $C6D6:A9 0B LDA #$0B $C6D8:85 44 STA $44 ; control flow target $C6DA:60 RTS ; control flow target $C6DB:E6 5B INC $5B $C6DD:60 RTS ; control flow target $C6DE:A5 5A LDA $5A $C6E0:38 SEC $C6E1:E9 04 SBC #$04 $C6E3:C9 08 CMP #$08 $C6E5:60 RTS ; control flow target $C6E6:8A TXA $C6E7:4A LSR A $C6E8:6A ROR A $C6E9:45 53 EOR $53 $C6EB:10 04 BPL $C6F1 $C6ED:A9 00 LDA #$00 $C6EF:85 53 STA $53 ; control flow target $C6F1:60 RTS ; control flow target $C6F2:A9 02 LDA #$02 $C6F4:85 03 STA $03 $C6F6:A0 10 LDY #$10 ; control flow target $C6F8:84 02 STY $02 $C6FA:20 E6 CA JSR $CAE6 $C6FD:A4 02 LDY $02 $C6FF:0A ASL A $C700:30 10 BMI $C712 $C702:4A LSR A $C703:AA TAX $C704:BD C0 04 LDA $04C0,X $C707:29 08 AND #$08 $C709:F0 07 BEQ $C712 $C70B:C8 INY $C70C:C6 03 DEC $03 $C70E:D0 E8 BNE $C6F8 $C710:38 SEC $C711:60 RTS ; control flow target $C712:18 CLC $C713:60 RTS ; data + unknown $C714:01 01 $C716:00 01 $C718:00 00 $C71A:00 00 $C71C:01 01 $C71E:01 01 $C720:00 01 $C722:00 00 ; control flow target $C724:A5 17 LDA $17 $C726:29 08 AND #$08 $C728:D0 29 BNE $C753 $C72A:A0 0D LDY #$0D $C72C:A9 03 LDA #$03 $C72E:20 7E C8 JSR $C87E $C731:F0 5C BEQ $C78F $C733:09 04 ORA #$04 $C735:C0 0E CPY #$0E $C737:90 12 BCC $C74B $C739:D0 08 BNE $C743 $C73B:C9 0E CMP #$0E $C73D:D0 50 BNE $C78F $C73F:A0 05 LDY #$05 $C741:D0 24 BNE $C767 ; control flow target $C743:C9 0C CMP #$0C $C745:D0 48 BNE $C78F $C747:A0 07 LDY #$07 $C749:D0 1C BNE $C767 ; control flow target $C74B:85 59 STA $59 $C74D:4A LSR A $C74E:29 01 AND #$01 $C750:AA TAX $C751:90 24 BCC $C777 ; control flow target $C753:A0 0B LDY #$0B $C755:20 7C C8 JSR $C87C $C758:F0 35 BEQ $C78F $C75A:48 PHA $C75B:4A LSR A $C75C:46 02 LSR $02 $C75E:2A ROL A $C75F:49 02 EOR #$02 $C761:29 03 AND #$03 $C763:0A ASL A $C764:0A ASL A $C765:A8 TAY $C766:68 PLA ; control flow target $C767:85 59 STA $59 $C769:84 02 STY $02 $C76B:A5 10 LDA $10 $C76D:29 0C AND #$0C $C76F:4A LSR A $C770:4A LSR A $C771:65 02 ADC $02 $C773:A8 TAY $C774:BE 14 C7 LDX $C714,Y ; control flow target $C777:20 E6 C6 JSR $C6E6 $C77A:A9 01 LDA #$01 $C77C:85 4B STA $4B $C77E:18 CLC ; control flow target $C77F:A5 59 LDA $59 $C781:29 FE AND #$FE $C783:86 4F STX $4F $C785:05 4F ORA $4F $C787:85 59 STA $59 ; control flow target $C789:E8 INX ; control flow target $C78A:86 4F STX $4F $C78C:86 50 STX $50 $C78E:60 RTS ; control flow target $C78F:38 SEC $C790:60 RTS ; control flow target $C791:A5 59 LDA $59 $C793:30 58 BMI $C7ED $C795:29 04 AND #$04 $C797:F0 0B BEQ $C7A4 $C799:A0 0D LDY #$0D $C79B:A9 01 LDA #$01 $C79D:20 7E C8 JSR $C87E $C7A0:D0 0B BNE $C7AD $C7A2:F0 14 BEQ $C7B8 ; control flow target $C7A4:A0 0A LDY #$0A $C7A6:A9 01 LDA #$01 $C7A8:20 7E C8 JSR $C87E $C7AB:D0 0B BNE $C7B8 ; control flow target $C7AD:A9 00 LDA #$00 $C7AF:85 5B STA $5B $C7B1:A5 4F LDA $4F $C7B3:85 16 STA $16 $C7B5:4C A6 C8 JMP $C8A6 ; control flow target $C7B8:A5 59 LDA $59 $C7BA:4A LSR A $C7BB:08 PHP $C7BC:29 03 AND #$03 $C7BE:A8 TAY $C7BF:A5 10 LDA $10 $C7C1:29 0F AND #$0F $C7C3:D9 2B C3 CMP $C32B,Y $C7C6:68 PLA $C7C7:20 DE C5 JSR $C5DE $C7CA:D0 E1 BNE $C7AD $C7CC:A5 17 LDA $17 $C7CE:39 2F C3 AND $C32F,Y $C7D1:F0 13 BEQ $C7E6 $C7D3:A5 10 LDA $10 $C7D5:29 F0 AND #$F0 $C7D7:19 2B C3 ORA $C32B,Y $C7DA:85 10 STA $10 $C7DC:A5 59 LDA $59 $C7DE:29 07 AND #$07 $C7E0:09 80 ORA #$80 $C7E2:85 59 STA $59 $C7E4:D0 17 BNE $C7FD ; control flow target $C7E6:A9 00 LDA #$00 $C7E8:85 59 STA $59 $C7EA:85 4B STA $4B $C7EC:60 RTS ; control flow target $C7ED:A6 5A LDX $5A $C7EF:D0 2F BNE $C820 $C7F1:A5 12 LDA $12 $C7F3:29 0F AND #$0F $C7F5:D0 06 BNE $C7FD $C7F7:A5 51 LDA $51 $C7F9:29 04 AND #$04 $C7FB:D0 E9 BNE $C7E6 ; control flow target $C7FD:A5 5D LDA $5D $C7FF:D0 5F BNE $C860 $C801:A5 17 LDA $17 $C803:D0 06 BNE $C80B $C805:A6 16 LDX $16 $C807:F0 57 BEQ $C860 $C809:D0 0F BNE $C81A ; control flow target $C80B:A5 59 LDA $59 $C80D:29 02 AND #$02 $C80F:F0 02 BEQ $C813 $C811:A9 0C LDA #$0C ; control flow target $C813:49 0C EOR #$0C $C815:45 17 EOR $17 $C817:4A LSR A $C818:4A LSR A $C819:AA TAX ; control flow target $C81A:CA DEX $C81B:20 7F C7 JSR $C77F $C81E:A2 10 LDX #$10 ; control flow target $C820:CA DEX $C821:86 5A STX $5A $C823:8A TXA $C824:4A LSR A $C825:90 39 BCC $C860 $C827:E0 08 CPX #$08 $C829:B0 23 BCS $C84E $C82B:A6 12 LDX $12 $C82D:E0 20 CPX #$20 $C82F:90 16 BCC $C847 $C831:E0 B8 CPX #$B8 $C833:90 19 BCC $C84E $C835:20 65 C8 JSR $C865 $C838:30 17 BMI $C851 ; control flow target $C83A:98 TYA $C83B:4A LSR A $C83C:20 86 D6 JSR $D686 $C83F:B0 0D BCS $C84E $C841:A5 46 LDA $46 $C843:85 44 STA $44 $C845:D0 07 BNE $C84E ; control flow target $C847:20 65 C8 JSR $C865 $C84A:10 05 BPL $C851 $C84C:30 EC BMI $C83A ; control flow target $C84E:20 65 C8 JSR $C865 ; control flow target $C851:18 CLC $C852:65 12 ADC $12 $C854:85 12 STA $12 $C856:A2 00 LDX #$00 $C858:86 53 STX $53 $C85A:B9 23 C3 LDA $C323,Y $C85D:20 6E C8 JSR $C86E ; control flow target $C860:A9 06 LDA #$06 $C862:85 13 STA $13 $C864:60 RTS ; control flow target $C865:A5 59 LDA $59 $C867:29 03 AND #$03 $C869:A8 TAY $C86A:B9 27 C3 LDA $C327,Y $C86D:60 RTS ; control flow target $C86E:10 01 BPL $C871 $C870:CA DEX ; control flow target $C871:18 CLC $C872:65 10 ADC $10 $C874:85 10 STA $10 $C876:8A TXA $C877:65 11 ADC $11 $C879:85 11 STA $11 $C87B:60 RTS ; control flow target $C87C:A9 02 LDA #$02 ; control flow target $C87E:85 03 STA $03 ; control flow target $C880:84 02 STY $02 $C882:20 E6 CA JSR $CAE6 $C885:A4 02 LDY $02 $C887:0A ASL A $C888:30 0B BMI $C895 $C88A:4A LSR A $C88B:AA TAX $C88C:BD C0 04 LDA $04C0,X $C88F:29 28 AND #$28 $C891:C9 20 CMP #$20 $C893:B0 08 BCS $C89D ; control flow target $C895:C8 INY $C896:C6 03 DEC $03 $C898:D0 E6 BNE $C880 $C89A:A9 00 LDA #$00 $C89C:60 RTS ; control flow target $C89D:4A LSR A $C89E:4A LSR A $C89F:60 RTS ; control flow target $C8A0:A5 5B LDA $5B $C8A2:05 5D ORA $5D $C8A4:D0 05 BNE $C8AB ; control flow target $C8A6:A4 16 LDY $16 $C8A8:88 DEY $C8A9:10 18 BPL $C8C3 ; control flow target $C8AB:A5 55 LDA $55 $C8AD:D0 24 BNE $C8D3 $C8AF:A5 53 LDA $53 $C8B1:F0 20 BEQ $C8D3 $C8B3:24 19 BIT $19 $C8B5:70 1C BVS $C8D3 $C8B7:A4 4F LDY $4F $C8B9:88 DEY $C8BA:38 SEC $C8BB:F9 23 C3 SBC $C323,Y $C8BE:85 53 STA $53 $C8C0:4C D3 C8 JMP $C8D3 ; control flow target $C8C3:A5 53 LDA $53 $C8C5:20 00 C9 JSR $C900 $C8C8:C8 INY $C8C9:C4 4F CPY $4F $C8CB:F0 04 BEQ $C8D1 $C8CD:88 DEY $C8CE:20 00 C9 JSR $C900 ; control flow target $C8D1:85 53 STA $53 ; control flow target $C8D3:A5 51 LDA $51 $C8D5:29 03 AND #$03 $C8D7:D0 03 BNE $C8DC ; control flow target $C8D9:20 0A C9 JSR $C90A ; control flow target $C8DC:A4 55 LDY $55 $C8DE:D0 1F BNE $C8FF $C8E0:A5 53 LDA $53 $C8E2:F0 14 BEQ $C8F8 $C8E4:10 03 BPL $C8E9 $C8E6:20 9C D7 JSR $D79C ; control flow target $C8E9:A6 61 LDX $61 $C8EB:CA DEX $C8EC:10 0F BPL $C8FD $C8EE:4A LSR A $C8EF:4A LSR A $C8F0:4A LSR A $C8F1:A8 TAY $C8F2:A6 62 LDX $62 $C8F4:E8 INX $C8F5:8A TXA $C8F6:29 03 AND #$03 ; control flow target $C8F8:85 62 STA $62 $C8FA:BE 3A C3 LDX $C33A,Y ; control flow target $C8FD:86 61 STX $61 ; control flow target $C8FF:60 RTS ; control flow target $C900:D9 36 C3 CMP $C336,Y $C903:F0 04 BEQ $C909 $C905:18 CLC $C906:79 23 C3 ADC $C323,Y ; control flow target $C909:60 RTS ; control flow target $C90A:A0 00 LDY #$00 $C90C:A5 53 LDA $53 $C90E:4A LSR A $C90F:4A LSR A $C910:4A LSR A $C911:4A LSR A $C912:C9 08 CMP #$08 $C914:90 03 BCC $C919 $C916:88 DEY $C917:09 F0 ORA #$F0 ; control flow target $C919:85 02 STA $02 $C91B:A5 53 LDA $53 $C91D:0A ASL A $C91E:0A ASL A $C91F:0A ASL A $C920:0A ASL A $C921:18 CLC $C922:65 52 ADC $52 $C924:85 52 STA $52 $C926:A5 10 LDA $10 $C928:65 02 ADC $02 $C92A:85 10 STA $10 $C92C:98 TYA $C92D:65 11 ADC $11 $C92F:85 11 STA $11 $C931:60 RTS ; control flow target $C932:A5 51 LDA $51 $C934:29 04 AND #$04 $C936:D0 63 BNE $C99B $C938:A5 55 LDA $55 $C93A:F0 2E BEQ $C96A $C93C:A5 56 LDA $56 $C93E:05 4D ORA $4D $C940:D0 30 BNE $C972 $C942:E6 4E INC $4E $C944:A5 4E LDA $4E $C946:C9 01 CMP #$01 $C948:D0 28 BNE $C972 $C94A:A5 4C LDA $4C $C94C:F0 0D BEQ $C95B $C94E:20 61 CA JSR $CA61 $C951:B0 1D BCS $C970 $C953:A5 58 LDA $58 $C955:C9 38 CMP #$38 $C957:B0 17 BCS $C970 $C959:90 17 BCC $C972 ; control flow target $C95B:A5 58 LDA $58 $C95D:C9 38 CMP #$38 $C95F:90 11 BCC $C972 $C961:20 61 CA JSR $CA61 $C964:B0 0C BCS $C972 $C966:E6 4C INC $4C $C968:D0 08 BNE $C972 ; control flow target $C96A:E6 55 INC $55 $C96C:A5 4C LDA $4C $C96E:F0 02 BEQ $C972 ; control flow target $C970:C6 4C DEC $4C ; control flow target $C972:20 12 CA JSR $CA12 ; control flow target $C975:A5 58 LDA $58 $C977:38 SEC $C978:E5 02 SBC $02 $C97A:85 58 STA $58 $C97C:A5 02 LDA $02 $C97E:A6 4C LDX $4C $C980:F0 05 BEQ $C987 $C982:49 FF EOR #$FF $C984:18 CLC $C985:69 01 ADC #$01 ; control flow target $C987:18 CLC $C988:65 12 ADC $12 $C98A:CA DEX $C98B:30 0B BMI $C998 $C98D:C9 38 CMP #$38 $C98F:B0 07 BCS $C998 $C991:86 4C STX $4C $C993:86 55 STX $55 $C995:86 56 STX $56 $C997:60 RTS ; control flow target $C998:85 12 STA $12 ; control flow target $C99A:60 RTS ; control flow target $C99B:A5 55 LDA $55 $C99D:F0 2F BEQ $C9CE $C99F:A4 56 LDY $56 $C9A1:30 CF BMI $C972 $C9A3:A5 4D LDA $4D $C9A5:D0 21 BNE $C9C8 $C9A7:A5 12 LDA $12 $C9A9:29 0F AND #$0F $C9AB:C9 08 CMP #$08 $C9AD:A5 4C LDA $4C $C9AF:20 DE C5 JSR $C5DE $C9B2:F0 BE BEQ $C972 $C9B4:C0 04 CPY #$04 $C9B6:90 10 BCC $C9C8 $C9B8:24 19 BIT $19 $C9BA:30 0C BMI $C9C8 $C9BC:A5 5D LDA $5D $C9BE:F0 04 BEQ $C9C4 $C9C0:29 04 AND #$04 $C9C2:F0 04 BEQ $C9C8 ; control flow target $C9C4:A9 08 LDA #$08 $C9C6:85 54 STA $54 ; control flow target $C9C8:A9 00 LDA #$00 $C9CA:85 55 STA $55 $C9CC:85 57 STA $57 ; control flow target $C9CE:85 56 STA $56 $C9D0:A5 4C LDA $4C $C9D2:0A ASL A $C9D3:05 4D ORA $4D $C9D5:AA TAX $C9D6:A5 12 LDA $12 $C9D8:29 F0 AND #$F0 $C9DA:1D 33 C3 ORA $C333,X $C9DD:85 12 STA $12 $C9DF:24 18 BIT $18 $C9E1:10 B7 BPL $C99A $C9E3:A9 00 LDA #$00 $C9E5:85 58 STA $58 $C9E7:85 4E STA $4E $C9E9:85 5D STA $5D $C9EB:20 F1 C9 JSR $C9F1 $C9EE:4C 75 C9 JMP $C975 ; control flow target $C9F1:A0 01 LDY #$01 $C9F3:A5 53 LDA $53 $C9F5:69 13 ADC #$13 $C9F7:C9 26 CMP #$26 $C9F9:B0 01 BCS $C9FC $C9FB:88 DEY ; control flow target $C9FC:A5 F1 LDA $F1 $C9FE:29 02 AND #$02 $CA00:F0 02 BEQ $CA04 $CA02:C8 INY $CA03:C8 INY ; control flow target $CA04:B9 3F C3 LDA $C33F,Y $CA07:85 56 STA $56 $CA09:B9 43 C3 LDA $C343,Y $CA0C:85 57 STA $57 $CA0E:A9 02 LDA #$02 $CA10:85 55 STA $55 ; control flow target $CA12:A0 48 LDY #$48 $CA14:A5 F9 LDA $F9 $CA16:25 56 AND $56 $CA18:10 06 BPL $CA20 $CA1A:A5 5D LDA $5D $CA1C:D0 02 BNE $CA20 $CA1E:A0 38 LDY #$38 ; control flow target $CA20:84 02 STY $02 $CA22:A4 56 LDY $56 $CA24:10 18 BPL $CA3E $CA26:A5 51 LDA $51 $CA28:29 08 AND #$08 $CA2A:F0 12 BEQ $CA3E $CA2C:C8 INY $CA2D:10 07 BPL $CA36 $CA2F:A0 FF LDY #$FF $CA31:84 56 STY $56 $CA33:C8 INY $CA34:84 57 STY $57 ; control flow target $CA36:20 3E CA JSR $CA3E $CA39:A9 00 LDA #$00 $CA3B:85 02 STA $02 $CA3D:60 RTS ; control flow target $CA3E:A5 57 LDA $57 $CA40:18 CLC $CA41:65 02 ADC $02 $CA43:85 57 STA $57 $CA45:A5 56 LDA $56 $CA47:85 02 STA $02 $CA49:69 00 ADC #$00 $CA4B:85 56 STA $56 $CA4D:C9 05 CMP #$05 $CA4F:D0 04 BNE $CA55 $CA51:A9 00 LDA #$00 $CA53:85 57 STA $57 ; control flow target $CA55:A9 02 LDA #$02 $CA57:85 13 STA $13 $CA59:60 RTS ; data $CA5A:1E 0F E2 $CA5D:F1 00 $CA5F:10 20 ; control flow target $CA61:A5 4F LDA $4F $CA63:29 02 AND #$02 $CA65:A8 TAY $CA66:20 87 CA JSR $CA87 $CA69:0A ASL A $CA6A:10 0C BPL $CA78 $CA6C:A5 4F LDA $4F $CA6E:29 02 AND #$02 $CA70:A8 TAY $CA71:C8 INY $CA72:20 87 CA JSR $CA87 $CA75:0A ASL A $CA76:30 0D BMI $CA85 ; control flow target $CA78:4A LSR A $CA79:AA TAX $CA7A:BD C0 04 LDA $04C0,X $CA7D:29 50 AND #$50 $CA7F:C9 40 CMP #$40 $CA81:D0 02 BNE $CA85 $CA83:18 CLC $CA84:60 RTS ; control flow target $CA85:38 SEC $CA86:60 RTS ; control flow target $CA87:A2 00 LDX #$00 $CA89:B9 5A CA LDA $CA5A,Y $CA8C:10 01 BPL $CA8F $CA8E:CA DEX ; control flow target $CA8F:18 CLC $CA90:65 10 ADC $10 $CA92:48 PHA $CA93:8A TXA $CA94:65 11 ADC $11 $CA96:AA TAX $CA97:68 PLA $CA98:E0 03 CPX #$03 $CA9A:B0 0C BCS $CAA8 $CA9C:4A LSR A $CA9D:4A LSR A $CA9E:4A LSR A $CA9F:4A LSR A $CAA0:1D 5E CA ORA $CA5E,X $CAA3:A8 TAY $CAA4:B9 00 05 LDA $0500,Y $CAA7:60 RTS ; control flow target $CAA8:A9 C0 LDA #$C0 $CAAA:60 RTS ; control flow target $CAAB:86 03 STX $03 ; control flow target $CAAD:84 02 STY $02 $CAAF:20 E6 CA JSR $CAE6 $CAB2:A4 02 LDY $02 $CAB4:0A ASL A $CAB5:30 11 BMI $CAC8 $CAB7:4A LSR A $CAB8:AA TAX $CAB9:BD C0 04 LDA $04C0,X $CABC:29 D0 AND #$D0 $CABE:D0 0E BNE $CACE ; control flow target $CAC0:88 DEY $CAC1:C6 03 DEC $03 $CAC3:D0 E8 BNE $CAAD $CAC5:A9 00 LDA #$00 $CAC7:60 RTS ; control flow target $CAC8:90 18 BCC $CAE2 $CACA:B9 57 CB LDA $CB57,Y $CACD:60 RTS ; control flow target $CACE:10 08 BPL $CAD8 $CAD0:C0 06 CPY #$06 $CAD2:90 EC BCC $CAC0 $CAD4:B9 4D CB LDA $CB4D,Y $CAD7:60 RTS ; control flow target $CAD8:C9 40 CMP #$40 $CADA:90 E4 BCC $CAC0 $CADC:F0 04 BEQ $CAE2 $CADE:C0 04 CPY #$04 $CAE0:B0 DE BCS $CAC0 ; control flow target $CAE2:B9 4D CB LDA $CB4D,Y $CAE5:60 RTS ; control flow target $CAE6:A2 00 LDX #$00 $CAE8:B9 29 CB LDA $CB29,Y $CAEB:10 01 BPL $CAEE $CAED:CA DEX ; control flow target $CAEE:18 CLC $CAEF:65 10 ADC $10 $CAF1:85 04 STA $04 $CAF3:8A TXA $CAF4:65 11 ADC $11 $CAF6:C9 03 CMP #$03 $CAF8:B0 2C BCS $CB26 $CAFA:4A LSR A $CAFB:66 04 ROR $04 $CAFD:4A LSR A $CAFE:66 04 ROR $04 $CB00:46 04 LSR $04 $CB02:46 04 LSR $04 $CB04:A9 05 LDA #$05 $CB06:85 05 STA $05 $CB08:A5 12 LDA $12 $CB0A:18 CLC $CB0B:79 3B CB ADC $CB3B,Y $CB0E:C9 B0 CMP #$B0 $CB10:B0 14 BCS $CB26 $CB12:29 F0 AND #$F0 $CB14:85 06 STA $06 $CB16:0A ASL A $CB17:90 03 BCC $CB1C $CB19:E6 05 INC $05 $CB1B:18 CLC ; control flow target $CB1C:65 06 ADC $06 $CB1E:A8 TAY $CB1F:90 02 BCC $CB23 $CB21:E6 05 INC $05 ; control flow target $CB23:B1 04 LDA ($04),Y $CB25:60 RTS ; control flow target $CB26:A9 C0 LDA #$C0 $CB28:60 RTS ; data + unknown $CB29:07 07 $CB2B:F8 $CB2C:F8 $CB2D:FB $CB2E:04 FB $CB30:04 0D $CB32:F2 00 $CB34:07 F8 $CB36:00 0F $CB38:F0 00 $CB3A:00 D6 $CB3C:EA $CB3D:D6 EA $CB3F:D0 D0 $CB41:F0 F0 $CB43:F0 F0 $CB45:E8 $CB46:E8 $CB47:E8 $CB48:F0 F0 $CB4A:F0 D8 $CB4C:E8 $CB4D:01 01 $CB4F:02 02 $CB51:08 $CB52:08 $CB53:04 04 $CB55:01 02 $CB57:11 11 $CB59:22 22 88 88 $CB5D:40 $CB5E:40 $CB5F:11 22 ; control flow target $CB61:A5 5D LDA $5D $CB63:29 C0 AND #$C0 $CB65:C9 C0 CMP #$C0 $CB67:D0 04 BNE $CB6D $CB69:A5 5C LDA $5C $CB6B:C9 07 CMP #$07 ; control flow target $CB6D:60 RTS ; control flow target $CB6E:A9 00 LDA #$00 $CB70:85 5D STA $5D $CB72:85 19 STA $19 $CB74:A4 4D LDY $4D $CB76:F0 02 BEQ $CB7A $CB78:A9 08 LDA #$08 ; control flow target $CB7A:85 13 STA $13 $CB7C:20 CF CB JSR $CBCF $CB7F:4C 26 E8 JMP $E826 ; data $CB82:08 F8 $CB84:00 18 ; control flow target $CB86:A4 4C LDY $4C $CB88:B9 82 CB LDA $CB82,Y $CB8B:85 0A STA $0A $CB8D:A5 12 LDA $12 $CB8F:18 CLC $CB90:79 84 CB ADC $CB84,Y ; control flow target $CB93:60 RTS ; control flow target $CB94:4A LSR A $CB95:50 01 BVC $CB98 $CB97:38 SEC ; control flow target $CB98:2A ROL A $CB99:0A ASL A $CB9A:AA TAX $CB9B:BD A8 CB LDA $CBA8,X $CB9E:85 08 STA $08 $CBA0:BD A9 CB LDA $CBA9,X $CBA3:85 09 STA $09 $CBA5:6C 08 00 JMP ($08) ; jump table $CBA8:CB CC ; $CCCB $CBAA:12 CD ; $CD12 $CBAC:BD CC ; $CCBD $CBAE:12 CD ; $CD12 $CBB0:AE CC ; $CCAE $CBB2:1E CD ; $CD1E $CBB4:C1 CC ; $CCC1 $CBB6:08 CD ; $CD08 $CBB8:AA CC ; $CCAA $CBBA:04 CD ; $CD04 ; jump table $CBBC:4F CC ; $CC4F $CBBE:22 CC ; $CC22 $CBC0:35 CC ; $CC35 $CBC2:0D CC ; $CC0D $CBC4:F7 CB ; $CBF7 $CBC6:31 CC ; $CC31 $CBC8:2D CC ; $CC2D $CBCA:95 CD ; $CD95 ; control flow target $CBCC:20 31 CE JSR $CE31 ; control flow target $CBCF:24 19 BIT $19 $CBD1:10 10 BPL $CBE3 $CBD3:50 04 BVC $CBD9 $CBD5:A2 14 LDX #$14 $CBD7:D0 4B BNE $CC24 ; control flow target $CBD9:20 61 CB JSR $CB61 $CBDC:F0 05 BEQ $CBE3 $CBDE:A5 66 LDA $66 $CBE0:4A LSR A $CBE1:B0 B0 BCS $CB93 ; control flow target $CBE3:A5 13 LDA $13 $CBE5:24 5D BIT $5D $CBE7:30 AB BMI $CB94 $CBE9:AA TAX $CBEA:BD BC CB LDA $CBBC,X $CBED:85 08 STA $08 $CBEF:BD BD CB LDA $CBBD,X $CBF2:85 09 STA $09 $CBF4:6C 08 00 JMP ($08) ; control flow target $CBF7:A2 10 LDX #$10 $CBF9:A5 55 LDA $55 $CBFB:F0 07 BEQ $CC04 $CBFD:A4 56 LDY $56 $CBFF:88 DEY $CC00:10 07 BPL $CC09 $CC02:30 4F BMI $CC53 ; control flow target $CC04:A5 62 LDA $62 $CC06:4A LSR A $CC07:B0 4A BCS $CC53 ; control flow target $CC09:A2 1E LDX #$1E $CC0B:D0 46 BNE $CC53 ; control flow target $CC0D:A2 04 LDX #$04 $CC0F:20 DE C6 JSR $C6DE $CC12:B0 3F BCS $CC53 $CC14:A2 0C LDX #$0C $CC16:A5 59 LDA $59 $CC18:4A LSR A $CC19:20 DE C5 JSR $C5DE $CC1C:D0 35 BNE $CC53 $CC1E:A2 0E LDX #$0E $CC20:D0 31 BNE $CC53 ; control flow target $CC22:A2 10 LDX #$10 ; control flow target $CC24:A4 56 LDY $56 $CC26:88 DEY $CC27:30 2A BMI $CC53 $CC29:E8 INX $CC2A:E8 INX $CC2B:D0 26 BNE $CC53 ; control flow target $CC2D:A2 66 LDX #$66 $CC2F:D0 0C BNE $CC3D ; control flow target $CC31:A2 10 LDX #$10 $CC33:D0 08 BNE $CC3D ; control flow target $CC35:A9 00 LDA #$00 $CC37:A8 TAY $CC38:20 F8 C8 JSR $C8F8 $CC3B:A2 2C LDX #$2C ; control flow target $CC3D:20 86 CB JSR $CB86 $CC40:18 CLC $CC41:65 0A ADC $0A $CC43:85 04 STA $04 $CC45:86 06 STX $06 $CC47:E8 INX $CC48:E8 INX $CC49:86 07 STX $07 $CC4B:A2 38 LDX #$38 $CC4D:D0 15 BNE $CC64 ; control flow target $CC4F:A5 62 LDA $62 $CC51:0A ASL A $CC52:AA TAX ; control flow target $CC53:BD 68 CE LDA $CE68,X $CC56:85 06 STA $06 $CC58:BD 69 CE LDA $CE69,X $CC5B:85 07 STA $07 $CC5D:20 86 CB JSR $CB86 $CC60:85 04 STA $04 $CC62:A2 30 LDX #$30 ; control flow target $CC64:A9 00 LDA #$00 $CC66:24 19 BIT $19 $CC68:50 04 BVC $CC6E $CC6A:A5 66 LDA $66 $CC6C:29 06 AND #$06 ; control flow target $CC6E:85 03 STA $03 $CC70:20 8D CC JSR $CC8D $CC73:85 08 STA $08 $CC75:20 8D CC JSR $CC8D $CC78:85 09 STA $09 $CC7A:A9 8C LDA #$8C $CC7C:85 0B STA $0B $CC7E:A9 CE LDA #$CE $CC80:85 0C STA $0C $CC82:A4 06 LDY $06 $CC84:20 D6 CD JSR $CDD6 $CC87:A4 07 LDY $07 $CC89:4C D6 CD JMP $CDD6 $CC8C:60 RTS ; control flow target $CC8D:A5 50 LDA $50 $CC8F:4A LSR A $CC90:46 15 LSR $15 $CC92:2A ROL A $CC93:A8 TAY $CC94:A5 4C LDA $4C $CC96:6A ROR A $CC97:A5 03 LDA $03 $CC99:6A ROR A $CC9A:19 9E CC ORA $CC9E,Y $CC9D:60 RTS ; data $CC9E:42 62 $CCA0:02 22 $CCA2:F3 05 $CCA4:18 $CCA5:E8 $CCA6:06 FA $CCA8:0E F2 ; control flow target $CCAA:A2 20 LDX #$20 $CCAC:D0 1F BNE $CCCD ; control flow target $CCAE:A2 32 LDX #$32 $CCB0:20 3D CC JSR $CC3D $CCB3:20 86 CB JSR $CB86 $CCB6:18 CLC $CCB7:79 A8 CC ADC $CCA8,Y $CCBA:4C D7 CC JMP $CCD7 ; control flow target $CCBD:A2 1C LDX #$1C $CCBF:D0 0C BNE $CCCD ; control flow target $CCC1:A2 18 LDX #$18 $CCC3:A5 59 LDA $59 $CCC5:4A LSR A $CCC6:20 DE C5 JSR $C5DE $CCC9:D0 02 BNE $CCCD ; control flow target $CCCB:A2 08 LDX #$08 ; control flow target $CCCD:20 53 CC JSR $CC53 $CCD0:20 86 CB JSR $CB86 $CCD3:18 CLC $CCD4:79 A6 CC ADC $CCA6,Y ; control flow target $CCD7:85 04 STA $04 $CCD9:A6 50 LDX $50 $CCDB:BD A1 CC LDA $CCA1,X $CCDE:18 CLC $CCDF:65 02 ADC $02 $CCE1:85 02 STA $02 $CCE3:A2 50 LDX #$50 $CCE5:A9 47 LDA #$47 $CCE7:20 1E CE JSR $CE1E $CCEA:A5 04 LDA $04 $CCEC:38 SEC $CCED:E5 0A SBC $0A $CCEF:85 04 STA $04 $CCF1:A6 6E LDX $6E $CCF3:BD 89 CD LDA $CD89,X ; control flow target $CCF6:48 PHA $CCF7:BD 91 CD LDA $CD91,X $CCFA:05 08 ORA $08 $CCFC:85 08 STA $08 $CCFE:A2 4C LDX #$4C $CD00:68 PLA $CD01:4C 1E CE JMP $CE1E ; control flow target $CD04:A2 22 LDX #$22 $CD06:D0 0C BNE $CD14 ; control flow target $CD08:A2 1A LDX #$1A $CD0A:A5 59 LDA $59 $CD0C:4A LSR A $CD0D:20 DE C5 JSR $C5DE $CD10:D0 02 BNE $CD14 ; control flow target $CD12:A2 0A LDX #$0A ; control flow target $CD14:20 53 CC JSR $CC53 $CD17:20 86 CB JSR $CB86 $CD1A:A2 30 LDX #$30 $CD1C:D0 0D BNE $CD2B ; control flow target $CD1E:A2 54 LDX #$54 $CD20:20 3D CC JSR $CC3D $CD23:A2 38 LDX #$38 $CD25:20 86 CB JSR $CB86 $CD28:18 CLC $CD29:65 0A ADC $0A ; control flow target $CD2B:18 CLC $CD2C:65 0A ADC $0A $CD2E:85 04 STA $04 $CD30:A5 02 LDA $02 $CD32:A4 50 LDY $50 $CD34:88 DEY $CD35:F0 03 BEQ $CD3A $CD37:38 SEC $CD38:E9 10 SBC #$10 ; control flow target $CD3A:9D 03 02 STA $0203,X $CD3D:9D 0B 02 STA $020B,X $CD40:18 CLC $CD41:69 08 ADC #$08 $CD43:9D 07 02 STA $0207,X $CD46:9D 0F 02 STA $020F,X $CD49:B9 83 CB LDA $CB83,Y $CD4C:18 CLC $CD4D:65 02 ADC $02 $CD4F:85 02 STA $02 $CD51:A2 50 LDX #$50 $CD53:A9 41 LDA #$41 $CD55:20 1E CE JSR $CE1E $CD58:B9 A4 CC LDA $CCA4,Y $CD5B:18 CLC $CD5C:65 02 ADC $02 $CD5E:85 02 STA $02 $CD60:A6 6E LDX $6E $CD62:BD 8D CD LDA $CD8D,X $CD65:20 F6 CC JSR $CCF6 $CD68:A2 00 LDX #$00 $CD6A:B9 85 CD LDA $CD85,Y $CD6D:10 01 BPL $CD70 $CD6F:CA DEX ; control flow target $CD70:18 CLC $CD71:65 10 ADC $10 $CD73:85 5E STA $5E $CD75:8A TXA $CD76:65 11 ADC $11 $CD78:85 5F STA $5F $CD7A:A4 4C LDY $4C $CD7C:A5 04 LDA $04 $CD7E:18 CLC $CD7F:79 87 CD ADC $CD87,Y $CD82:85 60 STA $60 $CD84:60 RTS ; data $CD85:15 EA $CD87:04 03 $CD89:51 51 $CD8B:46 46 $CD8D:50 50 $CD8F:48 48 $CD91:02 03 $CD93:03 03 ; control flow target $CD95:20 86 CB JSR $CB86 $CD98:85 04 STA $04 $CD9A:A5 0A LDA $0A $CD9C:0A ASL A $CD9D:18 CLC $CD9E:65 04 ADC $04 $CDA0:48 PHA $CDA1:85 04 STA $04 $CDA3:A9 00 LDA #$00 $CDA5:85 03 STA $03 $CDA7:20 8D CC JSR $CC8D $CDAA:85 08 STA $08 $CDAC:85 09 STA $09 $CDAE:A9 8C LDA #$8C $CDB0:85 0B STA $0B $CDB2:A9 CE LDA #$CE $CDB4:85 0C STA $0C $CDB6:A5 50 LDA $50 $CDB8:4A LSR A $CDB9:A8 TAY $CDBA:A5 02 LDA $02 $CDBC:48 PHA $CDBD:18 CLC $CDBE:79 38 C3 ADC $C338,Y $CDC1:85 02 STA $02 $CDC3:A2 30 LDX #$30 $CDC5:A0 6C LDY #$6C $CDC7:20 D6 CD JSR $CDD6 $CDCA:68 PLA $CDCB:85 02 STA $02 $CDCD:68 PLA $CDCE:85 04 STA $04 $CDD0:A0 70 LDY #$70 $CDD2:4C D6 CD JMP $CDD6 $CDD5:60 RTS ; control flow target $CDD6:24 08 BIT $08 $CDD8:70 09 BVS $CDE3 $CDDA:20 FA CD JSR $CDFA $CDDD:20 17 CE JSR $CE17 $CDE0:4C E9 CD JMP $CDE9 ; control flow target $CDE3:20 17 CE JSR $CE17 $CDE6:20 FA CD JSR $CDFA ; control flow target $CDE9:A5 04 LDA $04 $CDEB:18 CLC $CDEC:65 0A ADC $0A $CDEE:85 04 STA $04 $CDF0:8A TXA $CDF1:18 CLC $CDF2:69 08 ADC #$08 $CDF4:AA TAX $CDF5:29 0F AND #$0F $CDF7:D0 DD BNE $CDD6 $CDF9:60 RTS ; control flow target $CDFA:B1 0B LDA ($0B),Y $CDFC:C8 INY $CDFD:C9 FF CMP #$FF $CDFF:F0 15 BEQ $CE16 $CE01:9D 01 02 STA $0201,X $CE04:A5 02 LDA $02 $CE06:38 SEC $CE07:E9 08 SBC #$08 $CE09:9D 03 02 STA $0203,X $CE0C:A5 09 LDA $09 $CE0E:9D 02 02 STA $0202,X $CE11:A5 04 LDA $04 $CE13:9D 00 02 STA $0200,X ; control flow target $CE16:60 RTS ; control flow target $CE17:B1 0B LDA ($0B),Y $CE19:C8 INY $CE1A:C9 FF CMP #$FF $CE1C:F0 12 BEQ $CE30 ; control flow target $CE1E:9D 05 02 STA $0205,X $CE21:A5 02 LDA $02 $CE23:9D 07 02 STA $0207,X $CE26:A5 08 LDA $08 $CE28:9D 06 02 STA $0206,X $CE2B:A5 04 LDA $04 $CE2D:9D 04 02 STA $0204,X ; control flow target $CE30:60 RTS ; control flow target $CE31:A5 11 LDA $11 $CE33:85 0B STA $0B $CE35:A6 10 LDX $10 $CE37:8A TXA $CE38:29 07 AND #$07 $CE3A:85 0A STA $0A $CE3C:8A TXA $CE3D:46 0B LSR $0B $CE3F:6A ROR A $CE40:46 0B LSR $0B $CE42:6A ROR A $CE43:4A LSR A $CE44:C5 26 CMP $26 $CE46:90 14 BCC $CE5C $CE48:C5 27 CMP $27 $CE4A:B0 10 BCS $CE5C $CE4C:E9 0F SBC #$0F $CE4E:38 SEC $CE4F:E5 28 SBC $28 $CE51:85 29 STA $29 $CE53:A5 0A LDA $0A $CE55:85 2A STA $2A $CE57:A9 80 LDA #$80 $CE59:85 02 STA $02 $CE5B:60 RTS ; control flow target $CE5C:29 60 AND #$60 $CE5E:38 SEC $CE5F:E5 28 SBC $28 $CE61:85 29 STA $29 $CE63:A5 10 LDA $10 $CE65:85 02 STA $02 $CE67:60 RTS ; data + unknown $CE68:00 04 $CE6A:08 $CE6B:0C 10 14 $CE6E:08 $CE6F:18 $CE70:38 $CE71:3C 40 44 $CE74:08 $CE75:1C 08 20 $CE78:2C 24 2C $CE7B:28 $CE7C:50 24 $CE7E:50 28 $CE80:38 $CE81:48 $CE82:40 $CE83:4C 32 28 $CE86:08 $CE87:5A $CE88:38 $CE89:5E 40 62 $CE8C:00 01 $CE8E:10 11 $CE90:20 21 30 $CE93:31 02 $CE95:03 12 $CE97:13 22 $CE99:23 32 $CE9B:33 04 $CE9D:05 14 $CE9F:15 24 $CEA1:25 34 $CEA3:35 22 $CEA5:26 18 $CEA7:36 22 $CEA9:23 2A $CEAB:38 $CEAC:22 29 30 39 $CEB0:08 $CEB1:09 FF $CEB3:19 06 07 $CEB6:16 17 $CEB8:0C 0D 1C $CEBB:1D 2C 2D $CEBE:04 05 $CEC0:0A $CEC1:2B $CEC2:2C 2D 04 $CEC5:05 0A $CEC7:0B $CEC8:1A $CEC9:1B $CECA:18 $CECB:37 3D $CECD:3E 3F 40 $CED0:42 43 $CED2:44 45 1A $CED5:1B $CED6:2A $CED7:37 42 $CED9:43 2A $CEDB:45 0E $CEDD:0F 1E 1F 3D $CEE1:3E 3F 40 $CEE4:3A $CEE5:3B $CEE6:22 23 FF 33 $CEEA:1A $CEEB:1B $CEEC:FF 37 42 43 $CEF0:FF 45 0E 0F $CEF4:1E 1F 2E $CEF7:2F 49 4A 4C $CEFB:4D 4B FF $CEFE:4E 4F 1C $CF01:19 14 1C $CF04:19 02 02 $CF07:02 05 $CF09:08 $CF0A:02 02 $CF0C:02 02 $CF0E:05 09 $CF10:07 08 $CF12:05 0A $CF14:00 09 $CF16:07 08 $CF18:05 ; control flow target $CF19:20 D8 D6 JSR $D6D8 $CF1C:85 0D STA $0D $CF1E:20 E2 D1 JSR $D1E2 $CF21:A5 30 LDA $30 $CF23:C9 01 CMP #$01 $CF25:D0 1B BNE $CF42 $CF27:A9 18 LDA #$18 $CF29:20 6E D1 JSR $D16E $CF2C:A2 0B LDX #$0B ; control flow target $CF2E:A8 TAY $CF2F:B1 02 LDA ($02),Y $CF31:09 40 ORA #$40 $CF33:91 02 STA ($02),Y $CF35:CA DEX $CF36:F0 0A BEQ $CF42 $CF38:98 TYA $CF39:18 CLC $CF3A:69 30 ADC #$30 $CF3C:90 F0 BCC $CF2E $CF3E:E6 03 INC $03 $CF40:D0 EC BNE $CF2E ; control flow target $CF42:60 RTS ; control flow target $CF43:A5 30 LDA $30 $CF45:F0 0B BEQ $CF52 $CF47:A9 00 LDA #$00 $CF49:20 00 E6 JSR $E600 $CF4C:20 19 CF JSR $CF19 $CF4F:4C 5B CF JMP $CF5B ; control flow target $CF52:20 67 E6 JSR $E667 $CF55:20 BC CF JSR $CFBC $CF58:20 B3 D1 JSR $D1B3 ; control flow target $CF5B:A5 28 LDA $28 $CF5D:C9 40 CMP #$40 $CF5F:90 04 BCC $CF65 $CF61:A9 40 LDA #$40 $CF63:85 28 STA $28 ; control flow target $CF65:85 10 STA $10 $CF67:A9 20 LDA #$20 $CF69:85 11 STA $11 ; control flow target $CF6B:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $CF6E:20 7B CF JSR $CF7B $CF71:10 F8 BPL $CF6B $CF73:A2 00 LDX #$00 $CF75:86 23 STX $23 $CF77:E8 INX $CF78:86 22 STX $22 $CF7A:60 RTS ; control flow target $CF7B:20 80 CF JSR $CF80 $CF7E:30 20 BMI $CFA0 ; control flow target $CF80:20 85 CF JSR $CF85 $CF83:30 1B BMI $CFA0 ; control flow target $CF85:A9 00 LDA #$00 $CF87:85 23 STA $23 $CF89:20 C8 D0 JSR $D0C8 $CF8C:AD 02 20 LDA $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $CF8F:20 BA D4 JSR $D4BA $CF92:20 FF D4 JSR $D4FF $CF95:A9 00 LDA #$00 $CF97:85 22 STA $22 $CF99:20 F5 D7 JSR $D7F5 ; set some PPU/VRAM registers $CF9C:E6 10 INC $10 $CF9E:C6 11 DEC $11 ; control flow target $CFA0:60 RTS ; control flow target $CFA1:86 02 STX $02 $CFA3:85 03 STA $03 $CFA5:A0 3F LDY #$3F ; control flow target $CFA7:B1 02 LDA ($02),Y $CFA9:99 C0 04 STA $04C0,Y $CFAC:88 DEY $CFAD:10 F8 BPL $CFA7 $CFAF:60 RTS ; data + unknown $CFB0:10 11 $CFB2:12 13 $CFB4:14 20 $CFB6:21 22 $CFB8:23 24 $CFBA:25 62 ; control flow target $CFBC:20 25 E7 JSR $E725 ; update mapper config to vertical mirroring $CFBF:A6 DF LDX $DF ; location $CFC1:BD B0 CF LDA $CFB0,X $CFC4:A8 TAY $CFC5:4A LSR A $CFC6:4A LSR A $CFC7:4A LSR A $CFC8:4A LSR A $CFC9:85 33 STA $33 $CFCB:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $CFCE:98 TYA $CFCF:29 0F AND #$0F $CFD1:20 41 D7 JSR $D741 ; given A, sets Y = A << 1, X = $8000,Y, and A = $8001,Y $CFD4:20 34 D1 JSR $D134 ; STX $34, STA $35 $CFD7:18 CLC $CFD8:69 01 ADC #$01 $CFDA:20 A1 CF JSR $CFA1 $CFDD:20 02 D0 JSR $D002 $CFE0:A9 49 LDA #$49 $CFE2:20 F8 CF JSR $CFF8 $CFE5:85 02 STA $02 $CFE7:84 03 STY $03 $CFE9:A0 00 LDY #$00 ; control flow target $CFEB:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $CFEE:96 34 STX $34,Y $CFF0:99 35 00 STA $35,Y $CFF3:C0 08 CPY #$08 $CFF5:90 F4 BCC $CFEB $CFF7:60 RTS ; control flow target $CFF8:18 CLC $CFF9:65 34 ADC $34 $CFFB:A4 35 LDY $35 $CFFD:90 01 BCC $D000 $CFFF:C8 INY ; control flow target $D000:C8 INY $D001:60 RTS ; control flow target $D002:A9 40 LDA #$40 $D004:20 F8 CF JSR $CFF8 $D007:20 D9 D2 JSR $D2D9 ; control flow target $D00A:A2 02 LDX #$02 ; control flow target $D00C:BD 16 D0 LDA $D016,X $D00F:9D 1D 07 STA $071D,X $D012:CA DEX $D013:10 F7 BPL $D00C ; control flow target $D015:60 RTS ; data $D016:12 2B 30 $D018:A5 2A LDA $2A $D01B:85 25 STA $25 $D01D:A5 29 LDA $29 $D01F:F0 F4 BEQ $D015 $D021:18 CLC $D022:65 28 ADC $28 $D024:85 28 STA $28 $D026:A6 29 LDX $29 $D028:30 03 BMI $D02D $D02A:18 CLC $D02B:69 20 ADC #$20 ; control flow target $D02D:85 10 STA $10 $D02F:20 09 E7 JSR $E709 $D032:4C C8 D0 JMP $D0C8 ; data $D035:FF 60 $D037:00 40 $D039:00 02 $D03B:04 FC ; control flow target $D03D:20 BC CF JSR $CFBC $D040:20 29 E7 JSR $E729 ; update mapper config to horizontal mirroring $D043:20 B3 D1 JSR $D1B3 $D046:A6 4F LDX $4F $D048:86 50 STX $50 $D04A:BD 34 D0 LDA $D034,X $D04D:85 10 STA $10 $D04F:A9 20 LDA #$20 $D051:85 11 STA $11 $D053:A9 00 LDA #$00 $D055:85 61 STA $61 $D057:85 64 STA $64 ; control flow target $D059:85 25 STA $25 $D05B:20 E3 D3 JSR $D3E3 $D05E:A5 25 LDA $25 $D060:29 07 AND #$07 $D062:D0 1D BNE $D081 $D064:A6 4F LDX $4F $D066:BD 22 C3 LDA $C322,X $D069:18 CLC $D06A:65 10 ADC $10 $D06C:85 10 STA $10 $D06E:C6 11 DEC $11 $D070:30 43 BMI $D0B5 $D072:20 C8 D0 JSR $D0C8 $D075:A5 4F LDA $4F $D077:4A LSR A $D078:A5 10 LDA $10 $D07A:20 DE C5 JSR $C5DE $D07D:D0 02 BNE $D081 $D07F:06 22 ASL $22 ; control flow target $D081:A9 20 LDA #$20 $D083:20 E9 C8 JSR $C8E9 $D086:A6 4F LDX $4F $D088:BD 3A D0 LDA $D03A,X $D08B:48 PHA $D08C:20 9C D7 JSR $D79C $D08F:18 CLC $D090:65 63 ADC $63 $D092:A8 TAY $D093:A5 25 LDA $25 $D095:29 0C AND #$0C $D097:D0 06 BNE $D09F $D099:98 TYA $D09A:18 CLC $D09B:7D 22 C3 ADC $C322,X $D09E:A8 TAY ; control flow target $D09F:84 63 STY $63 $D0A1:84 02 STY $02 $D0A3:A9 00 LDA #$00 $D0A5:85 15 STA $15 $D0A7:A5 65 LDA $65 $D0A9:85 12 STA $12 $D0AB:20 6E CB JSR $CB6E $D0AE:68 PLA $D0AF:18 CLC $D0B0:65 25 ADC $25 $D0B2:4C 59 D0 JMP $D059 ; control flow target $D0B5:A6 4F LDX $4F $D0B7:BD 38 D0 LDA $D038,X $D0BA:85 64 STA $64 $D0BC:BD 36 D0 LDA $D036,X $D0BF:85 28 STA $28 $D0C1:20 25 E7 JSR $E725 ; update mapper config to vertical mirroring $D0C4:A9 0C LDA #$0C $D0C6:85 44 STA $44 ; control flow target $D0C8:A9 C0 LDA #$C0 $D0CA:85 03 STA $03 $D0CC:A0 01 LDY #$01 $D0CE:A9 00 LDA #$00 $D0D0:20 83 D1 JSR $D183 $D0D3:09 08 ORA #$08 $D0D5:85 07 STA $07 $D0D7:A9 0B LDA #$0B $D0D9:85 04 STA $04 $D0DB:0A ASL A $D0DC:09 80 ORA #$80 $D0DE:9D 30 07 STA $0730,X $D0E1:E8 INX $D0E2:86 23 STX $23 $D0E4:20 6E D1 JSR $D16E $D0E7:A5 10 LDA $10 $D0E9:4A LSR A $D0EA:85 09 STA $09 $D0EC:66 05 ROR $05 ; control flow target $D0EE:A4 09 LDY $09 $D0F0:B1 02 LDA ($02),Y $D0F2:29 3F AND #$3F $D0F4:AA TAX $D0F5:BD C0 04 LDA $04C0,X $D0F8:29 03 AND #$03 $D0FA:20 3D D1 JSR $D13D $D0FD:B1 02 LDA ($02),Y $D0FF:0A ASL A $D100:0A ASL A $D101:A8 TAY $D102:24 05 BIT $05 $D104:10 01 BPL $D107 $D106:C8 INY ; control flow target $D107:A6 23 LDX $23 $D109:B1 34 LDA ($34),Y $D10B:9D 30 07 STA $0730,X $D10E:E8 INX $D10F:C8 INY $D110:C8 INY $D111:B1 34 LDA ($34),Y $D113:9D 30 07 STA $0730,X $D116:E8 INX $D117:86 23 STX $23 $D119:A5 09 LDA $09 $D11B:18 CLC $D11C:69 30 ADC #$30 $D11E:85 09 STA $09 $D120:90 02 BCC $D124 $D122:E6 03 INC $03 ; control flow target $D124:C6 04 DEC $04 $D126:D0 C6 BNE $D0EE $D128:A4 23 LDY $23 $D12A:A9 FF LDA #$FF $D12C:99 30 07 STA $0730,Y $D12F:84 23 STY $23 $D131:4C DC D3 JMP $D3DC ; $22 = #$C0 | $22 ; control flow target $D134:86 34 STX $34 $D136:85 35 STA $35 $D138:60 RTS ; data $D139:FC F3 $D13B:CF 3F ; control flow target $D13D:A6 06 LDX $06 $D13F:F0 0C BEQ $D14D $D141:0A ASL $D142:0A ASL $D143:CA DEX $D144:F0 07 BEQ $D14D $D146:0A ASL $D147:0A ASL $D148:CA DEX $D149:F0 02 BEQ $D14D $D14B:0A ASL $D14C:0A ASL ; control flow target $D14D:85 08 STA $08 $D14F:A6 06 LDX $06 $D151:BD 39 D1 LDA $D139,X $D154:A6 07 LDX $07 $D156:3D 80 07 AND $0780,X $D159:05 08 ORA $08 $D15B:9D 80 07 STA $0780,X $D15E:A5 06 LDA $06 $D160:49 02 EOR #$02 $D162:85 06 STA $06 $D164:4A LSR $D165:D0 06 BNE $D16D $D167:8A TXA $D168:18 CLC $D169:69 08 ADC #$08 $D16B:85 07 STA $07 ; control flow target $D16D:60 RTS ; control flow target $D16E:A0 00 LDY #$00 $D170:84 02 STY $02 $D172:A0 05 LDY #$05 $D174:84 03 STY $03 $D176:60 RTS ; control flow target $D177:A5 11 LDA $11 $D179:AA TAX $D17A:29 02 AND #$02 $D17C:4A LSR $D17D:A8 TAY ; Y = ($11 & #$02) >> 1 $D17E:A9 20 LDA #$20 $D180:20 6A D7 JSR $D76A ; multiplies A (#$20) by X ($11), returning low byte in $03 and high byte in A ; control flow target $D183:85 02 STA $02 $D185:84 06 STY $06 ; $06 = ($11 & #$02) >> 1 $D187:A6 23 LDX $23 $D189:A5 10 LDA $10 $D18B:29 1F AND #$1F $D18D:48 PHA ; save A ($10 & #$1F) for later $D18E:18 CLC $D18F:65 03 ADC $03 $D191:9D 31 07 STA $0731,X ; ($10 & #$1F) + low byte of multiplication result from line $D180 $D194:A9 20 LDA #$20 $D196:A0 00 LDY #$00 $D198:24 10 BIT $10 $D19A:F0 04 BEQ $D1A0 $D19C:A9 24 LDA #$24 $D19E:A0 40 LDY #$40 ; control flow target $D1A0:65 02 ADC $02 $D1A2:9D 30 07 STA $0730,X ; ($10 ? #$24 : #$20) + high byte of multiplication result from line $D180 $D1A5:E8 INX $D1A6:E8 INX $D1A7:84 24 STY $24 ; ($10 ? #$40 : #$00) $D1A9:68 PLA ; restore value of A ($10 & #$1F) $D1AA:4A LSR $D1AB:4A LSR $D1AC:26 06 ROL $06 $D1AE:65 24 ADC $24 $D1B0:85 24 STA $24 $D1B2:60 RTS ; control flow target $D1B3:A9 30 LDA #$30 $D1B5:85 0D STA $0D $D1B7:A9 51 LDA #$51 $D1B9:20 F8 CF JSR $CFF8 $D1BC:AA TAX $D1BD:A5 2F LDA $2F $D1BF:0A ASL $D1C0:65 2F ADC $2F $D1C2:20 54 D7 JSR $D754 ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate $D1C5:86 06 STX $06 $D1C7:85 07 STA $07 $D1C9:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $D1CC:86 3E STX $3E $D1CE:85 3F STA $3F $D1D0:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $D1D3:86 40 STX $40 $D1D5:85 41 STA $41 $D1D7:A0 00 LDY #$00 $D1D9:B1 3E LDA ($3E),Y $D1DB:85 48 STA $48 $D1DD:C8 INY $D1DE:B1 3E LDA ($3E),Y $D1E0:85 49 STA $49 ; control flow target $D1E2:A0 00 LDY #$00 ; control flow target $D1E4:B1 06 LDA ($06),Y $D1E6:C8 INY $D1E7:84 02 STY $02 $D1E9:48 PHA $D1EA:2A ROL $D1EB:2A ROL $D1EC:2A ROL $D1ED:29 03 AND #$03 $D1EF:20 A2 D7 JSR $D7A2 ; data, probably a jump table $D1F2:26 D2 ; $D226 $D1F4:FA D1 ; $D1FA $D1F6:04 D2 ; $D204 $D1F8:0E D2 ; $D20E ; control flow target $D1FA:68 PLA $D1FB:20 1D D2 JSR $D21D $D1FE:9D 10 07 STA $0710,X $D201:4C E4 D1 JMP $D1E4 ; control flow target $D204:68 PLA $D205:20 1D D2 JSR $D21D $D208:9D C0 04 STA $04C0,X $D20B:4C E4 D1 JMP $D1E4 ; control flow target $D20E:A4 02 LDY $02 $D210:B1 06 LDA ($06),Y $D212:C8 INY $D213:AA TAX $D214:B1 06 LDA ($06),Y $D216:86 06 STX $06 $D218:85 07 STA $07 $D21A:68 PLA $D21B:D0 C5 BNE $D1E2 ; control flow target $D21D:29 3F AND #$3F $D21F:AA TAX $D220:A4 02 LDY $02 $D222:B1 06 LDA ($06),Y $D224:C8 INY $D225:60 RTS ; control flow target $D226:18 CLC $D227:A5 02 LDA $02 $D229:65 06 ADC $06 $D22B:85 06 STA $06 $D22D:90 02 BCC $D231 $D22F:E6 07 INC $07 ; control flow target $D231:68 PLA $D232:20 CA D2 JSR $D2CA $D235:84 0B STY $0B $D237:A9 05 LDA #$05 $D239:85 0C STA $0C $D23B:A9 0A LDA #$0A $D23D:85 0F STA $0F ; currentTextBufferPosition $D23F:A5 0D LDA $0D $D241:85 0E STA $0E ; control flow target $D243:20 8E D2 JSR $D28E $D246:30 08 BMI $D250 $D248:85 03 STA $03 $D24A:20 5F D2 JSR $D25F $D24D:90 F4 BCC $D243 $D24F:60 RTS ; control flow target $D250:20 8E D2 JSR $D28E $D253:AA TAX ; control flow target $D254:A5 03 LDA $03 $D256:20 5F D2 JSR $D25F $D259:CA DEX $D25A:D0 F8 BNE $D254 $D25C:90 E5 BCC $D243 $D25E:60 RTS ; control flow target $D25F:A0 00 LDY #$00 $D261:91 0B STA ($0B),Y $D263:E6 0B INC $0B $D265:D0 02 BNE $D269 $D267:E6 0C INC $0C ; control flow target $D269:C6 0E DEC $0E $D26B:F0 02 BEQ $D26F ; control flow target $D26D:18 CLC $D26E:60 RTS ; control flow target $D26F:A9 30 LDA #$30 $D271:38 SEC $D272:E5 0D SBC $0D $D274:F0 09 BEQ $D27F $D276:18 CLC $D277:65 0B ADC $0B $D279:85 0B STA $0B $D27B:90 02 BCC $D27F $D27D:E6 0C INC $0C ; control flow target $D27F:A5 0D LDA $0D $D281:85 0E STA $0E $D283:C6 0F DEC $0F ; currentTextBufferPosition $D285:10 E6 BPL $D26D $D287:38 SEC $D288:60 RTS ; new game / continue screen tilemap encoding ; lut for ($06),Y at $D2A5 $D289:00 ; +0; 00 - 10: $7F, $81, $FC $D28A:03 ; +3; 11000 - 11110: $FD, 9, i, e, y, u, $DF $D28B:0A ; +10; 111110000 - 111111110: $D28C:19 ; +25; 11111111100000 - 11111111111110 $D28D:38 ; +56; 11111111111111000000 - 11111111111111111110 ; +119 ; read Huffman string from ($D8), convert to bytes based on ($06) and $D289-$D28D ; control flow target $D28E:A2 03 LDX #$03 $D290:86 04 STX $04 $D292:CA DEX ; X = #$02 ; control flow target $D293:20 A8 D2 JSR $D2A8 ; update stringBitWidth from X and read the next stringBitWidth bits from curStringByte into A; we start off reading 2 bits, but read an extra bit each iteration $D296:C5 04 CMP $04 ; $04 is a string of X 1s... $D298:D0 06 BNE $D2A0 ; ... so this branch gets taken the first time the low X bits of A contain a 0 $D29A:E8 INX $D29B:38 SEC $D29C:26 04 ROL $04 ; this can happen at most 7 times until the orignal #$03 gets rotated into C, but anything over 4 times causes $D2A1 to start reading code instead of data $D29E:90 F3 BCC $D293 ; control flow target $D2A0:18 CLC $D2A1:7D 87 D2 ADC $D287,X ; at this point we must have #$02 <= X <= #$06 $D2A4:A8 TAY $D2A5:B1 06 LDA ($06),Y $D2A7:60 RTS ; update stringBitWidth from X and read the next stringBitWidth bits from curStringByte into A ; control flow target $D2A8:86 05 STX $05 ; read the next X bits from curStringByte into A ; IN: X = stringBitWidth ; curStringBitNum keeps track of which bit number of curStringByte we're reading ; curStringByte contains the current byte being read; it gets consumed via ASL ; curStringAddr contains the 16-bit address of the full data string ; OUT: A = the next stringBitWidth bits of curStringByte ; control flow target $D2AA:A9 00 LDA #$00 ; A = Y = #$00 $D2AC:A8 TAY ; control flow target $D2AD:C6 16 DEC $16 ; curStringBitNum $D2AF:10 10 BPL $D2C1 ; if curStringBitNum < #$00, reset curStringBitNum to #$07 and update curStringAddr $D2B1:48 PHA $D2B2:A9 07 LDA #$07 $D2B4:85 16 STA $16 ; curStringBitNum $D2B6:B1 D8 LDA ($D8),Y $D2B8:85 17 STA $17 ; curStringByte $D2BA:E6 D8 INC $D8 ; 16-bit curStringAddr++ $D2BC:D0 02 BNE $D2C0 $D2BE:E6 D9 INC $D9 ; control flow target $D2C0:68 PLA ; at this point, curStringByte has the right data ; control flow target $D2C1:06 17 ASL $17 ; shift high bit of curStringByte into C $D2C3:2A ROL ; shift C into low bit of A $D2C4:CA DEX $D2C5:D0 E6 BNE $D2AD $D2C7:A6 05 LDX $05 ; we consumed X as our loop counter, so restore the old value of stringBitWidth $D2C9:60 RTS ; control flow target $D2CA:18 CLC $D2CB:65 06 ADC $06 $D2CD:85 D8 STA $D8 $D2CF:A9 00 LDA #$00 $D2D1:85 16 STA $16 $D2D3:A8 TAY $D2D4:65 07 ADC $07 $D2D6:85 D9 STA $D9 $D2D8:60 RTS ; control flow target $D2D9:A2 0D LDX #$0D $D2DB:86 02 STX $02 $D2DD:A2 00 LDX #$00 ; control flow target $D2DF:85 03 STA $03 $D2E1:84 04 STY $04 $D2E3:A0 00 LDY #$00 ; control flow target $D2E5:8A TXA $D2E6:29 03 AND #$03 $D2E8:D0 04 BNE $D2EE $D2EA:A9 0F LDA #$0F $D2EC:D0 03 BNE $D2F1 ; control flow target $D2EE:B1 03 LDA ($03),Y $D2F0:C8 INY ; control flow target $D2F1:9D 10 07 STA $0710,X $D2F4:E8 INX $D2F5:E4 02 CPX $02 $D2F7:90 EC BCC $D2E5 ; $22 |= #$01 ; control flow target $D2F9:A9 01 LDA #$01 $D2FB:05 22 ORA $22 $D2FD:85 22 STA $22 $D2FF:60 RTS ; initialize a bunch of stuff ; control flow target $D300:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $D303:20 94 D3 JSR $D394 ; turn off a bunch of PPU stuff, set PPU_Control_Register_2_settings to #$00 $D306:20 70 D3 JSR $D370 ; STZ to $21-$23, $25, $28, set scrolling to 0 $D309:4C 4E D3 JMP $D34E ; BRA ; control flow target $D30C:20 BE F5 JSR $F5BE ; control flow target $D30F:A5 FF LDA $FF ; PPU_Control_Register_1_settings $D311:09 80 ORA #$80 $D313:20 8E D3 JSR $D38E $D316:A9 1E LDA #$1E $D318:85 FE STA $FE ; PPU_Control_Register_2_settings $D31A:4C 19 D4 JMP $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ ; control flow target $D31D:20 39 E7 JSR $E739 ; initialize mapper stuff $D320:20 52 F6 JSR $F652 ; STZ to $8E, $94-$97, $99-$9A, pAPU stuff $D323:20 89 D3 JSR $D389 ; STZ to $21-$23, $25, $28, set scrolling to 0, set PPU_Control_Register_1_settings = select 8x8 sprites, background pattern table #1, sprite pattern table #0, PPU auto-increment by 1, name table #0 $D326:20 94 D3 JSR $D394 ; turn off a bunch of PPU stuff, set PPU_Control_Register_2_settings to #$00 $D329:A2 04 LDX #$04 $D32B:A9 00 LDA #$00 $D32D:A0 FA LDY #$FA $D32F:20 D0 D3 JSR $D3D0 ; fill (A * 256 + X) with Y #$00's, i.e. STZ to $04-$FD $D332:A2 00 LDX #$00 $D334:A9 01 LDA #$01 $D336:A0 C0 LDY #$C0 $D338:20 D0 D3 JSR $D3D0 ; fill (A * 256 + X) with Y #$00's, i.e. STZ to $0100-$01BF $D33B:85 02 STA $02 ; at this point, A = Y = #$00 $D33D:A2 02 LDX #$02 ; control flow target ; $D33F - $D34B are STZ to $0200 - $07FF $D33F:86 03 STX $03 ; save X to $03 even though nothing changes it $D341:20 D4 D3 JSR $D3D4 ; fill ($02) with Y #$00's $D344:A6 03 LDX $03 ; load X from $03, even though nothing changed it $D346:E8 INX $D347:E0 08 CPX #$08 $D349:90 F4 BCC $D33F $D34B:20 C2 D3 JSR $D3C2 ; fill $0710-$072F with #$0F ; control flow target $D34E:20 9C D3 JSR $D39C ; set VRAM $2000-$27FF to #$7F, set some PPU/VRAM registers $D351:20 F5 D7 JSR $D7F5 ; set some PPU/VRAM registers - but we already did this as part of $D39C :/ $D354:A9 00 LDA #$00 $D356:F0 02 BEQ $D35A ; BRA ; control flow target $D358:A9 30 LDA #$30 ; write #$F8 to $020[048C],A up to $02FC ; control flow target $D35A:A8 TAY $D35B:A9 F8 LDA #$F8 $D35D:99 00 02 STA $0200,Y $D360:99 04 02 STA $0204,Y $D363:99 08 02 STA $0208,Y $D366:99 0C 02 STA $020C,Y $D369:98 TYA $D36A:18 CLC $D36B:69 10 ADC #$10 $D36D:D0 EB BNE $D35A $D36F:60 RTS ; STZ to $21-$23, $25, $28, set scrolling to 0 ; control flow target $D370:AD 02 20 LDA $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $D373:A9 00 LDA #$00 $D375:8D 03 20 STA $2003 ; SPR-RAM Address Register $D378:85 21 STA $21 $D37A:85 22 STA $22 $D37C:85 23 STA $23 $D37E:85 28 STA $28 $D380:85 25 STA $25 $D382:8D 05 20 STA $2005 ; VRAM Address Register #1 (vertical scroll) $D385:8D 05 20 STA $2005 ; VRAM Address Register #1 (horizonal scroll) $D388:60 RTS ; control flow target $D389:20 70 D3 JSR $D370 ; STZ to $21-$23, $25, $28, set scrolling to 0 ; control flow target $D38C:A9 10 LDA #$10 ; select 8x8 sprites, background pattern table #1, sprite pattern table #0, PPU auto-increment by 1, name table #0 ; control flow target $D38E:8D 00 20 STA $2000 ; PPU Control Register #1 $D391:85 FF STA $FF ; PPU_Control_Register_1_settings $D393:60 RTS ; turn off a bunch of PPU stuff, set PPU_Control_Register_2_settings to #$00 ; control flow target $D394:A9 00 LDA #$00 $D396:8D 01 20 STA $2001 ; PPU Control Register 2 (turn everything off) $D399:85 FE STA $FE ; PPU_Control_Register_2_settings $D39B:60 RTS ; set VRAM $2000-$27FF to #$7F, set some PPU/VRAM registers ; control flow target $D39C:A9 20 LDA #$20 $D39E:20 A9 D3 JSR $D3A9 ; write #$7F to VRAM #$400 times starting at address A * 256 $D3A1:A9 24 LDA #$24 $D3A3:20 A9 D3 JSR $D3A9 ; write #$7F to VRAM #$400 times starting at address A * 256 $D3A6:4C F5 D7 JMP $D7F5 ; set some PPU/VRAM registers ; write #$7F to VRAM #$400 times starting at address A * 256 ; control flow target $D3A9:AE 02 20 LDX $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $D3AC:8D 06 20 STA $2006 ; VRAM Address Register #2 - high byte $D3AF:A2 00 LDX #$00 $D3B1:8E 06 20 STX $2006 ; VRAM Address Register #2 - low byte ; write #$7F to VRAM #$400 times $D3B4:A0 04 LDY #$04 $D3B6:A9 7F LDA #$7F ; control flow target $D3B8:8D 07 20 STA $2007 ; VRAM I/O Register $D3BB:CA DEX $D3BC:D0 FA BNE $D3B8 $D3BE:88 DEY $D3BF:D0 F7 BNE $D3B8 $D3C1:60 RTS ; fill $0710-$072F with #$0F ; control flow target $D3C2:A9 10 LDA #$10 $D3C4:85 02 STA $02 $D3C6:A9 07 LDA #$07 $D3C8:85 03 STA $03 $D3CA:A0 20 LDY #$20 $D3CC:A9 0F LDA #$0F $D3CE:D0 06 BNE $D3D6 ; fill (A * 256 + X) with Y #$00's ; control flow target $D3D0:86 02 STX $02 $D3D2:85 03 STA $03 ; fill ($02) with Y #$00's ; control flow target $D3D4:A9 00 LDA #$00 ; fill ($02) with A Y times ; control flow target $D3D6:88 DEY $D3D7:91 02 STA ($02),Y $D3D9:D0 FB BNE $D3D6 $D3DB:60 RTS ; $22 = #$C0 | $22 ; control flow target $D3DC:A9 C0 LDA #$C0 ; $22 = A | $22 ; control flow target $D3DE:05 22 ORA $22 $D3E0:85 22 STA $22 $D3E2:60 RTS ; control flow target $D3E3:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ ; control flow target $D3E6:A2 FF LDX #$FF ; control flow target $D3E8:CA DEX $D3E9:D0 FD BNE $D3E8 ; control flow target $D3EB:2C 02 20 BIT $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $D3EE:50 FB BVC $D3EB $D3F0:A2 04 LDX #$04 ; control flow target $D3F2:CA DEX $D3F3:D0 FD BNE $D3F2 $D3F5:A5 28 LDA $28 $D3F7:29 3F AND #$3F $D3F9:0A ASL $D3FA:0A ASL $D3FB:0A ASL $D3FC:05 25 ORA $25 $D3FE:8D 05 20 STA $2005 ; VRAM Address Register #1 (vertical scroll) $D401:A9 30 LDA #$30 $D403:8D 05 20 STA $2005 ; VRAM Address Register #1 (horizontal scroll) $D406:A9 00 LDA #$00 $D408:2A ROL $D409:05 FF ORA $FF ; PPU_Control_Register_1_settings $D40B:8D 00 20 STA $2000 ; PPU Control Register #1 $D40E:60 RTS ; control flow target $D40F:85 02 STA $02 ; control flow target $D411:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $D414:C6 02 DEC $02 $D416:D0 F9 BNE $D411 $D418:60 RTS ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ ; control flow target $D419:A5 22 LDA $22 ; $21 = $22 $D41B:85 21 STA $21 $D41D:A9 00 LDA #$00 ; STZ to $20,$22,$23,$29,$2A,$FD $D41F:85 2A STA $2A $D421:85 29 STA $29 $D423:85 23 STA $23 $D425:85 20 STA $20 $D427:85 22 STA $22 $D429:85 FD STA $FD ; control flow target $D42B:A5 20 LDA $20 ; busy loop until something else (must be IRQ somewhere) sets $20 $D42D:F0 FC BEQ $D42B $D42F:60 RTS ; this happens during IRQ and is the main interrupt handler $D430:48 PHA ; save register state to stack $D431:98 TYA $D432:48 PHA $D433:8A TXA $D434:48 PHA $D435:A5 FE LDA $FE ; PPU_Control_Register_2_settings $D437:F0 32 BEQ $D46B $D439:AD 02 20 LDA $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $D43C:A9 00 LDA #$00 $D43E:8D 01 20 STA $2001 ; PPU Control Register #2 - #$00 sets this to display nothing $D441:8D 03 20 STA $2003 ; SPR-RAM Address Register - set to #$00 $D444:A9 02 LDA #$02 $D446:8D 14 40 STA $4014 ; Sprite DMA Register - transfer 256 bytes starting at $100 * #$02 = $200 $D449:A5 21 LDA $21 $D44B:F0 16 BEQ $D463 $D44D:0A ASL $D44E:90 05 BCC $D455 $D450:48 PHA $D451:20 BA D4 JSR $D4BA $D454:68 PLA ; control flow target $D455:0A ASL $D456:90 03 BCC $D45B $D458:20 FF D4 JSR $D4FF ; control flow target $D45B:A5 21 LDA $21 $D45D:4A LSR $D45E:90 03 BCC $D463 $D460:20 8A D4 JSR $D48A ; control flow target $D463:20 F5 D7 JSR $D7F5 ; set some PPU/VRAM registers $D466:A5 FE LDA $FE ; PPU_Control_Register_2_settings $D468:8D 01 20 STA $2001 ; PPU Control Register #2 ; control flow target $D46B:A5 FD LDA $FD $D46D:D0 03 BNE $D472 $D46F:20 6B F6 JSR $F66B ; control flow target $D472:20 B8 D7 JSR $D7B8 $D475:A2 00 LDX #$00 $D477:86 21 STX $21 $D479:E8 INX $D47A:86 20 STX $20 $D47C:68 PLA ; restore register state from stack $D47D:AA TAX $D47E:68 PLA $D47F:A8 TAY $D480:68 PLA $D481:40 RTI ; this happens during IRQ ; control flow target $D482:A5 FF LDA $FF ; PPU_Control_Register_1_settings $D484:29 FB AND #$FB $D486:8D 00 20 STA $2000 ; PPU Control Register #1 $D489:60 RTS ; this happens during IRQ ; control flow target $D48A:20 82 D4 JSR $D482 $D48D:A2 10 LDX #$10 $D48F:20 94 D4 JSR $D494 $D492:A2 00 LDX #$00 ; control flow target $D494:AD 02 20 LDA $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $D497:A9 3F LDA #$3F $D499:8D 06 20 STA $2006 ; VRAM Address Register #2 - high byte $D49C:8E 06 20 STX $2006 ; VRAM Address Register #2 - low byte $D49F:A0 10 LDY #$10 ; control flow target $D4A1:BD 10 07 LDA $0710,X $D4A4:8D 07 20 STA $2007 ; VRAM I/O Register $D4A7:E8 INX $D4A8:88 DEY $D4A9:D0 F6 BNE $D4A1 $D4AB:A9 3F LDA #$3F $D4AD:8D 06 20 STA $2006 ; VRAM Address Register #2 - high byte $D4B0:8C 06 20 STY $2006 ; VRAM Address Register #2 - low byte $D4B3:8C 06 20 STY $2006 ; VRAM Address Register #2 - high byte $D4B6:8C 06 20 STY $2006 ; VRAM Address Register #2 - low byte ; control flow target $D4B9:60 RTS ; this happens during IRQ ; control flow target $D4BA:A0 00 LDY #$00 ; control flow target $D4BC:B9 30 07 LDA $0730,Y $D4BF:30 F8 BMI $D4B9 $D4C1:8D 06 20 STA $2006 ; VRAM Address Register #2 - high byte $D4C4:C8 INY $D4C5:B9 30 07 LDA $0730,Y $D4C8:8D 06 20 STA $2006 ; VRAM Address Register #2 - low byte $D4CB:C8 INY $D4CC:B9 30 07 LDA $0730,Y $D4CF:C8 INY $D4D0:0A ASL $D4D1:AA TAX $D4D2:A5 FF LDA $FF ; PPU_Control_Register_1_settings $D4D4:29 FB AND #$FB $D4D6:90 02 BCC $D4DA $D4D8:09 04 ORA #$04 ; control flow target $D4DA:8D 00 20 STA $2000 ; PPU Control Register #1 $D4DD:8A TXA $D4DE:0A ASL $D4DF:B0 0F BCS $D4F0 $D4E1:4A LSR $D4E2:4A LSR $D4E3:AA TAX ; control flow target $D4E4:B9 30 07 LDA $0730,Y $D4E7:C8 INY $D4E8:8D 07 20 STA $2007 ; VRAM I/O Register $D4EB:CA DEX $D4EC:D0 F6 BNE $D4E4 $D4EE:F0 CC BEQ $D4BC ; control flow target $D4F0:4A LSR $D4F1:4A LSR $D4F2:AA TAX $D4F3:B9 30 07 LDA $0730,Y $D4F6:C8 INY ; control flow target $D4F7:8D 07 20 STA $2007 ; VRAM I/O Register $D4FA:CA DEX $D4FB:D0 FA BNE $D4F7 $D4FD:F0 BD BEQ $D4BC ; control flow target $D4FF:20 82 D4 JSR $D482 $D502:A2 08 LDX #$08 $D504:A5 24 LDA $24 $D506:A0 23 LDY #$23 $D508:C9 40 CMP #$40 $D50A:90 02 BCC $D50E $D50C:A0 27 LDY #$27 ; control flow target $D50E:84 00 STY $00 ; control flow target $D510:A4 00 LDY $00 $D512:8C 06 20 STY $2006 ; VRAM Address Register #2 - high byte $D515:A8 TAY $D516:09 C0 ORA #$C0 $D518:8D 06 20 STA $2006 ; VRAM Address Register #2 - low byte $D51B:B9 80 07 LDA $0780,Y $D51E:8D 07 20 STA $2007 ; VRAM I/O Register $D521:CA DEX $D522:F0 95 BEQ $D4B9 $D524:98 TYA $D525:18 CLC $D526:69 08 ADC #$08 $D528:29 7F AND #$7F $D52A:4C 10 D5 JMP $D510 ; BRA ; data, it's used but I'm not sure what for $D52D:F8 $D52E:18 $D52F:A0 $D530:60 $D531:60 $D532:A0 ; control flow target $D533:20 BC CF JSR $CFBC $D536:A5 DE LDA $DE $D538:C9 0B CMP #$0B $D53A:D0 0A BNE $D546 $D53C:A5 2F LDA $2F $D53E:C9 04 CMP #$04 $D540:D0 04 BNE $D546 $D542:A9 0E LDA #$0E $D544:85 DE STA $DE ; control flow target $D546:A0 00 LDY #$00 ; control flow target $D548:B1 3C LDA ($3C),Y $D54A:10 07 BPL $D553 $D54C:AA TAX $D54D:29 3F AND #$3F $D54F:C5 DE CMP $DE $D551:F0 03 BEQ $D556 ; control flow target $D553:C8 INY $D554:D0 F2 BNE $D548 ; control flow target $D556:8A TXA $D557:0A ASL $D558:10 04 BPL $D55E $D55A:A9 01 LDA #$01 $D55C:85 4D STA $4D ; control flow target $D55E:B1 3A LDA ($3A),Y $D560:AA TAX $D561:29 0F AND #$0F $D563:85 44 STA $44 $D565:8A TXA $D566:29 F0 AND #$F0 $D568:4A LSR $D569:4A LSR $D56A:4A LSR $D56B:4A LSR $D56C:85 02 STA $02 $D56E:B1 38 LDA ($38),Y $D570:29 F0 AND #$F0 $D572:05 02 ORA $02 $D574:A6 44 LDX $44 $D576:E0 0B CPX #$0B $D578:90 58 BCC $D5D2 $D57A:85 2F STA $2F $D57C:A5 59 LDA $59 $D57E:F0 0B BEQ $D58B $D580:29 03 AND #$03 $D582:AA TAX $D583:BD 2F D5 LDA $D52F,X $D586:18 CLC $D587:65 65 ADC $65 $D589:D0 0C BNE $D597 ; control flow target $D58B:B1 38 LDA ($38),Y $D58D:0A ASL $D58E:0A ASL $D58F:0A ASL $D590:0A ASL $D591:A6 4D LDX $4D $D593:F0 02 BEQ $D597 $D595:09 06 ORA #$06 ; control flow target $D597:85 65 STA $65 $D599:B1 36 LDA ($36),Y $D59B:A2 10 LDX #$10 $D59D:20 6A D7 JSR $D76A ; multiplies A by X, returning low byte in $03 and high byte in A $D5A0:85 11 STA $11 $D5A2:A5 03 LDA $03 $D5A4:85 10 STA $10 $D5A6:20 5C D6 JSR $D65C $D5A9:A9 00 LDA #$00 $D5AB:85 30 STA $30 $D5AD:20 13 D6 JSR $D613 ; control flow target $D5B0:86 26 STX $26 $D5B2:84 27 STY $27 $D5B4:A5 10 LDA $10 $D5B6:85 63 STA $63 $D5B8:A5 11 LDA $11 $D5BA:85 64 STA $64 ; control flow target $D5BC:A9 00 LDA #$00 $D5BE:85 2A STA $2A $D5C0:85 28 STA $28 $D5C2:85 29 STA $29 $D5C4:20 31 CE JSR $CE31 $D5C7:A5 2A LDA $2A $D5C9:85 25 STA $25 $D5CB:A5 29 LDA $29 $D5CD:F0 02 BEQ $D5D1 $D5CF:85 28 STA $28 ; control flow target $D5D1:60 RTS ; control flow target $D5D2:86 30 STX $30 $D5D4:A2 00 LDX #$00 $D5D6:86 11 STX $11 $D5D8:B1 3C LDA ($3C),Y $D5DA:85 32 STA $32 $D5DC:B1 38 LDA ($38),Y $D5DE:85 31 STA $31 $D5E0:B1 36 LDA ($36),Y $D5E2:C9 FF CMP #$FF $D5E4:F0 03 BEQ $D5E9 $D5E6:20 2F D6 JSR $D62F ; when entering a room ; control flow target $D5E9:A9 B0 LDA #$B0 $D5EB:85 65 STA $65 $D5ED:A2 01 LDX #$01 $D5EF:A0 20 LDY #$20 $D5F1:A5 45 LDA $45 $D5F3:C5 32 CMP $32 $D5F5:D0 03 BNE $D5FA $D5F7:E8 INX $D5F8:A0 E0 LDY #$E0 ; control flow target $D5FA:20 8A C7 JSR $C78A $D5FD:84 10 STY $10 $D5FF:A5 46 LDA $46 $D601:85 45 STA $45 $D603:A2 60 LDX #$60 $D605:A0 00 LDY #$00 $D607:A5 30 LDA $30 $D609:C9 01 CMP #$01 $D60B:D0 A3 BNE $D5B0 $D60D:A2 10 LDX #$10 $D60F:A0 30 LDY #$30 $D611:D0 9D BNE $D5B0 ; control flow target $D613:A0 50 LDY #$50 $D615:A6 2F LDX $2F $D617:A5 DF LDA $DF ; location $D619:C9 08 CMP #$08 $D61B:F0 08 BEQ $D625 $D61D:C9 0B CMP #$0B $D61F:D0 0B BNE $D62C $D621:E0 05 CPX #$05 $D623:90 07 BCC $D62C ; control flow target $D625:E0 09 CPX #$09 $D627:B0 03 BCS $D62C $D629:A2 30 LDX #$30 $D62B:60 RTS ; control flow target $D62C:A2 10 LDX #$10 $D62E:60 RTS ; this happens when entering a room ; control flow target $D62F:A6 DF LDX $DF ; location $D631:20 46 D6 JSR $D646 $D634:20 03 DB JSR $DB03 ; script engine function execution loop $D637:A5 10 LDA $10 ; NPC ID $D639:C9 FF CMP #$FF ; #$FF = no NPC $D63B:F0 08 BEQ $D645 ; if no NPC, RTS $D63D:8D 0B 04 STA $040B ; else, save NPC ID to $040B $D640:A9 01 LDA #$01 $D642:8D 00 04 STA $0400 ; and #$01 to $0400 ; control flow target $D645:60 RTS ; this happens when entering a room ; control flow target $D646:48 PHA ; save A on the stack $D647:A9 05 LDA #$05 $D649:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $D64C:8A TXA $D64D:A2 00 LDX #$00 $D64F:20 4B D7 JSR $D74B ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate $D652:A8 TAY $D653:68 PLA ; restore A from the stack $D654:20 54 D7 JSR $D754 ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate $D657:86 42 STX $42 ; set mainStringAddr $D659:85 43 STA $43 $D65B:60 RTS ; control flow target $D65C:A5 44 LDA $44 $D65E:38 SEC $D65F:E9 0B SBC #$0B $D661:B0 02 BCS $D665 $D663:A9 00 LDA #$00 ; control flow target $D665:20 A2 D7 JSR $D7A2 ; data, probably a jump table $D668:7B D6 ; $D67B $D66A:D1 D5 ; $D5D1 $D66C:72 D6 ; $D672 $D66E:72 D6 ; $D672 $D670:D1 D5 ; $D5D1 ; control flow target $D672:A2 00 LDX #$00 $D674:A5 63 LDA $63 $D676:29 0F AND #$0F $D678:4C 6E C8 JMP $C86E ; control flow target $D67B:A2 00 LDX #$00 $D67D:A4 4F LDY $4F $D67F:88 DEY $D680:B9 2D D5 LDA $D52D,Y $D683:4C 6E C8 JMP $C86E ; control flow target $D686:A8 TAY $D687:20 09 E7 JSR $E709 $D68A:A5 11 LDA $11 $D68C:85 03 STA $03 $D68E:A5 10 LDA $10 $D690:46 03 LSR $03 $D692:6A ROR $D693:46 03 LSR $03 $D695:6A ROR $D696:4A LSR $D697:4A LSR $D698:85 02 STA $02 $D69A:B9 D5 D6 LDA $D6D5,Y $D69D:18 CLC $D69E:65 12 ADC $12 $D6A0:4A LSR $D6A1:4A LSR $D6A2:4A LSR $D6A3:4A LSR $D6A4:85 03 STA $03 $D6A6:A0 04 LDY #$04 ; control flow target $D6A8:B1 3E LDA ($3E),Y $D6AA:C8 INY $D6AB:84 04 STY $04 $D6AD:AA TAX $D6AE:29 7F AND #$7F $D6B0:38 SEC $D6B1:F0 18 BEQ $D6CB $D6B3:A8 TAY $D6B4:88 DEY $D6B5:B1 36 LDA ($36),Y $D6B7:C5 02 CMP $02 $D6B9:D0 08 BNE $D6C3 $D6BB:B1 38 LDA ($38),Y $D6BD:29 0F AND #$0F $D6BF:C5 03 CMP $03 $D6C1:F0 09 BEQ $D6CC ; control flow target $D6C3:8A TXA $D6C4:30 04 BMI $D6CA $D6C6:A4 04 LDY $04 $D6C8:D0 DE BNE $D6A8 ; control flow target $D6CA:38 SEC ; control flow target $D6CB:60 RTS ; control flow target $D6CC:B1 3C LDA ($3C),Y $D6CE:85 46 STA $46 $D6D0:C8 INY $D6D1:84 45 STY $45 $D6D3:18 CLC $D6D4:60 RTS ; data, it's used but I'm not sure what for $D6D5:20 $D6D6:20 $D6D7:00 ; control flow target $D6D8:A9 03 LDA #$03 $D6DA:85 33 STA $33 $D6DC:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $D6DF:A9 10 LDA #$10 $D6E1:A6 30 LDX $30 $D6E3:CA DEX $D6E4:D0 01 BNE $D6E7 $D6E6:0A ASL ; control flow target $D6E7:48 PHA $D6E8:86 04 STX $04 $D6EA:A2 18 LDX #$18 $D6EC:A5 DF LDA $DF ; location $D6EE:20 4B D7 JSR $D74B ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate $D6F1:A8 TAY $D6F2:A5 04 LDA $04 $D6F4:0A ASL $D6F5:18 CLC $D6F6:65 04 ADC $04 $D6F8:20 54 D7 JSR $D754 ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate $D6FB:86 06 STX $06 $D6FD:85 07 STA $07 $D6FF:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $D702:86 04 STX $04 $D704:85 05 STA $05 $D706:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $D709:A8 TAY $D70A:A9 00 LDA #$00 $D70C:20 54 D7 JSR $D754 ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate $D70F:20 34 D1 JSR $D134 ; STX $34, STA $35 $D712:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $D715:20 A1 CF JSR $CFA1 $D718:A5 04 LDA $04 $D71A:A4 05 LDY $05 $D71C:20 D9 D2 JSR $D2D9 $D71F:68 PLA $D720:60 RTS ; STA $0730,X, INX, TYA, STA $0730,X, INX ; control flow target $D721:9D 30 07 STA $0730,X $D724:E8 INX $D725:98 TYA ; STA $0730,X, INX ; control flow target $D726:9D 30 07 STA $0730,X $D729:E8 INX ; control flow target $D72A:60 RTS ; STA $0730,X, INX, $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; control flow target $D72B:20 26 D7 JSR $D726 ; STA $0730,X, INX ; $23 = X, $0730,X = #$80, $22 = #$80 | $22 ; control flow target $D72E:86 23 STX $23 $D730:A9 80 LDA #$80 $D732:9D 30 07 STA $0730,X $D735:4C DE D3 JMP $D3DE ; $22 = A | $22 ; control flow target $D738:88 DEY $D739:30 EF BMI $D72A $D73B:9D 30 07 STA $0730,X $D73E:E8 INX $D73F:D0 F7 BNE $D738 ; control flow target ; given A, sets Y = A << 1, X = $8000,Y, and A = $8001,Y $D741:0A ASL $D742:A8 TAY $D743:B9 00 80 LDA $8000,Y $D746:AA TAX $D747:B9 01 80 LDA $8001,Y $D74A:60 RTS ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate ; control flow target $D74B:48 PHA $D74C:BD 00 80 LDA $8000,X $D74F:BC 01 80 LDY $8001,X $D752:AA TAX $D753:68 PLA ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate ; control flow target ; given X and Y, set 16-bit $02-$03 to X * 256 + Y $D754:86 02 STX $02 $D756:84 03 STY $03 ; given A, set X to ($02),(A*2), A to ($02),(A*2+1), and INC $03 as appropriate ; control flow target ; given A, set Y = A << 1 $D758:0A ASL $D759:A8 TAY ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate ; control flow target $D75A:B1 02 LDA ($02),Y $D75C:AA TAX $D75D:C8 INY $D75E:D0 02 BNE $D762 $D760:E6 03 INC $03 ; given Y, set A = ($02),Y; Y++ and update $03 if Y overflowed ; control flow target $D762:B1 02 LDA ($02),Y $D764:C8 INY $D765:D0 02 BNE $D769 $D767:E6 03 INC $03 ; control flow target $D769:60 RTS ; multiplies A by X, returning low byte in $03 and high byte in A ; after RTS, $02 and X are #$00 and $04 is the original value of A ; control flow target $D76A:86 02 STX $02 $D76C:85 04 STA $04 $D76E:A9 00 LDA #$00 $D770:85 03 STA $03 $D772:A2 08 LDX #$08 ; control flow target $D774:46 02 LSR $02 $D776:90 03 BCC $D77B $D778:18 CLC $D779:65 04 ADC $04 ; control flow target $D77B:6A ROR $D77C:66 03 ROR $03 $D77E:CA DEX $D77F:D0 F3 BNE $D774 $D781:60 RTS ; unused? $D782:20 DD D7 JSR $D7DD ; ask the RNG for a number ; divides A by X, returning quotient in $02 and remainder in A ; control flow target $D785:85 02 STA $02 $D787:A9 00 LDA #$00 $D789:86 03 STX $03 $D78B:A2 09 LDX #$09 $D78D:D0 07 BNE $D796 ; control flow target $D78F:2A ROL $D790:C5 03 CMP $03 $D792:90 02 BCC $D796 $D794:E5 03 SBC $03 ; control flow target $D796:26 02 ROL $02 $D798:CA DEX $D799:D0 F4 BNE $D78F $D79B:60 RTS ; control flow target $D79C:49 FF EOR #$FF $D79E:18 CLC $D79F:69 01 ADC #$01 $D7A1:60 RTS ; control flow target $D7A2:0A ASL $D7A3:A8 TAY $D7A4:C8 INY $D7A5:68 PLA $D7A6:85 2B STA $2B $D7A8:68 PLA $D7A9:85 2C STA $2C $D7AB:B1 2B LDA ($2B),Y $D7AD:AA TAX $D7AE:C8 INY $D7AF:B1 2B LDA ($2B),Y $D7B1:85 2C STA $2C $D7B3:86 2B STX $2B $D7B5:6C 2B 00 JMP ($2B) ; this happens during IRQ ; control flow target $D7B8:A2 01 LDX #$01 $D7BA:8E 16 40 STX $4016 ; Joypad #1 $D7BD:CA DEX $D7BE:8E 16 40 STX $4016 ; Joypad #1 $D7C1:A2 08 LDX #$08 ; control flow target $D7C3:AD 16 40 LDA $4016 ; Joypad #1 $D7C6:4A LSR $D7C7:26 F8 ROL $F8 $D7C9:4A LSR $D7CA:26 8F ROL $8F $D7CC:CA DEX $D7CD:D0 F4 BNE $D7C3 $D7CF:A5 8F LDA $8F $D7D1:05 F8 ORA $F8 $D7D3:A8 TAY $D7D4:45 F9 EOR $F9 $D7D6:84 F9 STY $F9 $D7D8:25 F9 AND $F9 $D7DA:85 F8 STA $F8 $D7DC:60 RTS ; apparently this is the RNG ; control flow target $D7DD:18 CLC $D7DE:A5 DA LDA $DA $D7E0:29 48 AND #$48 $D7E2:F0 06 BEQ $D7EA $D7E4:C9 48 CMP #$48 $D7E6:18 CLC $D7E7:F0 01 BEQ $D7EA $D7E9:38 SEC ; control flow target $D7EA:26 DC ROL $DC $D7EC:26 DD ROL $DD $D7EE:26 DA ROL $DA $D7F0:26 DB ROL $DB $D7F2:A5 DA LDA $DA $D7F4:60 RTS ; set some PPU/VRAM registers ; control flow target $D7F5:AD 02 20 LDA $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $D7F8:A9 00 LDA #$00 $D7FA:8D 05 20 STA $2005 ; VRAM Address Register #1 (vertical scroll) $D7FD:A5 FB LDA $FB $D7FF:8D 05 20 STA $2005 ; VRAM Address Register #1 (horizontal scroll) $D802:A5 FF LDA $FF ; PPU_Control_Register_1_settings $D804:8D 00 20 STA $2000 ; PPU Control Register #1 $D807:60 RTS ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), messing with $03 if A > #$FD, then process the string located at (($8001),(A*2) + ($8000),(A*2)) ; control flow target $D808:A2 00 LDX #$00 $D80A:20 4B D7 JSR $D74B ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate ; given A and X, process the string located at (A * 256 + X); string has format (<position high> <position low> <string length> <string>)+ #$FF, where the high bit of <string length> also controls PPU auto-increment and the second highest bit causes <string> to be repeated <string length> times ; control flow target $D80D:86 00 STX $00 $D80F:85 01 STA $01 ; control flow target $D811:AE 02 20 LDX $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $D814:A0 00 LDY #$00 $D816:B1 00 LDA ($00),Y ; first byte of string position $D818:30 DB BMI $D7F5 ; set some PPU/VRAM registers; this is the only path that reaches RTS - strings are terminated with #$FF $D81A:8D 06 20 STA $2006 ; VRAM Address Register #2 - high byte $D81D:C8 INY $D81E:B1 00 LDA ($00),Y ; second byte of string position $D820:8D 06 20 STA $2006 ; VRAM Address Register #2 - low byte $D823:C8 INY $D824:B1 00 LDA ($00),Y ; string length $D826:C8 INY $D827:0A ASL $D828:AA TAX ; save string length * 2 $D829:A5 FF LDA $FF ; PPU_Control_Register_1_settings $D82B:09 04 ORA #$04 ; set bit 2 (increment PPU by 1) $D82D:B0 02 BCS $D831 ; C is the high bit of string length $D82F:29 FB AND #$FB ; unset bit 2 (increment PPU by 32) ; control flow target $D831:8D 00 20 STA $2000 ; PPU Control Register #1 $D834:8A TXA ; string length * 2 $D835:0A ASL $D836:B0 17 BCS $D84F ; C is the second highest bit of string length $D838:4A LSR $D839:4A LSR $D83A:AA TAX ; X = string length ; control flow target $D83B:B1 00 LDA ($00),Y ; write next character of string to VRAM $D83D:8D 07 20 STA $2007 ; VRAM I/O Register $D840:C8 INY $D841:CA DEX ; decrement remaining string length $D842:D0 F7 BNE $D83B ; keep writing until remaining string length == 0 ; control flow target $D844:98 TYA $D845:65 00 ADC $00 $D847:85 00 STA $00 ; update low byte of string index $D849:90 C6 BCC $D811 ; if low byte didn't overflow, process the next substring $D84B:E6 01 INC $01 ; else, update high byte $D84D:B0 C2 BCS $D811 ; INC doesn't affect C, so this is BRA; process the next substring ; control flow target $D84F:4A LSR $D850:4A LSR $D851:AA TAX ; X = string length $D852:B1 00 LDA ($00),Y ; write next character of string to VRAM X times $D854:C8 INY ; control flow target $D855:8D 07 20 STA $2007 ; VRAM I/O Register $D858:CA DEX ; decrement remaining string length $D859:D0 FA BNE $D855 ; keep writing until remaining string length == 0 $D85B:F0 E7 BEQ $D844 ; BRA ; copy $D869-$D874 to $0200-$020B ; control flow target $D85D:A2 0B LDX #$0B ; control flow target $D85F:BD 69 D8 LDA $D869,X $D862:9D 00 02 STA $0200,X $D865:CA DEX $D866:10 F7 BPL $D85F $D868:60 RTS ; data, it's used but I'm not sure what for $D869:2D 5B 22 $D86C:F8 $D86D:0B $D86E:5C 03 64 0C $D872:53 03 $D874:B4 ; control flow target $D875:A9 80 LDA #$80 $D877:85 02 STA $02 $D879:A9 07 LDA #$07 $D87B:85 03 STA $03 $D87D:A0 80 LDY #$80 $D87F:A9 FF LDA #$FF $D881:20 D6 D3 JSR $D3D6 ; fill ($02) with A Y times ; control flow target $D884:A9 00 LDA #$00 $D886:AE E2 03 LDX $03E2 $D889:F0 02 BEQ $D88D $D88B:A9 01 LDA #$01 ; control flow target $D88D:20 94 D9 JSR $D994 ; given A, process the A'th string from the pointer table located at $D99F $D890:A2 00 LDX #$00 $D892:A5 4A LDA $4A ; current HP $D894:20 E1 D8 JSR $D8E1 $D897:A9 00 LDA #$00 $D899:20 A8 D8 JSR $D8A8 $D89C:20 BA D4 JSR $D4BA ; control flow target $D89F:60 RTS ; control flow target $D8A0:A6 23 LDX $23 $D8A2:D0 FB BNE $D89F ; if $23 != #$00, RTS $D8A4:A5 6B LDA $6B $D8A6:F0 22 BEQ $D8CA ; if $6B == #$00, go do some other stuff ; control flow target $D8A8:20 60 D9 JSR $D960 ; updates current olive count $D8AB:A9 00 LDA #$00 $D8AD:85 6B STA $6B ; $D8AF-$D8C6: write to $0730,X: #$207602, 10's digit of current olive count | #$A0, 1's digit of current olive count | #$A0 $D8AF:A9 20 LDA #$20 $D8B1:A0 76 LDY #$76 $D8B3:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $D8B6:A9 02 LDA #$02 $D8B8:20 26 D7 JSR $D726 ; STA $0730,X, INX $D8BB:A5 E0 LDA $E0 ; 1's digit of current olive count $D8BD:09 A0 ORA #$A0 $D8BF:A8 TAY $D8C0:A5 E1 LDA $E1 ; 10's digit of current olive count $D8C2:09 A0 ORA #$A0 $D8C4:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $D8C7:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; control flow target $D8CA:A5 6A LDA $6A $D8CC:F0 D1 BEQ $D89F ; if $6A == #$00, RTS $D8CE:18 CLC $D8CF:65 4A ADC $4A ; current HP $D8D1:C5 EF CMP $EF ; max HP $D8D3:90 02 BCC $D8D7 $D8D5:A5 EF LDA $EF ; max HP ; at this point, A = min($6A + current HP, max HP) ; control flow target $D8D7:A0 00 LDY #$00 $D8D9:84 6A STY $6A ; set $6A = #$00 $D8DB:C5 4A CMP $4A ; current HP $D8DD:F0 C0 BEQ $D89F ; if min($6A + current HP, max HP) == current HP, RTS $D8DF:85 4A STA $4A ; set current HP = min($6A + current HP, max HP) ; control flow target $D8E1:85 03 STA $03 $D8E3:4A LSR $D8E4:4A LSR $D8E5:85 02 STA $02 $D8E7:A5 EF LDA $EF ; max HP $D8E9:4A LSR $D8EA:4A LSR $D8EB:85 04 STA $04 $D8ED:A5 F2 LDA $F2 $D8EF:29 02 AND #$02 $D8F1:F0 06 BEQ $D8F9 $D8F3:46 02 LSR $02 $D8F5:46 03 LSR $03 $D8F7:46 04 LSR $04 ; control flow target $D8F9:A5 03 LDA $03 $D8FB:29 03 AND #$03 $D8FD:85 03 STA $03 $D8FF:A9 20 LDA #$20 $D901:A0 86 LDY #$86 $D903:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $D906:E8 INX $D907:A4 02 LDY $02 $D909:A9 F0 LDA #$F0 $D90B:20 38 D7 JSR $D738 $D90E:A5 03 LDA $03 $D910:F0 08 BEQ $D91A $D912:A9 F1 LDA #$F1 $D914:9D 30 07 STA $0730,X $D917:E8 INX $D918:E6 02 INC $02 ; control flow target $D91A:A5 04 LDA $04 $D91C:38 SEC $D91D:E5 02 SBC $02 $D91F:A8 TAY $D920:18 CLC $D921:65 02 ADC $02 $D923:8D 32 07 STA $0732 $D926:A9 DD LDA #$DD $D928:20 38 D7 JSR $D738 $D92B:A4 03 LDY $03 $D92D:F0 2E BEQ $D95D $D92F:B9 8D D9 LDA $D98D,Y $D932:85 02 STA $02 $D934:A9 1F LDA #$1F $D936:A0 18 LDY #$18 $D938:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $D93B:A9 06 LDA #$06 $D93D:9D 30 07 STA $0730,X $D940:E8 INX $D941:AD 91 D9 LDA $D991 $D944:25 02 AND $02 $D946:9D 30 07 STA $0730,X $D949:E8 INX $D94A:AD 92 D9 LDA $D992 $D94D:25 02 AND $02 $D94F:A0 04 LDY #$04 $D951:20 38 D7 JSR $D738 $D954:AD 93 D9 LDA $D993 $D957:25 02 AND $02 $D959:9D 30 07 STA $0730,X $D95C:E8 INX ; control flow target $D95D:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; control flow target $D960:A4 E1 LDY $E1 ; 10's digit of current olive count $D962:C9 00 CMP #$00 $D964:18 CLC $D965:10 12 BPL $D979 ; branch if A ($6B) > 0 $D967:65 E0 ADC $E0 ; 1's digit of current olive count $D969:10 1E BPL $D989 ; if A ($6B) + 1's digit of current olive count > 0, 10's digit stays the same, 1's digit becomes $6B + 1's digit ; control flow target $D96B:88 DEY $D96C:30 07 BMI $D975 $D96E:18 CLC $D96F:69 0A ADC #$0A $D971:30 F8 BMI $D96B $D973:10 14 BPL $D989 ; control flow target $D975:A9 00 LDA #$00 $D977:F0 0F BEQ $D988 ; control flow target $D979:65 E0 ADC $E0 ; 1's digit of current olive count ; control flow target $D97B:C9 0A CMP #$0A $D97D:90 0A BCC $D989 $D97F:E9 0A SBC #$0A $D981:C8 INY $D982:C0 0A CPY #$0A $D984:90 F5 BCC $D97B $D986:A9 09 LDA #$09 ; control flow target $D988:A8 TAY ; control flow target $D989:85 E0 STA $E0 ; 1's digit of current olive count $D98B:84 E1 STY $E1 ; 10's digit of current olive count $D98D:60 RTS ; data; it's used but I'm not sure what for ; probably lut from $D92F $D98E:80 E0 $D990:F8 CC $D992:EE 66 ; given A, process the A'th string from the pointer table located at $D99F ; control flow target $D994:0A ASL $D995:A8 TAY $D996:BE 9F D9 LDX $D99F,Y $D999:B9 A0 D9 LDA $D9A0,Y $D99C:4C 0D D8 JMP $D80D ; given A and X, process the string located at (A * 256 + X) ; pointer table $D99F:A7D9 ; $D9A7 $D9A1:ABD9 ; $D9AB $D9A3:04DA ; $DA04 ; continue game screen text $D9A5:1FDA ; $DA1F ; new game screen text $D9A7:23C0 ; text position $D9A9:50 ; text length - repeat text $50 times $D9AA:FF ; text ; first pointer starts overlapping with second pointer here $D9AB:202B ; text position $D9AD:04 ; text length $D9AE:F47F7FFB ; text: ??? $D9B2:2041 ; text position $D9B4:1E ; text length $D9B5:E0E1E2E37F7FF4F3F4F5F6F7F8F9FAFBF2FB7F7FEC7F7FEDECDEEDECDEED ; text: ??? $D9D3:2061 ; text position $D9D5:04 ; text length $D9D6:E4E5E6E7 ; text: ??? $D9DA:2075 ; text position $D9DC:0A ; text length $D9DD:FC7F7FFDFC7FFDFC7FFD ; text: ??? $D9E6:2081 ; text position $D9E9:04 ; text length $D9EA:E8E9EAEB ; text: ??? $D9EE:2095 ; text position $D9F0:0A ; text length $D9F1:EEDFDFEFEEDFEFEEDFEF ; text: ??? $D9FB:2086 ; text position $D9FD:4E ; text length - repeat text $4E times $D9FE:7F ; text $D9FF:20A0 ; text position $DA01:60 ; text length - repeat text $60 times $DA02:FE ; text $DA03:FF ; end of string ; continue game screen text $DA04:20A4 ; text position $DA06:16 ; text length - this should read 17? $DA07:B50E1405127F1408057F170F1204137F0F067F070F04AC ; text: "Enter the words of god." $DA1E:FF ; end of string ; new game screen text $DA1F:20A4 ; text position $DA21:0C ; text length $DA22:B50E1405127F0E010D0513AC ; text: "Enter names." $DAED:2106 ; text position $DA30:04 ; text length $DA31:B805120F ; text: "Hero" $DA35:2166 ; text position $DA37:07 ; text length $DA38:B805120F090E05 ; text: "Heroine" $DA3F:FF ; end of string ; control flow target $DA40:A0 01 LDY #$01 $DA42:D0 02 BNE $DA46 ; BRA ; control flow target $DA44:A0 00 LDY #$00 ; control flow target $DA46:E6 47 INC $47 $DA48:AD E2 03 LDA $03E2 $DA4B:C9 02 CMP #$02 $DA4D:90 18 BCC $DA67 $DA4F:F0 09 BEQ $DA5A $DA51:20 F1 E6 JSR $E6F1 ; swap ROM bank 0 into the swappable RAM bank $DA54:20 0D 8F JSR $8F0D ; not in this bank! $DA57:4C 62 DA JMP $DA62 ; control flow target $DA5A:A9 50 LDA #$50 $DA5C:20 5A D3 JSR $D35A $DA5F:20 BE F1 JSR $F1BE ; control flow target $DA62:A9 05 LDA #$05 $DA64:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF ; control flow target $DA67:4C E3 D3 JMP $D3E3 ; data for $DA78 $DA6A:0F $DA6B:05 $DA6C:05 $DA6D:02 ; probably this happens when displaying a text box ; control flow target $DA6E:20 E6 D3 JSR $D3E6 $DA71:AE E2 03 LDX $03E2 $DA74:E0 03 CPX #$03 $DA76:90 31 BCC $DAA9 ; this jumps into the middle of BIT $00A9 :p $DA78:BD 67 DA LDA $DA67,X ; #$03 <= X <= #$06 or else we start loading code instead of data $DA7B:A6 DF LDX $DF ; location $DA7D:20 46 D6 JSR $D646 $DA80:AD E2 03 LDA $03E2 $DA83:C9 06 CMP #$06 $DA85:F0 1F BEQ $DAA6 $DA87:20 52 F6 JSR $F652 ; STZ to $8E, $94-$97, $99-$9A, pAPU stuff $DA8A:20 00 D3 JSR $D300 ; initialize a bunch of stuff $DA8D:20 82 EB JSR $EB82 $DA90:A9 0D LDA #$0D $DA92:20 ED F5 JSR $F5ED $DA95:20 F1 E6 JSR $E6F1 ; swap ROM bank 0 into the swappable RAM bank $DA98:20 AE 8E JSR $8EAE ; not in this bank! $DA9B:A9 0D LDA #$0D $DA9D:85 1A STA $1A $DA9F:A9 10 LDA #$10 $DAA1:8D E4 03 STA $03E4 ; maxCharactersPerLine $DAA4:D0 08 BNE $DAAE ; control flow target $DAA6:A9 01 LDA #$01 ; when coming from $DAA6: $DAA8:2C A9 00 BIT $00A9 ; when coming from $DA76: $DAA9:A9 40 LDA #$00 ; both paths meet here $DAAB:20 B5 DE JSR $DEB5 ; control flow target $DAAE:A9 05 LDA #$05 $DAB0:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF ; $DAB3-$DAC1: fill $0440-$04FF with #$7F $DAB3:A9 40 LDA #$40 $DAB5:85 02 STA $02 $DAB7:A9 04 LDA #$04 $DAB9:85 03 STA $03 $DABB:A9 7F LDA #$7F $DABD:A0 C0 LDY #$C0 $DABF:20 D6 D3 JSR $D3D6 ; fill ($02) with A Y times $DAC2:A0 00 LDY #$00 $DAC4:84 1B STY $1B ; initialize currentLineNumber to #$00 $DAC6:20 03 DB JSR $DB03 ; script engine function execution loop ; control flow target $DAC9:20 0B DD JSR $DD0B $DACC:18 CLC $DACD:20 EE DC JSR $DCEE $DAD0:AD E2 03 LDA $03E2 $DAD3:C9 03 CMP #$03 $DAD5:90 04 BCC $DADB $DAD7:C9 06 CMP #$06 $DAD9:90 12 BCC $DAED ; control flow target $DADB:20 D8 D6 JSR $D6D8 $DADE:A9 00 LDA #$00 $DAE0:85 22 STA $22 $DAE2:8D E2 03 STA $03E2 $DAE5:85 2E STA $2E $DAE7:20 E3 D3 JSR $D3E3 $DAEA:4C 30 DF JMP $DF30 ; control flow target $DAED:A9 00 LDA #$00 $DAEF:8D E2 03 STA $03E2 $DAF2:85 2E STA $2E $DAF4:20 00 D3 JSR $D300 ; initialize a bunch of stuff $DAF7:20 E9 C2 JSR $C2E9 $DAFA:20 5C F1 JSR $F15C $DAFD:20 9B C1 JSR $C19B $DB00:4C 0C D3 JMP $D30C ; script engine function execution loop ; control flow target $DB03:A0 FF LDY #$FF $DB05:84 10 STY $10 ; set NPC indicator to no $DB07:C8 INY ; Y = #$00 $DB08:8C E3 03 STY $03E3 ; control flow target $DB0B:B1 42 LDA ($42),Y $DB0D:C8 INY $DB0E:20 14 DB JSR $DB14 $DB11:4C 0B DB JMP $DB0B ; BRA ; control flow target $DB14:0A ASL $DB15:AA TAX $DB16:BD 23 DB LDA $DB23,X $DB19:85 02 STA $02 $DB1B:BD 24 DB LDA $DB24,X $DB1E:85 03 STA $03 $DB20:6C 02 00 JMP ($02) ; jump table $DB23:8A DB ; $DB8A (0): read next byte of ($42),Y, store it in $10 (NPC to display), then increment Y, set $42-$43 = Y + $42-$43, and double RTS $DB25:B0 DB ; $DBB0 (1): if quest status flag specified by the next byte of ($42),Y is not set, skip over a number of bytes given by the next byte of ($42),Y $DB27:B7 DB ; $DBB7 (2): set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y $DB29:0E DC ; $DC0E (3): display text based on address of next 2 bytes $DB2B:99 DB ; $DB99 (4): double RTS $DB2D:C4 DB ; $DBC4 (5): read next byte of ($42),Y, set that quest status flag, and increment Y $DB2F:CD DB ; $DBCD (6): read next byte of ($42),Y, unset that quest status flag, and increment Y $DB31:BD DB ; $DBBD (7): if quest status flag specified by the next byte of ($42),Y is set, skip over a number of bytes given by the next byte of ($42),Y $DB33:E0 DB ; $DBE0 (8): read next byte of ($42),Y, save it in $03E3, increment Y $DB35:FE DB ; $DBFE (9): display text based on current value of ($42), double RTS $DB37:A4 DB ; $DBA4 (A): display Yes/No option $DB39:9C DB ; $DB9C (B): if # salamander skins < 20, set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y, else skip a byte $DB3B:5A DB ; $DB5A (C): check current vs. required olives $DB3D:E7 DB ; $DBE7 (D): generate and display password, double RTS $DB3F:43 DB ; $DB43 (E): do the normal post-string stuff and then set $2E to #$02 $DB41:4C DB ; $DB4C (F): do the normal post-string stuff and then call $00:8C52 ; control flow target $DB43:20 C9 DA JSR $DAC9 ; do the normal post-string stuff $DB46:A9 02 LDA #$02 $DB48:85 2E STA $2E $DB4A:D0 09 BNE $DB55 ; BRA to triple RTS ; control flow target $DB4C:20 C9 DA JSR $DAC9 ; do the normal post-string stuff $DB4F:20 F1 E6 JSR $E6F1 ; swap ROM bank 0 into the swappable RAM bank $DB52:20 52 8C JSR $8C52 ; not in this bank! ; control flow target $DB55:68 PLA $DB56:68 PLA $DB57:68 PLA $DB58:68 PLA $DB59:60 RTS ; control flow target $DB5A:B1 42 LDA ($42),Y ; read next byte of ($42),Y (required number of olives) $DB5C:C8 INY $DB5D:85 06 STA $06 ; store it in $06 - this is the true item cost, whatever the displayed text says ; $DB5F-$DB67 end up setting A = oliveCount $DB5F:A5 E1 LDA $E1 ; 10's digit of current olive count $DB61:0A ASL $DB62:0A ASL $DB63:65 E1 ADC $E1 ; 10's digit of current olive count $DB65:0A ASL $DB66:65 E0 ADC $E0 ; 1's digit of current olive count $DB68:C5 06 CMP $06 ; check current olive count - required olive count $DB6A:90 4B BCC $DBB7 ; if current olive count < required olive count then set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y $DB6C:98 TYA ; else save Y on the stack $DB6D:48 PHA ; control flow target $DB6E:A9 FF LDA #$FF $DB70:85 6B STA $6B $DB72:20 A0 D8 JSR $D8A0 ; probably displays olive count $DB75:A5 06 LDA $06 ; required olive count $DB77:29 03 AND #$03 $DB79:D0 04 BNE $DB7F ; if required olive count % 4 == 0, $99 = #$11 $DB7B:A9 11 LDA #$11 $DB7D:85 99 STA $99 ; control flow target $DB7F:20 E3 D3 JSR $D3E3 $DB82:C6 06 DEC $06 ; decrement required olive count $DB84:D0 E8 BNE $DB6E ; loop until required olive count == #$00 $DB86:68 PLA ; restore the old value of Y $DB87:A8 TAY $DB88:C8 INY $DB89:60 RTS ; read next byte of ($42),Y, store it in $10 (NPC to display), then increment Y, set $42-$43 = Y + $42-$43, and double RTS ; control flow target $DB8A:B1 42 LDA ($42),Y ; read next byte $DB8C:85 10 STA $10 ; store it to $10 (NPC to display) $DB8E:C8 INY $DB8F:98 TYA $DB90:18 CLC $DB91:65 42 ADC $42 ; set $42-$43 = Y + $42-$43 $DB93:85 42 STA $42 $DB95:90 02 BCC $DB99 $DB97:E6 43 INC $43 ; control flow target $DB99:68 PLA ; pull last return address off the stack $DB9A:68 PLA $DB9B:60 RTS ; this is effectively RTS RTS ; if $E2 (# salamander skins) < #$14, set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y, else skip a byte ; control flow target $DB9C:A5 E2 LDA $E2 ; salamanderSkins $DB9E:C9 14 CMP #$14 $DBA0:90 15 BCC $DBB7 ; set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y $DBA2:C8 INY $DBA3:60 RTS ; control flow target $DBA4:98 TYA ; save Y on the stack $DBA5:48 PHA $DBA6:20 5C DC JSR $DC5C ; display Yes/No option $DBA9:68 PLA ; restore Y from the stack $DBAA:A8 TAY $DBAB:CA DEX $DBAC:10 09 BPL $DBB7 ; if X > 0, set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y $DBAE:C8 INY ; otherwise Y++ and RTS $DBAF:60 RTS ; if quest status flag specified by the next byte of ($42),Y is not set, skip over a number of bytes given by the next byte of ($42),Y ; control flow target $DBB0:20 D8 DB JSR $DBD8 ; read next byte of ($42),Y, increment Y, save it in $02, read quest status flag into A $DBB3:D0 1F BNE $DBD4 ; if flag is set, go restore Y from $02, increment Y (thus skipping a byte), and RTS ; control flow target $DBB5:A4 02 LDY $02 ; else, restore the old value of Y ; control flow target $DBB7:98 TYA ; set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y $DBB8:18 CLC $DBB9:71 42 ADC ($42),Y $DBBB:A8 TAY $DBBC:60 RTS ; if quest status flag specified by the next byte of ($42),Y is set, skip over a number of bytes given by the next byte of ($42),Y ; control flow target $DBBD:20 D8 DB JSR $DBD8 ; read next byte of ($42),Y, increment Y, save it in $02, read quest status flag into A $DBC0:F0 12 BEQ $DBD4 ; if flag is not set, go restore Y from $02, increment Y (thus skipping a byte), and RTS $DBC2:D0 F1 BNE $DBB5 ; else, go restore Y from $02 and set Y = Y + ($42),Y, effectively skipping over the number of bytes specified by ($42),Y, then RTS : read next byte of ($42),Y, set that quest status flag, and increment Y ; control flow target $DBC4:B1 42 LDA ($42),Y $DBC6:84 02 STY $02 $DBC8:20 20 E3 JSR $E320 ; sets quest status flag specified by A $DBCB:D0 07 BNE $DBD4 ; BRA : read next byte of ($42),Y, unset that quest status flag, and increment Y ; control flow target $DBCD:B1 42 LDA ($42),Y $DBCF:84 02 STY $02 $DBD1:20 14 E3 JSR $E314 ; unsets quest status flag specified by A ; control flow target $DBD4:A4 02 LDY $02 ; restore the old value of Y $DBD6:C8 INY $DBD7:60 RTS ; read next byte of ($42),Y, increment Y, save it in $02, read quest status flag into A ; control flow target $DBD8:B1 42 LDA ($42),Y $DBDA:C8 INY $DBDB:84 02 STY $02 ; save Y since we're going to use it for other things $DBDD:4C 0D E3 JMP $E30D ; read quest status flag specified by A into A ; read next byte of ($42),Y, save it in $03E3, increment Y ; control flow target $DBE0:B1 42 LDA ($42),Y $DBE2:8D E3 03 STA $03E3 $DBE5:C8 INY $DBE6:60 RTS ; entry point for script engine function index #$0D ; control flow target $DBE7:68 PLA ; RTS will return +1 level $DBE8:68 PLA $DBE9:20 91 DF JSR $DF91 ; generate a password and store it starting at $014A (string length at $0149) and $0169 $DBEC:A9 49 LDA #$49 ; set curStringAddr to #$0149 $DBEE:85 D8 STA $D8 $DBF0:A9 01 LDA #$01 $DBF2:85 D9 STA $D9 $DBF4:A9 00 LDA #$00 $DBF6:85 17 STA $17 ; set curStringByte to #$00 $DBF8:A9 C0 LDA #$C0 $DBFA:85 D7 STA $D7 ; set curTableNum to #$C0 (password table) $DBFC:D0 20 BNE $DC1E ; BRA ; entry point for script engine function index #$09 ; control flow target $DBFE:68 PLA ; RTS will return +1 level $DBFF:68 PLA $DC00:98 TYA $DC01:18 CLC $DC02:65 42 ADC $42 $DC04:85 D8 STA $D8 ; curStringAddr_low $DC06:A5 43 LDA $43 $DC08:69 00 ADC #$00 ; $D9 += 1 if carry set $DC0A:85 D9 STA $D9 ; curStringAddr_high $DC0C:D0 0A BNE $DC18 ; if $D9 overflowed, read the next 2 bytes into curStringAddr ; entry point for script engine function index #$03 ; control flow target $DC0E:B1 42 LDA ($42),Y $DC10:85 D8 STA $D8 ; curStringAddr_low $DC12:C8 INY $DC13:B1 42 LDA ($42),Y $DC15:85 D9 STA $D9 ; curStringAddr_high $DC17:C8 INY ; control flow target $DC18:A9 00 LDA #$00 $DC1A:85 D7 STA $D7 ; set curTableNum to uppercase $DC1C:85 16 STA $16 ; set curStringBitNum to #$00 ; control flow target $DC1E:98 TYA ; save Y on the stack $DC1F:48 PHA $DC20:20 A3 DE JSR $DEA3 ; load A with the next byte from curStringAddr, increment curStringAddr $DC23:85 19 STA $19 ; numTokensToRead $DC25:D0 2A BNE $DC51 ; this had better be BRA, or else we're reading 0 bytes ; control flow target $DC27:20 C6 DD JSR $DDC6 ; looks like this is where all the heavy lifting happens $DC2A:48 PHA ; save A on the stack $DC2B:20 40 DA JSR $DA40 $DC2E:68 PLA ; restore A from the stack $DC2F:C9 FE CMP #$FE $DC31:F0 1B BEQ $DC4E ; if A == #$FE, go handle a newline $DC33:C9 FF CMP #$FF $DC35:D0 0F BNE $DC46 $DC37:A5 D7 LDA $D7 ; curTableNum $DC39:29 FC AND #$FC ; set lowest 2 bits of curTableNum to 0, maybe switching us back to the upper-case table $DC3B:85 D7 STA $D7 ; curTableNum $DC3D:20 0B DD JSR $DD0B $DC40:38 SEC $DC41:20 EE DC JSR $DCEE $DC44:D0 0B BNE $DC51 ; control flow target $DC46:A6 1C LDX $1C ; charactersOnCurrentLine $DC48:E8 INX $DC49:EC E4 03 CPX $03E4 ; maxCharactersPerLine $DC4C:90 05 BCC $DC53 ; branch if X < maxCharactersPerLine ; control flow target $DC4E:20 0F DD JSR $DD0F ; control flow target $DC51:A2 00 LDX #$00 ; reset charactersOnCurrentLine ; control flow target $DC53:86 1C STX $1C ; charactersOnCurrentLine $DC55:A5 19 LDA $19 ; numTokensToRead $DC57:D0 CE BNE $DC27 ; when $19 hits #$00, we're all done with displaying text $DC59:68 PLA ; restore Y from the stack $DC5A:A8 TAY $DC5B:60 RTS ; display Yes/No option ; control flow target $DC5C:20 0B DD JSR $DD0B $DC5F:A9 E4 LDA #$E4 ; set curStringAddr to #$DCE4 (" Yes No") $DC61:85 D8 STA $D8 $DC63:A9 DC LDA #$DC $DC65:85 D9 STA $D9 $DC67:A9 40 LDA #$40 $DC69:85 D7 STA $D7 ; set curTableNum to #$40 (6-bit table) $DC6B:20 1E DC JSR $DC1E $DC6E:A9 00 LDA #$00 $DC70:F0 13 BEQ $DC85 ; control flow target $DC72:20 E3 D3 JSR $D3E3 $DC75:A5 F8 LDA $F8 $DC77:29 C0 AND #$C0 $DC79:D0 11 BNE $DC8C $DC7B:A5 F8 LDA $F8 $DC7D:29 03 AND #$03 $DC7F:F0 F1 BEQ $DC72 $DC81:A5 12 LDA $12 ; read current selection $DC83:49 01 EOR #$01 ; flip yes/no ; control flow target $DC85:85 12 STA $12 ; store new selection $DC87:20 B4 DC JSR $DCB4 $DC8A:30 E6 BMI $DC72 ; control flow target $DC8C:A5 12 LDA $12 $DC8E:48 PHA $DC8F:0A ASL $DC90:0A ASL $DC91:09 01 ORA #$01 $DC93:85 03 STA $03 $DC95:20 B9 DD JSR $DDB9 ; sets A = currentLineNumber * 48 (i.e. 2 lines of 24 characters, one line with text, the other with spaces) $DC98:05 03 ORA $03 $DC9A:AA TAX $DC9B:A9 9E LDA #$9E ; selection arrow $DC9D:9D 58 04 STA $0458,X $DCA0:20 0F DD JSR $DD0F $DCA3:68 PLA $DCA4:AA TAX $DCA5:60 RTS ; load down arrow or space depending on clock ; control flow target $DCA6:A0 9F LDY #$9F ; down arrow for next page? $DCA8:A5 47 LDA $47 ; looks like a clock of some kind $DCAA:29 20 AND #$20 $DCAC:F0 02 BEQ $DCB0 ; if $47 & #$20 == #$00, show down arrow, otherwise don't ; control flow target $DCAE:A0 7F LDY #$7F ; space ; control flow target $DCB0:8A TXA $DCB1:4C C8 DC JMP $DCC8 ; control flow target $DCB4:AA TAX $DCB5:20 DC DC JSR $DCDC ; set $11 = currentLineNumber * 2 + 10 $DCB8:8A TXA ; at this point A is either #$00 or #$01 $DCB9:0A ASL $DCBA:0A ASL ; at this point A is either #$00 or #$04 $DCBB:48 PHA $DCBC:49 05 EOR #$05 ; partially controls X position of space covering old selection arrow; #$00 -> #$05, #$04 -> #$01 $DCBE:A0 7F LDY #$7F $DCC0:20 C8 DC JSR $DCC8 $DCC3:68 PLA $DCC4:09 01 ORA #$01 ; partially controls X position of selection arrow; #$00 -> #$01, #$04 -> #$05 $DCC6:A0 9E LDY #$9E ; selection arrow ; control flow target $DCC8:84 05 STY $05 $DCCA:18 CLC $DCCB:65 1A ADC $1A $DCCD:85 10 STA $10 $DCCF:20 77 D1 JSR $D177 $DCD2:A9 01 LDA #$01 $DCD4:A4 05 LDY $05 $DCD6:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $DCD9:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; set $11 = currentLineNumber * 2 + 10 ; control flow target $DCDC:20 AE DE JSR $DEAE ; A = currentLineNumber * 2 + 9 $DCDF:69 01 ADC #$01 ; A = currentLineNumber * 2 + 10 $DCE1:85 11 STA $11 ; $11 = currentLineNumber * 2 + 10 $DCE3:60 RTS ; text $DCE4:08 ; text length $DCE5:7F7FC905137FBE0F ; " Yes No" ; control flow target $DCED:28 PLP ; control flow target $DCEE:08 PHP $DCEF:90 08 BCC $DCF9 $DCF1:20 DC DC JSR $DCDC ; set $11 = currentLineNumber * 2 + 10 $DCF4:A2 0C LDX #$0C $DCF6:20 A6 DC JSR $DCA6 ; load down arrow or space depending on clock ; control flow target $DCF9:20 44 DA JSR $DA44 $DCFC:A5 F8 LDA $F8 $DCFE:29 C0 AND #$C0 $DD00:F0 EB BEQ $DCED $DD02:28 PLP $DD03:90 05 BCC $DD0A $DD05:A2 0C LDX #$0C $DD07:20 AE DC JSR $DCAE ; control flow target $DD0A:60 RTS ; control flow target $DD0B:A5 1C LDA $1C ; charactersOnCurrentLine $DD0D:F0 FB BEQ $DD0A ; if charactersOnCurrentLine == #$00, RTS (i.e. ignore newlines at the start of a line) ; control flow target $DD0F:A4 1B LDY $1B ; currentLineNumber $DD11:C0 03 CPY #$03 $DD13:90 3D BCC $DD52 ; if currentLineNumber < #$03, currentLineNumber++ and RTS; otherwise, we've reached the on-screen text capacity, so scroll the current text up by 2 lines and blank out the bottom 2 lines $DD15:A2 00 LDX #$00 ; control flow target $DD17:BD 70 04 LDA $0470,X ; copy #$90 bytes (6 lines of #$18 tiles) from $0470 to $0440 (scrolling the displayed text upwards 2 lines) $DD1A:9D 40 04 STA $0440,X $DD1D:E8 INX $DD1E:E0 90 CPX #$90 $DD20:90 F5 BCC $DD17 $DD22:A9 7F LDA #$7F ; control flow target $DD24:9D 40 04 STA $0440,X ; copy #$7F into $04D0-$0500 (initializing the next 2 lines of #$18 tiles to spaces) $DD27:E8 INX $DD28:E0 C0 CPX #$C0 $DD2A:90 F8 BCC $DD24 $DD2C:A2 00 LDX #$00 ; control flow target $DD2E:86 0F STX $0F ; currentTextBufferPosition $DD30:8A TXA $DD31:18 CLC $DD32:69 09 ADC #$09 $DD34:85 11 STA $11 ; store currentTextBufferPosition + 9 to $11 $DD36:A5 1A LDA $1A ; copy $1A to $10 $DD38:85 10 STA $10 $DD3A:20 55 DD JSR $DD55 $DD3D:86 23 STX $23 $DD3F:A5 0F LDA $0F ; currentTextBufferPosition $DD41:4A LSR $DD42:90 06 BCC $DD4A ; branch if currentTextBufferPosition is even $DD44:20 2E D7 JSR $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 $DD47:20 40 DA JSR $DA40 ; control flow target $DD4A:A6 0F LDX $0F ; currentTextBufferPosition $DD4C:E8 INX $DD4D:E0 08 CPX #$08 $DD4F:90 DD BCC $DD2E $DD51:60 RTS ; control flow target $DD52:E6 1B INC $1B ; currentLineNumber $DD54:60 RTS ; control flow target $DD55:20 77 D1 JSR $D177 $DD58:BD 2E 07 LDA $072E,X $DD5B:85 03 STA $03 $DD5D:BD 2F 07 LDA $072F,X $DD60:85 04 STA $04 $DD62:A5 0F LDA $0F ; $09 = currentTextBufferPosition * 24 $DD64:0A ASL $DD65:0A ASL $DD66:0A ASL $DD67:85 09 STA $09 $DD69:0A ASL $DD6A:18 CLC $DD6B:65 09 ADC $09 $DD6D:85 09 STA $09 $DD6F:A5 10 LDA $10 ; $02 = $09 & #$1F $DD71:29 1F AND #$1F $DD73:85 02 STA $02 $DD75:A9 20 LDA #$20 $DD77:38 SEC $DD78:E5 02 SBC $02 $DD7A:CD E4 03 CMP $03E4 ; maxCharactersPerLine $DD7D:08 PHP $DD7E:90 03 BCC $DD83 $DD80:AD E4 03 LDA $03E4 ; maxCharactersPerLine ; control flow target $DD83:20 A4 DD JSR $DDA4 ; save A to $0730,X and then copy A bytes from $0440,Y to $0730,X, starting from Y = $09; update $09 when we're done $DD86:28 PLP $DD87:B0 1A BCS $DDA3 $DD89:A5 04 LDA $04 $DD8B:29 E0 AND #$E0 $DD8D:A8 TAY $DD8E:A5 03 LDA $03 $DD90:49 04 EOR #$04 $DD92:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $DD95:A5 10 LDA $10 $DD97:29 1F AND #$1F $DD99:18 CLC $DD9A:6D E4 03 ADC $03E4 ; maxCharactersPerLine $DD9D:38 SEC $DD9E:E9 20 SBC #$20 $DDA0:20 A4 DD JSR $DDA4 ; save A to $0730,X and then copy A bytes from $0440,Y to $0730,X, starting from Y = $09; update $09 when we're done ; control flow target $DDA3:60 RTS ; save A to $0730,X and then copy A bytes from $0440,Y to $0730,X, starting from Y = $09; update $09 when we're done ; control flow target $DDA4:85 02 STA $02 $DDA6:20 26 D7 JSR $D726 ; STA $0730,X, INX $DDA9:A4 09 LDY $09 ; control flow target $DDAB:B9 40 04 LDA $0440,Y $DDAE:C8 INY $DDAF:20 26 D7 JSR $D726 ; STA $0730,X, INX $DDB2:C6 02 DEC $02 $DDB4:D0 F5 BNE $DDAB $DDB6:84 09 STY $09 $DDB8:60 RTS ; sets A = currentLineNumber * 48 ; in order to not overflow, $1B would have to be <= 15 (#$0F); in practice it will be < 3 ; control flow target $DDB9:A5 1B LDA $1B ; currentLineNumber $DDBB:0A ASL $DDBC:0A ASL $DDBD:0A ASL $DDBE:0A ASL $DDBF:85 02 STA $02 $DDC1:0A ASL $DDC2:18 CLC $DDC3:65 02 ADC $02 ; control flow target $DDC5:60 RTS ; control flow target $DDC6:20 FF DD JSR $DDFF ; pretty sure this is figuring out what the next character to print is $DDC9:C9 F8 CMP #$F8 ; if character to print > #$F8, RTS $DDCB:B0 F8 BCS $DDC5 $DDCD:A8 TAY ; save A in Y $DDCE:20 B9 DD JSR $DDB9 ; sets A = currentLineNumber * 48 $DDD1:65 1C ADC $1C ; charactersOnCurrentLine $DDD3:85 0F STA $0F ; currentTextBufferPosition $DDD5:AA TAX ; X = currentLineNumber * 48 + charactersOnCurrentLine $DDD6:98 TYA ; restore A from Y $DDD7:9D 58 04 STA $0458,X ; print A to screen buffer ($0458 = $0440 + 1 line of #$18 spaces) $DDDA:20 AE DE JSR $DEAE ; A = currentLineNumber * 2 + 9 $DDDD:85 11 STA $11 $DDDF:A5 1A LDA $1A $DDE1:18 CLC $DDE2:65 1C ADC $1C ; charactersOnCurrentLine $DDE4:85 10 STA $10 $DDE6:20 77 D1 JSR $D177 $DDE9:A9 82 LDA #$82 $DDEB:20 26 D7 JSR $D726 ; STA $0730,X, INX $DDEE:A4 0F LDY $0F ; currentTextBufferPosition $DDF0:B9 40 04 LDA $0440,Y $DDF3:20 26 D7 JSR $D726 ; STA $0730,X, INX $DDF6:B9 58 04 LDA $0458,Y $DDF9:20 2B D7 JSR $D72B ; STA $0730,X, INX, $23 = X, $0730,X = #$80, $22 = $22 | #$80 $DDFC:A9 00 LDA #$00 $DDFE:60 RTS ; control flow target $DDFF:C6 19 DEC $19 ; numTokensToRead $DE01:A9 02 LDA #$02 $DE03:24 D7 BIT $D7 ; curTableNum $DE05:70 79 BVS $DE80 ; branch if second-highest bit is set, then: if current table is the password table, process next character in password string; else load A with the next byte from curStringAddr, increment curStringAddr $DE07:D0 54 BNE $DE5D ; if any other bit is set: load A with the next character of hero/heroine name $DE09:A2 05 LDX #$05 ; at this point, curTableNum is #$00 (uppercase); set X to #$05 $DE0B:20 AA D2 JSR $D2AA ; read the next X bits from curStringByte into A $DE0E:C9 00 CMP #$00 $DE10:D0 09 BNE $DE1B $DE12:A9 80 LDA #$80 ; if A is #$00, toggle highest bit of curTableNum (switch to numbers/symbols table) ; we can get here from 3 places, with A values of #$01 ($DE23), #$02 ($DE4B), and #$80 ($DE12) ; control flow target $DE14:45 D7 EOR $D7 ; curTableNum $DE16:85 D7 STA $D7 ; curTableNum $DE18:4C FF DD JMP $DDFF ; BRA $DDFF ; control flow target $DE1B:C9 1E CMP #$1E ; if A >= #$1E, we're done with this line? $DE1D:B0 3B BCS $DE5A ; so go ORA #$F0 and exit $DE1F:C9 1B CMP #$1B ; otherwise, A < #$1E; if A == #$1B, we'll toggle between upper- and lower-case $DE21:D0 04 BNE $DE27 ; if A != #$1B, skip down to $DE27 $DE23:A9 01 LDA #$01 ; if A == #$1B, set A up to toggle the lowest bit of curTableNum $DE25:D0 ED BNE $DE14 ; then go do it (BRA) ; control flow target $DE27:C9 1C CMP #$1C ; if A == #$1C $DE29:F0 11 BEQ $DE3C ; buffer hero/heroine name? $DE2B:C9 1D CMP #$1D ; if A != #$1D $DE2D:D0 03 BNE $DE32 ; go print whatever A holds $DE2F:A9 7F LDA #$7F ; else load a space $DE31:60 RTS ; control flow target $DE32:A4 D7 LDY $D7 ; curTableNum $DE34:30 19 BMI $DE4F ; high bit of curTableNum set (numbers/symbols table?) goes to $DE4F $DE36:D0 03 BNE $DE3B ; otherwise, if any bit is nonzero, RTS $DE38:18 CLC ; if we're here, Y == curTableNum == #$00 (uppercase) $DE39:69 B0 ADC #$B0 ; A += #$B0 ; control flow target $DE3B:60 RTS ; control flow target $DE3C:A2 05 LDX #$05 ; set X to #$05 $DE3E:20 AA D2 JSR $D2AA ; read the next X bits from curStringByte into A $DE41:C6 19 DEC $19 ; numTokensToRead $DE43:0A ASL ; $18 = A * 6; I thought A could only be #$00 or #$01, but maybe there are other options? $DE44:85 18 STA $18 $DE46:0A ASL $DE47:65 18 ADC $18 $DE49:85 18 STA $18 ; control flow target $DE4B:A9 02 LDA #$02 ; set A up to toggle the second-lowest bit of curTableNum $DE4D:D0 C5 BNE $DE14 ; then go do it (BRA) ; control flow target $DE4F:C9 0B CMP #$0B $DE51:90 04 BCC $DE57 ; if A < #$0B, go to $DE57 (no change to curTableNum); else: CLC and clear high bit of curTableNum $DE53:06 D7 ASL $D7 ; the effect of these 2 lines is to set both the high bit of curTableNum and carry to 0 $DE55:46 D7 LSR $D7 ; control flow target $DE57:69 9F ADC #$9F ; whether A < #$0B or not, carry is now 0, so this is A += #$9F (start of numbers/symbols table) $DE59:60 RTS ; control flow target $DE5A:09 F0 ORA #$F0 $DE5C:60 RTS ; load A with the next character of hero/heroine name ; at this point, curTableNum is 0bx0xxxxxx with at least 1 x set ; control flow target $DE5D:E6 19 INC $19 ; numTokensToRead $DE5F:A4 18 LDY $18 ; hero = #$00, heroine = #$06 $DE61:B6 E3 LDX $E3,Y ; hero/heroine names $DE63:E0 3F CPX #$3F ; if X is #$3F or #$FF, go toggle second-lowest bit of curTableNum and continue with $DDFF loop $DE65:F0 E4 BEQ $DE4B $DE67:E0 FF CPX #$FF $DE69:F0 E0 BEQ $DE4B $DE6B:C0 05 CPY #$05 ; if Y is #$05 or #$0B, toggle second-lowest bit of curTableNum $DE6D:F0 04 BEQ $DE73 $DE6F:C0 0B CPY #$0B $DE71:D0 06 BNE $DE79 ; otherwise, don't toggle it ; control flow target $DE73:A9 02 LDA #$02 $DE75:45 D7 EOR $D7 ; curTableNum $DE77:85 D7 STA $D7 ; curTableNum ; control flow target $DE79:C8 INY ; $18++ $DE7A:84 18 STY $18 $DE7C:BD F7 EA LDA $EAF7,X ; 8-bit character lut $DE7F:60 RTS ; if current table is the password table, process next character in password string; else load A with the next byte from curStringAddr, increment curStringAddr ; if curStringByte is #$06, load A with a space; if it's #$0E, load a newline; increment curStringByte in both cases; else load the next byte from curStringAddr, translate according to password lut, and increment curStringAddr ; at this point, we know curTableNum is 0bx1xxxxxx ; control flow target $DE80:10 21 BPL $DEA3 ; if curTableNum is 0b01xxxxxx, load A with the next byte from curStringAddr, increment curStringAddr $DE82:A6 17 LDX $17 ; else, curTableNum is 0b11xxxxxx (password table), so load curStringByte $DE84:E8 INX $DE85:E0 07 CPX #$07 $DE87:F0 13 BEQ $DE9C ; this jumps into the middle of BIT $7FA9 :p $DE89:E0 0F CPX #$0F $DE8B:F0 0A BEQ $DE97 $DE8D:86 17 STX $17 ; update curStringByte $DE8F:20 A3 DE JSR $DEA3 ; load A with the next byte from curStringAddr, increment curStringAddr $DE92:A8 TAY $DE93:B9 F7 EA LDA $EAF7,Y ; 8-bit character lut $DE96:60 RTS ; control flow target $DE97:A2 00 LDX #$00 ; at this point, curStringByte is #$0F, so reset to #$00 $DE99:A9 FE LDA #$FE ; newline? ; well, this is interesting ; when coming from $DE99: $DE9B:2C A9 7F BIT $7FA9 ; but when coming from $DE87: $DE9C:A9 7F LDA #$7F ; at this point, curStringByte is #$07; load a space? ; both paths meet up here: $DE9E:86 17 STX $17 ; update curStringByte $DEA0:E6 19 INC $19 ; numTokensToRead $DEA2:60 RTS ; load A with the next byte from curStringAddr, increment curStringAddr ; control flow target $DEA3:A0 00 LDY #$00 $DEA5:B1 D8 LDA ($D8),Y $DEA7:E6 D8 INC $D8 $DEA9:D0 02 BNE $DEAD $DEAB:E6 D9 INC $D9 ; control flow target $DEAD:60 RTS ; A = currentLineNumber * 2 + 9 ; control flow target $DEAE:A5 1B LDA $1B ; currentLineNumber $DEB0:0A ASL $DEB1:18 CLC $DEB2:69 09 ADC #$09 $DEB4:60 RTS ; control flow target $DEB5:0A ASL $DEB6:85 15 STA $15 $DEB8:20 5B DF JSR $DF5B $DEBB:20 4E DF JSR $DF4E $DEBE:85 1A STA $1A $DEC0:E6 1A INC $1A $DEC2:A9 08 LDA #$08 $DEC4:85 11 STA $11 $DEC6:A0 00 LDY #$00 $DEC8:F0 14 BEQ $DEDE ; control flow target $DECA:D0 02 BNE $DECE $DECC:A0 06 LDY #$06 ; control flow target $DECE:84 13 STY $13 $DED0:20 E7 DE JSR $DEE7 $DED3:E6 10 INC $10 $DED5:A0 03 LDY #$03 $DED7:C6 05 DEC $05 $DED9:D0 07 BNE $DEE2 $DEDB:20 E3 D3 JSR $D3E3 ; control flow target $DEDE:A9 02 LDA #$02 $DEE0:85 05 STA $05 ; control flow target $DEE2:C6 12 DEC $12 $DEE4:10 E4 BPL $DECA $DEE6:60 RTS ; control flow target $DEE7:20 23 DF JSR $DF23 $DEEA:A5 1F LDA $1F $DEEC:09 80 ORA #$80 $DEEE:20 26 D7 JSR $D726 ; STA $0730,X, INX $DEF1:A5 1F LDA $1F $DEF3:85 02 STA $02 $DEF5:4A LSR $DEF6:85 03 STA $03 $DEF8:A4 13 LDY $13 $DEFA:4C 06 DF JMP $DF06 ; control flow target $DEFD:D0 01 BNE $DF00 $DEFF:C8 INY ; control flow target $DF00:20 1D DF JSR $DF1D $DF03:A4 13 LDY $13 $DF05:C8 INY ; control flow target $DF06:C6 02 DEC $02 $DF08:10 F3 BPL $DEFD $DF0A:86 23 STX $23 $DF0C:A9 FF LDA #$FF $DF0E:9D 30 07 STA $0730,X ; control flow target $DF11:A9 03 LDA #$03 $DF13:20 3D D1 JSR $D13D $DF16:C6 03 DEC $03 $DF18:D0 F7 BNE $DF11 $DF1A:4C DC D3 JMP $D3DC ; $22 = #$C0 | $22 ; control flow target $DF1D:B9 72 DF LDA $DF72,Y $DF20:4C 26 D7 JMP $D726 ; STA $0730,X, INX ; control flow target $DF23:20 77 D1 JSR $D177 $DF26:A5 11 LDA $11 $DF28:0A ASL $DF29:29 38 AND #$38 $DF2B:05 24 ORA $24 $DF2D:85 07 STA $07 $DF2F:60 RTS ; control flow target $DF30:20 5B DF JSR $DF5B $DF33:20 4E DF JSR $DF4E $DF36:4C 45 DF JMP $DF45 ; control flow target $DF39:20 C8 D0 JSR $D0C8 $DF3C:E6 10 INC $10 $DF3E:C6 11 DEC $11 $DF40:D0 07 BNE $DF49 $DF42:20 E3 D3 JSR $D3E3 ; control flow target $DF45:A9 02 LDA #$02 $DF47:85 11 STA $11 ; control flow target $DF49:C6 12 DEC $12 $DF4B:10 EC BPL $DF39 $DF4D:60 RTS ; control flow target $DF4E:A5 28 LDA $28 $DF50:18 CLC $DF51:69 1C ADC #$1C $DF53:38 SEC $DF54:E5 12 SBC $12 $DF56:29 FE AND #$FE $DF58:85 10 STA $10 $DF5A:60 RTS ; control flow target $DF5B:A6 15 LDX $15 $DF5D:BD 6F DF LDA $DF6F,X $DF60:85 1F STA $1F $DF62:BD 6E DF LDA $DF6E,X $DF65:85 12 STA $12 $DF67:38 SEC $DF68:E9 02 SBC #$02 $DF6A:8D E4 03 STA $03E4 ; sets maxCharactersPerLine $DF6D:60 RTS ; data for $DF5B; first byte gets copied to $12, first byte - 2 gets copied to maxCharactersPerLine, second byte to $1F $DF6E:1A0A $DF70:120A ; data for $DF1D $DF72:ECFC $DF74:EEDE $DF76:7FDF $DF78:EDFD $DF7A:EF ; offsets for indexing into table of bytes with exactly 1 bit set $DF7B:04 ; used for $DF (location?) $DF7C:04 ; used for $E0 (ones digit of current olive count) $DF7D:04 ; used for $E1 (tens digit of current olive count) $DF7E:05 ; used for $E2 (# of salamander skins) $DF7F:060606060606 ; used for $E3-$E8 (hero's name) $DF85:060606060606 ; used for $E9-$EE (heroine's name) $DF8B:07 ; used for $EF (max HP) $DF89:0808080808 ; used for $F0-$F4 (quest status flags) ; generate a password based on the contents of $DF-$F4 (a total of 136 bits a.k.a. 17 bytes; password text table is 6-bit instead of the usual 5-bit + switching) ; stores string length in $0149, random seed in $014A, checksum in $014B, and ; control flow target $DF91:20 DD D7 JSR $D7DD ; ask the RNG for a number $DF94:29 3F AND #$3F ; chop it down to 6 bits $DF96:8D 4A 01 STA $014A ; store it at $014A $DF99:A9 06 LDA #$06 ; initialize remaining bits per character to #$06 (#$05 + 1) $DF9B:85 02 STA $02 ; store it at $02 $DF9D:A0 00 LDY #$00 ; initialize saveable data loop counter to #$00 $DF9F:A2 03 LDX #$03 ; initialize character index to #$03 (start writing password at $014C, reserving $0149-$014B for other stuff) ; control flow target $DFA1:84 04 STY $04 ; stash saveable data loop counter in $04 $DFA3:B9 DF 00 LDA $DF,Y ; read saveable data $DFA6:85 05 STA $05 ; store it in $05 $DFA8:B9 7B DF LDA $DF7B,Y ; get the relevant bit table offset $DFAB:A8 TAY ; transfer the offset to Y so we can use it as an index $DFAC:B9 36 E3 LDA $E336,Y ; get a byte with exactly 1 bit set ; control flow target $DFAF:C6 02 DEC $02 ; decrement remaining bits per character $DFB1:10 05 BPL $DFB8 ; if we crossed 0 bits remaining, re-initialize remaining bits per character and move to the next character $DFB3:A0 05 LDY #$05 ; re-initialize remaining bits per character to #$05 $DFB5:84 02 STY $02 ; store it at $02 $DFB7:E8 INX ; move to the next character of the password ; control flow target ; set C = the interesting bit of the saveable data $DFB8:18 CLC ; default to C not set $DFB9:24 05 BIT $05 ; test our 1-bit byte against the saveable data in $05 $DFBB:F0 01 BEQ $DFBE ; if bit is not set, we branch and the earlier CLC applies; if bit is set, we don't branch and instead SEC $DFBD:38 SEC ; set C if bit was set ; control flow target $DFBE:3E 49 01 ROL $0149,X ; transfer C into $0149,X $DFC1:4A LSR ; shift our 1-bit byte to the right $DFC2:90 EB BCC $DFAF ; loop over our 1-bit byte until we shifted in a 1 $DFC4:A4 04 LDY $04 ; restore saveable data loop counter $DFC6:C8 INY ; increment saveable data loop counter $DFC7:C0 16 CPY #$16 ; compare saveable data loop counter to #$16 $DFC9:90 D6 BCC $DFA1 ; if saveable data loop counter < #$16, loop $DFCB:A4 02 LDY $02 ; load the remaining bits per character $DFCD:F0 06 BEQ $DFD5 ; if there are 0 bits remaining, skip down to $DFD5 ; control flow target $DFCF:1E 49 01 ASL $0149,X ; shift in a 0 $DFD2:88 DEY ; decrement number of remaining bits $DFD3:D0 FA BNE $DFCF ; loop until number of remaining bits reaches 0 ; control flow target $DFD5:E8 INX ; move to the next character $DFD6:86 05 STX $05 ; store character index at $05 $DFD8:8E 49 01 STX $0149 ; store character index at $0149 (number of characters in Pascal string) $DFDB:A2 03 LDX #$03 $DFDD:20 0F E0 JSR $E00F ; sum $0149,X from X to $05, EOR it, increment it, then AND #$3F, returning the result in A; X is left at $05 + 1 $DFE0:8D 4B 01 STA $014B ; store the resulting checksum in $014B $DFE3:A2 01 LDX #$01 ; control flow target $DFE5:E8 INX $DFE6:8A TXA $DFE7:29 03 AND #$03 $DFE9:A8 TAY $DFEA:BD 49 01 LDA $0149,X ; EOR with the previous character $DFED:5D 48 01 EOR $0148,X $DFF0:18 CLC $DFF1:79 97 E0 ADC $E097,Y ; add a magic number $DFF4:29 3F AND #$3F ; chop it down to 6 bits $DFF6:9D 49 01 STA $0149,X ; store it to $0149,X $DFF9:E4 05 CPX $05 $DFFB:90 E8 BCC $DFE5 ; loop until we reach the character index $DFFD:A2 01 LDX #$01 ; $DFFF is also listed as data $DFFF:20 0F E0 JSR $E00F ; sum $0149,X from X to $05, EOR it, increment it, then AND #$3F, returning the result in A; X is left at $05 + 1 $E002:9D 49 01 STA $0149,X ; store the resulting checksum in $014A,X - 1 ; control flow target $E005:BD 4A 01 LDA $014A,X ; copy password from $014A,X to $0169,X $E008:9D 69 01 STA $0169,X $E00B:CA DEX $E00C:10 F7 BPL $E005 $E00E:60 RTS ; sum $0149,X from X to $05, EOR it, increment it, then AND #$3F, returning the result in A; X is left at $05 + 1 ; control flow target $E00F:A9 00 LDA #$00 ; initialize A to #$00 ; control flow target $E011:18 CLC $E012:7D 49 01 ADC $0149,X $E015:E8 INX $E016:E4 05 CPX $05 $E018:90 F7 BCC $E011 ; this loop sums $0149,X from the original value of X up to the value of $05 $E01A:49 FF EOR #$FF ; bit-flip A $E01C:18 CLC $E01D:69 01 ADC #$01 ; A++ $E01F:29 3F AND #$3F ; chop A down to 6 bits $E021:60 RTS ; probably password checking ; control flow target $E022:A2 1A LDX #$1A $E024:86 05 STX $05 ; control flow target $E026:BD 69 01 LDA $0169,X $E029:9D 4A 01 STA $014A,X $E02C:CA DEX $E02D:10 F7 BPL $E026 $E02F:A2 01 LDX #$01 $E031:20 0F E0 JSR $E00F ; sum $0149,X from X to $05, EOR it, increment it, then AND #$3F, returning the result in A; X is left at $05 + 1 $E034:DD 49 01 CMP $0149,X $E037:D0 5C BNE $E095 $E039:A2 01 LDX #$01 $E03B:BD 49 01 LDA $0149,X ; control flow target $E03E:85 04 STA $04 $E040:E8 INX $E041:8A TXA $E042:29 03 AND #$03 $E044:A8 TAY $E045:BD 49 01 LDA $0149,X $E048:48 PHA $E049:38 SEC $E04A:F9 97 E0 SBC $E097,Y $E04D:45 04 EOR $04 $E04F:29 3F AND #$3F $E051:9D 49 01 STA $0149,X $E054:68 PLA $E055:E4 05 CPX $05 $E057:90 E5 BCC $E03E $E059:A2 02 LDX #$02 $E05B:20 0F E0 JSR $E00F ; sum $0149,X from X to $05, EOR it, increment it, then AND #$3F, returning the result in A; X is left at $05 + 1 $E05E:D0 35 BNE $E095 $E060:A0 00 LDY #$00 $E062:A2 02 LDX #$02 $E064:A9 20 LDA #$20 $E066:85 02 STA $02 ; control flow target $E068:B9 7B DF LDA $DF7B,Y $E06B:85 05 STA $05 $E06D:A9 00 LDA #$00 $E06F:85 03 STA $03 ; control flow target $E071:18 CLC $E072:A5 02 LDA $02 $E074:3D 4A 01 AND $014A,X $E077:F0 01 BEQ $E07A $E079:38 SEC ; control flow target $E07A:26 03 ROL $03 $E07C:46 02 LSR $02 $E07E:90 05 BCC $E085 $E080:E8 INX $E081:A9 20 LDA #$20 $E083:85 02 STA $02 ; control flow target $E085:C6 05 DEC $05 $E087:D0 E8 BNE $E071 $E089:A5 03 LDA $03 $E08B:99 DF 00 STA $DF,Y ; location? $E08E:C8 INY $E08F:C0 16 CPY #$16 $E091:90 D5 BCC $E068 $E093:18 CLC $E094:60 RTS ; control flow target $E095:38 SEC $E096:60 RTS ; data; used during password generation/validation $E097:12 $E098:26 $E099:38 $E09A:0A ; control flow target $E09B:20 5A F6 JSR $F65A ; STZ to $8E, $94, $99-$9A, pAPU stuff $E09E:20 00 D3 JSR $D300 ; initialize a bunch of stuff $E0A1:20 75 D8 JSR $D875 $E0A4:A9 03 LDA #$03 $E0A6:20 00 E6 JSR $E600 $E0A9:A2 BF LDX #$BF $E0AB:A9 E3 LDA #$E3 $E0AD:20 A1 CF JSR $CFA1 $E0B0:A9 DF LDA #$DF $E0B2:A0 E3 LDY #$E3 $E0B4:20 D9 D2 JSR $D2D9 $E0B7:A2 3F LDX #$3F $E0B9:A9 E3 LDA #$E3 $E0BB:20 34 D1 JSR $D134 ; STX $34, STA $35 $E0BE:A9 E8 LDA #$E8 $E0C0:85 06 STA $06 $E0C2:A9 E3 LDA #$E3 $E0C4:85 07 STA $07 $E0C6:A9 10 LDA #$10 $E0C8:85 0D STA $0D $E0CA:20 E2 D1 JSR $D1E2 $E0CD:20 AC E2 JSR $E2AC $E0D0:20 5D D8 JSR $D85D ; copy $D869-$D874 to $0200-$020B $E0D3:20 92 E1 JSR $E192 $E0D6:20 5B CF JSR $CF5B $E0D9:20 F3 E0 JSR $E0F3 $E0DC:20 0F D3 JSR $D30F $E0DF:20 4D C3 JSR $C34D $E0E2:20 36 F6 JSR $F636 $E0E5:A9 00 LDA #$00 $E0E7:20 22 E1 JSR $E122 $E0EA:20 00 D3 JSR $D300 ; initialize a bunch of stuff $E0ED:20 C4 C3 JSR $C3C4 $E0F0:4C BC D5 JMP $D5BC ; control flow target $E0F3:A9 0B LDA #$0B $E0F5:20 0D E3 JSR $E30D $E0F8:D0 26 BNE $E120 $E0FA:A6 23 LDX $23 $E0FC:A9 22 LDA #$22 $E0FE:A0 B0 LDY #$B0 $E100:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $E103:A9 02 LDA #$02 $E105:20 26 D7 JSR $D726 ; STA $0730,X, INX $E108:86 23 STX $23 $E10A:A5 E2 LDA $E2 ; salamanderSkins $E10C:A2 0A LDX #$0A $E10E:20 85 D7 JSR $D785 ; divides A by X, returning quotient in $02 and remainder in A $E111:09 A0 ORA #$A0 $E113:A8 TAY $E114:A5 02 LDA $02 $E116:09 A0 ORA #$A0 $E118:A6 23 LDX $23 $E11A:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $E11D:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; control flow target $E120:60 RTS ; control flow target $E121:8A TXA ; control flow target $E122:85 10 STA $10 $E124:20 81 E2 JSR $E281 ; control flow target $E127:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $E12A:A2 00 LDX #$00 $E12C:A5 F8 LDA $F8 ; control flow target $E12E:0A ASL $E12F:B0 07 BCS $E138 $E131:E8 INX $E132:E0 08 CPX #$08 $E134:90 F8 BCC $E12E $E136:B0 EF BCS $E127 ; control flow target $E138:8A TXA $E139:20 A2 D7 JSR $D7A2 ; data, looks like a jump table $E13C:7F E1 ; $E17F $E13E:7F E1 ; $E17F $E140:27 E1 ; $E127 $E142:A1 E2 ; $E2A1 $E144:4C E1 ; $E14C $E146:4C E1 ; $E14C $E148:5F E1 ; $E15F $E14A:6C E1 ; $E16C ; control flow target $E14C:A5 10 LDA $10 $E14E:C9 08 CMP #$08 $E150:90 04 BCC $E156 ; control flow target $E152:A9 03 LDA #$03 $E154:D0 CC BNE $E122 ; control flow target $E156:38 SEC $E157:E9 04 SBC #$04 $E159:B0 C7 BCS $E122 $E15B:69 08 ADC #$08 $E15D:D0 C3 BNE $E122 ; control flow target $E15F:A6 10 LDX $10 $E161:CA DEX $E162:30 EE BMI $E152 $E164:E0 03 CPX #$03 $E166:D0 B9 BNE $E121 $E168:A9 08 LDA #$08 $E16A:D0 B6 BNE $E122 ; control flow target $E16C:A6 10 LDX $10 $E16E:E8 INX $E16F:E0 09 CPX #$09 $E171:D0 04 BNE $E177 $E173:A9 04 LDA #$04 $E175:D0 AB BNE $E122 ; control flow target $E177:E0 04 CPX #$04 $E179:D0 A6 BNE $E121 $E17B:A9 00 LDA #$00 $E17D:F0 A3 BEQ $E122 ; control flow target $E17F:A5 10 LDA $10 $E181:20 0D E3 JSR $E30D $E184:F0 09 BEQ $E18F $E186:A6 10 LDX $10 $E188:20 A6 E1 JSR $E1A6 $E18B:A9 0F LDA #$0F $E18D:85 99 STA $99 ; control flow target $E18F:4C 27 E1 JMP $E127 ; control flow target $E192:A6 6E LDX $6E $E194:20 9C E1 JSR $E19C $E197:A6 6F LDX $6F $E199:D0 01 BNE $E19C $E19B:60 RTS ; control flow target $E19C:A9 00 LDA #$00 $E19E:85 23 STA $23 $E1A0:20 A6 E1 JSR $E1A6 $E1A3:4C BA D4 JMP $D4BA ; control flow target $E1A6:BD 6F E2 LDA $E26F,X $E1A9:85 08 STA $08 $E1AB:85 09 STA $09 $E1AD:A9 80 LDA #$80 $E1AF:A0 00 LDY #$00 $E1B1:E0 04 CPX #$04 $E1B3:90 02 BCC $E1B7 $E1B5:C8 INY $E1B6:6A ROR ; control flow target $E1B7:96 6E STX $6E,Y $E1B9:E0 06 CPX #$06 $E1BB:D0 12 BNE $E1CF $E1BD:20 0B E3 JSR $E30B ; unknown - probably code $E1C0:78 SEI $E1C1:08 PHP $E1C2:68 PLA $E1C3:29 06 AND #$06 $E1C5:0A ASL $E1C6:A8 TAY $E1C7:A9 ED LDA #$ED $E1C9:85 02 STA $02 $E1CB:A2 20 LDX #$20 $E1CD:D0 20 BNE $E1EF ; definitely code ; control flow target $E1CF:86 12 STX $12 $E1D1:84 13 STY $13 $E1D3:85 05 STA $05 $E1D5:A2 03 LDX #$03 $E1D7:86 11 STX $11 ; control flow target $E1D9:20 02 E2 JSR $E202 $E1DC:C6 11 DEC $11 $E1DE:10 F9 BPL $E1D9 $E1E0:A4 13 LDY $13 $E1E2:B9 6B E2 LDA $E26B,Y $E1E5:85 02 STA $02 $E1E7:BE 6D E2 LDX $E26D,Y $E1EA:98 TYA $E1EB:F0 02 BEQ $E1EF $E1ED:A0 04 LDY #$04 ; control flow target $E1EF:A9 5B LDA #$5B $E1F1:85 0B STA $0B $E1F3:A9 E2 LDA #$E2 $E1F5:85 0C STA $0C $E1F7:A9 13 LDA #$13 $E1F9:85 04 STA $04 $E1FB:A9 08 LDA #$08 $E1FD:85 0A STA $0A $E1FF:4C D6 CD JMP $CDD6 ; control flow target $E202:A9 05 LDA #$05 $E204:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $E207:A9 05 LDA #$05 $E209:20 41 D7 JSR $D741 ; given A, sets Y = A << 1, X = $8000,Y, and A = $8001,Y $E20C:85 07 STA $07 $E20E:8A TXA $E20F:69 04 ADC #$04 $E211:85 06 STA $06 $E213:90 02 BCC $E217 $E215:E6 07 INC $07 ; control flow target $E217:A5 11 LDA $11 $E219:0A ASL $E21A:0A ASL $E21B:0A ASL $E21C:0A ASL $E21D:05 05 ORA $05 $E21F:A8 TAY $E220:A9 06 LDA #$06 $E222:A6 23 LDX $23 $E224:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $E227:A9 10 LDA #$10 $E229:20 26 D7 JSR $D726 ; STA $0730,X, INX $E22C:86 23 STX $23 $E22E:A5 12 LDA $12 $E230:0A ASL $E231:0A ASL $E232:05 11 ORA $11 $E234:AA TAX $E235:BD 3F E3 LDA $E33F,X $E238:A2 10 LDX #$10 $E23A:20 6A D7 JSR $D76A ; multiplies A by X, returning low byte in $03 and high byte in A $E23D:48 PHA $E23E:A5 03 LDA $03 $E240:18 CLC $E241:65 06 ADC $06 $E243:85 02 STA $02 $E245:68 PLA $E246:65 07 ADC $07 $E248:85 03 STA $03 $E24A:A0 00 LDY #$00 $E24C:A6 23 LDX $23 ; control flow target $E24E:B1 02 LDA ($02),Y $E250:20 26 D7 JSR $D726 ; STA $0730,X, INX $E253:C8 INY $E254:C0 10 CPY #$10 $E256:90 F6 BCC $E24E $E258:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; data; it's used but I'm not sure what for $E25B:68 $E25C:696A $E25E:6B $E25F:6C6D6E $E262:6F5E5F62 $E266:635E $E268:5F6061D5 $E26C:ED1020 $E26F:0303 $E271:0302 $E273:0203 $E275:0202 $E277:0303 $E279:0203 $E27B:0302 $E27D:0303 $E27F:0303 ; control flow target $E281:A0 00 LDY #$00 $E283:C9 04 CMP #$04 $E285:90 03 BCC $E28A $E287:E9 04 SBC #$04 $E289:C8 INY ; control flow target $E28A:AA TAX ; given X and Y, set $0200 to $E2A8,Y, $0201 to #$27, $0202 to #$03, and $0203 to $E2A2,X ; control flow target $E28B:B9 A8 E2 LDA $E2A8,Y $E28E:BC A2 E2 LDY $E2A2,X ; control flow target $E291:8D 00 02 STA $0200 $E294:8C 03 02 STY $0203 $E297:A9 27 LDA #$27 $E299:8D 01 02 STA $0201 $E29C:A9 03 LDA #$03 $E29E:8D 02 02 STA $0202 ; control flow target $E2A1:60 RTS ; data; it's used but I'm not sure what for $E2A2:36 56 $E2A4:76 96 $E2A6:B6 A4 $E2A8:44 74 5F $E2AB:6F ; control flow target $E2AC:A2 00 LDX #$00 ; control flow target $E2AE:86 05 STX $05 $E2B0:8A TXA $E2B1:20 0D E3 JSR $E30D $E2B4:F0 0B BEQ $E2C1 $E2B6:A5 05 LDA $05 $E2B8:20 07 E3 JSR $E307 $E2BB:D0 31 BNE $E2EE $E2BD:A9 1D LDA #$1D $E2BF:D0 0A BNE $E2CB ; control flow target $E2C1:A9 1F LDA #$1F $E2C3:A6 05 LDX $05 $E2C5:E0 0B CPX #$0B $E2C7:D0 02 BNE $E2CB $E2C9:A9 1E LDA #$1E ; control flow target $E2CB:48 PHA $E2CC:A6 05 LDX $05 $E2CE:BD F6 E2 LDA $E2F6,X $E2D1:48 PHA $E2D2:29 0F AND #$0F $E2D4:A8 TAY $E2D5:68 PLA $E2D6:29 F0 AND #$F0 $E2D8:A2 03 LDX #$03 $E2DA:20 6A D7 JSR $D76A ; multiplies A by X, returning low byte in $03 and high byte in A $E2DD:18 CLC $E2DE:69 05 ADC #$05 $E2E0:85 04 STA $04 $E2E2:68 PLA $E2E3:91 03 STA ($03),Y $E2E5:A6 05 LDX $05 $E2E7:E0 0F CPX #$0F $E2E9:D0 05 BNE $E2F0 $E2EB:C8 INY $E2EC:91 03 STA ($03),Y ; control flow target $E2EE:A6 05 LDX $05 ; control flow target $E2F0:E8 INX $E2F1:E0 11 CPX #$11 $E2F3:90 B9 BCC $E2AE $E2F5:60 RTS ; data; it's used but I'm not sure what for $E2F6:1416 $E2F8:18 $E2F9:1A $E2FA:444648 $E2FD:4A $E2FE:4C7476 $E301:78 $E302:7A $E303:7C9697 $E306:99 ; control flow target $E307:C9 06 CMP #$06 $E309:D0 08 BNE $E313 ; control flow target $E30B:A9 1C LDA #$1C ; read quest status flag specified by A into A ; control flow target $E30D:20 2A E3 JSR $E32A ; given A, makes A have exectly 1 bit set and Y have an offset for $F0 $E310:39 F0 00 AND $F0,Y ; set A to the corresponding bit of $F0,Y ; control flow target $E313:60 RTS ; unsets quest status flag specified by A ; control flow target $E314:20 2A E3 JSR $E32A ; given A, makes A have exectly 1 bit set and Y have an offset for $F0 $E317:49 FF EOR #$FF ; toggle all bits of A $E319:39 F0 00 AND $F0,Y ; unset quest status flag $E31C:99 F0 00 STA $F0,Y $E31F:60 RTS ; sets quest status flag specified by A ; control flow target $E320:20 2A E3 JSR $E32A ; given A, makes A have exectly 1 bit set and Y have an offset for $F0 $E323:19 F0 00 ORA $F0,Y ; set quest status flag $E326:99 F0 00 STA $F0,Y $E329:60 RTS ; control flow target ; $E337 is a lut with values 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 ; so given A=0babcdefgh, this function sets X to 0b00000fgh, A to 0x01 << X, and Y to 0b000abcde ; control flow target $E32A:A8 TAY $E32B:29 07 AND #$07 $E32D:AA TAX $E32E:98 TYA $E32F:4A LSR $E330:4A LSR $E331:4A LSR $E332:A8 TAY $E333:BD 37 E3 LDA $E337,X $E336:60 RTS ; data; index table for selecting a byte with exactly one bit set $E337:01 $E338:02 $E339:04 $E33A:08 $E33B:10 $E33C:20 $E33D:40 $E33E:80 ; data; it's used but I'm not sure what for $E33F:00 $E340:01 02 $E342:03 04 $E344:05 06 $E346:07 08 $E348:09 0A $E34A:0B $E34B:0C 0D 0E $E34E:0F101112 $E352:13 14 $E354:15 16 $E356:17 18 $E358:19 1C 1D $E35B:20 21 22 $E35E:23 20 $E360:21 22 $E362:23 24 $E364:25 26 $E366:27 28 $E368:29 2A $E36A:2B $E36B:2C 2D 2E $E36E:2F303132 $E372:33 34 $E374:7F7F3536 $E378:37 38 $E37A:39 7F 36 $E37D:7F38377F $E381:39 7F 3C $E384:3D 3E 3F $E387:1E 1E EC $E38A:DE 1E 1E $E38D:DE DE 1E $E390:1E DE ED $E393:FC 7F FC $E396:7F7FFD7F $E39A:FD EE DF $E39D:1E 1E DF $E3A0:DF1E1EDF $E3A4:EF1E1E1E $E3A8:7F1E7F7F $E3AC:1E 7F 1E $E3AF:1E 1E 1E $E3B2:1E 18 19 $E3B5:1A $E3B6:1B $E3B7:3A $E3B8:3B $E3B9:A0 A0 $E3BB:7F7F7F7F $E3BF:01 01 $E3C1:01 00 $E3C3:00 01 $E3C5:00 00 $E3C7:01 01 $E3C9:00 01 $E3CB:01 00 $E3CD:01 01 $E3CF:01 01 $E3D1:03 03 $E3D3:03 03 $E3D5:03 03 $E3D7:03 03 $E3D9:03 03 $E3DB:03 00 $E3DD:01 03 $E3DF:08 $E3E0:2C 37 16 $E3E3:28 $E3E4:30 37 $E3E6:30 30 $E3E8:1E 80 1C $E3EB:1F060408 $E3EF:14 16 $E3F1:13 15 $E3F3:17 12 $E3F5:18 $E3F6:19 0E 02 $E3F9:1B $E3FA:00 1A $E3FC:09 01 $E3FE:05 07 $E400:10 0A $E402:03 0B $E404:0C 0D 0F $E407:4FAFC7A6 $E40B:36 98 $E40D:F7 DE $E40F:FD 5F 5B $E412:FE 0E 26 $E415:3E 1F 23 $E418:1F34C7C7 $E41C:A6 B6 $E41E:99 F6 6F $E421:DD 8B F9 $E424:6B $E425:89 9F $E427:87 C8 $E429:D7 CD $E42B:33 F1 $E42D:E9 AD $E42F:A6 7D $E431:F9 BF D7 $E434:FC 37 FC $E437:57 FC $E439:7C 4C FC $E43C:3E 46 BE $E43F:69 8F $E441:C7 D3 $E443:FE 4F EF $E446:D3 EC $E448:9B ; control flow target $E449:A5 6F LDA $6F $E44B:D0 01 BNE $E44E $E44D:60 RTS ; control flow target $E44E:0A ASL $E44F:AA TAX $E450:BD 55 E4 LDA $E455,X $E453:85 02 STA $02 $E455:BD 56 E4 LDA $E456,X $E458:85 03 STA $03 $E45A:6C 02 00 JMP ($02) ; looks like a jump table $E45D:67 E4 ; $E467 $E45F:6D E4 ; $E46D $E461:8A E4 ; $E48A $E463:9E E4 ; $E49E $E465:ED E4 ; $E4ED ; control flow target $E467:A2 04 LDX #$04 $E469:A9 14 LDA #$14 $E46B:D0 04 BNE $E471 ; control flow target $E46D:A2 05 LDX #$05 $E46F:A9 0C LDA #$0C ; control flow target $E471:C5 F5 CMP $F5 $E473:F0 14 BEQ $E489 $E475:86 70 STX $70 $E477:20 ED F5 JSR $F5ED $E47A:A9 20 LDA #$20 $E47C:85 02 STA $02 ; control flow target $E47E:20 E3 D3 JSR $D3E3 $E481:C6 02 DEC $02 $E483:D0 F9 BNE $E47E $E485:A9 01 LDA #$01 $E487:85 FC STA $FC ; control flow target $E489:60 RTS ; control flow target $E48A:20 0B E3 JSR $E30B $E48D:F0 18 BEQ $E4A7 $E48F:59 F0 00 EOR $F0,Y $E492:99 F0 00 STA $F0,Y $E495:A9 02 LDA #$02 $E497:85 2E STA $2E $E499:A2 06 LDX #$06 $E49B:4C A6 E1 JMP $E1A6 ; control flow target $E49E:A5 30 LDA $30 $E4A0:D0 05 BNE $E4A7 $E4A2:AD E0 03 LDA $03E0 $E4A5:F0 01 BEQ $E4A8 ; control flow target $E4A7:60 RTS ; control flow target $E4A8:A2 BF LDX #$BF $E4AA:A9 E4 LDA #$E4 $E4AC:20 8A C2 JSR $C28A $E4AF:B0 F6 BCS $E4A7 $E4B1:A9 0B LDA #$0B $E4B3:85 99 STA $99 $E4B5:98 TYA $E4B6:48 PHA $E4B7:20 CC E4 JSR $E4CC $E4BA:68 PLA $E4BB:A8 TAY $E4BC:4C 88 F3 JMP $F388 ; unknown, probably data $E4BF:22 0B 2B 08 $E4C3:55 29 $E4C5:49 09 $E4C7:00 0F $E4C9:00 10 $E4CB:30 ; control flow target $E4CC:A9 0F LDA #$0F $E4CE:85 10 STA $10 ; control flow target $E4D0:20 E3 D3 JSR $D3E3 $E4D3:E6 47 INC $47 $E4D5:A5 47 LDA $47 $E4D7:4A LSR $E4D8:B0 F6 BCS $E4D0 $E4DA:A5 10 LDA $10 $E4DC:29 03 AND #$03 $E4DE:AA TAX $E4DF:BD C8 E4 LDA $E4C8,X $E4E2:8D 10 07 STA $0710 $E4E5:20 F9 D2 JSR $D2F9 ; $22 |= #$01 $E4E8:C6 10 DEC $10 $E4EA:10 E4 BPL $E4D0 $E4EC:60 RTS ; control flow target $E4ED:20 CC E4 JSR $E4CC $E4F0:A9 08 LDA #$08 $E4F2:85 70 STA $70 $E4F4:60 RTS ; control flow target $E4F5:A0 00 LDY #$00 ; control flow target $E4F7:D9 B0 03 CMP $03B0,Y $E4FA:F0 07 BEQ $E503 $E4FC:C8 INY $E4FD:C8 INY $E4FE:C0 20 CPY #$20 $E500:90 F5 BCC $E4F7 $E502:60 RTS ; control flow target $E503:B9 B1 03 LDA $03B1,Y $E506:A6 75 LDX $75 $E508:9D 05 04 STA $0405,X $E50B:60 RTS ; control flow target $E50C:A2 00 LDX #$00 $E50E:86 1E STX $1E $E510:86 1F STX $1F $E512:F0 65 BEQ $E579 ; control flow target $E514:A9 07 LDA #$07 $E516:85 1F STA $1F $E518:A9 00 LDA #$00 $E51A:85 1E STA $1E $E51C:A5 30 LDA $30 $E51E:D0 4F BNE $E56F $E520:A2 B0 LDX #$B0 $E522:A9 03 LDA #$03 $E524:A0 20 LDY #$20 $E526:20 D0 D3 JSR $D3D0 ; fill (A * 256 + X) with Y #$00's $E529:A2 12 LDX #$12 $E52B:20 0B F5 JSR $F50B $E52E:86 10 STX $10 $E530:85 11 STA $11 $E532:A0 00 LDY #$00 $E534:84 12 STY $12 ; control flow target $E536:A9 01 LDA #$01 $E538:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $E53B:B1 10 LDA ($10),Y $E53D:48 PHA $E53E:29 7F AND #$7F $E540:F0 28 BEQ $E56A $E542:84 75 STY $75 $E544:A6 12 LDX $12 $E546:9D B0 03 STA $03B0,X $E549:A5 1E LDA $1E $E54B:4A LSR $E54C:4A LSR $E54D:4A LSR $E54E:4A LSR $E54F:85 02 STA $02 $E551:A5 1F LDA $1F $E553:0A ASL $E554:0A ASL $E555:0A ASL $E556:0A ASL $E557:05 02 ORA $02 $E559:9D B1 03 STA $03B1,X $E55C:E8 INX $E55D:E8 INX $E55E:86 12 STX $12 $E560:B1 10 LDA ($10),Y $E562:AA TAX $E563:E8 INX $E564:E8 INX $E565:20 79 E5 JSR $E579 $E568:A4 75 LDY $75 ; control flow target $E56A:C8 INY $E56B:68 PLA $E56C:10 C8 BPL $E536 $E56E:60 RTS ; control flow target $E56F:A2 01 LDX #$01 $E571:AD 0B 04 LDA $040B $E574:29 C0 AND #$C0 $E576:F0 01 BEQ $E579 $E578:E8 INX ; control flow target $E579:A9 04 LDA #$04 $E57B:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $E57E:8A TXA $E57F:20 41 D7 JSR $D741 ; given A, sets Y = A << 1, X = $8000,Y, and A = $8001,Y $E582:A8 TAY $E583:A9 00 LDA #$00 $E585:85 08 STA $08 $E587:20 54 D7 JSR $D754 ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate $E58A:86 09 STX $09 $E58C:85 0A STA $0A $E58E:86 04 STX $04 $E590:85 05 STA $05 $E592:18 CLC $E593:A9 02 LDA #$02 $E595:65 02 ADC $02 $E597:85 02 STA $02 $E599:90 02 BCC $E59D $E59B:E6 03 INC $03 ; control flow target $E59D:A6 1E LDX $1E $E59F:A5 1F LDA $1F $E5A1:20 81 E6 JSR $E681 $E5A4:A5 09 LDA $09 $E5A6:18 CLC $E5A7:65 1E ADC $1E $E5A9:85 1E STA $1E $E5AB:A5 0A LDA $0A $E5AD:65 1F ADC $1F $E5AF:85 1F STA $1F $E5B1:60 RTS $E5B2:AA TAX $E5B3:BD E7 E5 LDA $E5E7,X $E5B6:A2 10 LDX #$10 $E5B8:20 6A D7 JSR $D76A ; multiplies A by X, returning low byte in $03 and high byte in A $E5BB:48 PHA $E5BC:A5 03 LDA $03 $E5BE:48 PHA $E5BF:A9 05 LDA #$05 $E5C1:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $E5C4:A9 05 LDA #$05 $E5C6:20 49 E6 JSR $E649 $E5C9:68 PLA $E5CA:18 CLC $E5CB:65 02 ADC $02 $E5CD:85 02 STA $02 $E5CF:68 PLA $E5D0:65 03 ADC $03 $E5D2:85 03 STA $03 $E5D4:A9 40 LDA #$40 $E5D6:85 04 STA $04 $E5D8:A9 00 LDA #$00 $E5DA:85 05 STA $05 $E5DC:A9 80 LDA #$80 $E5DE:85 08 STA $08 $E5E0:A2 C0 LDX #$C0 $E5E2:A9 0F LDA #$0F $E5E4:4C 81 E6 JMP $E681 ; probably data $E5E7:00 04 $E5E9:08 $E5EA:0C 10 14 $E5ED:18 $E5EE:20 20 24 $E5F1:28 $E5F2:2C 30 34 $E5F5:36 36 $E5F7:36 3C ; control flow target $E5F9:A9 00 LDA #$00 $E5FB:20 00 E6 JSR $E600 $E5FE:A9 02 LDA #$02 ; control flow target $E600:18 CLC ; control flow target $E601:2A ROL $E602:85 09 STA $09 $E604:AA TAX $E605:BD 33 E6 LDA $E633,X $E608:F0 21 BEQ $E62B $E60A:0A ASL $E60B:66 08 ROR $08 $E60D:4A LSR $E60E:48 PHA $E60F:4A LSR $E610:4A LSR $E611:4A LSR $E612:4A LSR $E613:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $E616:68 PLA $E617:29 0F AND #$0F $E619:20 49 E6 JSR $E649 $E61C:A4 09 LDY $09 $E61E:C0 03 CPY #$03 $E620:B0 06 BCS $E628 $E622:20 A8 E6 JSR $E6A8 $E625:4C 2B E6 JMP $E62B ; BRA ; control flow target $E628:20 81 E6 JSR $E681 ; control flow target $E62B:E6 09 INC $09 $E62D:A5 09 LDA $09 $E62F:4A LSR $E630:B0 CF BCS $E601 $E632:60 RTS ; data; it's used but I'm not sure what for $E633:51 52 3E 15 53 54 D5 00 $E63B:56 57 58 59 26 00 $E641:27 00 $E643:5A 63 59 3D 3F 00 ; control flow target $E649:20 41 D7 JSR $D741 ; given A, sets Y = A << 1, X = $8000,Y, and A = $8001,Y $E64C:A8 TAY $E64D:A9 00 LDA #$00 $E64F:20 54 D7 JSR $D754 ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate $E652:86 04 STX $04 $E654:85 05 STA $05 $E656:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $E659:A8 TAY $E65A:A5 02 LDA $02 $E65C:18 CLC $E65D:69 04 ADC #$04 $E65F:85 02 STA $02 $E661:90 02 BCC $E665 $E663:E6 03 INC $03 ; control flow target $E665:98 TYA $E666:60 RTS ; control flow target $E667:A9 03 LDA #$03 $E669:85 08 STA $08 $E66B:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $E66E:A5 DF LDA $DF ; location $E670:20 41 D7 JSR $D741 ; given A, sets Y = A << 1, X = $8000,Y, and A = $8001,Y $E673:86 02 STX $02 $E675:85 03 STA $03 $E677:A2 00 LDX #$00 $E679:86 04 STX $04 $E67B:A9 04 LDA #$04 $E67D:85 05 STA $05 $E67F:A9 10 LDA #$10 ; control flow target $E681:20 9C E6 JSR $E69C $E684:84 06 STY $06 $E686:A6 04 LDX $04 $E688:F0 02 BEQ $E68C $E68A:E6 05 INC $05 ; control flow target $E68C:20 CD E6 JSR $E6CD $E68F:8D 07 20 STA $2007 ; VRAM I/O Register $E692:CA DEX $E693:D0 F7 BNE $E68C $E695:C6 05 DEC $05 $E697:D0 F3 BNE $E68C $E699:4C F5 D7 JMP $D7F5 ; set some PPU/VRAM registers ; control flow target $E69C:AC 02 20 LDY $2002 ; PPU Status Register - read on $2002 triggers reset of high bit and $2005-$2006 $E69F:A0 00 LDY #$00 $E6A1:8D 06 20 STA $2006 ; VRAM Address Register #2 - high byte $E6A4:8E 06 20 STX $2006 ; VRAM Address Register #2 - low byte $E6A7:60 RTS ; control flow target $E6A8:20 9C E6 JSR $E69C $E6AB:84 06 STY $06 ; control flow target $E6AD:A2 08 LDX #$08 ; control flow target $E6AF:20 CD E6 JSR $E6CD $E6B2:8D 07 20 STA $2007 ; VRAM I/O Register $E6B5:9D 30 07 STA $0730,X $E6B8:CA DEX $E6B9:D0 F4 BNE $E6AF $E6BB:A2 08 LDX #$08 ; control flow target $E6BD:BD 30 07 LDA $0730,X $E6C0:8D 07 20 STA $2007 ; VRAM I/O Register $E6C3:CA DEX $E6C4:D0 F7 BNE $E6BD $E6C6:C6 04 DEC $04 $E6C8:D0 E3 BNE $E6AD $E6CA:4C F5 D7 JMP $D7F5 ; set some PPU/VRAM registers ; $E6CD-$E6F0: decompression routine for RLE compression used for the title screen graphics (at least; very likely this is used for other things too). ; Basically, each byte stands for itself except for #$81, which indicates that the previous byte should be repeated for the number of times given by the next byte, e.g. 7F 81 05 means 7F 7F 7F 7F 7F. ; A literal #$81 is represented by setting the repeat count to #$00, e.g. 7F 81 00 means 7F 81. ; Note that this routine is similar to the routine at $EC83, but operates on plain bytes instead of variable-bit-width data. ; control flow target $E6CD:A5 06 LDA $06 $E6CF:D0 19 BNE $E6EA ; control flow target $E6D1:20 62 D7 JSR $D762 ; read the next byte from ($02),Y; update Y and $03 as appropriate $E6D4:C9 81 CMP #$81 $E6D6:D0 0D BNE $E6E5 ; if we did not read #$81, return the byte $E6D8:24 08 BIT $08 ; not sure what $08 is, but it effectively toggles the RLE behaviour of #$81 $E6DA:30 09 BMI $E6E5 ; but if its high bit is set, then just return the byte $E6DC:20 62 D7 JSR $D762 ; otherwise, read the next byte from ($02),Y; update Y and $03 as appropriate $E6DF:C9 00 CMP #$00 ; did we read a #$00? $E6E1:D0 05 BNE $E6E8 ; if not, it's a repeat count, so go handle that $E6E3:A9 81 LDA #$81 ; otherwise, #$8100 means return #$81 ; control flow target $E6E5:85 07 STA $07 ; store the byte so we can repeat it if necessary $E6E7:60 RTS ; control flow target $E6E8:85 06 STA $06 ; store the repeat count ; control flow target $E6EA:C6 06 DEC $06 ; decrement the repeat count $E6EC:F0 E3 BEQ $E6D1 ; if the repeat count is now 0, go read the next byte $E6EE:A5 07 LDA $07 ; otherwise return the previous byte $E6F0:60 RTS ; swap ROM bank 0 into the swappable RAM bank ; control flow target $E6F1:A9 00 LDA #$00 $E6F3:85 2D STA $2D $E6F5:E6 FD INC $FD $E6F7:8D FF FF STA $FFFF $E6FA:8D FF FF STA $FFFF $E6FD:8D FF FF STA $FFFF $E700:8D FF FF STA $FFFF $E703:8D FF FF STA $FFFF $E706:C6 FD DEC $FD $E708:60 RTS ; control flow target $E709:A5 33 LDA $33 ; swap ROM bank specified by A into the swappable RAM bank ; control flow target $E70B:85 2D STA $2D ; this happens during IRQ ; control flow target $E70D:E6 FD INC $FD $E70F:8D FF FF STA $FFFF $E712:4A LSR $E713:8D FF FF STA $FFFF $E716:4A LSR $E717:8D FF FF STA $FFFF $E71A:4A LSR $E71B:8D FF FF STA $FFFF $E71E:4A LSR $E71F:8D FF FF STA $FFFF $E722:C6 FD DEC $FD $E724:60 RTS ; control flow target $E725:A9 0E LDA #$0E ; CHR 8k, PRG 16k, $8000 swappable, veritcal mirroring $E727:D0 02 BNE $E72B ; control flow target $E729:A9 0F LDA #$0F ; CHR 8k, PRG 16k, $8000 swappable, horizontal mirroring ; control flow target $E72B:A2 05 LDX #$05 ; MMC1, so need to write 5 bits one at a time $E72D:E6 FD INC $FD ; control flow target $E72F:8D FF 9F STA $9FFF ; update mapper config $E732:4A LSR $E733:CA DEX $E734:D0 F9 BNE $E72F $E736:C6 FD DEC $FD $E738:60 RTS ; initialize mapper stuff ; control flow target $E739:20 25 E7 JSR $E725 ; update mapper config to vertical mirroring $E73C:A9 FF LDA #$FF $E73E:85 02 STA $02 ; set $02 to #$FF $E740:A9 BF LDA #$BF ; set A to set CHR Reg 0 to 0 $E742:20 4C E7 JSR $E74C ; and do it $E745:A9 DF LDA #$DF ; set A to set CHR Reg 1 to 0 $E747:20 4C E7 JSR $E74C ; and do it $E74A:A9 FF LDA #$FF ; set WRAM enabled, PRG Reg to 0 ; control flow target $E74C:85 03 STA $03 $E74E:A9 00 LDA #$00 $E750:A8 TAY $E751:A2 05 LDX #$05 ; MMC1, so need to write 5 bits one at a time $E753:E6 FD INC $FD ; control flow target $E755:91 02 STA ($02),Y $E757:CA DEX $E758:D0 FB BNE $E755 $E75A:C6 FD DEC $FD $E75C:60 RTS $E75D:A5 4D LDA $4D $E75F:F0 0D BEQ $E76E $E761:85 7D STA $7D $E763:20 11 E8 JSR $E811 $E766:20 87 E8 JSR $E887 $E769:A4 50 LDY $50 $E76B:88 DEY $E76C:10 70 BPL $E7DE ; control flow target $E76E:A5 7D LDA $7D $E770:D0 21 BNE $E793 $E772:A5 70 LDA $70 $E774:C9 05 CMP #$05 $E776:D0 16 BNE $E78E $E778:A9 10 LDA #$10 $E77A:20 E9 EF JSR $EFE9 $E77D:D0 0F BNE $E78E $E77F:A9 0E LDA #$0E $E781:85 99 STA $99 $E783:A9 D0 LDA #$D0 $E785:85 80 STA $80 $E787:A9 FC LDA #$FC $E789:85 86 STA $86 $E78B:E6 7D INC $7D $E78D:60 RTS ; control flow target $E78E:A9 00 LDA #$00 $E790:85 7D STA $7D $E792:60 RTS ; control flow target $E793:A4 7A LDY $7A $E795:A5 86 LDA $86 $E797:30 06 BMI $E79F $E799:A5 82 LDA $82 $E79B:29 04 AND #$04 $E79D:D0 0C BNE $E7AB ; control flow target $E79F:84 10 STY $10 $E7A1:84 11 STY $11 $E7A3:A0 00 LDY #$00 $E7A5:20 47 85 JSR $8547 ; not in this bank! $E7A8:4C E2 E7 JMP $E7E2 ; control flow target $E7AB:A5 80 LDA $80 $E7AD:09 06 ORA #$06 $E7AF:85 80 STA $80 $E7B1:A5 79 LDA $79 $E7B3:C9 09 CMP #$09 $E7B5:B0 27 BCS $E7DE $E7B7:C8 INY $E7B8:C4 4F CPY $4F $E7BA:D0 0C BNE $E7C8 $E7BC:98 TYA $E7BD:25 82 AND $82 $E7BF:D0 07 BNE $E7C8 $E7C1:A5 53 LDA $53 $E7C3:85 83 STA $83 $E7C5:20 ED 84 JSR $84ED ; not in this bank! ; control flow target $E7C8:A4 50 LDY $50 $E7CA:88 DEY $E7CB:A5 80 LDA $80 $E7CD:38 SEC $E7CE:E5 65 SBC $65 $E7D0:C9 0C CMP #$0C $E7D2:90 0A BCC $E7DE $E7D4:C9 14 CMP #$14 $E7D6:B0 06 BCS $E7DE $E7D8:A9 04 LDA #$04 $E7DA:85 51 STA $51 $E7DC:E6 4D INC $4D ; control flow target $E7DE:84 10 STY $10 $E7E0:84 11 STY $11 ; control flow target $E7E2:A9 05 LDA #$05 $E7E4:20 FE 85 JSR $85FE ; not in this bank! $E7E7:85 82 STA $82 $E7E9:A9 10 LDA #$10 $E7EB:85 07 STA $07 $E7ED:20 D2 85 JSR $85D2 ; not in this bank! $E7F0:A4 4D LDY $4D $E7F2:F0 05 BEQ $E7F9 $E7F4:8A TXA $E7F5:05 51 ORA $51 $E7F7:85 51 STA $51 ; control flow target $E7F9:20 5D F2 JSR $F25D $E7FC:A5 11 LDA $11 ; control flow target $E7FE:A0 18 LDY #$18 $E800:20 94 EF JSR $EF94 $E803:A9 04 LDA #$04 $E805:85 09 STA $09 $E807:20 50 E8 JSR $E850 $E80A:A2 DF LDX #$DF $E80C:A9 E8 LDA #$E8 $E80E:4C BC EF JMP $EFBC ; control flow target $E811:A5 63 LDA $63 $E813:38 SEC $E814:E9 10 SBC #$10 $E816:85 7E STA $7E $E818:A5 64 LDA $64 $E81A:E9 00 SBC #$00 $E81C:85 7F STA $7F $E81E:A5 65 LDA $65 $E820:18 CLC $E821:69 10 ADC #$10 $E823:85 80 STA $80 ; control flow target $E825:60 RTS ; control flow target $E826:A5 4D LDA $4D $E828:F0 FB BEQ $E825 $E82A:20 11 E8 JSR $E811 $E82D:A5 7E LDA $7E $E82F:85 13 STA $13 $E831:A5 7F LDA $7F $E833:85 14 STA $14 $E835:A9 00 LDA #$00 $E837:85 1D STA $1D $E839:85 5C STA $5C $E83B:85 55 STA $55 $E83D:85 75 STA $75 $E83F:A9 12 LDA #$12 $E841:20 F5 E4 JSR $E4F5 $E844:85 81 STA $81 $E846:A4 50 LDY $50 $E848:88 DEY $E849:98 TYA $E84A:20 FE E7 JSR $E7FE $E84D:4C 0D F2 JMP $F20D ; control flow target $E850:A5 4D LDA $4D $E852:F0 1C BEQ $E870 $E854:A5 55 LDA $55 $E856:F0 0A BEQ $E862 $E858:A6 56 LDX $56 ; control flow target $E85A:A0 16 LDY #$16 $E85C:CA DEX $E85D:30 02 BMI $E861 $E85F:A0 1E LDY #$1E ; control flow target $E861:60 RTS ; control flow target $E862:24 5C BIT $5C $E864:70 07 BVS $E86D $E866:A0 26 LDY #$26 $E868:A5 62 LDA $62 $E86A:4A LSR $E86B:90 02 BCC $E86F ; control flow target $E86D:A0 2E LDY #$2E ; control flow target $E86F:60 RTS ; control flow target $E870:A6 86 LDX $86 $E872:30 E6 BMI $E85A $E874:A5 82 LDA $82 $E876:29 04 AND #$04 $E878:F0 E0 BEQ $E85A $E87A:A5 47 LDA $47 $E87C:29 10 AND #$10 $E87E:4A LSR $E87F:09 10 ORA #$10 $E881:69 16 ADC #$16 $E883:A8 TAY $E884:60 RTS ; data $E885:20 00 ; control flow target $E887:A5 DF LDA $DF ; location $E889:C9 06 CMP #$06 $E88B:D0 06 BNE $E893 $E88D:A5 2F LDA $2F $E88F:C9 12 CMP #$12 $E891:F0 45 BEQ $E8D8 ; control flow target $E893:A5 55 LDA $55 $E895:F0 40 BEQ $E8D7 $E897:A4 4F LDY $4F $E899:88 DEY $E89A:B9 85 E8 LDA $E885,Y $E89D:18 CLC $E89E:65 7E ADC $7E $E8A0:85 04 STA $04 $E8A2:A9 00 LDA #$00 $E8A4:A8 TAY $E8A5:65 7F ADC $7F $E8A7:C9 03 CMP #$03 $E8A9:B0 2C BCS $E8D7 $E8AB:4A LSR $E8AC:66 04 ROR $04 $E8AE:4A LSR $E8AF:A5 04 LDA $04 $E8B1:6A ROR $E8B2:4A LSR $E8B3:4A LSR $E8B4:18 CLC $E8B5:69 E0 ADC #$E0 $E8B7:85 04 STA $04 $E8B9:A9 06 LDA #$06 $E8BB:69 00 ADC #$00 $E8BD:85 05 STA $05 $E8BF:B1 04 LDA ($04),Y $E8C1:C9 40 CMP #$40 $E8C3:B0 06 BCS $E8CB $E8C5:AA TAX $E8C6:BD C0 04 LDA $04C0,X $E8C9:10 0C BPL $E8D7 ; control flow target $E8CB:A5 56 LDA $56 $E8CD:85 86 STA $86 $E8CF:A5 57 LDA $57 $E8D1:85 85 STA $85 $E8D3:A9 00 LDA #$00 $E8D5:85 4D STA $4D ; control flow target $E8D7:60 RTS ; control flow target $E8D8:A5 4F LDA $4F $E8DA:25 82 AND $82 $E8DC:D0 ED BNE $E8CB $E8DE:60 RTS ; unknown, probably data $E8DF:80 83 $E8E1:81 84 $E8E3:87 82 $E8E5:85 88 $E8E7:FF 86 $E8E9:89 FF $E8EB:8C 90 $E8ED:8A 8D $E8EF:91 8B $E8F1:85 92 $E8F3:8F 8E $E8F5:02 00 $E8F7:03 02 $E8F9:03 05 $E8FB:03 08 $E8FD:03 0B $E8FF:03 0E $E901:03 11 $E903:02 14 $E905:02 00 $E907:02 02 $E909:02 05 $E90B:02 08 $E90D:02 0B $E90F:02 0E $E911:02 11 $E913:02 14 ; control flow target $E915:A9 03 LDA #$03 ; pointer table index for new game screen text $E917:A2 04 LDX #$04 $E919:20 6D E9 JSR $E96D $E91C:A9 FF LDA #$FF $E91E:85 19 STA $19 $E920:A9 07 LDA #$07 $E922:20 3F E9 JSR $E93F $E925:A2 00 LDX #$00 $E927:20 31 E9 JSR $E931 $E92A:A9 0A LDA #$0A $E92C:20 3F E9 JSR $E93F $E92F:A2 06 LDX #$06 ; control flow target $E931:A0 00 LDY #$00 ; control flow target $E933:B9 69 01 LDA $0169,Y $E936:95 E3 STA $E3,X $E938:E8 INX $E939:C8 INY $E93A:C0 06 CPY #$06 $E93C:90 F5 BCC $E933 $E93E:60 RTS ; control flow target $E93F:85 1B STA $1B ; control flow target $E941:A9 0F LDA #$0F $E943:85 1A STA $1A $E945:A9 07 LDA #$07 $E947:85 16 STA $16 $E949:A9 05 LDA #$05 $E94B:85 1D STA $1D $E94D:20 62 E9 JSR $E962 ; set $0169-$0182 to #$FF $E950:20 B1 E9 JSR $E9B1 $E953:AD 69 01 LDA $0169 $E956:C9 FF CMP #$FF $E958:F0 E7 BEQ $E941 $E95A:60 RTS ; control flow target $E95B:A9 02 LDA #$02 ; pointer table index for continue game screen text $E95D:A2 03 LDX #$03 $E95F:20 6D E9 JSR $E96D ; set $0169-$0182 to #$FF ; control flow target $E962:A9 FF LDA #$FF $E964:A0 1A LDY #$1A ; control flow target $E966:99 69 01 STA $0169,Y $E969:88 DEY $E96A:10 FA BPL $E966 $E96C:60 RTS ; control flow target $E96D:48 PHA ; save A on the stack $E96E:8A TXA $E96F:48 PHA ; save X on the stack $E970:20 52 F6 JSR $F652 ; STZ to $8E, $94-$97, $99-$9A, pAPU stuff $E973:20 F9 E5 JSR $E5F9 $E976:68 PLA ; pull old X from the stack $E977:20 00 EC JSR $EC00 $E97A:20 6E EC JSR $EC6E $E97D:A9 23 LDA #$23 $E97F:A2 C0 LDX #$C0 $E981:20 9C E6 JSR $E69C $E984:A9 FF LDA #$FF ; control flow target $E986:8D 07 20 STA $2007 ; VRAM I/O Register $E989:C8 INY $E98A:C0 40 CPY #$40 $E98C:90 F8 BCC $E986 $E98E:68 PLA ; pull old A from the stack $E98F:20 94 D9 JSR $D994 ; given A, process the A'th string from the pointer table located at $D99F $E992:A9 0F LDA #$0F $E994:20 ED F5 JSR $F5ED $E997:20 0A D0 JSR $D00A $E99A:20 F9 D2 JSR $D2F9 ; $22 |= #$01 $E99D:4C 0F D3 JMP $D30F ; control flow target $E9A0:A9 19 LDA #$19 $E9A2:85 1D STA $1D $E9A4:A9 09 LDA #$09 $E9A6:85 1A STA $1A $E9A8:85 19 STA $19 $E9AA:A2 06 LDX #$06 $E9AC:86 1B STX $1B $E9AE:E8 INX $E9AF:86 16 STX $16 ; control flow target $E9B1:A2 F7 LDX #$F7 $E9B3:A9 EA LDA #$EA $E9B5:86 17 STX $17 $E9B7:85 18 STA $18 $E9B9:A9 00 LDA #$00 $E9BB:85 47 STA $47 $E9BD:85 1C STA $1C ; charactersOnCurrentLine $E9BF:85 12 STA $12 $E9C1:85 13 STA $13 $E9C3:85 14 STA $14 ; control flow target $E9C5:20 C0 EA JSR $EAC0 $E9C8:24 19 BIT $19 $E9CA:30 01 BMI $E9CD $E9CC:C8 INY ; control flow target $E9CD:84 11 STY $11 $E9CF:20 A6 DC JSR $DCA6 ; load down arrow or space depending on clock $E9D2:20 6E EB JSR $EB6E $E9D5:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $E9D8:E6 47 INC $47 $E9DA:20 3D EB JSR $EB3D $E9DD:CA DEX $E9DE:30 06 BMI $E9E6 $E9E0:20 EF E9 JSR $E9EF $E9E3:4C C5 E9 JMP $E9C5 ; control flow target $E9E6:A5 F8 LDA $F8 $E9E8:29 10 AND #$10 $E9EA:F0 D9 BEQ $E9C5 $E9EC:20 27 EA JSR $EA27 ; control flow target $E9EF:8A TXA $E9F0:20 A2 D7 JSR $D7A2 ; data, probably a jump table $E9F3:0D EA ; $EA0D $E9F5:53 EA ; $EA53 $E9F7:5D EA ; $EA5D $E9F9:66 EA ; $EA66 $E9FB:75 EA ; $EA75 $E9FD:87 EA ; $EA87 ; control flow target $E9FF:8A TXA $EA00:20 C2 EA JSR $EAC2 $EA03:24 19 BIT $19 $EA05:30 01 BMI $EA08 $EA07:C8 INY ; control flow target $EA08:84 11 STY $11 $EA0A:4C AE DC JMP $DCAE ; control flow target $EA0D:20 B1 EA JSR $EAB1 $EA10:B0 1C BCS $EA2E $EA12:48 PHA $EA13:A6 1C LDX $1C $EA15:98 TYA $EA16:9D 69 01 STA $0169,X $EA19:68 PLA $EA1A:20 D4 EA JSR $EAD4 $EA1D:A9 0F LDA #$0F $EA1F:85 99 STA $99 $EA21:A6 1C LDX $1C $EA23:E4 1D CPX $1D $EA25:90 1A BCC $EA41 ; control flow target $EA27:68 PLA $EA28:68 PLA $EA29:A6 1C LDX $1C $EA2B:4C FF E9 JMP $E9FF ; control flow target $EA2E:F0 F7 BEQ $EA27 ; control flow target $EA30:A6 1C LDX $1C $EA32:C9 F1 CMP #$F1 $EA34:D0 0F BNE $EA45 $EA36:E4 1D CPX $1D $EA38:F0 18 BEQ $EA52 $EA3A:BD 69 01 LDA $0169,X $EA3D:C9 FF CMP #$FF $EA3F:F0 11 BEQ $EA52 ; control flow target $EA41:E6 1C INC $1C $EA43:D0 06 BNE $EA4B ; control flow target $EA45:CA DEX $EA46:30 0A BMI $EA52 $EA48:86 1C STX $1C $EA4A:E8 INX ; control flow target $EA4B:20 FF E9 JSR $E9FF $EA4E:A9 00 LDA #$00 $EA50:85 47 STA $47 ; control flow target $EA52:60 RTS ; control flow target $EA53:A5 F9 LDA $F9 $EA55:29 03 AND #$03 $EA57:F0 F9 BEQ $EA52 $EA59:09 F0 ORA #$F0 $EA5B:D0 D3 BNE $EA30 ; control flow target $EA5D:20 9B EA JSR $EA9B $EA60:20 B1 EA JSR $EAB1 $EA63:B0 09 BCS $EA6E $EA65:60 RTS ; control flow target $EA66:20 A5 EA JSR $EAA5 $EA69:20 B1 EA JSR $EAB1 $EA6C:90 06 BCC $EA74 ; control flow target $EA6E:A5 13 LDA $13 $EA70:29 FE AND #$FE $EA72:85 13 STA $13 ; control flow target $EA74:60 RTS ; control flow target $EA75:20 7E EA JSR $EA7E $EA78:20 B1 EA JSR $EAB1 $EA7B:B0 F1 BCS $EA6E $EA7D:60 RTS ; control flow target $EA7E:A6 13 LDX $13 $EA80:CA DEX $EA81:10 15 BPL $EA98 $EA83:A2 09 LDX #$09 $EA85:D0 11 BNE $EA98 ; control flow target $EA87:20 B1 EA JSR $EAB1 $EA8A:90 03 BCC $EA8F $EA8C:20 8F EA JSR $EA8F ; control flow target $EA8F:A6 13 LDX $13 $EA91:E8 INX $EA92:E0 0A CPX #$0A $EA94:90 02 BCC $EA98 $EA96:A2 00 LDX #$00 ; control flow target $EA98:86 13 STX $13 $EA9A:60 RTS ; control flow target $EA9B:A6 12 LDX $12 $EA9D:CA DEX $EA9E:10 0E BPL $EAAE $EAA0:A6 16 LDX $16 $EAA2:CA DEX $EAA3:D0 09 BNE $EAAE ; control flow target $EAA5:A6 12 LDX $12 $EAA7:E8 INX $EAA8:E4 16 CPX $16 $EAAA:90 02 BCC $EAAE $EAAC:A2 00 LDX #$00 ; control flow target $EAAE:86 12 STX $12 $EAB0:60 RTS ; control flow target $EAB1:A5 12 LDA $12 $EAB3:0A ASL $EAB4:0A ASL $EAB5:65 12 ADC $12 $EAB7:0A ASL $EAB8:65 13 ADC $13 $EABA:A8 TAY $EABB:B1 17 LDA ($17),Y $EABD:C9 F0 CMP #$F0 $EABF:60 RTS ; control flow target $EAC0:A5 1C LDA $1C ; control flow target $EAC2:A4 1B LDY $1B $EAC4:C9 0D CMP #$0D $EAC6:90 05 BCC $EACD $EAC8:C8 INY $EAC9:C8 INY $EACA:C8 INY $EACB:E9 0D SBC #$0D ; control flow target $EACD:AA TAX $EACE:C9 06 CMP #$06 $EAD0:90 01 BCC $EAD3 $EAD2:E8 INX ; control flow target $EAD3:60 RTS ; control flow target $EAD4:85 05 STA $05 $EAD6:20 C0 EA JSR $EAC0 $EAD9:8A TXA $EADA:18 CLC $EADB:65 1A ADC $1A $EADD:85 10 STA $10 $EADF:24 19 BIT $19 $EAE1:30 01 BMI $EAE4 $EAE3:C8 INY ; control flow target $EAE4:84 11 STY $11 $EAE6:20 77 D1 JSR $D177 $EAE9:A5 05 LDA $05 $EAEB:A0 7F LDY #$7F $EAED:A9 82 LDA #$82 $EAEF:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $EAF2:A5 05 LDA $05 $EAF4:4C 2B D7 JMP $D72B ; STA $0730,X, INX, $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; data; 5- to 8-bit character lut ; numbers: 0-9 $EAF7:A0A1A2A3A4A5A6A7A8A9 ; uppercase letters: A-Z $EB01:B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CA ; lowercase letters: a-z $EB1B:0102030405060708090A0B0C0D0E0F101112131415161718191A ; punctuation: ?! $EB35:AAAB ; graphics, the green/blue vines around the heart at the top of the screen $EB37:F2F2 ; graphics, 2 chunks of health bar, last chunk empty $EB39:F1F1 ; graphics, 2 chunks of health bar, both chunks full $EB3B:F0F0 ; control flow target $EB3D:A2 00 LDX #$00 $EB3F:A5 F9 LDA $F9 $EB41:29 0F AND #$0F $EB43:0A ASL $EB44:0A ASL $EB45:85 02 STA $02 $EB47:A5 F9 LDA $F9 $EB49:29 40 AND #$40 $EB4B:05 F8 ORA $F8 $EB4D:29 C0 AND #$C0 $EB4F:05 02 ORA $02 $EB51:F0 15 BEQ $EB68 ; control flow target $EB53:E8 INX $EB54:0A ASL $EB55:90 FC BCC $EB53 $EB57:E4 14 CPX $14 $EB59:D0 09 BNE $EB64 $EB5B:C6 15 DEC $15 $EB5D:D0 0C BNE $EB6B $EB5F:A9 08 LDA #$08 $EB61:85 15 STA $15 $EB63:60 RTS ; control flow target $EB64:A9 10 LDA #$10 $EB66:85 15 STA $15 ; control flow target $EB68:86 14 STX $14 $EB6A:60 RTS ; control flow target $EB6B:A2 00 LDX #$00 $EB6D:60 RTS ; control flow target $EB6E:A5 13 LDA $13 $EB70:0A ASL $EB71:0A ASL $EB72:0A ASL $EB73:0A ASL $EB74:69 28 ADC #$28 $EB76:A8 TAY $EB77:A5 12 LDA $12 $EB79:0A ASL $EB7A:0A ASL $EB7B:0A ASL $EB7C:0A ASL $EB7D:69 70 ADC #$70 $EB7F:4C 91 E2 JMP $E291 ; control flow target $EB82:A9 05 LDA #$05 $EB84:20 00 E6 JSR $E600 $EB87:A9 01 LDA #$01 $EB89:20 00 EC JSR $EC00 $EB8C:20 6E EC JSR $EC6E $EB8F:20 84 D8 JSR $D884 $EB92:20 92 E1 JSR $E192 $EB95:20 5D D8 JSR $D85D ; copy $D869-$D874 to $0200-$020B $EB98:4C 4D C3 JMP $C34D ; control flow target $EB9B:20 F9 E5 JSR $E5F9 $EB9E:A9 04 LDA #$04 $EBA0:20 00 E6 JSR $E600 $EBA3:A9 00 LDA #$00 $EBA5:20 00 EC JSR $EC00 $EBA8:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $EBAB:86 12 STX $12 $EBAD:85 13 STA $13 $EBAF:A9 03 LDA #$03 $EBB1:18 CLC $EBB2:65 DF ADC $DF ; location $EBB4:20 58 D7 JSR $D758 ; given A, set X to ($02),(A*2), A to ($02),(A*2+1), and INC $03 as appropriate $EBB7:86 14 STX $14 $EBB9:85 15 STA $15 $EBBB:20 6E EC JSR $EC6E $EBBE:A2 20 LDX #$20 $EBC0:20 1E EC JSR $EC1E $EBC3:A6 14 LDX $14 $EBC5:A5 15 LDA $15 $EBC7:20 0D D8 JSR $D80D ; given A and X, process the string located at (A * 256 + X) $EBCA:20 A1 EC JSR $ECA1 $EBCD:A9 11 LDA #$11 $EBCF:20 ED F5 JSR $F5ED $EBD2:20 0F D3 JSR $D30F $EBD5:A9 00 LDA #$00 $EBD7:85 10 STA $10 ; control flow target $EBD9:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $EBDC:20 FB EB JSR $EBFB ; A = $F8 & #$10 $EBDF:D0 14 BNE $EBF5 $EBE1:A5 10 LDA $10 $EBE3:29 0C AND #$0C $EBE5:4A LSR $EBE6:4A LSR $EBE7:85 04 STA $04 $EBE9:A4 14 LDY $14 $EBEB:A6 15 LDX $15 $EBED:20 D6 EC JSR $ECD6 $EBF0:C6 10 DEC $10 $EBF2:4C D9 EB JMP $EBD9 ; control flow target $EBF5:20 52 F6 JSR $F652 ; STZ to $8E, $94-$97, $99-$9A, pAPU stuff $EBF8:4C 00 D3 JMP $D300 ; initialize a bunch of stuff ; A = $F8 & #$10 ; control flow target $EBFB:A5 F8 LDA $F8 $EBFD:29 10 AND #$10 $EBFF:60 RTS ; control flow target $EC00:48 PHA $EC01:A9 06 LDA #$06 $EC03:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $EC06:68 PLA $EC07:A2 00 LDX #$00 $EC09:20 4B D7 JSR $D74B ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate $EC0C:A8 TAY $EC0D:A9 00 LDA #$00 $EC0F:20 54 D7 JSR $D754 ; given A, X, and Y, set $02-$03 to X-Y, then set X to ($02),(A*2) and A to ($02),(A*2+1), and INC $03 as appropriate $EC12:86 06 STX $06 $EC14:85 07 STA $07 $EC16:20 5A D7 JSR $D75A ; given A and Y, set X = ($02),Y, A = ($02),(Y+1), and INC $03 as appropriate $EC19:86 0D STX $0D $EC1B:85 0E STA $0E $EC1D:60 RTS ; control flow target $EC1E:98 TYA $EC1F:18 CLC $EC20:65 0D ADC $0D $EC22:A4 0E LDY $0E $EC24:90 01 BCC $EC27 $EC26:C8 INY ; control flow target $EC27:86 02 STX $02 $EC29:A2 00 LDX #$00 $EC2B:4C DF D2 JMP $D2DF ; control flow target $EC2E:A9 20 LDA #$20 $EC30:85 10 STA $10 $EC32:A0 00 LDY #$00 $EC34:84 11 STY $11 $EC36:84 0F STY $0F $EC38:84 16 STY $16 $EC3A:B1 06 LDA ($06),Y $EC3C:E6 06 INC $06 $EC3E:D0 02 BNE $EC42 $EC40:E6 07 INC $07 ; control flow target $EC42:20 CA D2 JSR $D2CA $EC45:A9 0F LDA #$0F $EC47:85 0C STA $0C ; control flow target $EC49:A9 40 LDA #$40 $EC4B:85 0B STA $0B $EC4D:A5 10 LDA $10 $EC4F:A6 11 LDX $11 $EC51:20 9C E6 JSR $E69C ; control flow target $EC54:20 83 EC JSR $EC83 $EC57:8D 07 20 STA $2007 ; VRAM I/O Register $EC5A:C6 0B DEC $0B $EC5C:D0 F6 BNE $EC54 $EC5E:A5 11 LDA $11 $EC60:18 CLC $EC61:69 40 ADC #$40 $EC63:85 11 STA $11 $EC65:90 02 BCC $EC69 $EC67:E6 10 INC $10 ; control flow target $EC69:C6 0C DEC $0C $EC6B:D0 DC BNE $EC49 $EC6D:60 RTS ; control flow target $EC6E:20 2E EC JSR $EC2E $EC71:A9 23 LDA #$23 $EC73:A2 C0 LDX #$C0 $EC75:20 9C E6 JSR $E69C ; control flow target $EC78:B1 0D LDA ($0D),Y $EC7A:8D 07 20 STA $2007 ; VRAM I/O Register $EC7D:C8 INY $EC7E:C0 40 CPY #$40 $EC80:90 F6 BCC $EC78 $EC82:60 RTS ; $EC83-$ECA0: decompression routine for Huffman + RLE compression used for the shared start/continue screen tilemap. ; Basically, each Huffman string gets mapped to a byte, and then each byte stands for itself except for #$81, which indicates that the previous byte should be repeated for the number of times given by the next byte, e.g. 7F 81 05 means 7F 7F 7F 7F 7F. ; A literal #$81 is represented by setting the repeat count to #$00, e.g. 7F 81 00 means 7F 81. ; Note that this routine is similar to the routine at $E6CD, but operates on variable-bit-width data instead of plain bytes. ; control flow target $EC83:A5 0F LDA $0F ; load repeat count $EC85:D0 13 BNE $EC9A ; if we're still repeating, go repeat. Otherwise... ; control flow target $EC87:20 8E D2 JSR $D28E ; read a char $EC8A:C9 81 CMP #$81 $EC8C:D0 07 BNE $EC95 ; if we did not read #$81, then return the char $EC8E:20 8E D2 JSR $D28E ; otherwise, read another char $EC91:D0 05 BNE $EC98 ; if the second char is not #$00, it's a repeat count for the char before the #$81 $EC93:A9 81 LDA #$81 ; otherwise, #$8100 means return #$81 ; control flow target $EC95:85 03 STA $03 ; store the char so we can repeat it if necessary $EC97:60 RTS ; control flow target $EC98:85 0F STA $0F ; store the repeat count ; control flow target $EC9A:C6 0F DEC $0F ; decrement the repeat count $EC9C:F0 E9 BEQ $EC87 ; if the repeat count is now 0, go read the next char $EC9E:A5 03 LDA $03 ; otherwise return the previous char $ECA0:60 RTS ; control flow target $ECA1:A9 80 LDA #$80 $ECA3:85 81 STA $81 $ECA5:A2 00 LDX #$00 $ECA7:A0 00 LDY #$00 $ECA9:84 10 STY $10 $ECAB:84 04 STY $04 ; control flow target $ECAD:20 CB EC JSR $ECCB $ECB0:20 F2 EC JSR $ECF2 $ECB3:C8 INY $ECB4:C8 INY $ECB5:A5 10 LDA $10 $ECB7:C5 DF CMP $DF ; location $ECB9:D0 04 BNE $ECBF $ECBB:84 14 STY $14 $ECBD:86 15 STX $15 ; control flow target $ECBF:20 D6 EC JSR $ECD6 $ECC2:E6 10 INC $10 $ECC4:A5 10 LDA $10 $ECC6:C9 08 CMP #$08 $ECC8:90 E3 BCC $ECAD $ECCA:60 RTS ; control flow target $ECCB:B1 12 LDA ($12),Y $ECCD:C8 INY $ECCE:85 7E STA $7E $ECD0:B1 12 LDA ($12),Y $ECD2:C8 INY $ECD3:85 80 STA $80 $ECD5:60 RTS ; control flow target $ECD6:20 CB EC JSR $ECCB $ECD9:B1 12 LDA ($12),Y $ECDB:C8 INY $ECDC:85 03 STA $03 ; control flow target $ECDE:20 10 ED JSR $ED10 $ECE1:C8 INY $ECE2:20 E8 EC JSR $ECE8 $ECE5:D0 F7 BNE $ECDE $ECE7:60 RTS ; control flow target $ECE8:A5 7E LDA $7E $ECEA:18 CLC $ECEB:69 08 ADC #$08 $ECED:85 7E STA $7E $ECEF:C6 03 DEC $03 $ECF1:60 RTS ; control flow target $ECF2:A5 80 LDA $80 $ECF4:18 CLC $ECF5:69 08 ADC #$08 $ECF7:85 08 STA $08 $ECF9:A9 02 LDA #$02 $ECFB:85 03 STA $03 ; control flow target $ECFD:A5 80 LDA $80 $ECFF:20 12 ED JSR $ED12 $ED02:C8 INY $ED03:C8 INY $ED04:A5 08 LDA $08 $ED06:20 12 ED JSR $ED12 $ED09:88 DEY $ED0A:20 E8 EC JSR $ECE8 $ED0D:D0 EE BNE $ECFD $ED0F:60 RTS ; control flow target $ED10:A5 80 LDA $80 ; control flow target $ED12:9D 00 02 STA $0200,X $ED15:A5 7E LDA $7E $ED17:9D 03 02 STA $0203,X $ED1A:B1 12 LDA ($12),Y $ED1C:29 C0 AND #$C0 $ED1E:0A ASL $ED1F:2A ROL $ED20:2A ROL $ED21:05 04 ORA $04 $ED23:9D 02 02 STA $0202,X $ED26:B1 12 LDA ($12),Y $ED28:29 3F AND #$3F $ED2A:18 CLC $ED2B:65 81 ADC $81 $ED2D:9D 01 02 STA $0201,X $ED30:E8 INX $ED31:E8 INX $ED32:E8 INX $ED33:E8 INX $ED34:60 RTS ; data; it's used but I'm not sure what for $ED35:0F21 $ED37:E320 $ED39:0760 $ED3B:2000 $ED3D:2006 ; control flow target $ED3F:A9 08 LDA #$08 $ED41:20 00 E6 JSR $E600 ; control flow target $ED44:A9 01 LDA #$01 $ED46:20 00 E6 JSR $E600 $ED49:A9 06 LDA #$06 $ED4B:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $ED4E:A9 05 LDA #$05 $ED50:20 08 D8 JSR $D808 ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), messing with $03 if A > #$FD, then process the string located at (($8001),(A*2) + ($8000),(A*2)) $ED53:A9 06 LDA #$06 $ED55:A2 00 LDX #$00 ; control flow target $ED57:86 04 STX $04 $ED59:A2 00 LDX #$00 $ED5B:20 4B D7 JSR $D74B ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate $ED5E:86 00 STX $00 $ED60:85 01 STA $01 $ED62:A6 04 LDX $04 $ED64:BD 35 ED LDA $ED35,X $ED67:8D 32 07 STA $0732 $ED6A:C9 40 CMP #$40 $ED6C:90 02 BCC $ED70 $ED6E:A9 01 LDA #$01 ; control flow target $ED70:85 02 STA $02 $ED72:BD 36 ED LDA $ED36,X $ED75:8D 30 07 STA $0730 $ED78:BD 37 ED LDA $ED37,X $ED7B:8D 31 07 STA $0731 $ED7E:BD 38 ED LDA $ED38,X $ED81:85 10 STA $10 $ED83:BD 39 ED LDA $ED39,X $ED86:85 11 STA $11 $ED88:A0 00 LDY #$00 ; control flow target $ED8A:B1 00 LDA ($00),Y $ED8C:99 33 07 STA $0733,Y $ED8F:C8 INY $ED90:C4 02 CPY $02 $ED92:90 F6 BCC $ED8A $ED94:A9 FF LDA #$FF $ED96:99 33 07 STA $0733,Y ; control flow target $ED99:20 BA D4 JSR $D4BA $ED9C:C6 11 DEC $11 $ED9E:F0 10 BEQ $EDB0 $EDA0:A5 10 LDA $10 $EDA2:18 CLC $EDA3:6D 31 07 ADC $0731 $EDA6:8D 31 07 STA $0731 $EDA9:90 EE BCC $ED99 $EDAB:EE 30 07 INC $0730 $EDAE:D0 E9 BNE $ED99 ; control flow target $EDB0:60 RTS ; control flow target $EDB1:20 44 ED JSR $ED44 $EDB4:A9 08 LDA #$08 $EDB6:20 08 D8 JSR $D808 ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), messing with $03 if A > #$FD, then process the string located at (($8001),(A*2) + ($8000),(A*2)) $EDB9:A9 09 LDA #$09 $EDBB:A2 05 LDX #$05 $EDBD:20 57 ED JSR $ED57 $EDC0:20 C2 D3 JSR $D3C2 ; fill $0710-$072F with #$0F $EDC3:A9 DB LDA #$DB $EDC5:A0 EE LDY #$EE $EDC7:20 D9 D2 JSR $D2D9 $EDCA:A9 03 LDA #$03 $EDCC:8D 10 07 STA $0710 $EDCF:60 RTS ; control flow target $EDD0:20 B1 ED JSR $EDB1 $EDD3:20 B5 EE JSR $EEB5 $EDD6:A9 0A LDA #$0A $EDD8:20 08 D8 JSR $D808 ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), messing with $03 if A > #$FD, then process the string located at (($8001),(A*2) + ($8000),(A*2)) $EDDB:20 FF C2 JSR $C2FF $EDDE:20 0F D3 JSR $D30F $EDE1:A9 00 LDA #$00 $EDE3:85 10 STA $10 $EDE5:20 02 EE JSR $EE02 ; control flow target $EDE8:20 EE ED JSR $EDEE $EDEB:F0 FB BEQ $EDE8 $EDED:60 RTS ; control flow target $EDEE:20 19 D4 JSR $D419 ; $21 = $22, STZ to $20,$22,$23,$29,$2A,$FD, wait for IRQ $EDF1:20 FB EB JSR $EBFB ; A = $F8 & #$10 $EDF4:D0 16 BNE $EE0C ; if $F8 & #$10 != #$00, RTS $EDF6:A5 F8 LDA $F8 $EDF8:29 0C AND #$0C $EDFA:F0 10 BEQ $EE0C ; else, if $F8 & #$0C == #$00, RTS $EDFC:A5 10 LDA $10 ; else, $10 ^= #$01 $EDFE:49 01 EOR #$01 $EE00:85 10 STA $10 ; control flow target $EE02:09 02 ORA #$02 $EE04:A8 TAY $EE05:A2 05 LDX #$05 $EE07:20 8B E2 JSR $E28B ; given X and Y, set $0200 to $E2A8,Y, $0201 to #$27, $0202 to #$03, and $0203 to $E2A2,X $EE0A:A9 00 LDA #$00 ; control flow target $EE0C:60 RTS ; data; it's used but I'm not sure what for $EE0D:01 $EE0E:02 $EE0F:03 $EE10:02 ; control flow target $EE11:20 67 EE JSR $EE67 $EE14:A9 00 LDA #$00 $EE16:85 10 STA $10 $EE18:85 47 STA $47 $EE1A:20 02 EE JSR $EE02 ; control flow target $EE1D:20 EE ED JSR $EDEE $EE20:D0 1A BNE $EE3C $EE22:E6 47 INC $47 $EE24:A0 06 LDY #$06 $EE26:20 C9 EE JSR $EEC9 ; given Y, swap bank 6 into $8000-$BFFF and execute the Y'th function in the jump table located at $B400 $EE29:A5 47 LDA $47 $EE2B:4A LSR $EE2C:4A LSR $EE2D:29 03 AND #$03 ; table has 4 entries $EE2F:AA TAX $EE30:BD 0D EE LDA $EE0D,X $EE33:8D 1A 07 STA $071A $EE36:20 F9 D2 JSR $D2F9 ; $22 |= #$01 $EE39:4C 1D EE JMP $EE1D ; BRA ; control flow target $EE3C:20 00 D3 JSR $D300 ; initialize a bunch of stuff $EE3F:A5 10 LDA $10 ; must be option selected on title screen; 0 = new game, others = continue game $EE41:D0 05 BNE $EE48 $EE43:20 15 E9 JSR $E915 ; new game $EE46:B0 17 BCS $EE5F ; $E915 exits when C is set, so this is BRA ; control flow target $EE48:20 5B E9 JSR $E95B ; continue game ; control flow target $EE4B:20 A0 E9 JSR $E9A0 $EE4E:20 22 E0 JSR $E022 ; check password? $EE51:90 06 BCC $EE59 $EE53:A9 10 LDA #$10 $EE55:85 99 STA $99 $EE57:D0 F2 BNE $EE4B ; control flow target $EE59:A5 EF LDA $EF ; max HP $EE5B:85 4A STA $4A ; current HP $EE5D:E6 DE INC $DE ; control flow target $EE5F:A2 02 LDX #$02 $EE61:20 BD EE JSR $EEBD $EE64:4C 00 D3 JMP $D300 ; initialize a bunch of stuff ; control flow target $EE67:20 3F ED JSR $ED3F $EE6A:A9 02 LDA #$02 $EE6C:20 08 D8 JSR $D808 ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), messing with $03 if A > #$FD, then process the string located at (($8001),(A*2) + ($8000),(A*2)) $EE6F:A9 07 LDA #$07 $EE71:20 08 D8 JSR $D808 ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), messing with $03 if A > #$FD, then process the string located at (($8001),(A*2) + ($8000),(A*2)) $EE74:20 C2 D3 JSR $D3C2 ; fill $0710-$072F with #$0F $EE77:A9 10 LDA #$10 $EE79:20 ED F5 JSR $F5ED $EE7C:20 FF C2 JSR $C2FF $EE7F:A9 B8 LDA #$B8 $EE81:85 FB STA $FB $EE83:20 0F D3 JSR $D30F $EE86:A2 00 LDX #$00 $EE88:20 BD EE JSR $EEBD $EE8B:A9 96 LDA #$96 $EE8D:20 0F D4 JSR $D40F ; control flow target $EE90:A9 03 LDA #$03 $EE92:20 0F D4 JSR $D40F $EE95:E6 FB INC $FB $EE97:A5 FB LDA $FB $EE99:C9 F0 CMP #$F0 $EE9B:90 F3 BCC $EE90 $EE9D:A9 00 LDA #$00 $EE9F:85 FB STA $FB $EEA1:A9 5A LDA #$5A $EEA3:20 0F D4 JSR $D40F $EEA6:A2 06 LDX #$06 $EEA8:20 BD EE JSR $EEBD ; control flow target $EEAB:A6 95 LDX $95 $EEAD:E8 INX $EEAE:D0 FB BNE $EEAB $EEB0:A9 0D LDA #$0D $EEB2:20 ED F5 JSR $F5ED ; control flow target $EEB5:A9 30 LDA #$30 $EEB7:8D 1F 07 STA $071F $EEBA:4C F9 D2 JMP $D2F9 ; $22 |= #$01 ; control flow target $EEBD:A5 2D LDA $2D $EEBF:48 PHA $EEC0:A0 02 LDY #$02 $EEC2:20 C9 EE JSR $EEC9 ; given Y, swap bank 6 into $8000-$BFFF and execute the Y'th function in the jump table located at $B400 $EEC5:68 PLA $EEC6:4C 0B E7 JMP $E70B ; swap bank given by A into $8000-$BFFF ; given Y, swap bank 6 into $8000-$BFFF and execute the Y'th function in the jump table located at $B400 ; control flow target $EEC9:A9 06 LDA #$06 $EECB:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $EECE:B9 00 B4 LDA $B400,Y $EED1:85 2B STA $2B $EED3:B9 01 B4 LDA $B401,Y $EED6:85 2C STA $2C $EED8:6C 2B 00 JMP ($2B) ; data; it's used but I'm not sure what for $EEDB:0F0F $EEDD:040F $EEDF:0C1C0C $EEE2:0F0F ; unknown - probably code $EEE4:20 00 D3 JSR $D300 ; initialize a bunch of stuff $EEE7:20 5C F1 JSR $F15C $EEEA:A9 09 LDA #$09 $EEEC:20 00 E6 JSR $E600 $EEEF:A9 00 LDA #$00 $EEF1:85 28 STA $28 $EEF3:A9 03 LDA #$03 $EEF5:85 30 STA $30 $EEF7:20 9E C1 JSR $C19E $EEFA:20 F1 E6 JSR $E6F1 ; swap ROM bank 0 into the swappable RAM bank $EEFD:20 52 8F JSR $8F52 ; not in this bank! $EF00:A9 14 LDA #$14 $EF02:20 ED F5 JSR $F5ED $EF05:A2 18 LDX #$18 $EF07:A9 5E LDA #$5E $EF09:A0 EF LDY #$EF $EF0B:20 57 EF JSR $EF57 $EF0E:20 0F D3 JSR $D30F $EF11:A0 04 LDY #$04 $EF13:20 C9 EE JSR $EEC9 ; given Y, swap bank 6 into $8000-$BFFF and execute the Y'th function in the jump table located at $B400 $EF16:20 F1 E6 JSR $E6F1 ; swap ROM bank 0 into the swappable RAM bank $EF19:20 E6 8E JSR $8EE6 ; not in this bank! ; control flow target $EF1C:A6 95 LDX $95 $EF1E:E8 INX $EF1F:D0 FB BNE $EF1C $EF21:A9 0D LDA #$0D $EF23:20 ED F5 JSR $F5ED $EF26:A9 06 LDA #$06 $EF28:8D E2 03 STA $03E2 $EF2B:20 6E DA JSR $DA6E $EF2E:A9 3C LDA #$3C $EF30:20 0F D4 JSR $D40F ; control flow target $EF33:20 00 D3 JSR $D300 ; initialize a bunch of stuff $EF36:20 B1 ED JSR $EDB1 $EF39:A9 0A LDA #$0A $EF3B:20 00 E6 JSR $E600 $EF3E:A9 17 LDA #$17 $EF40:20 ED F5 JSR $F5ED $EF43:A2 20 LDX #$20 $EF45:A9 64 LDA #$64 $EF47:A0 EF LDY #$EF $EF49:20 57 EF JSR $EF57 $EF4C:20 0F D3 JSR $D30F $EF4F:A0 00 LDY #$00 $EF51:20 C9 EE JSR $EEC9 ; given Y, swap bank 6 into $8000-$BFFF and execute the Y'th function in the jump table located at $B400 $EF54:4C 33 EF JMP $EF33 ; control flow target $EF57:86 02 STX $02 $EF59:A2 10 LDX #$10 $EF5B:4C DF D2 JMP $D2DF ; unknown, probably data $EF5E:23 31 $EF60:30 11 $EF62:36 30 $EF64:0F0C170F $EF68:00 17 $EF6A:0F151523 $EF6E:24 30 BIT $30 ; definitely code $EF70:90 01 BCC $EF73 $EF72:E8 INX ; control flow target $EF73:84 09 STY $09 $EF75:85 0D STA $0D $EF77:86 0E STX $0E $EF79:60 RTS $EF7A:20 8F EF JSR $EF8F $EF7D:A5 13 LDA $13 $EF7F:85 16 STA $16 $EF81:A5 14 LDA $14 $EF83:85 17 STA $17 $EF85:60 RTS $EF86:A5 16 LDA $16 $EF88:85 13 STA $13 $EF8A:A5 17 LDA $17 $EF8C:85 14 STA $14 $EF8E:60 RTS ; control flow target $EF8F:20 5D F2 JSR $F25D $EF92:A5 11 LDA $11 ; control flow target $EF94:4A LSR $EF95:A9 08 LDA #$08 $EF97:B0 0C BCS $EFA5 $EF99:98 TYA $EF9A:18 CLC $EF9B:65 13 ADC $13 $EF9D:85 13 STA $13 $EF9F:90 02 BCC $EFA3 $EFA1:E6 14 INC $14 ; control flow target $EFA3:A9 F8 LDA #$F8 ; control flow target $EFA5:85 05 STA $05 $EFA7:29 40 AND #$40 $EFA9:85 04 STA $04 $EFAB:60 RTS $EFAC:A6 80 LDX $80 $EFAE:18 CLC $EFAF:65 80 ADC $80 $EFB1:85 80 STA $80 $EFB3:8A TXA $EFB4:48 PHA $EFB5:20 C0 EF JSR $EFC0 $EFB8:68 PLA $EFB9:85 80 STA $80 $EFBB:60 RTS ; control flow target $EFBC:86 06 STX $06 $EFBE:85 07 STA $07 ; control flow target $EFC0:A5 14 LDA $14 $EFC2:D0 20 BNE $EFE4 ; control flow target $EFC4:B1 06 LDA ($06),Y $EFC6:F0 1C BEQ $EFE4 $EFC8:C8 INY $EFC9:85 08 STA $08 $EFCB:B1 06 LDA ($06),Y $EFCD:C8 INY $EFCE:84 0C STY $0C $EFD0:A8 TAY $EFD1:A5 80 LDA $80 $EFD3:85 02 STA $02 $EFD5:20 3C F0 JSR $F03C $EFD8:A4 0C LDY $0C ; control flow target $EFDA:20 EE EF JSR $EFEE $EFDD:C6 09 DEC $09 $EFDF:F0 07 BEQ $EFE8 $EFE1:AA TAX $EFE2:F0 E0 BEQ $EFC4 ; control flow target $EFE4:C8 INY $EFE5:C8 INY $EFE6:D0 F2 BNE $EFDA ; control flow target $EFE8:60 RTS ; control flow target $EFE9:85 05 STA $05 $EFEB:20 5D F2 JSR $F25D ; control flow target $EFEE:A2 00 LDX #$00 $EFF0:A5 05 LDA $05 $EFF2:10 01 BPL $EFF5 $EFF4:CA DEX ; control flow target $EFF5:18 CLC $EFF6:65 13 ADC $13 $EFF8:85 13 STA $13 $EFFA:8A TXA $EFFB:65 14 ADC $14 $EFFD:85 14 STA $14 $EFFF:60 RTS $F000:86 06 STX $06 $F002:85 07 STA $07 $F004:A5 14 LDA $14 $F006:D0 28 BNE $F030 $F008:AA TAX ; control flow target $F009:A5 80 LDA $80 $F00B:18 CLC $F00C:61 0D ADC ($0D,X) $F00E:85 02 STA $02 $F010:B1 06 LDA ($06),Y $F012:C8 INY $F013:85 08 STA $08 $F015:B1 06 LDA ($06),Y $F017:C8 INY $F018:84 0C STY $0C $F01A:A8 TAY $F01B:20 3C F0 JSR $F03C $F01E:A4 0C LDY $0C ; control flow target $F020:20 EE EF JSR $EFEE $F023:E6 0D INC $0D $F025:D0 02 BNE $F029 $F027:E6 0E INC $0E ; control flow target $F029:C6 09 DEC $09 $F02B:F0 07 BEQ $F034 $F02D:AA TAX $F02E:F0 D9 BEQ $F009 ; control flow target $F030:C8 INY $F031:C8 INY $F032:D0 EC BNE $F020 ; control flow target $F034:60 RTS $F035:18 CLC $F036:65 80 ADC $80 $F038:85 02 STA $02 $F03A:86 08 STX $08 ; control flow target $F03C:A6 1D LDX $1D ; control flow target $F03E:20 52 F0 JSR $F052 $F041:C6 08 DEC $08 $F043:F0 0A BEQ $F04F $F045:A5 02 LDA $02 $F047:18 CLC $F048:69 08 ADC #$08 $F04A:85 02 STA $02 $F04C:C8 INY $F04D:D0 EF BNE $F03E ; control flow target $F04F:86 1D STX $1D $F051:60 RTS ; control flow target $F052:A5 02 LDA $02 ; control flow target $F054:9D 00 03 STA $0300,X $F057:B1 06 LDA ($06),Y $F059:C9 FF CMP #$FF $F05B:F0 1C BEQ $F079 $F05D:29 C0 AND #$C0 $F05F:0A ASL $F060:2A ROL $F061:2A ROL $F062:05 04 ORA $04 $F064:9D 02 03 STA $0302,X $F067:B1 06 LDA ($06),Y $F069:29 3F AND #$3F $F06B:65 81 ADC $81 $F06D:9D 01 03 STA $0301,X $F070:A5 13 LDA $13 $F072:9D 03 03 STA $0303,X $F075:E8 INX $F076:E8 INX $F077:E8 INX $F078:E8 INX ; control flow target $F079:60 RTS $F07A:86 06 STX $06 $F07C:85 07 STA $07 $F07E:A5 80 LDA $80 $F080:AA TAX $F081:18 CLC $F082:69 08 ADC #$08 $F084:24 04 BIT $04 $F086:30 06 BMI $F08E $F088:86 08 STX $08 $F08A:85 09 STA $09 $F08C:10 04 BPL $F092 ; control flow target $F08E:85 08 STA $08 $F090:86 09 STX $09 ; control flow target $F092:A9 02 LDA #$02 $F094:85 03 STA $03 $F096:A5 14 LDA $14 $F098:D0 1B BNE $F0B5 ; control flow target $F09A:A6 1D LDX $1D $F09C:A5 08 LDA $08 $F09E:20 54 F0 JSR $F054 $F0A1:C8 INY $F0A2:C8 INY $F0A3:A5 09 LDA $09 $F0A5:20 54 F0 JSR $F054 $F0A8:88 DEY $F0A9:86 1D STX $1D ; control flow target $F0AB:20 EE EF JSR $EFEE $F0AE:C6 03 DEC $03 $F0B0:F0 06 BEQ $F0B8 $F0B2:AA TAX $F0B3:F0 E5 BEQ $F09A ; control flow target $F0B5:C8 INY $F0B6:D0 F3 BNE $F0AB ; control flow target $F0B8:60 RTS $F0B9:85 04 STA $04 $F0BB:86 02 STX $02 $F0BD:20 E0 F0 JSR $F0E0 $F0C0:A5 04 LDA $04 $F0C2:49 40 EOR #$40 $F0C4:85 04 STA $04 $F0C6:A9 08 LDA #$08 $F0C8:85 05 STA $05 $F0CA:D0 09 BNE $F0D5 $F0CC:18 CLC $F0CD:65 80 ADC $80 $F0CF:85 02 STA $02 $F0D1:20 E0 F0 JSR $F0E0 $F0D4:C8 INY ; control flow target $F0D5:20 EE EF JSR $EFEE $F0D8:F0 0A BEQ $F0E4 $F0DA:60 RTS $F0DB:18 CLC $F0DC:65 80 ADC $80 $F0DE:85 02 STA $02 ; control flow target $F0E0:A5 14 LDA $14 $F0E2:D0 1E BNE $F102 ; control flow target $F0E4:A6 1D LDX $1D $F0E6:98 TYA $F0E7:18 CLC $F0E8:65 81 ADC $81 ; control flow target $F0EA:9D 01 03 STA $0301,X $F0ED:A5 02 LDA $02 $F0EF:9D 00 03 STA $0300,X $F0F2:A5 13 LDA $13 $F0F4:9D 03 03 STA $0303,X $F0F7:A5 04 LDA $04 $F0F9:9D 02 03 STA $0302,X $F0FC:E8 INX $F0FD:E8 INX $F0FE:E8 INX $F0FF:E8 INX $F100:86 1D STX $1D ; control flow target $F102:60 RTS $F103:A5 14 LDA $14 $F105:D0 FB BNE $F102 $F107:A6 1D LDX $1D $F109:98 TYA $F10A:4C EA F0 JMP $F0EA $F10D:A9 02 LDA #$02 $F10F:85 03 STA $03 $F111:A6 1D LDX $1D $F113:A5 14 LDA $14 $F115:D0 29 BNE $F140 ; control flow target $F117:98 TYA $F118:9D 01 03 STA $0301,X $F11B:9D 05 03 STA $0305,X $F11E:A5 02 LDA $02 $F120:9D 00 03 STA $0300,X $F123:18 CLC $F124:69 08 ADC #$08 $F126:9D 04 03 STA $0304,X $F129:A5 13 LDA $13 $F12B:9D 03 03 STA $0303,X $F12E:9D 07 03 STA $0307,X $F131:A5 04 LDA $04 $F133:9D 02 03 STA $0302,X $F136:49 80 EOR #$80 $F138:9D 06 03 STA $0306,X $F13B:8A TXA $F13C:18 CLC $F13D:69 08 ADC #$08 $F13F:AA TAX ; control flow target $F140:C6 03 DEC $03 $F142:F0 15 BEQ $F159 $F144:A5 04 LDA $04 $F146:49 40 EOR #$40 $F148:85 04 STA $04 $F14A:A5 13 LDA $13 $F14C:18 CLC $F14D:69 08 ADC #$08 $F14F:85 13 STA $13 $F151:A5 14 LDA $14 $F153:69 00 ADC #$00 $F155:85 14 STA $14 $F157:F0 BE BEQ $F117 ; control flow target $F159:86 1D STX $1D $F15B:60 RTS ; control flow target $F15C:A2 00 LDX #$00 $F15E:A9 04 LDA #$04 $F160:A0 C0 LDY #$C0 $F162:4C D0 D3 JMP $D3D0 ; fill (A * 256 + X) with Y #$00's ; control flow target $F165:A5 30 LDA $30 $F167:D0 34 BNE $F19D $F169:20 09 E7 JSR $E709 $F16C:A9 00 LDA #$00 $F16E:A8 TAY ; control flow target $F16F:AA TAX $F170:B1 40 LDA ($40),Y $F172:0A ASL $F173:F0 25 BEQ $F19A $F175:08 PHP $F176:4A LSR $F177:C8 INY $F178:9D 00 04 STA $0400,X $F17B:B1 40 LDA ($40),Y $F17D:C8 INY $F17E:0A ASL $F17F:0A ASL $F180:3E 03 04 ROL $0403,X $F183:0A ASL $F184:3E 03 04 ROL $0403,X $F187:9D 02 04 STA $0402,X $F18A:B1 40 LDA ($40),Y $F18C:C8 INY $F18D:9D 04 04 STA $0404,X $F190:28 PLP $F191:B0 07 BCS $F19A $F193:8A TXA $F194:69 10 ADC #$10 $F196:C9 C0 CMP #$C0 $F198:90 D5 BCC $F16F ; control flow target $F19A:20 1B F5 JSR $F51B ; control flow target $F19D:A9 00 LDA #$00 $F19F:85 76 STA $76 $F1A1:85 71 STA $71 $F1A3:8D E0 03 STA $03E0 ; control flow target $F1A6:AA TAX $F1A7:BD 00 04 LDA $0400,X $F1AA:F0 11 BEQ $F1BD $F1AC:20 F1 E6 JSR $E6F1 ; swap ROM bank 0 into the swappable RAM bank $F1AF:86 75 STX $75 $F1B1:20 8E F2 JSR $F28E $F1B4:A5 75 LDA $75 $F1B6:18 CLC $F1B7:69 10 ADC #$10 $F1B9:C9 C0 CMP #$C0 $F1BB:90 E9 BCC $F1A6 ; control flow target $F1BD:60 RTS ; control flow target $F1BE:A9 00 LDA #$00 $F1C0:85 1D STA $1D $F1C2:85 1F STA $1F $F1C4:18 CLC $F1C5:A5 28 LDA $28 $F1C7:65 29 ADC $29 $F1C9:0A ASL $F1CA:0A ASL $F1CB:26 1F ROL $1F $F1CD:0A ASL $F1CE:26 1F ROL $1F $F1D0:05 2A ORA $2A $F1D2:85 1E STA $1E $F1D4:20 F1 E6 JSR $E6F1 ; swap ROM bank 0 into the swappable RAM bank $F1D7:20 68 87 JSR $8768 ; not in this bank! $F1DA:A2 00 LDX #$00 ; control flow target $F1DC:BD 00 04 LDA $0400,X $F1DF:F0 2C BEQ $F20D $F1E1:30 73 BMI $F256 $F1E3:85 7C STA $7C $F1E5:86 75 STX $75 $F1E7:A0 00 LDY #$00 ; control flow target $F1E9:BD 01 04 LDA $0401,X $F1EC:E8 INX $F1ED:99 7D 00 STA $7D,Y $F1F0:C8 INY $F1F1:C0 0F CPY #$0F $F1F3:90 F4 BCC $F1E9 $F1F5:20 0A 90 JSR $900A ; not in this bank! $F1F8:A6 75 LDX $75 $F1FA:A0 00 LDY #$00 ; control flow target $F1FC:B9 7D 00 LDA $7D,Y $F1FF:C8 INY $F200:9D 01 04 STA $0401,X $F203:E8 INX $F204:C0 0F CPY #$0F $F206:90 F4 BCC $F1FC $F208:E8 INX ; control flow target $F209:E0 C0 CPX #$C0 $F20B:90 CF BCC $F1DC ; control flow target $F20D:A5 1D LDA $1D $F20F:F0 44 BEQ $F255 $F211:4A LSR $F212:4A LSR $F213:85 02 STA $02 $F215:A5 76 LDA $76 $F217:18 CLC $F218:69 05 ADC #$05 $F21A:C5 02 CMP $02 $F21C:90 02 BCC $F220 $F21E:A9 00 LDA #$00 ; control flow target $F220:85 76 STA $76 $F222:0A ASL $F223:0A ASL $F224:AA TAX $F225:A0 58 LDY #$58 ; control flow target $F227:BD 00 03 LDA $0300,X $F22A:99 00 02 STA $0200,Y $F22D:BD 01 03 LDA $0301,X $F230:99 01 02 STA $0201,Y $F233:BD 02 03 LDA $0302,X $F236:99 02 02 STA $0202,Y $F239:BD 03 03 LDA $0303,X $F23C:99 03 02 STA $0203,Y $F23F:C6 02 DEC $02 $F241:F0 12 BEQ $F255 $F243:C8 INY $F244:C8 INY $F245:C8 INY $F246:C8 INY $F247:F0 0C BEQ $F255 $F249:E8 INX $F24A:E8 INX $F24B:E8 INX $F24C:E8 INX $F24D:E4 1D CPX $1D $F24F:90 D6 BCC $F227 $F251:A2 00 LDX #$00 $F253:F0 D2 BEQ $F227 ; control flow target $F255:60 RTS ; control flow target $F256:8A TXA $F257:18 CLC $F258:69 10 ADC #$10 $F25A:AA TAX $F25B:D0 AC BNE $F209 ; control flow target $F25D:A5 7E LDA $7E $F25F:38 SEC $F260:E5 1E SBC $1E $F262:85 13 STA $13 $F264:A5 7F LDA $7F $F266:E5 1F SBC $1F $F268:85 14 STA $14 $F26A:60 RTS $F26B:18 CLC $F26C:65 7E ADC $7E $F26E:A4 7F LDY $7F $F270:90 01 BCC $F273 $F272:C8 INY ; control flow target $F273:38 SEC $F274:E5 63 SBC $63 $F276:AA TAX $F277:98 TYA $F278:A0 01 LDY #$01 $F27A:E5 64 SBC $64 $F27C:10 0F BPL $F28D $F27E:A8 TAY $F27F:8A TXA $F280:49 FF EOR #$FF $F282:18 CLC $F283:69 01 ADC #$01 $F285:AA TAX $F286:98 TYA $F287:A0 00 LDY #$00 $F289:49 FF EOR #$FF $F28B:69 00 ADC #$00 ; control flow target $F28D:60 RTS ; control flow target $F28E:BC 00 04 LDY $0400,X $F291:84 7C STY $7C $F293:B9 BF F2 LDA $F2BF,Y $F296:30 05 BMI $F29D $F298:F0 F3 BEQ $F28D $F29A:4C F5 E4 JMP $E4F5 ; control flow target $F29D:20 A2 D7 JSR $D7A2 ; data + unknown $F2A0:A2 88 $F2A2:8B $F2A3:8B $F2A4:A4 94 $F2A6:B0 94 $F2A8:96 99 $F2AA:8F9BDF9C $F2AE:56 9E $F2B0:1B $F2B1:A2 E3 $F2B3:A4 D4 $F2B5:A6 63 $F2B7:B6 72 $F2B9:B6 A2 $F2BB:99 DD 97 $F2BE:BB $F2BF:BB $F2C0:80 00 $F2C2:00 00 $F2C4:81 00 $F2C6:00 00 $F2C8:11 00 $F2CA:13 08 $F2CC:17 0A $F2CE:00 00 $F2D0:00 22 $F2D2:12 01 $F2D4:82 83 83 $F2D7:84 85 $F2D9:86 87 $F2DB:0E 88 89 $F2DE:8B $F2DF:8C 8A 0B $F2E2:0A $F2E3:0F20181E $F2E7:19 1A 1A $F2EA:1B $F2EB:26 1C $F2ED:1D 24 1F $F2F0:21 23 $F2F2:25 27 $F2F4:28 $F2F5:00 8E $F2F7:2A $F2F8:2B $F2F9:2B $F2FA:8D 2C 0C $F2FD:2D 2D 1A $F300:03 08 $F302:00 31 $F304:8F8F2F30 $F308:00 06 $F30A:13 ; control flow target $F30B:AD E0 03 LDA $03E0 $F30E:D0 01 BNE $F311 $F310:60 RTS ; control flow target $F311:A2 00 LDX #$00 $F313:86 23 STX $23 $F315:0A ASL $F316:AA TAX $F317:BD 25 F3 LDA $F325,X $F31A:85 02 STA $02 $F31C:BD 26 F3 LDA $F326,X $F31F:85 03 STA $03 $F321:AC E1 03 LDY $03E1 $F324:6C 02 00 JMP ($02) ; jump table $F327:88 F3 ; $F388 $F329:B6 F3 ; $F3B6 $F32B:A8 F4 ; $F4A8 $F32D:48 F3 ; $F348 $F32F:31 F3 ; $F331 ; control flow target $F331:A9 05 LDA #$05 $F333:8D E0 03 STA $03E0 $F336:A9 13 LDA #$13 $F338:8D 19 07 STA $0719 $F33B:A9 03 LDA #$03 $F33D:8D 1A 07 STA $071A $F340:A9 04 LDA #$04 $F342:8D 1B 07 STA $071B $F345:4C F9 D2 JMP $D2F9 ; $22 |= #$01 ; control flow target $F348:A2 00 LDX #$00 ; control flow target $F34A:20 72 F3 JSR $F372 $F34D:E0 06 CPX #$06 $F34F:90 F9 BCC $F34A $F351:B0 1C BCS $F36F $F353:A6 87 LDX $87 $F355:D0 05 BNE $F35C $F357:24 71 BIT $71 $F359:70 01 BVS $F35C $F35B:60 RTS ; control flow target $F35C:A9 04 LDA #$04 $F35E:8D E0 03 STA $03E0 $F361:20 72 F3 JSR $F372 $F364:86 87 STX $87 $F366:E0 06 CPX #$06 $F368:90 05 BCC $F36F $F36A:A6 75 LDX $75 $F36C:7E 00 04 ROR $0400,X ; control flow target $F36F:4C F9 D2 JMP $D2F9 ; $22 |= #$01 ; control flow target $F372:8A TXA $F373:A8 TAY $F374:C0 03 CPY #$03 $F376:90 01 BCC $F379 $F378:C8 INY ; control flow target $F379:C8 INY $F37A:BD 82 F3 LDA $F382,X $F37D:99 10 07 STA $0710,Y $F380:E8 INX $F381:60 RTS ; unknown, probably data $F382:0112 $F384:220F $F386:0010 ; control flow target $F388:A9 01 LDA #$01 $F38A:20 5C F4 JSR $F45C $F38D:A6 DF LDX $DF ; location $F38F:BD 3A F4 LDA $F43A,X $F392:08 PHP $F393:29 3F AND #$3F $F395:AA TAX $F396:91 02 STA ($02),Y $F398:98 TYA $F399:18 CLC $F39A:69 30 ADC #$30 $F39C:A8 TAY $F39D:90 02 BCC $F3A1 $F39F:E6 03 INC $03 ; control flow target $F3A1:28 PLP $F3A2:10 01 BPL $F3A5 $F3A4:E8 INX ; control flow target $F3A5:8A TXA $F3A6:91 02 STA ($02),Y $F3A8:A0 00 LDY #$00 $F3AA:20 F7 F4 JSR $F4F7 $F3AD:20 81 F4 JSR $F481 $F3B0:20 DC F3 JSR $F3DC $F3B3:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | $#80 ; control flow target $F3B6:A9 02 LDA #$02 $F3B8:20 5C F4 JSR $F45C $F3BB:A9 27 LDA #$27 $F3BD:A2 04 LDX #$04 ; control flow target $F3BF:91 02 STA ($02),Y $F3C1:C8 INY $F3C2:CA DEX $F3C3:D0 FA BNE $F3BF $F3C5:A0 01 LDY #$01 $F3C7:20 F7 F4 JSR $F4F7 $F3CA:20 81 F4 JSR $F481 $F3CD:A6 23 LDX $23 $F3CF:20 1B F4 JSR $F41B $F3D2:A9 48 LDA #$48 $F3D4:A0 24 LDY #$24 $F3D6:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $F3D9:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; control flow target $F3DC:A6 23 LDX $23 $F3DE:A4 DF LDY $DF ; location $F3E0:B9 43 F4 LDA $F443,Y $F3E3:10 13 BPL $F3F8 $F3E5:20 EE F3 JSR $F3EE $F3E8:E6 02 INC $02 $F3EA:D0 02 BNE $F3EE $F3EC:E6 03 INC $03 ; control flow target $F3EE:20 1B F4 JSR $F41B $F3F1:A9 C4 LDA #$C4 $F3F3:A0 7F LDY #$7F $F3F5:4C 21 D7 JMP $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX ; control flow target $F3F8:20 01 F4 JSR $F401 $F3FB:E6 02 INC $02 $F3FD:D0 02 BNE $F401 $F3FF:E6 03 INC $03 ; control flow target $F401:48 PHA $F402:20 1B F4 JSR $F41B $F405:68 PLA $F406:A8 TAY $F407:A9 84 LDA #$84 $F409:20 26 D7 JSR $D726 ; STA $0730,X, INX ; control flow target $F40C:B9 4C F4 LDA $F44C,Y $F40F:C8 INY $F410:9D 30 07 STA $0730,X $F413:E8 INX $F414:98 TYA $F415:29 03 AND #$03 $F417:D0 F3 BNE $F40C $F419:98 TYA $F41A:60 RTS ; control flow target $F41B:A5 03 LDA $03 $F41D:A4 02 LDY $02 $F41F:4C 21 D7 JMP $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX ; data + unknown $F422:22580404 $F426:26 16 $F428:56 28 $F42A:1A $F42B:38 $F42C:58 $F42D:26 80 $F42F:80 A0 $F431:80 A0 $F433:A0 30 $F435:60 $F436:70 20 $F438:80 80 $F43A:3F3FB63F $F43E:BE 3F 3F $F441:3F338080 $F445:00 80 $F447:08 $F448:80 80 $F44A:80 80 $F44C:30 31 $F44E:31 31 $F450:32 33 $F452:33 33 $F454:7F7F7F09 $F458:7F7F7F0A ; control flow target $F45C:8D E0 03 STA $03E0 $F45F:8C E1 03 STY $03E1 $F462:A9 05 LDA #$05 $F464:85 03 STA $03 $F466:B9 2E F4 LDA $F42E,Y $F469:85 06 STA $06 $F46B:0A ASL $F46C:90 02 BCC $F470 $F46E:E6 03 INC $03 ; control flow target $F470:18 CLC $F471:65 06 ADC $06 $F473:90 02 BCC $F477 $F475:E6 03 INC $03 ; control flow target $F477:85 02 STA $02 $F479:B9 22 F4 LDA $F422,Y $F47C:85 05 STA $05 $F47E:4A LSR $F47F:A8 TAY $F480:60 RTS ; control flow target $F481:A9 00 LDA #$00 $F483:85 03 STA $03 $F485:A5 06 LDA $06 $F487:18 CLC $F488:69 30 ADC #$30 $F48A:0A ASL $F48B:26 03 ROL $03 $F48D:0A ASL $F48E:26 03 ROL $03 $F490:85 02 STA $02 $F492:A5 05 LDA $05 $F494:29 1F AND #$1F $F496:18 CLC $F497:65 02 ADC $02 $F499:85 02 STA $02 $F49B:A9 20 LDA #$20 $F49D:24 05 BIT $05 $F49F:F0 02 BEQ $F4A3 $F4A1:A9 24 LDA #$24 ; control flow target $F4A3:65 03 ADC $03 $F4A5:85 03 STA $03 $F4A7:60 RTS ; control flow target $F4A8:A9 03 LDA #$03 $F4AA:20 5C F4 JSR $F45C $F4AD:A9 3C LDA #$3C $F4AF:91 02 STA ($02),Y $F4B1:C8 INY $F4B2:A9 13 LDA #$13 $F4B4:91 02 STA ($02),Y $F4B6:A0 02 LDY #$02 $F4B8:20 F7 F4 JSR $F4F7 $F4BB:20 81 F4 JSR $F481 $F4BE:A6 23 LDX $23 $F4C0:20 1B F4 JSR $F41B $F4C3:A0 00 LDY #$00 $F4C5:20 DD F4 JSR $F4DD $F4C8:A5 02 LDA $02 $F4CA:18 CLC $F4CB:69 20 ADC #$20 $F4CD:A8 TAY $F4CE:A9 00 LDA #$00 $F4D0:65 03 ADC $03 $F4D2:20 21 D7 JSR $D721 ; STA $0730,X, INX, TYA, STA $0730,X, INX $F4D5:A0 04 LDY #$04 $F4D7:20 DD F4 JSR $F4DD $F4DA:4C 2E D7 JMP $D72E ; $23 = X, $0730,X = #$80, $22 = $22 | #$80 ; control flow target $F4DD:A9 04 LDA #$04 $F4DF:20 26 D7 JSR $D726 ; STA $0730,X, INX ; control flow target $F4E2:B9 EF F4 LDA $F4EF,Y $F4E5:20 26 D7 JSR $D726 ; STA $0730,X, INX $F4E8:C8 INY $F4E9:98 TYA $F4EA:29 03 AND #$03 $F4EC:D0 F4 BNE $F4E2 $F4EE:60 RTS ; data $F4EF:69 6C $F4F1:6B $F4F2:01 0D $F4F4:0C 0C 36 ; control flow target $F4F7:A5 05 LDA $05 $F4F9:38 SEC $F4FA:E5 28 SBC $28 $F4FC:D9 08 F5 CMP $F508,Y $F4FF:B0 06 BCS $F507 $F501:C9 21 CMP #$21 $F503:90 02 BCC $F507 $F505:68 PLA $F506:68 PLA ; control flow target $F507:60 RTS ; data $F508:FFF8FC ; control flow target $F50B:A9 01 LDA #$01 $F50D:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $F510:8A TXA $F511:18 CLC $F512:65 DF ADC $DF ; location $F514:0A ASL $F515:AA TAX $F516:A5 2F LDA $2F $F518:4C 4B D7 JMP $D74B ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate ; control flow target $F51B:A2 06 LDX #$06 $F51D:20 0B F5 JSR $F50B $F520:48 PHA $F521:A0 11 LDY #$11 $F523:20 31 F5 JSR $F531 $F526:68 PLA $F527:AA TAX $F528:C8 INY $F529:20 31 F5 JSR $F531 $F52C:A9 01 LDA #$01 $F52E:4C DE D3 JMP $D3DE ; $22 = A | $22 ; control flow target $F531:BD 3F F5 LDA $F53F,X $F534:E8 INX $F535:99 10 07 STA $0710,Y $F538:C8 INY $F539:98 TYA $F53A:29 03 AND #$03 $F53C:D0 F3 BNE $F531 $F53E:60 RTS ; data $F53F:0222 $F541:300F $F543:18 $F544:28 $F545:0F302804 $F549:1528 $F54B:0F23300F $F54F:0010 $F551:0F132408 $F555:28 $F556:3703 $F558:2330 $F55A:0F06160F $F55E:1628 $F560:0F140000 $F564:1410 $F566:0F22310F $F56A:1434 $F56C:08 $F56D:2737 $F56F:0626 $F571:300F $F573:2438 $F575:0F2C3808 $F579:1728 $F57B:0F1C2B0F $F57F:2337 $F581:0F24300F $F585:1729 $F587:0F13380F $F58B:0038 $F58D:142C $F58F:300A $F591:1A $F592:28 $F593:0300 $F595:3316 $F597:2519 $F599:0F10300F $F59D:1230 $F59F:08 $F5A0:18 $F5A1:300F $F5A3:0F0F0031 $F5A7:3000 $F5A9:2131 $F5AB:0201 $F5AD:0208 $F5AF:0406 $F5B1:0407 $F5B3:0505 $F5B5:FFA91620 $F5B9:EDF54C $F5BC:F1E6 ; control flow target $F5BE:A6 30 LDX $30 $F5C0:CA DEX $F5C1:D0 04 BNE $F5C7 $F5C3:A9 0E LDA #$0E $F5C5:D0 26 BNE $F5ED ; control flow target $F5C7:A5 DF LDA $DF ; location $F5C9:C9 0B CMP #$0B $F5CB:D0 08 BNE $F5D5 $F5CD:24 F4 BIT $F4 $F5CF:50 04 BVC $F5D5 $F5D1:A9 18 LDA #$18 $F5D3:D0 18 BNE $F5ED ; control flow target $F5D5:A2 00 LDX #$00 ; control flow target $F5D7:A5 DF LDA $DF ; location $F5D9:DD AB F5 CMP $F5AB,X $F5DC:90 0F BCC $F5ED $F5DE:D0 07 BNE $F5E7 $F5E0:A5 2F LDA $2F $F5E2:DD AC F5 CMP $F5AC,X $F5E5:F0 04 BEQ $F5EB ; control flow target $F5E7:E8 INX $F5E8:E8 INX $F5E9:D0 EC BNE $F5D7 ; control flow target $F5EB:A9 13 LDA #$13 ; control flow target $F5ED:C5 F5 CMP $F5 $F5EF:F0 44 BEQ $F635 ; control flow target $F5F1:85 F5 STA $F5 $F5F3:A9 06 LDA #$06 $F5F5:20 0B E7 JSR $E70B ; swap bank given by A into $8000-$BFFF $F5F8:A2 02 LDX #$02 $F5FA:A5 F5 LDA $F5 $F5FC:20 4B D7 JSR $D74B ; given A and X, set $02-$03 to $8000,X-$8001,X, then set X to ($8000),(A*2) and A to ($8001),(A*2), and INC $03 as appropriate $F5FF:86 AD STX $AD $F601:85 AE STA $AE $F603:20 52 F6 JSR $F652 ; STZ to $8E, $94-$97, $99-$9A, pAPU stuff $F606:A0 03 LDY #$03 $F608:A2 00 LDX #$00 ; control flow target $F60A:C0 02 CPY #$02 $F60C:B0 08 BCS $F616 $F60E:A9 FF LDA #$FF $F610:99 2B 01 STA $012B,Y $F613:99 43 01 STA $0143,Y ; control flow target $F616:8A TXA $F617:99 9D 00 STA $9D,Y $F61A:99 19 01 STA $0119,Y $F61D:99 1D 01 STA $011D,Y $F620:B9 AC F8 LDA $F8AC,Y $F623:99 21 01 STA $0121,Y $F626:88 DEY $F627:10 E1 BPL $F60A $F629:20 7F F7 JSR $F77F ; control flow target $F62C:A9 03 LDA #$03 ; control flow target $F62E:85 8E STA $8E $F630:A9 0F LDA #$0F $F632:8D 15 40 STA $4015 ; pAPU Sound/Vertical Clock Signal Register ; control flow target $F635:60 RTS ; control flow target $F636:A9 01 LDA #$01 $F638:D0 F4 BNE $F62E $F63A:A5 F5 LDA $F5 $F63C:C9 15 CMP #$15 $F63E:F0 F5 BEQ $F635 $F640:C9 0C CMP #$0C $F642:F0 F1 BEQ $F635 $F644:C9 14 CMP #$14 $F646:F0 ED BEQ $F635 $F648:A9 15 LDA #$15 $F64A:20 F1 F5 JSR $F5F1 $F64D:68 PLA $F64E:68 PLA $F64F:4C F1 E6 JMP $E6F1 ; swap ROM bank 0 into the swappable RAM bank ; control flow target $F652:A9 00 LDA #$00 ; STZ to $95-$97 $F654:85 95 STA $95 $F656:85 96 STA $96 $F658:85 97 STA $97 ; this happens during IRQ ; control flow target $F65A:A9 00 LDA #$00 ; STZ to $8E, $94, $99-$9A, pAPU stuff $F65C:85 8E STA $8E $F65E:85 94 STA $94 $F660:85 99 STA $99 $F662:85 9A STA $9A $F664:8D 11 40 STA $4011 ; pAPU Delta Modulation D/A Register $F667:8D 15 40 STA $4015 ; pAPU Channel Control ; control flow target $F66A:60 RTS ; this happens during IRQ ; control flow target $F66B:A5 8E LDA $8E $F66D:F0 FB BEQ $F66A $F66F:A9 06 LDA #$06 $F671:20 0D E7 JSR $E70D $F674:A5 99 LDA $99 $F676:F0 50 BEQ $F6C8 $F678:C5 9A CMP $9A $F67A:90 48 BCC $F6C4 $F67C:85 9A STA $9A $F67E:0A ASL $F67F:A8 TAY $F680:B9 1B FA LDA $FA1B,Y $F683:85 8F STA $8F $F685:B9 1C FA LDA $FA1C,Y $F688:85 90 STA $90 $F68A:A0 00 LDY #$00 $F68C:B1 8F LDA ($8F),Y $F68E:85 91 STA $91 $F690:05 94 ORA $94 $F692:85 94 STA $94 $F694:C8 INY $F695:A2 00 LDX #$00 ; control flow target $F697:46 91 LSR $91 $F699:90 23 BCC $F6BE $F69B:B1 8F LDA ($8F),Y $F69D:C8 INY $F69E:95 CF STA $CF,X $F6A0:B1 8F LDA ($8F),Y $F6A2:C8 INY $F6A3:95 D0 STA $D0,X $F6A5:E0 04 CPX #$04 $F6A7:B0 15 BCS $F6BE $F6A9:8A TXA $F6AA:48 PHA $F6AB:4A LSR $F6AC:AA TAX $F6AD:A9 FF LDA #$FF $F6AF:9D 2B 01 STA $012B,X $F6B2:9D 2F 01 STA $012F,X $F6B5:9D 47 01 STA $0147,X $F6B8:A9 00 LDA #$00 $F6BA:95 A1 STA $A1,X $F6BC:68 PLA $F6BD:AA TAX ; control flow target $F6BE:E8 INX $F6BF:E8 INX $F6C0:E0 08 CPX #$08 $F6C2:90 D3 BCC $F697 ; control flow target $F6C4:A9 00 LDA #$00 $F6C6:85 99 STA $99 ; control flow target $F6C8:A5 9A LDA $9A $F6CA:F0 56 BEQ $F722 $F6CC:A9 00 LDA #$00 $F6CE:85 9C STA $9C $F6D0:A5 97 LDA $97 $F6D2:48 PHA $F6D3:A9 88 LDA #$88 $F6D5:A0 07 LDY #$07 ; control flow target $F6D7:24 94 BIT $94 $F6D9:F0 40 BEQ $F71B $F6DB:85 9B STA $9B $F6DD:A9 00 LDA #$00 $F6DF:85 97 STA $97 $F6E1:98 TYA $F6E2:29 03 AND #$03 $F6E4:0A ASL $F6E5:0A ASL $F6E6:85 93 STA $93 $F6E8:B6 9D LDX $9D,Y $F6EA:F0 05 BEQ $F6F1 $F6EC:CA DEX $F6ED:96 9D STX $9D,Y $F6EF:D0 21 BNE $F712 ; control flow target $F6F1:84 92 STY $92 $F6F3:4A LSR $F6F4:09 20 ORA #$20 $F6F6:AA TAX $F6F7:20 AB F7 JSR $F7AB $F6FA:A5 97 LDA $97 $F6FC:F0 14 BEQ $F712 $F6FE:A6 93 LDX $93 $F700:B9 A5 F8 LDA $F8A5,Y $F703:9D 00 40 STA $4000,X ; probably some pAPU register $F706:A5 97 LDA $97 $F708:45 94 EOR $94 $F70A:85 94 STA $94 $F70C:D0 0B BNE $F719 $F70E:85 9A STA $9A $F710:F0 0D BEQ $F71F ; control flow target $F712:C0 06 CPY #$06 $F714:B0 03 BCS $F719 $F716:20 AC F9 JSR $F9AC ; control flow target $F719:A5 9B LDA $9B ; control flow target $F71B:88 DEY $F71C:4A LSR $F71D:90 B8 BCC $F6D7 ; control flow target $F71F:68 PLA $F720:85 97 STA $97 ; control flow target $F722:A5 8E LDA $8E $F724:4A LSR $F725:F0 48 BEQ $F76F $F727:A5 97 LDA $97 ; control flow target $F729:05 96 ORA $96 $F72B:05 95 ORA $95 $F72D:85 98 STA $98 $F72F:A9 88 LDA #$88 $F731:A0 03 LDY #$03 ; control flow target $F733:24 98 BIT $98 $F735:D0 22 BNE $F759 $F737:85 9B STA $9B $F739:25 94 AND $94 $F73B:85 9C STA $9C $F73D:98 TYA $F73E:0A ASL $F73F:0A ASL $F740:85 93 STA $93 $F742:B6 9D LDX $9D,Y $F744:F0 05 BEQ $F74B $F746:CA DEX $F747:96 9D STX $9D,Y $F749:D0 05 BNE $F750 ; control flow target $F74B:84 92 STY $92 $F74D:20 A6 F7 JSR $F7A6 ; control flow target $F750:C0 02 CPY #$02 $F752:B0 03 BCS $F757 $F754:20 AC F9 JSR $F9AC ; control flow target $F757:A5 9B LDA $9B ; control flow target $F759:4A LSR $F75A:88 DEY $F75B:10 D6 BPL $F733 $F75D:A5 95 LDA $95 $F75F:C9 FF CMP #$FF $F761:F0 17 BEQ $F77A $F763:05 96 ORA $96 $F765:C9 FF CMP #$FF $F767:F0 16 BEQ $F77F $F769:05 97 ORA $97 $F76B:C9 FF CMP #$FF $F76D:F0 05 BEQ $F774 ; control flow target $F76F:A5 2D LDA $2D $F771:4C 0D E7 JMP $E70D ; this happens during IRQ ; control flow target $F774:A9 00 LDA #$00 $F776:85 97 STA $97 $F778:F0 AF BEQ $F729 ; control flow target $F77A:20 5A F6 JSR $F65A ; STZ to $8E, $94, $99-$9A, pAPU stuff $F77D:F0 F0 BEQ $F76F ; control flow target $F77F:A5 95 LDA $95 $F781:85 93 STA $93 $F783:A9 00 LDA #$00 $F785:85 96 STA $96 $F787:A8 TAY ; control flow target $F788:46 93 LSR $93 $F78A:B0 16 BCS $F7A2 $F78C:AA TAX $F78D:B1 AD LDA ($AD),Y $F78F:95 AF STA $AF,X $F791:C8 INY $F792:B1 AD LDA ($AD),Y $F794:95 B0 STA $B0,X $F796:C8 INY $F797:8A TXA ; control flow target $F798:18 CLC $F799:69 08 ADC #$08 $F79B:C9 20 CMP #$20 $F79D:90 E9 BCC $F788 $F79F:4C 6F F7 JMP $F76F ; this happens during IRQ ; control flow target $F7A2:C8 INY $F7A3:C8 INY $F7A4:D0 F2 BNE $F798 ; this happens during IRQ ; control flow target $F7A6:19 19 01 ORA $0119,Y $F7A9:0A ASL $F7AA:AA TAX ; control flow target $F7AB:20 79 F8 JSR $F879 $F7AE:C9 0C CMP #$0C $F7B0:90 06 BCC $F7B8 $F7B2:20 38 F8 JSR $F838 $F7B5:B0 F4 BCS $F7AB $F7B7:60 RTS ; this happens during IRQ ; control flow target $F7B8:BE 09 01 LDX $0109,Y $F7BB:96 9D STX $9D,Y $F7BD:86 8F STX $8F $F7BF:A6 9C LDX $9C $F7C1:D0 56 BNE $F819 $F7C3:24 9B BIT $9B $F7C5:30 53 BMI $F81A $F7C7:0A ASL $F7C8:AA TAX $F7C9:BD 95 F9 LDA $F995,X $F7CC:85 90 STA $90 $F7CE:BD 94 F9 LDA $F994,X $F7D1:BE 11 01 LDX $0111,Y $F7D4:F0 06 BEQ $F7DC ; control flow target $F7D6:46 90 LSR $90 $F7D8:6A ROR $F7D9:CA DEX $F7DA:D0 FA BNE $F7D6 ; control flow target $F7DC:A6 93 LDX $93 $F7DE:9D 02 40 STA $4002,X ; probably some pAPU register $F7E1:A5 90 LDA $90 $F7E3:09 08 ORA #$08 $F7E5:9D 03 40 STA $4003,X ; probably some pAPU register $F7E8:24 9B BIT $9B $F7EA:70 3D BVS $F829 $F7EC:B9 29 01 LDA $0129,Y $F7EF:9D 01 40 STA $4001,X ; probably some pAPU register $F7F2:A9 00 LDA #$00 $F7F4:BE 2B 01 LDX $012B,Y $F7F7:E0 03 CPX #$03 $F7F9:90 06 BCC $F801 $F7FB:99 2B 01 STA $012B,Y $F7FE:99 A7 00 STA $A7,Y ; control flow target $F801:BE 3B 01 LDX $013B,Y $F804:86 90 STX $90 $F806:85 91 STA $91 $F808:A2 08 LDX #$08 ; control flow target $F80A:46 8F LSR $8F $F80C:90 02 BCC $F810 $F80E:65 90 ADC $90 ; control flow target $F810:6A ROR $F811:66 91 ROR $91 $F813:CA DEX $F814:D0 F4 BNE $F80A $F816:99 A5 00 STA $A5,Y ; control flow target $F819:60 RTS ; this happens during IRQ ; control flow target $F81A:8D 0E 40 STA $400E ; pAPU Noise Frequency Register #1 $F81D:AD 24 01 LDA $0124 $F820:8D 0C 40 STA $400C ; pAPU Noise Control Register #1 $F823:A9 08 LDA #$08 $F825:8D 0F 40 STA $400F ; pAPU Noise Frequency Register #2 $F828:60 RTS ; this happens during IRQ ; control flow target $F829:AD 23 01 LDA $0123 $F82C:8D 08 40 STA $4008 ; pAPU Triangle Control Register #1 $F82F:60 RTS ; this happens during IRQ ; control flow target $F830:38 SEC $F831:E9 20 SBC #$20 $F833:99 09 01 STA $0109,Y $F836:38 SEC $F837:60 RTS ; this happens during IRQ ; control flow target $F838:C9 20 CMP #$20 $F83A:B0 F4 BCS $F830 $F83C:38 SEC $F83D:E9 0C SBC #$0C $F83F:0A ASL $F840:A8 TAY $F841:B9 51 F8 LDA $F851,Y $F844:85 8F STA $8F $F846:B9 52 F8 LDA $F852,Y $F849:85 90 STA $90 $F84B:A4 92 LDY $92 $F84D:38 SEC $F84E:6C 8F 00 JMP ($8F) ; jump table $F851:82 F8 ; $F882 $F853:C5 F8 ; $F8C5 $F855:CC F8 ; $F8CC $F857:D6 F8 ; $F8D6 $F859:E0 F8 ; $F8E0 $F85B:FF F8 ; $F8FF $F85D:06 F9 ; $F906 $F85F:0D F9 ; $F90D $F861:14 F9 ; $F914 $F863:F8 F8 ; $F8F8 $F865:22 F9 ; $F922 $F867:38 F9 ; $F938 $F869:44 F9 ; $F944 $F86B:5E F9 ; $F95E $F86D:8C F9 ; $F98C $F86F:84 F9 ; $F984 $F871:7C F9 ; $F97C $F873:B4 F8 ; $F8B4 $F875:BE F8 ; $F8BE $F877:1B F9 ; $F91B ; this happens during IRQ ; control flow target $F879:A1 AF LDA ($AF,X) $F87B:F6 AF INC $AF,X $F87D:D0 02 BNE $F881 $F87F:F6 B0 INC $B0,X ; control flow target $F881:60 RTS ; this happens during IRQ ; control flow target $F882:B9 09 01 LDA $0109,Y $F885:99 9D 00 STA $9D,Y $F888:A5 9C LDA $9C $F88A:D0 08 BNE $F894 $F88C:A6 93 LDX $93 $F88E:B9 A5 F8 LDA $F8A5,Y $F891:9D 00 40 STA $4000,X ; probably some pAPU register ; control flow target $F894:A5 9B LDA $9B $F896:29 03 AND #$03 $F898:F0 09 BEQ $F8A3 $F89A:A9 80 LDA #$80 $F89C:99 2B 01 STA $012B,Y $F89F:0A ASL $F8A0:99 A7 00 STA $A7,Y ; control flow target $F8A3:18 CLC $F8A4:60 RTS ; data $F8A5:3030 $F8A7:0030 $F8A9:3030 $F8AB:0030 $F8AD:3000 $F8AF:0030 $F8B1:3000 $F8B3:00 ; this happens during IRQ ; control flow target $F8B4:20 79 F8 JSR $F879 $F8B7:19 AC F8 ORA $F8AC,Y $F8BA:99 21 01 STA $0121,Y $F8BD:60 RTS ; this happens during IRQ ; control flow target $F8BE:20 79 F8 JSR $F879 $F8C1:99 29 01 STA $0129,Y $F8C4:60 RTS ; this happens during IRQ ; control flow target $F8C5:20 79 F8 JSR $F879 $F8C8:99 11 01 STA $0111,Y $F8CB:60 RTS ; this happens during IRQ ; control flow target $F8CC:A9 00 LDA #$00 $F8CE:79 11 01 ADC $0111,Y $F8D1:99 11 01 STA $0111,Y $F8D4:38 SEC $F8D5:60 RTS ; this happens during IRQ ; control flow target $F8D6:B9 11 01 LDA $0111,Y $F8D9:E9 01 SBC #$01 $F8DB:99 11 01 STA $0111,Y $F8DE:38 SEC $F8DF:60 RTS ; this happens during IRQ ; control flow target $F8E0:20 79 F8 JSR $F879 $F8E3:99 31 01 STA $0131,Y $F8E6:20 79 F8 JSR $F879 $F8E9:99 33 01 STA $0133,Y $F8EC:20 79 F8 JSR $F879 $F8EF:99 39 01 STA $0139,Y $F8F2:20 79 F8 JSR $F879 $F8F5:99 3B 01 STA $013B,Y ; control flow target $F8F8:20 79 F8 JSR $F879 $F8FB:99 41 01 STA $0141,Y $F8FE:60 RTS ; this happens during IRQ ; control flow target $F8FF:20 79 F8 JSR $F879 $F902:99 31 01 STA $0131,Y $F905:60 RTS ; this happens during IRQ ; control flow target $F906:20 79 F8 JSR $F879 $F909:99 33 01 STA $0133,Y $F90C:60 RTS ; this happens during IRQ ; control flow target $F90D:20 79 F8 JSR $F879 $F910:99 39 01 STA $0139,Y $F913:60 RTS ; this happens during IRQ ; control flow target $F914:20 79 F8 JSR $F879 $F917:99 3B 01 STA $013B,Y $F91A:60 RTS ; this happens during IRQ ; control flow target $F91B:20 79 F8 JSR $F879 $F91E:99 43 01 STA $0143,Y $F921:60 RTS ; this happens during IRQ ; control flow target $F922:20 79 F8 JSR $F879 $F925:95 B1 STA $B1,X $F927:20 79 F8 JSR $F879 $F92A:95 B2 STA $B2,X $F92C:B9 19 01 LDA $0119,Y $F92F:69 00 ADC #$00 $F931:99 19 01 STA $0119,Y $F934:E8 INX $F935:E8 INX $F936:38 SEC $F937:60 RTS ; this happens during IRQ ; control flow target $F938:B9 19 01 LDA $0119,Y $F93B:E9 01 SBC #$01 $F93D:99 19 01 STA $0119,Y $F940:CA DEX $F941:CA DEX $F942:38 SEC $F943:60 RTS ; this happens during IRQ ; control flow target $F944:20 79 F8 JSR $F879 $F947:99 1D 01 STA $011D,Y $F94A:B9 19 01 LDA $0119,Y $F94D:69 00 ADC #$00 $F94F:99 19 01 STA $0119,Y ; control flow target $F952:B5 AF LDA $AF,X $F954:95 B1 STA $B1,X $F956:B5 B0 LDA $B0,X $F958:95 B2 STA $B2,X $F95A:E8 INX $F95B:E8 INX $F95C:38 SEC $F95D:60 RTS ; this happens during IRQ ; control flow target $F95E:CA DEX $F95F:CA DEX $F960:B9 1D 01 LDA $011D,Y $F963:E9 01 SBC #$01 $F965:99 1D 01 STA $011D,Y $F968:D0 E8 BNE $F952 $F96A:B9 19 01 LDA $0119,Y $F96D:E9 01 SBC #$01 $F96F:99 19 01 STA $0119,Y $F972:B5 B1 LDA $B1,X $F974:95 AF STA $AF,X $F976:B5 B2 LDA $B2,X $F978:95 B0 STA $B0,X $F97A:38 SEC $F97B:60 RTS ; this happens during IRQ ; control flow target $F97C:A5 9B LDA $9B $F97E:05 95 ORA $95 $F980:85 95 STA $95 $F982:18 CLC $F983:60 RTS ; this happens during IRQ ; control flow target $F984:A5 9B LDA $9B $F986:05 96 ORA $96 $F988:85 96 STA $96 $F98A:18 CLC $F98B:60 RTS ; this happens during IRQ ; control flow target $F98C:A5 9B LDA $9B $F98E:05 97 ORA $97 $F990:85 97 STA $97 $F992:18 CLC $F993:60 RTS ; data $F994:B006 $F996:5006 $F998:F405A0 $F99B:054C $F99D:0500 $F99F:05B8 $F9A1:0474 $F9A3:0434 $F9A5:04F8 $F9A7:03C0 $F9A9:0388 $F9AB:03 ; this happens during IRQ ; control flow target $F9AC:BE 2B 01 LDX $012B,Y $F9AF:30 45 BMI $F9F6 $F9B1:F0 17 BEQ $F9CA $F9B3:CA DEX $F9B4:F0 41 BEQ $F9F7 $F9B6:CA DEX $F9B7:F0 56 BEQ $FA0F $F9B9:B9 A7 00 LDA $A7,Y $F9BC:38 SEC $F9BD:F9 41 01 SBC $0141,Y $F9C0:B0 25 BCS $F9E7 $F9C2:A9 80 LDA #$80 $F9C4:99 2B 01 STA $012B,Y $F9C7:0A ASL $F9C8:F0 1D BEQ $F9E7 ; control flow target $F9CA:B9 31 01 LDA $0131,Y $F9CD:18 CLC $F9CE:79 A7 00 ADC $A7,Y $F9D1:B0 05 BCS $F9D8 $F9D3:D9 43 01 CMP $0143,Y $F9D6:90 08 BCC $F9E0 ; control flow target $F9D8:A9 01 LDA #$01 $F9DA:99 2B 01 STA $012B,Y $F9DD:B9 43 01 LDA $0143,Y ; control flow target $F9E0:B6 A5 LDX $A5,Y $F9E2:F0 03 BEQ $F9E7 $F9E4:CA DEX $F9E5:96 A5 STX $A5,Y ; control flow target $F9E7:99 A7 00 STA $A7,Y $F9EA:4A LSR $F9EB:4A LSR $F9EC:4A LSR $F9ED:4A LSR $F9EE:19 21 01 ORA $0121,Y $F9F1:A6 93 LDX $93 $F9F3:9D 00 40 STA $4000,X ; probably some pAPU register ; control flow target $F9F6:60 RTS ; this happens during IRQ ; control flow target $F9F7:B9 A7 00 LDA $A7,Y $F9FA:38 SEC $F9FB:F9 33 01 SBC $0133,Y $F9FE:90 05 BCC $FA05 $FA00:D9 39 01 CMP $0139,Y $FA03:B0 DB BCS $F9E0 ; control flow target $FA05:A9 02 LDA #$02 $FA07:99 2B 01 STA $012B,Y $FA0A:B9 39 01 LDA $0139,Y $FA0D:90 D1 BCC $F9E0 ; control flow target $FA0F:B6 A5 LDX $A5,Y $FA11:F0 04 BEQ $FA17 $FA13:CA DEX $FA14:96 A5 STX $A5,Y $FA16:60 RTS ; this happens during IRQ ; control flow target $FA17:A9 03 LDA #$03 $FA19:99 2B 01 STA $012B,Y $FA1C:60 RTS ; data $FA1D:3FFA ; $FA3F $FA1F:57FA ; $FA57 $FA21:5AFA ; $FA5A $FA23:4EFA ; $FA4E $FA25:42FA ; $FA42 $FA27:45FA ; $FA45 $FA29:5DFA ; $FA5D $FA2B:4BFA ; $FA4B $FA2D:48FA ; $FA48 $FA2F:51FA ; $FA51 $FA31:54FA ; $FA54 $FA33:60FA ; $FA60 $FA35:63FA ; $FA63 $FA37:66FA ; $FA66 $FA39:6BFA ; $FA6B $FA3B:6EFA ; $FA6E $FA3D:71FA ; $FA71 $FA3F:88 $FA40:8BFA ; $FA8B $FA42:22 $FA43:74FA ; $FA74 $FA45:88 $FA46:92FA ; $FA92 $FA48:22 $FA49:9AFA ; $FA9A $FA4B:22 $FA4C:20FB ; $FB20 $FA4E:22 $FA4F:BEFA ; $FABE $FA51:22 $FA52:D7FA ; $FAD7 $FA54:22 $FA55:F5FA ; $FAF5 $FA57:88 $FA58:3EFB ; $FB3E $FA5A:88 $FA5B:58FB ; $FB58 $FA5D:22 $FA5E:65FB ; $FB65 $FA60:22 $FA61:C9FB ; $FBC9 $FA63:88 $FA64:F7FB ; $FBF7 $FA66:AA $FA67:03FC ; $FC03 $FA69:17FC ; $FC17 $FA6B:22 $FA6C:29FC ; $FC29 $FA6E:22 $FA6F:3BFC ; $FC3B $FA71:22 $FA72:56FC ; $FC56 $FA74:1D80 $FA76:1E0010 $FA79:FF01FF20 $FA7D:100D $FA7F:0421 $FA81:0709 $FA83:0709 $FA85:0709 $FA87:0E4002 $FA8A:1A $FA8B:1D3622 $FA8E:0203 $FA90:08 $FA91:1A $FA92:1D0324 $FA95:0A $FA96:0508 $FA98:031A $FA9A:1D8010 $FA9D:FA $FA9E:FA $FA9F:FA $FAA0:1414 $FAA2:1ED422 $FAA5:0D0404 $FAA8:0D0100 $FAAB:0D0404 $FAAE:0D0100 $FAB1:0D0404 $FAB4:0D0100 $FAB7:0D0404 $FABA:0D0100 $FABD:1A $FABE:1D8010 $FAC1:FF01FF14 $FAC5:141E $FAC7:CC0D03 $FACA:2100 $FACC:0204 $FACE:0E0002 $FAD1:040E $FAD3:0002 $FAD5:041A $FAD7:1D8010 $FADA:40 $FADB:7DFAFA $FADE:641E $FAE0:000D $FAE2:0325 $FAE4:0004 $FAE6:070B $FAE8:0E2302 $FAEB:0402 $FAED:0402 $FAEF:0402 $FAF1:0402 $FAF3:041A $FAF5:1D4010 $FAF8:FFFFFF14 $FAFC:FF1EBD0D $FB00:0024 $FB02:040B $FB04:040B $FB06:040B $FB08:040B $FB0A:040B $FB0C:040B $FB0E:040B $FB10:040B $FB12:040B $FB14:040B $FB16:040B $FB18:040B $FB1A:040B $FB1C:040E $FB1E:001A $FB20:1D0010 $FB23:FF01FFFF $FB27:FF1E0021 $FB2B:0D0209 $FB2E:0F0B0E0A $FB32:0F090F0B $FB36:0E0A0F $FB39:090B $FB3B:0A $FB3C:091A $FB3E:1D0322 $FB41:0102 $FB43:0304 $FB45:0506 $FB47:0708 $FB49:090A $FB4B:0B $FB4C:0C0D1A $FB4F:0202 $FB51:0202 $FB53:0202 $FB55:0202 $FB57:1A $FB58:1D0328 $FB5B:0D2406 $FB5E:0504 $FB60:0302 $FB62:0202 $FB64:1A $FB65:1D4010 $FB68:FFFFFFC8 $FB6C:FA $FB6D:1E9E0D $FB70:0121 $FB72:0409 $FB74:050A $FB76:0007 $FB78:0204 $FB7A:0102 $FB7C:0001 $FB7E:1E950D $FB81:0408 $FB83:0F080E07 $FB87:0F070E06 $FB8B:0F060E05 $FB8F:0F050E04 $FB93:0F040E03 $FB97:0F030E02 $FB9B:0F020E01 $FB9F:0F011D80 $FBA3:08 $FBA4:0F080E07 $FBA8:0F070E06 $FBAC:0F06050F $FBB0:050E $FBB2:020F $FBB4:020E $FBB6:010F $FBB8:010E $FBBA:000F $FBBC:000B $FBBE:0F0B0E08 $FBC2:0F080E07 $FBC6:0F071A $FBC9:1D $FBCA:C010 $FBCC:FFFFFFFF $FBD0:FA $FBD1:1E9D0D $FBD4:0024 $FBD6:0407 $FBD8:0407 $FBDA:0407 $FBDC:0407 $FBDE:0407 $FBE0:0407 $FBE2:0407 $FBE4:0407 $FBE6:0509 $FBE8:0509 $FBEA:0509 $FBEC:0509 $FBEE:070B $FBF0:070B $FBF2:070B $FBF4:070B $FBF6:1A $FBF7:1D0330 $FBFA:08 $FBFB:0706 $FBFD:0508 $FBFF:0706 $FC01:051A $FC03:1D0010 $FC06:FF00FFFF $FC0A:FF1EB540 $FC0E:0C0D05 $FC11:3002 $FC13:0C0C03 $FC16:1A $FC17:1D3F24 $FC1A:0A $FC1B:0B $FC1C:0A $FC1D:2407 $FC1F:0605 $FC21:0403 $FC23:0202 $FC25:023C $FC27:011A $FC29:10FF $FC2B:40 $FC2C:8040 $FC2E:101D $FC30:801E $FC32:000D $FC34:0522 $FC36:0004 $FC38:3007 $FC3A:1A $FC3B:1D801E $FC3E:0011 $FC40:FF0D0221 $FC44:000F $FC46:000E $FC48:000F $FC4A:000E $FC4C:000F $FC4E:000E $FC50:000F $FC52:000E $FC54:001A $FC56:1D0010 $FC59:FF00FFFF $FC5D:001E $FC5F:9418 $FC61:140D $FC63:0322 $FC65:0709 $FC67:1A $FC68:191C ; free space! $FC6A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FC7A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FC8A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FC9A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FCAA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FCBA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FCCA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FCDA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FCEA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FCFA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD0A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD1A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD2A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD3A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD4A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD5A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD6A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD7A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD8A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FD9A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FDAA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FDBA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FDCA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FDDA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FDEA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FDFA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE0A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE1A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE2A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE3A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE4A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE5A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE6A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE7A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE8A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FE9A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FEAA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FEBA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FECA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FEDA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FEEA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FEFA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF0A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF1A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF2A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF3A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF4A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF5A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF6A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF7A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF8A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FF9A:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FFAA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FFBA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF $FFCA:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ; reset vector $FF8A:EE FB FF INC $FFFB $FF8D:4C 02 C0 JMP $C002 ; data + unknown $FFE0:42 42 $FFE2:34 37 $FFE4:39 35 36 $FFE7:2D 31 35 $FFEA:34 34 $FFEC:30 00 $FFEE:00 00 $FFF0:00 00 $FFF2:00 00 $FFF4:38 $FFF5:04 01 $FFF7:06 9C $FFF9:21 30 $FFFB:D4 DA $FFFD:FFFFFF
Internal Data for The Battle of Olympus
| |
---|---|