C00000: 78 SEI (IRQ off) C00001: 18 CLC (Clear Carry) C00002: FB XCE (Set native mode) C00003: C2 10 REP #$10 (16-bit X & Y) C00005: E2 20 SEP #$20 (8-bit A) C00007: 9C 0D 42 STZ $420D (Enable SlowROM) C0000A: 9C 0B 42 STZ $420B (DMA off) C0000D: 9C 0C 42 STZ $420C (HDMA off) C00010: A9 8F LDA #$8F C00012: 8D 00 21 STA $2100 (Initialize display) C00015: A9 00 LDA #$00 (0) C00017: 8D 00 42 STA $4200 (NMI, IRQ off) C0001A: A9 00 LDA #$00 (0) (A = 0 already...) C0001C: EB XBA (Clear high byte) C0001D: A2 FF 1F LDX #$1FFF C00020: 9A TXS (Set stack pointer) C00021: A9 00 LDA #$00 (0) C00023: 48 PHA C00024: AB PLB (Data bank reg set to $00) C00025: A2 00 0B LDX #$0B00 C00028: DA PHX C00029: 2B PLD (Set direct page register) C0002A: A2 00 00 LDX #$0000 (0) C0002D: 86 06 STX $06 ($0B06 is "zero register") C0002F: 22 00 00 C4 JSR $C40000 (Init sound engine) C00033: A9 F1 LDA #$F1 C00035: 20 C8 44 JSR $44C8 C00038: 20 69 4E JSR $4E69 (Set up Mode 7) C0003B: 20 0A 49 JSR $490A (Clear $0000-$1CFF) C0003E: A9 03 LDA #$03 C00040: 8D 34 01 STA $0134 C00043: 22 00 A0 C2 JSR $C2A000 (Init game select screen) C00047: 20 E3 44 JSR $44E3 C0004A: 20 69 4E JSR $4E69 (Set up Mode 7 again) C0004D: 20 4A 4E JSR $4E4A C00050: AD 39 01 LDA $0139 C00053: F0 28 BEQ $007D (Branch to start new game) C00055: 20 1D 49 JSR $491D (Clear $0B00-$1CFF) C00058: AD F9 0A LDA $0AF9 C0005B: 8D 60 0B STA $0B60 (Not STA $60?) C0005E: 4A LSR A C0005F: 8D 5F 0B STA $0B5F (Not STA $5F?) C00062: A9 01 LDA #$01 C00064: 85 BD STA $BD C00066: 85 BC STA $BC C00068: 1A INC A C00069: 85 B9 STA $B9 C0006B: AD D8 0A LDA $0AD8 (Player X-coordinate) C0006E: 8D 88 10 STA $1088 C00071: AD D9 0A LDA $0AD9 (Player Y-coordinate) C00074: 8D 89 10 STA $1089 C00077: 20 5D 54 JSR $545D C0007A: 4C AD 00 JMP $00AD C0007D: 20 FA 48 JSR $48FA (Init player stats) C00080: 20 ED 48 JSR $48ED C00083: 20 DD 48 JSR $48DD C00086: 20 28 45 JSR $4528 (Init plr character names) C00089: 20 0A 45 JSR $450A (Reset all vehicles) C0008C: A9 01 LDA #$01 (1) C0008E: 85 BD STA $BD C00090: 85 BC STA $BC C00092: A2 10 00 LDX #$0010 (16) C00095: 86 CE STX $CE C00097: A9 01 LDA #$01 (1) (A = 1 already...) C00099: 85 57 STA $57 C0009B: A9 81 LDA #$81 (-127) C0009D: 8D 00 42 STA $4200 (NMI on, auto joypad read) C000A0: 58 CLI (IRQ on) C000A1: 20 17 A2 JSR $A217 (Start event script) C000A4: 64 57 STZ $57 C000A6: 64 58 STZ $58 C000A8: 64 55 STZ $55 C000AA: 4C AD 00 JMP $00AD (Why?!) C000AD: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C000B0: A5 02 LDA $02 (Joypad buttons) C000B2: 29 40 AND #$40 (Is X pressed?) C000B4: F0 08 BEQ $00BE (+8) (Branch if not) C000B6: A5 53 LDA $53 C000B8: F0 07 BEQ $00C1 (+7) C000BA: A5 5D LDA $5D C000BC: F0 03 BEQ $00C1 (+3) C000BE: 4C 47 01 JMP $0147 C000C1: AD 61 0B LDA $0B61 (Not LDA $61?) C000C4: 29 1F AND #$1F (Partway through horizontal step?) C000C6: D0 7F BNE $0147 (+127)(Branch if so) C000C8: AD 63 0B LDA $0B63 (Not LDA $63?) C000CB: 29 1F AND #$1F (Partway through vertical step?) C000CD: D0 78 BNE $0147 (+120)(Branch if so) C000CF: A9 00 LDA #$00 (0) C000D1: 8D 35 01 STA $0135 C000D4: AD DC 0A LDA $0ADC (Player vehicle) C000D7: D0 16 BNE $00EF (+22) (Branch if not walking) C000D9: AE D6 0A LDX $0AD6 (Get current map ID) C000DC: E0 05 00 CPX #$0005 (5) (World map or underwater?) C000DF: 90 09 BCC $00EA (+9) (Branch if so) C000E1: A9 FD LDA #$FD (253) C000E3: 20 3C CA JSR $CA3C (Get event flag $1FD) C000E6: C9 00 CMP #$00 (0) (Is flag set?) C000E8: F0 05 BEQ $00EF (+5) (Branch if not) C000EA: A9 80 LDA #$80 (128) C000EC: 8D 35 01 STA $0135 C000EF: 64 08 STZ $08 C000F1: A5 53 LDA $53 C000F3: F0 07 BEQ $00FC (+7) C000F5: AD 0F 11 LDA $110F C000F8: 29 03 AND #$03 C000FA: 85 08 STA $08 C000FC: AD 35 01 LDA $0135 C000FF: 05 08 ORA $08 C00101: 8D 35 01 STA $0135 (TSB would work...) C00104: A9 00 LDA #$00 (0) C00106: 8D 34 01 STA $0134 (STZ would work...) C00109: 20 4C 45 JSR $454C C0010C: A9 02 LDA #$02 (2) C0010E: 85 55 STA $55 C00110: AD D8 0A LDA $0AD8 (Player X-coordinate) C00113: 8D 88 10 STA $1088 C00116: AD D9 0A LDA $0AD9 (Player Y-coordinate) C00119: 8D 89 10 STA $1089 C0011C: 20 76 54 JSR $5476 C0011F: AD 39 01 LDA $0139 C00122: C9 F0 CMP #$F0 (240) C00124: D0 05 BNE $012B (+5) C00126: A2 22 00 LDX #$0022 (34) (Controlled event #17) C00129: 80 10 BRA $013B (+16) C0012B: C9 F1 CMP #$F1 (241) C0012D: D0 05 BNE $0134 (+5) C0012F: A2 24 00 LDX #$0024 (36) (Controlled event #18) C00132: 80 07 BRA $013B (+7) C00134: C9 3E CMP #$3E (62) C00136: D0 06 BNE $013E (+6) C00138: A2 32 00 LDX #$0032 (50) (Controlled event #25) C0013B: 20 6A 04 JSR $046A C0013E: 9C AA 16 STZ $16AA C00141: 20 E9 14 JSR $14E9 C00144: 4C AD 00 JMP $00AD C00147: 20 1A 06 JSR $061A (Map tile event handler) C0014A: 20 8B A1 JSR $A18B C0014D: A5 58 LDA $58 (Check main loop signal) C0014F: F0 05 BEQ $0156 (+5) (0 = proceed, 1 = restart) C00151: 64 58 STZ $58 (Erase restart signal) C00153: 4C AD 00 JMP $00AD (Restart main loop) C00156: A5 6E LDA $6E C00158: F0 06 BEQ $0160 (+6) C0015A: 20 5A 54 JSR $545A C0015D: 4C AD 00 JMP $00AD C00160: AE D6 0A LDX $0AD6 (Get current map ID) C00163: E0 05 00 CPX #$0005 (5) (World map or underwater?) C00166: 90 03 BCC $016B (+3) (Branch if so) C00168: 4C 62 02 JMP $0262 C0016B: 20 3E 07 JSR $073E (Vehicle handler) C0016E: A5 58 LDA $58 (Check main loop signal) C00170: F0 05 BEQ $0177 (+5) (0 = proceed, 1 = restart) C00172: 64 58 STZ $58 (Erase restart signal) C00174: 4C AD 00 JMP $00AD (Restart main loop) C00177: A5 61 LDA $61 (Player X-step amount) C00179: 29 1F AND #$1F (Partway through step?) C0017B: D0 7E BNE $01FB (+126)(Branch if so) C0017D: A5 63 LDA $63 (Player Y-step amount) C0017F: 29 1F AND #$1F (Partway through step?) C00181: D0 78 BNE $01FB (+120)(Branch if so) C00183: AD D6 0A LDA $0AD6 (Get current map ID) C00186: C9 01 CMP #$01 (1) (Galuf's World?) C00188: D0 17 BNE $01A1 (+23) (Branch if not) C0018A: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0018D: C9 A1 CMP #$A1 (161) C0018F: D0 10 BNE $01A1 (+16) (Branch if not 161) C00191: AD D8 0A LDA $0AD8 (Player X-coordinate) C00194: C9 9F CMP #$9F (159) C00196: 90 09 BCC $01A1 (+9) (Branch if < 159) C00198: C9 A2 CMP #$A2 (162) C0019A: B0 05 BCS $01A1 (+5) (Branch if >= 162) C0019C: A2 12 00 LDX #$0012 (18) (Controlled event #9 - player repelled by Exdeath's barrier) C0019F: 80 4E BRA $01EF (+78) C001A1: AD D6 0A LDA $0AD6 (Get current map ID) C001A4: D0 22 BNE $01C8 (+34) (Branch if not Bartz's World) C001A6: AD DC 0A LDA $0ADC (Player vehicle) C001A9: C9 06 CMP #$06 (6) (Airship?) C001AB: D0 1B BNE $01C8 (+27) (Branch if not) C001AD: AD D8 0A LDA $0AD8 (Player X-coordinate) C001B0: C9 3D CMP #$3D (61) C001B2: 90 14 BCC $01C8 (+20) (Branch if < 61) C001B4: C9 43 CMP #$43 (67) C001B6: B0 10 BCS $01C8 (+16) (Branch if >= 67) C001B8: AD D9 0A LDA $0AD9 (Player Y-coordinate) C001BB: C9 9E CMP #$9E (158) C001BD: 90 09 BCC $01C8 (+9) (Branch if < 158) C001BF: C9 A5 CMP #$A5 (165) C001C1: B0 05 BCC $01C8 (+5) (Branch if >= 165) C001C3: A2 20 00 LDX #$0020 (32) (Controlled event #16 - Lonka Ruins rise, as seen from airship) C001C6: 80 27 BRA $01EF (+39) C001C8: AD D6 0A LDA $0AD6 (Get current map ID) C001CB: C9 02 CMP #$02 (2) (Merged World?) C001CD: D0 2C BNE $01FB (+44) (Branch if not) C001CF: AD DC 0A LDA $0ADC (Player vehicle) C001D2: C9 05 CMP #$05 (5) (Boat or airship?) C001D4: 90 25 BCC $01FB (+37) (Branch if neither) C001D6: AD D8 0A LDA $0AD8 (Player X-coordinate) C001D9: C9 B6 CMP #$B6 (182) C001DB: 90 1E BCC $01FB (+30) (Branch if < 182) C001DD: C9 BA CMP #$BA (186) C001DF: B0 1A BCS $01FB (+26) (Branch if >= 186) C001E1: AD D9 0A LDA $0AD9 (Player Y-coordinate) C001E4: C9 87 CMP #$87 (135) C001E6: 90 13 BCC $01FB (+19) (Branch if < 135) C001E8: C9 8B CMP #$8B (139) C001EA: B0 0F BCS $01FB (+15) (Branch if >= 139) C001EC: A2 18 00 LDX #$0018 (24) (Controlled event #12 - enter the Cleft of Dimension) C001EF: 20 6A 04 JSR $046A (Execute controlled event) C001F2: A5 58 LDA $58 (Check main loop signal) C001F4: F0 05 BEQ $01FB (+5) (0 = proceed, 1 = restart) C001F6: 64 58 STZ $58 (Erase restart signal) C001F8: 4C AD 00 JMP $00AD (Restart main loop) C001FB: 20 11 CB JSR $CB11 C001FE: A5 55 LDA $55 C00200: F0 1E BEQ $0220 (+30) C00202: A9 FF LDA #$FF (255) C00204: 20 3C CA JSR $CA3C (Get event flag $1FF) C00207: C9 00 CMP #$00 (Is flag set?) C00209: D0 15 BNE $0220 (+21) (Branch if so) C0020B: 20 F0 CC JSR $CCF0 C0020E: AD D8 0A LDA $0AD8 (Player X-coordinate) C00211: 8D 88 10 STA $1088 C00214: AD D9 0A LDA $0AD9 (Player Y-coordinate) C00217: 8D 89 10 STA $1089 C0021A: 20 76 54 JSR $5476 C0021D: 4C AD 00 JMP $00AD C00220: 64 55 STZ $55 C00222: A5 03 LDA $03 (Joypad buttons) C00224: 29 40 AND #$40 (Is Y pressed?) C00226: F0 1E BEQ $0246 (+30) (Branch if not) C00228: A9 FB LDA #$FB (251) C0022A: 20 3C CA JSR $CA3C (Get event flag $1FB - World Map obtained) C0022D: C9 00 CMP #$00 (0) (Is flag set?) C0022F: F0 15 BEQ $0246 (+21) (Branch if not) C00231: 20 32 66 JSR $6632 (Open World Map view) C00234: AD D8 0A LDA $0AD8 (Player X-coordinate) C00237: 8D 88 10 STA $1088 C0023A: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0023D: 8D 89 10 STA $1089 C00240: 20 76 54 JSR $5476 C00243: 4C AD 00 JMP $00AD C00246: 20 8C 0F JSR $0F8C (Player movement handler) C00249: 20 1D 1A JSR $1A1D C0024C: 20 95 4C JSR $4C95 C0024F: 20 37 21 JSR $2137 (Update player sprite) C00252: 20 2B 61 JSR $612B C00255: 20 C5 1E JSR $1EC5 (Draw vehicles) C00258: 20 64 1E JSR $1E64 (Draw shadow under player) C0025B: 20 0A 42 JSR $420A C0025E: 4C AD 00 JMP $00AD C00261: 60 RTS C00262: 20 3D 0D JSR $0D3D (Treasure pickup handler) C00265: A5 58 LDA $58 (Check main loop signal) C00267: F0 05 BEQ $026E (+5) (0 = proceed, 1 = restart) C00269: 64 58 STZ $58 (Erase restart signal) C0026B: 4C AD 00 JMP $00AD (Restart main loop) C0026E: AD FB 10 LDA $10FB C00271: C9 00 CMP #$00 (0) (Unnecessary!) C00273: D0 0C BNE $0281 (+12) C00275: 20 8F 54 JSR $548F C00278: A2 1C 00 LDX #$001C (28) (Controlled event #14) C0027B: 20 6A 04 JSR $046A C0027E: 4C AD 00 JMP $00AD C00281: 20 69 CA JSR $CA69 C00284: A5 55 LDA $55 C00286: F0 12 BEQ $029A (+18) C00288: A9 FF LDA #$FF (255) C0028A: 20 3C CA JSR $CA3C (Get event flag $1FF) C0028D: C9 00 CMP #$00 (0) (Is flag set?) C0028F: D0 09 BNE $029A (+9) (Branch if so) C00291: 20 F0 CC JSR $CCF0 C00294: 20 76 54 JSR $5476 C00297: 4C AD 00 JMP $00AD C0029A: 64 55 STZ $55 C0029C: 20 AB 32 JSR $32AB C0029F: 20 C2 11 JSR $11C2 (Player movement handler) C002A2: A5 6E LDA $6E C002A4: F0 06 BEQ $02AC (+6) C002A6: 20 5A 54 JSR $545A C002A9: 4C AD 00 JMP $00AD C002AC: A5 58 LDA $58 (Check main loop signal) C002AE: F0 05 BEQ $02B5 (+5) (0 = proceed, 1 = restart) C002B0: 64 58 STZ $58 (Erase restart signal) C002B2: 4C AD 00 JMP $00AD (Restart main loop) C002B5: 20 E4 1A JSR $1AE4 C002B8: 20 AC 3B JSR $3BAC C002BB: 20 95 4C JSR $4C95 C002BE: 20 34 48 JSR $4834 C002C1: 20 7C 23 JSR $237C C002C4: 20 B3 39 JSR $39B3 C002C7: 20 42 28 JSR $2842 C002CA: 20 0A 42 JSR $420A C002CD: 4C AD 00 JMP $00AD C002D0: 60 RTS (Called on NMI.) C002D1: 08 PHP C002D2: C2 20 REP #$20 (16-bit A) C002D4: 48 PHA C002D5: DA PHX C002D6: 5A PHY C002D7: 8B PHB C002D8: 0B PHD C002D9: A9 00 00 LDA #$0000 (0) (A = #$0000) C002DC: E2 20 SEP #$20 (8-bit A) C002DE: A2 00 0B LDX #$0B00 C002E1: DA PHX C002E2: 2B PLD (DP = #$0B00) C002E3: A9 00 LDA #$00 (A = 0 already...) C002E5: 48 PHA C002E6: AB PLB (Data bank reg = $00) C002E7: AD 10 42 LDA $4210 (?) C002EA: AD 10 42 LDA $4210 (??) C002ED: 9C 0B 42 STZ $420B (DMA off) C002F0: 64 40 STZ $40 C002F2: A5 47 LDA $47 C002F4: 8D 31 21 STA $2131 (Set color math) C002F7: A5 49 LDA $49 C002F9: 8D 2D 21 STA $212D (Set subscreen) C002FC: 20 67 4D JSR $4D67 (Write CGRAM) C002FF: 20 3E 4D JSR $4D3E (Write DMA buffer to VRAM) C00302: 20 7A 4A JSR $4A7A C00305: 20 53 46 JSR $4653 C00308: 20 FF 49 JSR $49FF C0030B: A5 A3 LDA $A3 C0030D: F0 05 BEQ $0314 (+5) C0030F: 64 A3 STZ $A3 C00311: 20 D8 40 JSR $40D8 C00314: A5 52 LDA $52 C00316: F0 03 BEQ $031B (+3) C00318: 4C 1F 04 JMP $041F C0031B: 20 C0 4B JSR $4BC0 (Camera update?) C0031E: A5 53 LDA $53 C00320: D0 3E BNE $0360 (+62) C00322: 20 7E 63 JSR $637E C00325: 20 95 96 JSR $9695 C00328: 20 5F 97 JSR $975F C0032B: 20 4C 96 JSR $964C C0032E: 20 22 97 JSR $9722 C00331: A5 9F LDA $9F C00333: F0 13 BEQ $0348 (+19) C00335: 64 9F STZ $9F C00337: A5 BA LDA $BA C00339: F0 0D BEQ $0348 (+13) C0033B: 29 01 AND #$01 C0033D: D0 06 BNE $0345 (+6) C0033F: 20 BB 64 JSR $64BB C00342: 4C 48 03 JMP $0348 (BRA!) C00345: 20 65 64 JSR $6465 C00348: A5 A1 LDA $A1 C0034A: F0 08 BEQ $0354 (+8) C0034C: 64 A1 STZ $A1 C0034E: 20 1E 1D JSR $1D1E C00351: 4C 08 04 JMP $0408 C00354: A5 A2 LDA $A2 C00356: F0 05 BEQ $035D (+5) C00358: 64 A2 STZ $A2 C0035A: 20 14 1E JSR $1E14 C0035D: 4C 08 04 JMP $0408 C00360: A5 A0 LDA $A0 C00362: F0 08 BEQ $036C (+8) C00364: 64 A0 STZ $A0 C00366: 20 2B 5E JSR $5E2B C00369: 4C 08 04 JMP $0408 C0036C: A5 A5 LDA $A5 C0036E: F0 08 BEQ $0378 (+8) C00370: 64 A5 STZ $A5 C00372: 20 A4 8B JSR $8BA4 C00375: 4C 08 04 JMP $0408 C00378: A5 A6 LDA $A6 C0037A: F0 0F BEQ $038B (+15) C0037C: 64 A6 STZ $A6 C0037E: A6 06 LDX $06 C00380: 86 71 STX $71 C00382: 20 7A 6E JSR $6E7A C00385: 20 E4 8B JSR $8BE4 C00388: 4C F9 03 JMP $03F9 C0038B: A5 A7 LDA $A7 C0038D: F0 03 BEQ $0392 (+3) C0038F: 20 23 8E JSR $8E23 C00392: 20 78 8F JSR $8F78 C00395: A5 9F LDA $9F C00397: F0 54 BEQ $03ED (+84) C00399: 64 9F STZ $9F C0039B: A5 70 LDA $70 C0039D: 29 01 AND #$01 C0039F: D0 26 BNE $03C7 (+38) C003A1: A6 06 LDX $06 C003A3: 86 71 STX $71 C003A5: 20 F5 6D JSR $6DF5 C003A8: AD 21 11 LDA $1121 C003AB: 29 40 AND #$40 C003AD: D0 08 BNE $03B7 (+8) C003AF: A2 00 10 LDX #$1000 C003B2: 86 71 STX $71 C003B4: 20 F5 6D JSR $6DF5 C003B7: AD 21 11 LDA $1121 C003BA: 30 08 BMI $03C4 (+8) C003BC: A2 00 20 LDX #$2000 C003BF: 86 71 STX $71 C003C1: 20 F5 6D JSR $6DF5 C003C4: 4C 08 04 JMP $0408 C003C7: A6 06 LDX $06 C003C9: 86 71 STX $71 C003CB: 20 7A 6E JSR $6E7A C003CE: AD 21 11 LDA $1121 C003D1: 29 40 AND #$40 C003D3: D0 08 BNE $03DD (+8) C003D5: A2 00 10 LDX #$1000 C003D8: 86 71 STX $71 C003DA: 20 7A 6E JSR $6E7A C003DD: AD 21 11 LDA $1121 C003E0: 30 08 BMI $03EA (+8) C003E2: A2 00 20 LDX #$2000 C003E5: 86 71 STX $71 C003E7: 20 7A 6E JSR $6E7A C003EA: 4C 08 04 JMP $0408 C003ED: A5 A1 LDA $A1 C003EF: F0 08 BEQ $03F9 (+8) C003F1: 64 A1 STZ $A1 C003F3: 20 1E 1D JSR $1D1E C003F6: 4C 08 04 JMP $0408 C003F9: A5 A2 LDA $A2 C003FB: F0 08 BEQ $0405 (+8) C003FD: 64 A2 STZ $A2 C003FF: 20 14 1E JSR $1E14 C00402: 4C 08 04 JMP $0408 C00405: 20 6D 99 JSR $996D C00408: 20 8A 5E JSR $5E8A C0040B: 20 3E 5F JSR $5F3E C0040E: A5 5E LDA $5E C00410: 8D 0C 42 STA $420C (Set HDMA channels) C00413: 20 00 9A JSR $9A00 C00416: 20 99 97 JSR $9799 C00419: 20 31 49 JSR $4931 C0041C: 20 AA 47 JSR $47AA C0041F: 20 90 4C JSR $4C90 C00422: 20 8E 4D JSR $4D8E C00425: EE 4A 09 INC $094A C00428: D0 0D BNE $0437 (+13) C0042A: EE 4B 09 INC $094B C0042D: D0 08 BNE $0437 (+8) C0042F: EE 4C 09 INC $094C C00432: D0 03 BNE $0437 (+3) C00434: EE 4D 09 INC $094D C00437: E6 3F INC $3F (Increment frame counter) C00439: E6 3E INC $3E C0043B: E6 51 INC $51 C0043D: C2 20 REP #$20 (16-bit A) C0043F: 2B PLD C00440: AB PLB C00441: 7A PLY C00442: FA PLX C00443: 68 PLA C00444: 28 PLP C00445: 40 RTI (Called on IRQ.) C00446: 08 PHP C00447: C2 20 REP #$20 (16-bit A) C00449: 48 PHA C0044A: DA PHX C0044B: 5A PHY C0044C: 8B PHB C0044D: 0B PHD C0044E: A9 00 00 LDA #$0000 (0) (A = #$0000) C00451: E2 20 SEP #$20 (8-bit A) C00453: A2 00 0B LDX #$0B00 C00456: DA PHX C00457: 2B PLD (DP = #$0B00) C00458: A9 00 LDA #$00 (8) (A = 0 already...) C0045A: 48 PHA C0045B: AB PLB (Data bank reg = $00) C0045C: AD 11 42 LDA $4211 (Read IRQ flag?) C0045F: E6 40 INC $40 C00461: C2 20 REP #$20 (16-bit A) C00463: 2B PLD C00464: AB PLB C00465: 7A PLY C00466: FA PLX C00467: 68 PLA C00468: 28 PLP C00469: 40 RTI (This function handles event scripts with condition controls. It reads a control script and tests various parameters before running an event script, if and only if all tests pass.) C0046A: C2 20 REP #$20 (16-bit A) C0046C: BF 80 E0 D8 LDA $D8E080,X (Pointer to this script) C00470: 85 23 STA $23 C00472: BF 82 E0 D8 LDA $D8E082,X (Pointer to next script) C00476: 85 26 STA $26 C00478: A5 06 LDA $06 C0047A: E2 20 SEP #$20 (8-bit A) C0047C: A6 23 LDX $23 C0047E: BF 80 E0 D8 LDA $D8E080,X (Get event control code) (Control code #$FF: All tests passed, run an event script.) C00482: C9 FF CMP #$FF C00484: D0 03 BNE $0489 (+3) C00486: 4C FC 05 JMP $05FC (Execute event script) (Control code #$FE: Test if event flag $0xx is set.) C00489: C9 FE CMP #$FE C0048B: D0 0E BNE $049B (+14) C0048D: BF 81 E0 D8 LDA $D8E081,X (Get event flag index) C00491: 20 2F CA JSR $CA2F (Get flag $0xx) C00494: C9 00 CMP #$00 (Is it set?) C00496: D0 39 BNE $04D1 (+57) (If not...) C00498: 4C E5 05 JMP $05E5 (...bypass event script) (Control code #$FD: Test if event flag $0xx is clear.) C0049B: C9 FD CMP #$FD C0049D: D0 0E BNE $04AD (+14) C0049F: BF 81 E0 D8 LDA $D8E081,X (Get event flag index) C004A3: 20 2F CA JSR $CA2F (Get flag $0xx) C004A6: C9 00 CMP #$00 (Is it set?) C004A8: F0 27 BEQ $04D1 (+39) (If so...) C004AA: 4C E5 05 JMP $05E5 (...bypass event script) (Control code #$FC: Test if event flag $1xx is set.) C004AD: C9 FC CMP #$FC C004AF: D0 0E BNE $04BF (+14) C004B1: BF 81 E0 D8 LDA $D8E081,X (Get event flag index) C004B5: 20 3C CA JSR $CA3C (Get flag $1xx) C004B8: C9 00 CMP #$00 (Is it set?) C004BA: D0 15 BNE $04D1 (+21) (If not...) C004BC: 4C E5 05 JMP $05E5 (...bypass event script) (Control code #$FB: Test if event flag $1xx is clear.) C004BF: C9 FB CMP #$FB C004C1: D0 17 BNE $04D8 (+23) C004C3: BF 81 E0 D8 LDA $D8E081,X (Get event flag index) C004C7: 20 3C CA JSR $CA3C (Get flag $1xx) C004CA: C9 00 CMP #$00 (Is it set?) C004CC: F0 03 BEQ $04D1 (+3) (If so...) C004CE: 4C E5 05 JMP $05E5 (...bypass event script) C004D1: A6 23 LDX $23 (Advance two bytes) C004D3: E8 E8 INX x2 C004D5: 86 23 STX $23 C004D7: 4C 7C 04 JMP $047C (Return to control script) (Control code #$FA: Tests for an 8-bit value in RAM indexed from $0500.) C004DA: C9 FA CMP #$FA C004DC: D0 3E BNE $051C (+62) C004DE: C2 20 REP #$20 (16-bit A) C004E0: BF 81 E0 D8 LDA $D8E081,X (Get 16-bit parameter) C004E4: 29 FF 3F AND #$3FFF (Bits 0-13) C004E7: A8 TAY (RAM address) C004E8: A5 06 LDA $06 (A = 0) C004EA: E2 20 SEP #$20 (8-bit A) C004EC: BF 82 E0 D8 LDA $D8E082,X C004F0: 29 C0 AND #$C0 (Bits 14 and 15) C004F2: D0 0C BNE $0500 (+12) (Branch if either set) C004F4: B9 00 05 LDA $0500,Y (Get value from RAM) C004F7: DF 83 E0 D8 CMP $D8E083,X (Compare to third param) C004FB: F0 6B BEQ $0568 (+107)(If not a match...) C004FD: 4C E5 05 JMP $05E5 (...bypass event script) C00500: C9 40 CMP #$40 (Bit 14 set and bit 15 clear?) C00502: D0 0C BNE $0510 (+12) (Branch if not) C00504: B9 00 05 LDA $0500,Y C00507: DF 83 E0 D8 CMP $D8E083,X C0050B: B0 5B BCS $0568 (+91) (If third parameter > RAM value...) C0050D: 4C E5 05 JMP $05E5 (...bypass event script) C00510: B9 00 05 LDA $0500,Y C00513: DF 83 E0 D8 CMP $D8E083,X C00517: 90 4F BCC $0568 (+79) (If third parameter <= RAM value...) C00519: 4C E5 05 JMP $05E5 (...bypass event script) (Control code #$F9: Tests for a 16-bit value in RAM indexed from $0500.) C0051C: C9 F9 CMP #$F9 C0051E: D0 53 BNE $0573 (+83) C00520: C2 20 REP #$20 (16-bit A) C00522: BF 81 E0 D8 LDA $D8E081,X (Get 16-bit parameter) C00526: 29 FF 3F AND #$3FFF (Bits 0-13) C00529: A8 TAY (RAM address) C0052A: BF 81 E0 D8 LDA $D8E081,X C0052E: 29 00 C0 AND #$C000 (Bits 14 and 15) C00531: D0 10 BNE $0543 (+16) C00533: B9 00 05 LDA $0500,Y (Get 16-bit value) C00536: DF 83 E0 D8 CMP $D8E083,X (Compare to 16-bit param) C0053A: F0 2C BEQ $0568 (+44) (If not a match...) C0053C: A5 06 LDA $06 (...bypass event script) C0053E: E2 20 SEP #$20 (8-bit A) C00540: 4C E5 05 JMP $05E5 C00543: C9 00 40 CMP #$4000 (Bit 14 set and bit 15 clear?) C00546: D0 10 BNE $0558 (+16) (Branch if not) C00548: B9 00 05 LDA $0500,Y C0054B: DF 83 E0 D8 CMP $D8E083,X C0054F: B0 17 BCS $0568 (+23) (If third parameter > indexed value...) C00551: A5 06 LDA $06 (...bypass event script) C00553: E2 20 SEP #$20 (8-bit A) C00555: 4C E5 05 JMP $05E5 C00558: B9 00 05 LDA $0500,Y C0055B: DF 83 E0 D8 CMP $D8E083,X C0055F: 90 07 BCC $0568 (+7) (If third parameter <= indexed value...) C00561: A5 06 LDA $06 (...bypass event script) C00563: E2 20 SEP #$20 (8-bit A) C00565: 4C E5 05 JMP $05E5 (Wait, this code can be reached with 8-bit OR 16-bit A!!! And this is never corrected!!!) C00568: A6 23 LDX $23 (Advance two bytes) C0056A: E8 E8 E8 E8 INX x4 C0056E: 86 23 STX $23 C00570: 4C 7C 04 JMP $047C (Return to control script) (Control code #$F8: Tests bits in RAM indexed from $0500.) C00573: C9 F8 CMP #$F8 C00575: D0 2A BNE $05A1 (+42) C00577: C2 20 REP #$20 (16-bit A) C00579: BF 81 E0 D8 LDA $D8E081,X (Get 16-bit parameter) C0057D: 29 FF 3F AND #$3FFF (Bits 0-13) C00580: A8 TAY (RAM address) C00581: A5 06 LDA $06 (A = 0) C00583: E2 20 SEP #$20 (8-bit A) C00585: B9 00 05 LDA $0500,Y (Get bits from RAM) C00588: 3F 83 E0 D8 AND $D8E083,X (AND third parameter) C0058C: D0 DA BNE $0568 (-38) (If no same bits set...) C0058E: 4C E5 05 JMP $05E5 (...bypass event script) (Oops...this is where control code #$F9 should be going!!! I guess Square must've realized control code #$F9 is never actually used anywhere and decided not to bother fixing it!) C00591: A5 06 LDA $06 (A = 0) C00593: E2 20 SEP #$20 (8-bit A) C00595: A6 23 LDX $23 C00597: E8 (x5) INX x5 (Could've used 16-bit A and saved a few bytes with an ADC instruction...) C0059C: 86 23 STX $23 (Advance five bytes) C0059E: 4C 7C 04 JMP $047C (Return to control script) (Control code #$F7: Test if the player is facing the right way.) C005A1: C9 F7 CMP #$F7 C005A3: D0 0C BNE $05B1 (+12) C005A5: BF 81 E0 D8 LDA $D8E081,X (Get parameter) C005A9: CD DB 0A CMP $0ADB (Direction player faces) C005AC: D0 37 BNE $05E5 (+55) (If not a match, bypass event script) C005AE: 4C D1 04 JMP $04D1 (Otherwise, advance two bytes) (Control code #$F6: Test if the A button is being pressed.) C005B1: C9 F6 CMP #$F6 C005B3: D0 16 BNE $05CB (+22) C005B5: A5 02 LDA $02 (Joypad buttons) C005B7: 29 80 AND #$80 (Is A pressed? BPL...) C005B9: F0 2A BEQ $05E5 (+42) (If not, bypass event) C005BB: AD B8 10 LDA $10B8 (Have we checked already?) C005BE: D0 25 BNE $05E5 (+37) (If so, bypass event) C005C0: EE B8 10 INC $10B8 (Mark that A was pressed) C005C3: A6 23 LDX $23 C005C5: E8 INX (Advance one byte) C005C6: 86 23 STX $23 C005C8: 4C 7C 04 JMP $047C (We reach this point if the control code is none of the aforementioned possibilities. This ends up being the inverse of control code #$F8.) C005CB: C2 20 REP #$20 (16-bit A) C005CD: BF 81 E0 D8 LDA $D8E081,X (Get 16-bit parameter) C005D1: 29 FF 3F AND #$3FFF (Bits 0-13) C005D4: A8 TAY (RAM address) C005D5: A5 06 LDA $06 (A = 0) C005D7: E2 20 SEP #$20 (8-bit A) C005D9: B9 00 05 LDA $0500,Y (Get bits in RAM) C005DC: 3F 83 E0 D8 AND $D8E083,X (AND third parameter) C005E0: F0 86 BEQ $0568 (-122)(If any same bits set...) C005E2: 4C E5 05 JMP $05E5 (Why?!) (...bypass event script on this tile.) C005E5: A6 23 LDX $23 (Get current pointer) C005E7: E8 INX (Move it forward) C005E8: BF 80 E0 D8 LDA $D8E080,X (Looking for #$FF) C005EC: C9 FF CMP #$FF C005EE: D0 F7 BNE $05E7 (-9) (Loop until found) C005F0: E8 E8 E8 INX x3 (Forward three more bytes) C005F3: 86 23 STX $23 (Update pointer) C005F5: E4 26 CPX $26 (Reached end of controls?) C005F7: F0 1E BEQ $0617 (+30) (Branch if so) C005F9: 4C 7C 04 JMP $047C (If not, continue) (Execute event script triggered by current map tile.) C005FC: A9 01 LDA #$01 C005FE: 85 57 STA $57 C00600: 64 BA STZ $BA C00602: C2 20 REP #$20 (16-bit A) C00604: A6 23 LDX $23 (Get tile control pointer) C00606: BF 81 E0 D8 LDA $D8E081,X (Get event script index) C0060A: 85 CE STA $CE (Store it, TAX works...) C0060C: A5 06 LDA $06 (A = 0) C0060E: E2 20 SEP #$20 (8-bit A) C00610: A6 CE LDX $CE (Get event script index) C00612: F0 03 BEQ $0617 (+3) (If null, no script) C00614: 20 17 A2 JSR $A217 (Let's run it!) C00617: 64 57 STZ $57 C00619: 60 RTS (This function handles tile-based event triggers and map exits.) C0061A: A5 53 LDA $53 C0061C: D0 15 BNE $0633 (+21) C0061E: AD DC 0A LDA $0ADC (Player vehicle) C00621: F0 10 BEQ $0633 (+16) (Branch if walking) C00623: C9 01 CMP #$01 C00625: F0 0C BEQ $0633 (+12) (Branch if it's Boco) C00627: C9 05 CMP #$05 C00629: F0 08 BEQ $0633 (+8) (Branch if it's a boat) C0062B: AE D6 0A LDX $0AD6 (Get current map ID) C0062E: E0 03 00 CPX #$0003 (Overworld map?) C00631: 90 0C BCC $063F (+12) (If so, exit) C00633: A5 61 LDA $61 (Player X-step amount) C00635: 29 1F AND #$1F (Partway through step?) C00637: D0 06 BNE $063F (+6) (Exit if so) C00639: A5 63 LDA $63 (Player Y-step amount) C0063B: 29 1F AND #$1F (Partway through step?) C0063D: F0 01 BEQ $0640 (+1) (Exit if so) C0063F: 60 RTS C00640: 64 5A STZ $5A C00642: C2 20 REP #$20 (16-bit A) C00644: AD D6 0A LDA $0AD6 (Get current map ID) C00647: 0A ASL A C00648: AA TAX C00649: BF 02 24 CE LDA $CE2402,X (Get next map's event list pointer) C0064D: 85 23 STA $23 C0064F: BF 00 24 CE LDA $CE2400,X (Get this map's event list pointer) C00653: AA TAX C00654: E4 23 CPX $23 (Reached end of list?) C00656: F0 29 BEQ $0681 (+41) (If so, exit) C00658: AD D8 0A LDA $0AD8 (Get player coordinates) C0065B: DF 00 24 CE CMP $CE2400,X (On this event's tile?) C0065F: F0 09 BEQ $066A (+9) (If not...) C00661: 8A TXA (...try next trigger) C00662: 18 CLC C00663: 69 04 00 ADC #$0004 (4) C00666: AA TAX (Why not four INXs?) C00667: 4C 54 06 JMP $0654 (Not BRA?) C0066A: A5 06 LDA $06 (A = 0) C0066C: E2 20 SEP #$20 (8-bit A) C0066E: A9 01 LDA #$01 (1) (INC works...) C00670: 85 5A STA $5A (Or INC $5A! Then you don't even need to change between 8-bit and 16-bit A!) C00672: C2 20 REP #$20 (16-bit A) C00674: BF 02 24 CE LDA $CE2402,X (Controlled event index) C00678: 0A ASL A C00679: AA TAX C0067A: A5 06 LDA $06 (A = 0) C0067C: E2 20 SEP #$20 (We don't need to return to 8-bit A because the next function starts with 16-bit A...) C0067E: 20 6A 04 JSR $046A (Controlled event) C00681: C2 20 REP #$20 (16-bit A) C00683: AD D6 0A LDA $0AD6 (Get current map ID) C00686: C9 05 00 CMP #$0005 (5) (World map or underwater?) C00689: 90 03 BCC $068E (+3) (If not...) C0068B: AD D4 0A LDA $0AD4 (...use this instead) C0068E: 0A ASL A C0068F: AA TAX C00690: BF C2 36 CE LDA $CE36C2,X (Get next map's exit list pointer) C00694: 85 23 STA $23 C00696: BF C0 36 CE LDA $CE36C0,X (Get this map's exit list pointer) C0069A: AA TAX C0069B: E4 23 CPX $23 (Reached end of list?) C0069D: D0 03 BNE $06A2 (+3) (If so...) C0069F: 4C 39 07 JMP $0739 (...exit) C006A2: AD D8 0A LDA $0AD8 (Get player coordinates) C006A5: DF C0 36 CE CMP $CE36C0,X (On this exit's tile?) C006A9: F0 09 BEQ $06B4 (+9) (If not...) C006AB: 8A TXA (...try next exit) C006AC: 18 CLC C006AD: 69 06 00 ADC #$0006 C006B0: AA TAX C006B1: 4C 9B 06 JMP $069B (Not BRA?) C006B4: A5 59 LDA $59 C006B6: 29 FF 00 AND #$00FF C006B9: F0 03 BEQ $06BE (+3) C006BB: 4C 39 07 JMP $0739 C006BE: 9C A0 16 STZ $16A0 C006C1: AD D6 0A LDA $0AD6 (Get current map ID) C006C4: C9 05 00 CMP #$0005 (5) (World map or underwater?) C006C7: B0 09 BCS $06D2 (+9) (Branch if not) C006C9: 8D F5 0A STA $0AF5 C006CC: AD D8 0A LDA $0AD8 (Get player coordinates) C006CF: 8D F7 0A STA $0AF7 C006D2: BF C2 36 CE LDA $CE36C2,X (Get destination map ID) C006D6: 29 FF 03 AND #$03FF C006D9: 8D D4 0A STA $0AD4 C006DC: 8D D6 0A STA $0AD6 (Set current map ID) C006DF: C9 05 00 CMP #$0005 (5) (World map or underwater?) C006E2: B0 14 BCS $06F8 (+20) (Branch if not) C006E4: A5 06 LDA $06 (A = 0) C006E6: E2 20 SEP #$20 (8-bit A) C006E8: BF C4 36 CE LDA $CE36C4,X (Set destination X) C006EC: 8D 88 10 STA $1088 C006EF: BF C5 36 CE LDA $CE36C5,X (Set destination Y) C006F3: 8D 89 10 STA $1089 C006F6: 80 3F BRA $0737 (+63) C006F8: A5 06 LDA $06 (A = 0) C006FA: E2 20 SEP #$20 (8-bit A) C006FC: BF C3 36 CE LDA $CE36C3,X C00700: 29 08 AND #$08 C00702: F0 03 BEQ $0707 (+3) C00704: EE A0 16 INC $16A0 C00707: BF C3 36 CE LDA $CE36C3,X C0070B: 4A 4A 4A 4A LSR x4 C0070F: 8D 9E 16 STA $169E C00712: BF C4 36 CE LDA $CE36C4,X C00716: 29 C0 AND #$C0 C00718: 4A (x6) LSR x6 C0071E: 85 B9 STA $B9 C00720: 1A INC A C00721: 85 BA STA $BA C00723: 85 BF STA $BF C00725: BF C4 36 CE LDA $CE36C4,X C00729: 29 3F AND #$3F C0072B: 8D 88 10 STA $1088 (Set destination X) C0072E: BF C5 36 CE LDA $CE36C5,X C00732: 29 3F AND #$3F C00734: 8D 89 10 STA $1089 (Set destination Y) C00737: E6 6E INC $6E C00739: A5 06 LDA $06 (A = 0) C0073B: E2 20 SEP #$20 (8-bit A) C0073D: 60 RTS C0073E: A5 61 LDA $61 (Player X-step amount) C00740: 29 1F AND #$1F (Partway through step?) C00742: D0 06 BNE $074A (+6) (Exit if so) C00744: A5 63 LDA $63 (Player Y-step amount) C00746: 29 1F AND #$1F (Partway through step?) C00748: F0 01 BEQ $074B (+1) (If not, continue) C0074A: 60 RTS (Otherwise, exit) C0074B: 20 33 17 JSR $1733 C0074E: AD DC 0A LDA $0ADC (Player vehicle) C00751: 3A DEC A C00752: 0A 0A ASL x2 C00754: 8D 9C 16 STA $169C (Save vehicle RAM offset) C00757: AD DC 0A LDA $0ADC (Vehicle again) C0075A: F0 03 BEQ $075F (+3) (Branch if walking) C0075C: 4C EE 07 JMP $07EE C0075F: A4 06 LDY $06 C00761: 84 23 STY $23 C00763: A4 23 LDY $23 (Pick a vehicle) C00765: B9 DE 0A LDA $0ADE,Y (Is vehicle boardable?) C00768: 30 75 BMI $07DF (+117)(If not, pick next one) C0076A: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C0076D: 29 E0 AND #$E0 (Map containing vehicle) C0076F: 4A (x5) LSR x5 C00774: CD D6 0A CMP $0AD6 (Is vehicle on this map?) C00777: D0 66 BNE $07DF (+102)(If not, pick next one) C00779: B9 DF 0A LDA $0ADF,Y (Vehicle X-coordinate) C0077C: CD D8 0A CMP $0AD8 (Player X-coordinate) C0077F: D0 5E BNE $07DF (+94) (Branch if not equal) C00781: B9 E0 0A LDA $0AE0,Y (Vehicle Y-coordinate) C00784: CD D9 0A CMP $0AD9 (Player Y-coordinate) C00787: D0 56 BNE $07DF (+86) (Branch if not equal) C00789: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C0078C: 29 1C AND #$1C (Get current form) C0078E: C9 10 CMP #$10 (If it's a submarine...) C00790: F0 12 BEQ $07A4 (+18) (...or...) C00792: C9 14 CMP #$14 (...a ship on water...) C00794: F0 0E BEQ $07A4 (+14) (...skip button check) C00796: A5 02 LDA $02 (Joypad buttons) C00798: 29 80 AND #$80 (Is A pressed?) C0079A: F0 51 BEQ $07ED (+81) (Exit if not) C0079C: AD B8 10 LDA $10B8 (Have we checked already?) C0079F: D0 4C BNE $07ED (+76) (Exit if so) C007A1: EE B8 10 INC $10B8 (Mark that A was pressed) C007A4: 8C 9C 16 STY $169C (Save vehicle RAM offset) C007A7: 98 TYA C007A8: 4A 4A LSR x2 C007AA: 1A INC A C007AB: 8D DC 0A STA $0ADC (Set as player vehicle) C007AE: A9 80 LDA #$80 C007B0: 99 DE 0A STA $0ADE,Y (Vehicle can't be boarded if we're already on it) C007B3: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C007B6: 29 1C AND #$1C (Get current form) C007B8: 4A 4A LSR x2 C007BA: AA TAX C007BB: BF B3 08 C0 LDA $C008B3,X (Get vehicle speed) C007BF: 85 C0 STA $C0 C007C1: A9 03 LDA #$03 C007C3: 8D DB 0A STA $0ADB (Make player face left) C007C6: 8A TXA C007C7: 0A ASL A C007C8: AA TAX C007C9: BF 97 08 C0 LDA $C00897,X (Get boarding function pointer) C007CD: 85 26 STA $26 C007CF: BF 98 08 C0 LDA $C00898,X C007D3: 85 27 STA $27 C007D5: 20 83 45 JSR $4583 C007D8: A9 01 LDA #$01 C007DA: 85 58 STA $58 (Make main loop restart) C007DC: 6C 26 0B JMP ($0B26) (Call boarding function) C007DF: A5 23 LDA $23 (Get current vehicle) C007E1: 18 CLC C007E2: 69 04 ADC #$04 (4) (Four bytes in RAM) C007E4: 85 23 STA $23 (Point to next one) C007E6: C9 18 CMP #$18 (Loop over six vehicles) C007E8: F0 03 BEQ $07ED (+3) (Exit after all six) C007EA: 4C 63 07 JMP $0763 (Or go back to loop) C007ED: 60 RTS C007EE: 3A DEC A C007EF: 0A 0A ASL x2 C007F1: A8 TAY C007F2: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C007F5: 29 1C AND #$1C (Get current form) C007F7: 4A 4A LSR x2 C007F9: AA TAX C007FA: AD FB 10 LDA $10FB C007FD: 3F 90 08 C0 AND $C00890,X C00801: D0 EA BNE $07ED (-22) (Exit if vehicle can't be deboarded in the attempted manner) C00803: BB TYX (Copy index to X) C00804: A5 02 LDA $02 (Joypad buttons) C00806: 29 80 AND #$80 (Is A pressed?) C00808: F0 E3 BEQ $07ED (-29) (Exit if not) C0080A: AD B8 10 LDA $10B8 (Have we checked already?) C0080D: D0 DE BNE $07ED (-34) (Exit if so) C0080F: EE B8 10 INC $10B8 (Mark that A was pressed) C00812: A4 06 LDY $06 (Check other vehicles) C00814: 98 TYA C00815: 4A 4A LSR x2 C00817: 1A INC A C00818: CD DC 0A CMP $0ADC (Is vehicle boarded?) C0081B: F0 15 BEQ $0832 (+21) (If so, check next one) C0081D: B9 DE 0A LDA $0ADE,Y (Is vehicle boardable?) C00820: 30 10 BMI $0832 (+16) (If not, check next one) C00822: B9 DF 0A LDA $0ADF,Y (Vehicle X-coordinate) C00825: CD D8 0A CMP $0AD8 (Player X-coordinate) C00828: D0 08 BNE $0832 (+8) (Branch if not equal) C0082A: B9 E0 0A LDA $0AE0,Y (Vehicle Y-coordinate) C0082D: CD D9 0A CMP $0AD9 (Player Y-coordinate) C00830: F0 5D BEQ $088F (+93) (If equal, proceed) C00832: C8 C8 C8 C8 INY x4 (If not, check next one) C00836: C0 18 00 CPY #$0018 (24) (All vehicles checked?) C00839: D0 D9 BNE $0814 (-39) (Loop over all vehicles) C0083B: 8A TXA C0083C: 4A LSR A C0083D: 1A 1A INC x2 C0083F: AA TAX C00840: BF A5 08 C0 LDA $C008A5,X (Get deboarding function pointer) C00844: 85 26 STA $26 C00846: BF A6 08 C0 LDA $C008A6,X C0084A: 85 27 STA $27 C0084C: A9 01 LDA #$01 C0084E: 85 58 STA $58 (Make main loop restart) C00850: 6C 26 0B JMP ($0B26) (Call deboarding function) (Common vehicle deboarding function.) C00853: AC 9C 16 LDY $169C (Vehicle RAM offset) C00856: AD D8 0A LDA $0AD8 (Player X-coordinate) C00859: 99 DF 0A STA $0ADF,Y (Vehicle X-coordinate) C0085C: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0085F: 99 E0 0A STA $0AE0,Y (Vehicle Y-coordinate) C00862: B9 DE 0A LDA $0ADE,Y C00865: 29 7F AND #$7F C00867: 99 DE 0A STA $0ADE,Y (Vehicle now boardable) C0086A: AD D6 0A LDA $0AD6 (Current map ID) C0086D: 0A (x5) ASL x5 C00872: 85 08 STA $08 C00874: B9 DD 0A LDA $0ADD,Y C00877: 29 1F AND #$1F C00879: 05 08 ORA $08 C0087B: 99 DD 0A STA $0ADD,Y (Save to top 3 bits of vehicle properties) C0087E: A9 02 LDA #$02 C00880: 85 C0 STA $C0 (Normal walking speed) C00882: 20 83 45 JSR $4583 C00885: A5 57 LDA $57 C00887: D0 06 BNE $088F (+6) C00889: A2 40 02 LDX #$0240 (576)(Controlled event #288) C0088C: 20 6A 04 JSR $046A (JMP!) C0088F: 60 RTS C00890: 00 (Walking) C00891: 10 (Boco) C00892: 20 (Black chocobo) C00893: 40 (Hiryuu) C00894: 00 (Submarine) C00895: 00 (Boat) C00896: 80 (Airship) (Vehicle boarding function pointers) C00897: 00 00 (Walking - no function) C00899: BA 08 (Boco) C0089B: C1 08 (Black chocobo) C0089D: EF 08 (Hiryuu) C0089F: 8D 09 (Submarine) C008A1: 4D 0A (Boat) C008A3: 57 0A (Airship) (Vehicle deboarding function pointers) C008A5: 00 00 (Walking - no function) C008A7: BB 08 (Boco) C008A9: 1D 09 (Black chocobo) C008AB: 55 09 (Hiryuu) C008AD: 8E 09 (Submarine) C008AF: 54 0A (Boat) C008B1: A3 0A (Airship) C008B3: 02 (Walking) C008B4: 04 (Boco) C008B5: 04 (Black chocobo) C008B6: 04 (Hiryuu) C008B7: 04 (Submarine) C008B8: 04 (Boat) C008B9: 10 (Airship) (Mounting Boco - simply returns without doing anything.) C008BA: 60 RTS (Dismounting Boco.) C008BB: 9C DC 0A STZ $0ADC (Clear player vehicle) C008BE: 4C 53 08 JMP $0853 (Call common deboard fn) (Boarding the black chocobo. Why are there two separate functions for boarding a black chocobo or a Hiryuu if the two functions are identical?!) C008C1: A9 00 LDA #$00 (0) C008C3: 85 3D STA $3D (Not STZ?) C008C5: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C008C8: 20 95 4C JSR $4C95 C008CB: AC 9C 16 LDY $169C (Get RAM offset) C008CE: A5 3D LDA $3D C008D0: AA TAX C008D1: BF 4F 0C C0 LDA $C00C4F,X (Get draw height) C008D5: 09 80 ORA #$80 (Vehicle not boardable) C008D7: 99 DE 0A STA $0ADE,Y (Save to properties) C008DA: 20 37 21 JSR $2137 (Update player sprite) C008DD: 20 2B 61 JSR $612B C008E0: 20 C5 1E JSR $1EC5 (Draw vehicles) C008E3: 20 64 1E JSR $1E64 (Draw shadow under player) C008E6: E6 3D INC $3D C008E8: A5 3D LDA $3D C008EA: C9 40 CMP #$40 (64) C008EC: D0 D7 BNE $08C5 (-41) (Loop 64 times) C008EE: 60 RTS C008EF: A9 00 LDA #$00 (0) C008F1: 85 3D STA $3D C008F3: 20 41 4E JSR $4E41 C008F6: 20 95 4C JSR $4C95 C008F9: AC 9C 16 LDY $169C C008FC: A5 3D LDA $3D C008FE: AA TAX C008FF: BF 4F 0C C0 LDA $C00C4F,X C00903: 09 80 ORA #$80 C00905: 99 DE 0A STA $0ADE,Y C00908: 20 37 21 JSR $2137 C0090B: 20 2B 61 JSR $612B C0090E: 20 C5 1E JSR $1EC5 C00911: 20 64 1E JSR $1E64 C00914: E6 3D INC $3D C00916: A5 3D LDA $3D C00918: C9 40 CMP #$40 (64) C0091A: D0 D7 BNE $08F3 (-41) C0091C: 60 RTS (Black chocobo deboarding function. Let's play spot the difference again!) C0091D: A9 03 LDA #$03 (3) C0091F: 8D DB 0A STA $0ADB (Make chocobo face left) C00922: A9 3F LDA #$3F (63) C00924: 85 3D STA $3D C00926: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00929: 20 95 4C JSR $4C95 C0092C: AC 9C 16 LDY $169C (Get RAM offset) C0092F: A5 3D LDA $3D C00931: AA TAX C00932: BF 4F 0C C0 LDA $C00C4F,X (Get draw height) C00936: 09 80 ORA #$80 (Vehicle not boardable) C00938: 99 DE 0A STA $0ADE,Y (Save to properties) C0093B: 20 37 21 JSR $2137 (Update player sprite) C0093E: 20 2B 61 JSR $612B C00941: 20 C5 1E JSR $1EC5 (Draw vehicles) C00944: 20 64 1E JSR $1E64 (Draw shadow under player) C00947: C6 3D DEC $3D C00949: A5 3D LDA $3D C0094B: C9 FF CMP #$FF (-1) C0094D: D0 D7 BNE $08C5 (-41) (Loop 64 times...BPL!) C0094F: 9C DC 0A STZ $0ADC (Clear player vehicle...why isn't there a pointer here for deboarding Boco?) C00952: 4C 53 08 JMP $0853 (Call common deboard fn) (Hiryuu deboarding function. It's identical to that of the black chocobo, so no comments.) C00955: A9 03 LDA #$03 (3) C00957: 8D DB 0A STA $0ADB C0095A: A9 3F LDA #$3F (63) C0095C: 85 3D STA $3D C0095E: 20 41 4E JSR $4E41 C00961: 20 95 4C JSR $4C95 C00964: AC 9C 16 LDY $169C C00967: A5 3D LDA $3D C00969: AA TAX C0096A: BF 4F 0C C0 LDA $C00C4F,X C0096E: 09 80 ORA #$80 C00970: 99 DE 0A STA $0ADE,Y C00973: 20 37 21 JSR $2137 C00976: 20 2B 61 JSR $612B C00979: 20 C5 1E JSR $1EC5 C0097C: 20 64 1E JSR $1E64 C0097F: C6 3D DEC $3D C00981: A5 3D LDA $3D C00983: C9 FF CMP #$FF (-1) C00985: D0 D7 BNE $08C5 (-41) C00987: 9C DC 0A STZ $0ADC C0098A: 4C 53 08 JMP $0853 (Submarine boarding function - does nothing.) C0098D: 60 RTS (Submarine deboarding function.) C0098E: A9 03 LDA #$03 C00990: 8D DB 0A STA $0ADB (Make sub face left) C00993: AE D6 0A LDX $0AD6 (Get current map ID) C00996: E0 03 00 CPX #$0003 (3) (Overworld map?) C00999: 90 1E BCC $09B9 (+30) (Branch if so) C0099B: AD FA 10 LDA $10FA C0099E: 10 18 BPL $09B8 (+24) C009A0: 20 C6 09 JSR $09C6 (Submarine ascends) C009A3: A2 2A 00 LDX #$002A (42) (Controlled event #21 - load World 2 overworld map) C009A6: 20 6A 04 JSR $046A C009A9: 20 68 4A JSR $4A68 (Prepare screen fade-in) C009AC: A9 01 LDA #$01 (1) C009AE: 85 BD STA $BD C009B0: A9 28 LDA #$28 (40) C009B2: 8D 9B 16 STA $169B (Animation ID) C009B5: 20 FB 22 JSR $22FB (Animate submarine emergence...JMP!) C009B8: 60 RTS C009B9: 20 F7 09 JSR $09F7 (Submarine submerges) C009BC: A2 28 00 LDX #$0028 (40) (Controlled event #20 - load World 2 underwater map) C009BF: 20 6A 04 JSR $046A C009C2: 20 11 0A JSR $0A11 (Sub descends...JMP!) C009C5: 60 RTS (Submarine rises to surface.) C009C6: A9 80 LDA #$80 (-128) C009C8: 85 3D STA $3D C009CA: 64 0D STZ $0D C009CC: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C009CF: A5 0D LDA $0D C009D1: 18 CLC C009D2: 65 3D ADC $3D C009D4: 85 0D STA $0D C009D6: 90 0C BCC $09E4 (+12) C009D8: CE 89 02 DEC $0289 C009DB: CE 8D 02 DEC $028D C009DE: CE 91 02 DEC $0291 C009E1: CE 95 02 DEC $0295 C009E4: A5 3D LDA $3D C009E6: C9 C0 CMP #$C0 C009E8: D0 08 BNE $09F2 (+8) C009EA: A9 84 LDA #$84 C009EC: 85 43 STA $43 C009EE: A9 F0 LDA #$F0 C009F0: 85 45 STA $45 C009F2: E6 3D INC $3D C009F4: D0 D6 BNE $09CC (-42) (Loop 128 times) C009F6: 60 RTS (This function handles submarine going underwater.) C009F7: A9 01 LDA #$01 (1) C009F9: 85 5B STA $5B C009FB: 20 98 47 JSR $4798 C009FE: A9 88 LDA #$88 (-120) C00A00: 85 43 STA $43 C00A02: A9 F0 LDA #$F0 (-16) C00A04: 85 45 STA $45 C00A06: A9 20 LDA #$20 (32) C00A08: 8D 9B 16 STA $169B (Animation ID) C00A0B: 20 FB 22 JSR $22FB (Animate submarine going below surface) C00A0E: 64 5B STZ $5B C00A10: 60 RTS (This function handles submarine descending while underwater.) C00A11: A9 08 LDA #$08 (8) C00A13: 85 43 STA $43 C00A15: 64 45 STZ $45 C00A17: 20 37 21 JSR $2137 (Update player sprite) C00A1A: 9C 89 02 STZ $0289 (Top two player sprite quadrants' Y-coordinates = 0) C00A1D: 9C 8D 02 STZ $028D C00A20: A9 08 LDA #$08 (8) C00A22: 8D 91 02 STA $0291 (Bottom two sprite quadrants' Y-coordinate = 8) C00A25: 8D 95 02 STA $0295 C00A28: A9 FD LDA #$FD (-3) (For i = -3; i < 0; i--) C00A2A: 85 3D STA $3D (Terminates after -128) C00A2C: 64 0D STZ $0D (Init frame control) C00A2E: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00A31: A5 0D LDA $0D (Get frame control) C00A33: 38 SEC C00A34: E5 3D SBC $3D (Subtract i, which is negative, so it's the same as adding a positive number) C00A36: 85 0D STA $0D C00A38: B0 0C BCS $0A46 (+12) (If no overflow...) C00A3A: EE 89 02 INC $0289 (...sub descends 1 pixel) C00A3D: EE 8D 02 INC $028D C00A40: EE 91 02 INC $0291 C00A43: EE 95 02 INC $0295 C00A46: C6 3D DEC $3D C00A48: A5 3D LDA $3D C00A4A: 30 E2 BMI $0A2E (-30) (Loop 125 times) C00A4C: 60 RTS (Boat boarding function.) C00A4D: A2 FC 01 LDX #$01FC (508)(Controlled event #254 - check for Steamship boarding or heroes' resolve cutscene) C00A50: 20 6A 04 JSR $046A (JMP!) C00A53: 60 RTS (Boat deboarding function.) C00A54: 64 58 STZ $58 (Make main loop proceed) C00A56: 60 RTS (Airship boarding function.) C00A57: 20 98 47 JSR $4798 C00A5A: A9 00 LDA #$00 (0) C00A5C: 85 3D STA $3D C00A5E: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00A61: 20 F8 5B JSR $5BF8 C00A64: 20 95 4C JSR $4C95 C00A67: AC 9C 16 LDY $169C (RAM offset) C00A6A: A5 3D LDA $3D C00A6C: AA TAX C00A6D: BF 4F 0C C0 LDA $C00C4F,X (Get airship height) C00A71: 85 6F STA $6F C00A73: 0A ASL A (Multiply by 2) C00A74: 09 80 ORA #$80 (Vehicle not boardable) C00A76: 99 DE 0A STA $0ADE,Y (Save to properties) C00A79: A5 6F LDA $6F C00A7B: F0 11 BEQ $0A8E (+17) C00A7D: C9 0C CMP #$0C (12) C00A7F: B0 0D BCS $0A8E (+13) C00A81: A9 70 LDA #$70 (112) C00A83: 8D 79 18 STA $1879 C00A86: A9 7B LDA #$7B (123) C00A88: 8D 7A 18 STA $187A C00A8B: 20 41 47 JSR $4741 C00A8E: 20 37 21 JSR $2137 (Update player sprite) C00A91: 20 2B 61 JSR $612B C00A94: 20 64 1E JSR $1E64 (Draw shadow under player) C00A97: 20 F7 47 JSR $47F7 C00A9A: E6 3D INC $3D C00A9C: A5 3D LDA $3D C00A9E: C9 40 CMP #$40 (64) C00AA0: D0 BC BNE $0A5E (-68) (Loop 64 times) C00AA2: 60 RTS (Airship deboarding function.) C00AA3: A9 03 LDA #$03 (3) C00AA5: 8D DB 0A STA $0ADB (Make airship face left) C00AA8: AD F1 0A LDA $0AF1 (Get airship mode) C00AAB: 29 03 AND #$03 C00AAD: F0 4C BEQ $0AFB (+76) (Branch if flying) C00AAF: 3A DEC A C00AB0: D0 03 BNE $0AB5 (+3) (Branch if not on water) C00AB2: 4C D1 0B JMP $0BD1 C00AB5: 3A DEC A C00AB6: D0 0D BNE $0AC5 (+13) (Branch if underwater) C00AB8: 20 F7 09 JSR $09F7 (Submarine submerges) C00ABB: A2 2C 00 LDX #$002C (44) (Controlled event #22 - load World 3 underwater map) C00ABE: 20 6A 04 JSR $046A C00AC1: 20 11 0A JSR $0A11 (Sub descends...JMP!) C00AC4: 60 RTS C00AC5: AD FA 10 LDA $10FA C00AC8: 10 30 BPL $0AFA (+48) C00ACA: 20 C6 09 JSR $09C6 (Submarine ascends) C00ACD: A2 2E 00 LDX #$002E (46) (Controlled event #23 - load World 3 overworld map) C00AD0: 20 6A 04 JSR $046A C00AD3: 20 68 4A JSR $4A68 (Prepare screen fade-in) C00AD6: A9 01 LDA #$01 (1) C00AD8: 85 BD STA $BD C00ADA: A9 28 LDA #$28 (40) C00ADC: 8D 9B 16 STA $169B (Animation ID) C00ADF: 20 FB 22 JSR $22FB (Animate sub emerging) C00AE2: A9 18 LDA #$18 (24) C00AE4: 8D 9B 16 STA $169B (Animation ID) C00AE7: 20 FB 22 JSR $22FB (Animate change to boat) C00AEA: AD F1 0A LDA $0AF1 C00AED: 29 E0 AND #$E0 C00AEF: 09 15 ORA #$15 (Change to boat on water) C00AF1: 8D F1 0A STA $0AF1 C00AF4: 20 83 45 JSR $4583 C00AF7: 20 41 4E JSR $4E41 (JMP!) C00AFA: 60 RTS C00AFB: A5 57 LDA $57 C00AFD: D0 5D BNE $0B5C (+93) C00AFF: A9 FA LDA #$FA (-6) C00B01: 20 3C CA JSR $CA3C (Get event flag $1FA - Adamantium active) C00B04: C9 00 CMP #$00 (Is flag set?) C00B06: F0 54 BEQ $0B5C (+84) (Branch if not) C00B08: 20 9F 0C JSR $0C9F (Choose up or down) C00B0B: AD 97 16 LDA $1697 (Get choice) C00B0E: 30 4B BMI $0B5B (+75) (Exit if cancelled) C00B10: D0 4A BNE $0B5C (+74) (Branch if choice is down) C00B12: A9 80 LDA #$80 (128) (For i = 128; i != 0; i++) C00B14: 85 3D STA $3D (128-iteration loop) C00B16: 64 DA STZ $DA (Init frame control) C00B18: 64 DB STZ $DB C00B1A: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00B1D: 20 37 21 JSR $2137 (Update player sprite) C00B20: A5 DA LDA $DA C00B22: 18 CLC C00B23: 65 3D ADC $3D (Add iteration number) C00B25: 85 DA STA $DA C00B27: 90 02 BCC $0B2B (+2) C00B29: E6 DB INC $DB (Add carry to high byte) C00B2B: AD 89 02 LDA $0289 (Get Y-coord of top half) C00B2E: 38 SEC C00B2F: E5 DB SBC $DB (Move up at accel'd rate) C00B31: 8D 89 02 STA $0289 (Update top half Y-coord) C00B34: 8D 8D 02 STA $028D C00B37: AD 91 02 LDA $0291 (Do the same for...) C00B3A: 38 SEC C00B3B: E5 DB SBC $DB C00B3D: 8D 91 02 STA $0291 (...the bottom half!) C00B40: 8D 95 02 STA $0295 C00B43: A5 3D LDA $3D C00B45: C9 C0 CMP #$C0 (-64) C00B47: D0 08 BNE $0B51 (+8) C00B49: A9 84 LDA #$84 (-124) C00B4B: 85 43 STA $43 C00B4D: A9 F0 LDA #$F0 (-16) C00B4F: 85 45 STA $45 C00B51: E6 3D INC $3D C00B53: D0 C5 BNE $0B1A (-59) (Loop 128 times) C00B55: A2 1E 00 LDX #$001E (30) (Controlled event #15 - facing Lonka Ruins in the sky) C00B58: 20 6A 04 JSR $046A (JMP!) C00B5B: 60 RTS C00B5C: A9 2F LDA #$2F (47) C00B5E: 85 3D STA $3D C00B60: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00B63: 20 F8 5B JSR $5BF8 C00B66: 20 95 4C JSR $4C95 C00B69: AC 9C 16 LDY $169C (Get RAM offset) C00B6C: A5 3D LDA $3D C00B6E: AA TAX C00B6F: BF 5F 0C C0 LDA $C00C5F,X (Get vehicle height) C00B73: 85 6F STA $6F C00B75: 0A ASL A (Multiply by 2) C00B76: 09 80 ORA #$80 (Vehicle not boardable) C00B78: 99 DE 0A STA $0ADE,Y (Save to properties) C00B7B: 20 37 21 JSR $2137 (Update player sprite) C00B7E: 20 2B 61 JSR $612B C00B81: 20 64 1E JSR $1E64 (Draw shadow under player) C00B84: 20 F8 5B JSR $5BF8 C00B87: C6 3D DEC $3D C00B89: A5 3D LDA $3D C00B8B: C9 FF CMP #$FF (-1) C00B8D: D0 D1 BNE $0B60 (-47) (Loop 48 times...BPL!) C00B8F: AD FA 10 LDA $10FA C00B92: 29 10 AND #$10 (Is tile boatable?) C00B94: F0 32 BEQ $0BC8 (+50) (If not, branch) C00B96: A9 01 LDA #$01 (1) C00B98: 85 5B STA $5B C00B9A: 20 C4 46 JSR $46C4 C00B9D: 9C 9B 16 STZ $169B (Animation ID = 0) C00BA0: 20 FB 22 JSR $22FB (Animate change to boat) C00BA3: 64 5B STZ $5B C00BA5: AC 9C 16 LDY $169C (Get vehicle RAM offset) C00BA8: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C00BAB: 29 E0 AND #$E0 C00BAD: 09 15 ORA #$15 C00BAF: 99 DD 0A STA $0ADD,Y (Airship now a water boat) C00BB2: A9 80 LDA #$80 (-128) C00BB4: 99 DE 0A STA $0ADE,Y (Still not boardable) C00BB7: A9 04 LDA #$04 (4) C00BB9: 85 C0 STA $C0 (Fast movement speed) C00BBB: 20 37 21 JSR $2137 (Update player sprite) C00BBE: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00BC1: 20 83 45 JSR $4583 C00BC4: 20 41 4E JSR $4E41 (JMP!) C00BC7: 60 RTS C00BC8: 9C DC 0A STZ $0ADC (Clear player vehicle) C00BCB: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00BCE: 4C 53 08 JMP $0853 (Call common deboard fn) C00BD1: AD DC 0A LDA $0ADC (Get player vehicle) C00BD4: C9 06 CMP #$06 (Is it an airship?) C00BD6: D0 46 BNE $0C1E (+70) (Exit if not) C00BD8: A5 57 LDA $57 C00BDA: D0 13 BNE $0BEF (+19) C00BDC: A9 F9 LDA #$F9 (-7) C00BDE: 20 3C CA JSR $CA3C (Get event flag $1F9 - Airship has a submarine option) C00BE1: C9 00 CMP #$00 (Is flag set?) C00BE3: F0 0A BEQ $0BEF (+10) (Branch if not) C00BE5: 20 9F 0C JSR $0C9F (Choose up or down) C00BE8: AD 97 16 LDA $1697 (Get choice) C00BEB: 30 31 BMI $0C1E (+49) (Exit if cancelled) C00BED: D0 30 BNE $0C1F (+48) (Branch if choice is down) C00BEF: A9 08 LDA #$08 (8) C00BF1: 8D 9B 16 STA $169B (Animation ID) C00BF4: A9 80 LDA #$80 (-128) C00BF6: 99 DE 0A STA $0ADE,Y (Still not boardable) C00BF9: AC 9C 16 LDY $169C (Vehicle RAM offset) C00BFC: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C00BFF: 29 E0 AND #$E0 C00C01: 09 18 ORA #$18 C00C03: 99 DD 0A STA $0ADD,Y (Airship is an airship) C00C06: A9 03 LDA #$03 (3) C00C08: 8D DB 0A STA $0ADB (Make airship face left) C00C0B: A9 10 LDA #$10 C00C0D: 85 C0 STA $C0 (Super-fast airship speed) C00C0F: 20 83 45 JSR $4583 C00C12: 20 FB 22 JSR $22FB (Animate boat converting to airship) C00C15: A9 01 LDA #$01 C00C17: 85 5B STA $5B C00C19: 20 57 0A JSR $0A57 (Airship takes to air) C00C1C: 64 5B STZ $5B C00C1E: 60 RTS (Airship converts to a submarine and submerges.) C00C1F: A9 10 LDA #$10 (16) C00C21: 8D 9B 16 STA $169B (Animation ID) C00C24: A9 80 LDA #$80 (-128) C00C26: 99 DE 0A STA $0ADE,Y (Still not boardable) C00C29: 20 FB 22 JSR $22FB (Animate sub conversion) C00C2C: AC 9C 16 LDY $169C (Vehicle RAM offset) C00C2F: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C00C32: 29 E0 AND #$E0 C00C34: 09 10 ORA #$10 C00C36: 99 DD 0A STA $0ADD,Y (Airship is a submarine) C00C39: A9 03 LDA #$03 (3) C00C3B: 8D DB 0A STA $0ADB (Make sub face left) C00C3E: A9 02 LDA #$02 (2) (Not DEC A?) C00C40: 85 C0 STA $C0 (Normal speed) C00C42: 20 F7 09 JSR $09F7 (Submarine submerges) C00C45: A2 2C 00 LDX #$002C (44) (Controlled event #22 - load World 3 underwater map) C00C48: 20 6A 04 JSR $046A C00C4B: 20 11 0A JSR $0A11 (Sub descends...JMP!) C00C4E: 60 RTS (This table contains the airship's height on screen in frames of animation ascending or descending.) C00C4F: 00 C00C50: 00 C00C51: 00 C00C52: 00 C00C53: 00 C00C54: 00 C00C55: 00 C00C56: 00 C00C57: 00 C00C58: 00 C00C59: 00 C00C5A: 00 C00C5B: 00 C00C5C: 00 C00C5D: 00 C00C5E: 00 C00C5F: 00 C00C60: 01 C00C61: 01 C00C62: 01 C00C63: 01 C00C64: 02 C00C65: 02 C00C66: 02 C00C67: 02 C00C68: 03 C00C69: 03 C00C6A: 03 C00C6B: 04 C00C6C: 04 C00C6D: 04 C00C6E: 05 C00C6F: 05 C00C70: 05 C00C71: 06 C00C72: 06 C00C73: 06 C00C74: 07 C00C75: 07 C00C76: 08 C00C77: 08 C00C78: 08 C00C79: 09 C00C7A: 09 C00C7B: 0A C00C7C: 0A C00C7D: 0A C00C7E: 0B C00C7F: 0B C00C80: 0B C00C81: 0C C00C82: 0C C00C83: 0C C00C84: 0D C00C85: 0D C00C86: 0D C00C87: 0E C00C88: 0E C00C89: 0E C00C8A: 0E C00C8B: 0F C00C8C: 0F C00C8D: 0F C00C8E: 0F C00C8F: 0F C00C90: 0F C00C91: 0F C00C92: 0F C00C93: 0F C00C94: 0F C00C95: 0F C00C96: 0F C00C97: 0F C00C98: 0F C00C99: 0F C00C9A: 0F C00C9B: 0F C00C9C: 0F C00C9D: 0F C00C9E: 0F C00C9F: 9C 97 16 STZ $1697 (Default choice: up) C00CA2: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C00CA5: 20 95 4C JSR $4C95 C00CA8: 20 37 21 JSR $2137 (Update player sprite) C00CAB: 20 2B 61 JSR $612B C00CAE: 20 64 1E JSR $1E64 (Draw shadow under player) C00CB1: A5 03 LDA $03 (Joypad buttons) C00CB3: 29 80 AND #$80 (Is B pressed?) C00CB5: F0 06 BEQ $0CBD (+6) (Branch if not) C00CB7: A9 80 LDA #$80 C00CB9: 8D 97 16 STA $1697 (Choice: cancellation) C00CBC: 60 RTS C00CBD: A5 02 LDA $02 C00CBF: 29 80 AND #$80 (Is A pressed?) C00CC1: F0 0A BEQ $0CCD (+10) (Branch if not) C00CC3: AD B8 10 LDA $10B8 (Have we checked already?) C00CC6: D0 05 BNE $0CCD (+5) (Branch if so) C00CC8: EE B8 10 INC $10B8 (Mark that A was pressed) C00CCB: 80 6F BRA $0D3C (+111)(Forced branch to RTS?!) C00CCD: A5 03 LDA $03 C00CCF: 29 0C AND #$0C (Up or down pressed?) C00CD1: F0 0E BEQ $0CE1 (+14) (Branch if not) C00CD3: C9 08 CMP #$08 (Only up pressed?) C00CD5: D0 05 BNE $0CDC (+5) (Branch if not) C00CD7: 9C 97 16 STZ $1697 (Current choice: up) C00CDA: 80 05 BRA $0CE1 (+5) C00CDC: A9 01 LDA #$01 (1) C00CDE: 8D 97 16 STA $1697 (Current choice: down) C00CE1: AD 97 16 LDA $1697 (Get current choice) C00CE4: D0 06 BNE $0CEC (+6) (If it's down, draw solid up arrow) C00CE6: A5 3F LDA $3F (Get frame counter) C00CE8: 29 08 AND #$08 (Every eight frames, alternate executing or foregoing flashing up arrow draw) C00CEA: D0 21 BNE $0D0D (+33) C00CEC: AC 9C 16 LDY $169C (Vehicle RAM offset) C00CEF: B9 DE 0A LDA $0ADE,Y (Get airship's height) C00CF2: 29 7F AND #$7F C00CF4: 85 08 STA $08 C00CF6: A9 64 LDA #$64 (100) C00CF8: 38 SEC C00CF9: E5 08 SBC $08 (100 - height) C00CFB: 8D 01 02 STA $0201 (Draw arrow at that Y-coordinate) C00CFE: A9 74 LDA #$74 (116) C00D00: 8D 00 02 STA $0200 (X-coordinate = 116) C00D03: A9 48 LDA #$48 (72) (Up arrow character) C00D05: 8D 02 02 STA $0202 C00D08: A9 36 LDA #$36 (54) (Palette 3, priority 3) C00D0A: 8D 03 02 STA $0203 C00D0D: AD 97 16 LDA $1697 (Get current choice) C00D10: F0 06 BEQ $0D18 (+6) (If it's up, draw solid down arrow) C00D12: A5 3F LDA $3F (Get frame counter) C00D14: 29 08 AND #$08 (Every eight frames, alternate executing or foregoing flashing down arrow draw) C00D16: D0 21 BNE $0D39 (+33) C00D18: AC 9C 16 LDY $169C (Vehicle RAM offset) C00D1B: B9 DE 0A LDA $0ADE,Y (Get airship's height) C00D1E: 29 7F AND #$7F C00D20: 85 08 STA $08 C00D22: A9 7E LDA #$7E (126) C00D24: 38 SEC C00D25: E5 08 SBC $08 (126 - height) C00D27: 8D 05 02 STA $0205 (Draw arrow at that Y-coordinate) C00D2A: A9 74 LDA #$74 (116) C00D2C: 8D 04 02 STA $0204 (X-coordinate = 116) C00D2F: A9 48 LDA #$48 (Up arrow character) C00D31: 8D 06 02 STA $0206 C00D34: A9 B6 LDA #$B6 (Flip vertically) C00D36: 8D 07 02 STA $0207 C00D39: 4C A2 0C JMP $0CA2 (Loop until choice is finalized) C00D3C: 60 RTS (This function seems to be for handling treasure acquisition.) C00D3D: A5 61 LDA $61 (Player X-step amount) C00D3F: 29 1F AND #$1F (Partway through step?) C00D41: D0 30 BNE $0D73 (+48) (Exit if so) C00D43: A5 63 LDA $63 (Player Y-step amount) C00D45: 29 1F AND #$1F (Partway through step?) C00D47: D0 2A BNE $0D73 (+42) (Exit if so) C00D49: 20 E8 17 JSR $17E8 C00D4C: A9 F1 LDA #$F1 (-15) C00D4E: 20 3C CA JSR $CA3C (Get event flag $1F1) C00D51: C9 00 CMP #$00 (Is flag set?) C00D53: D0 0E BNE $0D63 (+14) (If so, skip button check) C00D55: A5 02 LDA $02 (Joypad buttons) C00D57: 29 80 AND #$80 (Is A pressed?) C00D59: F0 18 BEQ $0D73 (+24) (Branch if not) C00D5B: AD B8 10 LDA $10B8 (Have we checked already?) C00D5E: D0 13 BNE $0D73 (+19) (Branch if so) C00D60: EE B8 10 INC $10B8 (Mark that A was pressed) C00D63: 20 7B 31 JSR $317B C00D66: A5 58 LDA $58 C00D68: D0 09 BNE $0D73 (+9) C00D6A: A5 02 LDA $02 C00D6C: 29 80 AND #$80 (Is A pressed?) C00D6E: F0 03 BEQ $0D73 (+3) (If not, exit) C00D70: 20 74 0D JSR $0D74 (Don't need this!) C00D73: 60 RTS C00D74: C2 20 REP #$20 (16-bit A) C00D76: AD D4 0A LDA $0AD4 (Get map ID) C00D79: AA TAX C00D7A: BF 00 30 D1 LDA $D13000,X (Get treasure offset) C00D7E: 29 FF 00 AND #$00FF (Make it 8-bit value) C00D81: 0A 0A ASL x2 (Multiply by 4 bytes) C00D83: 85 23 STA $23 C00D85: BF 01 30 D1 LDA $D13001,X (Get next offset) C00D89: 29 FF 00 AND #$00FF (Make it 8-bit value) C00D8C: 0A 0A ASL x2 (Multiply by 4 bytes) C00D8E: 85 26 STA $26 C00D90: A5 06 LDA $06 (A = 0) C00D92: E2 20 SEP #$20 (8-bit A) C00D94: AD DB 0A LDA $0ADB (Direction player faces) C00D97: AA TAX C00D98: AD D8 0A LDA $0AD8 (Player X-coordinate) C00D9B: 18 CLC C00D9C: 7F 84 0F C0 ADC $C00F84,X (Add facing unit vector) C00DA0: 29 3F AND #$3F (MOD 64) C00DA2: 85 75 STA $75 (Store faced tile coords) C00DA4: AD D9 0A LDA $0AD9 (Player Y-coordinate) C00DA7: 18 CLC C00DA8: 7F 88 0F C0 ADC $C00F88,X (Add facing unit vector) C00DAC: 29 3F AND #$3F (MOD 64) C00DAE: 85 76 STA $76 (Store faced tile coords) C00DB0: A6 23 LDX $23 (Current treasure offset) C00DB2: E4 26 CPX $26 (Reached ending offset?) C00DB4: F0 1C BEQ $0DD2 (+28) (We don't need this!) C00DB6: B0 1A BCS $0DD2 (+26) (If so, exit) C00DB8: BF 10 32 D1 LDA $D13210,X (Treasure's X-coordinate) C00DBC: C5 75 CMP $75 (Facing that direction?) C00DBE: D0 0A BNE $0DCA (+10) (Branch if not) C00DC0: BF 11 32 D1 LDA $D13211,X (Treasure's Y-coordinate) C00DC4: C5 76 CMP $76 (Facing that direction?) C00DC6: D0 02 BNE $0DCA (+2) (Branch if not) C00DC8: 80 09 BRA $0DD3 (+9) (BEQ...) (If we're not facing that treasure, check the next one.) C00DCA: E8 E8 E8 E8 INX x4 C00DCE: 86 23 STX $23 C00DD0: 80 DE BRA $0DB0 (-34) C00DD2: 60 RTS C00DD3: C2 20 REP #$20 (16-bit A) C00DD5: 8A TXA C00DD6: 4A 4A LSR x2 C00DD8: E2 20 SEP #$20 (8-bit A) C00DDA: EB XBA C00DDB: A9 00 LDA #$00 (0) C00DDD: EB XBA (This clears high byte of A, but you could've done AND #$00FF instead...) C00DDE: 8D A1 16 STA $16A1 (Treasure ID) C00DE1: 20 16 CA JSR $CA16 (Is it already obtained?) C00DE4: C9 00 CMP #$00 C00DE6: D0 EA BNE $0DD2 (-22) (If so, exit) C00DE8: A9 01 LDA #$01 C00DEA: 85 58 STA $58 (Make main loop restart) C00DEC: 64 BA STZ $BA C00DEE: A6 23 LDX $23 (Treasure offset) C00DF0: DA PHX (Preserve) C00DF1: BF 11 32 D1 LDA $D13211,X (Treasure's Y-coordinate) C00DF5: C2 20 REP #$20 (16-bit A) C00DF7: 0A (x6) ASL x6 (Multiply by 64) C00DFD: 85 0D STA $0D C00DFF: BF 10 32 D1 LDA $D13210,X (Treasure's X-coordinate) C00E03: 29 FF 00 AND #$00FF (8-bit value) C00E06: 18 CLC C00E07: 65 0D ADC $0D (Add to product...) C00E09: AA TAX (...to get tile index) C00E0A: A5 06 LDA $06 (A = 0) C00E0C: E2 20 SEP #$20 (8-bit A) C00E0E: BF 00 00 7F LDA $7F0000,X C00E12: C9 02 CMP #$02 (2) (Treasure in a chest?) C00E14: D0 18 BNE $0E2E (+24) (Branch if not) C00E16: A9 8E LDA #$8E (-114) C00E18: 20 3C 46 JSR $463C (Play chest opening sound) C00E1B: A6 06 LDX $06 C00E1D: 86 73 STX $73 C00E1F: A2 01 01 LDX #$0101 (257) C00E22: 86 2C STX $2C C00E24: A9 12 LDA #$12 (18) C00E26: 8D B3 16 STA $16B3 C00E29: 20 08 6F JSR $6F08 (Replace closed chest tile with opened chest tile) C00E2C: 80 05 BRA $0E33 (+5) C00E2E: A9 68 LDA #$68 (104) C00E30: 20 3C 46 JSR $463C C00E33: FA PLX C00E34: BF 12 32 D1 LDA $D13212,X (Treasure properties) C00E38: 85 11 STA $11 C00E3A: BF 13 32 D1 LDA $D13213,X (Item ID) C00E3E: 85 12 STA $12 C00E40: A5 11 LDA $11 (Treasure properties) C00E42: 10 03 BPL $0E47 (+3) (Branch if it's not a monster-in-a-box) C00E44: 4C BC 0E JMP $0EBC (Could've used BMI...) C00E47: 29 E0 AND #$E0 (Isolate treasure type) C00E49: D0 18 BNE $0E63 (+24) (Branch if not Gil) C00E4B: 20 3D 0F JSR $0F3D (Get amount of Gil) C00E4E: 20 FE 0E JSR $0EFE (Add to player's Gil) C00E51: 20 D7 4D JSR $4DD7 C00E54: A2 03 00 LDX #$0003 (3) C00E57: 86 AF STX $AF C00E59: 20 AE 83 JSR $83AE (Display amount obtained) C00E5C: AD A1 16 LDA $16A1 (Treasure ID) C00E5F: 20 21 CA JSR $CA21 (Mark as obtained...JMP!) C00E62: 60 RTS C00E63: C9 20 CMP #$20 (Is treasure a spell?) C00E65: D0 17 BNE $0E7E (+23) (Branch if not) C00E67: A5 12 LDA $12 (Get spell ID) C00E69: 8D A3 16 STA $16A3 C00E6C: 20 A5 C9 JSR $C9A5 (Add to repertoire) C00E6F: A2 04 00 LDX #$0004 (4) C00E72: 86 AF STX $AF C00E74: 20 AE 83 JSR $83AE (Display obtained spell) C00E77: AD A1 16 LDA $16A1 (Treasure ID) C00E7A: 20 21 CA JSR $CA21 (Mark as obtained...JMP!) C00E7D: 60 RTS C00E7E: A5 12 LDA $12 (Get item ID) C00E80: 20 DD BF JSR $BFDD (Find slot in inventory) C00E83: C0 00 01 CPY #$0100 C00E86: F0 10 BEQ $0E98 (+16) (Branch if slot not found) C00E88: B9 40 07 LDA $0740,Y (Get item quantity) C00E8B: C9 63 CMP #$63 (99) (Do we have 99?) C00E8D: F0 1E BEQ $0EAD (+30) (If not...) C00E8F: B9 40 07 LDA $0740,Y C00E92: 1A INC A C00E93: 99 40 07 STA $0740,Y (...increase quantity) C00E96: 80 15 BRA $0EAD (+21) C00E98: A4 06 LDY $06 (Y = 0) C00E9A: B9 40 06 LDA $0640,Y (Item type in inventory) C00E9D: F0 03 BEQ $0EA2 (+3) (Branch if slot is empty) C00E9F: C8 INY (Loop over every slot) C00EA0: 80 F8 BRA $0E9A (-8) C00EA2: AD A2 16 LDA $16A2 (Get item ID) C00EA5: 99 40 06 STA $0640,Y (Write in slot) C00EA8: A9 01 LDA #$01 (1) C00EAA: 99 40 07 STA $0740,Y (Set quantity to 1) C00EAD: A2 02 00 LDX #$0002 (2) C00EB0: 86 AF STX $AF C00EB2: 20 AE 83 JSR $83AE (Display item obtained) C00EB5: AD A1 16 LDA $16A1 (Treasure ID) C00EB8: 20 21 CA JSR $CA21 (Mark as obtained...JMP!) C00EBB: 60 RTS (This is called whenever a monster-in-a-box happens.) C00EBC: A2 05 00 LDX #$0005 C00EBF: 86 AF STX $AF C00EC1: 20 AE 83 JSR $83AE (Display "Monster-in-a-box!" message) C00EC4: A9 FF LDA #$FF (-1) C00EC6: 8D E0 0B STA $0BE0 (Not $E0?) C00EC9: A5 11 LDA $11 C00ECB: 29 3F AND #$3F C00ECD: 09 40 ORA #$40 (Enemy formation?) C00ECF: A6 11 LDX $11 C00ED1: DA PHX (Save treasure properties) C00ED2: 20 E6 BD JSR $BDE6 (Start battle) C00ED5: AD C4 09 LDA $09C4 C00ED8: 29 01 AND #$01 (Annihilated?) C00EDA: F0 08 BEQ $0EE4 (+8) (Branch if not) C00EDC: A9 F0 LDA #$F0 C00EDE: 8D 00 1D STA $1D00 C00EE1: 4C 00 00 JMP $0000 (Reset game) (This is called when we beat a monster-in-a-box.) C00EE4: 20 76 54 JSR $5476 C00EE7: FA PLX (Restore treasure props) C00EE8: 86 11 STX $11 C00EEA: AD C4 09 LDA $09C4 C00EED: 29 02 AND #$02 (Ran away?) C00EEF: D0 0C BNE $0EFD (+12) (If so, no treasure) C00EF1: A5 11 LDA $11 C00EF3: 29 40 AND #$40 (Is treasure a spell?) C00EF5: D0 03 BNE $0EFA (+3) C00EF7: 4C 7E 0E JMP $0E7E (Call this if not) C00EFA: 4C 67 0E JMP $0E67 (Call this if so) C00EFD: 60 RTS (Player gains Gil.) C00EFE: AD 47 09 LDA $0947 (Low byte of Gil) C00F01: 18 CLC C00F02: 65 37 ADC $37 (Add low byte of gain) C00F04: 8D 47 09 STA $0947 C00F07: AD 48 09 LDA $0948 (Mid byte of Gil) C00F0A: 65 38 ADC $38 (Add mid byte of gain) C00F0C: 8D 48 09 STA $0948 C00F0F: AD 49 09 LDA $0949 (High byte of Gil) C00F12: 65 39 ADC $39 (Add high byte of gain) C00F14: 8D 49 09 STA $0949 (Enforce max 9,999,999) C00F17: C9 98 CMP #$98 (152) C00F19: F0 04 BEQ $0F1F (+4) (9,961,472 to 10,027,007) C00F1B: 90 1F BCC $0F3C (+31) (< 9,961,472; exit) C00F1D: B0 12 BCS $0F31 (+18) (> 10,027,007; apply cap) C00F1F: AD 48 09 LDA $0948 C00F22: C9 96 CMP #$96 (150) C00F24: F0 04 BEQ $0F2A (+4) (9,999,872 to 10,000,127) C00F26: 90 14 BCC $0F3C (+20) (< 9,999,872; exit) C00F28: B0 07 BCS $0F31 (+7) (> 10,000,127; apply cap) C00F2A: AD 47 09 LDA $0947 C00F2D: C9 7F CMP #$7F (127) (#$80 would work better) C00F2F: 90 0B BCC $0F3C (+11) (< 9,999,999; exit) C00F31: A2 96 98 LDX #$9896 (39,062) C00F34: 8E 48 09 STX $0948 C00F37: A9 7F LDA #$7F (127) C00F39: 8D 47 09 STA $0947 (Now capped at 9,999,999) C00F3C: 60 RTS (Figure out how much Gil is gained.) C00F3D: 64 39 STZ $39 (Zero out high byte) C00F3F: A5 11 LDA $11 (Get digit place) C00F41: 29 07 AND #$07 C00F43: 0A ASL A C00F44: AA TAX C00F45: A5 12 LDA $12 (Get factor) C00F47: 8D 02 42 STA $4202 C00F4A: BF 78 0F C0 LDA $C00F78,X (Multiply by 10^X - low) C00F4E: 8D 03 42 STA $4203 C00F51: EA EA EA EA NOP x4 (Wait for multiplication) C00F55: AC 16 42 LDY $4126 (Get product) C00F58: 84 37 STY $37 (Store in low gain bytes) C00F5A: A5 12 LDA $12 (Get factor) C00F5C: 8D 02 42 STA $4202 C00F5F: BF 79 0F C0 LDA $C00F79,X (Multiply by 10^X - high) C00F63: 8D 03 42 STA $4203 C00F66: EA EA EA NOP x3 (Wait for multiplication) C00F69: C2 20 REP #$20 (16-bit A) C00F6B: AD 16 42 LDA $4216 (Get product) C00F6E: 18 CLC (Could've done REP #$21) C00F6F: 65 38 ADC $38 (Add in mid byte of gain) C00F71: 85 38 STA $38 (Store high) C00F73: A5 06 LDA $06 (A = 0) C00F75: E2 20 SEP #$20 (8-bit A) C00F77: 60 RTS (Base amounts of Gil.) C00F78: 01 00 (1) C00F7A: 0A 00 (10) C00F7C: 64 00 (100) C00F7E: E8 03 (1,000) C00F80: 10 27 (10,000) C00F82: A0 86 (34,464 - meant to be 100,000 but that's a 24-bit value and unfortunately Square did not accommodate for this stipulation, but thankfully there are no known occurrences) (X-coordinates of all four unit vectors.) C00F84: 00 (Up, 0) C00F85: 01 (Right, +1) C00F86: 00 (Down, 0) C00F87: FF (Left, -1) (Y-coordinates of all four unit vectors.) C00F88: FF (Up, -1) C00F89: 00 (Right, 0) C00F8A: 01 (Down, +1) C00F8B: 00 (Left, 0) (This function handles player movement on overworld maps.) C00F8C: A5 BA LDA $BA C00F8E: D0 02 BNE $0F92 (+2) C00F90: 64 41 STZ $41 C00F92: A5 61 LDA $61 (Player X-step amount) C00F94: 29 1F AND #$1F (Partway through step?) C00F96: D0 06 BNE $0F9E (+6) (If so, exit) C00F98: A5 63 LDA $63 (Player Y-step amount) C00F9A: 29 1F AND #$1F (Partway through step?) C00F9C: F0 01 BEQ $0F9F (+1) (If not, continue) C00F9E: 60 RTS (Otherwise, exit) C00F9F: A5 57 LDA $57 C00FA1: F0 04 BEQ $0FA7 (+4) C00FA3: A6 3B LDX $3B C00FA5: 86 02 STX $02 (Overwrite joypad?) C00FA7: 20 4A 10 JSR $104A C00FAA: A5 03 LDA $03 C00FAC: 29 0F AND #$0F (Is D-pad pressed?) C00FAE: D0 03 BNE $0FB3 (+3) (Branch if so) C00FB0: 4C 03 10 JMP $1003 C00FB3: A5 03 LDA $03 C00FB5: 29 08 AND #$08 (Is up pressed?) C00FB7: F0 0E BEQ $0FC7 (+14) (Branch if not) C00FB9: A9 01 LDA #$01 (1) C00FBB: 85 C4 STA $C4 (Movement direction: U) C00FBD: 20 55 10 JSR $1055 (Take a step) C00FC0: A5 C4 LDA $C4 (Did we move?) C00FC2: F0 3F BEQ $1003 (+63) (Branch if not) C00FC4: 4C 06 10 JMP $1006 (BRA!) C00FC7: A5 03 LDA $03 C00FC9: 29 01 AND #$01 (Is right pressed?) C00FCB: F0 0E BEQ $0FDB (+14) (Branch if not) C00FCD: A9 02 LDA #$02 (2) C00FCF: 85 C4 STA $C4 (Movement direction: R) C00FD1: 20 55 10 JSR $1055 (Take a step) C00FD4: A5 C4 LDA $C4 (Did we move?) C00FD6: F0 2B BEQ $1003 (+43) (Branch if not) C00FD8: 4C 06 10 JMP $1006 (BRA!) C00FDB: A5 03 LDA $03 C00FDD: 29 04 AND #$04 (Is down pressed?) C00FDF: F0 0E BEQ $0FEF (+14) (Branch if not) C00FE1: A9 03 LDA #$03 (3) C00FE3: 85 C4 STA $C4 (Movement direction: D) C00FE5: 20 55 10 JSR $1055 (Take a step) C00FE8: A5 C4 LDA $C4 (Did we move?) C00FEA: F0 17 BEQ $1003 (+23) (Branch if not) C00FEC: 4C 06 10 JMP $1006 (BRA!) C00FEF: A5 03 LDA $03 C00FF1: 29 02 AND #$02 (Is left pressed?) C00FF3: F0 11 BEQ $1006 (+17) (Branch if not) C00FF5: A9 04 LDA #$04 (4) C00FF7: 85 C4 STA $C4 (Movement direction: L) C00FF9: 20 55 10 JSR $1055 (Take a step) C00FFC: A5 C4 LDA $C4 (Did we move?) C00FFE: F0 03 BEQ $1003 (+3) (Branch if not) C01000: 4C 06 10 JMP $1006 (BNE!) C01003: 64 BA STZ $BA C01005: 60 RTS C01006: 85 BA STA $BA C01008: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0100B: 85 76 STA $76 C0100D: 20 A1 69 JSR $69A1 C01010: AD D9 0A LDA $0AD9 (Player Y-coordinate) C01013: 85 76 STA $76 C01015: AD D8 0A LDA $0AD8 (Player X-coordinate) C01018: 85 75 STA $75 C0101A: 20 13 65 JSR $6513 C0101D: E6 9F INC $9F C0101F: 64 59 STZ $59 C01021: 9C AA 16 STZ $16AA C01024: AD DC 0A LDA $0ADC (Player vehicle) C01027: D0 03 BNE $102C (+3) (Branch if not walking) C01029: 20 8D 14 JSR $148D (Poison damage) C0102C: 20 3A 10 JSR $103A C0102F: A9 FC LDA #$FC (-4) C01031: 20 96 C7 JSR $C796 C01034: A9 FD LDA #$FD (-3) C01036: 20 96 C7 JSR $C796 (JMP!) C01039: 60 RTS C0103A: A5 CA LDA $CA C0103C: F0 0B BEQ $1049 (+11) C0103E: A5 BA LDA $BA C01040: AA TAX C01041: BF B8 11 C0 LDA $C011B8,X C01045: AA TAX C01046: 20 9A 11 JSR $119A (JMP!) C01049: 60 RTS C0104A: A5 CA LDA $CA C0104C: D0 06 BNE $1054 (+6) C0104E: A2 08 00 LDX #$0008 (8) C01051: 20 9A 11 JSR $119A (JMP!) C01054: 60 RTS (Player takes a step on the overworld map.) C01055: A5 C4 LDA $C4 (Get movement direction) C01057: 3A DEC A (Make it zero-based) C01058: 8D DB 0A STA $0ADB (Set to player) C0105B: A5 57 LDA $57 C0105D: D0 64 BNE $10C3 (+100)(Exit if joypad overwritten?) C0105F: 20 2D 11 JSR $112D (Check for vehicle) C01062: C9 01 CMP #$01 (1) (Is there one to board?) C01064: F0 5D BNE $10C3 (+93) (Exit if so) C01066: A5 C4 LDA $C4 (Movement direction) C01068: AA TAX C01069: AD DC 0A LDA $0ADC (Player vehicle) C0106C: F0 19 BEQ $1087 (+25) (Branch if walking) C0106E: 3A DEC A C0106F: 0A 0A ASL x2 C01071: A8 TAY C01072: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C01075: 29 1C AND #$1C (Get current form) C01077: 4A 4A LSR x2 C01079: C9 01 CMP #$01 (1) C0107B: F0 0A BEQ $1087 (+10) (Branch if Boco) C0107D: C9 04 CMP #$04 (4) C0107F: F0 11 BEQ $1092 (+17) (Branch if submarine) C01081: C9 05 CMP #$05 (5) C01083: F0 0D BEQ $1092 (+13) (Branch if water boat) C01085: 80 16 BRA $109D (+22) C01087: AD FB 10 LDA $10FB C0108A: 3F BD 11 C0 AND $C011BD,X C0108E: F0 34 BEQ $10C4 (+52) C01090: 80 0B BRA $109D (+11) C01092: AD FB 10 LDA $10FB C01095: 49 0F EOR #$0F (We don't need this!) C01097: 3F BD 11 C0 AND $C011BD,X C0109B: F0 27 BEQ $10C4 (+39) C0109D: AD DC 0A LDA $0ADC (Get player vehicle) C010A0: F0 0B BEQ $10AD (+11) (Branch if walking) C010A2: 3A DEC A C010A3: 0A 0A ASL x2 C010A5: A8 TAY C010A6: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C010A9: 29 1C AND #$1C (Get current form) C010AB: 4A 4A LSR x2 C010AD: AA TAX C010AE: BF B0 11 C0 LDA $C011B0,X C010B2: 85 0D STA $0D C010B4: A5 C4 LDA $C4 (Movement direction) C010B6: AA TAX C010B7: BF B8 11 C0 LDA $C011B8,X C010BB: A8 TAY C010BC: B9 F2 10 LDA $10F2,Y C010BF: 25 0D AND $0D C010C1: F0 01 BEQ $10C4 (+1) C010C3: 60 RTS C010C4: 20 C8 10 JSR $10C8 (Just...WHY?!?!!!) C010C7: 60 RTS C010C8: AE D6 0A LDX $0AD6 (Get current map ID) C010CB: E0 03 00 CPX #$0003 (3) (Overworld map?) C010CE: B0 5A BCS $112A (+90) (Branch if not) C010D0: AD DC 0A LDA $0ADC (Get player vehicle) C010D3: F0 55 BEQ $112A (+85) (Branch if walking) C010D5: 3A DEC A C010D6: 0A 0A ASL x2 C010D8: A8 TAY C010D9: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C010DC: 29 1C AND #$1C (Get form) C010DE: 4A 4A LSR x2 C010E0: C9 04 CMP #$04 C010E2: F0 04 BEQ $10E8 (+4) (Branch if it's a sub) C010E4: C9 05 CMP #$05 C010E6: D0 42 BNE $112A (+66) (Branch if not a water boat) C010E8: A5 C4 LDA $C4 (Movement direction) C010EA: AA TAX C010EB: BF B8 11 C0 LDA $C011B8,X C010EF: AA TAX C010F0: BD F2 10 LDA $10F2,X C010F3: 29 01 AND #$01 C010F5: F0 33 BEQ $112A (+51) C010F7: 9C DC 0A STZ $0ADC (Player is now walking) C010FA: AD D6 0A LDA $0AD6 (Get current map ID) C010FD: 0A (x5) ASL x5 C01102: 85 08 STA $08 C01104: B9 DD 0A LDA $0ADD,Y C01107: 29 1F AND #$1F C01109: 05 08 ORA $08 C0110B: 99 DD 0A STA $0ADD,Y (Save to top 3 bits of vehicle properties) C0110E: A9 02 LDA #$02 (2) C01110: 85 C0 STA $C0 (Normal walking speed) C01112: A9 00 LDA #$00 (0) C01114: 99 DE 0A STA $0ADE,Y (Make vehicle boardable) C01117: AD D8 0A LDA $0AD8 (Player X-coordinate) C0111A: 99 DF 0A STA $0ADF,Y (Vehicle X-coordinate) C0111D: AD D9 0A LDA $0AD9 (Player Y-coordinate) C01120: 99 E0 0A STA $0AE0,Y (Vehicle Y-coordinate) C01123: 20 83 45 JSR $4583 C01126: 20 41 4E JSR $4E41 (JMP!) C01129: 60 RTS C0112A: 64 C4 STZ $C4 (Null movement direction) C0112C: 60 RTS (This function handles boarding a vehicle on the water. These vehicles are boarded simply by walking over them, without pressing the A button.) C0112D: AD DC 0A LDA $0ADC (Player vehicle) C01130: D0 5D BNE $118F (+93) (Exit if not walking) C01132: A5 C4 LDA $C4 (Movement direction) C01134: 3A DEC A (Make it zero-based) C01135: AA TAX C01136: AD D8 0A LDA $0AD8 (Player X-coordinate) C01139: 18 CLC C0113A: 7F 92 11 C0 ADC $C01192,X (Add facing unit vector) C0113E: 85 75 STA $75 C01140: AD D9 0A LDA $0AD9 (Player Y-coordinate) C01143: 18 CLC C01144: 7F 96 11 C0 ADC $C01196,X (Add facing unit vector) C01148: 85 76 STA $76 C0114A: A4 06 LDY $06 (Y = 0) C0114C: 84 23 STY $23 C0114E: A4 23 LDY $23 (Pick a vehicle) C01150: B9 DE 0A LDA $0ADE,Y (Is it boardable?) C01153: 30 2F BMI $1184 (+47) (If not, pick next one) C01155: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C01158: 29 1C AND #$1C (Get form) C0115A: 4A 4A LSR x2 C0115C: C9 04 CMP #$04 (4) (If it's neither a sub...) C0115E: F0 04 BEQ $1164 (+4) (...nor...) C01160: C9 05 CMP #$05 (5) (...a water boat...) C01162: D0 20 BNE $1184 (+32) (...then pick next one) C01164: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C01167: 29 E0 AND #$E0 (Map that contains it) C01169: 4A (x5) LSR x5 C0116E: CD D6 0A CMP $0AD6 (Is it the current map?) C01171: D0 11 BNE $1184 (+17) (If not, pick next one) C01173: B9 DF 0A LDA $0ADF,Y (Vehicle X-coordinate) C01176: C5 75 CMP $75 (Facing X-coordinate) C01178: D0 0A BNE $1184 (+10) (Branch if not equal) C0117A: B9 E0 0A LDA $0AE0,Y (Vehicle Y-coordinate) C0117D: C5 76 CMP $76 (Facing Y-coordinate) C0117F: D0 03 BNE $1184 (+3) (Branch if not equal) C01181: A9 01 LDA #$01 (1) (Board the vehicle) C01183: 60 RTS C01184: A5 23 LDA $23 (Get current vehicle) C01186: 18 CLC C01187: 69 04 ADC #$04 (4) (Four bytes in RAM) C01189: 85 23 STA $23 (Point to next one) C0118B: C9 18 CMP #$18 (Loop over six vehicles) C0118D: D0 BF BNE $114E (-65) C0118F: A9 00 LDA #$00 (No vehicle was boarded) C01191: 60 RTS (Unit vector data is repeated here because reasons.) C01192: 00 (Up, 0) C01193: 01 (Right, +1) C01194: 00 (Down, 0) C01195: FF (Left, -1) C01196: FF (Up, -1) C01197: 00 (Right, 0) C01198: 01 (Down, +1) C01199: 00 (Left, 0) C0119A: BD BE 10 LDA $10BE,X C0119D: C2 20 REP #$20 (16-bit A) C0119F: 0A ASL A C011A0: 18 CLC C011A1: 7D BE 10 ADC $10BE,X C011A4: AA TAX C011A5: BD 88 11 LDA $1188,X C011A8: 29 60 00 AND #$0060 C011AB: E2 20 SEP #$20 (8-bit A) C011AD: 85 CA STA $CA C011AF: 60 RTS (Single-bit table, aka powers of 2.) C011B0: 01 C011B1: 02 C011B2: 04 C011B3: 08 C011B4: 10 C011B5: 20 C011B6: 40 C011B7: 80 C011B8: 00 C011B9: 02 C011BA: 0A C011BB: 0E C011BC: 06 (Bitfields for moving directions. They conform to the bitfield of the D-pad.) C011BD: 00 C011BE: 08 C011BF: 01 C011C0: 04 C011C1: 02 (This function handles player movement not on overworld maps.) C011C2: A5 BA LDA $BA C011C4: D0 02 BNE $11C8 (+2) C011C6: 64 41 STZ $41 C011C8: A5 61 LDA $61 (Player X-step amount) C011CA: 29 1F AND #$1F (Partway through step?) C011CC: D0 06 BNE $11D4 (+6) (Exit if so) C011CE: A5 63 LDA $63 (Player Y-step amount) C011D0: 29 1F AND #$1F (Partway through step?) C011D2: F0 01 BEQ $11D5 (+1) (If not, continue) C011D4: 60 RTS (Otherwise, exit) C011D5: A5 57 LDA $57 C011D7: F0 06 BEQ $11DF (+6) C011D9: A6 3B LDX $3B C011DB: 86 02 STX $02 (Overwrite joypad) C011DD: 80 1D BRA $11FC (+29) C011DF: 20 1D 15 JSR $151D C011E2: AD FB 10 LDA $10FB (Tile properties) C011E5: 29 40 AND #$40 (Wall override?) C011E7: F0 0D BEQ $11F6 (+13) (Branch if not) C011E9: AD FB 10 LDA $10FB C011EC: 29 0F AND #$0F (Get blocked direction) C011EE: AA TAX C011EF: BF 2A 17 C0 LDA $C0172A,X (Get movement direction) C011F3: 3A DEC A C011F4: 80 03 BRA $11F9 (+3) C011F6: A5 BF LDA $BF C011F8: 3A DEC A C011F9: 8D DB 0A STA $0ADB (Player facing direction) C011FC: AD FA 10 LDA $10FA C011FF: 29 04 AND #$04 C01201: D0 0F BNE $1212 (+15) C01203: A5 BE LDA $BE C01205: D0 0B BNE $1212 (+11) C01207: AD FA 10 LDA $10FA C0120A: 29 03 AND #$03 C0120C: C9 03 CMP #$03 C0120E: F0 02 BEQ $1212 (+2) C01210: 85 C3 STA $C3 C01212: AD FA 10 LDA $10FA C01215: 29 20 AND #$20 C01217: F0 13 BEQ $122C (+19) C01219: AD FA 10 LDA $10FA C0121C: 29 04 AND #$04 C0121E: F0 0A BEQ $122A (+10) C01220: A5 C3 LDA $C3 C01222: 29 01 AND #$01 C01224: F0 04 BEQ $122A (+4) C01226: A9 00 LDA #$00 C01228: 80 02 BRA $122C (+2) C0122A: A9 01 LDA #$01 C0122C: 85 C9 STA $C9 C0122E: 20 A6 13 JSR $13A6 C01231: 20 B7 16 JSR $16B7 C01234: AD FB 10 LDA $10FB (Tile speed index) C01237: 29 30 AND #$30 C01239: 4A 4A 4A 4A LSR x4 C0123D: AA TAX C0123E: BF 1C 17 C0 LDA $C0171C,X (Get speed) C01242: 85 C0 STA $C0 C01244: AD FA 0A LDA $0AFA C01247: F0 06 BEQ $124F (+6) C01249: 10 2D BPL $1278 (+45) C0124B: 46 C0 LSR $C0 (Half speed) C0124D: 80 2B BRA $127A (+43) C0124F: A5 03 LDA $03 C01251: 29 80 AND #$80 (Is B pressed?) C01253: F0 25 BEQ $127A (+37) (Branch if not) C01255: A6 06 LDY $06 (Y = 0) C01257: BD 00 05 LDA $0500,Y (Look at a party member) C0125A: 29 40 AND #$40 (Party slot empty?) C0125C: D0 07 BNE $1265 (+7) (Branch if so) C0125E: BD 20 05 LDA $0520,Y (Innate abilities) C01261: 29 08 AND #$08 (Includes dash?) C01263: D0 13 BNE $1278 (+19) (Branch if so) C01265: C2 20 REP #$20 (16-bit A) C01267: 8A TXA C01268: 18 CLC (Could've done REP #$21) C01269: 69 50 00 ADC #$0050 (80) (Next party member) C0126C: AA TAX C0126D: A5 06 LDA $06 (A = 0) C0126F: E2 20 SEP #$20 (8-bit A) C01271: E0 40 01 CPX #$0140 (320)(Checked entire party?) C01274: D0 E1 BNE $1257 (-31) (If not, loop back) C01276: 80 02 BRA $127A (+2) C01278: 06 C0 ASL $C0 (Double speed) C0127A: AD 20 11 LDA $1120 C0127D: 20 1F 16 JSR $161F C01280: 8D 80 10 STA $1080 C01283: 9C 81 10 STZ $1081 C01286: AD 20 11 LDA $1120 C01289: 4A 4A LSR x2 C0128B: 20 1F 16 JSR $161F C0128E: 8D 82 10 STA $1082 C01291: 9C 83 10 STZ $1083 C01294: AD 20 11 LDA $1120 C01297: 4A 4A 4A 4A LSR x4 C0129B: 20 1F 16 JSR $161F C0129E: 8D 84 10 STA $1084 C012A1: 9C 85 10 STZ $1085 C012A4: AD 20 11 LDA $1120 C012A7: 4A (x6) LSR x6 C012AD: 20 1F 16 JSR $161F C012B0: 8D 86 10 STA $1086 C012B3: 9C 87 10 STZ $1087 C012B6: AD FB 10 LDA $10FB (Auto-moving tile?) C012B9: 10 0A BPL $12C5 (+10) (Branch if not) C012BB: 29 0F AND #$0F (Get blocked direction) C012BD: AA TAX C012BE: BF 2A 17 C0 LDA $C0172A,X (Get movement direction) C012C2: 4C 36 13 JMP $1336 C012C5: A5 57 LDA $57 C012C7: D0 0F BNE $12D8 (+15) C012C9: A5 5D LDA $5D C012CB: F0 0B BEQ $12D8 (+11) C012CD: 64 5D STZ $5D C012CF: 9C AA 16 STZ $16AA C012D2: 20 D7 13 JSR $13D7 C012D5: 20 8D 14 JSR $148D (Poison damage) C012D8: A5 03 LDA $03 C012DA: 29 0F AND #$0F (Is D-pad pressed?) C012DC: D0 03 BNE $12E1 (+3) (Branch if not) C012DE: 4C 31 13 JMP $1331 (BEQ!) C012E1: A5 03 LDA $03 C012E3: 29 08 AND #$08 (Is up pressed?) C012E5: F0 0E BEQ $12F5 (+14) (Branch if not) C012E7: A9 01 LDA #$01 (1) C012E9: 85 C4 STA $C4 (Movement direction: U) C012EB: 20 3A 16 JSR $163A (Take a step) C012EE: A5 C4 LDA $C4 (Did we move?) C012F0: F0 3F BEQ $1331 (+63) (Branch if not) C012F2: 4C 36 13 JMP $1336 (BRA!) C012F5: A5 03 LDA $03 C012F7: 29 01 AND #$01 (Is right pressed?) C012F9: F0 0E BEQ $1309 (+14) (Branch if not) C012FB: A9 02 LDA #$02 (2) C012FD: 85 C4 STA $C4 (Movement direction: R) C012FF: 20 3A 16 JSR $163A (Take a step) C01302: A5 C4 LDA $C4 (Did we move?) C01304: F0 2B BEQ $1331 (+43) (Branch if not) C01306: 4C 36 13 JMP $1336 (BRA!) C01309: A5 03 LDA $03 C0130B: 29 04 AND #$04 (Is down pressed?) C0130D: F0 0E BEQ $131D (+14) (Branch if not) C0130F: A9 03 LDA #$03 (3) C01311: 85 C4 STA $C4 (Movement direction: D) C01313: 20 3A 16 JSR $163A (Take a step) C01316: A5 C4 LDA $C4 (Did we move?) C01318: F0 17 BEQ $1331 (+23) (Branch if not) C0131A: 4C 36 13 JMP $1336 (BRA!) C0131D: A5 03 LDA $03 C0131F: 29 02 AND #$02 (Is left pressed?) C01321: F0 13 BEQ $1336 (+19) (Branch if not) C01323: A9 04 LDA #$04 (4) C01325: 85 C4 STA $C4 (Movement direction: L) C01327: 20 3A 16 JSR $163A (Take a step) C0132A: A5 C4 LDA $C4 (Did we move?) C0132C: F0 03 BEQ $1331 (+3) (Branch if not) C0132E: 4C 36 13 JMP $1336 (BNE!) C01331: 64 BA STZ $BA C01333: 4C 67 13 JMP $1367 (BRA!) C01336: 85 BA STA $BA C01338: 85 BF STA $BF C0133A: A9 01 LDA #$01 C0133C: 85 5D STA $5D C0133E: 64 59 STZ $59 C01340: 20 72 13 JSR $1372 C01343: A5 57 LDA $57 C01345: D0 07 BNE $134E (+7) C01347: AD FB 10 LDA $10FB C0134A: 29 40 AND #$40 C0134C: D0 06 BNE $1354 (+6) C0134E: A5 BA LDA $BA C01350: 3A DEC A C01351: 8D DB 0A STA $0ADB (Player facing direction) C01354: 20 38 15 JSR $1538 C01357: A9 FC LDA #$FC (-4) C01359: 20 96 C7 JSR $C796 C0135C: A9 FC LDA #$FD (-3) C0135E: 20 96 C7 JSR $C796 C01361: 20 5B 15 JSR $155B C01364: 20 AC 15 JSR $15AC C01367: 20 73 29 JSR $2973 C0136A: A5 58 LDA $58 C0136C: D0 03 BNE $1371 (+3) C0136E: 20 DA 16 JSR $16DA (JMP!) C01371: 60 RTS C01372: A5 BA LDA $BA C01374: AA TAX C01375: BF 20 17 C0 LDA $C01720,X C01379: AA TAX C0137A: A5 CA LDA $CA C0137C: D0 07 BNE $1385 (+7) C0137E: BD F2 10 LDA $10F2,X C01381: 29 0C AND #$0C C01383: 85 CA STA $CA C01385: A5 CB LDA $CB C01387: F0 1C BEQ $13A5 (+28) C01389: BD F2 10 LDA $10F2,X C0138C: 29 04 AND #$04 C0138E: F0 0A BEQ $139A (+10) C01390: A5 C3 LDA $C3 C01392: 29 01 AND #$01 C01394: F0 04 BEQ $139A (+4) C01396: 64 CB STZ $CB C01398: 80 0B BRA $13A5 (+11) (Forced branch to RTS?!) C0139A: BD F2 10 LDA $10F2,X C0139D: 29 10 AND #$10 C0139F: 4A 4A 4A 4A LSR x4 C013A3: 85 CB STA $CB C013A5: 60 RTS C013A6: AD FA 10 LDA $10FA C013A9: 29 03 AND #$03 C013AB: 09 04 ORA #$04 C013AD: 85 C2 STA $C2 C013AF: A5 CA LDA $CA C013B1: F0 07 BEQ $13BA (+7) C013B3: AD FA 10 LDA $10FA C013B6: 29 0C AND #$0C C013B8: 85 CA STA $CA C013BA: A5 CB LDA $CB C013BC: D0 18 BNE $13D6 (+24) C013BE: AD FA 10 LDA $10FA C013C1: 29 10 AND #$10 C013C3: F0 11 BEQ $13D6 (+17) C013C5: AD FA 10 LDA $10FA C013C8: 29 04 AND #$04 C013CA: F0 06 BEQ $13D2 (+6) C013CC: A5 C3 LDA $C3 C013CE: 29 01 AND #$01 C013D0: D0 04 BNE $13D6 (+4) C013D2: A9 01 LDA #$01 (1) C013D4: 85 CB STA $CB C013D6: 60 RTS C013D7: A6 06 LDX $06 (X = 0) C013D9: BD 00 05 LDA $0500,X (Look at a party member) C013DC: 29 40 AND #$40 (Party slot empty?) C013DE: D0 0A BNE $13EA (+10) (Branch if so) C013E0: BD 20 05 LDA $0520,X (Innate abilities) C013E3: 29 04 AND #$04 (Includes DmgFloor?) C013E5: F0 03 BEQ $13EA (+3) (Branch if not) C013E7: 4C 74 17 JMP $1774 C013EA: C2 20 REP #$20 (16-bit A) C013EC: 8A TXA C013ED: 18 CLC (Could've done REP #$21) C013EE: 69 50 00 ADC #$0050 (80) (Next party member) C013F1: AA TAX C013F2: A5 06 LDA $06 (A = 0) C013F4: E2 20 SEP #$20 (8-bit A) C013F6: E0 40 01 CPX #$0140 (320) C013F9: D0 DE BNE $13D9 (-34) (Loop over whole party) C013FB: A4 06 LDY $06 (Y = 0) C013FD: B9 00 05 LDA $0500,Y (Look at a party member) C01400: 29 40 AND #$40 (Party slot empty) C01402: D0 5F BNE $1463 (+95) (Branch if so) C01404: B9 1A 05 LDA $051A,Y (Status byte 1) C01407: 29 C8 AND #$C8 (Dead, Petrify or Float?) C01409: D0 58 BNE $1463 (+88) (If so, check next member) C0140B: A5 C9 LDA $C9 C0140D: AA TAX C0140E: BD 12 11 LDA $1112,X C01411: 29 40 AND #$40 C01413: F0 08 BEQ $141D (+8) C01415: B9 1A 05 LDA $051A,Y (Status byte 1) C01418: 09 04 ORA #$04 (Add Poison) C0141A: 99 1A 05 STA $051A,Y C0141D: A5 C9 LDA $C9 C0141F: AA TAX C01420: BD 12 11 LDA $1112,X C01423: 29 07 AND #$07 C01425: 0A ASL A C01426: AA TAX C01427: F0 25 BEQ $144E (+37) C01429: C2 20 REP #$20 (16-bit A) C0142B: B9 06 05 LDA $0506,Y (Party member's HP) C0142E: F0 0C BEQ $143C (+12) (Branch if 0) C01430: 38 SEC C01431: FF 7D 14 C0 SBC $C0147D,X (Subtract damage) C01435: F0 02 BEQ $1439 (+2) C01437: B0 03 BCS $143C (+3) C01439: A9 01 00 LDA #$0001 (1) (Enforce minimum HP of 1) C0143C: 99 06 05 STA $0506,Y (Set HP) C0143F: A5 06 LDA $06 (A = 0) C01441: E2 20 SEP #$20 (8-bit A) C01443: A9 8F LDA #$8F C01445: 8D AA 16 STA $16AA C01448: A2 00 1E LDX #$1E00 C0144B: 8E AB 16 STX $16AB C0144E: A5 C9 LDA $C9 C01450: AA TAX C01451: BD 12 11 LDA $1112,X C01454: 4A 4A 4A LSR x3 C01457: 29 07 AND #$07 C01459: F0 08 BEQ $1463 (+8) C0145B: AA TAX C0145C: BF 74 14 C0 LDA $C01474,X (LDA #$94...) C01460: 20 3C 46 JSR $463C C01463: C2 20 REP #$20 (16-bit A) C01465: 98 TYA C01466: 18 CLC (Could've done REP #$21) C01467: 69 50 00 ADC #$0050 (80) (Next party member) C0146A: A8 TAY C0146B: A5 06 LDA $06 (A = 0) C0146D: E2 20 SEP #$20 (8-bit A) C0146F: C0 40 01 CPY #$0140 (320) C01472: D0 89 BNE $13FD (-119)(Loop over whole party) C01474: 60 RTS C01475: 94 C01476: 94 C01477: 94 C01478: 94 C01479: 94 C0147A: 94 C0147B: 94 C0147C: 94 (Tile damage.) C0147D: 00 00 (0) C0147F: 32 00 (50) C01481: 32 00 (50) C01483: 64 00 (100) C01485: 2C 01 (300) C01487: 90 01 (400) C01489: F4 01 (500) C0148B: E8 03 (1,000) (Handles poison damage from stepping.) C0148D: A5 57 LDA $57 C0148F: D0 57 BNE $14E8 (+87) C01491: A4 06 LDY $06 (Y = 0) C01493: B9 00 05 LDA $0500,Y (Look at a party member) C01496: 29 40 AND #$40 (Party slot empty?) C01498: D0 3D BNE $14D7 (+61) (Branch if so) C0149A: B9 1A 05 LDA $051A,Y (Status byte 1) C0149D: 29 C0 AND #$C0 (Dead or petrified? BIT!) C0149F: D0 36 BNE $14D7 (+54) (If so, check next member) C014A1: B9 1A 05 LDA $051A,Y C014A4: 29 04 AND #$04 (Poisoned?) C014A6: F0 2F BEQ $14D7 (+47) (If not, check next one) C014A8: A9 8F LDA #$8F (-113) C014AA: 8D AA 16 STA $16AA C014AD: C2 20 REP #$20 (16-bit A) C014AF: A9 00 1E LDA #$1E00 C014B2: 8D AB 16 STA $16AB C014B5: B9 08 05 LDA $0508,Y (Party member's map HP) C014B8: 4A (x6) LSR x6 (Divide by 64) C014BE: 1A INC A (Add 1) C014BF: 85 0D STA $0D (Save as damage) C014C1: B9 06 05 LDA $0506,Y (Current HP) C014C4: F0 0A BEQ $14D0 (+10) (Branch if 0) C014C6: 38 SEC C014C7: E5 0D SBC $0D (Subtract damage) C014C9: F0 02 BEQ $14CD (+2) C014CB: B0 03 BCS $14D0 (+3) C014CD: A9 01 00 LDA #$0001 (1) (Enforce min HP of 1) C014D0: 99 06 05 STA $0506,Y (Save current HP) C014D3: A5 06 LDA $06 (A = 0) C014D5: E2 20 SEP #$20 (8-bit A...WHY?!!) C014D7: C2 20 REP #$20 (16-bit A...sigh...) C014D9: 98 TYA C014DA: 18 CLC (REP #$21!) C014DB: 69 50 00 ADC #$0050 (80) (Next party member) C014DE: A8 TAY C014DF: A5 06 LDA $06 (A = 0) C014E1: E2 20 SEP #$20 (8-bit A) C014E3: C0 40 01 CPY #$0140 (320)(Loop over whole party) C014E6: D0 AB BNE $1493 (-85) C014E8: 60 RTS C014E9: A4 06 LDY $06 (Y = 0) C014EB: B9 00 05 LDA $0500,Y (Look at a party member) C014EE: 29 40 AND #$40 (Party slot empty?) C014F0: D0 19 BNE $150B (+25) (Branch if so) C014F2: B9 1A 05 LDA $051A,Y (Status byte 1) C014F5: 29 C0 AND #$C0 (Dead or petrified? BIT!) C014F7: D0 12 BNE $150B (+18) (If so, check next member) C014F9: B9 1A 05 LDA $051A,Y C014FC: 29 04 AND #$04 (Poisoned?) C014FE: F0 0B BEQ $150B (+11) (If not, next member) C01500: A9 8F LDA #$8F (-113) C01502: 8D AA 16 STA $16AA C01505: A2 00 1E LDX #$1E00 C01508: 8E AB 16 STX $16AB C0150B: C2 20 REP #$20 (16-bit A) C0150D: 98 TYA C0150E: 18 CLC (REP #$21!) C0150F: 69 50 00 ADC #$0050 (80) (Next party member) C01512: A8 TAY C01513: A5 06 LDA $06 (A = 0) C01515: E2 20 SEP #$20 (8-bit A) C01517: C0 40 01 CPY #$0140 (320)(Loop over whole party) C0151A: D0 CF BNE $14EB (-49) C0151C: 60 RTS C0151D: A6 C7 LDX $C7 C0151F: E0 E8 01 CPX #$01E8 (488) C01522: D0 13 BNE $1537 (+19) C01524: AD FA 10 LDA $10FA C01527: 29 40 AND #$40 C01529: D0 0C BNE $1537 (+12) C0152B: AD FA 10 LDA $10FA C0152E: 29 04 AND #$04 (AND #$44!) C01530: D0 05 BNE $1537 (+5) C01532: A2 10 01 LDX #$0110 (272) C01535: 86 C7 STX $C7 C01537: 60 RTS C01538: A5 BA LDA $BA C0153A: AA TAX C0153B: BF 20 17 C0 LDA $C01720,X C0153F: AA TAX C01540: BD F2 10 LDA $10F2,X C01543: 29 40 AND #$40 C01545: D0 0E BNE $1555 (+14) C01547: A4 C7 LDY $C7 C01549: C0 10 01 CPY #$0110 (272) C0154C: D0 0C BNE $155A (+12) C0154E: BD F2 10 LDA $10F2,X C01551: 29 04 AND #$04 C01553: F0 05 BEQ $155A (+5) C01555: A2 E8 01 LDX #$01E8 (488) C01558: 86 C7 STX $C7 C0155A: 60 RTS C0155B: AD DB 0A LDA $0ADB (Player facing direction) C0155E: 4A LSR A C0155F: B0 4A BCS $15AB (+74) (Exit if horizontal) C01561: 4A LSR A C01562: B0 11 BCS $1575 (+17) (Branch if down) C01564: AD C0 10 LDA $10C0 C01567: C9 13 CMP #$13 (19) C01569: D0 40 BNE $15AB (+64) C0156B: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0156E: 38 SEC C0156F: E9 02 SBC #$02 (2) C01571: 85 76 STA $76 C01573: 80 0C BRA $1581 (+12) C01575: AD CC 10 LDA $10CC C01578: C9 13 CMP #$13 (19) C0157A: D0 2F BNE $15AB (+47) C0157C: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0157F: 85 76 STA $76 C01581: A6 06 LDX $06 C01583: 86 73 STX $73 C01585: AD D8 0A LDA $0AD8 (Player X-coordinate) C01588: 85 75 STA $75 C0158A: A2 01 02 LDX #$0201 (513) C0158D: 86 2C STX $2C C0158F: A9 04 LDA #$04 (4) C01591: 8D B3 16 STA $16B3 C01594: A9 14 LDA #$14 (20) C01596: 8D B4 16 STA $16B4 C01599: 20 08 6F JSR $6F08 C0159C: A9 8E LDA #$8E (-114) C0159E: 20 3C 46 JSR $463C C015A1: A9 01 LDA #$01 (1) C015A3: 85 58 STA $58 C015A5: A5 57 LDA $57 C015A7: D0 02 BNE $15AB (+2) C015A9: 64 BA STZ $BA C015AB: 60 RTS C015AC: A6 06 LDX $06 (X = 0) C015AE: BD 00 05 LDA $0500,X (Look at a party member) C015B1: 29 40 AND #$40 (Party slot empty?) C015B3: D0 07 BNE $15BC (+7) (If so, check next member) C015B5: BD 20 05 LDA $0520,X (Innate abilities) C015B8: 29 02 AND #$02 (Includes Pitfalls?) C015BA: D0 13 BNE $15CF (+19) (If so, branch) C015BC: C2 20 REP #$20 (16-bit A) C015BE: 8A TXA C015BF: 18 CLC C015C0: 69 50 00 ADC #$0050 (80) (Next party member) C015C3: AA TAX C015C4: A5 06 LDA $06 (A = 0) C015C6: E2 20 SEP #$20 (8-bit A) C015C8: E0 40 01 CPX #$0140 (320) C015CB: D0 E1 BNE $15AE (-31) (Loop over entire party) C015CD: 80 43 BRA $1612 (+67) (Forced branch to RTS?!) C015CF: AD DB 0A LDA $0ADB (Player facing direction) C015D2: AA TAX C015D3: BF 1B 16 C0 LDA $C0161B,X C015D7: A8 TAY C015D8: B9 BE 10 LDA $10BE,Y C015DB: C9 05 CMP #$05 (5) C015DD: D0 33 BNE $1612 (+51) C015DF: AD D8 0A LDA $0AD8 (Player X-coordinate) C015E2: 18 CLC C015E3: 7F 17 16 C0 ADC $C01617,X (Add facing unit vector) C015E7: 85 75 STA $75 C015E9: AD D9 0A LDA $0AD9 (Player Y-coordinate) C015EC: 18 CLC C015ED: 7F 13 16 C0 ADC $C01613,X (Add facing unit vector) C015F1: 85 76 STA $76 C015F3: A6 06 LDX $06 C015F5: 86 73 STX $73 C015F7: A2 01 01 LDX #$0101 (257) C015FA: 86 2C STX $2C C015FC: A9 15 LDA #$15 C015FE: 8D B3 16 STA $16B3 C01601: 20 08 6F JSR $6F08 C01604: A9 01 LDA #$01 C01606: 85 57 STA $57 C01608: A2 0B 00 LDX #$000B (11) C0160B: 86 CE STX $CE C0160D: 20 17 A2 JSR $A217 C01610: 64 57 STZ $57 C01612: 60 RTS (Why are we including unit vector data AGAIN?!) C01613: FF (Up, -1) C01614: 00 (Right, 0) C01615: 01 (Down, +1) C01616: 00 (Left, 0) C01617: 00 (Up, 0) C01618: 01 (Right, +1) C01619: 00 (Down, 0) C0161A: FF (Left, -1) C0161B: 02 C0161C: 0A C0161D: 0E C0161E: 06 C0161F: 29 03 AND #$03 C01621: D0 04 BNE $1627 (+4) C01623: A5 C0 LDA $C0 C01625: 80 12 BRA $1639 (+18) (Forced branch to RTS?!) C01627: 3A DEC A C01628: D0 05 BNE $162F (+5) C0162A: A5 C0 LDA $C0 C0162C: 4A LSR A C0162D: 80 0A BRA $1639 (+10) (Forced branch to RTS?!) C0162F: 3A DEC A C01630: D0 05 BNE $1637 (+5) C01632: A5 C0 LDA $C0 C01634: 0A ASL A C01635: 80 02 BRA $1639 (+2) (Forced branch to RTS?!) C01637: A5 06 LDA $06 C01639: 60 RTS C0163A: A5 57 LDA $57 C0163C: F0 01 BEQ $163F (+1) C0163E: 60 RTS C0163F: AD FB 10 LDA $10FB C01642: 29 40 AND #$40 C01644: D0 08 BNE $164E (+8) C01646: A5 C4 LDA $C4 C01648: 85 BF STA $BF C0164A: 3A DEC A C0164B: 8D DB 0A STA $0ADB (Player facing direction) C0164E: A5 C4 LDA $C4 C01650: AA TAX C01651: AD FB 10 LDA $10FB (Tile properties) C01654: 29 40 AND #$40 (Wall override?) C01656: D0 09 BNE $1661 (+9) (Branch if so) C01658: AD FB 10 LDA $10FB C0165B: 3F 25 17 C0 AND $C01725,X (Is movement in this direction blocked?) C0165F: F0 48 BEQ $16A9 (+72) (If so, exit) C01661: A5 C4 LDA $C4 C01663: AA TAX C01664: BF 20 17 C0 LDA $C01720,X C01668: AA TAX C01669: BD D8 10 LDA $10D8,X C0166C: F0 24 BEQ $1692 (+36) C0166E: BD F2 10 LDA $10F2,X C01671: 29 04 AND #$04 C01673: F0 08 BEQ $167D (+8) C01675: A5 C3 LDA $C3 C01677: C9 01 CMP #$01 (1) C01679: D0 17 BNE $1692 (+23) C0167B: 80 0D BRA $168A (+13) C0167D: AD FA 10 LDA $10FA C01680: 29 04 AND #$04 C01682: F0 06 BEQ $168A (+6) C01684: A5 C3 LDA $C3 C01686: C9 02 CMP #$02 (2) C01688: F0 08 BEQ $1692 (+8) C0168A: BD D8 10 LDA $10D8,X C0168D: 85 E4 STA $E4 C0168F: 4C A9 16 JMP $16A9 (BRA!) C01692: AD FA 10 LDA $10FA C01695: 29 04 AND #$04 C01697: F0 13 BEQ $16AC (+19) C01699: BD F2 10 LDA $10F2,X C0169C: 29 04 AND #$04 C0169E: D0 16 BNE $16B6 (+22) C016A0: BD F2 10 LDA $10F2,X C016A3: 29 03 AND #$03 C016A5: 25 C3 AND $C3 C016A7: D0 0D BNE $16B6 (+13) C016A9: 64 C4 STZ $C4 C016AB: 60 RTS C016AC: BD F2 10 LDA $10F2,X C016AF: 25 C2 AND $C2 C016B1: D0 03 BNE $16B6 (+3) C016B3: 64 C4 STZ $C4 C016B5: 60 RTS C016B6: 60 RTS (Why do we need another?) C016B7: AD FA 10 LDA $10FA C016BA: 29 04 AND #$04 C016BC: F0 06 BEQ $16C4 (+6) C016BE: A5 C3 LDA $C3 C016C0: C9 01 CMP #$01 (1) C016C2: D0 15 BNE $16D9 (+21) C016C4: AD D8 0A LDA $0AD8 (Player X-coordinate) C016C7: 85 75 STA $75 C016C9: AD D9 0A LDA $0AD9 (Player Y-coordinate) C016CC: 85 76 STA $76 C016CE: DA PHX C016CF: 20 BB 3C JSR $3CBB (Get tile index) C016D2: A9 00 LDA #$00 (0) C016D4: 9F 00 30 7F STA $7F3000,X (Remove plr from tile data) C016D8: FA PLX C016D9: 60 RTS C016DA: A5 BA LDA $BA C016DC: AA TAX C016DD: BF 20 17 C0 LDA $C01720,X C016E1: AA TAX C016E2: BD F2 10 LDA $10F2,X C016E5: 29 04 AND #$04 C016E7: F0 06 BEQ $16EF (+6) C016E9: A5 C3 LDA $C3 C016EB: C9 01 CMP #$01 (1) C016ED: D0 22 BNE $1711 (+34) C016EF: A5 BA LDA $BA (Get movement direction) C016F1: AA TAX C016F2: AD D8 0A LDA $0AD8 (Player X-coordinate) C016F5: 18 CLC C016F6: 7F 12 17 C0 ADC $C01712,X (Add unit vector) C016FA: 85 75 STA $75 C016FC: AD D9 0A LDA $0AD9 (Player Y-coordinate) C016FF: 18 CLC C01700: 7F 17 17 C0 ADC $C01717,X (Add unit vector) C01704: 85 76 STA $76 C01706: DA PHX C01707: 20 BB 3C JSR $3CBB (Get tile index) C0170A: A9 FF LDA #$FF C0170C: 9F 00 30 7F STA $7F3000,X C01710: FA PLX C01711: 60 RTS (Unit vector data repeated again, but this time with extra bytes for a zero vector if the player stays put.) C01712: 00 (Stop, 0) C01713: 00 (Up, 0) C01714: 01 (Right, +1) C01715: 00 (Down, 0) C01716: FF (Left, -1) C01717: 00 (Stop, 0) C01718: FF (Up, -1) C01719: 00 (Right, 0) C0171A: 01 (Down, +1) C0171B: 00 (Left, 0) (Moving speeds.) C0171C: 02 C0171D: 01 C0171E: 04 C0171F: 08 C01720: 08 C01721: 02 C01722: 0A C01723: 0E C01724: 06 (Direction to bitfield mapping again?! WHY?!) C01725: 00 (No movement) C01726: 08 (Up) C01727: 01 (Right) C01728: 04 (Down) C01729: 02 (Left) (Table of facing directions, structured to be indexed from the aforementioned bitfields. In other words, this is the inverse of the previous mapping.) C0172A: 00 (0 - Null) C0172B: 02 (1 - Right) C0172C: 04 (2 - Left) C0172D: 00 (3 - Null) C0172E: 03 (4 - Down) C0172F: 00 (5 - Null) C01730: 00 (6 - Null) C01731: 00 (7 - Null) C01732: 01 (8 - Up) C01733: AD D8 0A LDA $0AD8 (Player X-coordinate) C01736: 85 0D STA $0D C01738: 64 0E STZ $0E C0173A: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0173D: 29 3F AND #$3F C0173F: C2 20 REP #$20 C01741: EB XBA C01742: 18 CLC (REP #$21!) C01743: 65 0D ADC $0D (ORA!) C01745: A8 TAY C01746: 98 TYA C01747: 38 SEC C01748: E9 00 01 SBC #$0100 (256) C0174B: 29 FF 3F AND #$3FFF C0174E: AA TAX C0174F: BF 00 00 7F LDA $7F0000,X C01753: 29 FF 00 AND #$00FF C01756: 8D C0 10 STA $10C0 C01759: 0A ASL A C0175A: 18 CLC C0175B: 6D C0 10 ADC $10C0 C0175E: AA TAX C0175F: BD 86 11 LDA $1186,X C01762: 8D F4 10 STA $10F4 C01765: 98 TYA C01766: 29 00 3F AND #$3F00 C01769: 85 0D STA $0D C0176B: 98 TYA C0176C: 3A DEC A C0176D: 29 FF 00 AND #$00FF C01770: 05 0D ORA $0D C01772: AA TAX C01773: BF 00 00 7F LDA $7F0000,X C01777: 29 FF 00 AND #$00FF C0177A: 8D C4 10 STA $10C4 C0177D: 0A ASL A C0177E: 18 CLC C0177F: 6D C4 10 ADC $10C4 C01782: AA TAX C01783: BD 86 11 LDA $1186,X C01786: 8D F8 10 STA $10F8 C01789: BB TYX C0178A: BF 00 00 7F LDA $7F0000,X C0178E: 29 FF 00 AND #$00FF C01791: 8D C6 10 STA $10C6 C01794: 0A ASL A C01795: 18 CLC C01796: 6D C6 10 ADC $10C6 C01799: AA TAX C0179A: BD 86 11 LDA $1186,X C0179D: 8D FA 10 STA $10FA C017A0: 98 TYA C017A1: 29 00 3F AND #$3F00 C017A4: 85 0D STA $0D C017A6: 98 TYA C017A7: 1A INC A C017A8: 29 FF 00 AND #$00FF C017AB: 05 0D ORA $0D C017AD: AA TAX C017AE: BF 00 00 7F LDA $7F0000,X C017B2: 29 FF 00 AND #$00FF C017B5: 8D C8 10 STA $10C8 C017B8: 0A ASL A C017B9: 18 CLC C017BA: 6D C8 10 ADC $10C8 C017BD: AA TAX C017BE: BD 86 11 LDA $1186,X C017C1: 8D FC 10 STA $10FC C017C4: 98 TYA C017C5: 18 CLC C017C6: 69 00 01 ADC #$0100 (256) C017C9: 29 FF 3F AND #$3FFF C017CC: AA TAX C017CD: BF 00 00 7F LDA $7F0000,X C017D1: 29 FF 00 AND #$00FF C017D4: 8D CC 10 STA $10CC C017D7: 0A ASL A C017D8: 18 CLC C017D9: 6D CC 10 ADC $10CC C017DC: AA TAX C017DD: BD 86 11 LDA $1186,X C017E0: 8D 00 11 STA $1100 C017E3: A5 06 LDA $06 (A = 0) C017E5: E2 20 SEP #$20 (8-bit A) C017E7: 60 RTS C017E8: AD D8 0A LDA $0AD8 (Player X-coordinate) C017EB: 29 3F AND #$3F C017ED: 85 0D STA $0D C017EF: 64 0E STZ $0E C017F1: AD D9 0A LDA $0AD9 (Player Y-coordinate) C017F4: 29 3F AND #$3F C017F6: C2 20 REP #$20 (16-bit A) C017F8: EB XBA C017F9: 4A 4A LSR x2 C017FB: 05 0D ORA $0D C017FD: A8 TAY C017FE: 98 TYA C017FF: 38 SEC C01800: E9 80 00 SBC #$0080 (128) C01803: 29 FF 0F AND #$0FFF C01806: 85 0D STA $0D C01808: AA TAX C01809: BF 00 30 7F LDA $7F3000,X C0180D: 8D EA 10 STA $10EA C01810: BF 00 00 7F LDA $7F0000,X C01814: 8D D0 10 STA $10D0 C01817: 29 FF 00 AND #$00FF C0181A: 0A ASL A C0181B: AA TAX C0181C: BD 86 11 LDA $1186,X C0181F: 8D 04 11 STA $1104 C01822: 98 TYA C01823: 38 SEC C01824: E9 40 00 SBC #$0040 (64) C01827: 29 C0 0F AND #$0FC0 C0182A: 85 0D STA $0D C0182C: 98 TYA C0182D: 3A DEC A C0182E: 29 3F 00 AND #$003F C01831: 05 0D ORA $0D C01833: AA TAX C01834: BF 00 30 7F LDA $7F3000,X C01838: 8D D8 10 STA $10D8 C0183B: BF 00 00 7F LDA $7F0000,X C0183F: 8D BE 10 STA $10BE C01842: 29 FF 00 AND #$00FF C01845: 0A ASL A C01846: AA TAX C01847: BD 86 11 LDA $1186,X C0184A: 8D F2 10 STA $10F2 C0184D: 98 TYA C0184E: 38 SEC C0184F: E9 40 00 SBC #$0040 (64) C01852: 29 FF 0F AND #$0FFF C01855: AA TAX C01856: BF 00 30 7F LDA $7F3000,X C0185A: 8D DA 10 STA $10DA C0185D: BF 00 00 7F LDA $7F0000,X C01861: 8D C0 10 STA $10C0 C01864: 29 FF 00 AND #$00FF C01867: 0A ASL A C01868: AA TAX C01869: BD 86 11 LDA $1186,X C0186C: 8D F4 10 STA $10F4 C0186F: 98 TYA C01870: 38 SEC C01871: E9 40 00 SBC #$0040 (64) C01874: 29 C0 0F AND #$0FC0 C01877: 85 0D STA $0D C01879: 98 TYA C0187A: 1A INC A C0187B: 29 3F 00 AND #$003F C0187E: 05 0D ORA $0D C01880: AA TAX C01881: BF 00 30 7F LDA $7F3000,X C01885: 8D DC 10 STA $10DC C01888: BF 00 00 7F LDA $7F0000,X C0188C: 8D C2 10 STA $10C2 C0188F: 29 FF 00 AND #$00FF C01892: 0A ASL A C01893: AA TAX C01894: BD 86 11 LDA $1186,X C01897: 8D F6 10 STA $10F6 C0189A: 98 TYA C0189B: 29 C0 0F AND #$0FC0 C0189E: 85 0D STA $0D C018A0: 98 TYA C018A1: 3A DEC A C018A2: 29 3F 00 AND #$003F C018A5: 05 0D ORA $0D C018A7: AA TAX C018A8: BF 00 30 7F LDA $7F3000,X C018AC: 8D DE 10 STA $10DE C018AF: BF 00 00 7F LDA $7F0000,X C018B3: 8D C4 10 STA $10C4 C018B6: 29 FF 00 AND #$00FF C018B9: 0A ASL A C018BA: AA TAX C018BB: BD 86 11 LDA $1186,X C018BE: 8D F8 10 STA $10F8 C018C1: 98 TYA C018C2: 29 C0 0F AND #$0FC0 C018C5: 85 0D STA $0D C018C7: 98 TYA C018C8: 3A 3A DEC x2 C018CA: 29 3F 00 AND #$003F C018CD: 05 0D ORA $0D C018CF: AA TAX C018D0: BF 00 30 7F LDA $7F3000,X C018D4: 8D EC 10 STA $10EC C018D7: BF 00 00 7F LDA $7F0000,X C018DB: 8D D2 10 STA $10D2 C018DE: 29 FF 00 AND #$00FF C018E1: 0A ASL A C018E2: AA TAX C018E3: BD 86 11 LDA $1186,X C018E6: 8D FC 10 STA $10FC C018E9: BB TYX C018EA: BF 00 30 7F LDA $7F3000,X C018EE: 8D E0 10 STA $10E0 C018F1: BF 00 00 7F LDA $7F0000,X C018F5: 8D C6 10 STA $10C6 C018F8: 29 FF 00 AND #$00FF C018FB: 0A ASL A C018FC: AA TAX C018FD: BD 86 11 LDA $1186,X C01900: 8D FA 10 STA $10FA C01903: 98 TYA C01904: 29 C0 0F AND #$0FC0 C01907: 85 0D STA $0D C01909: 98 TYA C0190A: 1A INC A C0190B: 29 3F 00 AND #$003F C0190E: 05 0D ORA $0D C01910: AA TAX C01911: BF 00 30 7F LDA $7F3000,X C01915: 8D E2 10 STA $10E2 C01918: BF 00 00 7F LDA $7F0000,X C0191C: 8D C8 10 STA $10C8 C0191F: 29 FF 00 AND #$00FF C01922: 0A ASL A C01923: AA TAX C01924: BD 86 11 LDA $1186,X C01927: 8D FC 10 STA $10FC C0192A: 98 TYA C0192B: 29 C0 0F AND #$0FC0 C0192E: 85 0D STA $0D C01930: 98 TYA C01931: 1A 1A INC x2 C01933: 29 3F 00 AND #$003F C01936: 05 0D ORA $0D C01938: AA TAX C01939: BF 00 30 7F LDA $7F3000,X C0193D: 8D EE 10 STA $10EE C01940: BF 00 00 7F LDA $7F0000,X C01944: 8D D4 10 STA $10D4 C01947: 29 FF 00 AND #$00FF C0194A: 0A ASL A C0194B: AA TAX C0194C: BD 86 11 LDA $1186 C0194F: 8D 08 11 STA $1108 C01952: 98 TYA C01953: 18 CLC C01954: 69 40 00 ADC #$0040 (64) C01957: 29 C0 0F AND #$0FC0 C0195A: 85 0D STA $0D C0195C: 98 TYA C0195D: 3A DEC A C0195E: 29 3F 00 AND #$003F C01961: 05 0D ORA $0D C01963: AA TAX C01964: BF 00 30 7F LDA $7F3000,X C01968: 8D E4 10 STA $10E4 C0196B: BF 00 00 7F LDA $7F0000,X C0196F: 8D CA 10 STA $10CA C01972: 29 FF 00 AND #$00FF C01975: 0A ASL A C01976: AA TAX C01977: BD 86 11 LDA $1186,X C0197A: 8D FE 10 STA $10FE C0197D: 98 TYA C0197E: 18 CLC C0197F: 69 40 00 ADC #$0040 (64) C01982: 29 FF 0F AND #$0FFF C01985: AA TAX C01986: BF 00 30 7F LDA $7F3000,X C0198A: 8D E6 10 STA $10E6 C0198D: BF 00 00 7F LDA $7F0000,X C01991: 8D CC 10 STA $10CC C01994: 29 FF 00 AND #$00FF C01997: 0A ASL A C01998: AA TAX C01999: BD 86 11 LDA $1186,X C0199C: 8D 00 11 STA $1100 C0199F: 98 TYA C019A0: 18 CLC C019A1: 69 40 00 ADC #$0040 C019A4: 29 C0 0F AND #$0FC0 C019A7: 85 0D STA $0D C019A9: 98 TYA C019AA: 1A INC A C019AB: 29 3F 00 AND #$003F C019AE: 05 0D ORA $0D C019B0: AA TAX C019B1: BF 00 30 7F LDA $7F3000,X C019B5: 8D E8 10 STA $10E8 C019B8: BF 00 00 7F LDA $7F0000,X C019BC: 8D CE 10 STA $10CE C019BF: 29 FF 00 AND #$00FF C019C2: 0A ASL A C019C3: AA TAX C019C4: BD 86 11 LDA $1186,X C019C7: 8D 02 11 STA $1102 C019CA: 98 TYA C019CB: 18 CLC C019CC: 69 80 00 ADC #$0080 (128) C019CF: 29 FF 0F AND #$0FFF C019D2: AA TAX C019D3: BF 00 30 7F LDA $7F3000,X C019D7: 8D F0 10 STA $10F0 C019DA: BF 00 00 7F LDA $7F0000,X C019DE: 8D D6 10 STA $10D6 C019E1: 29 FF 00 AND #$00FF C019E4: 0A ASL A C019E5: AA TAX C019E6: BD 86 11 LDA $1186,X C019E9: 8D 0A 11 STA $110A C019EC: A5 06 LDA $06 (A = 0) C019EE: E2 20 SEP #$20 (8-bit A) C019F0: 60 RTS C019F1: A5 76 LDA $76 C019F3: 29 3F AND #$3F C019F5: C2 20 REP #$20 (16-bit A) C019F7: EB XBA C019F8: 4A 4A LSR x2 C019FA: 85 0D STA $0D C019FC: A5 06 LDA $06 (A = 0) C019FE: E2 20 SEP #$20 (8-bit A) C01A00: A5 75 LDA $75 C01A02: 29 3F AND #$3F C01A04: 05 0D ORA $0D C01A06: 85 0D STA $0D (TSB!) C01A08: A6 0D LDX $0D C01A0A: BF 00 00 7F LDA $7F0000,X C01A0E: 48 PHP C01A0F: C2 20 REP #$20 (16-bit A) C01A11: 0A ASL A C01A12: AA TAX C01A13: BD 86 11 LDA $1186,X C01A16: AA TAX C01A17: A5 06 LDA $06 (A = 0) C01A19: E2 20 SEP #$20 (8-bit A) C01A1B: 68 PLP (SEP #$20 not needed...) C01A1C: 60 RTS (This function is called after the overworld map movement handler.) C01A1D: A5 BA LDA $BA (Movement direction) C01A1F: D0 03 BNE $1A24 (+3) (If not moving...) C01A21: E6 41 INC $41 (...exit) C01A23: 60 RTS C01A24: AD FA 0A LDA $0AFA (Player speed mods) C01A27: F0 0C BEQ $1A35 (+12) (Branch if normal speed) C01A29: 30 05 BMI $1A30 (+5) (Branch if half speed) C01A2B: A5 C0 LDA $C0 C01A2D: 0A ASL A (Double speed) C01A2E: 80 07 BRA $1A37 (+7) C01A30: A5 C0 LDA $C0 C01A32: 4A LSR A (Half speed) C01A33: 80 02 BRA $1A37 (+2) C01A35: A5 C0 LDA $C0 C01A37: 85 0F STA $0F (Save speed) C01A39: 64 10 STZ $10 (Zero out high byte) C01A3B: A5 BA LDA $BA (Get movement direction) C01A3D: 3A DEC A C01A3E: D0 23 BNE $1A63 (+35) (Branch if not up) C01A40: A5 63 LDA $63 (Player Y-step amount) C01A42: 29 1F AND #$1F C01A44: 38 SEC C01A45: E5 0F SBC $0F (Subtract speed) C01A47: B0 07 BCS $1A50 (+7) (If negative...) C01A49: AD D9 0A LDA $0AD9 (...decrease Y-coordinate) C01A4C: 3A DEC A C01A4D: 8D D9 0A STA $0AD9 C01A50: C2 20 REP #$20 (16-bit A) C01A52: A5 63 LDA $63 (Player Y-step amount) C01A54: 38 SEC C01A55: E5 0F SBC $0F (Subtract speed) C01A57: 29 FF 0F AND #$0FFF C01A5A: 85 63 STA $63 C01A5C: A5 06 LDA $06 (A = 0) C01A5E: E2 20 SEP #$20 (8-bit A) C01A60: 4C D3 1A JMP $1AD3 (BRA!) C01A63: 3A DEC A (Movement direction) C01A64: D0 25 BNE $1A8B (+37) (Branch if not right) C01A66: A5 61 LDA $61 (Player X-step amount) C01A68: 29 1F AND #$1F C01A6A: 18 CLC C01A6B: 65 0F ADC $0F (Add speed) C01A6D: 29 E0 AND #$E0 C01A6F: F0 07 BEQ $1A78 (+7) (If 5-bit overflow...) C01A71: AD D8 0A LDA $0AD8 (...increase X-coordinate) C01A74: 1A INC A C01A75: 8D D8 0A STA $0AD8 C01A78: C2 20 REP #$20 (16-bit A) C01A7A: A5 61 LDA $61 (Player X-step amount) C01A7C: 18 CLC C01A7D: 29 FF 0F AND #$0FFF C01A80: 65 0F ADC $0F (Add speed) C01A82: 85 61 STA $61 C01A84: A5 06 LDA $06 (A = 0) C01A86: E2 20 SEP #$20 (8-bit A) C01A88: 4C D3 1A JMP $1AD3 (BRA!) C01A8B: 3A DEC A (Movement direction) C01A8C: D0 25 BNE $1AB3 (+37) (Branch if not down) C01A8E: A5 63 LDA $63 (Player Y-step amount) C01A90: 29 1F AND #$1F C01A92: 18 CLC C01A93: 65 0F ADC $0F (Add speed) C01A95: 29 E0 AND #$E0 C01A97: F0 07 BEQ $1AA0 (+7) (If 5-bit overflow...) C01A99: AD D9 0A LDA $0AD9 (...increase Y-coordinate) C01A9C: 1A INC A C01A9D: 8D D9 0A STA $0AD9 C01AA0: C2 20 REP #$20 (16-bit A) C01AA2: A5 63 LDA $63 (Player Y-step amount) C01AA4: 18 CLC C01AA5: 29 FF 0F AND #$0FFF C01AA8: 65 0F ADC $0F (Add speed) C01AAA: 85 63 STA $63 C01AAC: A5 06 LDA $06 (A = 0) C01AAE: E2 20 SEP #$20 (8-bit A) C01AB0: 4C D3 1A JMP $1AD3 (BRA!) C01AB3: A5 61 LDA $61 (Player X-step amount) C01AB5: 29 1F AND #$1F C01AB7: 38 SEC C01AB8: E5 0F SBC $0F (Subtract speed) C01ABA: B0 07 BCS $1AC3 (+7) (If negative...) C01ABC: AD D8 0A LDA $0AD8 (...decrease X-coordinate) C01ABF: 3A DEC A C01AC0: 8D D8 0A STA $0AD8 C01AC3: C2 20 REP #$20 (16-bit A) C01AC5: A5 61 LDA $61 (Player X-step amount) C01AC7: 38 SEC C01AC8: 29 FF 0F AND #$0FFF C01ACB: E5 0F SBC $0F (Subtract speed) C01ACD: 85 61 STA $61 C01ACF: A5 06 LDA $06 (A = 0) C01AD1: E2 20 SEP #$20 (8-bit A) C01AD3: A5 61 LDA $61 (Player X-step amount) C01AD5: 29 1F AND #$1F (Partway through step?) C01AD7: D0 08 BNE $1AE1 (+8) (Branch if so) C01AD9: A5 63 LDA $63 (Player Y-step amount) C01ADB: 29 1F AND #$1F (Partway through step?) C01ADD: D0 02 BNE $1AE1 (+2) (Branch if so) C01ADF: E6 56 INC $56 C01AE1: E6 41 INC $41 C01AE3: 60 RTS C01AE4: A5 BE LDA $BE C01AE6: F0 0D BEQ $1AF5 (+13) C01AE8: A5 BE LDA $BE (...) C01AEA: 38 SEC C01AEB: E5 C0 SBC $C0 (Subtract speed) C01AED: 85 BE STA $BE C01AEF: 29 7F AND #$7F C01AF1: D0 02 BNE $1AF5 (+2) C01AF3: 64 BE STZ $BE C01AF5: A5 BA LDA $BA (Get movement direction) C01AF7: D0 03 BNE $1AFC (+3) (If null...) C01AF9: E6 41 INC $41 (...exit) C01AFB: 60 RTS C01AFC: A5 41 LDA $41 C01AFE: 4A LSR A C01AFF: B0 45 BCS $1B46 (+69) C01B01: AD D9 0A LDA $0AD9 (Player Y-coordinate) C01B04: 85 76 STA $76 C01B06: AD D8 0A LDA $0AD8 (Player X-coordinate) C01B09: 85 75 STA $75 C01B0B: A5 BA LDA $BA C01B0D: A6 06 LDX $06 C01B0F: 86 71 STX $71 C01B11: 20 7D 70 JSR $707D C01B14: AD 21 11 LDA $1121 C01B17: 29 40 AND #$40 C01B19: D0 12 BNE $1B2D (+18) C01B1B: A5 78 LDA $78 C01B1D: 85 76 STA $76 C01B1F: A5 77 LDA $77 C01B21: 85 75 STA $75 C01B23: A5 BA LDA $BA C01B25: A2 00 10 LDX #$1000 (4,096) C01B28: 86 71 STX $71 C01B2A: 20 7D 70 JSR $707D C01B2D: AD 21 11 LDA $1121 C01B30: 30 12 BMI $1B44 (+18) C01B32: A5 7A LDA $7A C01B34: 85 76 STA $76 C01B36: A5 79 LDA $79 C01B38: 85 75 STA $75 C01B3A: A5 BA LDA $BA C01B3C: A2 00 20 LDX #$2000 (8,192) C01B3F: 86 71 STX $71 C01B41: 20 7D 70 JSR $707D C01B44: E6 9F INC $9F C01B46: A5 BA LDA $BA (Get movement direction) C01B48: 3A DEC A C01B49: D0 5B BNE $1BA6 (+91) (Branch if not up) C01B4B: A5 63 LDA $63 (Player Y-step amount) C01B4D: 29 1F AND #$1F C01B4F: 38 SEC C01B50: E5 C0 SBC $C0 (Subtract speed) C01B52: B0 09 BCS $1B5D (+9) (If underflow occurred...) C01B54: AD D9 0A LDA $0AD9 (...player Y-coord...) C01B57: 3A DEC A (...decreased by 1) C01B58: 29 3F AND #$3F (MOD 64) C01B5A: 8D D9 0A STA $0AD9 C01B5D: A5 67 LDA $67 C01B5F: 29 1F AND #$1F C01B61: 38 SEC C01B62: ED 82 10 SBC $1082 C01B65: B0 09 BCS $1B70 (+9) C01B67: AD 78 0B LDA $0B78 (Not LDA $78?) C01B6A: 3A DEC A C01B6B: 29 3F AND #$3F C01B6D: 8D 78 0B STA $0B78 (Sigh...) C01B70: A5 6B LDA $6B C01B72: 29 1F AND #$1F C01B74: 38 SEC C01B75: ED 86 10 SBC $1086 C01B78: B0 09 BCS $1B83 (+9) C01B7A: AD 7A 0B LDA $0B7A (Grr!) C01B7D: 3A DEC A C01B7E: 29 3F AND #$3F C01B80: 8D 7A 0B STA $0B7A C01B83: C2 20 REP #$20 (16-bit A) C01B85: A5 63 LDA $63 (Player Y-step amount) C01B87: 38 SEC C01B88: E5 C0 SBC $C0 (Subtract speed) C01B8A: 29 FF 0F AND #$0FFF (MOD 4,096) C01B8D: 85 63 STA $63 C01B8F: A5 67 LDA $67 C01B91: 38 SEC C01B92: ED 82 10 SBC $1082 C01B95: 85 67 STA $67 C01B97: A5 6B LDA $6B C01B99: 38 SEC C01B9A: ED 86 10 SBC $1086 C01B9D: 85 6B STA $6B C01B9F: A5 06 LDA $06 (A = 0) C01BA1: E2 20 SEP #$20 (8-bit A) C01BA3: 4C C6 1C JMP $1CC6 C01BA6: 3A DEC A (Moving right?) C01BA7: D0 61 BNE $1C0A (+97) (Branch if not) C01BA9: A5 61 LDA $61 (Player X-step amount) C01BAB: 29 1F AND #$1F C01BAD: 18 CLC C01BAE: 65 C0 ADC $C0 (Add speed) C01BB0: 29 E0 AND #$E0 (5-bit overflow occurred?) C01BB2: F0 09 BEQ $1BBD (+9) (If so...) C01BB4: AD D8 0A LDA $0AD8 (...player X-coord...) C01BB7: 1A INC A (...increased by 1) C01BB8: 29 3F AND #$3F (MOD 64) C01BBA: 8D D8 0A STA $0AD8 C01BBD: A5 65 LDA $65 C01BBF: 29 1F AND #$1F C01BC1: 18 CLC C01BC2: 6D 80 10 ADC $1080 C01BC5: 29 E0 AND #$E0 C01BC7: F0 09 BEQ $1BD2 (+9) C01BC9: AD 77 0B LDA $0B77 C01BCC: 1A INC A C01BCD: 29 3F AND #$3F C01BCF: 8D 77 0B STA $0B77 C01BD2: A5 69 LDA $69 C01BD4: 29 1F AND #$1F C01BD6: 18 CLC C01BD7: 6D 84 10 ADC $1084 C01BDA: 29 E0 AND #$E0 C01BDC: F0 09 BEQ $1BE7 (+9) C01BDE: AD 79 0B LDA $0B79 C01BE1: 1A INC A C01BE2: 29 3F AND #$3F C01BE4: 8D 79 0B STA $0B79 C01BE7: C2 20 REP #$20 (16-bit A) C01BE9: A5 61 LDA $61 (Player X-step amount) C01BEB: 18 CLC C01BEC: 29 FF 0F AND #$0FFF (MOD 4,096) C01BEF: 65 C0 ADC $C0 (Add speed) C01BF1: 85 61 STA $61 C01BF3: A5 65 LDA $65 C01BF5: 18 CLC C01BF6: 6D 80 10 ADC $1080 C01BF9: 85 65 STA $65 C01BFB: A5 69 LDA $69 C01BFD: 18 CLC C01BFE: 6D 84 10 ADC $1084 C01C01: 85 69 STA $69 C01C03: A5 06 LDA $06 (A = 0) C01C05: E2 20 SEP #$20 (8-bit A) C01C07: 4C C6 1C JMP $1CC6 C01C0A: 3A DEC A (Moving down?) C01C0B: D0 61 BNE $1C6E (+97) (Branch if not) C01C0D: A5 63 LDA $63 (Player Y-step amount) C01C0F: 29 1F AND #$1F C01C11: 18 CLC C01C12: 65 C0 ADC $C0 (Add speed) C01C14: 29 E0 AND #$E0 (5-bit overflow occurred?) C01C16: F0 09 BEQ $1C21 (+9) (If so...) C01C18: AD D9 0A LDA $0AD9 (...player Y-coord...) C01C1B: 1A INC A (...increased by 1) C01C1C: 29 3F AND #$3F (MOD 64) C01C1E: 8D D9 0A STA $0AD9 C01C21: A5 67 LDA $67 C01C23: 29 1F AND #$1F C01C25: 18 CLC C01C26: 6D 82 10 ADC $1082 C01C29: 29 E0 AND #$E0 C01C2B: F0 09 BEQ $1C36 (+9) C01C2D: AD 78 0B LDA $0B78 C01C30: 1A INC A C01C31: 29 3F AND #$3F C01C33: 8D 78 0B STA $0B78 C01C36: A5 6B LDA $6B C01C38: 29 1F AND #$1F C01C3A: 18 CLC C01C3B: 6D 86 10 ADC $1086 C01C3E: 29 E0 AND #$E0 C01C40: F0 09 BEQ $1C42 (+9) C01C42: AD 7A 0B LDA $0B7A C01C45: 1A INC A C01C46: 29 3F AND #$3F C01C48: 8D 7A 0B STA $0B7A C01C4B: C2 20 REP #$20 (16-bit A) C01C4D: A5 63 LDA $63 (Player Y-step amount) C01C4F: 18 CLC C01C50: 29 FF 0F AND #$0FFF (MOD 4,096) C01C53: 65 C0 ADC $C0 (Add speed) C01C55: 85 63 STA $63 C01C57: A5 67 LDA $67 C01C59: 18 CLC C01C5A: 6D 82 10 ADC $1082 C01C5D: 85 67 STA $67 C01C5F: A5 6B LDA $6B C01C61: 18 CLC C01C62: 6D 86 10 ADC $1086 C01C65: 85 6B STA $6B C01C67: A5 06 LDA $06 (A = 0) C01C69: E2 20 SEP #$20 (8-bit A) C01C6B: 4C C6 1C JMP $1CC6 (BRA!) C01C6E: A5 61 LDA $61 (Player X-step amount) C01C70: 29 1F AND #$1F C01C72: 38 SEC C01C73: E5 C0 SBC $C0 (Subtract speed) C01C75: B0 09 BCS $1C80 (+9) (If underflow occurred...) C01C77: AD D8 0A LDA $0AD8 (...player X-coord...) C01C7A: 3A DEC A (...decreased by 1) C01C7B: 29 3F AND #$3F (MOD 64) C01C7D: 8D D8 0A STA $0AD8 C01C80: A5 65 LDA $65 C01C82: 29 1F AND #$1F C01C84: 38 SEC C01C85: ED 80 10 SBC $1080 C01C88: B0 09 BCS $1C93 (+9) C01C8A: AD 77 0B LDA $0B77 C01C8D: 3A DEC A C01C8E: 29 3F AND #$3F C01C90: 8D 77 0B STA $0B77 C01C93: A5 69 LDA $69 C01C95: 29 1F AND #$1F C01C97: 38 SEC C01C98: ED 84 10 SBC $1084 C01C9B: B0 09 BCS $1CA6 (+9) C01C9D: AD 79 0B LDA $0B79 C01CA0: 3A DEC A C01CA1: 29 3F AND #$3F C01CA3: 8D 79 0B STA $0B79 C01CA6: C2 20 REP #$20 (16-bit A) C01CA8: A5 61 LDA $61 (Player X-step amount) C01CAA: 38 SEC C01CAB: 29 FF 0F AND #$0FFF (MOD 4,096) C01CAE: E5 C0 SBC $C0 (Subtract speed) C01CB0: 85 61 STA $61 C01CB2: A5 65 LDA $65 C01CB4: 38 SEC C01CB5: ED 80 10 SBC $1080 C01CB8: 85 65 STA $65 C01CBA: A5 69 LDA $69 C01CBC: 38 SEC C01CBD: ED 84 10 SBC $1084 C01CC0: 85 69 STA $69 C01CC2: A5 06 LDA $06 (A = 0) C01CC4: E2 20 SEP #$20 (8-bit A) C01CC6: A5 61 LDA $61 (Player X-step amount) C01CC8: 29 1F AND #$1F (Partway through step?) C01CCA: D0 08 BNE $1CD4 (+8) (Branch if so) C01CCC: A5 63 LDA $63 (Player Y-step amount) C01CCE: 29 1F AND #$1F (Partway through step?) C01CD0: D0 02 BNE $1CD4 (+2) (Branch if so) C01CD2: E6 56 INC $56 C01CD4: E6 41 INC $41 C01CD6: 60 RTS (This function refreshes the player sprite upon return from the main menu.) C01CD7: AD DA 0A LDA $0ADA (Player sprite ID) C01CDA: C9 07 CMP #$07 (7) C01CDC: B0 03 BCS $1CE1 (+3) (Branch backwards!) C01CDE: 20 E2 1C JSR $1CE2 (WE DON'T NEED THIS!!!!) C01CE1: 60 RTS C01CE2: A4 06 LDY $06 (Y = 0) C01CE4: B9 00 05 LDA $0500,Y (Look at a party member) C01CE7: 29 40 AND #$40 (Party slot empty? BIT!) C01CE9: D0 24 BNE $1D0F (+36) (If so, check next one) C01CEB: B9 00 05 LDA $0500,Y (Get character ID) C01CEE: 29 07 AND #$07 C01CF0: 1A 1A INC x2 C01CF2: 8D DA 0A STA $0ADA (Set sprite ID) C01CF5: B9 1A 05 LDA $051A,Y (Status byte 1) C01CF8: 29 20 AND #$20 (Toad?) C01CFA: F0 07 BEQ $1D03 (+7) (Branch if not) C01CFC: A9 01 LDA #$01 (1) C01CFE: 8D DA 0A STA $0ADA (Set sprite ID) C01D01: 80 1A BRA $1D1D (+26) (Forced branch to RTS?!) C01D03: B9 1A 05 LDA $051A,Y (Status byte 1) C01D06: 29 10 AND #$10 (Mini?) C01D08: F0 13 BEQ $1D1D (+19) (Exit if not) C01D0A: 9C DA 0A STZ $0ADA (Set sprite ID) C01D0D: 80 0E BRA $1D1D (+14) (Forced branch to RTS?!) C01D0F: C2 20 REP #$20 (16-bit A) C01D11: 98 TYA C01D12: 18 CLC (REP #$21!) C01D13: 69 50 00 ADC #$0050 (80) (Next party member) C01D16: A8 TAY C01D17: A5 06 LDA $06 (A = 0) C01D19: E2 20 SEP #$20 (8-bit A) C01D1B: 80 C7 BRA $1CE4 (-57) (Loop over entire party) C01D1D: 60 RTS (This function seems to be for updating player sprites.) C01D1E: AD DA 0A LDA $0ADA (Get sprite ID) C01D21: C9 09 CMP #$09 (9) C01D23: 90 03 BCC $1D28 (+3) C01D25: 4C C3 1D JMP $1DC3 C01D28: A9 80 LDA #$80 C01D2A: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C01D2D: 9C 0B 42 STZ $420B (All DMA channels off) C01D30: A9 01 LDA #$01 C01D32: 8D 00 43 STA $4300 (Double-reg, single-write) C01D35: A9 18 LDA #$18 C01D37: 8D 01 43 STA $4301 (DMA dest = $2118) C01D3A: A9 DA LDA #$DA C01D3C: 8D 04 43 STA $4304 (DMA source bank = $DA) C01D3F: A5 57 LDA $57 C01D41: D0 39 BNE $1D7C (+57) C01D43: AD DA 0A LDA $0ADA (Get player sprite ID) C01D46: 38 SEC C01D47: E9 02 SBC #$02 (DEC x2...) C01D49: 30 31 BMI $1D7C (+49) (Branch if Toad or Mini) C01D4B: C9 05 CMP #$05 (5) C01D4D: B0 2D BCS $1D7C (+45) (Branch if not one of the five playable characters' sprites) C01D4F: A4 06 LDY $06 (Y = 0) C01D51: B9 00 05 LDA $0500,Y (Look at a party member) C01D54: 29 40 AND #$40 (Party slot empty?) C01D56: F0 0E BEQ $1D66 (+14) (If not, branch) C01D58: C2 20 REP #$20 (16-bit A) C01D5A: 98 TYA C01D5B: 18 CLC (REP #$21!) C01D5C: 69 50 00 ADC #$0050 (80) (Next party member) C01D5F: A8 TAY C01D60: A5 06 LDA $06 (A = 0) C01D62: E2 20 SEP #$20 (8-bit A) C01D64: 80 EB BRA $1D51 (-21) (Loop until member found) C01D66: B9 1A 05 LDA $051A,Y (Status byte 1) C01D69: 29 20 AND #$20 (Toad?) C01D6B: F0 04 BEQ $1D71 (+4) (Branch if not) C01D6D: A9 01 LDA #$01 (1) (Toad sprite ID) C01D6F: 80 0E BRA $1D7F (+14) C01D71: B9 1A 05 LDA $051A,Y (Status byte 1) C01D74: 29 10 AND #$10 (Mini?) C01D76: F0 04 BEQ $1D7C (+4) (Branch if not) C01D78: A9 00 LDA #$00 (0) (Mini sprite ID) C01D7A: 80 03 BRA $1D7F (+3) C01D7C: AD DA 0A LDA $0ADA (Player sprite ID) C01D7F: 0A ASL A C01D80: AA TAX C01D81: C2 20 REP #$20 (16-bit A) C01D83: BF 02 1E C0 LDA $C01E02,X (Get sprite's location) C01D87: 8D 02 43 STA $4302 (Store as DMA source) C01D8A: A9 00 60 LDA #$6000 C01D8D: 8D 16 21 STA $2116 (VRAM destination address) C01D90: A5 53 LDA $53 C01D92: D0 05 BNE $1D99 (+5) C01D94: A9 00 02 LDA #$0200 (512) C01D97: 80 03 BRA $1D9C (+3) C01D99: A9 00 08 LDA #$0800 (2,048) C01D9C: 8D 05 43 STA $4305 (DMA transfer size) C01D9F: A5 06 LDA $06 (A = 0) C01DA1: E2 20 SEP #$20 (8-bit A) C01DA3: A9 01 LDA #$01 C01DA5: 8D 0B 42 STA $420B (Start DMA channel 0) C01DA8: A5 53 LDA $53 C01DAA: D0 16 BNE $1DC2 (+22) C01DAC: A2 00 61 LDX #$6100 C01DAF: 86 2E STX $2E (VRAM destination address) C01DB1: A2 00 02 LDX #$0200 (512) C01DB4: 86 2C STX $2C (DMA transfer size) C01DB6: A2 00 6C LDX #$6C00 C01DB9: 86 23 STX $23 (DMA source address) C01DBB: A9 DA LDA #$DA C01DBD: 85 25 STA $25 (DMA source is $DA:6C00) C01DBF: 20 BC 4C JSR $4CBC (Start DMA...JMP!) C01DC2: 60 RTS C01DC3: 48 PHA C01DC4: C9 0A CMP #$0A (10) C01DC6: B0 12 BCS $1DDA (+18) C01DC8: A6 06 LDX $06 (X = 0) C01DCA: BF 40 FF DF LDA $DFFF40,X (Palette ???) C01DCE: 9D 00 0D STA $0D00,X C01DD1: 9D 80 0D STA $0D80,X C01DD4: E8 INX C01DD5: E0 10 00 CPX #$0010 (16) C01DD8: D0 F0 BNE $1DCA (-16) C01DDA: 68 PLA C01DDB: 38 SEC C01DDC: E9 09 SBC #$09 (9) C01DDE: 0A ASL A C01DDF: AA TAX C01DE0: C2 20 REP #$20 (16-bit A) C01DE2: BF FA 1D C0 LDA $C01DFA,X C01DE6: 85 30 STA $30 (DMA source address) C01DE8: A9 00 60 LDA #$6000 (24,576) C01DEB: 85 33 STA $33 (VRAM destination address) C01DED: A9 18 00 LDA #$0018 (24) C01DF0: 85 35 STA $35 (# of write iterations) C01DF2: A5 06 LDA $06 (A = 0) C01DF4: E2 20 SEP #$20 (8-bit A) C01DF6: 20 D5 4A JSR $4AD5 (JMP!) C01DF9: 60 RTS (DMA source addresses having to do with player sprites.) C01DFA: 80 3B C01DFC: 40 42 C01DFE: 00 3A C01E00: 60 3A (Sprite data locations.) C01E02: 00 C8 C01E04: 00 D0 C01E06: 00 D8 C01E08: 00 E0 C01E0A: 00 E8 C01E0C: 00 F0 C01E0E: 00 F8 C01E10: 00 6C C01E12: 00 84 C01E14: A5 A4 LDA $A4 C01E16: F0 41 BEQ $1E59 (+65) C01E18: 3A DEC A C01E19: 0A ASL A C01E1A: AA TAX C01E1B: C2 20 REP #$20 (16-bit A) C01E1D: BF 5A 1E C0 LDA $C01E5A,X C01E21: 8D 02 43 STA $4302 (DMA source address) C01E24: A5 06 LDA $06 (A = 0) C01E26: E2 20 SEP #$20 (8-bit A) C01E28: A5 53 LDA $53 C01E2A: D0 05 BNE $1E31 (+5) C01E2C: A2 00 73 LDX #$7300 C01E2F: 80 03 BRA $1E34 (+3) C01E31: A2 00 61 LDX #$6100 C01E34: 8E 16 21 STX $2116 (VRAM destination address) C01E37: A9 80 LDA #$80 C01E39: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C01E3C: 9C 0B 42 STZ $420B (All DMA channels off) C01E3F: A9 01 LDA #$01 C01E41: 8D 00 43 STA $4300 (Double-reg, single-write) C01E44: A9 18 LDA #$18 C01E46: 8D 01 43 STA $4301 (DMA dest = $2118) C01E49: A2 00 08 LDX #$0800 C01E4C: 8E 05 43 STX $4305 (DMA transfer size) C01E4F: A9 DB LDA #$DB C01E51: 8D 04 43 STA $4304 (DMA source bank = $DB) C01E54: A9 01 LDA #$01 C01E56: 8D 0B 42 STA $420B (Start DMA channel 0) C01E59: 60 RTS C01E5A: 80 4D C01E5C: 80 5D C01E5E: 80 65 C01E60: 80 61 C01E62: 80 61 (Draws a shadow under flying vehicles.) C01E64: A5 BD LDA $BD C01E66: F0 4C BEQ $1EB4 (+76) C01E68: AD DC 0A LDA $0ADC (Player vehicle) C01E6B: F0 47 BEQ $1EB4 (+71) (Exit if walking) C01E6D: 3A DEC A (Convert ID to RAM offset) C01E6E: 0A 0A ASL x2 C01E70: A8 TAY C01E71: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C01E74: 29 1C AND #$1C (Get current form) C01E76: 4A 4A LSR x2 C01E78: C9 02 CMP #$02 (2) (Black chocobo?) C01E7A: F0 0C BEQ $1E88 (+12) (Branch if so) C01E7C: C9 03 CMP #$03 (3) (Hiryuu?) C01E7E: F0 08 BEQ $1E88 (+8) (Branch if so) C01E80: C9 04 CMP #$04 (4) (Submarine?) C01E82: F0 04 BEQ $1E88 (+4) (Branch if so) C01E84: C9 06 CMP #$06 (6) (Airship?) C01E86: D0 2C BNE $1EB4 (+44) (Exit if not) C01E88: B9 DE 0A LDA $0ADE,Y (Airship height) C01E8B: 29 7C AND #$7C (Round down to nearest 4) C01E8D: 4A LSR A (Divide by 2) C01E8E: AA TAX C01E8F: C2 20 REP #$20 (16-bit A) C01E91: BF B5 1E C0 LDA $C01EB5,X (Get shadow size) C01E95: 85 11 STA $11 C01E97: A9 70 75 LDA #$7570 (Shadow coords, left half) C01E9A: 8D F8 02 STA $02F8 (Write to DMA buffer) C01E9D: A5 11 LDA $11 (Get shadow tile) C01E9F: 8D FA 02 STA $02FA (Write to DMA buffer) C01EA2: A9 78 75 LDA #$7578 (Shadow coords, rt half) C01EA5: 8D FC 02 STA $02FC (Write to DMA buffer) C01EA8: A5 11 LDA $11 (Get shadow tile) C01EAA: 49 00 40 EOR #$4000 (Flip horizontally) C01EAD: 8D FE 02 STA $02FE (Write to DMA buffer) C01EB0: A5 06 LDA $06 (A = 0) C01EB2: E2 20 SEP #$20 (8-bit A) C01EB4: 60 RTS C01EB5: 44 30 C01EB7: 44 30 C01EB9: 45 30 C01EBB: 45 30 C01EBD: 45 30 C01EBF: 46 30 C01EC1: 46 30 C01EC3: 46 30 (This function determines where vehicles should be drawn.) C01EC5: A4 06 LDY $06 (Y = 0) C01EC7: 84 23 STY $23 C01EC9: A4 23 LDY $23 (Look at a vehicle) C01ECB: A5 6F LDA $6F (Is airship in flight?) C01ECD: F0 03 BEQ $1ED2 (+3) (If so, skip vehicle) C01ECF: 4C 48 1F JMP $1F48 (Why keep looping then?) C01ED2: B9 DE 0A LDA $0ADE,Y (Vehicle properties) C01ED5: 10 03 BPL $1EDA (+3) (If not boardable, skip) C01ED7: 4C 48 1F JMP $1F48 (Could've BMI'd backwards) C01EDA: B9 DD 0A LDA $0ADD,Y C01EDD: 4A (x5) LSR x5 (Map containing vehicle) C01EE2: CD D6 0A CMP $0AD6 (Are we on that map?) C01EE5: F0 03 BEQ $1EEA (+3) (If not, skip vehicle) C01EE7: 4C 48 1F JMP $1F48 (Could've BNE'd backwards) C01EEA: B9 DF 0A LDA $0ADF,Y (Vehicle X-coordinate) C01EED: 18 CLC C01EEE: 6F 5F 20 C0 ADC $C0205F (ADC #$07, 7) C01EF2: 38 SEC C01EF3: ED D8 0A SBC $0AD8 (Subtract player X-coord) C01EF6: CF 60 20 C0 CMP $C02060 (CMP #$11, 17) C01EFA: B0 4C BCS $1F48 (+76) (Skip vehicle if it's off either side of the screen) C01EFC: 20 1F 20 JSR $201F (Calculate vehicle's X-coordinate on screen) C01EFF: A5 14 LDA $14 C01F01: 4A LSR A C01F02: B0 44 BCS $1F48 (+68) (Skip vehicle if it's off the right edge of the screen) C01F04: B9 E0 0A LDA $0AE0,Y (Vehicle Y-coordinate) C01F07: 18 CLC C01F08: 6F 61 20 C0 ADC $C02061 (ADC #$07, 7) C01F0C: 38 SEC C01F0D: ED D9 0A SBC $0AD9 (Subtract player Y-coord) C01F10: CF 62 20 C0 CMP $C02062 (CMP #$0F, 15) C01F14: B0 32 BCS $1F48 (+50) (Skip vehicle if it's off the top or bottom of the screen) C01F16: 20 3F 20 JSR $203F (Calculate vehicle's Y-coordinate on screen) C01F19: A4 23 LDY $23 C01F1B: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C01F1E: 29 03 AND #$03 (Get unused form) C01F20: 18 CLC C01F21: 65 23 ADC $23 (Add vehicle index * 4) C01F23: 18 CLC C01F24: 69 04 ADC #$04 (4) (Add 4 to skip walking!?) C01F26: 0A ASL A C01F27: AA TAX C01F28: C2 20 REP #$20 (16-bit A) C01F2A: BF 63 20 C0 LDA $C02063,X (Get sprite data) C01F2E: 85 11 STA $11 C01F30: A5 06 LDA $06 (A = 0) C01F32: E2 20 SEP #$20 (8-bit A) C01F34: A9 60 LDA #$60 (96) (LDX or LDA #$0060...) C01F36: AA TAX C01F37: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C01F3A: 29 1C AND #$1C (Get current form) C01F3C: C9 08 CMP #$08 (8) C01F3E: B0 05 BCS $1F45 (+5) (Branch if not Boco) C01F40: 20 B4 1F JSR $1FB4 C01F43: 80 03 BRA $1F48 (+3) C01F45: 20 57 1F JSR $1F57 C01F48: A5 23 LDA $23 C01F4A: 18 CLC C01F4B: 69 04 ADC #$04 (Next vehicle) C01F4D: 85 23 STA $23 C01F4F: C9 18 CMP #$18 (Loop over six vehicles) C01F51: F0 03 BEQ $1F56 (+3) C01F53: 4C C9 1E JMP $1EC9 C01F56: 60 RTS (Draws every vehicle except Boco while walking. Judging by the fact that it requires input in the X register, it probably does other things too depending on its use.) C01F57: A5 23 LDA $23 (Get vehicle index) C01F59: 0A 0A ASL x2 (Multiply by 4) C01F5B: A8 TAY C01F5C: A9 04 LDA #$04 (4) C01F5E: 85 09 STA $09 (Set up 4-iteration loop) C01F60: A5 13 LDA $13 (Vehicle's draw X-coord) C01F62: 18 CLC C01F63: 7F B7 20 C0 ADC $C020B7,X (Add quadrant X-offset) C01F67: 38 SEC C01F68: ED A0 10 SBC $10A0 C01F6B: 99 98 02 STA $0298,Y (Write to DMA buffer) C01F6E: A5 15 LDA $15 (Vehicle's draw Y-coord) C01F70: 18 CLC C01F71: 7F B8 20 C0 ADC $C020B8,X (Add quadrant Y-offset) C01F75: 38 SEC C01F76: ED A2 10 SBC $10A2 C01F79: 99 99 02 STA $0299,Y (Write to DMA buffer) C01F7C: C2 20 REP #$20 (16-bit A) C01F7E: BF B9 20 C0 LDA $C020B9,X (Get quadrant tile) C01F82: 18 CLC C01F83: 65 11 ADC $11 (Add OAM data) C01F85: 99 9A 02 STA $029A,Y (Write to DMA buffer) C01F88: A5 06 LDA $06 (A = 0) C01F8A: E2 20 SEP #$20 (8-bit A) C01F8C: E8 E8 E8 E8 INX x4 C01F90: C8 C8 C8 C8 INY x4 C01F94: C6 09 DEC $09 (Loop for four quadrants) C01F96: D0 C8 BNE $1F60 (-56) C01F98: A6 23 LDX $23 (Vehicle RAM offset) C01F9A: BD DD 0A LDA $0ADD,X (Vehicle properties) C01F9D: 29 1C AND #$1C (Get current form) C01F9F: C9 08 CMP #$08 (Black chocobo?) C01FA1: D0 10 BNE $1FB3 (+16) (Exit if not) C01FA3: B9 97 02 LDA $0297,Y (Southeast quadrant) C01FA6: 29 0F AND #$0F (Remove priority) C01FA8: 99 97 02 STA $0297,Y C01FAB: B9 93 02 LDA $0293,Y (Southwest quadrant) C01FAE: 29 0F AND #$0F (Remove priority) C01FB0: 99 93 02 STA $0293,Y C01FB3: 60 RTS (Draws Boco when not in use. This is probably a multipurpose function also.) C01FB4: A5 23 LDA $23 (Get vehicle's RAM offset) C01FB6: 0A 0A ASL x2 (Multiply by 4) C01FB8: A8 TAY C01FB9: A9 04 LDA #$04 (4) C01FBB: 85 09 STA $09 (Set up 4-iteration loop) C01FBD: A5 13 LDA $13 (Vehicle's draw X-coord) C01FBF: 18 CLC C01FC0: 7F 95 2A C0 ADC $C02A95,X (Add quadrant X-offset) C01FC4: 38 SEC C01FC5: E9 08 SBC #$08 (8) (Subtract 8) C01FC7: 38 SEC C01FC8: ED A0 10 SBC $10A0 C01FCB: 99 98 02 STA $0298,Y (Write to DMA buffer) C01FCE: A5 15 LDA $15 (Vehicle's draw Y-coord) C01FD0: 18 CLC C01FD1: 7F 96 2A C0 ADC $C02A96,X (Add quadrant Y-offset) C01FD5: 38 SEC C01FD6: E9 07 SBC #$07 (7) (Subtract 7) C01FD8: 38 SEC C01FD9: ED A2 10 SBC $10A2 C01FDC: 99 99 02 STA $0299,Y (Write to DMA buffer) C01FDF: C2 20 REP #$20 (16-bit A) C01FE1: BF 97 2A C0 LDA $C02A97,X (Get quadrant tile) C01FE5: 18 CLC C01FE6: 65 11 ADC $11 (Add OAM data) C01FE8: 09 00 30 ORA #$3000 (Priority level 3) C01FEB: 99 9A 02 STA $029A,Y (Write to DMA buffer) C01FEE: A5 06 LDA $06 (A = 0) C01FF0: E2 20 SEP #$20 (8-bit A) C01FF2: E8 E8 E8 E8 INX x4 C01FF6: C8 C8 C8 C8 INY x4 C01FFA: C6 09 DEC $09 C01FFC: D0 BF BNE $1FBD (-65) (Loop four times) C01FFE: 60 RTS (TODO: What's the purpose of this function?) C01FFF: A5 13 LDA $13 C02001: 8D 84 02 STA $0284 C02004: 38 SEC C02005: E9 08 SBC #$08 C02007: 8D 80 02 STA $0280 C0200A: A5 15 LDA $15 C0200C: 38 SEC C0200D: E9 03 SBC #$03 C0200F: 8D 81 02 STA $0281 C02012: 8D 85 02 STA $0285 C02015: A2 38 00 LDX #$0038 (56) C02018: 8E 82 02 STX $0282 C0201B: 8E 86 02 STX $0286 C0201E: 60 RTS (Called from C0/1EFC. Input is a vehicle's X-coordinate - the player's X-coordinate + 7. Output is the screen X-coordinate where the vehicle is drawn.) C0201F: C2 20 REP #$20 (16-bit A) C02021: 0A 0A 0A 0A ASL x4 (Multiply by 16) C02025: 18 CLC C02026: 69 08 00 ADC #$0008 (8) (Add 8) C02029: 85 0D STA $0D (Call this value 'A') C0202B: A5 61 LDA $61 (Player X-step amount) C0202D: 29 1F 00 AND #$001F C02030: 4A LSR A (Divide by 2) C02031: 85 0F STA $0F (Call this value 'B') C02033: A5 0D LDA $0D C02035: 38 SEC C02036: E5 0F SBC $0F ('A' - 'B') C02038: 85 13 STA $13 (To recap: $13 <- 16*[veh X-coord - plr X-coord] - plr X-step/2 + 120) C0203A: A5 06 LDA $06 (A = 0) C0203C: E2 20 SEP #$20 (8-bit A) C0203E: 60 RTS (Called from C0/1F16. Input is a vehicle's Y-coordinate - the player's Y-coordinate + 7. Output is the screen Y-coordinate where the vehicle is drawn.) C0203F: C2 20 REP #$20 (16-bit A) C02041: 0A 0A 0A 0A ASL x4 (Multiply by 18) C02045: 18 CLC C02046: 69 08 00 ADC #$0008 (8) (Add 8) C02049: 85 0D STA $0D (Call this value 'A') C0204B: A5 63 LDA $63 (Player Y-step amount) C0204D: 29 1F 00 AND #$001F C02050: 4A LSR A (Divide by 2) C02051: 85 0F STA $0F (Call this value 'B') C02053: A5 0D LDA $0D C02055: 38 SEC C02056: E5 0F SBC $0F ('A' - 'B') C02058: 85 15 STA $15 (To recap: $15 <- 16*[veh Y-coord - plr Y-coord] - plr Y-step/2 + 120) C0205A: A5 06 LDA $06 (A = 0) C0205C: E2 20 SEP #$20 (8-bit A) C0205E: 60 RTS (Constants.) C0205F: 07 C02060: 11 C02061: 07 C02062: 0F (16-bit data for vehicles. These are the sprites used to draw them when not in use. First, the walking sprites, which are unused, making me wonder why they even have entries.) C02063: 00 00 C02065: 00 00 C02067: 00 00 C02069: 00 00 (Boco has only one unused form.) C0206B: 10 00 C0206D: 00 00 C0206F: 00 00 C02071: 00 00 (Black chocobo has one unused form.) C02073: 20 00 C02075: 00 00 C02077: 00 00 C02079: 00 00 (Hiryuu has one unused form.) C0207B: 6C 04 C0207D: 00 00 C0207F: 00 00 C02081: 00 00 (Submarine has four unused forms.) C02083: CC 06 C02085: B4 06 C02087: CC 06 C02089: B4 06 (Boats have two unused forms.) C0208B: 54 06 (Pirate ship) C0208D: 84 06 (Steamship) C0208F: 00 00 C02091: 00 00 (Airship has four unused forms.) C02093: 9C 06 (On land) C02095: 54 06 (On water) C02097: CC 06 (As submarine...#1?) C02099: B4 06 (As submarine...#2?) C0209B: 00 00 00 00 (Walking) C0209F: 00 00 00 00 (Boco) C020A3: 08 00 00 00 (Black chocobo) C020A7: 08 00 00 00 (Hiryuu) C020AB: 20 00 00 00 (Submarine) C020AF: 20 10 00 00 (Boat) C020B3: 02 20 00 00 (Airship) (Data tables for drawing sprite quadrants. The former two bytes are drawing X- and Y-offsets for each quadrant, and the latter two are the tile, palette, priority and flip information. It seems these tables are separated by purpose, not by sprite. The quadrants are ordered NW, NE, SW and SE. Specifically, these sets of 16 are for vehicles, which are animated in two frames when in use. For example, this first set is for frame 1 of 2 while the vehicle is facing up.) C020B7: F8 F5 08 30 C020BB: 00 F5 09 30 C020BF: F8 FD 0A 30 C020C3: 00 FD 0B 30 (Facing up, frame 2 of 2.) C020C7: F8 F5 0C 30 C020CB: 00 F5 0D 30 C020CF: F8 FD 0E 30 C020D3: 00 FD 0F 30 (Facing right, frame 1 of 2.) C020D7: F8 F5 11 70 C020DB: 00 F5 10 70 C020DF: F8 FD 13 70 C020E3: 00 FD 12 70 (Facing right, frame 2 of 2.) C020E7: F8 F5 15 70 C020EB: 00 F5 14 70 C020EF: F8 FD 17 70 C020F3: 00 FD 16 70 (Facing down, frame 1 of 2.) C020F7: F8 F5 00 30 C020FB: 00 F5 01 30 C020FF: F8 FD 02 30 C02103: 00 FD 03 30 (Facing down, frame 2 of 2.) C02107: F8 F5 04 30 C0210B: 00 F5 05 30 C0210F: F8 FD 06 30 C02113: 00 FD 07 30 (Facing left, frame 1 of 2. Also used for drawing vehicles that are not in use.) C02117: F8 F5 10 30 C0211B: 00 F5 11 30 C0211F: F8 FD 12 30 C02123: 00 FD 13 30 (Facing left, frame 2 of 2.) C02127: F8 F5 14 30 C0212B: 00 F5 15 30 C0212F: F8 FD 16 30 C02133: 00 FD 17 30 (This function handles drawing the player on overworld maps.) C02137: A5 BD LDA $BD C02139: D0 01 BNE $213C (+1) C0213B: 60 RTS C0213C: A5 BE LDA $BE C0213E: 10 03 BPL $2143 (+3) C02140: 29 7F AND #$7F C02142: 4A LSR A C02143: AA TAX C02144: BF DB 22 C0 LDA $C022DB,X C02148: 85 0D STA $0D C0214A: AD DC 0A LDA $0ADC (Player vehicle) C0214D: 3A DEC A C0214E: 0A 0A ASL x2 C02150: A8 TAY C02151: A5 61 LDA $61 (Player X-step amount) C02153: 18 CLC C02154: 65 63 ADC $63 (Add player Y-step amount) C02156: 4A 4A 4A 4A LSR x4 (Divide by 16) C0215A: 29 01 AND #$01 (MOD 2) C0215C: 85 08 STA $08 (Init sprite data index) C0215E: AD DB 0A LDA $0ADB (Direction player faces) C02161: 0A ASL A (Multiply by 2) C02162: 18 CLC C02163: 65 08 ADC $08 (Add to sprite data index) C02165: 85 08 STA $08 (TSB $08!) C02167: AD DA 0A LDA $0ADA (Player sprite ID) C0216A: C9 07 CMP #$07 C0216C: F0 04 BEQ $2172 (+4) (If it's Boco...) C0216E: C9 08 CMP #$08 C02170: D0 07 BNE $2179 (+7) C02172: A5 08 LDA $08 (...sprite data index...) C02174: 18 CLC C02175: 69 40 ADC #$40 (...increased by 64) C02177: 85 08 STA $08 (LDA #$40, TSB $08...) C02179: A5 08 LDA $08 C0217B: C2 20 REP #$20 (16-bit A) C0217D: 0A 0A 0A 0A ASL x4 (Multiply by 16) C02181: AA TAX (Move to index register X) C02182: A5 06 LDA $06 (A = 0) C02184: E2 20 SEP #$20 (8-bit A) C02186: AD DC 0A LDA $0ADC (Player vehicle) C02189: C9 02 CMP #$02 (2) (Walking or Boco?) C0218B: 90 03 BCC $2190 (+3) (Branch if so) C0218D: 4C 46 22 JMP $2246 C02190: 64 11 STZ $11 (Quadrant tile offset = 0) C02192: C9 00 CMP #$00 (Walking?) C02194: F0 14 BEQ $21AA (+20) (Branch if so) C02196: A9 10 LDA #$10 (16) C02198: 85 11 STA $11 (Tile offset = 16) C0219A: C2 20 REP #$20 (16-bit A) C0219C: 8A TXA (Sprite data index) C0219D: 18 CLC C0219E: 69 00 04 ADC #$0400 (Add 1,024) C021A1: AA TAX C021A2: A5 06 LDA $06 (A = 0) C021A4: E2 20 SEP #$20 (8-bit A) C021A6: A9 70 LDA #$70 (Don't need this...) C021A8: 80 0B BRA $21B5 (+11) C021AA: A5 61 LDA $61 (Player X-step amount) C021AC: 4A 4A 4A 4A LSR x4 (Divide by 16) C021B0: 1A INC A C021B1: 29 01 AND #$01 (0 if player is at least halfway through a step, 1 otherwise) C021B3: 09 70 ORA #$70 (Add 112) C021B5: 85 15 STA $15 (Save to sprite Y-coordinate - this will give the effect of "bouncing" while walking left or right, unless we're riding Boco) C021B7: A5 0D LDA $0D C021B9: D0 06 BNE $21C1 (+6) C021BB: A5 CA LDA $CA C021BD: 29 60 AND #$60 C021BF: D0 08 BNE $21C9 (+8) C021C1: A9 30 LDA #$30 (Priority level 3) C021C3: 85 08 STA $08 (Apply to all 4 quadrants) C021C5: 85 09 STA $09 C021C7: 80 18 BRA $21E1 (+24) C021C9: A5 CA LDA $CA C021CB: 29 20 AND #$20 C021CD: F0 0A BEQ $21D9 (+10) C021CF: A9 30 LDA #$30 (Top 2 quadrants drawn at priority level 3) C021D1: 85 08 STA $08 C021D3: A9 00 LDA #$00 (Bottom 2, level 0) C021D5: 85 09 STA $09 (STZ...) C021D7: 80 08 BRA $21E1 (+8) C021D9: A9 30 LDA #$30 (Priority level 3) C021DB: 85 08 STA $08 (Apply to all 4 quadrants) C021DD: A9 38 LDA #$38 C021DF: 85 09 STA $09 (Bottom 2 quadrants are also drawn in palette 4-7) C021E1: A0 88 00 LDY #$0088 (136)(Initial DMA buffer index) C021E4: DA PHX C021E5: 5A PHY C021E6: A9 04 LDA #$04 C021E8: 85 0A STA $0A (Set up 4-iteration loop) C021EA: BF 95 2A C0 LDA $C02A95,X (Quadrant X-offset) C021EE: 18 CLC C021EF: 69 70 ADC #$70 (Add 112) C021F1: 38 SEC C021F2: ED A0 10 SBC $10A0 C021F5: 99 00 02 STA $0200,Y (Write to DMA buffer) C021F8: BF 96 2A C0 LDA $C02A96,X (Quadrant Y-offset) C021FC: 18 CLC C021FD: 65 15 ADC $15 (Add sprite Y-coordinate) C021FF: 38 SEC C02200: ED A2 10 SBC $10A2 C02203: 38 SEC C02204: E5 0D SBC $0D C02206: 99 01 02 STA $0201,Y (Write to DMA buffer) C02209: BF 97 2A C0 LDA $C02A97,X (Quadrant tile ID) C0220D: 18 CLC C0220E: 65 11 ADC $11 (Add 16 if riding Boco) C02210: 99 02 02 STA $0202,Y (Write to DMA buffer) C02213: E8 E8 E8 E8 INX x4 C02217: C8 C8 C8 C8 INY x4 C0221B: C6 0A DEC $0A (Loop for four quadrants) C0221D: D0 CB BNE $21EA (-53) C0221F: 7A PLY C02220: FA PLX C02221: BF 98 2A C0 LDA $C02A98,X (Top-left quadrant props) C02225: 05 08 ORA $08 (Add top-half properties) C02227: 99 03 02 STA $0203,Y (Write to DMA buffer) C0222A: BF 9C 2A C0 LDA $C02A9C,X (Repeat for top-right...) C0222E: 05 08 ORA $08 C02230: 99 07 02 STA $0207,Y C02233: BF A0 2A C0 LDA $C02AA0,X (...bottom-left...) C02237: 05 09 ORA $09 C02239: 99 0B 02 STA $020B,Y C0223C: BF A4 2A C0 LDA $C02AA4,X (...and bottom-right) C02240: 05 09 ORA $09 C02242: 99 0F 02 STA $020F,Y C02245: 60 RTS (Draw player in a vehicle, not Boco, on the overworld map.) C02246: B9 DE 0A LDA $0ADE,Y (Vehicle's height) C02249: 29 7F AND #$7F C0224B: 85 15 STA $15 C0224D: A9 78 LDA #$78 (120) C0224F: 38 SEC C02250: E5 15 SBC $15 (120 - height) C02252: 85 15 STA $15 (Save as sprite Y-coord) C02254: AD DC 0A LDA $0ADC (Player vehicle ID) C02257: 0A 0A ASL x2 (Multiply by 4) C02259: 85 09 STA $09 C0225B: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C0225E: 29 03 AND #$03 (Get unused form) C02260: 18 CLC (Add ID x 4) C02261: 65 09 ADC $09 (ORA $09!) C02263: 0A ASL A (Multiply by 2) C02264: AA TAX C02265: C2 20 REP #$20 (16-bit A) C02267: BF 63 20 C0 LDA $C02063,X (Get sprite data) C0226B: 85 11 STA $11 C0226D: A5 06 LDA $06 (A = 0) C0226F: E2 20 SEP #$20 (8-bit A) C02271: AD DC 0A LDA $0ADC (Player vehicle) C02274: 0A 0A ASL x2 (Current form) C02276: 85 09 STA $09 C02278: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C0227B: 29 03 AND #$03 (Unused form) C0227D: 05 09 ORA $09 C0227F: AA TAX C02280: A5 3E LDA $3E (Get frame counter) C02282: 3F 9B 20 C0 AND $C0209B,X (Check frame control - this is for animated vehicle sprites like Hiryuu) C02286: F0 02 BEQ $228A (+2) C02288: A9 10 LDA #$10 C0228A: 85 08 STA $08 (Either 0 or 16 goes here) C0228C: AD DB 0A LDA $0ADB (Direction player faces) C0228F: 0A (x5) ASL x5 (Multiply by 32) C02294: 18 CLC C02295: 65 08 ADC $08 (Maybe add 16) C02297: AA TAX (Move to index register X) C02298: A0 88 00 LDY #$0088 (136)(Initial DMA buffer index) C0229B: A9 04 LDA #$04 (Set up 4-iteration loop) C0229D: 85 0A STA $0A C0229F: BF B7 20 C0 LDA $C020B7,X (Quadrant X-offset) C022A3: 18 CLC C022A4: 69 78 ADC #$78 (Add 120) C022A6: 38 SEC C022A7: ED A0 10 SBC $10A0 C022AA: 99 00 02 STA $0200,Y (Write to DMA buffer) C022AD: BF B8 20 C0 LDA $C020B8,X (Quadrant Y-offset) C022B1: 18 CLC C022B2: 65 15 ADC $15 (Add sprite Y-coordinate) C022B4: 38 SEC C022B5: ED A2 10 SBC $10A2 C022B8: 38 SEC C022B9: E5 0D SBC $0D C022BB: 99 01 02 STA $0201,Y (Write to DMA buffer) C022BE: C2 20 REP #$20 (16-bit A) C022C0: BF B9 20 C0 LDA $C020B9,X (Get quadrant tile) C022C4: 18 CLC C022C5: 65 11 ADC $11 (Add OAM data) C022C7: 99 02 02 STA $0202,Y (Write to DMA buffer) C022CA: A5 06 LDA $06 (A = 0) C022CC: E2 20 SEP #$20 (8-bit A) C022CE: E8 E8 E8 E8 INX x4 C022D2: C8 C8 C8 C8 INY x4 C022D6: C6 0A DEC $0A (Loop for all 4 quadrants) C022D8: D0 C5 BNE $229F (-59) C022DA: 60 RTS C022DB: 00 C022DC: 01 C022DD: 03 C022DE: 04 C022DF: 05 C022E0: 06 C022E1: 07 C022E2: 08 C022E3: 09 C022E4: 0A C022E5: 0A C022E6: 0B C022E7: 0B C022E8: 0C C022E9: 0C C022EA: 0C C022EB: 0C C022EC: 0C C022ED: 0C C022EE: 0B C022EF: 0B C022F0: 0A C022F1: 0A C022F2: 09 C022F3: 08 C022F4: 07 C022F5: 06 C022F6: 05 C022F7: 04 C022F8: 03 C022F9: 01 C022FA: 00 (This is an animation handler.) C022FB: 64 3E STZ $3E C022FD: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C02300: 20 95 4C JSR $4C95 C02303: 20 F7 47 JSR $47F7 C02306: A5 3E LDA $3E (Get frame counter) C02308: 29 18 AND #$18 (Different every 8 frames) C0230A: 4A 4A LSR x2 (Divide by 4) C0230C: 18 CLC C0230D: 6D 9B 16 ADC $169B (Add animation ID) C02310: AA TAX (Move to index register X) C02311: C2 20 REP #$20 (16-bit A) C02313: A9 70 6D LDA #$6D70 (Top-left tile coords) C02316: 8D 88 02 STA $0288 (Write to DMA buffer) C02319: A9 78 6D LDA #$6D78 (Top-right tile coords) C0231C: 8D 8C 02 STA $028C (Write to DMA buffer) C0231F: A9 70 75 LDA #$7570 (Bottom-left tile coords) C02322: 8D 90 02 STA $0290 (Write to DMA buffer) C02325: A9 78 75 LDA #$7578 (Bottom-right tile coords) C02328: 8D 94 02 STA $0294 (Write to DMA buffer) C0232B: BF 4C 23 C0 LDA $C0234C,X (Get top-left anim tile) C0232F: 8D 8A 02 STA $028A (Write to DMA buffer) C02332: 1A INC A (Top-right tile) C02333: 8D 8E 02 STA $028E (Write to DMA buffer) C02336: 1A INC A (Bottom-left tile) C02337: 8D 92 02 STA $0292 (Write to DMA buffer) C0233A: 1A INC A (Bottom-right tile) C0233B: 8D 96 02 STA $0296 (Write to DMA buffer) C0233E: A5 06 LDA $06 (A = 0) C02340: E2 20 SEP #$20 (8-bit A) C02342: 20 C5 1E JSR $1EC5 (Draw vehicles) C02345: A5 3E LDA $3E C02347: C9 1F CMP #$1F (Loop 31 times) C02349: D0 B2 BNE $22FD (-78) C0234B: 60 RTS (These six lists represent animation sequences. Each sequence has four keyframes; the entries indicate sprite tiles. This one is for an airship changing to a boat.) C0234C: E4 36 C0234E: E8 36 C02350: EC 36 C02352: F0 36 (This, obviously, is for a boat changing back into an airship.) C02354: F0 36 C02356: EC 36 C02358: E8 36 C0235A: E4 36 (This is for the airship, as a boat, changing into a submarine.) C0235C: F4 36 C0235E: F8 36 C02360: FC 36 C02362: 00 37 (This is for a submarine changing into an airship on water.) C02364: 00 37 C02366: FC 36 C02368: F8 36 C0236A: F4 36 (This is for a submarine submerging.) C0236C: 04 37 C0236E: 08 37 C02370: 0C 37 C02372: 10 37 (This is for a submarine emerging at sea level.) C02374: 10 37 C02376: 0C 37 C02378: 08 37 C0237A: 04 37 (This function handles player sprites on non-overworld maps.) C0237C: A5 BD LDA $BD C0237E: D0 01 BNE $2381 (+1) C02380: 60 RTS (Don't need two RTS...) C02381: A5 CB LDA $CB C02383: F0 01 BEQ $2386 (+1) C02385: 60 RTS C02386: A5 BE LDA $BE C02388: 10 03 BPL $238D (+3) C0238A: 29 7F AND #$7F C0238C: 4A LSR A C0238D: AA TAX C0238E: BF DB 22 C0 LDA $C022DB,X C02392: 85 0D STA $0D C02394: AD FB 10 LDA $10FB (Auto-moving tile?) C02397: 10 0A BPL $23A3 (+10) (Branch if not) C02399: A2 40 02 LDX #$0240 C0239C: A5 C6 LDA $C6 C0239E: 85 15 STA $15 C023A0: 4C 1D 24 JMP $241D (BRA!) C023A3: A5 BC LDA $BC C023A5: F0 37 BEQ $23DE (+55) C023A7: A5 57 LDA $57 C023A9: F0 04 BEQ $23AF (+4) C023AB: A5 BA LDA $BA C023AD: F0 2F BEQ $23DE (+47) C023AF: AD DA 0A LDA $0ADA (Player sprite ID) C023B2: C9 0A CMP #$0A (10) C023B4: D0 10 BNE $23C6 (+16) C023B6: A5 C6 LDA $C6 C023B8: 85 15 STA $15 C023BA: A5 3F LDA $3F (Get frame counter) C023BC: 29 02 AND #$02 C023BE: 4A LSR A C023BF: 18 CLC (Not needed...) C023C0: 69 0A ADC #$0A (10) C023C2: 85 08 STA $08 C023C4: 80 4A BRA $2410 (+74) C023C6: A5 61 LDA $61 (Player X-step amount) C023C8: 18 CLC C023C9: 65 63 ADC $63 (Player Y-step amount) C023CB: 4A 4A 4A 4A LSR x4 (Divide by 16) C023CF: 29 01 AND #$01 (MOD 2) C023D1: 85 08 STA $08 (Init sprite data index) C023D3: AD DB 0A LDA $0ADB (Direction player faces) C023D6: 0A ASL A (Multiply by 2) C023D7: 18 CLC C023D8: 65 08 ADC $08 (Add to sprite data index) C023DA: 85 BB STA $BB C023DC: 80 02 BRA $23E0 (+2) (Not needed) C023DE: A5 BB LDA $BB C023E0: 85 08 STA $08 C023E2: AD DA 0A LDA $0ADA (Player sprite ID) C023E5: C9 0D CMP #$0D (13) C023E7: B0 19 BCS $2402 (+25) C023E9: C9 07 CMP #$07 (7) (ID 7 = Boco) C023EB: 90 15 BCC $2402 (+21) (Branch if less) C023ED: A5 08 LDA $08 C023EF: 18 CLC C023F0: 69 40 ADC #$40 (64) C023F2: 85 08 STA $08 (Increase data index) C023F4: AD DA 0A LDA $0ADA C023F7: C9 09 CMP #$09 (9) C023F9: 90 07 BCC $2402 (+7) C023FB: A5 08 LDA $08 C023FD: 18 CLC C023FE: 69 08 ADC #$08 (8) C02400: 85 08 STA $08 (Increase data index) C02402: A5 61 LDA $61 (Player X-step amount) C02404: 4A 4A 4A 4A LSR x4 (Divide by 16) C02408: 1A INC A C02409: 29 01 AND #$01 (0 if halfway through a step, 1 otherwise - applies bouncing effect) C0240B: 18 CLC C0240C: 65 C6 ADC $C6 C0240E: 85 15 STA $15 C02410: A5 08 LDA $08 (Sprite data index) C02412: C2 20 REP #$20 (16-bit A) C02414: 0A 0A 0A 0A ASL x4 (Multiply by 16) C02418: AA TAX (Move to index register X) C02419: A5 06 LDA $06 (A = 0) C0241B: E2 20 SEP #$20 (8-bit A) C0241D: AD DA 0A LDA $0ADA (Player sprite ID) C02420: C9 0B CMP #$0B (11) C02422: 90 08 BCC $242C (+8) C02424: A9 30 LDA #$30 (Priority level 3) C02426: 85 08 STA $08 (Apply to all 4 quadrants) C02428: 85 09 STA $09 C0242A: 80 68 BRA $2494 (+104) C0242C: A5 0D LDA $0D C0242E: D0 3E BNE $246E (+62) C02430: A5 C6 LDA $C6 C02432: C9 70 CMP #$70 (112) C02434: D0 38 BNE $246E (+56) C02436: A5 CA LDA $CA C02438: 29 08 AND #$08 C0243A: D0 0E BNE $244A (+14) C0243C: A5 CA LDA $CA C0243E: 29 04 AND #$04 C02440: F0 34 BEQ $2476 (+52) C02442: A5 C3 LDA $C3 C02444: 29 02 AND #$02 C02446: F0 26 BEQ $246E (+38) C02448: 80 06 BRA $2450 (+6) C0244A: A5 CA LDA $CA C0244C: 29 04 AND #$04 C0244E: D0 10 BNE $2460 (+16) C02450: A9 28 LDA #$28 C02452: 85 09 STA $09 C02454: AD 0F 11 LDA $110F C02457: 29 10 AND #$10 C02459: 4A LSR A C0245A: 09 20 ORA #$20 C0245C: 85 08 STA $08 C0245E: 80 34 BRA $2494 (+52) C02460: AD 0F 11 LDA $110F C02463: 29 10 AND #$10 C02465: 4A LSR A C02466: 09 20 ORA #$20 C02468: 85 08 STA $08 C0246A: 85 09 STA $09 C0246C: 80 26 BRA $2494 (+38) C0246E: A9 30 LDA #$30 (Priority level 3) C02470: 85 08 STA $08 (Apply to all 4 quadrants) C02472: 85 09 STA $09 C02474: 80 1E BRA $2494 (+30) C02476: AD 0F 11 LDA $110F C02479: 29 10 AND #$10 C0247B: 4A LSR A C0247C: 09 30 ORA #$30 C0247E: 85 08 STA $08 C02480: A9 28 LDA #$28 C02482: 85 09 STA $09 C02484: 80 0E BRA $2494 (+14) C02486: AD 0F 11 LDA $110F C02489: 29 10 AND #$10 C0248B: 4A LSR A C0248C: 09 30 ORA #$30 C0248E: 85 08 STA $08 C02490: A9 20 LDA #$20 (Bottom half...) C02492: 85 09 STA $09 (...priority level 2) C02494: DA PHX (Push sprite data index) C02495: AD DA 0A LDA $0ADA (Player sprite ID) C02498: AA TAX (Move to index register X) C02499: A5 08 LDA $08 (Top half properties) C0249B: 1F 6C 25 C0 ORA $C0256C,X (ORA #$00!?!?) C0249F: 85 08 STA $08 (TSB!) C024A1: A5 09 LDA $09 (Bottom half properties) C024A3: 1F 6C 25 C0 ORA $C0256C,X (ORA #$00!?!?) C024A7: 85 09 STA $09 (TSB!!) C024A9: FA PLX (Pull sprite data index) C024AA: A4 C7 LDY $C7 (Top-half DMA index) C024AC: BF 95 2A C0 LDA $C02A95,X (NW quadrant X-offset) C024B0: 18 CLC C024B1: 65 C5 ADC $C5 C024B3: 38 SEC C024B4: ED A0 10 SBC $10A0 C024B7: 99 00 02 STA $0200,Y (Write to DMA buffer) C024BA: BF 96 2A C0 LDA $C02A96,X (NW quadrant Y-offset) C024BE: 18 CLC C024BF: 65 15 ADC $15 C024C1: 38 SEC C024C2: ED A2 10 SBC $10A2 C024C5: 38 SEC C024C6: E5 0D SBC $0D C024C8: 99 01 02 STA $0201,Y (Write to DMA buffer) C024CB: BF 97 2A C0 LDA $C02A97,X (NW quadrant tile) C024CF: 99 02 02 STA $0202,Y (Write to DMA buffer) C024D2: BF 98 2A C0 LDA $C02A98,X (NW quadrant properties) C024D6: 05 08 ORA $08 (Add top-half properties) C024D8: 99 03 02 STA $0203,Y (Write to DMA buffer) C024DB: BF 99 2A C0 LDA $C02A99,X (NE quadrant X-offset) C024DF: 18 CLC C024E0: 65 C5 ADC $C5 C024E2: 38 SEC C024E3: ED A0 10 SBC $10A0 C024E6: 99 04 02 STA $0204,Y (Write to DMA buffer) C024E9: BF 9A 2A C0 LDA $C02A9A,X (NE quadrant Y-offset) C024ED: 18 CLC C024EE: 65 15 ADC $15 C024F0: 38 SEC C024F1: ED A2 10 SBC $10A2 C024F4: 38 SEC C024F5: E5 0D SBC $0D C024F7: 99 05 02 STA $0205,Y (Write to DMA buffer) C024FA: BF 9B 2A C0 LDA $C02A9B,X (NE quadrant tile) C024FE: 99 06 02 STA $0206,Y (Write to DMA buffer) C02501: BF 9C 2A C0 LDA $C02A9C,X (NE quadrant properties) C02505: 05 08 ORA $08 (Add top-half properties) C02507: 99 07 02 STA $0207,Y (Write to DMA buffer) C0250A: A0 E8 01 LDY #$01E8 (488)(Bottom-half DMA index) C0250D: BF 9D 2A C0 LDA $C02A9D,X (SW quadrant X-offset) C02511: 18 CLC C02512: 65 C5 ADC $C5 C02514: 38 SEC C02515: ED A0 10 SBC $10A0 C02518: 99 08 02 STA $0208,Y (Write to DMA buffer) C0251B: BF 9E 2A C0 LDA $C02A9E,X (SE quadrant Y-offset) C0251F: 18 CLC C02520: 65 15 ADC $15 C02522: 38 SEC C02523: ED A2 10 SBC $10A2 C02526: 38 SEC C02527: E5 0D SBC $0D C02529: 99 09 02 STA $0209,Y (Write to DMA buffer) C0252C: BF 9F 2A C0 LDA $C02A9F,X (SW quadrant tile) C02530: 99 0A 02 STA $020A,Y (Write to DMA buffer) C02533: BF A0 2A C0 LDA $C02AA0,X (SW quadrant properties) C02537: 05 09 ORA $09 (Add bottom-half props) C02539: 99 0B 02 STA $020B,Y (Write to DMA buffer) C0253C: BF A1 2A C0 LDA $C02AA1,X (SE quadrant X-offset) C02540: 18 CLC C02541: 65 C5 ADC $C5 C02543: 38 SEC C02544: ED A0 10 SBC $10A0 C02547: 99 0C 02 STA $020C,Y (Write to DMA buffer) C0254A: BF A2 2A C0 LDA $C02AA2,X (SE quadrant Y-offset) C0254E: 18 CLC C0254F: 65 15 ADC $15 C02551: 38 SEC C02552: ED A2 10 SBC $10A2 C02555: 38 SEC C02556: E5 0D SBC $0D C02558: 99 0D 02 STA $020D,Y (Write to DMA buffer) C0255B: BF A3 2A C0 LDA $C02AA3,X (SE quadrant tile) C0255F: 99 0E 02 STA $020E,Y (Write to DMA buffer) C02562: BF A4 2A C0 LDA $C02AA4,X (SE quadrant properties) C02566: 05 09 ORA $09 (Add bottom-half props) C02568: 99 0F 02 STA $020F,Y (Write to DMA buffer) C0256B: 60 RTS (A bunch of zeroes for some reason.) C0256C: 00 C0256D: 00 C0256E: 00 C0256F: 00 C02570: 00 C02571: 00 C02572: 00 C02573: 00 C02574: 00 C02575: 00 C02576: 00 C02577: 00 C02578: 00 C02579: 00 C0257A: 00 C0257B: 00 C0257C: A9 80 LDA #$80 C0257E: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C02581: AD 14 11 LDA $1114 C02584: C2 20 REP #$20 (16-bit A) C02586: 0A 0A 0A 0A ASL x4 C0258A: 85 23 STA $23 C0258C: A5 06 LDA $06 (A = 0) C0258E: E2 20 SEP #$20 (8-bit A) C02590: A6 06 LDX $06 (X = 0, TAX...) C02592: 86 11 STX $11 (Set up 16-iteration loop) C02594: C2 20 REP #$20 (16-bit A) C02596: A9 00 7C LDA #$7C00 C02599: 85 2E STA $2E (Write to VRAM page $7C00) C0259B: A5 11 LDA $11 C0259D: C9 08 00 CMP #$0008 (8) C025A0: 90 05 BCC $25A7 (+5) (On last 8 iterations...) C025A2: A9 00 7D LDA #$7D00 (...page $7D00 instead) C025A5: 85 2E STA $2E (INC $2F!) C025A7: A5 11 LDA $11 (Get loop counter) C025A9: 0A (x5) ASL x5 (Multiply by 32) C025AE: 18 CLC C025AF: 65 2E ADC $2E (Add as offset to VRAM page - note that on the 8th iteration, this would normally point to page $7D00, but the above logic redirects it to page $7E00) C025B1: 8D 16 21 STA $2116 (VRAM destination address) C025B4: 18 CLC C025B5: 69 00 01 ADC #$0100 C025B8: 85 2E STA $2E (Save next page for later) C025BA: A5 06 LDA $06 (A = 0) C025BC: E2 20 SEP #$20 (8-bit A) C025BE: A6 23 LDX $23 C025C0: BF 67 26 C0 LDA $C02667,X C025C4: C2 20 REP #$20 (16-bit A) C025C6: 0A 0A 0A ASL x3 C025C9: AA TAX C025CA: A5 06 LDA $06 (A = 0) C025CC: E2 20 SEP #$20 (8-bit A) C025CE: DA PHX C025CF: A0 08 00 LDY #$0008 (8) C025D2: BF 00 DF C0 LDA $C0DF00,X C025D6: 9C 18 21 STZ $2118 C025D9: 8D 19 21 STA $2119 (Write to VRAM) C025DC: E8 INX C025DD: 88 DEY C025DE: D0 F2 BNE $25D2 (-14) C025E0: 20 36 26 JSR $2636 (Write eight zeroes) C025E3: A0 08 00 LDY #$0008 (8) C025E6: BF 00 DF C0 LDA $C0DF00,X C025EA: 9C 18 21 STZ $2118 C025ED: 8D 19 21 STA $2119 C025F0: E8 INX C025F1: 88 DEY C025F2: D0 F2 BNE $25E6 (-14) C025F4: 20 36 26 JSR $2636 (Write eight zeroes) C025F7: A4 2E LDY $2E (Same address, next page) C025F9: 8C 16 21 STY $2116 (VRAM destination address) C025FC: FA PLX C025FD: A0 08 00 LDY #$0008 (8) C02600: BF 80 DF C0 LDA $C0DF80,X C02604: 9C 18 21 STZ $2118 C02607: 8D 19 21 STA $2119 C0260A: E8 INX C0260B: 88 DEY C0260C: D0 F2 BNE $2600 (-14) C0260E: 20 36 26 JSR $2636 (Write eight zeroes) C02611: A0 08 00 LDY #$0008 (8) C02614: BF 80 DF C0 LDA $C0DF80,X C02618: 9C 18 21 STZ $2118 C0261B: 8D 19 21 STA $2119 C0261E: E8 INX C0261F: 88 DEY C02620: D0 F2 BNE $2614 (-14) C02622: 20 36 26 JSR $2636 (Write eight zeroes) C02625: A6 23 LDX $23 C02627: E8 INX C02628: 86 23 STX $23 C0262A: E6 11 INC $11 (Increment loop counter) C0262C: A5 11 LDA $11 C0262E: C9 10 CMP #$10 (16) C02630: F0 03 BEQ $2635 (+3) C02632: 4C 94 25 JMP $2594 (Loop 16 times) C02635: 60 RTS (Write eight zeroes to VRAM. This could be shrunk quite a bit.) C02636: 9C 18 21 STZ $2118 C02639: 9C 19 21 STZ $2119 C0263C: 9C 18 21 STZ $2118 C0263F: 9C 19 21 STZ $2119 C02642: 9C 18 21 STZ $2118 C02645: 9C 19 21 STZ $2119 C02648: 9C 18 21 STZ $2118 C0264B: 9C 19 21 STZ $2119 C0264E: 9C 18 21 STZ $2118 C02651: 9C 19 21 STZ $2119 C02654: 9C 18 21 STZ $2118 C02657: 9C 19 21 STZ $2119 C0265A: 9C 18 21 STZ $2118 C0265D: 9C 19 21 STZ $2119 C02660: 9C 18 21 STZ $2118 C02663: 9C 19 21 STZ $2119 C02666: 60 RTS (This looks like one huge data table! Some, perhaps all, of it is used at C0/25C0 for indexing purposes, but I don't yet know how much. It is used in blocks of 16 bytes.) C02667: 00 02 8C 8E 00 00 00 00 00 00 00 00 00 00 00 00 C02677: 00 02 A0 00 00 00 00 00 00 00 00 00 00 00 00 00 C02687: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C02697: 00 02 A4 84 00 00 00 00 00 00 00 00 00 00 00 00 C026A7: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C026B7: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C026C7: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C026D7: 00 02 66 68 6A A2 A0 00 00 00 00 00 00 00 00 00 C026E7: 00 02 66 68 6A A2 00 00 00 00 00 00 00 00 00 00 C026F7: 00 02 2C 2E 40 42 44 62 64 46 48 00 00 00 00 00 C02707: 00 02 4A 4C 60 00 00 00 00 00 00 00 00 00 00 00 C02717: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C02727: 00 02 04 06 08 0A 0C 0E 20 22 24 26 28 2A 00 00 C02737: 00 02 04 06 08 0A 0C 0E 20 22 24 26 28 2A A6 A8 C02747: 00 02 04 06 08 0A 0C 0E 20 22 24 26 28 2A A6 A8 C02757: 00 02 88 8A 00 00 00 00 00 00 00 00 00 00 00 00 C02767: 00 02 88 8A 00 00 00 00 00 00 00 00 00 00 00 00 C02777: 00 02 82 00 00 00 00 00 00 00 00 00 00 00 00 00 C02787: 00 02 80 00 00 00 00 00 00 00 00 00 00 00 00 00 C02797: 00 02 86 00 00 00 00 00 00 00 00 00 00 00 00 00 C027A7: 00 02 6C 6E 4E 00 00 00 00 00 00 00 00 00 00 00 C027B7: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C027C7: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C027D7: 00 02 8C 8E 00 00 00 00 00 00 00 00 00 00 00 00 C027E7: 00 02 2C 2E 40 42 44 62 64 46 00 00 00 00 00 00 C027F7: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C02807: 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (TODO: Find out what this is. Something menu-related?) C02817: AD 14 11 LDA $1114 C0281A: 0A ASL A C0281B: AA TAX C0281C: C2 20 REP #$20 (16-bit A) C0281E: BF 80 D9 C0 LDA $C0D980,X C02822: 18 CLC C02823: 69 80 D9 ADC #$D980 C02826: 8D F0 04 STA $04F0 C02829: A5 06 LDA $06 (A = 0) C0282B: E2 20 SEP #$20 (8-bit A) C0282D: A9 C0 LDA #$C0 C0282F: 8D F2 04 STA $04F2 C02832: A2 73 18 LDX #$1873 C02835: 8E F3 04 STX $04F3 C02838: A9 00 LDA #$00 C0283A: 8D F5 04 STA $04F5 C0283D: 22 02 00 C3 JSL $C30002 C02841: 60 RTS C02842: A5 BD LDA $BD C02844: D0 01 BNE $2847 (+1) C02846: 60 RTS C02847: A0 00 01 LDY #$0100 C0284A: A5 C0 LDA $C0 (Get speed) C0284C: 3A DEC A (Subtract 1) C0284D: 0A 0A ASL x2 (Multiply by 4) C0284F: 85 0D STA $0D C02851: A5 BA LDA $BA (Movement direction) C02853: F0 22 BEQ $2877 (+34) (If null, skip all this) C02855: 3A DEC A (Make it zero-based) C02856: 18 CLC C02857: 65 0D ADC $0D (Add to speed factor) C02859: 0A ASL A (Multiply by 2) C0285A: AA TAX C0285B: C2 20 REP #$20 (16-bit A) C0285D: AD 8C 10 LDA $108C C02860: 18 CLC C02861: 7F F3 28 C0 ADC $C028F3,X C02865: 8D 8C 10 STA $108C C02868: AD 8E 10 LDA $108E C0286B: 18 CLC C0286C: 7F 33 29 C0 ADC $C02933,X C02870: 8D 8E 10 STA $108E C02873: A5 06 LDA $06 (A = 0) C02875: E2 20 SEP #$20 (16-bit A) C02877: A6 06 LDX $06 C02879: BD C9 13 LDA $13C9,X C0287C: 29 80 AND #$80 C0287E: D0 2C BNE $28AC (+44) C02880: BD C6 13 LDA $13C6,X C02883: 38 SEC C02884: ED 8D 10 SBC $108D C02887: 38 SEC C02888: ED A0 10 SBC $10A0 C0288B: 99 00 02 STA $0200,Y C0288E: BD C7 13 LDA $13C7,X C02891: 38 SEC C02892: ED 8F 10 SBC $108F C02895: 38 SEC C02896: ED A2 10 SBC $10A2 C02899: 99 01 02 STA $0201,Y C0289C: BD C8 13 LDA $13C8,X C0289F: 99 02 02 STA $0202,Y C028A2: BD C9 13 LDA $13C9,X C028A5: 29 7F AND #$7F C028A7: 99 03 02 STA $0203,Y C028AA: 80 2A BRA $28D6 (+42) C028AC: BD C6 13 LDA $13C6,X C028AF: 38 SEC C028B0: ED 8D 10 SBC $108D C028B3: 38 SEC C028B4: ED A0 10 SBC $10A0 C028B7: 99 D8 02 STA $02D8,Y C028BA: BD C7 13 LDA $13C7,X C028BD: 38 SEC C028BE: ED 8F 10 SBC $108F C028C1: 38 SEC C028C2: ED A2 10 SBC $10A2 C028C5: 99 D9 02 STA $02D9,Y C028C8: BD C8 13 LDA $13C8,X C028CB: 99 DA 02 STA $02DA,Y C028CE: BD C9 13 LDA $13C9,X C028D1: 29 7F AND #$7F C028D3: 99 DB 02 STA $02DB,Y C028D6: C8 C8 C8 C8 INY x4 C028DA: E8 E8 E8 E8 INX x4 C028DE: E0 10 00 CPX #$0010 (16) C028E1: D0 96 BNE $2879 (-106)(Loop 4 times) C028E3: A9 AA LDA #$AA C028E5: 8D 10 04 STA $0410 C028E8: A9 A0 LDA #$A0 C028EA: 8D 1D 04 STA $041D C028ED: A9 0A LDA #$0A C028EF: 8D 1E 04 STA $041E C028F2: 60 RTS (This data table appears to be related to movement.) C028F3: 00 00 C028F5: 80 00 C028F7: 00 00 C028F9: 80 FF C028FB: 00 00 C028FD: 00 01 C028FF: 00 00 C02901: 00 FF C02903: 00 00 C02905: 80 01 C02907: 00 00 C02909: 80 FE C0290B: 00 00 C0290D: 00 02 C0290F: 00 00 C02911: 00 FE C02913: 00 00 C02915: 80 00 C02917: 00 00 C02919: 80 FF C0291B: 00 00 C0291D: 00 01 C0291F: 00 00 C02921: 00 FF C02923: 00 00 C02925: 80 01 C02927: 00 00 C02929: 80 FE C0292B: 00 00 C0292D: 00 04 C0292F: 00 00 C02931: 00 FC C02933: 80 FF C02935: 00 00 C02937: 80 00 C02939: 00 00 C0293B: 00 FF C0293D: 00 00 C0293F: 00 01 C02941: 00 00 C02943: 80 FE C02945: 00 00 C02947: 80 01 C02949: 00 00 C0294B: 00 FE C0294D: 00 00 C0294F: 00 02 C02951: 00 00 C02953: 80 FF C02955: 00 00 C02957: 80 00 C02959: 00 00 C0295B: 00 FF C0295D: 00 00 C0295F: 00 01 C02961: 00 00 C02963: 80 FE C02965: 00 00 C02967: 80 01 C02969: 00 00 C0296B: 00 FC C0296D: 00 00 C0296F: 00 04 C02971: 00 00 C02973: 9C 8C 10 STZ $108C C02976: 9C 8D 10 STZ $108D C02979: 9C 8E 10 STZ $108E C0297C: 9C 8F 10 STZ $108F C0297F: A5 BA LDA $BA (Movement direction) C02981: F0 04 BEQ $2987 (+4) (If null, index = 0) C02983: 3A DEC A (Otherwise, make 0-based) C02984: 0A 0A 0A ASL x3 (Then multiply by 8) C02987: AA TAX (Move to index register X) C02988: A4 06 LDY $06 (Y = 0) C0298A: 5A PHY (Push Y) C0298B: 64 0F STZ $0F C0298D: 64 10 STZ $10 C0298F: BF 75 2A C0 LDA $C02A75,X C02993: 99 C6 13 STA $13C6,Y C02996: BF 76 2A C0 LDA $C02A76,X C0299A: 99 C7 13 STA $13C7,Y C0299D: BF 55 2A C0 LDA $C02A55,X C029A1: A8 TAY C029A2: C9 12 CMP #$12 (18) C029A4: D0 18 BNE $29BE (+24) C029A6: AD FA 10 LDA $10FA C029A9: 29 04 AND #$04 C029AB: F0 34 BEQ $29E1 (+52) C029AD: A5 C3 LDA $C3 C029AF: C9 02 CMP #$02 (2) C029B1: D0 2E BNE $29E1 (+46) C029B3: AD 04 11 LDA $1104 C029B6: 29 03 AND #$03 C029B8: C9 01 CMP #$01 C029BA: D0 50 BNE $2A0C (+80) C029BC: 80 1A BRA $29D8 (+26) C029BE: C9 06 CMP #$06 (6) C029C0: B0 1F BCS $29E1 (+31) C029C2: B9 F8 10 LDA $10F8,Y C029C5: 29 04 AND #$04 C029C7: F0 18 BEQ $29E1 (+24) C029C9: A5 C3 LDA $C3 C029CB: C9 02 CMP #$02 C029CD: D0 3D BNE $2A0C (+61) C029CF: B9 F2 10 LDA $10F2,Y C029D2: 29 03 AND #$03 C029D4: C9 01 CMP #$01 C029D6: D0 39 BNE $2A11 (+57) C029D8: A9 80 LDA #$80 C029DA: 85 10 STA $10 C029DC: A9 02 LDA #$02 C029DE: 4C 1C 2A JMP $2A1C (BRA!) C029E1: AD FA 10 LDA $10FA C029E4: 29 07 AND #$07 C029E6: C9 05 CMP #$05 C029E8: F0 06 BEQ $29F0 (+6) C029EA: C9 01 CMP #$01 C029EC: D0 11 BNE $29FF (+17) C029EE: 80 06 BRA $29F6 (+6) C029F0: A5 C3 LDA $C3 C029F2: C9 02 CMP #$02 (2) C029F4: F0 09 BEQ $29FF (+9) C029F6: B9 F2 10 LDA $10F2,Y C029F9: 29 03 AND #$03 C029FB: C9 02 CMP #$02 C029FD: F0 0D BEQ $2A0C (+13) C029FF: B9 F2 10 LDA $10F2,Y C02A02: 29 04 AND #$04 C02A04: F0 0F BEQ $2A15 (+15) C02A06: A5 C3 LDA $C3 C02A08: C9 01 CMP #$01 (1) C02A0A: D0 05 BEQ $2A11 (+5) C02A0C: A9 00 LDA #$00 (0) C02A0E: 4C 1C 2A JMP $2A1C (BRA!) C02A11: A9 80 LDA #$80 C02A13: 85 10 STA $10 C02A15: B9 BE 10 LDA $10BE,Y C02A18: A8 TAY C02A19: B9 73 18 LDA $1873,Y C02A1C: 7A PLY C02A1D: C2 20 REP #$20 (16-bit A) C02A1F: 18 CLC (REP #$21!) C02A20: 69 C0 01 ADC #$01C0 (448) C02A23: 09 00 04 ORA #$0400 C02A26: 05 0F ORA $0F C02A28: 99 C8 13 STA $13C8,Y C02A2B: 29 10 00 AND #$0010 C02A2E: F0 09 BEQ $2A39 (+9) C02A30: B9 C8 13 LDA $13C8,Y C02A33: 09 00 40 ORA #$4000 C02A36: 99 C8 13 STA $13C8,Y C02A39: B9 C8 13 LDA $13C8,Y C02A3C: 29 EF FF AND #$FFEF C02A3F: 99 C8 13 STA $13C8,Y C02A42: A5 06 LDA $06 (A = 0) C02A44: E2 20 SEP #$20 (8-bit A) C02A46: E8 E8 INX x2 C02A48: C8 C8 C8 C8 INY x4 C02A4C: C0 10 00 CPY #$0010 (16) C02A4F: F0 03 BEQ $2A54 (+3) C02A51: 4C 8A 29 JMP $298A (Loop four times) C02A54: 60 RTS C02A55: 12 00 C02A57: 02 00 C02A59: 08 00 C02A5B: 08 00 C02A5D: 02 00 C02A5F: 04 00 C02A61: 08 00 C02A63: 0A 00 C02A65: 02 00 C02A67: 08 00 C02A69: 0E 00 C02A6B: 0E 00 C02A6D: 00 00 C02A6F: 02 00 C02A71: 06 00 C02A73: 08 00 C02A75: 70 4F C02A77: 70 5F C02A79: 70 6F C02A7B: 70 6F C02A7D: 70 5F C02A7F: 80 5F C02A81: 70 6F C02A83: 80 6F C02A85: 70 5F C02A87: 70 6F C02A89: 70 7F C02A8B: 70 7F C02A8D: 60 5F C02A8F: 70 5F C02A91: 60 6F C02A93: 70 6F (Huge data table. More sprite quadrants. This set is for a sprite standing and facing north.) C02A95: 00 FC 04 00 C02A99: 08 FC 05 00 C02A9D: 00 04 06 00 C02AA1: 08 04 07 00 (This set is for a sprite walking north.) C02AA5: 00 FC 04 00 C02AA9: 08 FC 05 00 C02AAD: 00 04 07 40 C02AB1: 08 04 06 40 (The next six are for a sprite facing east...) C02AB5: 00 FC 09 40 C02AB9: 08 FC 08 40 C02ABD: 00 04 0B 40 C02AC1: 08 04 0A 40 (...walking east...) C02AC5: 00 FC 0D 40 C02AC9: 08 FC 0C 40 C02ACD: 00 04 0F 40 C02AD1: 08 04 0E 40 (...facing south...) C02AD5: 00 FC 00 00 C02AD9: 08 FC 01 00 C02ADD: 00 04 02 00 C02AE1: 08 04 03 00 (...walking south...) C02AE5: 00 FC 00 00 C02AE9: 08 FC 01 00 C02AED: 00 04 03 40 C02AF1: 08 04 02 40 (...facing west - this set is also used for Boco's sprite on the world map when not in use...) C02AF5: 00 FC 08 00 C02AF9: 08 FC 09 00 C02AFD: 00 04 0A 00 C02B01: 08 04 0B 00 (...and walking west.) C02B05: 00 FC 0C 00 C02B09: 08 FC 0D 00 C02B0D: 00 04 0E 00 C02B11: 08 04 0F 00 C02B15: 00 FC 00 00 C02B19: 08 FC 01 00 C02B1D: 00 04 02 00 C02B21: 08 04 03 00 C02B25: 00 FC 04 00 C02B29: 08 FC 05 00 C02B2D: 00 04 06 00 C02B31: 08 04 07 00 C02B35: 00 FC 08 00 C02B39: 08 FC 09 00 C02B3D: 00 04 0A 00 C02B41: 08 04 0B 00 C02B45: 00 FC 0C 00 C02B49: 08 FC 0D 00 C02B4D: 00 04 0E 00 C02B51: 08 04 0F 00 C02B55: 00 FC 01 40 C02B59: 08 FC 00 40 C02B5D: 00 04 03 40 C02B61: 08 04 02 40 C02B65: 00 FC 05 40 C02B69: 08 FC 04 40 C02B6D: 00 04 07 40 C02B71: 08 04 06 40 C02B75: 00 FC 09 40 C02B79: 08 FC 08 40 C02B7D: 00 04 0B 40 C02B81: 08 04 0A 40 C02B85: 00 FC 0D 40 C02B89: 08 FC 0C 40 C02B8D: 00 04 0F 40 C02B91: 08 04 0E 40 C02B95: 00 FC 19 00 C02B99: 08 FC 01 00 C02B9D: 00 04 1A 00 C02BA1: 08 04 03 00 C02BA5: 00 FC 18 00 C02BA9: 08 FC 01 00 C02BAD: 00 04 1A 00 C02BB1: 08 04 03 00 C02BB5: 00 FC 1B 00 C02BB9: 08 FC 01 00 C02BBD: 00 04 1A 00 C02BC1: 08 04 03 00 C02BC5: 00 FC 01 40 C02BC9: 08 FC 19 40 C02BCD: 00 04 03 40 C02BD1: 08 04 1A 40 C02BD5: 00 FC 01 40 C02BD9: 08 FC 18 40 C02BDD: 00 04 03 40 C02BE1: 08 04 1A 40 C02BE5: 00 FC 01 40 C02BE9: 08 FC 1B 40 C02BED: 00 04 03 40 C02BF1: 08 04 1A 40 C02BF5: 00 FC 04 00 C02BF9: 08 FC 31 00 C02BFD: 00 04 3E 00 C02C01: 08 04 28 00 C02C05: 00 FC 04 00 C02C09: 08 FC 30 00 C02C0D: 00 04 3E 00 C02C11: 08 04 28 00 C02C15: 00 FC 31 40 C02C19: 08 FC 04 40 C02C1D: 00 04 28 40 C02C21: 08 04 3E 40 C02C25: 00 FC 30 40 C02C29: 08 FC 04 40 C02C2D: 00 04 28 40 C02C31: 08 04 3E 40 C02C35: 00 FC 08 00 C02C39: 08 FC 37 00 C02C3D: 00 04 0A 00 C02C41: 08 04 38 00 C02C45: 00 FC 08 00 C02C49: 08 FC 09 00 C02C4D: 00 04 3C 00 C02C51: 08 04 3D 00 C02C55: 00 FC 37 40 C02C59: 08 FC 08 40 C02C5D: 00 04 38 40 C02C61: 08 04 0A 40 C02C65: 00 FC 09 40 C02C69: 08 FC 08 40 C02C6D: 00 04 3D 40 C02C71: 08 04 3C 40 C02C75: 00 FC 10 00 C02C79: 08 FC 11 00 C02C7D: 00 04 12 00 C02C81: 08 04 13 00 C02C85: 00 FC 25 00 C02C89: 08 FC 26 00 C02C8D: 00 04 06 00 C02C91: 08 04 07 00 C02C95: 00 FC 39 00 C02C99: 08 FC 3A 00 C02C9D: 00 04 3B 00 C02CA1: 08 04 0B 00 C02CA5: 00 FC 3A 40 C02CA9: 08 FC 39 40 C02CAD: 00 04 0B 40 C02CB1: 08 04 3B 40 C02CB5: 00 FC 1C 00 C02CB9: 08 FC 1D 00 C02CBD: 00 04 1E 00 C02CC1: 08 04 1F 00 C02CC5: 00 FC 1D 40 C02CC9: 08 FC 1C 40 C02CCD: 00 04 1F 40 C02CD1: 08 04 1E 40 C02CD5: 00 FC 20 00 C02CD9: 08 FC 21 00 C02CDD: 00 04 22 00 C02CE1: 08 04 2F 00 C02CE5: 00 FC 21 40 C02CE9: 08 FC 20 40 C02CED: 00 04 2F 40 C02CF1: 08 04 22 40 C02CF5: 00 FC 34 00 C02CF9: 08 FC 35 00 C02CFD: 00 04 36 00 C02D01: 08 04 36 40 C02D05: 00 FC 32 00 C02D09: 08 FC 33 00 C02D0D: 00 04 36 00 C02D11: 08 04 36 40 C02D15: 00 FC 2D 00 C02D19: 08 FC 2E 00 C02D1D: 00 04 2A 00 C02D21: 08 04 2A 40 C02D25: 00 FC 2B 00 C02D29: 08 FC 2C 00 C02D2D: 00 04 29 00 C02D31: 08 04 29 40 C02D35: 00 FC 23 00 C02D39: 08 FC 24 00 C02D3D: 00 04 27 00 C02D41: 08 04 27 40 C02D45: 00 FC 04 00 C02D49: 08 FC 05 00 C02D4D: 00 04 06 00 C02D51: 08 04 07 00 C02D55: 00 FC 00 00 C02D59: 08 FC 01 00 C02D5D: 00 04 36 00 C02D61: 08 04 36 40 C02D65: 00 FC 31 40 C02D69: 08 FC 31 00 C02D6D: 00 04 28 40 C02D71: 08 04 28 00 C02D75: 00 FC 03 40 C02D79: 08 FC 30 00 C02D7D: 00 04 28 40 C02D81: 08 04 28 00 C02D85: 00 FC 14 00 C02D89: 08 FC 15 00 C02D8D: 00 04 16 00 C02D91: 08 04 17 00 C02D95: 00 FC 15 40 C02D99: 08 FC 14 40 C02D9D: 00 04 17 40 C02DA1: 08 04 16 40 C02DA5: 00 FC 04 00 C02DA9: 08 FC 04 40 C02DAD: 00 04 3E 00 C02DB1: 08 04 3E 40 C02DB5: 00 FC 12 00 C02DB9: 08 FC 13 00 C02DBD: 00 04 06 00 C02DC1: 08 04 07 00 C02DC5: 00 FC 15 40 C02DC9: 08 FC 14 40 C02DCD: 00 04 0B 40 C02DD1: 08 04 16 40 C02DD5: 00 FC 10 00 C02DD9: 08 FC 11 00 C02DDD: 00 04 02 00 C02DE1: 08 04 03 00 C02DE5: 00 FC 14 00 C02DE9: 08 FC 15 00 C02DED: 00 04 16 00 C02DF1: 08 04 0B 00 C02DF5: 00 FC 01 40 C02DF9: 08 FC 17 40 C02DFD: 00 04 03 40 C02E01: 08 04 1A 40 C02E05: 00 FC 01 40 C02E09: 08 FC 18 40 C02E0D: 00 04 03 40 C02E11: 08 04 1A 40 C02E15: 00 FC 17 00 C02E19: 08 FC 01 00 C02E1D: 00 04 1A 00 C02E21: 08 04 03 00 C02E25: 00 FC 18 00 C02E29: 08 FC 01 00 C02E2D: 00 04 1A 00 C02E31: 08 04 03 00 C02E35: 00 FC 17 00 C02E39: 08 FC 19 00 C02E3D: 00 04 1A 00 C02E41: 08 04 1B 00 C02E45: 00 FC 1C 00 C02E49: 08 FC 1D 00 C02E4D: 00 04 1E 00 C02E51: 08 04 1F 00 C02E55: 00 FC 00 00 C02E59: 08 FC 00 00 C02E5D: 00 04 00 00 C02E61: 08 04 00 00 C02E65: 00 FC 00 00 C02E69: 08 FC 00 00 C02E6D: 00 04 00 00 C02E71: 08 04 00 00 C02E75: 00 FC 00 00 C02E79: 08 FC 00 00 C02E7D: 00 04 00 00 C02E81: 08 04 00 00 C02E85: 00 FC 00 00 C02E89: 08 FC 00 00 C02E8D: 00 04 00 00 C02E91: 08 04 00 00 C02E95: 00 FC 04 00 C02E99: 08 FC 05 00 C02E9D: 00 04 06 00 C02EA1: 08 04 07 00 C02EA5: 00 FC 05 40 C02EA9: 08 FC 04 40 C02EAD: 00 04 07 40 C02EB1: 08 04 06 40 C02EB5: 00 FC 09 40 C02EB9: 08 FC 08 40 C02EBD: 00 04 0B 40 C02EC1: 08 04 0A 40 C02EC5: 00 FC 0D 40 C02EC9: 08 FC 0C 40 C02ECD: 00 04 0F 40 C02ED1: 08 04 0E 40 C02ED5: 00 FC 00 00 C02ED9: 08 FC 01 00 C02EDD: 00 04 02 00 C02EE1: 08 04 03 00 C02EE5: 00 FC 01 40 C02EE9: 08 FC 00 40 C02EED: 00 04 03 40 C02EF1: 08 04 02 40 C02EF5: 00 FC 08 00 C02EF9: 08 FC 09 00 C02EFD: 00 04 0A 00 C02F01: 08 04 0B 00 C02F05: 00 FC 0C 00 C02F09: 08 FC 0D 00 C02F0D: 00 04 0E 00 C02F11: 08 04 0F 00 C02F15: 00 FC 08 00 C02F19: 08 FC 09 00 C02F1D: 00 04 0A 00 C02F21: 08 04 0B 00 C02F25: 00 FC 0C 00 C02F29: 08 FC 0D 00 C02F2D: 00 04 0E 00 C02F31: 08 04 0F 00 C02F35: 00 FC 11 40 C02F39: 08 FC 10 40 C02F3D: 00 04 13 40 C02F41: 08 04 12 40 C02F45: 00 FC 15 40 C02F49: 08 FC 14 40 C02F4D: 00 04 17 40 C02F51: 08 04 16 40 C02F55: 00 FC 00 00 C02F59: 08 FC 01 00 C02F5D: 00 04 02 00 C02F61: 08 04 03 00 C02F65: 00 FC 04 00 C02F69: 08 FC 05 00 C02F6D: 00 04 06 00 C02F71: 08 04 07 00 C02F75: 00 FC 10 00 C02F79: 08 FC 11 00 C02F7D: 00 04 12 00 C02F81: 08 04 13 00 C02F85: 00 FC 14 00 C02F89: 08 FC 15 00 C02F8D: 00 04 16 00 C02F91: 08 04 17 00 (This function loads event scripts from interaction with NPCs.) C02F95: C2 20 REP #$20 (16-bit A) C02F97: BD 7F 14 LDA $147F,X (Get NPC action ID) C02F9A: 0A ASL A (Multiply by 2) C02F9B: AA TAX (Move to X) C02F9C: BF 00 00 CE LDA $CE0000,X (Get this NPC script ptr) C02FA0: 85 23 STA $23 C02FA2: 85 29 STA $29 C02FA4: BF 02 00 CE LDA $CE0002,X (Get next NPC script ptr) C02FA8: 85 26 STA $26 C02FAA: A5 06 LDA $06 (A = 0) C02FAC: E2 20 SEP #$20 (8-bit A) C02FAE: A6 23 LDX $23 C02FB0: BF 00 00 CE LDA $CE0000,X (Get event control code) C02FB4: C9 F0 CMP #$F0 C02FB6: F0 15 BEQ $2FCD (+21) (Branch if code is #$F0) C02FB8: 38 SEC (Otherwise...) C02FB9: E9 F0 SBC #$F0 (...subtract #$F0) C02FBB: AA TAX (Move to X) C02FBC: BF 6B 31 C0 LDA $C0316B,X (Get event command length) C02FC0: 18 CLC C02FC1: 65 23 ADC $23 (Add to script pointer) C02FC3: 85 23 STA $23 C02FC5: A9 00 LDA #$00 (0) C02FC7: 65 24 ADC $24 (Add Carry to high byte) C02FC9: 85 24 STA $24 C02FCB: 80 E1 BRA $2FAE (-31) (Repeat until #$F0 found) (Control code #$F0 marks the start of an ordered list of events that can occur.) C02FCD: E8 INX (Move past #$F0) C02FCE: C2 20 REP #$20 (16-bit A) C02FD0: A4 06 LDY $06 (Y = 0) C02FD2: E4 26 CPX $26 (End of script reached?) C02FD4: F0 0D BEQ $2FE3 (+13) (If so, execute script) C02FD6: BF 00 00 CE LDA $CE0000,X (Otherwise, copy list of possible actions...) C02FDA: 99 D6 13 STA $13D6,Y (...to script buffer) C02FDD: E8 E8 INX x2 C02FDF: C8 C8 INY x2 C02FE1: 80 EF BRA $2FD2 (-17) (Loop for entire list) (Start running the NPC script.) C02FE3: A5 06 LDA $06 (A = 0) C02FE5: E2 20 SEP #$20 (8-bit A) C02FE7: A6 29 LDX $29 (Pointer to script start) C02FE9: BF 00 00 CE LDA $CE0000,X (Get event control code) (Control code #$FF: All tests passed, run an event script.) C02FED: C9 FF CMP #$FF C02FEF: D0 03 BNE $2FF4 (+3) C02FF1: 4C 4D 31 JMP $314D (Execute event script) (Control code #$FE: Test if event flag $0xx is set.) C02FF4: C9 FE CMP #$FE C02FF6: D0 0E BNE $3006 (+14) C02FF8: BF 01 00 CE LDA $CE0001,X (Get event flag index) C02FFC: 20 2F CA JSR $CA2F (Get flag $0xx) C02FFF: C9 00 CMP #$00 (Is it set?) C03001: D0 39 BNE $303C (+57) (If not...) C03003: 4C 36 31 JMP $3136 (...bypass event script) (Control code #$FD: Test if event flag $0xx is clear.) C03006: C9 FD CMP #$FD C03008: D0 0E BNE $3018 (+14) C0300A: BF 01 00 CE LDA $CE0001,X (Get event flag index) C0300E: 20 2F CA JSR $CA2F (Get flag $0xx) C03011: C9 00 CMP #$00 (Is it set?) C03013: F0 27 BEQ $303C (+39) (If so...) C03015: 4C 36 31 JMP $3136 (...bypass event script) (Control code #$FC: Test if event flag $1xx is set.) C03018: C9 FC CMP #$FC C0301A: D0 0E BNE $302A (+14) C0301C: BF 01 00 CE LDA $CE0001,X (Get event flag index) C03020: 20 3C CA JSR $CA3C (Get flag $1xx) C03023: C9 00 CMP #$00 (Is it set?) C03025: D0 15 BNE $303C (+21) (If not...) C03027: 4C 36 31 JMP $3136 (...bypass event script) (Control code #$FB: Test if event flag $1xx is clear.) C0302A: C9 FB CMP #$FB C0302C: D0 17 BNE $3045 (+23) C0302E: BF 01 00 CE LDA $CE0001,X (Get event flag index) C03032: 20 3C CA JSR $CA3C (Get flag $1xx) C03035: C9 00 CMP #$00 (Is it set?) C03037: F0 03 BEQ $303C (+3) (If so...) C03039: 4C 36 31 JMP $3136 (...bypass event script) C0303C: A6 29 LDX $29 (Advance two bytes) C0303E: E8 E8 INX x2 C03040: 86 29 STX $29 C03042: 4C E7 2F JMP $2FE7 (Return to NPC script) (Control code #$FA: Tests for an 8-bit value in RAM indexed from $0500.) C03045: C9 FA CMP #$FA C03047: D0 49 BNE $3092 (+73) C03049: C2 20 REP #$20 (16-bit A) C0304B: BF 01 00 CE LDA $CE0001,X (Get 16-bit parameter) C0304F: 29 FF 3F AND #$3FFF (Bits 0-13) C03052: A8 TAY (RAM address) C03053: A5 06 LDA $06 (A = 0) C03055: E2 20 SEP #$20 (8-bit A) C03057: BF 02 00 CE LDA $CE0002,X C0305B: 29 C0 AND #$C0 (Bits 14 and 15) C0305D: D0 0C BNE $306B (+12) (Branch if either set) C0305F: B9 00 05 LDA $0500,Y (Get value from RAM) C03062: DF 03 00 CE CMP $CE0003,X (Compare to third param) C03066: F0 1F BEQ $3087 (+31) (If not a match...) C03068: 4C 36 31 JMP $3136 (...bypass event script) C0306B: C9 40 CMP #$40 (Bit 14 set and bit 15 clear?) C0306D: D0 0C BNE $307B (+12) (Branch if not) C0306F: B9 00 05 LDA $0500,Y C03072: DF 03 00 CE CMP $CE0003,X C03076: B0 0F BCS $3087 (+15) (If third parameter > RAM value...) C03078: 4C 36 31 JMP $3136 (...bypass event script) C0307B: B9 00 05 LDA $0500,Y C0307E: DF 03 00 CE CMP $CE0003,X C03082: 90 03 BCC $3087 (+3) (If third parameter <= RAM value...) C03084: 4C 36 31 JMP $3136 (...bypass event script) (Again, this code is reachable from 8-bit or 16-bit A!!!) C03087: A6 29 LDX $29 (Advance four bytes) C03089: E8 E8 E8 E8 INX x4 C0308D: 86 29 STX $29 C0308F: 4C E7 2F JMP $2FE7 (Return to NPC script) (Control code #$F9: Tests for a 16-bit value in RAM indexed from $0500.) C03092: C9 F9 CMP #$F9 C03094: D0 48 BNE $30DE (+72) C03096: C2 20 REP #$20 (16-bit A) C03098: BF 01 00 CE LDA $CE0001,X (Get 16-bit parameter) C0309C: 29 FF 3F AND #$3FFF (Bits 0-13) C0309F: A8 TAY (RAM address) C030A0: BF 01 00 CE LDA $CE0001,X C030A4: 29 00 C0 AND #$C000 (Bits 14 and 15) C030A7: D0 10 BNE $30B9 (+16) (Branch if either set) C030A9: B9 00 05 LDA $0500,Y (Get 16-bit value) C030AC: DF 03 00 CE CMP $CE0003,X (Compare to 16-bit param) C030B0: F0 D5 BEQ $3087 (-43) (If it's a match, branch...to the WRONG PLACE!!) C030B2: A5 06 LDA $06 (A = 0) C030B4: E2 20 SEP #$20 (8-bit A) C030B6: 4C 36 31 JMP $3136 (Otherwise, bypass event script) C030B9: C9 00 40 CMP #$4000 (Bit 14 set and bit 15 clear?) C030BC: D0 10 BNE $30CE (+16) (Branch if not) C030BE: B9 00 05 LDA $0500,Y C030C1: DF 03 00 CE CMP $CE0003,X C030C5: B0 35 BCS $30FC (+53) (If third parameter > indexed value...) C030C7: A5 06 LDA $06 (...bypass event script) C030C9: E2 20 SEP #$20 (8-bit A) C030CB: 4C 36 31 JMP $3136 C030CE: B9 00 05 LDA $0500,Y C030D1: DF 03 00 CE CMP $CE0003,X C030D5: 90 25 BCC $30FC (+37) (If third parameter <= indexed value...) C030D7: A5 06 LDA $06 (...bypass event script) C030D9: E2 20 SEP #$20 (8-bit A) C030DB: 4C 36 31 JMP $3136 (Control code #$F8: Tests bits in RAM indexed from $0500.) C030DE: C9 F8 CMP #$F8 C030E0: D0 2A BNE $310C (+42) C030E2: C2 20 REP #$20 (16-bit A) C030E4: BF 01 00 CE LDA $CE0001,X (Get 16-bit parameter) C030E8: 29 FF 3F AND #$3FFF (Bits 0-13) C030EB: A8 TAY (RAM address) C030EC: A5 06 LDA $06 (A = 0) C030EE: E2 20 SEP #$20 (8-bit A) C030F0: B9 00 05 LDA $0500,Y (Get bits from RAM) C030F3: 3F 03 00 CE AND $CE0003,X (AND third parameter) C030F7: D0 8E BNE $3087 (-114)(If no same bits set...) C030F9: 4C 36 31 JMP $3136 (...bypass event script) (Wait...code #$F9 SOMETIMES goes here?!!? WTF Square?!?) C030FC: A5 06 LDA $06 (A = 0) C030FE: E2 20 SEP #$20 (8-bit A) C03100: A6 29 LDX $29 (Advance five bytes) C03102: E8 (x5) INX x5 C03107: 86 29 STX $29 C03109: 4C E7 2F JMP $2FE7 (Return to NPC script) (Control code #$F7: Test if the player is facing the right way.) C0310C: C9 F7 CMP #$F7 C0310E: D0 0C BNE $311C (+12) C03110: BF 01 00 CE LDA $CE0001,X C03114: CD DB 0A CMP $0ADB (Direction player faces) C03117: D0 1D BNE $3136 (+29) (If not a match, bypass event script) C03119: 4C 3C 30 JMP $303C (Otherwise, advance two bytes) (We reach this point if the control code is none of the aforementioned possibilities. This ends up being the inverse of control code #$F8.) C0311C: C2 20 REP #$20 (16-bit A) C0311E: BF 01 00 CE LDA $CE0001,X (Get 16-bit parameter) C03122: 29 FF 3F AND #$3FFF (Bits 0-13) C03125: A8 TAY (RAM address) C03126: A5 06 LDA $06 (A = 0) C03128: E2 20 SEP #$20 (8-bit A) C0312A: B9 00 05 LDA $0500,Y (Get bits in RAM) C0312D: 3F 03 00 CE AND $CE0003,X (AND third parameter) C03131: D0 03 BNE $3136 (+3) (If no same bits set...) C03133: 4C 87 30 JMP $3087 (...advance four bytes) (Otherwise, bypass an event script for this NPC.) C03136: A6 29 LDX $29 (Get current pointer) C03138: E8 INX (Move it forward) C03139: BF 00 00 CE LDA $CE0000,X (Looking for #$FF) C0313D: C9 FF CMP #$FF C0313F: D0 F7 BNE $3138 (-9) (Loop until found) C03141: E8 E8 E8 INX x3 (Forward three more bytes) C03144: 86 29 STX $29 (Update pointer) C03146: E4 D0 CPX $D0 (Reached end of controls?) C03148: F0 03 BEQ $314D (+3) (If so, run default event) C0314A: 4C E7 2F JMP $2FE7 (If not, continue) (Execute event script triggered by NPC interaction.) C0314D: A9 01 LDA #$01 C0314F: 85 57 STA $57 C03151: 64 BA STZ $BA C03153: C2 20 REP #$20 (16-bit A) C03155: A6 29 LDX $29 (Get NPC control pointer) C03157: BF 01 00 CE LDA $CE0001,X (Get event script index) C0315B: 85 CE STA $CE (Store it, TAX works...) C0315D: A5 06 LDA $06 (A = 0) C0315F: E2 20 SEP #$20 (8-bit A) C03161: A6 CE LDX $CE (Get event script index) C03163: F0 03 BEQ $3168 (+3) (If null, no script) C03165: 20 17 A2 JSR $A217 (Let's run it!) C03168: 64 57 STZ $57 C0316A: 60 RTS (These are the lengths of each command by their control code.) C0316B: 00 (#$F0) C0316C: 00 (#$F1) C0316D: 00 (#$F2) C0316E: 00 (#$F3) C0316F: 00 (#$F4) C03170: 04 (#$F5) C03171: 01 (#$F6) C03172: 02 (#$F7) C03173: 04 (#$F8) C03174: 05 (#$F9) C03175: 04 (#$FA) C03176: 02 (#$FB) C03177: 02 (#$FC) C03178: 02 (#$FD) C03179: 02 (#$FE) C0317A: 03 (#$FF) C0317B: AD DB 0A LDA $0ADB (Direction player faces) C0317E: 0A 0A ASL x2 C03180: AA TAX C03181: BF 9B 32 C0 LDA $C0329B,X C03185: A8 TAY C03186: B9 F3 10 LDA $10F3,Y C03189: C9 FF CMP #$FF (-1) C0318B: D0 13 BNE $31A0 (+19) C0318D: BF 9E 32 C0 LDA $C0329E,X C03191: A8 TAY C03192: 20 4B 32 JSR $324B C03195: C9 FF CMP #$FF (-1) C03197: D0 01 BNE $319A (+1) C03199: 60 RTS C0319A: 20 89 32 JSR $3289 C0319D: 4C 30 32 JMP $3230 C031A0: 20 4B 32 JSR $324B C031A3: C9 FF CMP #$FF (-1) C031A5: F0 06 BEQ $31AD (+6) (BNE backwards...) C031A7: 20 89 32 JSR $3289 C031AA: 4C 30 32 JMP $3230 C031AD: BF 9C 32 C0 LDA $C0329C,X C031B1: A8 TAY C031B2: 20 4B 32 JSR $324B C031B5: C9 FF CMP #$FF (-1) C031B7: F0 1D BEQ $31D6 (+29) C031B9: 20 89 32 JSR $3289 C031BC: BD 7B 14 LDA $147B,X C031BF: 30 15 BMI $31D6 (+21) C031C1: AD DB 0A LDA $0ADB (Direction player faces) C031C4: 3A DEC A C031C5: 29 03 AND #$03 C031C7: 85 08 STA $08 C031C9: BD 7C 14 LDA $147C,X C031CC: 4A LSR A C031CD: 29 03 AND #$03 C031CF: C5 08 CMP $08 C031D1: D0 03 BNE $31D6 (+3) C031D3: 4C 30 32 JMP $3230 (BRA!) C031D6: AD DB 0A LDA $0ADB (Direction player faces) C031D9: 0A 0A ASL x2 C031DB: AA TAX C031DC: BF 9D 32 C0 LDA $C0329D,X C031E0: A8 TAY C031E1: 20 4B 32 JSR $324B C031E4: C9 FF CMP #$FF (-1) C031E6: F0 1D BEQ $3205 (+29) C031E8: 20 89 32 JSR $3289 C031EB: BD 7B 14 LDA $147B,X C031EE: 30 15 BMI $3205 (+21) C031F0: AD DB 0A LDA $0ADB (Direction player faces) C031F3: 1A INC A C031F4: 29 03 AND #$03 C031F6: 85 08 STA $08 C031F8: BD 7C 14 LDA $147C,X C031FB: 4A LSR A C031FC: 29 03 AND #$03 C031FE: C5 08 CMP $08 C03200: D0 03 BNE $3205 (+3) C03202: 4C 30 32 JMP $3230 (BRA!) C03205: AD DB 0A LDA $0ADB (Direction player faces) C03208: 0A 0A ASL x2 C0320A: AA TAX C0320B: BF 9E 32 C0 LDA $C0329E,X C0320F: A8 TAY C03210: 20 4B 32 JSR $324B C03213: C9 FF CMP #$FF (-1) C03215: F0 16 BEQ $322D (+22) C03217: 20 89 32 JSR $3289 C0321A: BD 7B 14 LDA $147B,X C0321D: 30 0E BMI $322D (+14) C0321F: BD 7C 14 LDA $147C,X C03222: 4A LSR A C03223: 29 03 AND #$03 C03225: CD DB 0A CMP $0ADB C03228: D0 03 BNE $322D (+3) C0322A: 4C 30 32 JMP $3230 (BRA!) C0322D: 4C 4A 32 JMP $324A (BNE straight there!!!) C03230: BD 7E 14 LDA $147E,X C03233: 30 0B BMI $3240 (+11) C03235: AD DB 0A LDA $0ADB (Direction player faces) C03238: 1A 1A INC x2 (Add 2) C0323A: 29 03 AND #$03 (Now it's the direction we're facing away from - our back is to this direction) C0323C: 0A ASL A (Multiply by 2) C0323D: 9D 7C 14 STA $147C,X C03240: DA PHX C03241: 20 B3 39 JSR $39B3 C03244: FA PLX C03245: 20 95 2F JSR $2F95 (Process NPC event script) C03248: 64 E4 STZ $E4 C0324A: 60 RTS C0324B: AD FA 10 LDA $10FA C0324E: 29 04 AND #$04 C03250: F0 0F BEQ $3261 (+15) C03252: A5 C3 LDA $C3 C03254: 29 01 AND #$01 C03256: F0 2E BEQ $3286 (+46) C03258: B9 F2 10 LDA $10F2,Y C0325B: 29 01 AND #$01 C0325D: F0 27 BEQ $3286 (+39) C0325F: 80 1B BRA $327C (+27) C03261: B9 F2 10 LDA $10F2,Y C03264: 29 04 AND #$04 C03266: F0 09 BEQ $3271 (+9) C03268: A5 C2 LDA $C2 C0326A: 29 01 AND #$01 C0326C: F0 18 BEQ $3286 (+24) C0326E: 4C 7C 32 JMP $327C C03271: B9 F2 10 LDA $10F2,Y C03274: 29 03 AND #$03 C03276: F0 04 BEQ $327C (+4) C03278: 25 C2 AND $C2 C0327A: F0 0A BEQ $3286 (+10) C0327C: B9 D8 10 LDA $10D8,Y C0327F: F0 05 BEQ $3286 (+5) C03281: C9 FF CMP #$FF (-1) C03283: F0 01 BEQ $3286 (+1) C03285: 60 RTS C03286: A9 FF LDA #$FF (-1) C03288: 60 RTS (Multiplies a 7-bit number by 20 and puts the product in X.) C03289: 29 7F AND #$7F C0328B: 8D 02 42 STA $4202 C0328E: A9 14 LDA #$14 (20) C03290: 8D 03 42 STA $4203 C03293: EA EA EA EA NOP x4 C03297: AE 16 42 LDX $4216 C0329A: 60 RTS (Data table of some kind. Indexed by player facing direction.) C0329B: 02 00 04 12 (Up) C0329F: 0A 04 10 16 (Right) C032A3: 0E 10 0C 18 (Down) C032A7: 06 0C 00 14 (Left) (This function helps NPCs decide what random direction to move.) C032AB: A5 E6 LDA $E6 C032AD: D0 01 BNE $32B0 (+1) C032AF: 60 RTS C032B0: 64 E5 STZ $E5 C032B2: A4 06 LDY $06 C032B4: 84 E9 STY $E9 C032B6: A4 E9 LDY $E9 C032B8: B9 7E 14 LDA $147E,Y C032BB: 29 04 AND #$04 C032BD: F0 0B BEQ $32CA (+11) C032BF: B9 7B 14 LDA $147B,Y C032C2: 09 80 ORA #$80 C032C4: 99 7B 14 STA $147B,Y C032C7: 4C 8A 34 JMP $348A C032CA: B9 7E 14 LDA $147E,Y C032CD: 29 08 AND #$08 C032CF: D0 08 BNE $32D9 (+8) C032D1: B9 7D 14 LDA $147D,Y C032D4: 10 03 BPL $32D9 (+3) C032D6: 4C B9 34 JMP $34B9 C032D9: B9 7D 14 LDA $147D,Y C032DC: 29 7F AND #$7F C032DE: F0 03 BEQ $32E3 (+3) C032E0: 4C B9 34 JMP $34B9 C032E3: B9 85 14 LDA $1485,Y C032E6: 29 FD AND #$FD C032E8: 99 85 14 STA $1485,Y C032EB: A5 E4 LDA $E4 C032ED: F0 10 BEQ $32FF (+16) C032EF: 29 7F AND #$7F C032F1: C5 E5 CMP $E5 C032F3: D0 0A BNE $32FF (+10) C032F5: 64 E4 STZ $E4 C032F7: B9 85 14 LDA $1485,Y C032FA: 09 02 ORA #$02 C032FC: 99 85 14 STA $1485,Y C032FF: C2 20 REP #$20 (16-bit A) C03301: B9 77 14 LDA $1477,Y C03304: 29 00 3F AND #$3F00 C03307: EB XBA C03308: 85 0D STA $0D C0330A: B9 79 14 STA $1479,Y C0330D: 4A 4A LSR x2 C0330F: 29 C0 0F AND #$0FC0 C03312: 05 0D ORA $0D C03314: AA TAX C03315: A8 TAY C03316: A5 06 LDA $06 (A = 0) C03318: E2 20 SEP #$20 (8-bit A) C0331A: A9 7F LDA #$7F C0331C: 48 PHA C0331D: AB PLB (Data bank reg = $7F) C0331E: C2 20 REP #$20 (16-bit A) C03320: BD 00 30 LDA $3000,X C03323: 85 F5 STA $F5 C03325: BD 00 00 LDA $0000,X C03328: 85 EB STA $EB C0332A: 98 TYA C0332B: 38 SEC C0332C: E9 40 00 SBC #$0040 (64) C0332F: 29 FF 0F AND #$0FFF C03332: AA TAX C03333: BD 00 30 LDA $3000,X C03336: 85 F7 STA $F7 C03338: BD 00 00 LDA $0000,X C0333B: 85 ED STA $ED C0333D: 98 TYA C0333E: 29 C0 0F AND #$0FC0 C03341: 85 0D STA $0D C03343: 98 TYA C03344: 3A DEC A C03345: 29 3F 00 AND #$003F C03348: 05 0D ORA $0D C0334A: AA TAX C0334B: BD 00 30 LDA $3000,X C0334E: 85 FD STA $FD C03350: BD 00 00 LDA $0000,X C03353: 85 F3 STA $F3 C03355: 98 TYA C03356: 29 C0 0F AND #$0FC0 C03359: 85 0D STA $0D C0335B: 98 TYA C0335C: 1A INC A C0335D: 29 3F 00 AND #$003F C03360: 05 0D ORA $0D C03362: AA TAX C03363: BD 00 30 LDA $3000,X C03366: 85 F9 STA $F9 C03368: BD 00 00 LDA $0000,X C0336B: 85 EF STA $EF C0336D: 98 TYA C0336E: 18 CLC C0336F: 69 40 00 ADC #$0040 (64) C03372: 29 FF 0F AND #$0FFF C03375: AA TAX C03376: BD 00 30 LDA $3000,X C03379: 85 FB STA $FB C0337B: BD 00 00 LDA $0000,X C0337E: 85 F1 STA $F1 C03380: A5 06 LDA $06 (A = 0) C03382: E2 20 SEP #$20 (8-bit A) C03384: A9 00 LDA #$00 C03386: 48 PHA C03387: AB PLB (Data bank reg = $00) C03388: A5 EB LDA $EB C0338A: C2 20 REP #$20 (16-bit A) C0338C: 29 FF 00 AND #$00FF C0338F: 0A ASL A C03390: AA TAX C03391: A5 06 LDA $06 (A = 0) C03393: E2 20 SEP #$20 (8-bit A) C03395: BD 86 11 LDA $1186,X C03398: 29 83 AND #$83 C0339A: 85 0C STA $0C C0339C: BD 87 11 LDA $1187,X C0339F: 29 0F AND #$0F C033A1: 85 0B STA $0B C033A3: A4 E9 LDY $E9 C033A5: B9 7B 14 LDA $147B,Y C033A8: 29 7F AND #$7F C033AA: 99 7B 14 STA $147B,Y C033AD: B9 85 14 LDA $1485,Y C033B0: 10 10 BPL $33C2 (+16) C033B2: 29 40 AND #$40 C033B4: D0 06 BNE $33BC (+6) C033B6: 20 1C 35 JSR $351C C033B9: 4C 2C 34 JMP $342C (BRA! You can definitely reach that spot from here...you're about to use BNE for that!) C033BC: 20 55 35 JSR $3555 C033BF: 4C 2C 34 JMP $342C (BRA, again!) C033C2: B9 85 14 LDA $1485,Y C033C5: 29 30 AND #$30 C033C7: D0 63 BNE $342C (+99) C033C9: B9 7B 14 LDA $147B,Y C033CC: 29 7F AND #$7F C033CE: D0 0B BNE $33DB (+11) C033D0: 20 2B 4F JSR $4F2B (PRN) C033D3: 29 03 AND #$03 C033D5: 1A INC A C033D6: 99 7B 14 STA $147B,Y C033D9: 80 51 BRA $342C (+81) C033DB: 20 2B 4F JSR $4F2B (PRN) C033DE: C9 20 CMP #$20 (32) C033E0: B0 4A BCS $342C (+74) C033E2: B9 7B 14 LDA $147B,Y C033E5: 4A LSR A C033E6: 90 22 BCC $340A (+34) C033E8: 20 2B 4F JSR $4F2B (PRN) C033EB: 4A LSR A C033EC: B0 0E BCS $33FC (+14) C033EE: A2 04 00 LDX #$0004 (4) C033F1: 20 EB 34 JSR $34EB C033F4: F0 36 BEQ $342C (+54) C033F6: 99 7B 14 STA $147B,Y C033F9: 4C 8A 34 JMP $348A C033FC: A2 08 00 LDX #$0008 (8) C033FF: 20 EB 34 JSR $34EB C03402: F0 28 BEQ $342C (+40) C03404: 99 7B 14 STA $147B,Y C03407: 4C 8A 34 JMP $348A C0340A: 20 2B 4F JSR $4F2B (PRN) C0340D: 4A LSR A C0340E: B0 0E BCS $341E (+14) C03410: A2 02 00 LDX #$0002 (2) C03413: 20 EB 34 JSR $34EB C03416: F0 14 BEQ $342C (+20) C03418: 99 7B 14 STA $147B,Y C0341B: 4C 8A 34 JMP $348A (BRA!) C0341E: A2 06 00 LDX #$0006 (6) C03421: 20 EB 34 JSR $34EB C03424: F0 06 BEQ $342C (+6) C03426: 99 7B 14 STA $147B,Y C03429: 4C 8A 34 JMP $348A (BRA!) C0342C: B9 7B 14 LDA $147B,Y C0342F: 0A ASL A C03430: AA TAX C03431: 20 EB 34 JSR $34EB C03434: D0 54 BNE $348A (+84) C03436: B9 85 14 LDA $1485,Y C03439: 29 30 AND #$30 C0343B: C9 10 CMP #$10 C0343D: F0 2C BEQ $346B (+44) C0343F: C9 30 CMP #$30 C03441: F0 16 BEQ $3459 (+22) C03443: B9 7B 14 LDA $147B,Y C03446: 3A DEC A C03447: 18 CLC C03448: 69 02 ADC #$02 (Minus one plus two!?? Just do an INC A!!!!) C0344A: 29 03 AND #$03 C0344C: 1A INC A C0344D: 0A ASL A C0344E: AA TAX C0344F: 20 EB 34 JSR $34EB C03452: F0 2B BEQ $347F (+43) C03454: 99 7B 14 STA $147B,Y C03457: 80 31 BRA $348A (+49) C03459: B9 7B 14 LDA $147B,Y C0345C: 29 03 AND #$03 C0345E: 1A INC A C0345F: 0A ASL A C03460: AA TAX C03461: 20 EB 34 JSR $34EB C03464: F0 19 BEQ $347F (+25) C03466: 99 7B 14 STA $147B,Y C03469: 80 1F BRA $348A (+31) C0346B: B9 7B 14 LDA $147B,Y C0346E: 3A 3A DEC x2 C03470: 29 03 AND #$03 C03472: 1A INC A C03473: 0A ASL A C03474: AA TAX C03475: 20 EB 34 JSR $34EB C03478: F0 05 BEQ $347F (+5) C0347A: 99 7B 14 STA $147B,Y C0347D: 80 0B BRA $348A (+11) C0347F: B9 7B 14 LDA $147B,Y C03482: 09 80 ORA #$80 C03484: 99 7B 14 STA $147B,Y C03487: 4C B9 34 JMP $34B9 (BRA!) C0348A: B9 85 14 LDA $1485,Y C0348D: 4A LSR A C0348E: B0 03 BCS $3493 (+3) C03490: 4C B9 34 JMP $34B9 (BCC!) C03493: A4 E9 LDY $E9 (Get NPC index) C03495: 20 F8 3C JSR $3CF8 (Remove NPC from tile data) C03498: B9 7B 14 LDA $147B,Y C0349B: 10 02 BPL $349F (+2) C0349D: A9 00 LDA #$00 (0) C0349F: 29 7F AND #$7F C034A1: AA TAX C034A2: B9 78 14 LDA $1478,Y (NPC X-coordinate) C034A5: 18 CLC C034A6: 7F E1 34 C0 ADC $C034E1,X (Add unit vector) C034AA: 85 75 STA $75 C034AC: B9 7A 14 LDA $147A,Y (NPC Y-coordinate) C034AF: 18 CLC C034B0: 7F E6 34 C0 ADC $C034E6,X (Add unit vector) C034B4: 85 76 STA $76 C034B6: 20 E0 3C JSR $3CE0 (Place NPC in tile data) C034B9: A4 E9 LDY $E9 C034BB: B9 7B 14 LDA $147B,Y C034BE: 29 7F AND #$7F C034C0: F0 05 BEQ $34C7 (+5) C034C2: 3A DEC A C034C3: 0A ASL A C034C4: 99 7C 14 STA $147C,Y C034C7: C2 20 REP #$20 (16-bit A) C034C9: A5 E9 LDA $E9 C034CB: 18 CLC C034CC: 69 14 00 ADC #$0014 (20) C034CF: 85 E9 STA $E9 C034D1: A5 06 LDA $06 (A = 0) C034D3: E2 20 SEP #$20 (8-bit A) C034D5: E6 E5 INC $E5 C034D7: A5 E5 LDA $E5 C034D9: C5 E6 CMP $E6 C034DB: F0 03 BEQ $34E0 (+3) C034DD: 4C B6 32 JMP $32B6 C034E0: 60 RTS (And...ONCE AGAIN!!!!!...unit vectors.) C034E1: 00 (+0, no movement) C034E2: 00 (+0, up) C034E3: 01 (+1, right) C034E4: 00 (+0, down) C034E5: FF (-1, left) C034E6: 00 (+0, no movement) C034E7: FF (-1, up) C034E8: 00 (+0, right) C034E9: 01 (+1, down) C034EA: 00 (+0, left) C034EB: B5 EB LDA $EB,X C034ED: DA PHX C034EE: C2 20 REP #$20 (16-bit A) C034F0: 29 FF 00 AND #$00FF C034F3: 0A ASL A C034F4: AA TAX C034F5: A5 06 LDA $06 (A = 0) C034F7: E2 20 SEP #$20 (8-bit A) C034F9: BD 86 11 LDA $1186,X C034FC: FA PLX C034FD: 29 83 AND #$83 C034FF: C5 0C CMP $0C C03501: D0 11 BNE $3514 (+17) C03503: B5 F5 LDA $F5,X C03505: D0 0D BNE $3514 (+13) C03507: 8A TXA C03508: 4A LSR A C03509: AA TAX C0350A: A5 0B LDA $0B C0350C: 3F 17 35 C0 AND $C03517,X C03510: F0 02 BEQ $3514 (+2) C03512: 8A TXA C03513: 60 RTS C03514: A9 00 LDA #$00 C03516: 60 RTS C03517: 00 C03518: 08 C03519: 01 C0351A: 04 C0351B: 02 (These two functions contain algorithms for determining which direction NPCs choose to move. The first one makes NPCs move toward the player and the second makes them move away.) C0351C: A4 E9 LDY $E9 C0351E: B9 78 14 LDA $1478,Y (NPC X-coordinate?) C03521: CD D8 0A CMP $0AD8 (Player X-coordinate) C03524: B0 10 BCS $3536 (+16) (Branch if NPC >= plr) C03526: B9 7A 14 LDA $147A,Y (NPC Y-coordinate?) C03529: CD D9 0A CMP $0AD9 (Player Y-coordinate) C0352C: B0 04 BCS $3532 (+4) (Branch if NPC >= plr) C0352E: A9 01 LDA #$01 (1) (Right, if NPC is northwest of player) C03530: 80 12 BRA $3544 (+18) C03532: A9 00 LDA #$00 (0) (Up, if NPC is southwest or directly west of player) C03534: 80 0E BRA $3544 (+14) C03536: B9 7A 14 LDA $147A,Y (NPC Y-coordinate?) C03539: CD D9 0A CMP $0AD9 (Player Y-coordinate) C0353C: B0 04 BCS $3542 (+4) (Branch if NPC >= plr) C0353E: A9 02 LDA #$02 (2) (Down, if NPC is northeast or directly north of player) C03540: 80 02 BRA $3544 (+2) C03542: A9 03 LDA #$03 (3) (Left, if NPC is southeast, straight south or straight east of player) C03544: 85 08 STA $08 (Save here) C03546: 20 2B 4F JSR $4F2B (PRN) C03549: 29 01 AND #$01 (MOD 2) C0354B: 18 CLC C0354C: 65 08 ADC $08 (Add direction) C0354E: 29 03 AND #$03 (Note that having a 50% chance of adding 1 means the movement direction turns 90 degrees clockwise - so, for example, an NPC that would move east by default, because they're northwest of you, might move south instead; either direction moves the NPC closer to you) C03550: 1A INC A (Make it one-based) C03551: 99 7B 14 STA $147B,Y (NPC movement direction?) C03554: 60 RTS C03555: A4 E9 LDY $E9 C03557: B9 78 14 LDA $1478,Y (NPC X-coordinate?) C0355A: CD D8 0A CMP $0AD8 (Player X-coordinate) C0355D: B0 10 BCS $356F (+16) (Branch if NPC >= plr) C0355F: B9 7A 14 LDA $147A,Y (NPC Y-coordinate?) C03562: CD D9 0A CMP $0AD9 (Player Y-coordinate) C03565: B0 04 BCS $356B (+4) (Branch if NPC >= plr) C03567: A9 03 LDA #$03 (3) (Left, if NPC is northwest of player) C03569: 80 12 BRA $357D (+18) C0356B: A9 02 LDA #$02 (2) (Down, if NPC is southwest or directly west of player) C0356D: 80 0E BRA $357D (+14) C0356F: B9 7A 14 LDA $147A,Y (NPC Y-coordinate?) C03572: CD D9 0A CMP $0AD9 (Player Y-coordinate) C03575: B0 04 BCS $357B (+4) (Branch if NPC >= plr) C03577: A9 00 LDA #$00 (0) (Up, if NPC is northeast or directly north of player) C03579: 80 02 BRA $357D (+2) C0357B: A9 01 LDA #$01 (1) (Right, if NPC is southeast, straight south or straight east of player) C0357D: 85 08 STA $08 (Save here) C0357F: 20 2B 4F JSR $4F2B (PRN) C03582: 29 01 AND #$01 (MOD 2) C03584: 18 CLC C03585: 65 08 ADC $08 (Add direction) C03587: 29 03 AND #$03 (Note that having a 50% chance of adding 1 means the movement direction turns 90 degrees clockwise - so, for example, an NPC that would move west by default, because they're northwest of you, might move north instead; either direction moves the NPC further away from you) C03589: 1A INC A (Make it one-based) C0358A: 99 7B 14 STA $147B,Y (NPC movement direction?) C0358D: 60 RTS C0358E: AD 9F 16 LDA $169F C03591: F0 07 BEQ $359A (+7) C03593: AD 85 14 LDA $1485 C03596: 29 01 AND #$01 C03598: D0 01 BNE $359B (+1) C0359A: 60 RTS C0359B: A9 AA LDA #$AA C0359D: 8D 00 04 STA $0400 C035A0: 8D 01 04 STA $0401 C035A3: 8D 02 04 STA $0402 C035A6: 8D 03 04 STA $0403 C035A9: A9 A0 LDA #$A0 C035AB: 8D 1F 04 STA $041F C035AE: AD 7C 14 LDA $147C C035B1: 4A 4A 4A LSR x3 C035B4: 85 0C STA $0C C035B6: AD 7E 14 LDA $147E C035B9: 29 04 AND #$04 C035BB: F0 08 BEQ $35C5 (+8) C035BD: A9 01 LDA #$01 C035BF: 85 0C STA $0C C035C1: A9 07 LDA #$07 C035C3: 80 30 BRA $35F5 (+48) C035C5: AD 85 14 LDA $1485 C035C8: 29 08 AND #$08 C035CA: F0 11 BEQ $35DD (+17) C035CC: AD 7B 14 LDA $147B C035CF: F0 24 BEQ $35F5 (+36) C035D1: AD 79 14 LDA $1479 C035D4: 29 80 AND #$80 C035D6: 18 CLC (Don't need this...) C035D7: 2A 2A ROL x2 C035D9: 69 08 ADC #$08 (8) C035DB: 80 18 BRA $35F5 (+24) C035DD: AD 85 14 LDA $1485 C035E0: 10 0E BPL $35F0 (+14) C035E2: A5 3E LDA $3E C035E4: 4A 4A 4A LSR x3 C035E7: 29 03 AND #$03 C035E9: AA TAX C035EA: BF BD 37 C0 LDA $C037BD,X C035EE: 80 05 BRA $35F5 (+5) C035F0: AD 7C 14 LDA $147C C035F3: 29 07 AND #$07 C035F5: C2 20 REP #$20 (16-bit A) C035F7: 0A 0A 0A 0A ASL x4 (Multiply by 16) C035FB: 85 23 STA $23 (Save temp) C035FD: 0A ASL A C035FE: 18 CLC C035FF: 65 23 ADC $23 (Multiply by 3) C03601: AA TAX (Move to X) C03602: AD 77 14 LDA $1477 C03605: 4A 4A 4A LSR x3 C03608: 18 CLC C03609: 69 10 00 ADC #$0010 (16) C0360C: 38 SEC C0360D: E5 61 SBC $61 C0360F: 85 13 STA $13 C03611: AD 79 14 LDA $1479 C03614: 4A 4A 4A LSR x3 C03617: 18 CLC C03618: 69 18 00 ADC #$0018 (24) C0361B: 38 SEC C0361C: E5 63 SBC $63 C0361E: 85 15 STA $15 C03620: AD 88 14 LDA $1488 C03623: F0 2D BEQ $3652 (+45) C03625: AD 85 14 LDA $1485 C03628: 29 04 00 AND #$0004 C0362B: D0 09 BNE $3636 (+9) C0362D: AD 88 14 LDA $1488 C03630: 29 FF 00 AND #$00FF C03633: 4A LSR A C03634: 80 08 BRA $363E (+8) C03636: AD 88 14 LDA $1488 C03639: 29 FF 00 AND #$00FF C0363C: 4A 4A LSR x2 C0363E: DA PHX C0363F: AA TAX C03640: BF DB 22 C0 LDA $C022DB,X C03644: FA PLX C03645: 29 FF 00 AND #$00FF C03648: 0A ASL A C03649: 85 0F STA $0F C0364B: A5 15 LDA $15 C0364D: 38 SEC C0364E: E5 0F SBC $0F C03650: 85 15 STA $15 C03652: A5 06 LDA $06 (A = 0) C03654: A8 TAY (Y = 0) C03655: E2 20 SEP #$20 (8-bit A) C03657: C2 20 REP #$20 (16-bit A...um...?) C03659: C0 00 00 CPY #$0000 C0365C: D0 13 BNE $3671 (+19) C0365E: A5 0C LDA $0C C03660: 29 07 00 AND #$0007 C03663: DA PHX C03664: 0A ASL A C03665: AA TAX C03666: BF C9 37 C0 LDA $C037C9,X C0366A: FA PLX C0366B: 1F D5 37 C0 ORA $C037D5,X C0366F: 80 04 BRA $3675 (+4) C03671: BF D5 37 C0 LDA $C037D5,X (Get a tile) C03675: 99 02 02 STA $0202,Y (Write to DMA buffer) C03678: 29 FF 01 AND #$01FF C0367B: F0 39 BEQ $36B6 (+57) C0367D: BF D3 37 C0 LDA $C037D3,X C03681: 29 FF 00 AND #$00FF C03684: C9 80 00 CMP #$0080 C03687: 90 03 BCC $368C (+3) C03689: 09 00 FF ORA #$FF00 C0368C: 65 13 ADC $13 C0368E: 29 FF 07 AND #$07FF C03691: C9 00 02 CMP #$0200 C03694: B0 20 BCS $36B6 (+32) C03696: 4A LSR A C03697: 38 SEC C03698: E9 08 00 SBC #$0008 (8) C0369B: 85 0D STA $0D C0369D: BF D4 37 C0 LDA $C037D4,X C036A1: 29 FF 00 AND #$00FF C036A4: C9 80 00 CMP #$0080 C036A7: 90 03 BCC $36AC (+3) C036A9: 09 00 FF ORA #$FF00 C036AC: 65 15 ADC $15 C036AE: 29 FF 07 AND #$07FF C036B1: C9 E0 01 CMP #$01E0 C036B4: 90 07 BCC $36BD (+7) C036B6: A9 F0 00 LDA #$00F0 C036B9: 85 0F STA $0F C036BB: 80 18 BRA $36D5 (+24) C036BD: 4A LSR A C036BE: 38 SEC C036BF: E9 10 00 SBC #$0010 (16) C036C2: 85 0F STA $0F C036C4: C0 00 00 CMP #$0000 C036C7: D0 0C BNE $36D5 (+12) C036C9: A5 0C LDA $0C C036CB: 29 08 00 AND #$0008 C036CE: 4A 4A LSR x2 C036D0: 18 CLC C036D1: 65 0F ADC $0F C036D3: 85 0F STA $0F C036D5: A5 06 LDA $06 (A = 0) C036D7: E2 20 SEP #$20 (8-bit A) C036D9: A5 0D LDA $0D C036DB: C9 F8 CMP #$F8 (-8) C036DD: 90 1A BCC $36F9 (+26) C036DF: DA PHX C036E0: 5A PHY C036E1: 98 TYA C036E2: 4A 4A LSR x2 C036E4: 29 03 AND #$03 C036E6: AA TAX C036E7: 98 TYA C036E8: 4A 4A 4A 4A LSR x4 C036EC: A8 TAY C036ED: B9 00 04 LDA $0400,Y C036F0: 1F B9 37 C0 ORA $C037B9,X C036F4: 99 00 04 STA $0400,Y C036F7: 7A PLY C036F8: FA PLX C036F9: A5 0D LDA $0D C036FB: 99 00 02 STA $0200,Y C036FE: A5 0F LDA $0F C03700: 99 01 02 STA $0201,Y C03703: E8 E8 E8 E8 INX x4 C03707: C8 C8 C8 C8 INY x4 C0370B: C0 30 00 CPY #$0030 (48) C0370E: F0 03 BEQ $3713 (+3) (Loop 12 times) C03710: 4C 57 36 JMP $3657 C03713: C2 20 REP #$20 (16-bit A) C03715: AD 8B 14 LDA $148B C03718: 4A 4A 4A LSR x3 C0371B: 18 CLC C0371C: 69 10 00 ADC #$0010 (16) C0371F: 38 SEC C03720: E5 61 SBC $61 C03722: 85 13 STA $13 C03724: AD 8D 14 LDA $148D C03727: 4A 4A 4A LSR x3 C0372A: 18 CLC C0372B: 69 18 00 ADC #$0018 (24) C0372E: 38 SEC C0372F: E5 63 SBC $63 C03731: 85 15 STA $15 C03733: A5 06 LDA $06 (A = 0) C03735: E2 20 SEP #$20 (8-bit A) C03737: A6 06 LDX $06 (X = 0) C03739: A4 06 LDY $06 (Y = 0) C0373B: C2 20 REP #$20 (16-bit A) C0373D: BF C3 37 C0 LDA $C037C3,X C03741: 99 FA 03 STA $03FA,Y C03744: BF C1 37 C0 LDA $C037C1,X C03748: 29 FF 00 AND #$00FF C0374B: C9 80 00 CMP #$0080 (128) C0374E: 90 03 BCC $3753 (+3) C03750: 09 00 FF ORA #$FF00 C03753: 65 13 ADC $13 C03755: 29 FF 07 AND #$07FF C03758: C9 00 02 CMP #$0200 (512) C0375B: B0 18 BCS $3775 (+24) C0375D: 4A LSR A C0375E: 38 SEC C0375F: E9 08 00 SBC #$0008 (8) C03762: 85 0D STA $0D C03764: BF C2 37 C0 LDA $C037C2,X C03768: 29 FF 00 AND #$00FF C0376B: 65 15 ADC $15 C0376D: 29 FF 07 AND #$07FF C03770: C9 E0 01 CMP #$01E0 C03773: 90 07 BCC $377C (+7) C03775: A9 F0 00 LDA #$00F0 (240) C03778: 85 0F STA $0F C0377A: 80 07 BRA $3783 (+7) C0377C: 4A LSR A C0377D: 38 SEC C0377E: E9 10 00 SBC #$0010 (16) C03781: 85 0F STA $0F C03783: A5 06 LDA $06 (A = 0) C03785: E2 20 SEP #$20 (8-bit A) C03787: A5 0D LDA $0D C03789: C9 F8 CMP #$F8 (-8) C0378B: 90 14 BCC $37A1 (+20) C0378D: C0 00 00 CPY #$0000 (0) C03790: D0 07 BNE $3799 (+7) C03792: AD 1F 04 LDA $041F C03795: 09 10 ORA #$10 C03797: 80 05 BRA $379E (+5) C03799: AD 1F 04 LDA $041F C0379C: 09 40 ORA #$40 C0379E: 8D 1F 04 STA $041F (TSB...) C037A1: A5 0D LDA $0D C037A3: 99 F8 03 STA $03F8,Y C037A6: A5 0F LDA $0F C037A8: 99 F9 03 STA $03F9,Y C037AB: C8 C8 C8 C8 INY x4 C037AF: E8 E8 E8 E8 INX x4 C037B3: C0 08 00 CPY #$0008 (8) C037B6: D0 83 BNE $373B (-125) C037B8: 60 RTS C037B9: 01 C037BA: 04 C037BB: 10 C037BC: 40 C037BD: 05 C037BE: 04 C037BF: 06 C037C0: 06 C037C1: F0 0A BE 34 C037C5: 10 0A BE 74 C037C9: B6 34 C037CB: BA 34 C037CD: BC 34 C037CF: BA 74 C037D1: B8 34 C037D3: 00 E8 00 00 C037D7: F0 E0 50 34 C037DB: 10 E0 50 74 C037DF: F0 00 52 34 C037E3: 10 00 52 74 C037E7: 00 00 00 34 C037EB: 00 00 00 34 C037EF: 00 00 00 34 C037F3: 00 00 00 34 C037F7: 00 00 00 34 C037FB: 00 00 00 34 C037FF: 00 00 00 34 C03803: 00 E8 00 00 C03807: D0 E0 54 34 C0380B: F0 E0 58 34 C0380F: 10 E0 58 34 C03813: 30 E0 54 74 C03817: D0 00 56 34 C0381B: F0 00 5A 34 C0381F: 10 00 5A 74 C03823: 30 00 56 74 C03827: 00 00 00 34 C0382B: 00 00 00 34 C0382F: 00 00 00 34 C03833: 00 E8 00 00 C03837: F0 C0 70 34 C0383B: 10 C0 70 74 C0383F: D0 D0 5C 34 C03843: 30 D0 5C 74 C03847: F0 E0 72 34 C0384B: 10 E0 72 74 C0384F: D0 F0 5E 34 C03853: 30 F0 5E 74 C03857: F0 00 74 34 C0385B: 10 00 74 34 C0385F: 00 00 00 34 C03863: 00 E0 00 00 C03867: F0 D0 7C 34 C0386B: 10 D0 7C 74 C0386F: D0 E0 7A 34 C03873: 30 E0 7A 74 C03877: F0 F0 7E 34 C0387B: 10 F0 7E 74 C0387F: 03 00 96 34 C03883: 00 00 00 34 C03887: 00 00 00 34 C0388B: 00 00 00 34 C0388F: 00 00 00 34 C03893: 00 D0 00 00 C03897: F0 BC 92 34 C0389B: 10 BC 92 74 C0389F: D0 D0 90 34 C038A3: F0 DC 94 34 C038A7: 10 DC 94 74 C038AB: 30 DC 90 74 C038AF: 00 FC 96 34 C038B3: 00 00 00 34 C038B7: 00 00 00 34 C038BB: 00 00 00 34 C038BF: 00 00 00 34 C038C3: 00 CC 00 00 C038C7: F0 B8 9A 34 C038CB: 10 B8 9A 74 C038CF: D0 D8 98 34 C038D3: F0 D8 9C 34 C038D7: 10 D8 9C 74 C038DB: 30 D8 98 74 C038DF: 00 F8 96 74 C038E3: 00 00 00 34 C038E7: 00 00 00 34 C038EB: 00 00 00 34 C038EF: 00 00 00 34 C038F3: 00 CC 00 00 C038F7: F0 B8 9A 34 C038FB: 10 B8 9A 74 C038FF: D0 D8 98 34 C03903: F0 D8 9C 34 C03907: 10 D8 9C 74 C0390B: 30 D8 98 74 C0390F: 00 F8 96 74 C03913: 00 00 00 34 C03917: 00 00 00 34 C0391B: 00 00 00 34 C0391F: 00 00 00 34 C03923: 00 00 00 00 C03927: 00 E0 B4 34 C0392B: 00 00 76 34 C0392F: F0 E0 50 34 C03933: 10 E0 50 74 C03937: F0 00 52 34 C0393B: 10 00 52 74 C0393F: 00 00 00 34 C03943: 00 00 00 34 C03947: 00 00 00 34 C0394B: 00 00 00 34 C0394F: 00 00 00 34 C03953: 00 E8 00 00 C03957: F0 E0 50 34 C0395B: 10 E0 50 74 C0395F: F0 00 52 34 C03963: 10 00 78 34 C03967: 00 00 00 34 C0396B: 00 00 00 34 C0396F: 00 00 00 34 C03973: 00 00 00 34 C03977: 00 00 00 34 C0397B: 00 00 00 34 C0397F: 00 00 00 34 C03983: 00 E8 00 00 C03987: F0 E0 50 34 C0398B: 10 E0 50 74 C0398F: F0 00 78 74 C03993: 10 00 52 74 C03997: 00 00 00 34 C0399B: 00 00 00 34 C0399F: 00 00 00 34 C039A3: 00 00 00 34 C039A7: 00 00 00 34 C039AB: 00 00 00 34 C039AF: 00 00 00 34 C039B3: A5 E6 LDA $E6 C039B5: D0 01 BNE $39B8 (+1) C039B7: 60 RTS C039B8: A4 06 LDY $06 (Y = 0) C039BA: 84 E9 STY $E9 C039BC: 84 23 STY $23 C039BE: 64 E5 STZ $E5 C039C0: A5 E6 LDA $E6 C039C2: 48 PHA C039C3: A4 E9 LDY $E9 C039C5: AD 9F 16 LDA $169F C039C8: F0 08 BEQ $39D2 (+8) C039CA: C0 28 00 CPY #$0028 C039CD: B0 03 BCS $39D2 (+3) C039CF: 4C 67 3B JMP $3B67 C039D2: B9 85 14 LDA $1485,Y C039D5: 29 01 AND #$01 C039D7: D0 03 BNE $39DC (+3) (BEQ backwards!) C039D9: 4C 67 3B JMP $3B67 C039DC: B9 7E 14 LDA $147E,Y C039DF: 29 70 AND #$70 C039E1: F0 28 BEQ $3A0B (+40) C039E3: C9 50 CMP #$50 C039E5: F0 24 BEQ $3A0B (+36) C039E7: 4A 4A LSR x2 C039E9: 85 08 STA $08 C039EB: B9 7E 14 LDA $147E,Y C039EE: 29 03 AND #$03 C039F0: AA TAX C039F1: BF 88 3B C0 LDA $C03B88,X C039F5: AA TAX C039F6: A5 3E LDA $3E C039F8: 4A LSR A C039F9: CA DEX C039FA: D0 FC BNE $39F8 (-4) C039FC: 29 03 AND #$03 C039FE: 05 08 ORA $08 C03A00: AA TAX C03A01: BF 8C 3B C0 LDA $C03B8C,X C03A05: 18 CLC C03A06: 79 87 14 ADC $1487,Y C03A09: 80 55 BRA $3A60 (+85) C03A0B: B9 7C 14 LDA $147C,Y C03A0E: 29 7F AND #$7F C03A10: C9 10 CMP #$10 C03A12: 90 04 BCC $3A18 (+4) C03A14: C9 40 CMP #$40 C03A16: 90 48 BCC $3A60 (+72) C03A18: B9 88 14 LDA $1488,Y C03A1B: D0 2A BNE $3A47 (+42) C03A1D: B9 85 14 LDA $1485,Y C03A20: 29 08 AND #$08 C03A22: F0 23 BEQ $3A47 (+35) C03A24: 64 08 STZ $08 C03A26: B9 7E 14 LDA $147E,Y C03A29: 29 08 AND #$08 C03A2B: D0 05 BNE $3A32 (+5) C03A2D: B9 7D 14 LDA $147D,Y C03A30: 30 0C BMI $3A3E (+12) C03A32: B9 7D 14 LDA $147D,Y C03A35: 29 20 AND #$20 C03A37: 18 CLC C03A38: 2A 2A 2A 2A ROL x4 C03A3C: 85 08 STA $08 C03A3E: B9 7C 14 LDA $147C,Y C03A41: 29 7F AND #$7F C03A43: 05 08 ORA $08 C03A45: 80 19 BRA $3A60 (+25) C03A47: B9 7C 14 LDA $147C,Y C03A4A: 30 04 BMI $3A50 (+4) C03A4C: 29 7F AND #$7F C03A4E: 80 10 BRA $3A60 (+16) C03A50: B9 7D 14 LDA $147D,Y C03A53: 29 20 AND #$20 C03A55: 4A (x5) LSR x5 C03A5A: 18 CLC C03A5B: 79 7C 14 ADC $147C,Y C03A5E: 29 7F AND #$7F C03A60: 85 08 STA $08 C03A62: C9 08 CMP #$08 C03A64: B0 10 BCS $3A76 (+16) C03A66: B9 7E 14 LDA $147E,Y C03A69: 29 70 AND #$70 C03A6B: C9 50 CMP #$50 C03A6D: D0 07 BNE $3A76 (+7) C03A6F: A5 08 LDA $08 C03A71: 18 CLC C03A72: 69 40 ADC #$40 C03A74: 85 08 STA $08 C03A76: A5 08 LDA $08 C03A78: C2 20 REP #$20 (16-bit A) C03A7A: 0A 0A 0A 0A ASL x4 C03A7E: AA TAX C03A7F: A4 E9 LDY $E9 C03A81: B9 77 14 LDA $1477,Y C03A84: 4A 4A 4A LSR x3 C03A87: 18 CLC C03A88: 69 10 00 ADC #$0010 (16) C03A8B: 38 SEC C03A8C: E5 61 SBC $61 C03A8E: 29 FF 07 AND #$07FF C03A91: C9 00 02 CMP #$0200 (512) C03A94: 90 03 BCC $3A99 (+3) C03A96: 4C 67 3B JMP $3B67 C03A99: 4A LSR A C03A9A: 85 0D STA $0D C03A9C: DA PHX C03A9D: B9 85 14 LDA $1485,Y C03AA0: 29 04 00 AND #$0004 C03AA3: D0 09 BNE $3AAE (+9) C03AA5: B9 88 14 LDA $1488,Y C03AA8: 29 FF 00 AND #$00FF C03AAB: 4A LSR A C03AAC: 80 08 BRA $3AB6 (+8) C03AAE: B9 88 14 LDA $1488,Y C03AB1: 29 FF 00 AND #$00FF C03AB4: 4A 4A LSR x2 C03AB6: AA TAX C03AB7: BF DB 22 C0 LDA $C022DB,X C03ABB: 29 FF 00 AND #$00FF C03ABE: 0A ASL A C03ABF: 85 0F STA $0F C03AC1: FA PLX C03AC2: B9 79 14 LDA $1479,Y C03AC5: 4A 4A 4A LSR x3 C03AC8: 18 CLC C03AC9: 69 10 00 ADC #$0010 (16) C03ACC: 38 SEC C03ACD: E5 63 SBC $63 C03ACF: 38 SEC C03AD0: E5 0F SBC $0F C03AD2: 29 FF 07 AND #$07FF C03AD5: C9 F0 07 CMP #$07F0 C03AD8: B0 08 BCS $3AE2 (+8) C03ADA: C9 E0 01 CMP #$01E0 C03ADD: 90 03 BCC $3AE2 (+3) C03ADF: 4C 67 3B JMP $3B67 C03AE2: 4A LSR A C03AE3: 85 0F STA $0F C03AE5: B9 77 14 LDA $1477,Y C03AE8: 4A (x6) LSR x6 C03AEE: 29 01 00 AND #$0001 C03AF1: 18 CLC C03AF2: 65 0F ADC $0F C03AF4: 85 0F STA $0F C03AF6: A5 06 LDA $06 (A = 0) C03AF8: E2 20 SEP #$20 (8-bit A) C03AFA: A4 23 LDY $23 C03AFC: A5 0D LDA $0D C03AFE: 38 SEC C03AFF: ED A0 10 SBC $10A0 C03B02: 99 44 02 STA $0244,Y C03B05: 99 1C 03 STA $031C,Y C03B08: 38 SEC C03B09: E9 08 SBC #$08 (8) C03B0B: 99 40 02 STA $0240,Y C03B0E: 99 18 03 STA $0318,Y C03B11: A5 0F LDA $0F C03B13: 38 SEC C03B14: ED A2 10 SBC $10A2 C03B17: 38 SEC C03B18: E9 03 SBC #$03 (3) C03B1A: 99 19 03 STA $0319,Y C03B1D: 99 1D 03 STA $031D,Y C03B20: 38 SEC C03B21: E9 08 SBC #$08 (8) C03B23: 99 41 02 STA $0241,Y C03B26: 99 45 02 STA $0245,Y C03B29: C2 20 REP #$20 (16-bit A) C03B2B: A4 E9 LDY $E9 C03B2D: BF 97 2A C0 LDA $C02A97,X C03B31: 18 CLC C03B32: 79 81 14 ADC $1481,Y C03B35: A4 23 LDY $23 C03B37: 99 42 02 STA $0242,Y C03B3A: A4 E9 LDY $E9 C03B3C: BF 9B 2A C0 LDA $C02A9B,X C03B40: 18 CLC C03B41: 79 81 14 ADC $1481,Y C03B44: A4 23 LDY $23 C03B46: 99 46 02 STA $0246,Y C03B49: A4 E9 LDY $E9 C03B4B: BF 9F 2A C0 LDA $C02A9F,X C03B4F: 18 CLC C03B50: 79 83 14 ADC $1483,Y C03B53: A4 23 LDY $23 C03B55: 99 1A 03 STA $031A,Y C03B58: A4 E9 LDY $E9 C03B5A: BF A3 2A C0 LDA $C02AA3,X C03B5E: 18 CLC C03B5F: 79 83 14 ADC $1483,Y C03B62: A4 23 LDY $23 C03B64: 99 1E 03 STA $031E,Y C03B67: C2 20 REP #$20 (16-bit A) C03B69: A5 23 LDA $23 C03B6B: 18 CLC C03B6C: 69 08 00 ADC #$0008 (8) C03B6F: 85 23 STA $23 C03B71: A5 E9 LDA $E9 C03B73: 18 CLC C03B74: 69 14 00 ADC #$0014 (20) C03B77: 85 E9 STA $E9 C03B79: A5 06 LDA $06 (A = 0) C03B7B: E2 20 SEP #$20 (8-bit A) C03B7D: 68 PLA C03B7E: 3A DEC A C03B7F: F0 03 BEQ $3B84 (+3) C03B81: 4C C2 39 JMP $39C2 C03B84: 20 8E 35 JSR $358E (JMP!) C03B87: 60 RTS C03B88: 03 04 05 02 C03B8C: 00 00 00 00 C03B90: 00 00 00 00 C03B94: 00 01 00 01 C03B98: 00 01 02 03 C03B9C: 00 04 00 04 C03BA0: 00 00 00 00 C03BA4: 00 00 00 00 C03BA8: 00 00 00 00 C03BAC: A5 E6 LDA $E6 C03BAE: D0 01 BNE $3BB1 (+1) C03BB0: 60 RTS C03BB1: 64 E5 STZ $E5 C03BB3: A4 06 LDY $06 C03BB5: 84 E9 STY $E9 C03BB7: A4 E9 LDY $E9 C03BB9: A5 57 LDA $57 C03BBB: F0 08 BEQ $3BC5 (+8) C03BBD: B9 86 14 LDA $1486,Y C03BC0: D0 1C BNE $3BDE (+28) C03BC2: 4C 74 3C JMP $3C74 C03BC5: B9 7B 14 LDA $147B,Y C03BC8: 10 03 BPL $3BCD (+3) C03BCA: 4C 48 3C JMP $3C48 C03BCD: B9 7E 14 LDA $147E,Y C03BD0: 29 08 AND #$08 C03BD2: D0 0A BNE $3BDE (+10) C03BD4: B9 7D 14 LDA $147D,Y C03BD7: 29 80 AND #$80 C03BD9: F0 03 BEQ $3BDE (+3) C03BDB: 4C 48 3C JMP $3C48 (BNE!) C03BDE: B9 7B 14 LDA $147B,Y C03BE1: 29 7F AND #$7F C03BE3: D0 03 BNE $3BE8 (+3) C03BE5: 4C 48 3C JMP $3C48 (BEQ!) C03BE8: A4 E9 LDY $E9 C03BEA: B9 85 14 LDA $1485,Y C03BED: 29 02 AND #$02 C03BEF: D0 07 BNE $3BF8 (+7) C03BF1: B9 7E 14 LDA $147E,Y (NPC speed index) C03BF4: 29 03 AND #$03 C03BF6: 80 02 BRA $3BFA (+2) C03BF8: A9 00 LDA #$00 (0) C03BFA: 0A ASL A (Multiply by 2) C03BFB: AA TAX (Move to X) C03BFC: B9 7B 14 LDA $147B,Y (NPC movement direction) C03BFF: 3A DEC A C03C00: F0 08 BEQ $3C0A (+8) (Branch if up) C03C02: 3A DEC A C03C03: F0 14 BEQ $3C19 (+20) (Branch if right) C03C05: 3A DEC A C03C06: F0 20 BEQ $3C28 (+32) (Branch if down) C03C08: 80 2D BRA $3C37 (+45) (Branch if left) C03C0A: C2 20 REP #$20 (16-bit A) C03C0C: B9 79 14 LDA $1479,Y (NPC Y-coordinate) C03C0F: 38 SEC C03C10: FF AB 3C C0 SBC $C03CAB,X (Subtract speed) C03C14: 99 79 14 STA $1479,Y (NPC moves up) C03C17: 80 2B BRA $3C44 (+43) C03C19: C2 20 REP #$20 (16-bit A) C03C1B: B9 77 14 LDA $1477,Y (NPC X-coordinate) C03C1E: 18 CLC C03C1F: 7F AB 3C C0 ADC $C03CAB,X (Add speed) C03C23: 99 77 14 STA $1477,Y (NPC moves right) C03C26: 80 1C BRA $3C44 (+28) C03C28: C2 20 REP #$20 (16-bit A) C03C2A: B9 79 14 LDA $1479,Y (NPC Y-coordinate) C03C2D: 18 CLC C03C2E: 7F AB 3C C0 ADC $C03CAB,X (Add speed) C03C32: 99 79 14 STA $1479,Y (NPC moves down) C03C35: 80 0D BRA $3C44 (+13) C03C37: C2 20 REP #$20 (16-bit A) C03C39: B9 77 14 LDA $1477,Y (NPC X-coordinate) C03C3C: 38 SEC C03C3D: FF AB 3C C0 SBC $C03CAB,X (Subtract speed) C03C41: 99 77 14 STA $1477,Y (NPC moves left) C03C44: A5 06 LDA $06 (A = 0) C03C46: E2 20 SEP #$20 (8-bit A) C03C48: B9 85 14 LDA $1485,Y C03C4B: 29 02 AND #$02 C03C4D: D0 07 BNE $3C56 (+7) C03C4F: B9 7E 14 LDA $147E,Y (NPC speed index) C03C52: 29 03 AND #$03 C03C54: 80 02 BRA $3C58 (+2) C03C56: A9 00 LDA #$00 (0) C03C58: AA TAX C03C59: B9 7D 14 LDA $147D,Y C03C5C: 18 CLC C03C5D: 7F B3 3C C0 ADC $C03CB3,X C03C61: 99 7D 14 STA $147D,Y C03C64: B9 88 14 LDA $1488,Y C03C67: F0 0B BEQ $3C74 (+11) C03C69: B9 88 14 LDA $1488,Y C03C6C: 38 SEC C03C6D: FF B7 3C C0 SBC $C03CB7,X C03C71: 99 88 14 STA $1488,Y C03C74: A5 57 LDA $57 C03C76: F0 19 BEQ $3C91 (+25) C03C78: B9 86 14 LDA $1486,Y C03C7B: F0 14 BEQ $3C91 (+20) C03C7D: B9 7D 14 LDA $147D,Y C03C80: 29 7F AND #$7F C03C82: D0 0D BNE $3C91 (+13) C03C84: B9 88 14 LDA $1488,Y C03C87: D0 08 BNE $3C91 (+8) C03C89: A9 00 LDA #$00 (0) C03C8B: 99 86 14 STA $1486,Y C03C8E: 99 7B 14 STA $147B,Y C03C91: C2 20 REP #$20 (16-bit A) C03C93: A5 E9 LDA $E9 C03C95: 18 CLC C03C96: 69 14 00 ADC #$0014 (20) C03C99: 85 E9 STA $E9 C03C9B: A5 06 LDA $06 (A = 0) C03C9D: E2 20 SEP #$20 (8-bit A) C03C9F: E6 E5 INC $E5 C03CA1: A5 E5 LDA $E5 C03CA3: C5 E6 CMP $E6 C03CA5: F0 03 BEQ $3CAA (+3) C03CA7: 4C B7 3B JMP $3BB7 C03CAA: 60 RTS (NPC walking speeds.) C03CAB: 10 00 C03CAD: 04 00 C03CAF: 08 00 C03CB1: 20 00 (Some other data indexed the same way as walking speed.) C03CB3: 08 C03CB4: 02 C03CB5: 04 C03CB6: 10 C03CB7: 04 C03CB8: 01 C03CB9: 02 C03CBA: 08 (Returns, I believe, a tile index from preloaded values for X- and Y-coordinates.) C03CBB: A5 76 LDA $76 (Y-coordinate) C03CBD: 29 3F AND #$3F (MOD 64) C03CBF: EB XBA (Multiply by 256) C03CC0: C2 20 REP #$20 (16-bit A) C03CC2: 4A 4A LSR x2 (Divide by 4 - overall, multiply by 64) C03CC4: 85 0D STA $0D (Init tile index) C03CC6: A5 75 LDA $75 (X-coordinate) C03CC8: 29 3F 00 AND #$003F (MOD 64) C03CCB: 05 0D ORA $0D (Add to tile index) C03CCD: AA TAX (Move to X) C03CCE: A5 06 LDA $06 (A = 0) C03CD0: E2 20 SEP #$20 (8-bit A) C03CD2: 60 RTS (Clears $7F:3000-$7F:3FFF.) C03CD3: A2 00 10 LDX #$1000 C03CD6: A9 00 LDA #$00 (0) C03CD8: 9F FF 2F 7F STA $7F2FFF,X C03CDC: CA DEX C03CDD: D0 F9 BNE $3CD8 (-7) C03CDF: 60 RTS (Places an NPC object into tile data.) C03CE0: DA PHX (Preserve X) C03CE1: 20 BB 3C JSR $3CBB (Get tile index) C03CE4: C2 20 REP #$20 (16-bit A) C03CE6: 8A TXA C03CE7: 99 89 14 STA $1489,Y (NPC tile index) C03CEA: A5 06 LDA $06 (A = 0) C03CEC: E2 20 SEP #$20 (8-bit A) C03CEE: A5 E5 LDA $E5 C03CF0: 09 80 ORA #$80 C03CF2: 9F 00 30 7F STA $7F3000,X (Place NPC in that tile) C03CF6: FA PLX C03CF7: 60 RTS (Clears an NPC's location in tile data.) C03CF8: DA PHX (Preserve X) C03CF9: C2 20 REP #$20 (16-bit A) C03CFB: B9 89 14 LDA $1489,Y (NPC tile index) C03CFE: AA TAX C03CFF: A5 06 LDA $06 (A = 0) C03D01: E2 20 SEP #$20 (8-bit A) C03D03: A9 00 LDA #$00 (0) C03D05: 9F 00 30 7F STA $7F3000,X (Clear tile data) C03D09: FA PLX (Restore X) C03D0A: 60 RTS (Reads a tile data entry.) C03D0B: DA PHX (Preserve X) C03D0C: 20 BB 3C JSR $3CBB (Calculate tile index) C03D0F: BF 00 30 7F LDA $7F3000,X (Read entry) C03D13: FA PLX (Restore X) C03D14: 60 RTS C03D15: DA PHX C03D16: C2 20 REP #$20 (16-bit A) C03D18: 29 FF 00 AND #$00FF C03D1B: 0A ASL A C03D1C: AA TAX C03D1D: A5 06 LDA $06 (A = 0) C03D1F: E2 20 SEP #$20 (8-bit A) C03D21: BD 86 11 LDA $1186,X C03D24: 29 83 AND #$83 C03D26: FA PLX C03D27: 60 RTS C03D28: A5 E6 LDA $E6 C03D2A: D0 01 BNE $3D2D (+1) C03D2C: 60 RTS C03D2D: 20 98 3E JSR $3E98 C03D30: A2 00 65 LDX #$6500 C03D33: 86 2E STX $2E (VRAM destination address) C03D35: A6 06 LDX $06 C03D37: 86 E9 STX $E9 C03D39: A6 E7 LDX $E7 C03D3B: 86 29 STX $29 C03D3D: A9 00 LDA #$00 C03D3F: 48 PHA C03D40: A9 DA LDA #$DA C03D42: 85 25 STA $25 (DMA source bank) C03D44: A6 29 LDX $29 C03D46: 68 PLA C03D47: 48 PHA C03D48: F0 25 BEQ $3D6F (+37) C03D4A: BF C2 59 CE LDA $CE59C2,X (NPC graphic ID) C03D4E: DF BB 59 CE CMP $CE59BB,X (Same as last one?) C03D52: D0 1B BNE $3D6F (+27) (Branch if not) C03D54: A5 55 LDA $55 C03D56: D0 14 BNE $3D6C (+20) C03D58: C2 20 REP #$20 (16-bit A) C03D5A: A6 E9 LDX $E9 C03D5C: BD 6D 14 LDA $146D,X C03D5F: 9D 81 14 STA $1481,X C03D62: BD 6F 14 LDA $146F,X C03D65: 9D 83 14 STA $1483,X C03D68: A5 06 LDA $06 (A = 0) C03D6A: E2 20 SEP #$20 (8-bit A) C03D6C: 4C 78 3E JMP $3E78 C03D6F: BF C2 59 CE LDA $CE59C2,X (NPC graphic ID) C03D73: C9 FF CMP #$FF C03D75: F0 1E BEQ $3D95 (+30) C03D77: A5 55 LDA $55 C03D79: D0 2F BNE $3DAA (+47) C03D7B: C2 20 REP #$20 (16-bit A) C03D7D: A5 2E LDA $2E C03D7F: 38 SEC C03D80: E9 00 60 SBC #$6000 C03D83: 4A 4A 4A 4A LSR x4 C03D87: A6 E9 LDX $E9 C03D89: 9D 81 14 STA $1481,X C03D8C: 9D 83 14 STA $1483,X C03D8F: A5 06 LDA $06 (A = 0) C03D91: E2 20 SEP #$20 (8-bit A) C03D93: 80 15 BRA $3DAA (+21) C03D95: A5 55 LDA $55 C03D97: D0 0E BNE $3DA7 (+14) C03D99: A6 E9 LDX $E9 C03D9B: 9E 81 14 STZ $1481,X C03D9E: 9E 82 14 STZ $1482,X C03DA1: 9E 83 14 STZ $1483,X C03DA4: 9E 84 14 STZ $1484,X C03DA7: 4C 78 3E JMP $3E78 C03DAA: A6 29 LDX $29 C03DAC: BF C2 59 CE LDA $CE59C2,X (NPC graphic ID) C03DB0: C9 67 CMP #$67 (103) C03DB2: 90 20 BCC $3DD4 (+32) C03DB4: 38 SEC (Not necessary!) C03DB5: E9 67 SBC #$67 (103) (Subtract 103) C03DB7: C2 20 REP #$20 (16-bit A) C03DB9: EB XBA C03DBA: 0A 0A 0A ASL x3 (Multiply by 2,048) C03DBD: 18 CLC C03DBE: 69 00 2A ADC #$2A00 (Add this) C03DC1: 85 23 STA $23 (DMA source address) C03DC3: A5 06 LDA $06 (A = 0) C03DC5: E2 20 SEP #$20 (8-bit A) C03DC7: A9 04 LDA #$04 (4) C03DC9: 85 09 STA $09 (Four tiles) C03DCB: E6 25 INC $25 C03DCD: A9 01 LDA #$01 (1) C03DCF: 8D 9F 16 STA $169F C03DD2: 80 7C BRA $3E50 (+124) C03DD4: C9 52 CMP #$52 (82) C03DD6: 90 15 BCC $3DED (+21) C03DD8: 38 SEC (Not necessary!) C03DD9: E9 52 SBC #$52 (82) (Subtract 82) C03DDB: C2 20 REP #$20 (16-bit A) C03DDD: EB XBA C03DDE: 0A ASL A (Multiply by 512) C03DDF: 85 23 STA $23 (DMA source address) C03DE1: A5 06 LDA $06 (A = 0) C03DE3: E2 20 SEP #$20 (8-bit A) C03DE5: A9 01 LDA #$01 (1) C03DE7: 85 09 STA $09 (One tile) C03DE9: E6 25 INC $25 C03DEB: 80 63 BRA $3E50 (+99) C03DED: C9 4B CMP #$4B (75) C03DEF: 90 27 BCC $3E18 (+39) C03DF1: 38 SEC (Not necessary!) C03DF2: E9 4B SBC #$4B (75) (Subtract 75) C03DF4: C2 20 REP #$20 (16-bit A) C03DF6: EB XBA C03DF7: 0A 0A 0A ASL x3 (Multiply by 2,048) C03DFA: 18 CLC C03DFB: 69 00 C8 ADC #$C800 C03DFE: 85 23 STA $23 (DMA source address) C03E00: A5 06 LDA $06 (A = 0) C03E02: E2 20 SEP #$20 (8-bit A) C03E04: A6 29 LDX $29 C03E06: BF C1 59 CE LDA $CE59C1,X C03E0A: 4A (x6) LSR x6 (Get number of transfers) C03E10: D0 02 BNE $3E14 (+2) (If it's zero...) C03E12: A9 04 LDA #$04 (4) (...make it 4 by default) C03E14: 85 09 STA $09 C03E16: 80 38 BRA $3E50 (+56) C03E18: C9 32 CMP #$32 (50) C03E1A: 90 26 BCC $3E42 (+38) C03E1C: 38 SEC C03E1D: E9 32 SBC #$32 (50) (Subtract 50) C03E1F: C2 20 REP #$20 (16-bit A) C03E21: EB XBA C03E22: 0A 0A ASL x2 (Multiply by 1,024) C03E24: 18 CLC C03E25: 69 00 64 ADC #$6400 C03E28: 85 23 STA $23 (DMA source address) C03E2A: A5 06 LDA $06 (A = 0) C03E2C: E2 20 SEP #$20 (8-bit A) C03E2E: A6 29 LDX $29 C03E30: BF C1 59 CE LDA $CE59C1,X C03E34: 4A (x6) LSR x6 (Number of transfers) C03E3A: D0 02 BNE $3E3E (+2) (If it's zero...) C03E3C: A9 02 LDA #$02 (2) (...make it 2 by default) C03E3E: 85 09 STA $09 C03E40: 80 0E BRA $3E50 (+14) C03E42: C2 20 REP #$20 (16-bit A) C03E44: EB XBA C03E45: 0A ASL A (Multiply by 512) C03E46: 85 23 STA $23 (DMA source address) C03E48: A5 06 LDA $06 (A = 0) C03E4A: E2 20 SEP #$20 (8-bit A) C03E4C: A9 01 LDA #$01 (1) C03E4E: 85 09 STA $09 (One transfer only) C03E50: A2 00 02 LDX #$0200 (512) C03E53: 86 2C STX $2C (DMA transfer size) C03E55: 20 BC 4C JSR $4CBC (Start DMA) C03E58: C2 20 REP #$20 (16-bit A) C03E5A: A5 2E LDA $2E C03E5C: 18 CLC C03E5D: 69 00 01 ADC #$0100 (256) C03E60: 85 2E STA $2E (Increase VRAM dest addr) C03E62: A5 23 LDA $23 C03E64: 18 CLC C03E65: 69 00 02 ADC #$0200 (512) C03E68: 85 23 STA $23 (Increase DMA source addr) C03E6A: E2 20 SEP #$20 (8-bit A) C03E6C: EB XBA C03E6D: D0 02 BNE $3E71 (+2) (If there was overflow...) C03E6F: E6 25 INC $25 (...increase source bank) C03E71: A9 00 LDA #$00 C03E73: EB XBA (Zero out high byte of A) C03E74: C6 09 DEC $09 (More transfers to do?) C03E76: D0 DD BNE $3E55 (-35) (If so, loop) C03E78: C2 20 REP #$20 (16-bit A) C03E7A: A5 E9 LDA $E9 C03E7C: 18 CLC C03E7D: 69 14 00 ADC #$0014 (20) C03E80: 85 E9 STA $E9 C03E82: A5 29 LDA $29 C03E84: 18 CLC C03E85: 69 07 00 ADC #$0007 (7) C03E88: 85 29 STA $29 C03E8A: A5 06 LDA $06 (A = 0) C03E8C: E2 20 SEP #$20 (8-bit A) C03E8E: 68 PLA C03E8F: 1A INC A C03E90: C5 E6 CMP $E6 C03E92: F0 03 BEQ $3E97 (+3) C03E94: 4C 3F 3D JMP $3D3F C03E97: 60 RTS C03E98: C2 20 REP #$20 (16-bit A) C03E9A: AD 0C 11 LDA $110C C03E9D: 0A ASL A C03E9E: AA TAX C03E9F: BF C0 59 CE LDA $CE59C0,X (NPC action ID) C03EA3: 85 E7 STA $E7 C03EA5: A5 06 LDA $06 (A = 0) C03EA7: E2 20 SEP #$20 (8-bit A) C03EA9: 60 RTS (Initializes NPC locations on map load.) C03EAA: 20 D3 3C JSR $3CD3 (Clear tile data) C03EAD: C2 20 REP #$20 (16-bit A) C03EAF: AD 0C 11 LDA $110C (Map's NPC list index?) C03EB2: 0A ASL A (Multiply by 2) C03EB3: AA TAX (Move to X) C03EB4: BF C0 59 CE LDA $CE59C0,X (Get NPC list pointer) C03EB8: 85 E7 STA $E7 C03EBA: BF C2 59 CE LDA $CE59C2,X (Get next list pointer) C03EBE: 38 SEC (Subtract to get the size of the list in bytes) C03EBF: FF C0 59 CE SBC $CE59C0,X (SBC $E7!) C03EC3: 8D 04 42 STA $4204 (Store dividend) C03EC6: A5 06 LDA $06 (A = 0) C03EC8: E2 20 SEP #$20 (8-bit A) C03ECA: A9 07 LDA #$07 (7) C03ECC: 8D 06 42 STA $4206 (Divide by 7) C03ECF: 48 PHA (3 cycles) C03ED0: 68 PLA (7 cycles) C03ED1: 48 PHA (10 cycles) C03ED2: 68 PLA (14 cycles) C03ED3: EA NOP (16 cycles) C03ED4: AD 14 42 LDA $4214 (Get quotient) C03ED7: 85 E6 STA $E6 (Store number of NPCs) C03ED9: D0 01 BNE $3EDC (+1) (If no NPCs...) C03EDB: 60 RTS (...exit) C03EDC: 20 28 3D JSR $3D28 C03EDF: A4 06 LDY $06 (Y = 0) C03EE1: 84 E9 STY $E9 C03EE3: 64 E5 STZ $E5 C03EE5: A4 E9 LDY $E9 C03EE7: A6 E7 LDX $E7 C03EE9: BF C6 59 CE LDA $CE59C6,X C03EED: 29 07 AND #$07 C03EEF: 0A ASL A C03EF0: 85 0F STA $0F C03EF2: BF C6 59 CE LDA $CE59C6,X C03EF6: 29 08 AND #$08 C03EF8: 09 10 ORA #$10 C03EFA: 0A ASL A C03EFB: 05 0F ORA $0F C03EFD: C2 20 REP #$20 (16-bit A) C03EFF: EB XBA C03F00: 19 81 14 ORA $1481,Y C03F03: 99 81 14 STA $1481,Y C03F06: A5 06 LDA $06 (A = 0) C03F08: E2 20 SEP #$20 (8-bit A) C03F0A: BF C6 59 CE LDA $CE59C6,X C03F0E: 29 10 AND #$10 C03F10: 09 20 ORA #$20 C03F12: 05 0F ORA $0F C03F14: C2 20 REP #$20 (16-bit A) C03F16: EB XBA C03F17: 19 83 14 ORA $1483,Y C03F1A: 99 83 14 STA $1483,Y C03F1D: A5 06 LDA $06 (A = 0) C03F1F: E2 20 SEP #$20 (8-bit A) C03F21: BF C5 59 CE LDA $CE59C5,X C03F25: 99 7E 14 STA $147E,Y C03F28: 29 70 AND #$70 C03F2A: F0 1B BEQ $3F47 (+27) C03F2C: C9 50 CMP #$50 C03F2E: F0 17 BEQ $3F47 (+23) C03F30: DA PHX C03F31: BF C6 59 CE LDA $CE59C6,X C03F35: 29 E0 AND #$E0 C03F37: 4A (x5) LSR x5 C03F3C: AA TAX C03F3D: BF 00 40 C0 LDA $C04000,X C03F41: 99 87 14 STA $1487,Y C03F44: FA PLX C03F45: 80 1C BRA $3F63 (+28) C03F47: BF C6 59 CE LDA $CE59C6,X C03F4B: 29 E0 AND #$E0 C03F4D: 4A (x5) LSR x5 C03F52: 0A ASL A C03F53: 99 7C 14 STA $147C,Y C03F56: C9 08 CMP #$08 C03F58: 90 04 BCC $3F5E (+4) C03F5A: A9 00 LDA #$00 C03F5C: 80 02 BRA $3F60 (+2) C03F5E: 4A LSR A C03F5F: 1A INC A C03F60: 99 7B 14 STA $147B,Y C03F63: C2 20 REP #$20 (16-bit A) C03F65: BF C0 59 CE LDA $CE59C0,X C03F69: 29 FF 3F AND #$3FFF C03F6C: 99 7F 14 STA $147F,Y C03F6F: A5 06 LDA $06 (A = 0) C03F71: E2 20 SEP #$20 (8-bit A) C03F73: BF C3 59 CE LDA $CE59C3,X (NPC X-coordinate) C03F77: 29 3F AND #$3F C03F79: C2 20 REP #$20 (16-bit A) C03F7B: EB XBA C03F7C: 99 77 14 STA $1477,Y C03F7F: A5 06 LDA $06 (A = 0) C03F81: E2 20 SEP #$20 (8-bit A) C03F83: BF C4 59 CE LDA $CE59C4,X (NPC-Y-coordinate) C03F87: 29 3F AND #$3F C03F89: C2 20 REP #$20 (16-bit A) C03F8B: EB XBA C03F8C: 99 79 14 STA $1479,Y C03F8F: A5 06 LDA $06 (A = 0) C03F91: E2 20 SEP #$20 (8-bit A) C03F93: A9 00 LDA #$00 (0) C03F95: 99 7D 14 STA $147D,Y C03F98: 99 86 14 STA $1486,Y C03F9B: 99 88 14 STA $1488,Y C03F9E: BF C3 59 CE LDA $CE59C3,X C03FA2: 29 C0 AND #$C0 C03FA4: 99 85 14 STA $1485,Y C03FA7: BF C4 59 CE LDA $CE59C4,X C03FAB: 29 C0 AND #$C0 C03FAD: 4A 4A LSR x2 C03FAF: 19 85 14 ORA $1485,Y C03FB2: 09 08 ORA #$08 C03FB4: 99 85 14 STA $1485,Y C03FB7: C2 20 REP #$20 (16-bit A) C03FB9: B9 7F 14 LDA $147F,Y C03FBC: E2 20 SEP #$20 C03FBE: 5A PHY C03FBF: 20 C1 C9 JSR $C9C1 C03FC2: 7A PLY C03FC3: C9 00 CMP #$00 (0) C03FC5: F0 17 BEQ $3FDE (+23) C03FC7: B9 78 14 LDA $1478,Y (NPC X-coordinate) C03FCA: 85 75 STA $75 C03FCC: B9 7A 14 LDA $147A,Y (NPC Y-coordinate) C03FCF: 85 76 STA $76 C03FD1: 20 E0 3C JSR $3CE0 (Place NPC in tile data) C03FD4: A4 E9 LDY $E9 C03FD6: B9 85 14 LDA $1485,Y C03FD9: 09 01 ORA #$01 C03FDB: 99 85 14 STA $1485,Y C03FDE: C2 20 REP #$20 (16-bit A) C03FE0: A5 E9 LDA $E9 C03FE2: 18 CLC C03FE3: 69 14 00 ADC #$0014 (20) C03FE6: 85 E9 STA $E9 C03FE8: A5 E7 LDA $E7 C03FEA: 18 CLC C03FEB: 69 07 00 ADC #$0007 (7) C03FEE: 85 E7 STA $E7 C03FF0: A5 06 LDA $06 (A = 0) C03FF2: E2 20 SEP #$20 (8-bit A) C03FF4: E6 E5 INC $E5 C03FF6: A5 E5 LDA $E5 C03FF8: C5 E6 CMP $E6 C03FFA: F0 03 BEQ $3FFF (+3) C03FFC: 4C E5 3E JMP $3EE5 C03FFF: 60 RTS C04000: 08 C04001: 09 C04002: 0A C04003: 0B C04004: 0C C04005: 22 C04006: 21 C04007: 0F (Changes RGB colours to grayscale.) C04008: A0 08 00 LDY #$0008 (8) C0400B: C2 20 REP #$20 (16-bit A) C0400D: B9 00 0C LDA $0C00,Y (Get colour from CGRAM) C04010: 29 1F 00 AND #$001F (Red component) C04013: 85 0D STA $0D C04015: B9 00 0C LDA $0C00,Y (Get colour again) C04018: 4A (x5) LSR x5 (Omit red component) C0401D: 85 0F STA $0F (Store to temp variable) C0401F: 29 1F 00 AND #$001F (Green component) C04022: 18 CLC C04023: 65 0D ADC $0D (Add to red component) C04025: 85 0D STA $0D C04027: A5 0F LDA $0F (Get colour again) C04029: 4A (x5) LSR x5 C0402E: 29 1F 00 AND #$001F (Blue component) C04031: 18 CLC C04032: 65 0D ADC $0D (Add to red and green) C04034: 8D 04 42 STA $4204 (Set dividend) C04037: A5 06 LDA $06 (A = 0) C04039: E2 20 SEP #$20 (8-bit A) C0403B: A9 03 LDA #$03 (3) C0403D: 8D 06 42 STA $4206 (Divide by 3 - IOW, we get the average of the red, green and blue intensities) C04040: C2 20 REP #$20 (16-bit A, 3 cycles) C04042: EA (x7) NOP x7 (14 more cycles) C04049: AD 14 42 LDA $4214 (Get average) C0404C: 0A (x5) ASL x5 (Set as blue component...) C04051: 0D 14 42 ORA $4214 (...green component...) C04054: 0A (x5) ASL x5 C04059: 0D 14 42 ORA $4214 (...and red component) C0405C: 99 00 0C STA $0C00,Y C0405F: A5 06 LDA $06 (A = 0) C04061: E2 20 SEP #$20 (8-bit A) C04063: C8 C8 INY x2 C04065: C0 00 02 CPY #$0200 (512) C04068: D0 A1 BNE $400B (-95) C0406A: 60 RTS C0406B: 8D 02 42 STA $4202 C0406E: A4 06 LDY $06 (Y = 0) C04070: C2 20 REP #$20 (16-bit A) C04072: B7 23 LDA [$23],Y C04074: 85 0D STA $0D C04076: 4A 4A 4A 4A LSR x4 C0407A: 29 3E 00 AND #$003E C0407D: 85 0F STA $0F C0407F: A5 0D LDA $0D C04081: EB XBA C04082: 4A LSR A C04083: 29 3E 00 AND #$003E C04086: 85 11 STA $11 C04088: A5 0D LDA $0D C0408A: 29 1F 00 AND #$001F C0408D: 0A ASL A C0408E: 85 0D STA $0D C04090: A5 06 LDA $06 (A = 0) C04092: E2 20 SEP #$20 (8-bit A) C04094: A5 0D LDA $0D C04096: 8D 03 42 STA $4203 C04099: EA EA EA EA NOP x4 C0409D: AD 17 42 LDA $4217 C040A0: 85 13 STA $13 C040A2: A5 11 LDA $11 C040A4: 8D 03 42 STA $4203 C040A7: EA EA EA EA NOP x4 C040AB: AD 17 42 LDA $4217 C040AE: 0A 0A ASL x2 C040B0: 29 7C AND #$7C C040B2: 85 14 STA $14 C040B4: A5 0F LDA $0F C040B6: 8D 03 42 STA $4203 C040B9: EA EA EA EA NOP x4 C040BD: AD 17 42 LDA $4217 C040C0: C2 20 REP #$20 (16-bit A) C040C2: EB XBA C040C3: 4A 4A 4A LSR x3 C040C6: 05 13 ORA $13 C040C8: 9D 00 0C STA $0C00,X C040CB: A5 06 LDA $06 (A = 0) C040CD: E2 20 SEP #$20 (8-bit A) C040CF: E8 E8 INX x2 C040D1: C8 C8 INY x2 C040D3: C4 2C CPY $2C C040D5: D0 99 BNE $4070 (-103) C040D7: 60 RTS C040D8: A9 80 LDA #$80 C040DA: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C040DD: 9C 0B 42 STZ $420B (All DMA channels off) C040E0: A9 01 LDA #$01 C040E2: 8D 00 43 STA $4300 (Double-reg, single-write) C040E5: A9 18 LDA #$18 C040E7: 8D 01 43 STA $4301 (DMA dest = $2118) C040EA: AE AD 16 LDX $16AD C040ED: 8E 16 21 STX $2116 (VRAM destination address) C040F0: A2 00 08 LDX #$0800 C040F3: 8E 05 43 STX $4305 (DMA transfer size) C040F6: A2 22 76 LDX #$7622 C040F9: 8E 02 43 STX $4302 (DMA source address) C040FC: A9 7F LDA #$7F C040FE: 8D 04 43 STA $4304 (DMA source bank = $7F) C04101: A9 01 LDA #$01 C04103: 8D 0B 42 STA $420B (Start DMA channel 0) C04106: 60 RTS C04107: 0A 0A ASL x2 C04109: AA TAX C0410A: BF 71 41 C0 LDA $C04171,X C0410E: 85 0D STA $0D C04110: BF 72 41 C0 LDA $C04172,X C04114: 85 0E STA $0E C04116: BF 73 41 C0 LDA $C04173,X C0411A: 85 0F STA $0F C0411C: BF 74 41 C0 LDA $C04174,X C04120: 85 10 STA $10 C04122: A9 7F LDA #$7F C04124: 48 PHA C04125: AB PLB C04126: A4 06 LDY $06 (Y = 0) C04128: B7 23 LDA [$23],Y C0412A: 25 0D AND $0D C0412C: 99 22 76 STA $7622,Y C0412F: C8 INY C04130: B7 23 LDA [$23],Y C04132: 25 0D AND $0D C04134: 99 22 76 STA $7622,Y C04137: C8 INY C04138: B7 23 LDA [$23],Y C0413A: 25 0E AND $0E C0413C: 99 22 76 STA $7622,Y C0413F: C8 INY C04140: B7 23 LDA [$23],Y C04142: 25 0E AND $0E C04144: 99 22 76 STA $7622,Y C04147: C8 INY C04148: B7 23 LDA [$23],Y C0414A: 25 0F AND $0F C0414C: 99 22 76 STA $7622,Y C0414F: C8 INY C04150: B7 23 LDA [$23],Y C04152: 25 0F AND $0F C04154: 99 22 76 STA $7622,Y C04157: C8 INY C04158: B7 23 LDA [$23],Y C0415A: 25 10 AND $10 C0415C: 99 22 76 STA $7622,Y C0415F: C8 INY C04160: B7 23 LDA [$23],Y C04162: 25 10 AND $10 C04164: 99 22 76 STA $7622,Y C04167: C8 INY C04168: C4 26 CPY $26 C0416A: D0 BC BNE $4128 (-68) C0416C: A9 00 LDA #$00 C0416E: 48 PHA C0416F: AB PLB C04170: 60 RTS C04171: 80 00 00 00 C04175: 80 00 08 00 C04179: 88 00 80 00 C0417D: 88 00 88 00 C04181: A8 00 88 00 C04185: A8 00 8A 00 C04189: AA 00 8A 00 C0418D: AA 00 AA 00 C04191: AA 40 AA 00 C04195: AA 44 AA 00 C04199: AA 44 AA 40 C0419D: AA 44 AA 44 C041A1: AA 54 AA 44 C041A5: AA 55 AA 44 C041A9: AA 55 AA 54 C041AD: AA 55 AA 55 C041B1: EA 55 AA 55 C041B5: EA 55 AE 55 C041B9: EE 55 AE 55 C041BD: EE 55 EE 55 C041C1: EE 75 EE 55 C041C5: EE 77 EE 55 C041C9: EE 77 EE 75 C041CD: EE 77 EE 77 C041D1: FE 77 EE 77 C041D5: FF 77 EE 77 C041D9: FF 77 FE 77 C041DD: FF 77 FF 77 C041E1: FF F7 FF 77 C041E5: FF FF FF 77 C041E9: FF FF FF 7F C041ED: FF FF FF FF C041F1: A6 06 LDX $06 C041F3: A9 00 LDA #$00 C041F5: 9D 58 1A STA $1A58,X C041F8: C2 20 REP #$20 (16-bit A) C041FA: 8A TXA C041FB: 18 CLC C041FC: 69 08 00 ADC #$0008 (8) C041FF: AA TAX C04200: A5 06 LDA $06 (A = 0) C04202: E2 20 SEP #$20 (8-bit A) C04204: E0 80 00 CPX #$0080 (128) C04207: D0 EA BNE $41F3 (-22) C04209: 60 RTS C0420A: A6 06 LDX $06 (X = 0) C0420C: 8E 56 1A STX $1A56 C0420F: A5 3F LDA $3F (Get frame counter) C04211: 4A LSR A C04212: B0 04 BCS $4218 (+4) C04214: A4 06 LDY $06 C04216: 80 03 BRA $421B (+3) C04218: A0 08 00 LDY #$0008 C0421B: 84 23 STY $23 C0421D: A4 23 LDY $23 C0421F: B9 58 1A LDA $1A58,Y C04222: D0 03 BNE $4227 (+3) C04224: 4C 40 44 JMP $4440 C04227: C9 10 CMP #$10 C04229: B0 F9 BCS $4224 (-7) C0422B: C2 20 REP #$20 (16-bit A) C0422D: AD 56 1A LDA $1A56 C04230: 4A 4A 4A 4A LSR x4 C04234: AA TAX C04235: A9 AA AA LDA #$AAAA C04238: 9D 00 04 STA $0400,X C0423B: 9D 02 04 STA $0402,X C0423E: 9D 08 04 STA $0408,X C04241: 9D 0A 04 STA $040A,X C04244: B9 5A 1A LDA $1A5A,Y C04247: 85 13 STA $13 C04249: B9 5C 1A LDA $1A5C,Y C0424C: 85 15 STA $15 C0424E: B9 58 1A LDA $1A58,Y C04251: 29 0E 00 AND #$000E C04254: 0A 0A ASL x2 C04256: AA TAX C04257: C0 40 00 CPY #$0040 C0425A: B0 06 BCS $4262 (+6) C0425C: 98 TYA C0425D: 29 30 00 AND #$0030 C04260: 80 07 BRA $4269 (+7) C04262: 98 TYA C04263: 29 30 00 AND #$0030 C04266: 09 80 00 ORA #$0080 C04269: 18 CLC C0426A: 6D 56 1A ADC $1A56 C0426D: A8 TAY C0426E: A5 06 LDA $06 (A = 0) C04270: E2 20 SEP #$20 (8-bit A) C04272: A5 53 LDA $53 C04274: D0 03 BNE $4279 (+3) C04276: 4C A8 43 JMP $43A8 C04279: C2 20 REP #$20 (16-bit A) C0427B: A5 13 LDA $13 C0427D: 38 SEC C0427E: E9 10 00 SBC #$0010 (16) C04281: 38 SEC C04282: E5 61 SBC $61 (Sub player X-step amount) C04284: 29 FF 07 AND #$07FF (MOD 2,048) C04287: C9 00 02 CMP #$0200 (512) C0428A: B0 3A BCS $42C6 (+58) C0428C: 4A LSR A C0428D: 85 0D STA $0D C0428F: A5 15 LDA $15 C04291: 38 SEC C04292: E9 10 00 SBC #$0010 C04295: 38 SEC C04296: E5 63 SBC $63 (Sub player Y-step amount) C04298: 29 FF 07 AND #$07FF (MOD 2,048) C0429B: C9 E0 07 CMP #$07E0 (2,016) C0429E: B0 05 BCS $42A5 (+5) C042A0: C9 E0 01 CMP #$01E0 (480) C042A3: B0 21 BCS $42C6 (+33) C042A5: 4A LSR A C042A6: 85 0F STA $0F C042A8: A5 06 LDA $06 (A = 0) C042AA: E2 20 SEP #$20 (8-bit A) C042AC: A5 0D LDA $0D (X-coordinate) C042AE: 99 00 02 STA $0200,Y (Write to DMA buffer) C042B1: A5 0F LDA $0F (Y-coordinate) C042B3: 99 01 02 STA $0201,Y (Write to DMA buffer) C042B6: BF 88 44 C0 LDA $C04488,X (Tile ID) C042BA: 99 02 02 STA $0202,Y (Write to DMA buffer) C042BD: BF 89 44 C0 LDA $C04489,X (Tile properties) C042C1: 99 03 02 STA $0203,Y C042C4: C2 20 REP #$20 (16-bit A) C042C6: A5 13 LDA $13 C042C8: 18 CLC C042C9: 69 10 00 ADC #$0010 (16) C042CC: 38 SEC C042CD: E5 61 SBC $61 (Sub player X-step amount) C042CF: 29 FF 07 AND #$07FF (MOD 2,048) C042D2: C9 00 02 CMP #$0200 (512) C042D5: B0 3A BCS $4311 (+58) C042D7: 4A LSR A C042D8: 85 0D STA $0D C042DA: A5 15 LDA $15 C042DC: 38 SEC C042DD: E9 10 00 SBC #$0010 (16) C042E0: 38 SEC C042E1: E5 63 SBC $63 (Sub player Y-step amount) C042E3: 29 FF 07 AND #$07FF (MOD 2,048) C042E6: C9 E0 07 CMP #$07E0 (2,016) C042E9: B0 05 BCS $42F0 (+5) C042EB: C9 E0 01 CMP #$01E0 (480) C042EE: B0 21 BCS $4311 (+33) C042F0: 4A LSR A C042F1: 85 0F STA $0F C042F3: A5 06 LDA $06 (A = 0) C042F5: E2 20 SEP #$20 (8-bit A) C042F7: A5 0D LDA $0D (X-coordinate) C042F9: 99 04 02 STA $0204,Y (Write to DMA buffer) C042FC: A5 0F LDA $0F C042FE: 99 05 02 STA $0205,Y C04301: BF 8A 44 C0 LDA $C0448A,X C04305: 99 06 02 STA $0206,Y C04308: BF 8B 44 C0 LDA $C0448B,X C0430C: 99 07 02 STA $0207,Y C0430F: C2 20 REP #$20 (16-bit A) C04311: A5 13 LDA $13 C04313: 38 SEC C04314: E9 10 00 SBC #$0010 C04317: 38 SEC C04318: E5 61 SBC $61 (Sub player X-step amount) C0431A: 29 FF 07 AND #$07FF (MOD 2,048) C0431D: C9 00 02 CMP #$0200 (512) C04320: B0 3A BCS $435C (+58) C04322: 4A LSR A C04323: 85 0D STA $0D C04325: A5 15 LDA $15 C04327: 18 CLC C04328: 69 10 00 ADC #$0010 (16) C0432B: 38 SEC C0432C: E5 63 SBC $63 (Sub player Y-step amount) C0432E: 29 FF 07 AND #$07FF (MOD 2,048) C04331: C9 E0 07 CMP #$07E0 (2,016) C04334: B0 05 BCS $433B (+5) C04336: C9 E0 01 CMP #$01E0 (480) C04339: B0 21 BCS $435C (+33) C0433B: 4A LSR A C0433C: 85 0F STA $0F C0433E: A5 06 LDA $06 (A = 0) C04340: E2 20 SEP #$20 (8-bit A) C04342: A5 0D LDA $0D (X-coordinate) C04344: 99 08 02 STA $0208,Y (Write to DMA buffer) C04347: A5 0F LDA $0F (Y-coordinate) C04349: 99 09 02 STA $0209,Y (Write to DMA buffer) C0434C: BF 8C 44 C0 LDA $C0448C,X (Tile ID) C04350: 99 0A 02 STA $020A,Y (Write to DMA buffer) C04353: BF 8D 44 C0 LDA $C0448D,X (Tile properties) C04357: 99 0B 02 STA $020B,Y (Write to DMA buffer) C0435A: C2 20 REP #$20 (16-bit A) C0435C: A5 13 LDA $13 C0435E: 18 CLC C0435F: 69 10 00 ADC #$0010 (16) C04362: 38 SEC C04363: E5 61 SBC $61 (Sub player X-step amount) C04365: 29 FF 07 AND #$07FF (MOD 2,048) C04368: C9 00 02 CMP #$0200 (512) C0436B: B0 38 BCS $43A5 (+56) C0436D: 4A LSR A C0436E: 85 0D STA $0D C04370: A5 15 LDA $15 C04372: 18 CLC C04373: 69 10 00 ADC #$0010 (16) C04376: 38 SEC C04377: E5 63 SBC $63 (Sub player Y-step amount) C04379: 29 FF 07 AND #$07FF (MOD 2,048) C0437C: C9 E0 07 CMP #$07E0 (2,016) C0437F: B0 05 BCS $4386 (+5) C04381: C9 E0 01 CMP #$01E0 (480) C04384: B0 1F BCS $43A5 (+31) C04386: 4A LSR A C04387: 85 0F STA $0F C04389: A5 06 LDA $06 (A = 0) C0438B: E2 20 SEP #$20 (8-bit A) C0438D: A5 0D LDA $0D (X-coordinate) C0438F: 99 0C 02 STA $020C,Y (Write to DMA buffer) C04392: A5 0F LDA $0F (Y-coordinate) C04394: 99 0D 02 STA $020D,Y (Write to DMA buffer) C04397: BF 8E 44 C0 LDA $C0448E,X (Tile ID) C0439B: 99 0E 02 STA $020E,Y (Write to DMA buffer) C0439E: BF 8F 44 C0 LDA $C0448F,X (Tile properties) C043A2: 99 0F 02 STA $020F,Y (Write to DMA buffer) C043A5: 4C 3C 44 JMP $443C C043A8: 46 14 LSR $14 C043AA: 66 13 ROR $13 C043AC: 46 16 LSR $16 C043AE: 66 15 ROR $15 C043B0: A5 13 LDA $13 C043B2: 38 SEC C043B3: E9 08 SBC #$08 (8) C043B5: 99 00 02 STA $0200,Y C043B8: A5 15 LDA $15 C043BA: 38 SEC C043BB: E9 08 SBC #$08 (8) C043BD: 99 01 02 STA $0201,Y C043C0: BF 88 44 C0 LDA $C04488,X C043C4: 18 CLC C043C5: 69 20 ADC #$20 (32) C043C7: 99 02 02 STA $0202,Y C043CA: BF 89 44 C0 LDA $C04489,X C043CE: 09 01 ORA #$01 C043D0: 99 03 02 STA $0203,Y C043D3: A5 13 LDA $13 C043D5: 18 CLC C043D6: 69 08 ADC #$08 (8) C043D8: 99 04 02 STA $0204,Y C043DB: A5 15 LDA $15 C043DD: 38 SEC C043DE: E9 08 SBC #$08 (8) C043E0: 99 05 02 STA $0205,Y C043E3: BF 8A 44 C0 LDA $C0448A,X C043E7: 18 CLC C043E8: 69 20 ADC #$20 (32) C043EA: 99 06 02 STA $0206,Y C043ED: BF 8B 44 C0 LDA $C0448B,X C043F1: 09 01 ORA #$01 C043F3: 99 07 02 STA $0207,Y C043F6: A5 13 LDA $13 C043F8: 38 SEC C043F9: E9 08 SBC #$08 (8) C043FB: 99 08 02 STA $0208,Y C043FE: A5 15 LDA $15 C04400: 18 CLC C04401: 69 08 ADC #$08 (8) C04403: 99 09 02 STA $0209,Y C04406: BF 8C 44 C0 LDA $C0448C,X C0440A: 18 CLC C0440B: 69 20 ADC #$20 (32) C0440D: 99 0A 02 STA $020A,Y C04410: BF 8D 44 C0 LDA $C0448D,X C04414: 09 01 ORA #$01 C04416: 99 0B 02 STA $020B,Y C04419: A5 13 LDA $13 C0441B: 18 CLC C0441C: 69 08 ADC #$08 (8) C0441E: 99 0C 02 STA $020C,Y C04421: A5 15 LDA $15 C04423: 18 CLC C04424: 69 08 ADC #$08 (8) C04426: 99 0D 02 STA $020D,Y C04429: BF 8E 44 C0 LDA $C0448E,X C0442D: 18 CLC C0442E: 69 20 ADC #$20 (32) C04430: 99 0E 02 STA $020E,Y C04433: BF 8F 44 C0 LDA $C0448F,X C04437: 09 01 ORA #$01 C04439: 99 0F 02 STA $020F,Y C0443C: A5 06 LDA $06 (A = 0) C0443E: E2 20 SEP #$20 (8-bit A) C04440: A4 23 LDY $23 C04442: B9 58 1A LDA $1A58,Y C04445: F0 04 BEQ $444B (+4) C04447: 3A DEC A C04448: 99 58 1A STA $1A58,Y C0444B: C2 20 REP #$20 (16-bit A) C0444D: A5 23 LDA $23 C0444F: 18 CLC C04450: 69 10 00 ADC #$0010 (16) C04453: 85 23 STA $23 C04455: A8 TAY C04456: A5 06 LDA $06 (A = 0) C04458: E2 20 SEP #$20 (8-bit A) C0445A: C0 88 00 CPY #$0088 (136) C0445D: F0 08 BEQ $4467 (+8) C0445F: C0 80 00 CPY #$0080 (128) C04462: F0 03 BEQ $4467 (+3) C04464: 4C 1D 42 JMP $421D C04467: 60 RTS C04468: 00 00 C0446A: 01 00 C0446C: 02 00 C0446E: 03 00 C04470: 04 00 C04472: 05 00 C04474: 06 00 C04476: 07 00 C04478: 00 00 C0447A: F9 FF C0447C: FA FF C0447E: FB FF C04480: FC FF C04482: FD FF C04484: FE FF C04486: FF FF C04488: 1E 34 C0448A: 3E F4 C0448C: 3E 34 C0448E: 1E F4 C04490: 1C 34 C04492: 3C F4 C04494: 3C 34 C04496: 1C F4 C04498: 1A 34 C0449A: 3A F4 C0449C: 3A 34 C0449E: 1A F4 C044A0: 18 34 C044A2: 38 F4 C044A4: 38 34 C044A6: 18 F4 C044A8: 16 34 C044AA: 36 F4 C044AC: 36 34 C044AE: 16 F4 C044B0: 14 34 C044B2: 34 F4 C044B4: 34 34 C044B6: 14 F4 C044B8: 12 34 C044BA: 32 F4 C044BC: 32 34 C044BE: 12 F4 C044C0: 10 34 C044C2: 30 F4 C044C4: 30 34 C044C6: 10 F4 C044C8: 48 PHA C044C9: 9C 0B 42 STZ $420B (DMA off) C044CC: 9C 0C 42 STZ $420C (HDMA off) C044CF: A9 00 LDA #$00 C044D1: 8D 00 42 STA $4200 (NMI, IRQ off) C044D4: A9 80 LDA #$80 C044D6: 8D 00 21 STA $2100 (Screen brightness 0%) C044D9: 78 SEI C044DA: 68 PLA C044DB: 22 00 00 C3 JSL $C30000 C044DF: 20 E3 44 JSR $44E3 (WHY?!!!?!?!!) C044E2: 60 RTS C044E3: C2 10 REP #$10 (16-bit X & Y) C044E5: E2 20 SEP #$20 (8-bit A) C044E7: A9 00 LDA #$00 C044E9: 48 PHA C044EA: AB PLB C044EB: A2 00 0B LDX #$0B00 C044EE: DA PHX C044EF: 2B PLD C044F0: 9C 0B 42 STZ $420B (DMA off) C044F3: 9C 0C 42 STZ $420C (HDMA off) C044F6: A9 8F LDA #$8F C044F8: 8D 00 21 STA $2100 (Screen brightness 100%) C044FB: A9 00 LDA #$00 C044FD: 8D 00 42 STA $4200 (NMI, IRQ off) C04500: A9 00 LDA #$00 (A = 0 already!) C04502: EB XBA C04503: 20 4A 4E JSR $4E4A C04506: 20 69 4E JSR $4E69 (Set up Mode 7...JMP!) C04509: 60 RTS (Called on start of new game. Resets vehicles and player sprite.) C0450A: 9C DC 0A STZ $0ADC (Null player vehicle) C0450D: A2 00 80 LDX #$8000 (Make vehicles unboardable) C04510: 8E DD 0A STX $0ADD (Boco...) C04513: 8E E1 0A STX $0AE1 (...black chocobo...) C04516: 8E E5 0A STX $0AE5 (...Hiryuu...) C04519: 8E E9 0A STX $0AE9 (...submarine...) C0451C: 8E ED 0A STX $0AED (...boats...) C0451F: 8E F1 0A STX $0AF1 (...and airship) C04522: A9 02 LDA #$02 (2) C04524: 8D DA 0A STA $0ADA (Player sprite: Bartz) C04527: 60 RTS (Called on start of new game. Nulls everyone's names except Bartz, which is set to "?".) C04528: A9 FF LDA #$FF (' ') C0452A: A4 06 LDY $06 (Y = 0) C0452C: 99 90 09 STA $0990,Y (Set letter of a playable character's name) C0452F: C8 INY C04530: C0 1E 00 CPY #$001E (30) (5 characters * 6 letters) C04533: D0 F7 BNE $452C (-9) C04535: A9 CB LDA #$CB ('?') C04537: 8D 90 09 STA $0990 (Bartz's first letter) C0453A: A9 FF LDA #$FF (' ') C0453C: 8D 91 09 STA $0991 (Bartz's second letter...) C0453F: 8D 92 09 STA $0992 (...third, etc.) C04542: 8D 93 09 STA $0993 (These five were already set, though!) C04545: 8D 94 09 STA $0994 C04548: 8D 95 09 STA $0995 C0454B: 60 RTS C0454C: 20 81 60 JSR $6081 C0454F: 9C 0B 42 STZ $420B (DMA off) C04552: 9C 0C 42 STZ $420C (HDMA off) C04555: A9 00 LDA #$00 C04557: 8D 00 42 STA $4200 (NMI, IRQ off) C0455A: A9 80 LDA #$80 C0455C: 8D 00 21 STA $2100 (Screen brightness 0%) C0455F: 78 SEI C04560: 22 00 A0 C2 JSL $C2A000 C04564: 20 E3 44 JSR $44E3 C04567: 20 D7 1C JSR $1CD7 (Refresh plr sprite...JMP!) C0456A: 60 RTS C0456B: A4 06 LDY $06 (Y = 0) C0456D: B9 00 05 LDA $0500,Y (Look at a party member) C04570: 29 40 AND #$40 (Is party slot empty?) C04572: F0 0E BEQ $4582 (+14) (Exit if not) C04574: C2 20 REP #$20 (16-bit A) C04576: 98 TYA C04577: 18 CLC C04578: 69 50 00 ADC #$0050 (80) (Next party slot) C0457B: A8 TAY C0457C: A5 06 LDA $06 (A = 0) C0457E: E2 20 SEP #$20 (8-bit A) C04580: 80 EB BRA $456D (-21) C04582: 60 RTS C04583: A9 FE LDA #$FE C04585: 20 3C CA JSR $CA3C (Get event flag $1FE) C04588: C9 00 CMP #$00 (Is flag set?) C0458A: D0 57 BNE $45E3 (+87) (Exit if so) C0458C: 20 35 46 JSR $4635 C0458F: AD DC 0A LDA $0ADC (Player vehicle) C04592: F0 38 BEQ $45CC (+56) (Branch if walking) C04594: C9 06 CMP #$06 C04596: D0 1C BNE $45B4 (+28) (Branch if not airship) C04598: AD D6 0A LDA $0AD6 (Get current map ID) C0459B: C9 02 CMP #$02 (World 3 overworld?) C0459D: D0 15 BNE $45B4 (+21) (Branch if not) C0459F: AD F1 0A LDA $0AF1 C045A2: 29 03 AND #$03 (Get airship's unused form) C045A4: D0 05 BNE $45AB (+5) (Branch if not airship) C045A6: A9 69 LDA #$69 (105) C045A8: 20 3C 46 JSR $463C C045AB: A9 79 LDA #$79 C045AD: 20 2F CA JSR $CA2F (Get event flag $079) C045B0: C9 00 CMP #$00 (Is flag set?) C045B2: D0 18 BNE $45CC (+24) (Branch if so) C045B4: AD DC 0A LDA $0ADC (Player vehicle) C045B7: 0A 0A ASL x2 (Multiply by 4) C045B9: 85 08 STA $08 C045BB: A8 TAY C045BC: B9 D9 0A LDA $0AD9,Y (Previous vehicle?) C045BF: 29 03 AND #$03 (Get unused form) C045C1: 05 08 ORA $08 C045C3: AA TAX C045C4: BF EE 45 C0 LDA $C045EE,X C045C8: F0 02 BEQ $45CC (+2) C045CA: 80 14 BRA $45E0 (+20) (BNE!) C045CC: A9 7F LDA #$7F C045CE: 20 3C CA JSR $CA3C (Get event flag $17F) C045D1: C9 00 CMP #$00 (Is flag set?) C045D3: F0 02 BEQ $45D7 (Branch if not) C045D5: A9 05 LDA #$05 (5) C045D7: 18 CLC C045D8: 6D D6 0A ADC $0AD6 (Current map ID + 5) C045DB: AA TAX C045DC: BF E4 45 C0 LDA $C045E4,X C045E0: 20 0A 46 JSR $460A (JMP!) C045E3: 60 RTS C045E4: 23 46 23 1E 1E C045E9: 23 27 3F 1E 1E C045EE: 00 00 00 00 C045F2: 03 00 00 00 C045F6: 1A 00 00 00 C045FA: 1D 00 00 00 C045FE: 1E 1E 1E 1E C04602: 00 18 00 00 C04606: 28 00 1E 00 C0460A: 85 08 STA $08 C0460C: A5 55 LDA $55 C0460E: C9 02 CMP #$02 C04610: F0 22 BEQ $4634 (+34) C04612: A5 08 LDA $08 C04614: 8D 01 1D STA $1D01 C04617: A9 01 LDA #$01 C04619: 8D 00 1D STA $1D00 C0461C: A9 0F LDA #$0F C0461E: 8D 03 1D STA $1D03 C04621: A5 55 LDA $55 C04623: C9 01 CMP #$01 C04625: F0 04 BEQ $462B (+4) C04627: A9 08 LDA #$08 C04629: 80 02 BRA $462D (+2) C0462B: A9 28 LDA #$28 C0462D: 8D 02 1D STA $1D02 C04630: 22 04 00 C4 JSL $C40004 C04634: 60 RTS C04635: A9 F2 LDA #$F2 C04637: 8D 00 1D STA $1D00 C0463A: 80 12 BRA $464E (+18) C0463C: 8D 01 1D STA $1D01 C0463F: A9 02 LDA #$02 C04641: 8D 00 1D STA $1D00 C04644: A9 0F LDA #$0F C04646: 8D 02 1D STA $1D02 C04649: A9 88 LDA #$88 C0464B: 8D 03 1D STA $1D03 C0464E: 22 04 00 C4 JSL $C40004 C04652: 60 RTS C04653: AD AA 16 LDA $16AA C04656: 30 32 BMI $468A (+50) C04658: F0 2C BEQ $4686 (+44) C0465A: C2 20 REP #$20 (16-bit A) C0465C: AD AA 16 LDA $16AA C0465F: 1A INC A C04660: 29 FF 00 AND #$00FF C04663: 0A 0A 0A 0A ASL x4 C04667: 85 19 STA $19 C04669: AD AB 16 LDA $16AB C0466C: 38 SEC C0466D: E5 19 SBC $19 C0466F: 8D AB 16 STA $16AB C04672: 10 06 BPL $467A (+6) C04674: 9C AB 16 STZ $16AB C04677: 9C AA 16 STZ $16AA C0467A: A5 06 LDA $06 (A = 0) C0467C: E2 20 SEP #$20 (8-bit A) C0467E: AD AC 16 LDA $16AC C04681: AA TAX C04682: BF A6 46 C0 LDA $C046A6,X C04686: 8D 06 21 STA $2106 (Set mosaic intensity) C04689: 60 RTS C0468A: A5 57 LDA $57 C0468C: D0 FB BNE $4689 (-5) C0468E: A5 BA LDA $BA C04690: F0 05 BEQ $4697 (+5) C04692: A5 41 LDA $41 C04694: 29 0E AND #$0E C04696: 4A LSR A C04697: AA TAX C04698: BF 9E 46 C0 LDA $C0469E,X C0469C: 80 E8 BRA $4686 (-24) (Short mosaic effect.) C0469E: 0F 1F 2F 3F C046A2: 3F 2F 1F 0F (Long mosaic effect.) C046A6: 0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF EF C046B5: FF EF DF CF BF AF 9F 8F 7F 6F 5F 4F 3F 2F 1F C046C4: A9 70 LDA #$70 C046C6: 8D 79 18 STA $1879 C046C9: A9 7B LDA #$7B C046CB: 8D 7A 18 STA $187A C046CE: A4 06 LDY $06 (A = 0) C046D0: 64 09 STZ $09 C046D2: A5 09 LDA $09 C046D4: 99 80 18 STA $1880,Y C046D7: 20 2B 4F JSR $4F2B (PRN) C046DA: 29 01 AND #$01 (MOD 2) C046DC: 99 82 18 STA $1882,Y C046DF: 20 2B 4F JSR $4F2B (Another PRN) C046E2: 29 07 AND #$07 C046E4: 18 CLC C046E5: 69 18 ADC #$18 C046E7: 99 83 18 STA $1883,Y C046EA: A9 00 LDA #$00 C046EC: 99 7F 18 STA $187F,Y C046EF: 99 81 18 STA $1881,Y C046F2: 99 84 18 STA $1884,Y C046F5: A5 09 LDA $09 C046F7: 0A ASL A C046F8: AA TAX C046F9: C2 20 REP #$20 (16-bit A) C046FB: BF 21 47 C0 LDA $C04721,X C046FF: 99 7B 18 STA $187B,Y C04702: A5 06 LDA $06 (A = 0) C04704: E2 20 SEP #$20 (8-bit A) C04706: 20 2B 4F JSR $4F2B (PRN) C04709: 29 30 AND #$30 (Isolate bits 4 and 5) C0470B: 09 C0 ORA #$C0 (Set bits 6 and 7) C0470D: 99 7D 18 STA $187D,Y C04710: A9 00 LDA #$00 C04712: 99 7E 18 STA $187E,Y C04715: E6 09 INC $09 C04717: 98 TYA C04718: 18 CLC C04719: 69 0A ADC #$0A (10) C0471B: A8 TAY C0471C: C9 A0 CMP #$A0 (160) C0471E: D0 B2 BNE $46D2 (-78) C04720: 60 RTS C04721: 80 FF C04723: 90 FF C04725: A0 FF C04727: B0 FF C04729: C0 FF C0472B: D0 FF C0472D: E0 FF C0472F: F0 FF C04731: 10 00 C04733: 20 00 C04735: 30 00 C04737: 40 00 C04739: 50 00 C0473B: 60 00 C0473D: 70 00 C0473F: 80 00 C04741: A5 5B LDA $5B C04743: D0 01 BNE $4746 (+1) C04745: 60 RTS C04746: A4 06 LDY $06 (Y = 0) C04748: B9 83 18 LDA $1883,Y C0474B: D0 41 BNE $478E (+65) C0474D: B9 84 18 LDA $1884,Y C04750: D0 3C BNE $478E (+60) C04752: 20 2B 4F JSR $4F2B (PRN) C04755: 29 0F AND #$0F (MOD 16) C04757: 99 80 18 STA $1880,Y C0475A: 20 2B 4F JSR $4F2B (Another PRN) C0475D: 29 03 AND #$03 (MOD 4) C0475F: 18 CLC C04760: 65 6F ADC $6F C04762: 65 6F ADC $6F C04764: 99 82 18 STA $1882,Y C04767: 20 2B 4F JSR $4F2B (Another PRN) C0476A: 29 07 AND #$07 (MOD 8) C0476C: 18 CLC C0476D: 69 06 ADC #$06 (6) (Add 6) C0476F: 99 83 18 STA $1883,Y C04772: C2 20 REP #$20 (16-bit A) C04774: A5 06 LDA $06 (A = 0) C04776: 99 7B 18 STA $187B,Y C04779: A9 80 00 LDA #$0080 (128) C0477C: 99 7D 18 STA $187D,Y C0477F: A5 06 LDA $06 (A = 0) C04781: E2 20 SEP #$20 (8-bit A) C04783: A9 00 LDA #$00 C04785: 99 7F 18 STA $187F,Y C04788: 99 81 18 STA $1881,Y C0478B: 99 84 18 STA $1884,Y C0478E: 98 TYA C0478F: 18 CLC C04790: 69 0A ADC #$0A (10) C04792: A8 TAY C04793: C9 A0 CMP #$A0 (160) C04795: D0 B1 BNE $4748 (-79) C04797: 60 RTS C04798: A6 06 LDX $06 C0479A: 9E 83 18 STZ $1883,X C0479D: 9E 84 18 STZ $1884,X C047A0: 8A TXA C047A1: 18 CLC C047A2: 69 0A ADC #$0A (10) C047A4: AA TAX C047A5: C9 A0 CMP #$A0 (160) C047A7: D0 F1 BNE $479A (-15) C047A9: 60 RTS C047AA: A5 5B LDA $5B C047AC: F0 48 BEQ $47F6 (+72) C047AE: A4 06 LDY $06 (Y = 0) C047B0: 84 17 STY $17 C047B2: C2 20 REP #$20 (16-bit A) C047B4: A5 17 LDA $17 C047B6: 0A ASL A C047B7: 85 19 STA $19 C047B9: 0A 0A ASL x2 C047BB: 18 CLC C047BC: 65 19 ADC $19 C047BE: A8 TAY C047BF: BE 83 18 LDX $1883,Y C047C2: F0 25 BEQ $47E9 (+37) C047C4: B9 7F 18 LDA $187F,Y C047C7: 18 CLC C047C8: 79 7B 18 ADC $187B,Y C047CB: 99 7F 18 STA $187F,Y C047CE: B9 81 18 LDA $1881,Y C047D1: 18 CLC C047D2: 79 7D 18 ADC $187D,Y C047D5: 99 81 18 STA $1881,Y C047D8: B9 83 18 LDA $1883,Y C047DB: 3A DEC A C047DC: 99 83 18 STA $1883,Y C047DF: B9 7D 18 LDA $187D,Y C047E2: 38 SEC C047E3: E9 10 00 SBC #$0010 (16) C047E6: 99 7D 18 STA $187D,Y C047E9: E6 17 INC $17 C047EB: A5 17 LDA $17 C047ED: C9 10 00 CMP #$0010 (16) C047F0: D0 C2 BNE $47B4 (-62) C047F2: A5 06 LDA $06 (A = 0) C047F4: E2 20 SEP #$20 (8-bit A) C047F6: 60 RTS C047F7: AE 73 18 LDX $1873 C047FA: A4 06 LDY $06 C047FC: B9 83 18 LDA $1883,Y C047FF: D0 05 BNE $4806 (+5) C04801: B9 84 18 LDA $1884,Y C04804: F0 20 BEQ $4826 (+32) C04806: B9 80 18 LDA $1880,Y C04809: 18 CLC C0480A: 6D 79 18 ADC $1879 C0480D: 9D 00 02 STA $0200,X C04810: B9 82 18 LDA $1882,Y C04813: 49 FF EOR #$FF C04815: 38 SEC C04816: 6D 7A 18 ADC $187A C04819: 9D 01 02 STA $0201,X C0481C: A9 47 LDA #$47 C0481E: 9D 02 02 STA $0202,X C04821: A9 30 LDA #$30 C04823: 9D 03 02 STA $0203,X C04826: E8 E8 E8 E8 INX x4 C0482A: 98 TYA C0482B: 18 CLC C0482C: 69 0A ADC #$0A (10) C0482E: A8 TAY C0482F: C9 A0 CMP #$A0 (160) C04831: D0 C9 BNE $47FC (-55) C04833: 60 RTS C04834: AD FB 0A LDA $0AFB C04837: C9 02 CMP #$02 (2) C04839: F0 01 BEQ $483C (+1) C0483B: 60 RTS C0483C: A9 C8 LDA #$C8 C0483E: 8D 01 02 STA $0201 C04841: 8D 05 02 STA $0205 C04844: 8D 09 02 STA $0209 C04847: 8D 0D 02 STA $020D C0484A: 8D 11 02 STA $0211 C0484D: A9 C0 LDA #$C0 C0484F: 8D 00 02 STA $0200 C04852: A9 C8 LDA #$C8 C04854: 8D 04 02 STA $0204 C04857: A9 D0 LDA #$D0 C04859: 8D 10 02 STA $0210 C0485C: A9 D8 LDA #$D8 C0485E: 8D 08 02 STA $0208 C04861: A9 E0 LDA #$E0 C04863: 8D 0C 02 STA $020C C04866: A9 30 LDA #$30 C04868: 8D 03 02 STA $0203 C0486B: 8D 07 02 STA $0207 C0486E: 8D 0B 02 STA $020B C04871: 8D 0F 02 STA $020F C04874: 8D 13 02 STA $0213 C04877: AE FC 0A LDX $0AFC C0487A: 8E 04 42 STX $4204 C0487D: A9 3C LDA #$3C (60) C0487F: 8D 06 42 STA $4206 C04882: 48 PHA C04883: 68 PLA C04884: 48 PHA C04885: 68 PLA C04886: EA NOP C04887: AE 14 42 LDX $4214 C0488A: 8E 04 42 STX $4204 C0488D: A9 0A LDA #$0A (10) C0488F: 8D 06 42 STA $4206 C04892: 48 PHA C04893: 68 PLA C04894: 48 PHA C04895: 68 PLA C04896: EA NOP C04897: AD 16 42 LDA $4216 C0489A: 09 40 ORA #$40 C0489C: 8D 0E 02 STA $020E C0489F: AE 14 42 LDX $4214 C048A2: 8E 04 42 STX $4204 C048A5: A9 06 LDA #$06 (6) C048A7: 8D 06 42 STA $4206 C048AA: 48 PHA C048AB: 68 PLA C048AC: 48 PHA C048AD: 68 PLA C048AE: EA NOP C048AF: AD 16 42 LDA $4216 C048B2: 09 40 ORA #$40 C048B4: 8D 0A 02 STA $020A C048B7: AE 14 42 LDX $4214 C048BA: 8E 04 42 STX $4204 C048BD: A9 0A LDA #$0A (10) C048BF: 8D 06 42 STA $4206 C048C2: 48 PHA C048C3: 68 PLA C048C4: 48 PHA C048C5: 68 PLA C048C6: EA NOP C048C7: AD 16 42 LDA $4216 C048CA: 09 40 ORA #$40 C048CC: 8D 06 02 STA $0206 C048CF: AD 14 42 LDA $4214 C048D2: 09 40 ORA #$40 C048D4: 8D 02 02 STA $0202 C048D7: A9 4F LDA #$4F C048D9: 8D 12 02 STA $0212 C048DC: 60 RTS C048DD: A6 06 LDX $06 (X = 0) C048DF: BF 00 E0 D8 LDA $D8E000,X C048E3: 9D 54 0A STA $0A54,X C048E6: E8 INX C048E7: E0 80 00 CPX #$0080 (128) C048EA: D0 F3 BNE $48DF (-13) C048EC: 60 RTS C048ED: A4 06 LDY $06 (Y = 0) C048EF: 98 TYA C048F0: 99 14 0A STA $0A14,Y C048F3: C8 INY C048F4: C0 40 00 CPY #$0040 (64) C048F7: D0 F7 BNE $48F0 (-9) C048F9: 60 RTS (Initializes player stats.) C048FA: A6 06 LDX $06 (X = 0) C048FC: BF 00 70 D1 LDA $D17000,X C04900: 9D 00 05 STA $0500,X C04903: E8 INX C04904: E0 40 01 CPX #$0140 (320) C04907: D0 F3 BNE $48FC (-13) C04909: 60 RTS (Clears RAM addresses $0000-$1CFF.) C0490A: C2 20 REP #$20 (16-bit A) C0490C: A4 06 LDY $06 (Y = 0) C0490E: A5 06 LDA $06 (TAY!) C04910: 99 00 00 STA $0000,Y C04913: C8 C8 INY x2 C04915: C0 00 1D CPY #$1D00 C04918: D0 F6 BNE $4910 (-10) C0491A: E2 20 SEP #$20 (8-bit A) C0491C: 60 RTS (Clears RAM addresses $0B00-$1CFF.) C0491D: C2 20 REP #$20 (16-bit A) C0491F: A0 00 0B LDY #$0B00 (Y = 0) C04922: A5 06 LDA $06 (TAY!) C04924: 99 00 00 STA $0000,Y C04927: C8 C8 INY x2 C04929: C0 00 1D CPY #$1D00 C0492C: D0 F6 BNE $4924 (-10) C0492E: E2 20 SEP #$20 (8-bit A) C04930: 60 RTS C04931: A5 D3 LDA $D3 C04933: D0 17 BNE $494C (+23) C04935: A6 06 LDX $06 (X = 0) C04937: 8E A0 10 STX $10A0 C0493A: 8E A2 10 STX $10A2 C0493D: 8E A4 10 STX $10A4 C04940: 8E A6 10 STX $10A6 C04943: 8E A8 10 STX $10A8 C04946: 8E AA 10 STX $10AA C04949: 4C D2 49 JMP $49D2 C0494C: A5 D3 LDA $D3 C0494E: 4A (x6) LSR x6 C04954: 85 17 STA $17 C04956: A5 3F LDA $3F (Get frame counter) C04958: 25 17 AND $17 C0495A: D0 76 BNE $49D2 (+118) C0495C: A5 D3 LDA $D3 C0495E: 29 03 AND #$03 C04960: AA TAX C04961: BF D3 49 C0 LDA $C049D3,X (Bottom X bits set) C04965: 85 17 STA $17 C04967: A5 3F LDA $3F (Get frame counter) C04969: AA TAX C0496A: BF C0 FE C0 LDA $C0FEC0,X C0496E: 25 17 AND $17 C04970: 8D A0 10 STA $10A0 C04973: 8D A4 10 STA $10A4 C04976: 8D A8 10 STA $10A8 C04979: A5 D3 LDA $D3 C0497B: 4A 4A LSR x2 C0497D: 29 03 AND #$03 C0497F: AA TAX C04980: BF D3 49 C0 LDA $C049D3,X (Bottom X bits set) C04984: 85 17 STA $17 C04986: A5 3F LDA $3F (Get frame counter) C04988: AA TAX C04989: BF C1 FE C0 LDA $C0FEC1,X C0498D: 25 17 AND $17 C0498F: 8D A2 10 STA $10A2 C04992: 8D A6 10 STA $10A6 C04995: 8D AA 10 STA $10AA C04998: A5 D3 LDA $D3 C0499A: 29 30 AND #$30 C0499C: 4A 4A 4A 4A LSR x4 C049A0: F0 30 BEQ $49D2 (+48) C049A2: C9 01 CMP #$01 C049A4: D0 0E BNE $49B4 (+14) C049A6: 9C A4 10 STZ $10A4 C049A9: 9C A6 10 STZ $10A6 C049AC: 9C A8 10 STZ $10A8 C049AF: 9C AA 10 STZ $10AA C049B2: 80 1E BRA $49D2 (+30) (Forced branch to RTS?!) C049B4: C9 02 CMP #$02 C049B6: D0 0E BNE $49C6 (+14) C049B8: 9C A0 10 STZ $10A0 C049BB: 9C A2 10 STZ $10A2 C049BE: 9C A8 10 STZ $10A8 C049C1: 9C AA 10 STZ $10AA C049C4: 80 0C BRA $49D2 (+12) (Forced branch to RTS?!) C049C6: 9C A4 10 STZ $10A4 C049C9: 9C A6 10 STZ $10A6 C049CC: 9C A0 10 STZ $10A0 C049CF: 9C A2 10 STZ $10A2 C049D2: 60 RTS (This table is indexed by X, and clears all 8 bits of A except the bottom X. For example, if X = 3, the bottom 3 bits are set and the rest are cleared.) C049D3: 00 01 03 07 C049D7: 48 PHA C049D8: A5 47 LDA $47 C049DA: 85 48 STA $48 C049DC: A5 49 LDA $49 C049DE: 85 4A STA $4A C049E0: 64 49 STZ $49 C049E2: A9 07 LDA #$07 C049E4: 85 47 STA $47 C049E6: 68 PLA C049E7: 80 10 BRA $49F9 (+16) C049E9: 48 PHA C049EA: A5 47 LDA $47 C049EC: 85 48 STA $48 C049EE: A5 49 LDA $49 C049F0: 85 4A STA $4A C049F2: 64 49 STZ $49 C049F4: A9 87 LDA #$87 C049F6: 85 47 STA $47 C049F8: 68 PLA C049F9: 20 44 4A JSR $4A44 C049FC: 64 46 STZ $46 C049FE: 60 RTS C049FF: A5 44 LDA $44 C04A01: 10 1B BPL $4A1E (+27) C04A03: 29 7F AND #$7F C04A05: 18 CLC C04A06: 65 46 ADC $46 C04A08: 85 46 STA $46 C04A0A: A5 4C LDA $4C C04A0C: 29 1F AND #$1F C04A0E: 0A 0A 0A ASL x3 C04A11: C5 46 CMP $46 C04A13: B0 1E BCS $4A33 (+30) C04A15: A5 46 LDA $46 C04A17: 29 F8 AND #$F8 C04A19: 85 46 STA $46 (LDA #$07, TRB $46...) C04A1B: 4C 33 4A JMP $4A33 (BRA!) C04A1E: A5 46 LDA $46 C04A20: F0 07 BEQ $4A29 (+7) C04A22: 38 SEC C04A23: E5 44 SBC $44 C04A25: 85 46 STA $46 C04A27: 80 0A BRA $4A33 (+10) C04A29: A5 48 LDA $48 C04A2B: 85 47 STA $47 C04A2D: A5 4A LDA $4A C04A2F: 85 49 STA $49 C04A31: 64 44 STZ $44 C04A33: A5 46 LDA $46 C04A35: 4A 4A 4A LSR x3 C04A38: 85 17 STA $17 C04A3A: A5 4C LDA $4C C04A3C: 29 E0 AND #$E0 C04A3E: 05 17 ORA $17 C04A40: 8D 32 21 STA $2132 C04A43: 60 RTS C04A44: 48 48 PHA x2 C04A46: 29 E0 AND #$E0 C04A48: 85 08 STA $08 C04A4A: 68 PLA C04A4B: 29 07 AND #$07 C04A4D: 0A 0A ASL x2 C04A4F: 18 CLC C04A50: 69 03 ADC #$03 (3) C04A52: 05 08 ORA $08 C04A54: 85 4C STA $4C C04A56: 68 PLA C04A57: 29 18 AND #$18 C04A59: 4A 4A 4A LSR x3 C04A5C: AA TAX C04A5D: BF 64 4A C0 LDA $C04A64,X C04A61: 85 44 STA $44 C04A63: 60 RTS C04A64: 81 82 84 84 (Prepares screen fade-in.) C04A68: A9 10 LDA #$10 (Screen brightness increments by 115) C04A6A: 85 43 STA $43 C04A6C: A9 10 LDA #$10 (Screen brightness starts at 115) C04A6E: 85 45 STA $45 C04A70: 60 RTS (Prepares screen fade-out.) C04A71: A9 90 LDA #$90 (Screen brightness decrements by 115) C04A73: 85 43 STA $43 C04A75: A9 F0 LDA #$F0 (Screen brighness starts at 100%) C04A77: 85 45 STA $45 C04A79: 60 RTS C04A7A: A5 43 LDA $43 C04A7C: 30 14 BMI $4A92 (+20) (Branch if fading out) C04A7E: A5 45 LDA $45 (Get current brightness) C04A80: 29 F0 AND #$F0 C04A82: C9 F0 CMP #$F0 (100%?) C04A84: F0 1D BEQ $4AA3 (+29) (If so, branch) C04A86: A5 43 LDA $43 C04A88: 29 1F AND #$1F (Get increase amount) C04A8A: 18 CLC C04A8B: 65 45 ADC $45 (Increase brightness) C04A8D: 85 45 STA $45 C04A8F: 4C A3 4A JMP $4AA3 (BRA!) C04A92: A5 45 LDA $45 (Get current brightness) C04A94: F0 0D BEQ $4AA3 (+13) (Branch if it's 0%) C04A96: A5 43 LDA $43 C04A98: 29 1F AND #$1F (Get decrease amount) C04A9A: 85 19 STA $19 C04A9C: A5 45 LDA $45 (Current brightness) C04A9E: 38 SEC C04A9F: E5 19 SBC $19 (Decrease it) C04AA1: 85 45 STA $45 C04AA3: A5 45 LDA $45 (Get brightness amount) C04AA5: 4A 4A 4A 4A LSR x4 (Move to lower 4 bits) C04AA9: 8D 00 21 STA $2100 (Set screen brightness, force blank off) C04AAC: 60 RTS C04AAD: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C04AB0: 20 7C 23 JSR $237C (Update player sprite) C04AB3: 20 B3 39 JSR $39B3 C04AB6: A5 02 LDA $02 (Joypad buttons) C04AB8: 29 CF AND #$CF C04ABA: D0 F1 BNE $4AAD (-15) C04ABC: A5 03 LDA $03 C04ABE: D0 ED BNE $4AAD (-19) (Branch back if any button except L or R is pressed) C04AC0: 60 RTS C04AC1: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C04AC4: 20 7C 23 JSR $237C (Update player sprite) C04AC7: 20 B3 39 JSR $39B3 C04ACA: A5 02 LDA $02 (Joypad buttons) C04ACC: 29 CF AND #$CF C04ACE: D0 04 BNE $4AD4 (+4) C04AD0: A5 03 LDA $03 C04AD2: F0 ED BEQ $4AC1 (-19) (Loop until any button except L or R is pressed) C04AD4: 60 RTS C04AD5: 9C 0B 42 STZ $420B (All DMA channels off) C04AD8: A9 80 LDA #$80 C04ADA: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C04ADD: A9 08 LDA #$08 C04ADF: 8D 00 43 STA $4300 (Single-reg, single-write, fixed DMA) C04AE2: A9 19 LDA #$19 C04AE4: 8D 01 43 STA $4301 (DMA dest = $2119) C04AE7: A6 33 LDX $33 C04AE9: 8E 16 21 STX $2116 (VRAM destination address) C04AEC: A2 06 0B LDX #$0B06 ("Zero address") C04AEF: 8E 02 43 STX $4302 (DMA source address) C04AF2: 9C 04 43 STZ $4304 (DMA source bank = $00) C04AF5: C2 20 REP #$20 (16-bit A) C04AF7: A5 35 LDA $35 C04AF9: 0A 0A 0A ASL x3 C04AFC: 85 17 STA $17 C04AFE: 0A ASL A C04AFF: 18 CLC C04B00: 65 17 ADC $17 (Something times 24) C04B02: 8D 05 43 STA $4305 (DMA transfer size) C04B05: A5 06 LDA $06 (A = 0) C04B07: E2 20 SEP #$20 (8-bit A) C04B09: A9 01 LDA #$01 C04B0B: 8D 0B 42 STA $420B (Start DMA channel 0) C04B0E: 9C 0B 42 STZ $420B (All DMA channels off) C04B11: A6 30 LDX $30 C04B13: 8E 02 43 STX $4302 (DMA source address) C04B16: A9 DB LDA #$DB C04B18: 8D 04 43 STA $4304 (DMA source bank = $DB) C04B1B: A9 18 LDA #$18 C04B1D: 8D 01 43 STA $4301 (DMA dest = $2118) C04B20: A6 33 LDX $33 C04B22: 8E 16 21 STX $2116 (VRAM destination address) C04B25: A4 06 LDY $06 (Y = 0) C04B27: A9 80 LDA #$80 C04B29: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C04B2C: A9 01 LDA #$01 C04B2E: 8D 00 43 STA $4300 (Double-reg, single-write) C04B31: A2 10 00 LDX #$0010 (16) C04B34: 8E 05 43 STX $4305 (DMA transfer size) C04B37: A9 01 LDA #$01 C04B39: 8D 0B 42 STA $420B (Start DMA channel 0) C04B3C: 9C 0B 42 STZ $420B (All DMA channels off) C04B3F: 9C 15 21 STZ $2115 (VRAM increment of write to $2118) C04B42: 9C 00 43 STZ $4300 (Single-reg, single-write) C04B45: A2 08 00 LDX #$0008 (8) C04B48: 8E 05 43 STX $4305 (DMA transfer size) C04B4B: A9 01 LDA #$01 C04B4D: 8D 0B 42 STA $420B (Start DMA channel 0) C04B50: C8 INY C04B51: C4 35 CPY $35 C04B53: D0 D2 BNE $4B27 (-46) C04B55: 60 RTS (Appears to be some kind of setup function for world map tilesets and palettes.) C04B56: A9 80 LDA #$80 C04B58: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C04B5B: A6 06 LDX $06 (X = 0) C04B5D: 8E 16 21 STX $2116 (VRAM destination address) C04B60: AD D6 0A LDA $0AD6 (Get current map ID) C04B63: AA TAX C04B64: BF BB 4B C0 LDA $C04BBB,X C04B68: 85 24 STA $24 C04B6A: 64 23 STZ $23 C04B6C: A6 23 LDX $23 C04B6E: A4 06 LDY $06 (Y = 0) C04B70: BF C0 F9 CF LDA $CFF9C0,X C04B74: 99 73 18 STA $1873,Y C04B77: E8 INX C04B78: C8 INY C04B79: C0 00 01 CPY #$0100 (256) C04B7C: D0 F2 BNE $4B70 (-14) C04B7E: AD D6 0A LDA $0AD6 (Get current map ID) C04B81: AA TAX C04B82: BF BB 4B C0 LDA $C04BBB,X C04B86: 0A (x5) ASL x5 C04B8B: 85 24 STA $24 C04B8D: 64 23 STZ $23 C04B8F: A6 23 LDX $23 C04B91: A0 00 00 LDY #$0000 (0) (LDY $06...) C04B94: BF 00 80 DB LDA $DB8000,X C04B98: 85 0A STA $0A C04B9A: E8 INX C04B9B: 29 0F AND #$0F C04B9D: 19 73 18 ORA $1873,Y C04BA0: 8D 19 21 STA $2119 (Write to VRAM) C04BA3: A5 0A LDA $0A C04BA5: 4A 4A 4A 4A LSR x4 C04BA9: 19 73 18 ORA $1873,Y C04BAC: 8D 19 21 STA $2119 (Write to VRAM) C04BAF: 8A TXA C04BB0: 29 1F AND #$1F C04BB2: D0 E0 BNE $4B94 (-32) C04BB4: C8 INY C04BB5: C0 00 01 CPY #$0100 (256) C04BB8: D0 DA BNE $4B94 (-38) C04BBA: 60 RTS (Data table indexed by the current map ID.) C04BBB: 00 (World 1 overworld) C04BBC: 01 (World 2 overworld) C04BBD: 00 (World 3 overworld) C04BBE: 02 (World 2 underwater) C04BBF: 02 (World 3 underwater) (Background scrolling seems to be an effect of this function. This may be the camera function.) C04BC0: C2 20 REP #$20 (16-bit A) C04BC2: A5 61 LDA $61 (Player X-step amount) C04BC4: 4A LSR A C04BC5: 18 CLC C04BC6: 6D A0 10 ADC $10A0 C04BC9: 85 17 STA $17 C04BCB: A5 63 LDA $63 (Player Y-step amount) C04BCD: 4A LSR A C04BCE: 18 CLC C04BCF: 6D A2 10 ADC $10A2 C04BD2: 85 19 STA $19 C04BD4: A5 65 LDA $65 C04BD6: 38 SEC C04BD7: ED 98 10 SBC $1098 C04BDA: 85 65 STA $65 C04BDC: 4A LSR A C04BDD: 18 CLC C04BDE: 6D A4 10 ADC $10A4 C04BE1: 85 1B STA $1B C04BE3: A5 67 LDA $67 C04BE5: 38 SEC C04BE6: ED 9A 10 SBC $109A C04BE9: 85 67 STA $67 C04BEB: 4A LSR A C04BEC: 18 CLC C04BED: 6D A6 10 ADC $10A6 C04BF0: 85 1D STA $1D C04BF2: A5 69 LDA $69 C04BF4: 38 SEC C04BF5: ED 9C 10 SBC $109C C04BF8: 85 69 STA $69 C04BFA: 4A LSR A C04BFB: 18 CLC C04BFC: 6D A8 10 ADC $10A8 C04BFF: 85 1F STA $1F C04C01: AD D4 0A LDA $0AD4 (Get map ID) C04C04: C9 BE 00 CMP #$00BE (Flying airship?) C04C07: D0 0D BNE $4C16 (+13) (Branch if not) C04C09: A5 3F LDA $3F (Get frame counter) C04C0B: 4A 4A LSR x2 C04C0D: B0 07 BCS $4C16 (+7) C04C0F: A5 1F LDA $1F C04C11: 49 00 01 EOR #$0100 C04C14: 85 1F STA $1F C04C16: A5 6B LDA $6B C04C18: 38 SEC C04C19: ED 9E 10 SBC $109E C04C1C: 85 6B STA $6B C04C1E: 4A LSR A C04C1F: 18 CLC C04C20: 6D AA 10 ADC $10AA C04C23: 85 21 STA $21 C04C25: A5 06 LDA $06 (A = 0) C04C27: E2 20 SEP #$20 (8-bit A) C04C29: A5 17 LDA $17 C04C2B: 8D 0D 21 STA $210D (BG1 horizontal scroll) C04C2E: A5 18 LDA $18 C04C30: 8D 0D 21 STA $210D (BG1 horizontal scroll) C04C33: A5 19 LDA $19 C04C35: 8D 0E 21 STA $210E (BG1 vertical scroll) C04C38: A5 1A LDA $1A C04C3A: 8D 0E 21 STA $210E (BG1 vertical scroll) C04C3D: A5 1B LDA $1B C04C3F: 8D 0F 21 STA $210F (BG2 horizontal scroll) C04C42: A5 1C LDA $1C C04C44: 8D 0F 21 STA $210F (BG2 horizontal scroll) C04C47: A5 1D LDA $1D C04C49: 8D 10 21 STA $2110 (BG2 vertical scroll) C04C4C: A5 1E LDA $1E C04C4E: 8D 10 21 STA $2110 (BG2 vertical scroll) C04C51: A5 1F LDA $1F C04C53: 8D 11 21 STA $2111 (BG3 horizontal scroll) C04C56: A5 20 LDA $20 C04C58: 8D 11 21 STA $2111 (BG3 horizontal scroll) C04C5B: A5 21 LDA $21 C04C5D: 8D 12 21 STA $2112 (BG3 vertical scroll) C04C60: A5 22 LDA $22 C04C62: 8D 12 21 STA $2112 (BG3 vertical scroll) C04C65: C2 20 REP #$20 (16-bit A) C04C67: A5 17 LDA $17 C04C69: 18 CLC C04C6A: 69 78 00 ADC #$0078 (120) C04C6D: 85 17 STA $17 C04C6F: A5 19 LDA $19 C04C71: 18 CLC C04C72: 69 78 00 ADC #$0078 (120) C04C75: 85 19 STA $19 C04C77: A5 06 LDA $06 (A = 0) C04C79: E2 20 SEP #$20 (8-bit A) C04C7B: A5 17 LDA $17 C04C7D: 8D 1F 21 STA $211F (Mode 7 center X) C04C80: A5 18 LDA $18 C04C82: 8D 1F 21 STA $211F (Mode 7 center X) C04C85: A5 19 LDA $19 C04C87: 8D 20 21 STA $2120 (Mode 7 center Y) C04C8A: A5 1A LDA $1A C04C8C: 8D 20 21 STA $2120 (Mode 7 center Y) C04C8F: 60 RTS C04C90: 22 08 A0 C2 JSL $C2A008 C04C94: 60 RTS (This function is called very frequently, especially after a return from NMI.) C04C95: A2 00 02 LDX #$0200 (512) C04C98: A9 F0 LDA #$F0 C04C9A: 9D FD 01 STA $01FD,X C04C9D: CA CA CA CA DEX x4 C04CA1: D0 F7 BNE $4C9A (-9) C04CA3: A2 20 00 LDX #$0020 (32) C04CA6: 9E FF 03 STZ $03FF,X C04CA9: CA DEX C04CAA: D0 FA BNE $4CA6 (-6) C04CAC: 60 RTS C04CAD: A2 00 01 LDX #$0100 (256) C04CB0: A9 F0 LDA #$F0 C04CB2: 9D FD 01 STA $01FD,X C04CB5: CA CA CA CA DEX x4 C04CB9: D0 F7 BNE $4CB2 (-9) C04CBB: 60 RTS (Appears to be a dynamic DMA transfer initiator.) C04CBC: A9 80 LDA #$80 C04CBE: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C04CC1: 9C 0B 42 STZ $420B (All DMA channels off) C04CC4: A9 01 LDA #$01 C04CC6: 8D 00 43 STA $4300 (Double-reg, single-write) C04CC9: A9 18 LDA #$18 C04CCB: 8D 01 43 STA $4301 (DMA dest = $2118) C04CCE: A5 25 LDA $25 C04CD0: 8D 04 43 STA $4304 (DMA source bank) C04CD3: A6 2E LDX $2E C04CD5: 8E 16 21 STX $2116 (VRAM destination address) C04CD8: A6 23 LDX $23 C04CDA: 8E 02 43 STX $4302 (DMA source address) C04CDD: A6 2C LDX $2C C04CDF: 8E 05 43 STX $4305 (DMA transfer size) C04CE2: A9 01 LDA #$01 C04CE4: 8D 0B 42 STA $420B (Start DMA channel 0) C04CE7: 60 RTS (Stops DMA, HDMA, NMI and IRQ and blanks the screen.) C04CE8: 9C 0B 42 STZ $420B (DMA off) C04CEB: 9C 0C 42 STZ $420C (HDMA off) C04CEE: A9 80 LDA #$80 C04CF0: 8D 00 21 STA $2100 (Screen brightness 0%, force blank on) C04CF3: A9 00 LDA #$00 C04CF5: 8D 00 42 STA $4200 (NMI off) C04CF8: 78 SEI (IRQ off) C04CF9: 60 RTS (Turns on NMI and IRQ.) C04CFA: A9 81 LDA #$81 (NMI, auto-joypad read on) C04CFC: 8D 00 42 STA $4200 C04CFF: A9 00 LDA #$00 (Screen brightness 0%, force blank off) C04D01: 8D 00 21 STA $2100 C04D04: 58 CLI (IRQ on) C04D05: 60 RTS C04D06: 20 E8 4C JSR $4CE8 (Halt NMI, IRQ etc.) C04D09: 9C 6D 0B STZ $0B6D C04D0C: 20 13 4D JSR $4D13 C04D0F: 20 FA 4C JSR $4CFA (Restart NMI, IRQ...JMP!) C04D12: 60 RTS C04D13: A9 80 LDA #$80 C04D15: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C04D18: 9C 0B 42 STZ $420B (All DMA channels off) C04D1B: A9 09 LDA #$09 C04D1D: 8D 00 43 STA $4300 (Double-reg, single-write, fixed DMA) C04D20: A9 18 LDA #$18 C04D22: 8D 01 43 STA $4301 (DMA dest = $2118) C04D25: A6 2E LDX $2E C04D27: 8E 16 21 STX $2116 (VRAM destination address) C04D2A: A2 6D 0B LDX #$0B6D C04D2D: 8E 02 43 STX $4302 (DMA source address) C04D30: 9C 04 43 STZ $4304 (DMA source = $00:0B6D) C04D33: A6 2C LDX $2C C04D35: 8E 05 43 STX $4305 (DMA transfer size) C04D38: A9 01 LDA #$01 C04D3A: 8D 0B 42 STA $420B (Start DMA channel 0) C04D3D: 60 RTS (Writes entire DMA buffer to VRAM.) C04D3E: A5 5C LDA $5C C04D40: D0 24 BNE $4D66 (+36) C04D42: 9C 02 21 STZ $2102 (OAM address) C04D45: 9C 0B 42 STZ $420B (All DMA channels off) C04D48: 9C 00 43 STZ $4300 (Single-reg, single-write) C04D4B: A9 04 LDA #$04 C04D4D: 8D 01 43 STA $4301 (DMA dest = $2104) C04D50: A2 00 02 LDX #$0200 (512) C04D53: 8E 02 43 STX $4302 (DMA source address) C04D56: A9 00 LDA #$00 C04D58: 8D 04 43 STA $4304 (DMA source = $00:0200) C04D5B: A2 20 02 LDX #$0220 (544) C04D5E: 8E 05 43 STX $4305 (DMA transfer size) C04D61: A9 01 LDA #$01 C04D63: 8D 0B 42 STA $420B (Start DMA channel 0) C04D66: 60 RTS (Writes data to CGRAM.) C04D67: 9C 0B 42 STZ $420B (All DMA channels off) C04D6A: 9C 21 21 STZ $2121 (CGRAM address = $00) C04D6D: A9 02 LDA #$02 C04D6F: 8D 00 43 STA $4300 (Single-reg, double-write) C04D72: A9 22 LDA #$22 C04D74: 8D 01 43 STA $4301 (DMA dest = $2122; CGRAM data write address) C04D77: A9 00 LDA #$00 C04D79: 8D 04 43 STA $4304 (DMA source bank = $00) C04D7C: A2 00 0C LDX #$0C00 C04D7F: 8E 02 43 STX $4302 (DMA source = $00:0C00) C04D82: A2 00 02 LDX #$0200 (512) C04D85: 8E 05 43 STX $4305 (DMA transfer size) C04D88: A9 01 LDA #$01 C04D8A: 8D 0B 42 STA $420B (Start DMA channel 0) C04D8D: 60 RTS (This function can be optimized quite a lot.) C04D8E: A5 02 LDA $02 C04D90: 29 80 AND #$80 (Is A pressed?) C04D92: D0 03 BNE $4D97 (+3) (Branch if so) C04D94: 9C B8 10 STZ $10B8 C04D97: A5 02 LDA $02 C04D99: 29 40 AND #$40 (Is X pressed?) C04D9B: D0 03 BNE $4DA0 (+3) (Branch if so) C04D9D: 9C B4 10 STZ $10B4 C04DA0: A5 02 LDA $02 C04DA2: 29 20 AND #$20 (Is L pressed?) C04DA4: D0 03 BNE $4DA9 (+3) (Branch if so) C04DA6: 9C B6 10 STZ $10B6 C04DA9: A5 02 LDA $02 C04DAB: 29 10 AND #$10 (Is R pressed?) C04DAD: D0 03 BNE $4DB2 (+3) (Branch if so) C04DAF: 9C B7 10 STZ $10B7 C04DB2: A5 03 LDA $03 C04DB4: 29 80 AND #$80 (Is B pressed?) C04DB6: D0 03 BNE $4DBB (+3) (Branch if so) C04DB8: 9C B9 10 STZ $10B9 C04DBB: A5 03 LDA $03 C04DBD: 29 40 AND #$40 (Is Y pressed?) C04DBF: D0 03 BNE $4DC4 (+3) (Branch if so) C04DC1: 9C B5 10 STZ $10B5 C04DC4: A5 03 LDA $03 C04DC6: 29 20 AND #$20 (Is SELECT pressed?) C04DC8: D0 03 BNE $4DCD (+3) (Branch if so) C04DCA: 9C BA 10 STZ $10BA C04DCD: A5 03 LDA $03 C04DCF: 29 10 AND #$10 (Is START pressed?) C04DD1: D0 03 BNE $4DD6 (+3) (Branch if so) C04DD3: 9C BB 10 STZ $10BB C04DD6: 60 RTS C04DD7: DA PHX C04DD8: 5A PHY C04DD9: A6 06 LDX $06 (X = 0) C04DDB: A0 00 00 LDY #$0000 (Y = 0...LDY $06 or TXY!) C04DDE: 64 3A STZ $3A C04DE0: C2 20 REP #$20 (16-bit A) C04DE2: A5 37 LDA $37 C04DE4: 38 SEC C04DE5: FF 21 4E C0 SBC $C04E21,X C04DE9: 85 37 STA $37 C04DEB: A5 39 LDA $39 C04DED: FF 31 4E C0 SBC $C04E31,X C04DF1: 85 39 STA $39 C04DF3: 90 04 BCC $4DF9 (+4) C04DF5: C8 INY C04DF6: 4C E0 4D JMP $4DE0 (BRA!) C04DF9: A5 37 LDA $37 C04DFB: 18 CLC C04DFC: 7F 21 4E C0 ADC $C04E21,X C04E00: 85 37 STA $37 C04E02: A5 39 LDA $39 C04E04: 7F 31 4E C0 ADC $C04E31,X C04E08: 85 39 STA $39 C04E0A: A5 06 LDA $06 (A = 0) C04E0C: E2 20 SEP #$20 (8-bit A) C04E0E: DA PHX C04E0F: 8A TXA C04E10: 4A LSR A C04E11: AA TAX C04E12: 98 TYA C04E13: 9D AC 10 STA $10AC,X C04E16: FA PLX C04E17: E8 E8 INX x2 C04E19: E0 10 00 CPX #$0010 (16) C04E1C: D0 BD BNE $4DDB (-67) C04E1E: 7A PLY C04E1F: FA PLX C04E20: 60 RTS (These are the bottom halves of 32-bit powers of 10.) C04E21: 80 96 (10,000,000) C04E23: 40 42 (1,000,000) C04E25: A0 86 (100,000) C04E27: 10 27 (10,000) C04E29: E8 03 (1,000) C04E2B: 64 00 (100) C04E2D: 0A 00 (10) C04E2F: 01 00 (1) (These are the top halves.) C04E31: 98 00 C04E33: 0F 00 C04E35: 01 00 C04E37: 00 00 C04E39: 00 00 C04E3B: 00 00 C04E3D: 00 00 C04E3F: 00 00 (This function spinlocks until interrupted by NMI.) C04E41: 64 51 STZ $51 (Clear NMI flag) C04E43: A5 51 LDA $51 C04E45: F0 FC BEQ $4E43 (Loop until flag is set) C04E47: 64 51 STZ $51 C04E49: 60 RTS C04E4A: A9 5C LDA #$5C C04E4C: 8D 00 1F STA $1F00 C04E4F: 8D 04 1F STA $1F04 C04E52: A2 D1 02 LDX #$02D1 C04E55: 8E 01 1F STX $1F01 C04E58: A9 C0 LDA #$C0 C04E5A: 8D 03 1F STA $1F03 C04E5D: A2 46 04 LDX #$0446 C04E60: 8E 05 1F STX $1F05 C04E63: A9 C0 LDA #$C0 C04E65: 8D 07 1F STA $1F07 C04E68: 60 RTS (A lot of Mode 7 stuff is done here. See the Super Famicom hacking wiki for more details.) C04E69: A9 80 LDA #$80 C04E6B: 8D 00 21 STA $2100 (Screen brightness 0%, force blank on) C04E6E: A9 00 LDA #$00 C04E70: 8D 00 42 STA $4200 (Single-reg, single-write) C04E73: 9C 0B 42 STZ $420B (DMA off) C04E76: 9C 0C 42 STZ $420C (HDMA off) C04E79: A9 03 LDA #$03 C04E7B: 8D 01 21 STA $2101 (DMA dest = $2103) C04E7E: 9C 02 21 STZ $2102 C04E81: 9C 03 21 STZ $2103 (DMA source addr = $0000) C04E84: A9 09 LDA #$09 (9) C04E86: 8D 05 21 STA $2105 (DMA transfer size) C04E89: 9C 06 21 STZ $2106 C04E8C: A9 00 LDA #$00 C04E8E: 8D 0B 21 STA $210B (BG1,2 base addr = $0000) C04E91: A9 04 LDA #$04 C04E93: 8D 0C 21 STA $210C (BG4 base addr = $4000) C04E96: A9 80 LDA #$80 C04E98: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C04E9B: 9C 1A 21 STZ $211A (Clear Mode 7 settings) C04E9E: 9C 1B 21 STZ $211B C04EA1: A9 08 LDA #$08 C04EA3: 8D 1B 21 STA $211B (Mode 7 Matrix A) C04EA6: 9C 1C 21 STZ $211C C04EA9: 9C 1C 21 STZ $211C (Mode 7 Matrix B) C04EAC: 9C 1D 21 STZ $211D C04EAF: 9C 1D 21 STZ $211D (Mode 7 Matrix C) C04EB2: 9C 1E 21 STZ $211E C04EB5: A9 08 LDA #$08 C04EB7: 8D 1E 21 STA $211E (Mode 7 Matrix D) C04EBA: A9 80 LDA #$80 C04EBC: 8D 1F 21 STA $211F (Mode 7 center X) C04EBF: 8D 1F 21 STA $211F C04EC2: 8D 20 21 STA $2120 (Mode 7 center Y) C04EC5: 8D 20 21 STA $2120 C04EC8: 8D 21 21 STA $2121 (CGRAM address) C04ECB: A9 BF LDA #$BF C04ECD: 8D 23 21 STA $2123 (BG1,2 window mask) C04ED0: A9 0B LDA #$0B C04ED2: 8D 24 21 STA $2124 (BG3,4 window mask) C04ED5: A9 BB LDA #$BB C04ED7: 8D 25 21 STA $2125 (OBJ/Colour window mask) C04EDA: A9 08 LDA #$08 C04EDC: 8D 26 21 STA $2126 (Window 1 left edge) C04EDF: A9 F7 LDA #$F7 C04EE1: 8D 27 21 STA $2127 (Window 1 right edge) C04EE4: A9 FF LDA #$FF C04EE6: 8D 28 21 STA $2128 (Window 2 left edge) C04EE9: A9 00 LDA #$00 C04EEB: 8D 29 21 STA $2129 (Window 2 right edge) C04EEE: A9 01 LDA #$01 C04EF0: 8D 2A 21 STA $212A (BG window mask logic) C04EF3: A9 00 LDA #$00 C04EF5: 8D 2B 21 STA $212B (OBJ/colour mask logic) C04EF8: A9 13 LDA #$13 C04EFA: 8D 2C 21 STA $212C (Main screen: OBJ, BG1, BG2) C04EFD: A9 04 LDA #$04 C04EFF: 8D 2D 21 STA $212D (Sub screen: BG3) C04F02: A9 17 LDA #$17 C04F04: 8D 2E 21 STA $212E (Main window mask: OBJ, BG1, BG2, BG3) C04F07: 9C 2F 21 STZ $212F (No sub window masks) C04F0A: A9 22 LDA #$22 C04F0C: 8D 30 21 STA $2130 (Colour math: no clip to black, prevent math in colour window, add sub screen) C04F0F: A9 E0 LDA #$E0 C04F11: 8D 32 21 STA $2132 (All RGB colour planes intensity 0%) C04F14: A9 00 LDA #$00 C04F16: 8D 33 21 STA $2133 (Screen mode) C04F19: A9 FF LDA #$FF C04F1B: 8D 01 42 STA $4201 (Enable all I/O ports) C04F1E: 9C 07 42 STZ $4207 (Zero out all IRQ timer values) C04F21: 9C 08 42 STZ $4208 C04F24: 9C 09 42 STZ $4209 C04F27: 9C 0A 42 STZ $420A C04F2A: 60 RTS (RNG function.) C04F2B: DA PHX (Preserve X) C04F2C: EE A7 16 INC $16A7 (Increase PRN index) C04F2F: D0 09 BNE $4F3A (+9) (If it's not 256*n...) C04F31: AD F9 0A LDA $0AF9 (...PRN modifier...) C04F34: 18 CLC C04F35: 69 07 ADC #$07 (7) (...increases by 7) C04F37: 8D F9 0A STA $0AF9 C04F3A: AD A7 16 LDA $16A7 (PRN index) C04F3D: AA TAX (Move to X) C04F3E: BF C0 FE C0 LDA $C0FEC0,X (PRN from lookup table) C04F42: 38 SEC C04F43: ED F9 0A SBC $0AF9 (Subtract modifier) C04F46: FA PLX (Restore X) C04F47: 60 RTS C04F48: A9 00 LDA #$00 (0) C04F4A: 85 25 STA $25 C04F4C: A5 3F LDA $3F (Get frame counter) C04F4E: 2D 55 1A AND $1A55 C04F51: C2 20 REP #$20 (16-bit A) C04F53: EB XBA C04F54: 4A LSR A C04F55: 18 CLC C04F56: 6D B1 16 ADC $16B1 C04F59: AA TAX C04F5A: A5 06 LDA $06 (A = 0) C04F5C: E2 20 SEP #$20 (8-bit A) C04F5E: 8A TXA C04F5F: 0A ASL A C04F60: 29 7F AND #$7F C04F62: A8 TAY C04F63: BF 5A 50 C0 LDA $C0505A,X C04F67: 30 25 BMI $4F8E (+37) C04F69: 8D 02 42 STA $4202 C04F6C: AD 53 1A LDA $1A53 C04F6F: 8D 03 42 STA $4203 C04F72: EA EA EA NOP x3 C04F75: 64 38 STZ $38 C04F77: AD 17 42 LDA $4217 C04F7A: 85 37 STA $37 C04F7C: AD 54 1A LDA $1A54 C04F7F: 8D 03 42 STA $4203 C04F82: EA EA NOP x2 C04F84: C2 20 REP #$20 (16-bit A) C04F86: A5 37 LDA $37 C04F88: 18 CLC C04F89: 6D 16 42 ADC $4216 C04F8C: 80 2A BRA $4FB8 (+42) C04F8E: 49 FF EOR #$FF C04F90: 1A INC A C04F91: 8D 02 42 STA $4202 C04F94: AD 53 1A LDA $1A53 C04F97: 8D 03 42 STA $4203 C04F9A: EA EA EA NOP x3 C04F9D: 64 38 STZ $38 C04F9F: AD 17 42 LDA $4217 C04FA2: 85 37 STA $37 C04FA4: AD 54 1A LDA $1A54 C04FA7: 8D 03 42 STA $4203 C04FAA: EA EA NOP x2 C04FAC: C2 20 REP #$20 (16-bit A) C04FAE: A5 37 LDA $37 C04FB0: 18 CLC C04FB1: 6D 16 42 ADC $4216 C04FB4: 49 FF FF EOR #$FFFF C04FB7: 1A INC A C04FB8: 18 CLC C04FB9: 65 13 ADC $13 C04FBB: E2 20 SEP #$20 (8-bit A) C04FBD: EB XBA C04FBE: F0 03 BEQ $4FC3 (+3) C04FC0: 4C 3C 50 JMP $503C C04FC3: EB XBA C04FC4: 97 23 STA [$23],Y C04FC6: C8 INY C04FC7: BF 5B 50 C0 LDA $C0505B,X C04FCB: 30 25 BMI $4FF2 (+37) C04FCD: 8D 02 42 STA $4202 C04FD0: AD 53 1A LDA $1A53 C04FD3: 8D 03 42 STA $4203 C04FD6: EA EA EA NOP x3 C04FD9: 64 38 STZ $38 C04FDB: AD 17 42 LDA $4217 C04FDE: 85 37 STA $37 C04FE0: AD 54 1A LDA $1A54 C04FE3: 8D 03 42 STA $4203 C04FE6: EA EA NOP x2 C04FE8: C2 20 REP #$20 (16-bit A) C04FEA: A5 37 LDA $37 C04FEC: 18 CLC C04FED: 6D 16 42 ADC $4216 C04FF0: 80 2A BRA $501C (+42) C04FF2: 49 FF EOR #$FF C04FF4: 1A INC A C04FF5: 8D 02 42 STA $4202 C04FF8: AD 53 1A LDA $1A53 C04FFB: 8D 03 42 STA $4203 C04FFE: EA EA EA NOP x3 C05001: 64 38 STZ $38 C05003: AD 17 42 LDA $4217 C05006: 85 37 STA $37 C05008: AD 54 1A LDA $1A54 C0500B: 8D 03 42 STA $4203 C0500E: EA EA NOP x2 C05010: C2 20 REP #$20 (16-bit A) C05012: A5 37 LDA $37 C05014: 18 CLC C05015: 6D 16 42 ADC $4216 C05018: 49 FF FF EOR #$FFFF C0501B: 1A INC A C0501C: 18 CLC C0501D: 65 15 ADC $15 C0501F: E2 20 SEP #$20 (8-bit A) C05021: C9 E0 CMP #$E0 (224) C05023: B0 18 BCS $503D (+24) C05025: EB XBA C05026: F0 03 BEQ $502B (+3) C05028: 4C 3D 50 JMP $503D (BRA! Or BNE!) C0502B: EB XBA C0502C: 97 23 STA [$23],Y C0502E: C8 INY C0502F: AD AF 16 LDA $16AF C05032: 97 23 STA [$23],Y C05034: C8 INY C05035: AD B0 16 LDA $16B0 C05038: 97 23 STA [$23],Y C0503A: 80 08 BRA $5044 (+8) C0503C: C8 INY C0503D: A9 00 LDA #$00 (0) C0503F: EB XBA C05040: A9 F8 LDA #$F8 C05042: 97 23 STA [$23],Y C05044: E8 E8 INX x2 C05046: 8A TXA C05047: 29 7F AND #$7F C05049: F0 0E BEQ $5059 (+14) C0504B: 29 3F AND #$3F C0504D: F0 03 BEQ $5052 (+3) C0504F: 4C 5E 4F JMP $4F5E C05052: A4 26 LDY $26 C05054: 84 23 STY $23 C05056: 4C 5E 4F JMP $4F5E C05059: 60 RTS (This data looks rather...circular.) C0505A: 13 A0 C0505C: 10 A3 C0505E: 0B A6 C05060: 04 A7 C05062: FC A7 C05064: F5 A6 C05066: F0 A3 C05068: ED A0 C0506A: ED 9C C0506C: F0 99 C0506E: F5 96 C05070: FC 94 C05072: 04 94 C05074: 0B 96 C05076: 10 99 C05078: 13 9C C0507A: 26 A7 C0507C: 20 AE C0507E: 15 B4 C05080: 07 B6 C05082: F9 B6 C05084: EB B4 C05086: E0 AE C05088: DA A7 C0508A: DA A0 C0508C: E0 99 C0508E: EB 94 C05090: F9 91 C05092: 07 91 C05094: 15 94 C05096: 20 99 C05098: 26 A0 C0509A: 36 B2 C0509C: 2E BC C0509E: 1F C4 C050A0: 0B C8 C050A2: F5 C8 C050A4: E1 C4 C050A6: D2 BC C050A8: CA B2 C050AA: CA A7 C050AC: D2 9D C050AE: E1 96 C050B0: F5 92 C050B2: 0B 92 C050B4: 1F 96 C050B6: 2E 9D C050B8: 36 A7 C050BA: 45 C0 C050BC: 3B CD C050BE: 27 D7 C050C0: 0E DC C050C2: F2 DC C050C4: D9 D7 C050C6: C5 CD C050C8: BB C0 C050CA: BB B2 C050CC: C5 A6 C050CE: D9 9C C050D0: F2 97 C050D2: 0E 97 C050D4: 27 9C C050D6: 3B A6 C050D8: 45 B2 C050DA: 52 D1 C050DC: 45 E0 C050DE: 2E EB C050E0: 10 F1 C050E2: F0 F1 C050E4: D2 EB C050E6: BB E0 C050E8: AE D1 C050EA: AE C0 C050EC: BB B1 C050EE: D2 A6 C050F0: F0 A0 C050F2: 10 A0 C050F4: 2E A6 C050F6: 45 B1 C050F8: 52 C0 C050FA: 5B E3 C050FC: 4D F3 C050FE: 33 00 C05100: 12 07 C05102: EE 07 C05104: CD 00 C05106: B3 F3 C05108: A5 E3 C0510A: A5 D1 C0510C: B3 C0 C0510E: CD B3 C05110: EE AC C05112: 12 AC C05114: 33 B3 C05116: 4D C0 C05118: 5B D1 C0511A: 60 F6 C0511C: 52 08 C0511E: 36 15 C05120: 13 1D C05122: ED 1D C05124: CA 15 C05126: AE 08 C05128: A0 F6 C0512A: A0 E3 C0512C: AE D1 C0512E: CA C4 C05130: ED BC C05132: 13 BC C05134: 36 C4 C05136: 52 D1 C05138: 60 E3 C0513A: 62 0A C0513C: 53 1C C0513E: 38 2A C05140: 14 31 C05142: EC 31 C05144: C8 2A C05146: AD 1C C05148: 9E 0A C0514A: 9E F6 C0514C: AD E4 C0514E: C8 D6 C05150: EC CF C05152: 14 CF C05154: 38 D6 C05156: 53 E4 C05158: 62 F6 C0515A: 13 A1 C0515C: 0F A4 C0515E: 09 A7 C05160: 02 A8 C05162: FA A7 C05164: F4 A5 C05166: EF A3 C05168: ED 9F C0516A: ED 9B C0516C: F1 98 C0516E: F7 95 C05170: FE 94 C05172: 06 95 C05174: 0C 96 C05176: 11 99 C05178: 13 9D C0517A: 25 A9 C0517C: 1E B0 C0517E: 12 B4 C05180: 04 B7 C05182: F5 B6 C05184: E8 B2 C05186: DE AD C05188: DA A5 C0518A: DB 9E C0518C: E2 97 C0518E: EE 93 C05190: FC 91 C05192: 0B 91 C05194: 18 95 C05196: 22 9B C05198: 26 A2 C0519A: 35 B5 C0519C: 2B BE C0519E: 1A C5 C051A0: 05 C8 C051A2: F0 C7 C051A4: DD C2 C051A6: CF BA C051A8: C9 B0 C051AA: CB A5 C051AC: D5 9B C051AE: E6 94 C051B0: FB 91 C051B2: 10 92 C051B4: 23 97 C051B6: 31 A0 C051B8: 37 AA C051BA: 44 C4 C051BC: 37 D0 C051BE: 21 D8 C051C0: 07 DC C051C2: EB DB C051C4: D3 D5 C051C6: C2 CA C051C8: BA BD C051CA: BC AF C051CC: C9 A3 C051CE: DF 9A C051D0: F9 96 C051D2: 15 97 C051D4: 2D 9E C051D6: 3E A9 C051D8: 46 B6 C051DA: 50 D5 C051DC: 40 E3 C051DE: 27 ED C051E0: 08 F2 C051E2: E8 F0 C051E4: CB E9 C051E6: B7 DC C051E8: AD CD C051EA: B0 BC C051EC: C0 AE C051EE: D9 A4 C051F0: F8 9F C051F2: 18 A1 C051F4: 35 A8 C051F6: 49 B5 C051F8: 53 C4 C051FA: 58 E7 C051FC: 47 F7 C051FE: 2C 02 C05200: 09 08 C05202: E5 06 C05204: C5 FD C05206: AF F0 C05208: A4 DE C0520A: A8 CC C0520C: B9 BC C0520E: D4 B1 C05210: F7 AC C05212: 1B AE C05214: 3B B6 C05216: 51 C4 C05218: 5C D5 C0521A: 5E FB C0521C: 4C 0C C0521E: 2E 18 C05220: 0A 1D C05222: E4 1B C05224: C2 12 C05226: AA 04 C05228: 9E F1 C0522A: A2 DE C0522C: B4 CD C0522E: D2 C1 C05230: F6 BC C05232: 1C BE C05234: 3E C7 C05236: 56 D5 C05238: 62 E8 C0523A: 60 0F C0523C: 4D 20 C0523E: 2F 2C C05240: 0A 32 C05242: E3 30 C05244: C1 27 C05246: A8 18 C05248: 9C 05 C0524A: A0 F1 C0524C: B3 E0 C0524E: D1 D4 C05250: F6 CE C05252: 1D D0 C05254: 3F D9 C05256: 58 E8 C05258: 64 FB C0525A: 14 9E C0525C: 12 A2 C0525E: 0E A5 C05260: 07 A7 C05262: 00 A8 C05264: F9 A7 C05266: F2 A5 C05268: EE A2 C0526A: EC 9E C0526C: EE 9A C0526E: F2 97 C05270: F9 95 C05272: 00 94 C05274: 07 95 C05276: 0E 97 C05278: 12 9A C0527A: 26 A4 C0527C: 23 AB C0527E: 1B B1 C05280: 0F B5 C05282: 00 B7 C05284: F1 B5 C05286: E5 B1 C05288: DD AB C0528A: DA A4 C0528C: DD 9C C0528E: E5 96 C05290: F1 92 C05292: 00 90 C05294: 0F 92 C05296: 1B 96 C05298: 23 9C C0529A: 38 AD C0529C: 33 B7 C0529E: 27 C0 C052A0: 15 C7 C052A2: 00 C9 C052A4: EB C7 C052A6: D9 C0 C052A8: CD B7 C052AA: C8 AD C052AC: CD A2 C052AE: D9 99 C052B0: EB 93 C052B2: 00 91 C052B4: 15 93 C052B6: 27 99 C052B8: 33 A2 C052BA: 47 B9 C052BC: 41 C7 C052BE: 32 D2 C052C0: 1B DA C052C2: 00 DD C052C4: E5 DA C052C6: CE D2 C052C8: BF C7 C052CA: B9 B9 C052CC: BF AC C052CE: CE A0 C052D0: E5 99 C052D2: 00 96 C052D4: 1B 99 C052D6: 32 A0 C052D8: 41 AC C052DA: 53 D5 C052DC: 4D E3 C052DE: 3B ED C052E0: 20 F2 C052E2: 00 F0 C052E4: E0 E9 C052E6: C5 DC C052E8: B3 CD C052EA: AD BC C052EC: B3 AE C052EE: C5 A4 C052F0: E0 9F C052F2: 00 A1 C052F4: 20 A8 C052F6: 3B B5 C052F8: 4D C4 C052FA: 5C DA C052FC: 55 EB C052FE: 41 FA C05300: 23 04 C05302: 00 08 C05304: DD 04 C05306: BF FA C05308: AB EB C0530A: A4 DA C0530C: AB C8 C0530E: BF B9 C05310: DD AF C05312: 00 AC C05314: 23 AF C05316: 41 B9 C05318: 55 C8 C0531A: 62 EC C0531C: 5B FF C0531E: 45 0F C05320: 26 1A C05322: 00 1E C05324: DA 1A C05326: BB 0F C05328: A5 FF C0532A: 9E EC C0532C: A5 DA C0532E: BB CA C05330: DA BF C05332: 00 BB C05334: 26 BF C05336: 45 CA C05338: 5B DA C0533A: 64 0F C0533C: 5C 20 C0533E: 47 2C C05340: 26 32 C05342: 00 30 C05344: DA 27 C05346: B9 18 C05348: A4 05 C0534A: 9C F1 C0534C: A4 E0 C0534E: B9 D4 C05350: DA CE C05352: 00 D0 C05354: 26 D9 C05356: 47 E8 C05358: 5C FB C0535A: 13 9F C0535C: 11 A3 C0535E: 0C A5 C05360: 06 A7 C05362: FE A8 C05364: F7 A7 C05366: F1 A4 C05368: ED A1 C0536A: ED 9D C0536C: EF 99 C0536E: F4 96 C05370: FA 95 C05372: 02 94 C05374: 09 95 C05376: 0F 98 C05378: 13 9B C0537A: 26 A5 C0537C: 22 AD C0537E: 18 B2 C05380: 0B B6 C05382: FC B7 C05384: EE B4 C05386: E2 B0 C05388: DB A9 C0538A: DA A2 C0538C: DE 9B C0538E: E8 95 C05390: F5 91 C05392: 04 91 C05394: 12 93 C05396: 1E 97 C05398: 25 9E C0539A: 37 B0 C0539C: 31 BA C0539E: 23 C2 C053A0: 10 C7 C053A2: FB C8 C053A4: E6 C5 C053A6: D5 BE C053A8: CB B5 C053AA: C9 AA C053AC: CF A0 C053AE: DD 97 C053B0: F0 92 C053B2: 05 91 C053B4: 1A 94 C053B6: 2B 9B C053B8: 35 A5 C053BA: 46 B9 C053BC: 3E C7 C053BE: 2D D2 C053C0: 15 DA C053C2: F9 DD C053C4: DF DA C053C6: C9 D2 C053C8: BC C7 C053CA: BA B9 C053CC: C2 AC C053CE: D3 A0 C053D0: EB 99 C053D2: 07 96 C053D4: 21 99 C053D6: 37 A0 C053D8: 44 AC C053DA: 53 CD C053DC: 49 DC C053DE: 35 E9 C053E0: 18 F0 C053E2: F8 F2 C053E4: D9 ED C053E6: C0 E3 C053E8: B0 D5 C053EA: AD C4 C053EC: B7 B5 C053EE: CB A8 C053F0: E8 A1 C053F2: 08 9F C053F4: 27 A4 C053F6: 40 AE C053F8: 50 BC C053FA: 5C DE C053FC: 51 F0 C053FE: 3B FD C05400: 1B 06 C05402: F7 08 C05404: D4 02 C05406: B9 F7 C05408: A8 E7 C0540A: A4 D5 C0540C: AF C4 C0540E: C5 B6 C05410: E5 AE C05412: 09 AC C05414: 2C B1 C05416: 47 BC C05418: 58 CC C0541A: 62 F1 C0541C: 56 04 C0541E: 3E 12 C05420: 1C 1B C05422: F6 1D C05424: D2 18 C05426: B4 0C C05428: A2 FB C0542A: 9E E8 C0542C: AA D5 C0542E: C2 C7 C05430: E4 BE C05432: 0A BC C05434: 2E C1 C05436: 4C CD C05438: 5E DE C0543A: 64 05 C0543C: 58 18 C0543E: 3F 27 C05440: 1D 30 C05442: F6 32 C05444: D1 2C C05446: B3 20 C05448: A0 0F C0544A: 9C FB C0544C: A8 E8 C0544E: C1 D9 C05450: E3 D0 C05452: 0A CE C05454: 2F D4 C05456: 4D E0 C05458: 60 F1 C0545A: 20 81 60 JSR $6081 C0545D: AE D6 0A LDX $0AD6 (Get current map ID) C05460: E0 05 00 CPX #$0005 (5) (World map or underwater?) C05463: B0 07 BCS $546C (+7) (Branch if not) C05465: 20 28 55 JSR $5528 C05468: 20 00 61 JSR $6100 (JMP!) C0546B: 60 RTS C0546C: 20 4C 57 JSR $574C C0546F: 20 00 61 JSR $6100 C05472: 20 67 92 JSR $9267 (JMP!) C05475: 60 RTS C05476: AE D6 0A LDX $0AD6 (Get current map ID) C05479: E0 05 00 CPX #$0005 (5) (World map or underwater?) C0547C: B0 07 BCS $546C (+7) (Branch if not) C0547E: 20 32 55 JSR $5532 C05481: 20 00 61 JSR $6100 (JMP!) C05484: 60 RTS C05485: 20 7C 57 JSR $577C C05488: 20 00 61 JSR $6100 C0548B: 20 67 92 JSR $9267 (JMP!) C0548E: 60 RTS C0548F: AE F5 0A LDX $0AF5 C05492: 8E D6 0A STX $0AD6 (Refresh current map ID) C05495: AD F7 0A LDA $0AF7 C05498: 8D 88 10 STA $1088 C0549B: AD F8 0A LDA $0AF8 C0549E: 8D 89 10 STA $1089 C054A1: E6 6E INC $6E C054A3: 20 5A 54 JSR $545A (JMP!) C054A6: 60 RTS C054A7: 64 6E STZ $6E C054A9: 64 BE STZ $BE C054AB: 64 5B STZ $5B C054AD: 64 B5 STZ $B5 C054AF: 64 A0 STZ $A0 C054B1: 64 A5 STZ $A5 C054B3: 64 9F STZ $9F C054B5: 64 A6 STZ $A6 C054B7: 64 A3 STZ $A3 C054B9: 64 56 STZ $56 C054BB: 64 5A STZ $5A C054BD: 64 5C STZ $5C (Enable DMA buffer output to VRAM) C054BF: 9C 34 0A STZ $0A34 C054C2: 9C 35 0A STZ $0A35 C054C5: A9 01 LDA #$01 (1) C054C7: 85 59 STA $59 C054C9: 85 C3 STA $C3 C054CB: 85 5D STA $5D C054CD: A2 10 01 LDX #$0110 (272) C054D0: 86 C7 STX $C7 C054D2: AD 88 10 LDA $1088 C054D5: 8D D8 0A STA $0AD8 C054D8: AD 89 10 LDA $1089 C054DB: 8D D9 0A STA $0AD9 C054DE: A6 06 LDX $06 (X = 0) C054E0: 8E A8 16 STX $16A8 C054E3: A9 F1 LDA #$F1 (-15) C054E5: 20 96 C7 JSR $C796 C054E8: A9 FD LDA #$FD (-3) C054EA: 20 96 C7 JSR $C796 C054ED: 9C A4 16 STZ $16A4 C054F0: 9C A5 16 STZ $16A5 C054F3: 9C A6 16 STZ $16A6 C054F6: 9C 0B 42 STZ $420B (DMA off) C054F9: 9C 0C 42 STZ $420C (HDMA off) C054FC: A9 80 LDA #$80 (128) C054FE: 8D 00 21 STA $2100 (Screen brightness 0%) C05501: A9 00 LDA #$00 (0) C05503: 8D 00 42 STA $4200 (NMI, IRQ off) C05506: 78 SEI C05507: 64 5E STZ $5E (Disable all HDMA channels on next NMI) C05509: 20 69 4E JSR $4E69 (Set up Mode 7) C0550C: 20 95 4C JSR $4C95 C0550F: 20 3E 4D JSR $4D3E (Write DMA buffer to VRAM) C05512: A9 70 LDA #$70 (112) C05514: 85 C5 STA $C5 C05516: 85 C6 STA $C6 C05518: 20 E5 5E JSR $5EE5 C0551B: 20 8D 5F JSR $5F8D C0551E: 20 0D 99 JSR $990D C05521: 20 F1 41 JSR $41F1 C05524: 20 BC 62 JSR $62BC (JMP!) C05527: 60 RTS C05528: AD DC 0A LDA $0ADC (Player vehicle) C0552B: F0 05 BEQ $5532 (+5) (If not walking...) C0552D: A9 03 LDA #$03 (3) C0552F: 8D DB 0A STA $0ADB (...make player face left) C05532: 64 53 STZ $53 C05534: 9C 9A 16 STZ $169A C05537: 20 A7 54 JSR $54A7 C0553A: A9 00 LDA #$00 (0) C0553C: 8D 07 21 STA $2107 (BG1 tilemap address) C0553F: A9 10 LDA #$10 (16) C05541: 85 49 STA $49 C05543: 85 4A STA $4A C05545: AE D6 0A LDX $0AD6 (Get current map ID) C05548: E0 03 00 CPX #$0003 (3) (Overworld map?) C0554B: 90 04 BCC $5551 (+4) (Branch if so) C0554D: A9 C1 LDA #$C1 C0554F: 80 02 BRA $5553 (+2) C05551: A9 41 LDA #$41 C05553: 85 48 STA $48 C05555: A5 44 LDA $44 C05557: D0 04 BNE $555D (+4) C05559: A5 48 LDA $48 C0555B: 85 47 STA $47 C0555D: 20 56 4B JSR $4B56 C05560: 20 1E 1D JSR $1D1E C05563: 20 14 1E JSR $1E14 C05566: A2 00 61 LDX #$6100 C05569: 86 2E STX $2E C0556B: A2 00 02 LDX #$0200 C0556E: 86 2C STX $2C C05570: A2 00 6C LDX #$6C00 C05573: 86 23 STX $23 C05575: A9 DA LDA #$DA C05577: 85 25 STA $25 C05579: 20 BC 4C JSR $4CBC (Start DMA) C0557C: A2 00 62 LDX #$6200 C0557F: 86 2E STX $2E C05581: A2 00 04 LDX #$0400 C05584: 86 2C STX $2C C05586: A2 00 C0 LDX #$C000 C05589: 86 23 STX $23 C0558B: A9 DA LDA #$DA C0558D: 85 25 STA $25 C0558F: 20 BC 4C JSR $4CBC (Start DMA) C05592: A2 40 64 LDX #$6440 C05595: 86 33 STX $33 C05597: A2 0C 00 LDX #$000C (12) (DMA transfer size = 288) C0559A: 86 35 STX $35 C0559C: A2 C0 3A LDX #$3AC0 C0559F: 86 30 STX $30 C055A1: 20 D5 4A JSR $4AD5 C055A4: A2 40 65 LDX #$6540 C055A7: 86 33 STX $33 C055A9: A2 F0 00 LDX #$00F0 C055AC: 86 35 STX $35 C055AE: A2 80 3B LDX #$3B80 C055B1: 86 30 STX $30 C055B3: 20 D5 4A JSR $4AD5 C055B6: A2 00 64 LDX #$6400 C055B9: 86 2E STX $2E C055BB: A2 80 00 LDX #$0080 C055BE: 86 2C STX $2C C055C0: A2 00 1F LDX #$1F00 C055C3: 86 23 STX $23 C055C5: A9 DA LDA #$DA C055C7: 85 25 STA $25 C055C9: 20 BC 4C JSR $4CBC (Start DMA) C055CC: A2 00 65 LDX #$6500 C055CF: 86 2E STX $2E C055D1: A2 80 00 LDX #$0080 C055D4: 86 2C STX $2C C055D6: A2 80 1F LDX #$1F80 C055D9: 86 23 STX $23 C055DB: A9 DA LDA #$DA C055DD: 85 25 STA $25 C055DF: 20 BC 4C JSR $4CBC (Start DMA) C055E2: 20 F8 56 JSR $56F8 C055E5: A2 80 00 LDX #$0080 C055E8: BF FF FC DF LDA $DFFCFF,X C055EC: 9D FF 0C STA $0CFF,X C055EF: CA DEX C055F0: D0 F6 BNE $55E8 (-10) C055F2: A2 40 00 LDX #$0040 C055F5: BF FF FB DF LDA $DFFBFF,X C055F9: 9D FF 0C STA $0CFF,X C055FC: CA DEX C055FD: D0 F6 BNE $55F5 (-10) C055FF: AE D6 0A LDX $0AD6 (Get current map ID) C05602: E0 03 00 CPX #$0003 (3) (Overworld map?) C05605: 90 05 BCC $560C (+5) (Branch if so) C05607: A2 20 00 LDX #$0020 C0560A: 80 02 BRA $560E (+2) C0560C: A6 06 LDX $06 (X = 0) C0560E: A4 06 LDY $06 (Y = 0) C05610: BF 40 D3 C0 LDA $C0D340,X C05614: 99 80 0D STA $0D80,Y C05617: E8 INX C05618: C8 INY C05619: C0 20 00 CPY #$0020 (32) C0561C: D0 F2 BNE $5610 (-14) C0561E: 20 67 4D JSR $4D67 C05621: 20 95 4C JSR $4C95 C05624: 20 3E 4D JSR $4D3E (Write DMA buffer to VRAM) C05627: AD D6 0A LDA $0AD6 (Get current map ID) C0562A: AA TAX C0562B: BF 39 57 C0 LDA $C05739,X C0562F: C2 20 REP #$20 (16-bit A) C05631: EB XBA C05632: 4A 4A LSR x2 C05634: 85 0D STA $0D C05636: A5 06 LDA $06 (A = 0) C05638: E2 20 SEP #$20 (8-bit A) C0563A: AD D6 0A LDA $0AD6 (Get current map ID) C0563D: AA TAX C0563E: BF 39 57 C0 LDA $C05739,X C05642: C2 20 REP #$20 (16-bit A) C05644: EB XBA C05645: 0A ASL A C05646: 18 CLC C05647: 65 0D ADC $0D C05649: AA TAX C0564A: A5 06 LDA $06 (A = 0) C0564C: E2 20 SEP #$20 (8-bit A) C0564E: A4 06 LDY $06 (Y = 0) C05650: BF 00 EA CF LDA $CFEA00,X C05654: 99 86 11 STA $1186,Y C05657: E8 INX C05658: C8 INY C05659: C0 40 02 CPY #$0240 (576) C0565C: D0 F2 BNE $5650 (-14) C0565E: A9 01 LDA #$01 (1) C05660: 85 BA STA $BA C05662: AD D6 0A LDA $0AD6 (Get current map ID) C05665: AA TAX C05666: BF 39 57 C0 LDA $C05739,X C0566A: 0A ASL A C0566B: 18 CLC C0566C: 7F 39 57 C0 ADC $C05739,X C05670: C2 20 REP #$20 (16-bit A) C05672: EB XBA C05673: 18 CLC C05674: 69 C0 F0 ADC #$F0C0 C05677: A8 TAY C05678: A5 06 LDA $06 (A = 0) C0567A: E2 20 SEP #$20 (8-bit A) C0567C: A9 CF LDA #$CF C0567E: 20 2D 6B JSR $6B2D C05681: 20 4A 6C JSR $6C4A C05684: 20 83 45 JSR $4583 C05687: 20 98 47 JSR $4798 C0568A: 20 92 8C JSR $8C92 C0568D: 20 2E 8C JSR $8C2E C05690: 64 6F STZ $6F C05692: AE D6 0A LDX $0AD6 (Get current map ID) C05695: E0 03 00 CPX #$0003 (3) (Overworld map?) C05698: B0 17 BCS $56B1 (+23) (Branch if not) C0569A: AD DC 0A LDA $0ADC (Player vehicle) C0569D: F0 16 BEQ $56B5 (+22) (Branch if walking) C0569F: C9 06 CMP #$06 (Airship?) C056A1: D0 12 BNE $56B5 (+18) (Branch if not) C056A3: AD F1 0A LDA $0AF1 (Get airship mode) C056A6: 29 03 AND #$03 C056A8: D0 0B BNE $56B5 (+11) (Branch if not flying) C056AA: AD F2 0A LDA $0AF2 (Airship's height) C056AD: 29 7F AND #$7F C056AF: F0 04 BEQ $56B5 (+4) C056B1: A9 0F LDA #$0F C056B3: 85 6F STA $6F C056B5: 20 F8 5B JSR $5BF8 C056B8: 20 33 17 JSR $1733 C056BB: 20 4A 10 JSR $104A C056BE: 20 2B 61 JSR $612B C056C1: 20 37 21 JSR $2137 C056C4: 20 64 1E JSR $1E64 C056C7: 20 C5 1E JSR $1EC5 C056CA: 20 D7 61 JSR $61D7 C056CD: A9 07 LDA #$07 (7) C056CF: 8D 05 21 STA $2105 C056D2: 20 0A 63 JSR $630A C056D5: 64 BA STZ $BA C056D7: AD DC 0A LDA $0ADC (Player vehicle) C056DA: F0 0B BEQ $56E7 (+11) (Branch if walking) C056DC: 3A DEC A C056DD: 0A 0A ASL x2 C056DF: A8 TAY C056E0: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C056E3: 29 1C AND #$1C (Get current form) C056E5: 4A 4A LSR x2 C056E7: 0A ASL A (Current form * 2) C056E8: AA TAX C056E9: C2 20 REP #$20 (16-bit A) C056EB: BF 3E 57 C0 LDA $C0573E,X C056EF: 85 C0 STA $C0 C056F1: A5 06 LDA $06 (A = 0) C056F3: E2 20 SEP #$20 (8-bit A) C056F5: 64 55 STZ $55 C056F7: 60 RTS C056F8: AD D6 0A LDA $0AD6 (Get current map ID) C056FB: AA TAX C056FC: BF 39 57 C0 LDA $C05739,X C05700: C2 20 REP #$20 (16-bit A) C05702: EB XBA C05703: AA TAX C05704: A4 06 LDY $06 (Y = 0) C05706: BF C0 FC CF LDA $CFFCC0,X C0570A: 99 00 0C STA $0C00,Y C0570D: E8 E8 INX x2 C0570F: C8 C8 INY x2 C05711: C0 00 01 CPY #$0100 (256) C05714: D0 F0 BNE $5706 (-16) C05716: A5 06 LDA $06 (A = 0) C05718: E2 20 SEP #$20 (8-bit A) C0571A: 9C 23 11 STZ $1123 C0571D: AD D6 0A LDA $0AD6 (Get current map ID) C05720: F0 04 BEQ $5726 (+4) (If it's Bartz's World...) C05722: C9 02 CMP #$02 (2) C05724: D0 08 BNE $572E (+8) (...or Merged World...) C05726: A9 0E LDA #$0E (14) C05728: 8D 23 11 STA $1123 C0572B: 20 0D 99 JSR $990D (...I don't know what this does) C0572E: 20 18 96 JSR $9618 C05731: 20 04 97 JSR $9704 C05734: A9 66 LDA #$66 (102) C05736: 85 5E STA $5E (Enable HDMA channels 1, 2, 5 and 6 on next NMI) C05738: 60 RTS C05739: 00 C0573A: 01 C0573B: 00 C0573C: 02 C0573D: 02 C0573E: 02 00 C05740: 04 00 C05742: 04 00 C05744: 04 00 C05746: 04 00 C05748: 04 00 C0574A: 10 00 C0574C: A9 01 LDA #$01 C0574E: 85 53 STA $53 C05750: 9C 9F 16 STZ $169F C05753: A5 B9 LDA $B9 C05755: 8D DB 0A STA $0ADB (Direction player faces) C05758: 1A INC A C05759: 85 BF STA $BF C0575B: 20 A7 54 JSR $54A7 C0575E: 20 F6 5A JSR $5AF6 C05761: 20 DB 5A JSR $5ADB C05764: 20 AA 3E JSR $3EAA (Init NPC locations) C05767: 20 44 6B JSR $6B44 C0576A: 20 75 58 JSR $5875 C0576D: 20 DB 58 JSR $58DB C05770: 20 BD 5C JSR $5CBD C05773: 20 D4 63 JSR $63D4 C05776: 20 0E 58 JSR $580E C05779: 20 F9 57 JSR $57F9 C0577C: 20 F6 54 JSR $54F6 C0577F: AE 71 09 LDX $0971 C05782: 8E 02 0C STX $0C02 C05785: 20 1A 59 JSR $591A C05788: A5 55 LDA $55 C0578A: F0 06 BEQ $5792 (+6) C0578C: 20 DB 5A JSR $5ADB C0578F: 20 28 3D JSR $3D28 C05792: 64 BA STZ $BA C05794: A2 02 00 LDX #$0002 (2) C05797: 86 C0 STX $C0 C05799: 20 2D 5B JSR $5B2D C0579C: 20 44 6B JSR $6B44 C0579F: 20 0C 6D JSR $6D0C C057A2: 20 6A 6C JSR $6C6A C057A5: 20 92 8C JSR $8C92 C057A8: 20 2E 8C JSR $8C2E C057AB: 20 0E 8D JSR $8D0E C057AE: 20 53 8B JSR $8B53 C057B1: 20 96 9A JSR $9A96 C057B4: 20 30 5D JSR $5D30 C057B7: 20 17 28 JSR $2817 C057BA: 20 8C 92 JSR $928C C057BD: A9 FE LDA #$FE (254) C057BF: 20 3C CA JSR $CA3C (Get event flag $1FE) C057C2: C9 00 CMP #$00 (Is flag set?) C057C4: D0 06 BNE $57CC (+6) (Branch if so) C057C6: AD 25 11 LDA $1125 C057C9: 20 0A 46 JSR $460A (Play map BG music?) C057CC: 20 E8 17 JSR $17E8 C057CF: 20 72 13 JSR $1372 C057D2: 20 A6 13 JSR $13A6 C057D5: 20 7C 23 JSR $237C C057D8: 20 B3 39 JSR $39B3 C057DB: 20 73 29 JSR $2973 C057DE: 20 42 28 JSR $2842 C057E1: AD 0F 11 LDA $110F C057E4: 4A (x5) LSR x5 C057E9: 29 03 AND #$03 C057EB: AA TAX C057EC: BF F5 57 C0 LDA $C057F5,X C057F0: 85 5E STA $5E C057F2: 64 55 STZ $55 C057F4: 60 RTS C057F5: 06 C057F6: 46 C057F7: 7E C057F8: 06 C057F9: AD 0F 11 LDA $110F C057FC: 29 0C AND #$0C C057FE: F0 0A BEQ $580A (+10) C05800: 29 08 AND #$08 C05802: D0 04 BNE $5808 (+4) C05804: A9 10 LDA #$10 (16) C05806: 80 02 BRA $580A (+2) C05808: A9 3F LDA #$3F (63) C0580A: 8D 9A 16 STA $169A C0580D: 60 RTS C0580E: A2 00 00 LDX #$0000 (0) (LDX $06?!) C05811: 8E 98 10 STX $1098 C05814: 8E 9A 10 STX $109A C05817: 8E 9C 10 STX $109C C0581A: 8E 9E 10 STX $109E C0581D: AD 21 11 LDA $1121 C05820: 10 2A BPL $584C (+42) C05822: 29 07 AND #$07 C05824: 0A ASL A C05825: AA TAX C05826: C2 20 REP #$20 (16-bit A) C05828: BF A8 5B C0 LDA $C05BA8,X C0582C: 8D 9E 10 STA $109E C0582F: A5 06 LDA $06 (A = 0) C05831: E2 20 SEP #$20 (8-bit A) C05833: AD 21 11 LDA $1121 C05836: 4A 4A 4A LSR x3 C05839: 29 07 AND #$07 C0583B: 0A ASL A C0583C: AA TAX C0583D: C2 20 REP #$20 (16-bit A) C0583F: BF A8 5B C0 LDA $C05BA8,X C05843: 8D 9C 10 STA $109C C05846: A5 06 LDA $06 (A = 0) C05848: E2 20 SEP #$20 (8-bit A) C0584A: 80 28 BRA $5874 (+40) C0584C: 29 07 AND #$07 C0584E: 0A ASL A C0584F: AA TAX C05850: C2 20 REP #$20 (16-bit A) C05852: BF A8 5B C0 LDA $C05BA8,X C05856: 8D 9A 10 STA $109A C05859: A5 06 LDA $06 (A = 0) C0585B: E2 20 SEP #$20 (8-bit A) C0585D: AD 21 11 LDA $1121 C05860: 4A 4A 4A LSR x3 C05863: 29 07 AND #$07 C05865: 0A ASL A C05866: AA TAX C05867: C2 20 REP #$20 (16-bit A) C05869: BF A8 5B C0 LDA $C05BA8,X C0586D: 8D 98 10 STA $1098 C05870: A5 06 LDA $06 (A = 0) C05872: E2 20 SEP #$20 (8-bit A) C05874: 60 RTS C05875: C2 20 REP #$20 (16-bit A) C05877: AD 18 11 LDA $1118 (BG1 tile layout) C0587A: 29 FF 03 AND #$03FF C0587D: 3A DEC A C0587E: A8 TAY C0587F: A5 06 LDA $06 (A = 0) C05881: E2 20 SEP #$20 (8-bit A) C05883: A6 06 LDX $06 (X = 0) C05885: C0 FF FF CPY #$FFFF (-1) C05888: F0 05 BEQ $588F (+5) C0588A: 20 CA 6A JSR $6ACA C0588D: 80 05 BRA $5894 (+5) C0588F: A9 01 LDA #$01 (1) C05891: 20 21 6B JSR $6B21 C05894: C2 20 REP #$20 (16-bit A) C05896: AD 19 11 LDA $1119 (BG2 tile layout) C05899: 29 FC 0F AND #$0FFC C0589C: 4A 4A LSR x2 C0589E: 3A DEC A C0589F: A8 TAY C058A0: A5 06 LDA $06 (A = 0) C058A2: E2 20 SEP #$20 (8-bit A) C058A4: A2 00 10 LDX #$1000 (4,096) C058A7: C0 FF FF CPY #$FFFF (-1) C058AA: F0 05 BEQ $58B1 (+5) C058AC: 20 CA 6A JSR $6ACA C058AF: 80 05 BRA $58B6 (+5) C058B1: A9 01 LDA #$01 C058B3: 20 21 6B JSR $6B21 C058B6: C2 20 REP #$20 (16-bit A) C058B8: AD 1A 11 LDA $111A (BG3 tile layout) C058BB: 29 F0 3F AND #$3FF0 C058BE: 4A 4A 4A 4A LSR x4 C058C2: 3A DEC A C058C3: A8 TAY C058C4: A5 06 LDA $06 (A = 0) C058C6: E2 20 SEP #$20 (8-bit A) C058C8: A2 00 20 LDX #$2000 (8,192) C058CB: C0 FF FF CPY #$FFFF (-1) C058CE: F0 05 BEQ $58D5 (+5) C058D0: 20 CA 6A JSR $6ACA C058D3: 80 05 BRA $58DA (+5) C058D5: A9 01 LDA #$01 (1) C058D7: 20 21 6B JSR $6B21 C058DA: 60 RTS C058DB: AD 22 11 LDA $1122 (Map palette index) C058DE: C2 20 REP #$20 (16-bit A) C058E0: EB XBA (Multiply by 256) C058E1: AA TAX (Move to X) C058E2: A5 06 LDA $06 (A = 0) C058E4: A8 TAY (Y = 0) C058E5: E2 20 SEP #$20 (8-bit A) C058E7: BF 00 BB C3 LDA $C3BB00,X (Copy palette data...) C058EB: 99 00 0C STA $0C00,Y (...to CGRAM buffer) C058EE: E8 INX C058EF: C8 INY C058F0: C0 00 01 CPY #$0100 (256)(Loop until fully copied) C058F3: D0 F2 BNE $58E7 (-14) C058F5: A6 06 LDX $06 (X = 0) C058F7: 8E 00 0C STX $0C00 C058FA: A2 8C 31 LDX #$318C C058FD: 8E 04 0C STX $0C04 C05900: A2 FF 7F LDX #$7FFF C05903: 8E 06 0C STX $0C06 C05906: A2 80 00 LDX #$0080 C05909: BF FF FB DF LDA $DFFBFF,X C0590D: 9D FF 0C STA $0CFF,X C05910: 9D 7F 0D STA $0D7F,X C05913: CA DEX C05914: D0 F3 BNE $5909 (-13) C05916: 20 67 4D JSR $4D67 (Write CGRAM) C05919: 60 RTS C0591A: C2 20 REP #$20 (16-bit A) C0591C: AD 14 11 LDA $1114 (LDA $1115?!) C0591F: 29 00 3F AND #$3F00 (AND #$003F?!) C05922: EB XBA (Makes this unnecessary!) C05923: 0A 0A ASL x2 C05925: AA TAX C05926: BF 84 2D DC LDA $DC2D84,X C0592A: 18 CLC C0592B: 69 24 2E ADC #$2E24 C0592E: 85 23 STA $23 C05930: A9 DC 00 LDA #$00DC (220) C05933: 7F 86 2D DC ADC $DC2D86,X C05937: 29 FF 00 AND #$00FF C0593A: E2 20 SEP #$20 (8-bit A) C0593C: 85 25 STA $25 C0593E: C2 20 REP #$20 (16-bit A) C05940: A5 06 LDA $06 (A = 0) C05942: 38 SEC C05943: E5 23 SBC $23 C05945: C9 00 20 CMP #$2000 C05948: 90 0B BCC $5955 (+11) C0594A: A9 00 20 LDA #$2000 C0594D: 85 2C STA $2C C0594F: A5 06 LDA $06 (A = 0) C05951: 85 0D STA $0D C05953: 80 0A BRA $595F (+10) C05955: 85 2C STA $2C C05957: A5 23 LDA $23 C05959: 18 CLC C0595A: 69 00 20 ADC #$2000 C0595D: 85 0D STA $0D C0595F: A5 06 LDA $06 (A = 0) C05961: E2 20 SEP #$20 (8-bit A) C05963: A6 06 LDX $06 (X = 0, TAX...) C05965: 86 2E STX $2E C05967: 20 BC 4C JSR $4CBC (Start DMA) C0596A: C2 20 REP #$20 (16-bit A) C0596C: A5 2C LDA $2C C0596E: 4A LSR A C0596F: 85 2E STA $2E C05971: A5 06 LDA $06 (A = 0) C05973: E2 20 SEP #$20 (8-bit A) C05975: A6 0D LDX $0D C05977: F0 0B BEQ $5984 (+11) C05979: 86 2C STX $2C C0597B: A6 06 LDX $06 (X = 0) C0597D: 86 23 STX $23 C0597F: E6 25 INC $25 C05981: 20 BC 4C JSR $4CBC (Start DMA) C05984: C2 20 REP #$20 (16-bit A) C05986: AD 15 11 LDA $1115 C05989: 29 C0 0F AND #$0FC0 C0598C: 0A 0A ASL x2 C0598E: EB XBA C0598F: 0A 0A ASL x2 C05991: AA TAX C05992: BF 84 2D DC LDA $DC2D84,X C05996: 18 CLC C05997: 69 24 2E ADC #$2E24 C0599A: 85 23 STA $23 C0599C: A9 DC 00 LDA #$00DC (220) C0599F: 7F 86 2D DC ADC $DC2D86,X C059A3: 29 FF 00 AND #$00FF C059A6: E2 20 SEP #$20 (8-bit A) C059A8: 85 25 STA $25 C059AA: C2 20 REP #$20 (16-bit A) C059AC: A5 06 LDA $06 (A = 0) C059AE: 38 SEC C059AF: E5 23 SBC $23 C059B1: C9 00 20 CMP #$2000 C059B4: 90 0B BCC $59C1 (+11) C059B6: A9 00 20 LDA #$2000 C059B9: 85 2C STA $2C C059BB: A5 06 LDA $06 (A = 0) C059BD: 85 0D STA $0D C059BF: 80 0A BRA $59CB (+10) C059C1: 85 2C STA $2C C059C3: A5 23 LDA $23 C059C5: 18 CLC C059C6: 69 00 20 ADC #$2000 C059C9: 85 0D STA $0D C059CB: A5 06 LDA $06 (A = 0) C059CD: E2 20 SEP #$20 (8-bit A) C059CF: A2 00 10 LDX #$1000 C059D2: 86 2E STX $2E C059D4: 20 BC 4C JSR $4CBC (Start DMA) C059D7: C2 20 REP #$20 (16-bit A) C059D9: A5 2C LDA $2C C059DB: 4A LSR A C059DC: 18 CLC C059DD: 69 00 10 ADC #$1000 C059E0: 85 2E STA $2E C059E2: A5 06 LDA $06 (A = 0) C059E4: E2 20 SEP #$20 (8-bit A) C059E6: A6 0D LDX $0D C059E8: F0 0B BEQ $59F5 (+11) C059EA: 86 2C STX $2C C059EC: A6 06 LDX $06 (X = 0) C059EE: 86 23 STX $23 C059F0: E6 25 INC $25 C059F2: 20 BC 4C JSR $4CBC (Start DMA) C059F5: C2 20 REP #$20 (16-bit A) C059F7: AD 16 11 LDA $1116 C059FA: 29 F0 03 AND #$03F0 C059FD: 4A 4A LSR x2 C059FF: AA TAX C05A00: BF 84 2D DC LDA $DC2D84,X C05A04: 18 CLC C05A05: 69 24 2E ADC #$2E24 C05A08: 85 23 STA $23 C05A0A: A9 DC 00 LDA #$00DC (220) C05A0D: 7F 86 2D DC ADC $DC2D86,X C05A11: 29 FF 00 AND #$00FF C05A14: E2 20 SEP #$20 (8-bit A) C05A16: 85 25 STA $25 C05A18: C2 20 REP #$20 (16-bit A) C05A1A: A5 06 LDA $06 (A = 0) C05A1C: 38 SEC C05A1D: E5 23 SBC $23 C05A1F: C9 00 20 CMP #$2000 C05A22: 90 0B BCC $5A2F (+11) C05A24: A9 00 20 LDA #$2000 C05A27: 85 2C STA $2C C05A29: A5 06 LDA $06 (A = 0) C05A2B: 85 0D STA $0D C05A2D: 80 0A BRA $5A39 (+10) C05A2F: 85 2C STA $2C C05A31: A5 23 LDA $23 C05A33: 18 CLC C05A34: 69 00 20 ADC #$2000 C05A37: 85 0D STA $0D C05A39: A5 06 LDA $06 (A = 0) C05A3B: E2 20 SEP #$20 (8-bit A) C05A3D: A2 00 20 LDX #$2000 C05A40: 86 2E STX $2E C05A42: 20 BC 4C JSR $4CBC (Start DMA) C05A45: C2 20 REP #$20 (16-bit A) C05A47: A5 2C LDA $2C C05A49: 4A LSR A C05A4A: 18 CLC C05A4B: 69 00 20 ADC #$2000 C05A4E: 85 2E STA $2E C05A50: A5 06 LDA $06 (A = 0) C05A52: E2 20 SEP #$20 (8-bit A) C05A54: A6 0D LDX $0D C05A56: F0 0B BEQ $5A63 (+11) C05A58: 86 2C STX $2C C05A5A: A6 06 LDX $06 (X = 0) C05A5C: 86 23 STX $23 C05A5E: E6 25 INC $25 C05A60: 20 BC 4C JSR $4CBC (Start DMA) C05A63: C2 20 REP #$20 (16-bit A) C05A65: AD 16 11 LDA $1116 C05A68: 29 00 FC AND #$FC00 C05A6B: 4A LSR A C05A6C: EB XBA C05A6D: AA TAX C05A6E: BF 00 00 DC LDA $DC0000,X C05A72: 18 CLC C05A73: 69 24 00 ADC #$0024 (36) C05A76: 85 23 STA $23 C05A78: A5 06 LDA $06 (A = 0) C05A7A: E2 20 SEP #$20 (8-bit A) C05A7C: A9 DC LDA #$DC (220) C05A7E: 85 25 STA $25 C05A80: A2 00 40 LDX #$4000 C05A83: 86 2E STX $2E C05A85: A2 00 10 LDX #$1000 C05A88: 86 2C STX $2C C05A8A: 20 BC 4C JSR $4CBC (Start DMA) C05A8D: 20 1E 1D JSR $1D1E C05A90: 20 14 1E JSR $1E14 C05A93: A2 00 3D LDX #$3D00 C05A96: 86 2E STX $2E C05A98: A2 00 06 LDX #$0600 C05A9B: 86 2C STX $2C C05A9D: A2 80 D3 LDX #$D380 C05AA0: 86 23 STX $23 C05AA2: A9 C0 LDA #$C0 C05AA4: 85 25 STA $25 C05AA6: 20 BC 4C JSR $4CBC (Start DMA) C05AA9: 20 7C 25 JSR $257C C05AAC: A6 06 LDX $06 (X = 0) C05AAE: BD 00 05 LDA $0500,X C05AB1: 29 40 AND #$40 C05AB3: D0 07 BNE $5ABC (+7) C05AB5: BD 20 05 LDA $0520,X C05AB8: 29 01 AND #$01 C05ABA: D0 1E BNE $5ADA (+30) C05ABC: C2 20 REP #$20 (16-bit A) C05ABE: 8A TXA C05ABF: 18 CLC C05AC0: 69 50 00 ADC #$0050 (80) C05AC3: AA TAX C05AC4: A5 06 LDA $06 (A = 0) C05AC6: E2 20 SEP #$20 (8-bit A) C05AC8: E0 40 01 CPX #$0140 (320) C05ACB: D0 E1 BNE $5AAE (-31) C05ACD: 9C 6D 0B STZ $0B6D C05AD0: A2 20 00 LDX #$0020 (32) C05AD3: 86 2E STX $2E C05AD5: 86 2C STX $2C C05AD7: 20 13 4D JSR $4D13 (JMP!) C05ADA: 60 RTS C05ADB: A5 A4 LDA $A4 C05ADD: D0 16 BNE $5AF5 (+22) C05ADF: A2 00 64 LDX #$6400 C05AE2: 86 2E STX $2E C05AE4: A2 00 02 LDX #$0200 C05AE7: 86 2C STX $2C C05AE9: A2 00 FE LDX #$FE00 C05AEC: 86 23 STX $23 C05AEE: A9 CD LDA #$CD C05AF0: 85 25 STA $25 C05AF2: 20 BC 4C JSR $4CBC (Start DMA) C05AF5: 60 RTS (Map entry data loader function.) C05AF6: AD D4 0A LDA $0AD4 (Get map ID) C05AF9: 8D 1B 21 STA $211B C05AFC: AD D5 0A LDA $0AD5 C05AFF: 8D 1B 21 STA $211B C05B02: A9 1A LDA #$1A (26) C05B04: 8D 1C 21 STA $211C C05B07: 8D 1C 21 STA $211C C05B0A: AE 34 21 LDX $2134 (Map ID times 26) C05B0D: A4 06 LDY $06 (Y = 0) C05B0F: BF 00 9C CE LDA $CE9C00,X (Copy map entry data) C05B13: 99 0C 11 STA $110C,Y C05B16: E8 INX C05B17: C8 INY C05B18: C0 1A 00 CPY #$001A (26 bytes to copy) C05B1B: D0 F2 BNE $5B0F (-14) C05B1D: C2 20 REP #$20 (16-bit A) C05B1F: AD 0C 11 LDA $110C (Get ID from entry data) C05B22: 29 FF 0F AND #$0FFF C05B25: 8D D6 0A STA $0AD6 (Save as current map ID) C05B28: A5 06 LDA $06 (A = 0) C05B2A: E2 20 SEP #$20 (8-bit A) C05B2C: 60 RTS C05B2D: A9 09 LDA #$09 (9) C05B2F: 8D 05 21 STA $2105 (BG mode 1, BG3 priority) C05B32: A9 49 LDA #$49 C05B34: 8D 07 21 STA $2107 (BG1 tilemap address) C05B37: AE D6 0A LDX $0AD6 (Get current map ID) C05B3A: E0 DD 00 CPX #$00DD (221)(Is it the high skies in the attack on the Lonka Ruins' cannons?) C05B3D: F0 0C BEQ $5B4B (+12) (Branch if so) C05B3F: A9 51 LDA #$51 C05B41: 8D 08 21 STA $2108 (BG2 tilemap address) C05B44: A9 59 LDA #$59 C05B46: 8D 09 21 STA $2109 (BG3 tilemap address) C05B49: 80 0A BRA $5B55 (+10) C05B4B: A9 52 LDA #$52 C05B4D: 8D 08 21 STA $2108 (BG2 tilemap address) C05B50: A9 5A LDA #$5A C05B52: 8D 09 21 STA $2109 (BG3 tilemap address) C05B55: AE D4 0A LDX $0AD4 (Get map ID) C05B58: E0 BE 00 CPX #$00BE (Is it on the deck of the airship while airborne?) C05B5B: D0 05 BNE $5B62 (+5) (Branch if not) C05B5D: A9 23 LDA #$23 C05B5F: 8D 09 21 STA $2109 (BG3 tilemap address) C05B62: AD 10 11 LDA $1110 (Map graphic math setting) C05B65: 29 3F AND #$3F C05B67: 85 08 STA $08 C05B69: 0A ASL A C05B6A: 18 CLC (Unnecessary...) C05B6B: 65 08 ADC $08 C05B6D: AA TAX C05B6E: BF B8 5B C0 LDA $C05BB8,X C05B72: 85 48 STA $48 (Backup color math designation) C05B74: A5 44 LDA $44 (Changing color?) C05B76: D0 04 BNE $5B7C (+4) (If not...) C05B78: A5 48 LDA $48 (...copy backup color math designation to real color math designation) C05B7A: 85 47 STA $47 C05B7C: BF BA 5B C0 LDA $C05BBA,X C05B80: 85 4A STA $4A (Backup subscreen designation) C05B82: 8D 2D 21 STA $212D (Subscreen designation) C05B85: BF B9 5B C0 LDA $C05BB9,X (See below for what this byte does) C05B89: 29 01 AND #$01 C05B8B: F0 04 BEQ $5B91 (+4) C05B8D: A9 BF LDA #$BF C05B8F: 80 02 BRA $5B93 (+2) C05B91: A9 BC LDA #$BC C05B93: 8D 23 21 STA $2123 (Window mask settings for BG1 and BG2) C05B96: BF B9 5B C0 LDA $C05BB9,X C05B9A: 09 01 ORA #$01 (Enable BG1 on main screen) C05B9C: 8D 2C 21 STA $212C (Main screen designation) C05B9F: A5 44 LDA $44 (Changing color?) C05BA1: D0 04 BNE $5BA7 (+4) (If not...) C05BA3: A5 4A LDA $4A (...copy backup subscreen designation to real subscreen designation) C05BA5: 85 49 STA $49 C05BA7: 60 RTS C05BA8: 00 00 C05BAA: FC FF C05BAC: FE FF C05BAE: FF FF C05BB0: 00 00 C05BB2: 01 00 C05BB4: 02 00 C05BB6: 04 00 (This data gets used by the function starting at C05B2D. The first byte specifies the color math data that will eventually be written to $2131. The third byte specifies the subscreen designation. The second byte is slightly more complicated; bit 0 is a flag that determines the window mask settings. If bit 0 is set, window 1 will be enabled for BG1 and clipping will occur outside it; otherwise, window 1 will be disabled for BG1. Regardless, window 2 will be enabled for both BG1 and BG2, clipping will occur outside window 2 for BG1 but inside window 2 for BG2, window 1 will be enabled for BG2 and clipping will occur outside window 1. The rest of byte 2 specifies the main screen designation for all layers except BG1, which will always be enabled on the main screen.) C05BB8: 00 17 00 C05BBB: 51 13 04 C05BBE: 42 13 04 C05BC1: 42 13 10 C05BC4: 06 17 11 C05BC7: D1 13 04 C05BCA: 42 06 11 C05BCD: 53 13 15 C05BD0: 51 11 02 C05BD3: 43 12 04 C05BD6: 20 15 02 C05BD9: 11 13 02 C05BDC: 13 13 04 C05BDF: 52 13 14 C05BE2: 02 17 11 C05BE5: C2 12 04 C05BE8: 50 17 01 C05BEB: 44 17 11 C05BEE: 51 12 04 C05BF1: 44 17 13 (This function branches into the next one, changing the palette of the ocean to a solid blue.) C05BF4: A9 10 LDA #$10 C05BF6: 80 09 BRA $5C01 (+9) (This function changes the palette of the ocean when you are in the airship. As the airship rises, the water gets closer to a solid blue.) C05BF8: AD D6 0A LDA $0AD6 (Get current map ID) C05BFB: C9 03 CMP #$03 (Is it an overworld?) C05BFD: B0 2D BCS $5C2C (+45) (Exit if not) C05BFF: A5 6F LDA $6F (Vehicle height) C05C01: 4A LSR A (DIV 2) C05C02: 0A 0A 0A 0A ASL x4 (Multiply by 16) C05C06: AA TAX (Index to palette bytes) C05C07: AD D6 0A LDA $0AD6 (Get current map ID) C05C0A: 29 01 AND #$01 (Apparently Galuf's World needs all eight colours in the palette while the other two worlds only need seven) C05C0C: 0A ASL A C05C0D: 18 CLC (Unnecessary) C05C0E: 69 0E ADC #$0E (14) C05C10: 85 23 STA $23 (Number of palette bytes to copy) C05C12: 64 24 STZ $24 (Not more than 256) C05C14: A4 06 LDY $06 (Y = 0) C05C16: BF 2D 5C C0 LDA $C05C2D,X (Get palette byte) C05C1A: 99 40 0C STA $0C40,Y (Write to CGRAM buffer) C05C1D: BF 2E 5C C0 LDA $C05C2E,X C05C21: 99 41 0C STA $0C41,Y C05C24: E8 E8 INX x2 (Move to next colour) C05C26: C8 C8 INY x2 C05C28: C4 23 CPY $23 (Loop over entire palette) C05C2A: D0 EA BNE $5C16 (-22) C05C2C: 60 RTS (Water palettes. This one has the most contrast in its colours; the ones below get gradually more blue-shifted while the last one is solid blue.) C05C2D: 20 0C C05C2F: 60 40 C05C31: EC 76 C05C33: 47 72 C05C35: A5 65 C05C37: E2 58 C05C39: A1 4C C05C3B: 20 0C C05C3D: 20 18 C05C3F: 80 44 C05C41: AB 76 C05C43: 06 6E C05C45: 84 65 C05C47: E2 5C C05C49: A1 50 C05C4B: 20 18 C05C4D: 40 24 C05C4F: 80 48 C05C51: 49 72 C05C53: C5 6D C05C55: 64 65 C05C57: C2 5C C05C59: A1 50 C05C5B: 40 24 C05C5D: 61 30 C05C5F: 81 50 C05C61: 08 6E C05C63: A5 69 C05C65: 43 65 C05C67: C2 5C C05C69: A1 54 C05C6B: 61 30 C05C6D: 61 3C C05C6F: 81 54 C05C71: A6 69 C05C73: 64 69 C05C75: 03 61 C05C77: C1 5C C05C79: A1 58 C05C7B: 61 3C C05C7D: 81 48 C05C7F: A1 58 C05C81: 44 69 C05C83: 23 65 C05C85: E2 60 C05C87: C1 60 C05C89: A1 5C C05C8B: 81 48 C05C8D: 81 54 C05C8F: A1 5C C05C91: 03 65 C05C93: E2 64 C05C95: C2 60 C05C97: A1 60 C05C99: A1 5C C05C9B: 81 54 C05C9D: 81 54 C05C9F: A1 5C C05CA1: 03 65 C05CA3: E2 64 C05CA5: C2 60 C05CA7: A1 60 C05CA9: A1 5C C05CAB: 81 54 C05CAD: A1 60 C05CAF: A1 60 C05CB1: A1 60 C05CB3: A1 60 C05CB5: A1 60 C05CB7: A1 60 C05CB9: A1 60 C05CBB: A1 60 (Treasure box loading function.) C05CBD: C2 20 REP #$20 (16-bit A) C05CBF: AD D4 0A LDA $0AD4 (Get map ID) C05CC2: AA TAX C05CC3: BF 00 30 D1 LDA $D13000,X (Get offset of this map's treasures) C05CC7: 29 FF 00 AND #$00FF C05CCA: 0A 0A ASL x2 (Multiply by 4) C05CCC: 85 23 STA $23 C05CCE: BF 01 30 D1 LDA $D13001,X (Get offset of next map's treasures) C05CD2: 29 FF 00 AND #$00FF C05CD5: 0A 0A ASL x2 (Multiply by 4) C05CD7: 85 26 STA $26 C05CD9: A5 06 LDA $06 (A = 0) C05CDB: E2 20 SEP #$20 (8-bit A) C05CDD: A6 23 LDX $23 (Current treasure offset) C05CDF: E4 26 CPX $26 (Have we added all of this map's treasures?) C05CE1: F0 4C BEQ $5D2F (+76) (If so, exit) C05CE3: C2 20 REP #$20 (16-bit A) C05CE5: 8A TXA C05CE6: 4A 4A LSR x2 (Divide offset by 4) C05CE8: E2 20 SEP #$20 (8-bit A) C05CEA: EB XBA C05CEB: A9 00 LDA #$00 C05CED: EB XBA (This clears high byte of A, but you could've done AND #$00FF instead...) C05CEE: 8D A1 16 STA $16A1 (Treasure ID) C05CF1: 20 16 CA JSR $CA16 (Is it already obtained?) C05CF4: C9 00 CMP #$00 C05CF6: F0 2D BEQ $5D25 (+45) (Branch if not) C05CF8: A6 23 LDX $23 C05CFA: BF 11 32 D1 LDA $D13211,X (Treasure's Y-coordinate) C05CFE: C2 20 REP #$20 (16-bit A) C05D00: 0A (x6) ASL x6 (Multiply by 64) C05D06: 85 0D STA $0D C05D08: BF 10 32 D1 LDA $D13210,X (Treasure's X-coordinate) C05D0C: 29 FF 00 AND #$00FF (8-bit value) C05D0F: 18 CLC C05D10: 65 0D ADC $0D (Add to product...) C05D12: AA TAX (...to get tile index) C05D13: A5 06 LDA $06 (A = 0) C05D15: E2 20 SEP #$20 (8-bit A) C05D17: BF 00 00 7F LDA $7F0000,X (What's at that tile?) C05D1B: C9 02 CMP #$02 (Is it a chest?) C05D1D: D0 06 BNE $5D25 (+6) (If so...) C05D1F: A9 12 LDA #$12 C05D21: 9F 00 00 7F STA $7F0000,X (...change to open chest) C05D25: A6 23 LDX $23 C05D27: E8 E8 E8 E8 INX x4 (Look at next treasure) C05D2B: 86 23 STX $23 C05D2D: 80 AE BRA $5CDD (-82) C05D2F: 60 RTS C05D30: 20 87 5D JSR $5D87 C05D33: A9 7F LDA #$7F C05D35: 48 PHA C05D36: AB PLB (Data bank register = $7F) C05D37: A2 FE 00 LDX #$00FE C05D3A: A0 00 01 LDY #$0100 C05D3D: C2 20 REP #$20 (16-bit A) C05D3F: BD 6C 6B LDA $6B6C,X C05D42: 99 6C 6B STA $6B6C,Y C05D45: C8 C8 INY x2 C05D47: CA CA DEX x2 C05D49: 10 F4 BPL $5D3F (-12) C05D4B: A5 06 LDA $06 (A = 0) C05D4D: E2 20 SEP #$20 (8-bit A) C05D4F: A9 00 LDA #$00 (A = 0 already!) C05D51: 48 PHA C05D52: AB PLB (Data bank register = $00) C05D53: 60 RTS C05D54: 20 87 5D JSR $5D87 C05D57: A9 7F LDA #$7F C05D59: 48 PHA C05D5A: AB PLB (Data bank register = $7F) C05D5B: A2 FE 00 LDX #$00FE C05D5E: A0 00 01 LDY #$0100 C05D61: C2 20 REP #$20 (16-bit A) C05D63: BD 6C 6B LDA $6B6C,X C05D66: 99 6C 6B STA $6B6C,Y C05D69: C8 C8 INY x2 C05D6B: CA CA CA CA DEX x4 C05D6F: 10 F2 BPL $5D63 (-14) C05D71: A9 FF 00 LDA #$00FF C05D74: 99 6C 6B STA $6B6C,Y C05D77: C8 C8 INY x2 C05D79: C0 00 02 CPY #$0200 C05D7C: D0 F6 BNE $5D74 (-10) C05D7E: A5 06 LDA $06 (A = 0) C05D80: E2 20 SEP #$20 (8-bit A) C05D82: A9 00 LDA #$00 (A = 0 already!) C05D84: 48 PHA C05D85: AB PLB (Data bank register = $00) C05D86: 60 RTS C05D87: AD 9A 16 LDA $169A C05D8A: 29 7F AND #$7F C05D8C: D0 01 BNE $5D8F (+1) C05D8E: 60 RTS C05D8F: 85 0D STA $0D C05D91: 64 0E STZ $0E C05D93: C2 20 REP #$20 (16-bit A) C05D95: A6 06 LDX $06 (X = 0) C05D97: 9B TXY C05D98: A5 0D LDA $0D C05D9A: 48 PHA C05D9B: 85 0F STA $0F C05D9D: 06 0D ASL $0D C05D9F: A9 03 00 LDA #$0003 (3) C05DA2: 38 SEC C05DA3: E5 0D SBC $0D C05DA5: 85 11 STA $11 C05DA7: A5 0F LDA $0F C05DA9: 99 00 0E STA $0E00,Y C05DAC: A5 11 LDA $11 C05DAE: 30 13 BMI $5DC3 (+19) C05DB0: 8A TXA C05DB1: 38 SEC C05DB2: E5 0F SBC $0F C05DB4: 0A 0A ASL x2 C05DB6: 18 CLC C05DB7: 69 0A 00 ADC #$000A (10) C05DBA: 18 CLC C05DBB: 65 11 ADC $11 C05DBD: 85 11 STA $11 C05DBF: C6 0F DEC $0F C05DC1: 80 0C BRA $5DCF (+12) C05DC3: 8A TXA C05DC4: 0A 0A ASL x2 C05DC6: 18 CLC C05DC7: 69 06 00 ADC #$0006 (6) C05DCA: 18 CLC C05DCB: 65 11 ADC $11 C05DCD: 85 11 STA $11 C05DCF: E8 INX C05DD0: C8 C8 INY x2 C05DD2: E4 0F CPX $0F C05DD4: 90 D1 BCC $5DA7 (-47) C05DD6: BB TYX C05DD7: CA CA DEX x2 C05DD9: BD 00 0E LDA $0E00,X C05DDC: DD FE 0D CMP $0DFE,X C05DDF: F0 07 BEQ $5DE8 (+7) C05DE1: 8A TXA C05DE2: 4A LSR A C05DE3: 99 00 0E STA $0E00,Y C05DE6: C8 C8 INY x2 C05DE8: CA CA DEX x2 C05DEA: D0 ED BNE $5DD9 (-19) C05DEC: 68 PLA C05DED: 0A ASL A C05DEE: 49 FF FF EOR #$FFFF C05DF1: 1A INC A C05DF2: 18 CLC C05DF3: 69 02 01 ADC #$0102 (258) C05DF6: 85 0D STA $0D C05DF8: AA TAX C05DF9: F0 0F BEQ $5E0A (+15) C05DFB: A6 06 LDX $06 (X = 0) C05DFD: A9 FF 00 LDA #$00FF C05E00: 9F 6C 6B 7F STA $7F6B6C,X C05E04: E8 E8 INX x2 C05E06: E4 0D CPX $0D C05E08: D0 F6 BNE $5E00 (-10) C05E0A: A5 06 LDA $06 (A = 0) C05E0C: E2 20 SEP #$20 (8-bit A) C05E0E: 88 88 DEY x2 C05E10: B9 00 0E LDA $0E00,Y C05E13: 18 CLC C05E14: 69 78 ADC #$78 (120) C05E16: 9F 6D 6B 7F STA $7F6B6D,X C05E1A: A9 78 LDA #$78 (120) C05E1C: 38 SEC C05E1D: F9 00 0E SBC $0E00,Y C05E20: 9F 6C 6B 7F STA $7F6B6C,X C05E24: E8 E8 INX x2 C05E26: 88 88 DEY x2 C05E28: 10 E6 BPL $5E10 (-26) C05E2A: 60 RTS C05E2B: A9 80 LDA #$80 C05E2D: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C05E30: A9 01 LDA #$01 C05E32: 8D 00 43 STA $4300 (Double-reg, single-write) C05E35: A9 18 LDA #$18 C05E37: 8D 01 43 STA $4301 (DMA dest = $2118) C05E3A: A9 7F LDA #$7F C05E3C: 8D 04 43 STA $4304 (DMA source bank = $7F) C05E3F: C2 20 REP #$20 (8-bit A) C05E41: A9 22 76 LDA #$7622 C05E44: 8D 02 43 STA $4302 (DMA source = $7F:7622) C05E47: A9 00 10 LDA #$1000 (4,096) C05E4A: 8D 05 43 STA $4305 (DMA transfer size) C05E4D: A5 73 LDA $73 C05E4F: 4A LSR A C05E50: 18 CLC C05E51: 69 00 48 ADC #$4800 C05E54: 8D 16 21 STA $2116 (VRAM destination address) C05E57: A5 06 LDA $06 (A = 0) C05E59: E2 20 SEP #$20 (8-bit A) C05E5B: A9 01 LDA #$01 (INC A...) C05E5D: 8D 0B 42 STA $420B (Start DMA channel 0) C05E60: 60 RTS C05E61: AD D9 0A LDA $0AD9 (Player Y-coordinate) C05E64: 38 SEC C05E65: E9 03 SBC #$03 (3) C05E67: 29 3F AND #$3F C05E69: EB XBA C05E6A: C2 20 REP #$20 (16-bit A) C05E6C: 4A 4A LSR x2 C05E6E: 85 23 STA $23 C05E70: A5 06 LDA $06 (A = 0) C05E72: E2 20 SEP #$20 (8-bit A) C05E74: AD D8 0A LDA $0AD8 (Player X-coordinate) C05E77: 3A DEC A C05E78: 29 3F AND #$3F C05E7A: 18 CLC C05E7B: 65 23 ADC $23 C05E7D: 85 23 STA $23 C05E7F: A6 23 LDX $23 C05E81: BF 00 00 7F LDA $7F0000,X C05E85: 20 88 5E JSR $5E88 (So the rest of this function will be invoked twice) C05E88: C9 20 CMP #$20 (What is this for??!!) C05E8A: A5 53 LDA $53 C05E8C: D0 08 BNE $5E96 (+8) C05E8E: A6 61 LDX $61 C05E90: 86 69 STX $69 C05E92: A6 63 LDX $63 C05E94: 86 6B STX $6B C05E96: A4 06 LDY $06 (Y = 0) C05E98: A5 3F LDA $3F (Get frame counter) C05E9A: 4A 4A LSR x2 C05E9C: 85 17 STA $17 C05E9E: 98 TYA C05E9F: 18 CLC C05EA0: 65 6B ADC $6B C05EA2: 18 CLC C05EA3: 65 17 ADC $17 C05EA5: 29 1E AND #$1E C05EA7: AA TAX C05EA8: C2 20 REP #$20 (16-bit A) C05EAA: A5 69 LDA $69 C05EAC: 4A LSR A C05EAD: 18 CLC C05EAE: 7F C3 5E C0 ADC $C05EC3,X C05EB2: BB TYX C05EB3: 9F E2 6D 7F STA $7F6DE2,X C05EB7: A5 06 LDA $06 (A = 0) C05EB9: E2 20 SEP #$20 (8-bit A) C05EBB: C8 C8 INY x2 C05EBD: C0 20 00 CPY #$0020 C05EC0: D0 D6 BNE $5E98 (-42) C05EC2: 60 RTS C05EC3: 00 00 C05EC5: 00 00 C05EC7: 01 00 C05EC9: 01 00 C05ECB: 01 00 C05ECD: 01 00 C05ECF: 01 00 C05ED1: 00 00 C05ED3: 00 00 C05ED5: 00 00 C05ED7: FF FF C05ED9: FF FF C05EDB: FF FF C05EDD: FF FF C05EDF: FF FF C05EE1: 00 00 C05EE3: 00 00 C05EE5: A6 06 LDX $06 (X = 0) C05EE7: A9 90 LDA #$90 C05EE9: 9F 8C 6D 7F STA $7F6D8C,X C05EED: A9 E2 LDA #$E2 C05EEF: 9F 8D 6D 7F STA $7F6D8D,X C05EF3: A9 6D LDA #$6D C05EF5: 9F 8E 6D 7F STA $7F6D8E,X C05EF9: E8 E8 E8 INX x3 C05EFC: E0 2A 00 CPX #$002A (42) C05EFF: D0 E6 BNE $5EE7 (-26) C05F01: A9 00 LDA #$00 C05F03: 9F 8C 6D 7F STA $7F6D8C,X C05F07: 9C 0C 42 STZ $420C (HDMA off) C05F0A: A9 42 LDA #$42 C05F0C: 8D 30 43 STA $4330 (Single-reg, double-write, indirect HDMA addressing) C05F0F: 8D 50 43 STA $4350 (Channels 3 and 5) C05F12: A2 8C 6D LDX #$6D8C C05F15: 8E 32 43 STX $4332 (HDMA source address) C05F18: 8E 52 43 STX $4352 C05F1B: A9 7F LDA #$7F C05F1D: 8D 34 43 STA $4334 C05F20: 8D 54 43 STA $4354 (HDMA source is $7F:6D8C) C05F23: 8D 37 43 STA $4337 (HDMA indirect address bank = $7F) C05F26: 8D 57 43 STA $4357 C05F29: A5 53 LDA $53 C05F2B: D0 06 BNE $5F33 (+6) C05F2D: A9 0D LDA #$0D C05F2F: 8D 31 43 STA $4331 (Channel 3 HDMA dest = $210D, BG1 horizontal scroll register) C05F32: 60 RTS C05F33: A9 0F LDA #$0F C05F35: 8D 31 43 STA $4331 (Channel 3 HDMA dest = $210F, BG2 horizontal scroll register) C05F38: A9 11 LDA #$11 C05F3A: 8D 51 43 STA $4351 (Channel 5 HDMA dest = $2111, BG3 horizontal scroll register) C05F3D: 60 RTS C05F3E: A4 06 LDY $06 (Y = 0) C05F40: A5 3F LDA $3F (Get frame counter) C05F42: 4A 4A LSR x2 C05F44: 85 17 STA $17 C05F46: 98 TYA C05F47: 18 CLC C05F48: 65 6B ADC $6B C05F4A: 18 CLC C05F4B: 65 17 ADC $17 C05F4D: 29 1E AND #$1E C05F4F: AA TAX C05F50: C2 20 REP #$20 (16-bit A) C05F52: A5 6B LDA $6B C05F54: 4A LSR A C05F55: 18 CLC C05F56: 7F 6B 5F C0 ADC $C05F6B,X C05F5A: BB TYX C05F5B: 9F 02 6E 7F STA $7F6E02,X C05F5F: A5 06 LDA $06 (A = 0) C05F61: E2 20 SEP #$20 (8-bit A) C05F63: C8 C8 INY x2 C05F65: C0 20 00 CPY #$0020 (32) C05F68: D0 D6 BNE $5F40 (-42) C05F6A: 60 RTS C05F6B: 00 00 C05F6D: 00 00 C05F6F: 01 00 C05F71: 01 00 C05F73: 01 00 C05F75: 01 00 C05F77: 01 00 C05F79: 00 00 C05F7B: 00 00 C05F7D: 00 00 C05F7F: FF FF C05F81: FF FF C05F83: FF FF C05F85: FF FF C05F87: FF FF C05F89: 00 00 C05F8B: 00 00 C05F8D: A6 06 LDX $06 (X = 0) C05F8F: A9 90 LDA #$90 C05F91: 9F B7 6D 7F STA $7F6DB7,X C05F95: A9 02 LDA #$02 C05F97: 9F B8 6D 7F STA $7F6DB8,X C05F9B: A9 6E LDA #$6E C05F9D: 9F B9 6D 7F STA $7F6DB9,X C05FA1: E8 E8 E8 INX x3 C05FA4: E0 2A 00 CPX #$002A (42) C05FA7: D0 E6 BNE $5F8F (-26) C05FA9: A9 00 LDA #$00 C05FAB: 9F B7 6D 7F STA $7F6DB7,X C05FAF: 9C 0C 42 STZ $420C (HDMA off) C05FB2: A9 42 LDA #$42 C05FB4: 8D 40 43 STA $4340 (Single-reg, double-write, HDMA addressing) C05FB7: 8D 60 43 STA $4360 (Channels 4 and 6) C05FBA: A2 B7 6D LDX #$6DB7 C05FBD: 8E 42 43 STX $4342 (HDMA source address) C05FC0: 8E 62 43 STX $4362 C05FC3: A9 7F LDA #$7F C05FC5: 8D 44 43 STA $4344 C05FC8: 8D 64 43 STA $4364 (HDMA source = $7F:6DB7) C05FCB: 8D 47 43 STA $4347 (HDMA indirect address bank = $7F) C05FCE: 8D 67 43 STA $4367 C05FD1: A5 53 LDA $53 C05FD3: D0 06 BNE $5FDB (+6) C05FD5: A9 0E LDA #$0E C05FD7: 8D 41 43 STA $4341 (Channel 4 HDMA dest = $210E, BG1 vertical scroll register) C05FDA: 60 RTS C05FDB: A9 10 LDA #$10 C05FDD: 8D 41 43 STA $4341 (Channel 4 HDMA dest = $2110, BG2 vertical scroll register) C05FE0: A9 12 LDA #$12 C05FE2: 8D 61 43 STA $4361 (Channel 6 HDMA dest = $2112, BG3 vertical scroll register) C05FE5: 60 RTS C05FE6: AD 9E 16 LDA $169E C05FE9: C9 02 CMP #$02 C05FEB: F0 03 BEQ $5FF0 (+3) C05FED: 4C 76 60 JMP $6076 C05FF0: A9 70 LDA #$70 C05FF2: 8D 00 03 STA $0300 C05FF5: A9 80 LDA #$80 C05FF7: 8D 01 03 STA $0301 C05FFA: A9 C2 LDA #$C2 C05FFC: 8D 02 03 STA $0302 C05FFF: A9 01 LDA #$01 C06001: 8D 03 03 STA $0303 C06004: 64 BC STZ $BC C06006: A5 42 LDA $42 C06008: D0 3E BNE $6048 (+62) C0600A: AD D8 0A LDA $0AD8 (Player X-coordinate) C0600D: 85 75 STA $75 C0600F: AD D9 0A LDA $0AD9 (Player Y-coordinate) C06012: 85 76 STA $76 C06014: A5 76 LDA $76 (...) C06016: C2 20 REP #$20 (16-bit A) C06018: 0A (x6) ASL x6 (Multiply by 64) C0601E: 85 0D STA $0D C06020: A5 75 LDA $75 C06022: 29 FF 00 AND #$00FF C06025: 18 CLC C06026: 65 0D ADC $0D C06028: AA TAX C06029: A5 06 LDA $06 (A = 0) C0602B: E2 20 SEP #$20 (8-bit A) C0602D: BF 00 00 7F LDA $7F0000,X C06031: C9 05 CMP #$05 (5) C06033: D0 40 BNE $6075 (+64) C06035: A2 01 01 LDX #$0101 (257) C06038: 86 2C STX $2C C0603A: A6 06 LDX $06 (X = 0) C0603C: 86 73 STX $73 C0603E: A9 15 LDA #$15 C06040: 8D B3 16 STA $16B3 C06043: 20 08 6F JSR $6F08 C06046: 80 2D BRA $6075 (+45) C06048: A5 42 LDA $42 C0604A: 4A 4A 4A LSR x3 C0604D: A9 00 LDA #$00 C0604F: 69 29 ADC #$29 C06051: 85 BB STA $BB C06053: A5 42 LDA $42 C06055: C9 30 CMP #$30 C06057: D0 08 BNE $6061 (+8) C06059: 20 71 4A JSR $4A71 (Prepare screen fade-out) C0605C: A9 85 LDA #$85 C0605E: 20 3C 46 JSR $463C C06061: A5 42 LDA $42 C06063: C9 30 CMP #$30 C06065: 90 0E BCC $6075 (+14) C06067: A5 C6 LDA $C6 C06069: 1A 1A INC x2 C0606B: 85 C6 STA $C6 C0606D: C9 80 CMP #$80 C0606F: D0 04 BNE $6075 (+4) C06071: A9 80 LDA #$80 C06073: 85 42 STA $42 C06075: 60 RTS C06076: A5 42 LDA $42 C06078: D0 06 BNE $6080 (+6) C0607A: 20 71 4A JSR $4A71 (Prepare screen fade-out) C0607D: 9C 9E 16 STZ $169E C06080: 60 RTS C06081: AD 9E 16 LDA $169E C06084: D0 03 BNE $6089 (+3) C06086: 20 71 4A JSR $4A71 (Prepare screen fade-out) C06089: 64 42 STZ $42 C0608B: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C0608E: AD 9E 16 LDA $169E C06091: F0 0E BNE $60A1 (+14) C06093: A5 42 LDA $42 C06095: 30 0A BMI $60A1 (+10) C06097: 20 E6 5F JSR $5FE6 C0609A: 20 7C 23 JSR $237C (Update player sprite) C0609D: E6 42 INC $42 C0609F: 80 EA BRA $608B (-22) C060A1: E6 42 INC $42 C060A3: A5 45 LDA $45 C060A5: D0 E4 BNE $608B (-28) C060A7: 60 RTS C060A8: AD 9E 16 LDA $169E C060AB: C9 02 CMP #$02 (2) C060AD: D0 50 BNE $60FF (+80) C060AF: A5 42 LDA $42 C060B1: C9 1E CMP #$1E (30) C060B3: B0 0B BCS $60C0 (+11) C060B5: 3A DEC A C060B6: 0A 0A ASL x2 C060B8: 85 C6 STA $C6 C060BA: A9 2A LDA #$2A (42) C060BC: 85 BB STA $BB C060BE: 80 3F BRA $60FF (+63) (Forced branch to RTS?!) C060C0: C9 3E CMP #$3E (62) C060C2: B0 23 BCS $60E7 (+35) C060C4: 38 SEC C060C5: E9 1E SBC #$1E (30) C060C7: 85 BE STA $BE C060C9: 4A LSR A C060CA: B0 0B BCS $60D7 (+11) C060CC: 9C A2 10 STZ $10A2 C060CF: 9C A6 10 STZ $10A6 C060D2: 9C A8 10 STZ $10A8 C060D5: 80 28 BRA $60FF (+40) (Forced branch to RTS?!) C060D7: 49 FF EOR #$FF C060D9: 18 CLC C060DA: 69 10 ADC #$10 C060DC: 8D A2 10 STA $10A2 C060DF: 8D A6 10 STA $10A6 C060E2: 8D AA 10 STA $10AA C060E5: 80 18 BRA $60FF (+24) (Forced branch to RTS?!) C060E7: C9 56 CMP #$56 (86) C060E9: B0 08 BCS $60F3 (+8) C060EB: 64 BE STZ $BE C060ED: A9 28 LDA #$28 C060EF: 85 BB STA $BB C060F1: 80 0C BRA $60FF (+12) (Forced branch to RTS?!) C060F3: 9C 9E 16 STZ $169E C060F6: A9 01 LDA #$01 C060F8: 85 BC STA $BC C060FA: A9 02 LDA #$02 C060FC: 8D DB 0A STA $0ADB (Make player face down) C060FF: 60 RTS C06100: 20 68 4A JSR $4A68 C06103: 64 42 STZ $42 C06105: A9 81 LDA #$81 C06107: 8D 00 42 STA $4200 (NMI on, auto joypad read) C0610A: A9 00 LDA #$00 C0610C: 8D 00 21 STA $2100 (Screen brightness 0%, force blank off) C0610F: 58 CLI C06110: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C06113: AD 9E 16 LDA $169E C06116: C9 02 CMP #$02 C06118: D0 0A BNE $6124 (+10) C0611A: 20 A8 60 JSR $60A8 C0611D: 20 7C 23 JSR $237C (Update player sprite) C06120: E6 42 INC $42 C06122: 80 EC BRA $6110 (-20) C06124: A5 45 LDA $45 C06126: C9 F0 CMP #$F0 C06128: D0 E6 BNE $6110 (-26) C0612A: 60 RTS (This function draws the skybox while riding the airship.) C0612B: A2 3C 00 LDX #$003C (60) (15 * 4) C0612E: 86 23 STX $23 C06130: A6 06 LDX $06 (X = 0) C06132: 80 08 BRA $613C (+8) C06134: A2 40 00 LDX #$0040 (64) (16 * 4) C06137: 86 23 STX $23 C06139: A2 0F 00 LDX #$000F (15) C0613C: A5 6F LDA $6F (Vehicle height) C0613E: C9 08 CMP #$08 (8) C06140: 90 56 BCC $6198 (+86) (Exit if lower than 8) C06142: A4 06 LDY $06 (Y = 0) C06144: BF 99 61 C0 LDA $C06199,X (X-coordinate) C06148: 99 80 03 STA $0380,Y (Write to DMA buffer) C0614B: 99 C0 03 STA $03C0,Y C0614E: A5 6F LDA $6F (Vehicle height) C06150: 38 SEC C06151: E9 08 SBC #$08 (8) (Subtract 8) C06153: 0A 0A ASL x2 (Multiply by 4) C06155: 18 CLC C06156: 7F B8 61 C0 ADC $C061B8,X (Add Y-offset) C0615A: 99 81 03 STA $0381,Y (Write to DMA buffer) C0615D: 18 CLC C0615E: 69 10 ADC #$10 (16) (Add 16) C06160: 99 C1 03 STA $03C1,Y (Write to DMA buffer) C06163: A9 40 LDA #$40 (Skybox tile) C06165: 99 82 03 STA $0382,Y (Write to DMA buffer) C06168: 1A 1A INC x2 (Next skybox tile) C0616A: 99 C2 03 STA $03C2,Y (Write to DMA buffer) C0616D: A9 38 LDA #$38 (Priority 3, palette 4) C0616F: 99 83 03 STA $0383,Y (Write to DMA buffer...) C06172: 99 C3 03 STA $03C3,Y (...for both tiles) C06175: E8 INX (Next entry in lists) C06176: C8 C8 C8 C8 INY x4 (Next entry in buffer) C0617A: C4 23 CPY $23 (Loop over predetermined size) C0617C: D0 C6 BNE $6144 (-58) C0617E: A9 AA LDA #$AA C06180: 8D 18 04 STA $0418 C06183: 8D 19 04 STA $0419 C06186: 8D 1A 04 STA $041A C06189: 8D 1B 04 STA $041B C0618C: 8D 1C 04 STA $041C C0618F: 8D 1D 04 STA $041D C06192: 8D 1E 04 STA $041E C06195: 8D 1F 04 STA $041F C06198: 60 RTS (Skybox block X-coordinates.) C06199: 08 (8) C0619A: 18 (24) C0619B: 28 (40) C0619C: 38 (56) C0619D: 48 (72) C0619E: 58 (88) C0619F: 68 (104) C061A0: 78 (120) C061A1: 88 (136) C061A2: 98 (152) C061A3: A8 (168) C061A4: B8 (184) C061A5: C8 (200) C061A6: D8 (216) C061A7: E8 (232) C061A8: 00 (0) C061A9: 10 (16) C061AA: 20 (32) C061AB: 30 (48) C061AC: 40 (64) C061AD: 50 (80) C061AE: 60 (96) C061AF: 70 (112) C061B0: 80 (128) C061B1: 90 (144) C061B2: A0 (160) C061B3: B0 (176) C061B4: C0 (192) C061B5: D0 (208) C061B6: E0 (224) C061B7: F0 (240) (Skybox block Y-coordinate offsets.) C061B8: E3 (-29) C061B9: E2 (-30) C061BA: E2 (-30) C061BB: E1 (-31) C061BC: E1 (-31) C061BD: E0 (-32) C061BE: E0 (-32) C061BF: E0 (-32) C061C0: E0 (-32) C061C1: E0 (-32) C061C2: E1 (-31) C061C3: E1 (-31) C061C4: E2 (-30) C061C5: E2 (-30) C061C6: E3 (-29) C061C7: E3 (-29) C061C8: E2 (-30) C061C9: E2 (-30) C061CA: E1 (-31) C061CB: E1 (-31) C061CC: E0 (-32) C061CD: E0 (-32) C061CE: E0 (-32) C061CF: E0 (-32) C061D0: E0 (-32) C061D1: E0 (-32) C061D2: E1 (-31) C061D3: E1 (-31) C061D4: E2 (-30) C061D5: E2 (-30) C061D6: E3 (-29) C061D7: A9 00 LDA #$00 C061D9: 8D 05 21 STA $2105 (BG mode 0) C061DC: A6 06 LDX $06 (X = 0) C061DE: 86 26 STX $26 (This will be overwritten shortly without having ever been used...) C061E0: 64 08 STZ $08 C061E2: A5 08 LDA $08 C061E4: 4A LSR A C061E5: 85 09 STA $09 C061E7: A9 40 LDA #$40 (64) C061E9: 38 SEC C061EA: E5 09 SBC $09 (Subtract a multiple of 4) C061EC: AA TAX C061ED: 86 23 STX $23 C061EF: A5 08 LDA $08 C061F1: C2 20 REP #$20 (16-bit A) C061F3: EB XBA C061F4: 4A 4A LSR x2 C061F6: 85 26 STA $26 C061F8: A5 06 LDA $06 (A = 0) C061FA: E2 20 SEP #$20 (8-bit A) C061FC: A0 00 01 LDY #$0100 (256) C061FF: A6 23 LDX $23 C06201: BF E0 FB CD LDA $CDFBE0,X C06205: E8 INX C06206: 86 23 STX $23 C06208: 8D 1B 21 STA $211B (Multiply table entry...) C0620B: 9C 1B 21 STZ $211B C0620E: A5 08 LDA $08 C06210: 8D 1C 21 STA $211C C06213: 8D 1C 21 STA $211C (...by 2,056) C06216: AD D6 0A LDA $0AD6 (Get current map ID) C06219: C9 03 CMP #$03 (Is it an overworld?) C0621B: B0 17 BCS $6234 (+23) (Branch if not) C0621D: C2 20 REP #$20 (16-bit A) C0621F: AD 34 21 LDA $2134 (Get product) C06222: 4A (x5) LSR x5 (DIV 32) C06227: 18 CLC C06228: 69 00 01 ADC #$0100 (Add 256) C0622B: A6 26 LDX $26 C0622D: 9F 00 40 7F STA $7F4000,X C06231: 4C 49 62 JMP $6249 (BRA!) C06234: C2 20 REP #$20 (16-bit A) C06236: AD 34 21 LDA $2134 (Get product) C06239: 4A (x6) LSR x6 (DIV 64) C0623F: 18 CLC C06240: 69 80 00 ADC #$0080 (Add 128) C06243: A6 26 LDX $26 C06245: 9F 00 40 7F STA $7F4000,X C06249: A5 06 LDA $06 (A = 0) C0624B: E2 20 SEP #$20 (8-bit A) C0624D: E8 E8 INX x2 C0624F: 86 26 STX $26 C06251: 88 DEY C06252: D0 AB BNE $61FF (-85) (Loop 256 times) C06254: A5 08 LDA $08 C06256: 18 CLC C06257: 69 08 ADC #$08 (8) C06259: 85 08 STA $08 C0625B: C9 80 CMP #$80 (128) (Loop 16 times) C0625D: D0 83 BNE $61E2 (-125) C0625F: A2 08 00 LDX #$0008 (8) C06262: 86 26 STX $26 C06264: A6 06 LDX $06 (X = 0) C06266: 86 23 STX $23 C06268: DA PHX C06269: A6 23 LDX $23 C0626B: BF 40 D2 C0 LDA $C0D240,X C0626F: E8 INX C06270: 86 23 STX $23 C06272: FA PLX C06273: 8D 1B 21 STA $211B C06276: 9C 1B 21 STZ $211B C06279: A5 26 LDA $26 C0627B: 8D 1C 21 STA $211C C0627E: 8D 1C 21 STA $211C C06281: C2 20 REP #$20 (16-bit A) C06283: AD 34 21 LDA $2134 C06286: EB XBA C06287: 29 FF 00 AND #$00FF C0628A: E2 20 SEP #$20 (8-bit A) C0628C: 18 CLC C0628D: 69 E0 ADC #$E0 C0628F: 9F 00 62 7F STA $7F6200,X C06293: E8 INX C06294: 8A TXA C06295: D0 D1 BNE $6268 (-47) C06297: A0 00 00 LDY #$0000 (0) (LDY $06!) C0629A: 84 23 STY $23 C0629C: A5 26 LDA $26 C0629E: 18 CLC C0629F: 69 08 ADC #$08 (8) C062A1: 85 26 STA $26 C062A3: C2 20 REP #$20 (16-bit A) C062A5: A5 26 LDA $26 C062A7: 38 SEC C062A8: E9 08 00 SBC #$0008 (8) C062AB: 0A (x5) ASL x5 C062B0: AA TAX C062B1: A5 06 LDA $06 (A = 0) C062B3: E2 20 SEP #$20 (8-bit A) C062B5: A5 26 LDA $26 C062B7: C9 48 CMP #$48 (Loop five times) C062B9: D0 AD BNE $6268 (-83) C062BB: 60 RTS C062BC: A6 06 LDX $06 (X = 0) C062BE: A9 90 LDA #$90 (144) C062C0: 9F 18 6A 7F STA $7F6A18,X C062C4: A9 49 LDA #$49 (73) C062C6: 9F 19 6A 7F STA $7F6A19,X C062CA: A9 6A LDA #$6A (106) C062CC: 9F 1A 6A 7F STA $7F6A1A,X C062D0: E8 E8 E8 INX x3 C062D3: E0 2A 00 CPX #$002A (42) C062D6: D0 E6 BNE $62BE (-26) C062D8: A9 00 LDA #$00 C062DA: 8F 42 6A 7F STA $7F6A42 C062DE: A6 06 LDX $06 (X = 0) C062E0: A9 00 LDA #$00 (A = 0 already!) C062E2: 9F 49 6A 7F STA $7F6A49,X C062E6: E8 INX C062E7: E0 10 00 CPX #$0010 (16) C062EA: D0 F6 BNE $62E2 (-10) C062EC: 9C 0C 42 STZ $420C (HDMA off) C062EF: A9 40 LDA #$40 C062F1: 8D 70 43 STA $4370 (Single-reg, single-write, indirect HDMA addressing) C062F4: A9 00 LDA #$00 C062F6: A9 06 LDA #$06 (?!?!?!??!!??!!!?) C062F8: 8D 71 43 STA $4371 (HDMA dest = $2106, mosaic register...?) C062FB: A2 18 6A LDX #$6A18 C062FE: 8E 72 43 STX $4372 (HDMA source address) C06301: A9 7F LDA #$7F C06303: 8D 74 43 STA $4374 (HDMA source = $7F:6A18) C06306: 8D 77 43 STA $4377 (HDMA indirect address bank = $7F) C06309: 60 RTS C0630A: 9C 1C 21 STZ $211C C0630D: 9C 1C 21 STZ $211C (Mode 7 Matrix B) C06310: 9C 1D 21 STZ $211D C06313: 9C 1D 21 STZ $211D (Mode 7 Matrix C) C06316: A9 F0 LDA #$F0 C06318: 8F 00 6A 7F STA $7F6A00 C0631C: 8F 03 6A 7F STA $7F6A03 C06320: A9 00 LDA #$00 C06322: 8F 06 6A 7F STA $7F6A06 C06326: 9C 0C 42 STZ $420C (HDMA off) C06329: A9 42 LDA #$42 C0632B: 8D 50 43 STA $4350 (Single reg, double-write, indirect HDMA addressing) C0632E: 8D 60 43 STA $4360 (Channels 5 and 6 used) C06331: A9 1B LDA #$1B C06333: 8D 51 43 STA $4351 (HDMA channel 5 dest = $211B, Mode 7 Matrix A) C06336: A9 1E LDA #$1E C06338: 8D 61 43 STA $4361 (HDMA channel 6 dest = $211E, Mode 7 Matrix D) C0633B: A2 00 6A LDX #$6A00 C0633E: 8E 52 43 STX $4352 (HDMA source address) C06341: 8E 62 43 STX $4362 C06344: A9 7F LDA #$7F C06346: 8D 54 43 STA $4354 (HDMA source = $7F:6A00) C06349: 8D 64 43 STA $4364 C0634C: 8D 57 43 STA $4357 (HDMA indirect address bank = $7F) C0634F: 8D 67 43 STA $4367 C06352: A9 FF LDA #$FF C06354: 8F 0A 6A 7F STA $7F6A0A C06358: 8F 0D 6A 7F STA $7F6A0D C0635C: A9 00 LDA #$00 C0635E: 8F 10 6A 7F STA $7F6A10 C06362: 9C 0C 42 STZ $420C (HDMA off) C06365: A9 40 LDA #$40 C06367: 8D 20 43 STA $4320 (Single reg, single-write, indirect HDMA addressing) C0636A: A9 32 LDA #$32 C0636C: 8D 21 43 STA $4321 (HDMA channel 2 dest = $2132, fixed colour reg) C0636F: A2 07 6A LDA #$6A07 C06372: 8E 22 43 STX $4322 (HDMA source address) C06375: A9 7F LDA #$7F C06377: 8D 24 43 STA $4324 (HDMA source = $7F:6A07) C0637A: 8D 27 43 STA $4327 (HDMA indirect address bank = $7F) C0637D: 60 RTS C0637E: A5 6F LDA $6F C06380: 0A ASL A C06381: 18 CLC C06382: 69 40 ADC #$40 (64) C06384: 8F 02 6A 7F STA $7F6A02 C06388: 8F 05 6A 7F STA $7F6A05 C0638C: A9 00 LDA #$00 C0638E: 8F 01 6A 7F STA $7F6A01 C06392: A9 E0 LDA #$E0 C06394: 8F 04 6A 7F STA $7F6A04 C06398: A5 6F LDA $6F C0639A: 38 SEC C0639B: E9 08 SBC #$08 (8) C0639D: F0 2E BEQ $63CD (+46) C0639F: 90 2C BCC $63CD (+44) C063A1: 48 PHA C063A2: 0A 0A ASL x2 C063A4: 09 80 ORA #$80 C063A6: 8F 07 6A 7F STA $7F6A07 C063AA: 68 PLA C063AB: C2 20 REP #$20 (16-bit A) C063AD: EB XBA C063AE: 18 CLC (REP #$21!) C063AF: 69 00 62 ADC #$6200 C063B2: 8F 08 6A 7F STA $7F6A08 C063B6: 8F 0B 6A 7F STA $7F6A0B C063BA: 18 CLC C063BB: 69 80 00 ADC #$0080 C063BE: 8F 0E 6A 7F STA $7F6A0E C063C2: A5 06 LDA $06 (A = 0) C063C4: E2 20 SEP #$20 (8-bit A) C063C6: A5 5E LDA $5E C063C8: 09 04 ORA #$04 C063CA: 85 5E STA $5E (TSB!) C063CC: 60 RTS C063CD: A5 5E LDA $5E C063CF: 29 FB AND #$FB C063D1: 85 5E STA $5E (TRB!) C063D3: 60 RTS C063D4: AD 20 11 LDA $1120 C063D7: 29 03 AND #$03 C063D9: AA TAX C063DA: BF 61 64 C0 LDA $C06461,X (Get a doubling count N) C063DE: A8 TAY (Y = N) C063DF: AD D8 0A LDA $0AD8 (Player X-coordinate) C063E2: C0 00 00 CPY #$0000 C063E5: F0 04 BEQ $63EB (+4) C063E7: 0A ASL A (Multiply coordinate by 2) C063E8: 88 DEY C063E9: 80 F7 BRA $63E2 (-9) (Loop N times) C063EB: 4A LSR A (Divide coordinate by 2 once; overall, coordinate is multiplied by 2^[N-1]) C063EC: 38 SEC C063ED: ED 1F 11 SBC $111F C063F0: 29 3F AND #$3F C063F2: 85 77 STA $77 C063F4: AD 20 11 LDA $1120 C063F7: 4A 4A LSR x2 C063F9: 29 03 AND #$03 C063FB: AA TAX C063FC: BF 61 64 C0 LDA $C06461,X C06400: A8 TAY C06401: AD D9 0A LDA $0AD9 C06404: C0 00 00 CPY #$0000 C06407: F0 04 BEQ $640D (+4) C06409: 0A ASL A C0640A: 88 DEY C0640B: 80 F7 BRA $6404 (-9) C0640D: 4A LSR A C0640E: 38 SEC C0640F: ED 1E 11 SBC $111E C06412: 29 3F AND #$3F C06414: 85 78 STA $78 C06416: AD 20 11 LDA $1120 C06419: 4A 4A 4A 4A LSR x4 C0641D: 29 03 AND #$03 C0641F: AA TAX C06420: BF 61 64 C0 LDA $C06461,X C06424: A8 TAY C06425: AD D8 0A LDA $0AD8 C06428: C0 00 00 CPY #$0000 C0642B: F0 04 BEQ $6431 (+4) C0642D: 0A ASL A C0642E: 88 DEY C0642F: 80 F7 BRA $6428 (-9) C06431: 4A LSR A C06432: 38 SEC C06433: ED 1D 11 SBC $111D C06436: 29 3F AND #$3F C06438: 85 79 STA $79 C0643A: AD 20 11 LDA $1120 C0643D: 4A (x6) LSR x6 C06443: 29 03 AND #$03 C06445: AA TAX C06446: BF 61 64 C0 LDA $C06461,X C0644A: A8 TAY C0644B: AD D9 0A LDA $0AD9 C0644E: C0 00 00 CPY #$0000 C06451: F0 04 BEQ $6457 (+4) C06453: 0A ASL A C06454: 88 DEY C06455: 80 F7 BRA $644E (-9) C06457: 4A LSR A C06458: 38 SEC C06459: ED 1C 11 SBC $111C C0645C: 29 3F AND #$3F C0645E: 85 7A STA $7A C06460: 60 RTS (This data table is referenced from different places in the above function, then some coordinate of the player's location on the map is multiplied by 2^X where X is the fetched value.) C06461: 01 C06462: 00 C06463: 02 C06464: 01 C06465: 9C 15 21 STZ $2115 (VRAM increment on write to $2118) C06468: 20 E9 6D JSR $6DE9 (DMA dest = $2118, source bank = $00) C0646B: 9C 00 43 STZ $4300 (Single-reg, single-write) C0646E: A6 7F LDX $7F C06470: 8E 16 21 STX $2116 (VRAM destination address) C06473: A2 F3 16 LDX #$16F3 C06476: 8E 02 43 STX $4302 (DMA source = $00:16F3) C06479: A6 7B LDX $7B C0647B: 8E 05 43 STX $4305 (DMA transfer size) C0647E: A9 01 LDA #$01 C06480: 8D 0B 42 STA $420B (Start DMA channel 0) C06483: A6 81 LDX $81 C06485: 8E 16 21 STX $2116 (VRAM destination address) C06488: A6 7D LDX $7D (DMA transfer size) C0648A: F0 08 BEQ $6494 (+8) (Skip transfer if size is 0) C0648C: 8E 05 43 STX $4305 C0648F: A9 01 LDA #$01 C06491: 8D 0B 42 STA $420B (Start DMA channel 0) C06494: A6 83 LDX $83 C06496: 8E 16 21 STX $2116 (VRAM destination address) C06499: A2 73 17 LDX #$1773 C0649C: 8E 02 43 STX $4302 (DMA source address) C0649F: A6 7B LDX $7B C064A1: 8E 05 43 STX $4305 (DMA transfer size) C064A4: A9 01 LDA #$01 C064A6: 8D 0B 42 STA $420B (Start DMA channel 0) C064A9: A6 85 LDX $85 C064AB: 8E 16 21 STX $2116 (VRAM destination address) C064AE: A6 7D LDX $7D (DMA transfer size) C064B0: F0 08 BEQ $64BA (+8) (Skip transfer if size is 0) C064B2: 8E 05 43 STX $4305 C064B5: A9 01 LDA #$01 C064B7: 8D 0B 42 STA $420B (Start DMA channel 0) C064BA: 60 RTS C064BB: A9 03 LDA #$03 C064BD: 8D 15 21 STA $2115 (VRAM increment on write to $2118, increment size = 128) C064C0: 20 E9 6D JSR $6DE9 (DMA dest = $2118, source bank = $00) C064C3: 9C 00 43 STZ $4300 (Single-reg, single-write) C064C6: A6 7F LDX $7F C064C8: 8E 16 21 STX $2116 (VRAM destination address) C064CB: A2 F3 16 LDX #$16F3 C064CE: 8E 02 43 STX $4302 (DMA source = $00:16F3) C064D1: A6 7B LDX $7B C064D3: 8E 05 43 STX $4305 (DMA transfer size) C064D6: A9 01 LDA #$01 C064D8: 8D 0B 42 STA $420B (Start DMA channel 0) C064DB: A6 81 LDX $81 C064DD: 8E 16 21 STX $2116 (VRAM destination address) C064E0: A6 7D LDX $7D (DMA transfer size) C064E2: F0 08 BEQ $64EC (+8) (Skip transfer if size is 0) C064E4: 8E 05 43 STX $4305 C064E7: A9 01 LDA #$01 C064E9: 8D 0B 42 STA $420B (Start DMA channel 0) C064EC: A6 83 LDX $83 C064EE: 8E 16 21 STX $2116 (VRAM destination address) C064F1: A2 73 17 LDX #$1773 C064F4: 8E 02 43 STX $4302 (DMA source address) C064F7: A6 7B LDX $7B C064F9: 8E 05 43 STX $4305 (DMA transfer size) C064FC: A9 01 LDA #$01 C064FE: 8D 0B 42 STA $420B (Start DMA channel 0) C06501: A6 85 LDX $85 C06503: 8E 16 21 STX $2116 (VRAM destination address) C06506: A6 7D LDX $7D (DMA transfer size) C06508: F0 08 BEQ $6512 (+8) (Skip transfer if size is 0) C0650A: 8E 05 43 STX $4305 C0650D: A9 01 LDA #$01 C0650F: 8D 0B 42 STA $420B (Start DMA channel 0) C06512: 60 RTS (Called from C0/101A.) C06513: A5 BA LDA $BA (Is player moving?) C06515: D0 01 BNE $6518 (+1) (Branch if so) C06517: 60 RTS (Otherwise, exit) C06518: 29 01 AND #$01 (Is movement vertical?) C0651A: F0 04 BEQ $6520 (+4) (Branch if not) C0651C: 5C A3 65 C0 JMP $C065A3 (Why long JMP?! Short works fine!!!) C06520: A5 BA LDA $BA C06522: 29 02 AND #$02 (Moving right?) C06524: F0 09 BEQ $652F (+9) (Branch if not) C06526: A5 75 LDA $75 (Player X-coordinate) C06528: 18 CLC C06529: 69 21 ADC #$21 (33) (If moving right, add 33) C0652B: 85 23 STA $23 C0652D: 80 07 BRA $6536 (+7) C0652F: A5 75 LDA $75 C06531: 38 SEC C06532: E9 1F SBC #$1F (31) (If moving left, subtract 31) C06534: 85 23 STA $23 C06536: A5 76 LDA $76 (Regardless, player Y-coordinate...) C06538: 38 SEC C06539: E9 1F SBC #$1F (31) (...minus 31) C0653B: 29 3F AND #$3F C0653D: 85 24 STA $24 C0653F: A6 23 LDX $23 C06541: 86 26 STX $26 C06543: A0 00 00 LDY #$0000 (0) (LDY $06?!) C06546: A6 23 LDX $23 C06548: BF 00 00 7F LDA $7F0000,X C0654C: AA TAX C0654D: BF 22 6E 7F LDA $7F6E22,X C06551: 99 F3 16 STA $16F3,Y C06554: BF A2 6F 7F LDA $7F6FA2,X C06558: 99 F4 16 STA $16F4,Y C0655B: BF E2 6E 7F LDA $7F6EE2,X C0655F: 99 73 17 STA $1773,Y C06562: BF 62 70 7F LDA $7F7062,X C06566: 99 74 17 STA $1774,Y C06569: A5 24 LDA $24 (Y-coordinate minus 31...) C0656B: 1A INC A (...plus 1...) C0656C: 29 3F AND #$3F (...MOD 64) C0656E: 85 24 STA $24 C06570: C8 C8 INY x2 C06572: C0 80 00 CPY #$0080 (128)(Iterate over a column of the map, 64 tiles?) C06575: D0 CF BNE $6546 (-49) C06577: 64 7E STZ $7E C06579: 64 7C STZ $7C C0657B: 64 82 STZ $82 C0657D: 64 86 STZ $86 C0657F: A5 26 LDA $26 C06581: 0A ASL A C06582: 29 7F AND #$7F C06584: 85 7F STA $7F C06586: 85 81 STA $81 C06588: 1A INC A C06589: 85 83 STA $83 C0658B: 85 85 STA $85 C0658D: A5 76 LDA $76 C0658F: 38 SEC C06590: E9 1F SBC #$1F C06592: 29 3F AND #$3F C06594: 85 80 STA $80 C06596: 85 84 STA $84 C06598: 0A ASL A C06599: 85 7D STA $7D C0659B: A9 80 LDA #$80 C0659D: 38 SEC C0659E: E5 7D SBC $7D C065A0: 85 7B STA $7B C065A2: 60 RTS C065A3: A5 BA LDA $BA C065A5: 29 02 AND #$02 C065A7: D0 0D BNE $65B6 (+13) C065A9: A5 76 LDA $76 C065AB: 38 SEC C065AC: E9 1F SBC #$1F (31) C065AE: 85 08 STA $08 C065B0: 29 3F AND #$3F C065B2: 85 24 STA $24 C065B4: 80 0B BRA $65C1 (+11) C065B6: A5 76 LDA $76 C065B8: 18 CLC C065B9: 69 20 ADC #$20 (32) C065BB: 85 08 STA $08 C065BD: 29 3F AND #$3F C065BF: 85 24 STA $24 C065C1: A5 75 LDA $75 C065C3: 38 SEC C065C4: E9 1F SBC #$1F (31) C065C6: 85 23 STA $23 C065C8: A6 23 LDX $23 C065CA: 86 26 STX $26 C065CC: A0 00 00 LDY #$0000 (0) (LDY $06?!) C065CF: A6 23 LDX $23 C065D1: BF 00 00 7F LDA $7F0000,X C065D5: AA TAX C065D6: BF 22 6E 7F LDX $7F6E22,X C065DA: 99 F3 16 STA $16F3,Y C065DD: BF E2 6E 7F LDA $7F6EE2,X C065E1: 99 F4 16 STA $16F4,Y C065E4: BF A2 6F 7F LDA $7F6FA2,X C065E8: 99 73 17 STA $1773,Y C065EB: BF 62 70 7F LDA $7F7062,X C065EF: 99 74 17 STA $1774,Y C065F2: C8 C8 INY x2 C065F4: E6 23 INC $ C065F6: C0 80 00 CPY #$0080 (128) C065F9: D0 D4 BNE $65CF (-44) C065FB: 64 7D STZ $7D C065FD: 64 7E STZ $7E C065FF: A9 80 LDA #$80 C06601: 85 7B STA $7B C06603: 64 7C STZ $7C C06605: 64 81 STZ $81 C06607: A9 80 LDA #$80 C06609: 85 85 STA $85 C0660B: A5 08 LDA $08 C0660D: 29 3F AND #$3F C0660F: 85 80 STA $80 C06611: 85 82 STA $82 C06613: 85 84 STA $84 C06615: 85 86 STA $86 C06617: A5 75 LDA $75 C06619: 38 SEC C0661A: E9 1F SBC #$1F (31) C0661C: 29 3F AND #$3F C0661E: 0A ASL A C0661F: 85 7F STA $7F C06621: 18 CLC C06622: 69 80 ADC #$80 C06624: 85 83 STA $83 C06626: A5 7F LDA $7F C06628: 85 7D STA $7D C0662A: A9 80 LDA #$80 C0662C: 38 SEC C0662D: E5 7D SBC $7D C0662F: 85 7B STA $7B C06631: 60 RTS (This seems to be the "World Map" function, called when you press Y.) C06632: 20 81 60 JSR $6081 (Fade to black) C06635: 20 E8 4C JSR $4CE8 (Blank out screen) C06638: 64 5E STZ $5E C0663A: A9 07 LDA #$07 C0663C: 8D 05 21 STA $2105 (BG mode 7) C0663F: A9 80 LDA #$80 C06641: 8D 1A 21 STA $211A (Mode 7: expand playing field, clear negative space) C06644: A9 00 LDA #$00 C06646: 8D 1B 21 STA $211B C06649: A9 08 LDA #$08 C0664B: 8D 1B 21 STA $211B (Mode 7 Matrix A = 8) C0664E: A9 00 LDA #$00 C06650: 8D 1E 21 STA $211E C06653: A9 08 LDA #$08 C06655: 8D 1E 21 STA $211E (Mode 7 Matrix D = 8) C06658: A9 C0 LDA #$C0 C0665A: 8D 0D 21 STA $210D C0665D: A9 FF LDA #$FF C0665F: 8D 0D 21 STA $210D (Mode 7 BG1 horizontal scroll = -64) C06662: A9 D0 LDA #$D0 C06664: 8D 0E 21 STA $210E C06667: A9 FF LDA #$FF C06669: 8D 0E 21 STA $210E (Mode 7 BG1 vertical scroll = -48) C0666C: A9 01 LDA #$01 C0666E: 8D 1F 21 STA $211F C06671: A9 00 LDA #$00 C06673: 8D 1F 21 STA $211F (Mode 7 Center X = 1) C06676: 8D 20 21 STA $2120 C06679: 8D 20 21 STA $2120 (Mode 7 Center Y = 0) C0667C: A9 11 LDA #$11 C0667E: 8D 2C 21 STA $212C (Main screen: OBJ, BG1) C06681: A9 E0 LDA #$E0 C06683: 8D 32 21 STA $2132 (Fixed color: black) C06686: 9C 15 21 STZ $2115 (VRAM increment on write to $2118) C06689: A6 06 LDX $06 (X = 0) C0668B: 8E 16 21 STX $2116 (VRAM destination address) C0668E: 86 0D STX $0D C06690: A9 1F LDA #$1F C06692: 85 76 STA $76 C06694: 64 BA STZ $BA C06696: 20 A1 69 JSR $69A1 C06699: A4 06 LDY $06 (Y = 0) C0669B: A6 26 LDX $26 C0669D: BF 00 00 7F LDA $7F0000,X C066A1: AA TAX C066A2: BF A2 6F 7F LDA $7F6FA2,X C066A6: 8D 18 21 STA $2118 C066A9: A6 26 LDX $26 C066AB: E8 E8 INX x2 C066AD: 86 26 STX $26 C066AF: C8 C8 INY x2 C066B1: C0 00 01 CPY #$0100 (256) C066B4: D0 E5 BNE $669B (-27) C066B6: C2 20 REP #$20 (16-bit A) C066B8: A5 26 LDA $26 C066BA: 18 CLC C066BB: 69 00 01 ADC #$0100 (256) C066BE: 29 FF 3F AND #$3FFF C066C1: 85 26 STA $26 C066C3: A5 06 LDA $06 (A = 0) C066C5: E2 20 SEP #$20 (8-bit A) C066C7: E6 76 INC $76 C066C9: E6 76 INC $76 C066CB: A5 76 LDA $76 C066CD: C9 1F CMP #$1F C066CF: D0 C5 BNE $6696 (-59) C066D1: 20 95 4C JSR $4C95 C066D4: 20 F8 56 JSR $56F8 C066D7: 20 31 68 JSR $6831 C066DA: A9 CF LDA #$CF C066DC: 85 25 STA $25 C066DE: A2 00 D8 LDX #$D800 C066E1: 86 23 STX $23 C066E3: A2 00 70 LDX #$7000 C066E6: 86 2E STX $2E C066E8: A2 00 04 LDX #$0400 C066EB: 86 2C STX $2C C066ED: 20 BC 4C JSR $4CBC C066F0: A9 01 LDA #$01 C066F2: 85 52 STA $52 C066F4: 64 3F STZ $3F (Zero out frame counter) C066F6: 20 00 61 JSR $6100 C066F9: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C066FC: 20 31 67 JSR $6731 (Mark player position on World Map) C066FF: 20 55 67 JSR $6755 (Draw energy trails from meteors) C06702: 20 EC 67 JSR $67EC (Mark locations) C06705: 20 9C 67 JSR $679C (Draw animal icons) C06708: A5 02 LDA $02 (Joypad buttons) C0670A: 29 CF AND #$CF C0670C: D0 EB BNE $66F9 (-21) C0670E: A5 03 LDA $03 C06710: D0 E7 BNE $66F9 (-25) (Branch back if any button except L or R is pressed) (Just to clarify, that previous joypad loop keeps the World Map open while buttons are pressed. Remember, it was opened by pressing Y, so this prevents the Y button from immediately closing it again if held.) C06712: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C06715: 20 31 67 JSR $6731 (Mark player position on World Map) C06718: 20 55 67 JSR $6755 (Draw energy trails from meteors) C0671B: 20 EC 67 JSR $67EC (Mark locations) C0671E: 20 9C 67 JSR $679C (Draw animal icons) C06721: A5 02 LDA $02 (Joypad buttons) C06723: 29 CF AND #$CF C06725: D0 04 BNE $672B (+4) C06727: A5 03 LDA #$03 C06729: F0 E7 BEQ $6712 (-25) (Branch back unless any button except L or R is pressed) (Now that we had a fresh button press, this is when we return to the party.) C0672B: 20 81 60 JSR $6081 (Fade to black) C0672E: 64 52 STZ $52 C06730: 60 RTS (Renders the party's location on the World Map.) C06731: AD D8 0A LDA $0AD8 (Player X-coordinate) C06734: 4A LSR A (Divide by 2) C06735: 18 CLC C06736: 69 3E ADC #$3E (62) (Add left bound of World Map canvas) C06738: 8D 00 02 STA $0200 (Write to DMA buffer) C0673B: AD D9 0A LDA $0AD9 (Player Y-coordinate) C0673E: 4A LSR A (Divide by 2) C0673F: 18 CLC C06740: 69 2D ADC #$2D (45) (Add top bound of World Map canvas) C06742: 8D 01 02 STA $0201 (Write to DMA buffer) C06745: A9 49 LDA #$49 ("You are here" icon) C06747: 8D 02 02 STA $0202 (Write to DMA buffer) C0674A: A5 3F LDA $3F (Get frame counter) C0674C: 29 10 AND #$10 (Priority changes every 16 frames, roughly 1/4 second) C0674E: 0A ASL A C0674F: 09 06 ORA #$06 (Palette #3) C06751: 8D 03 02 STA $0203 (Write to DMA buffer) C06754: 60 RTS (Renders the four energy trails leading from the meteors to the warp point to Galuf's world.) C06755: A9 F8 LDA #$F8 C06757: 20 3C CA JSR $CA3C (Get event flag $1F8 - warp point to Galuf's World open) C0675A: C9 00 CMP #$00 (Is flag set?) C0675C: F0 3D BEQ $679B (+61) (Exit if not) C0675E: A5 3F LDA $3F (Get frame counter) C06760: 4A LSR A (Divide by 2) C06761: 29 0E AND #$0E (Positions of energy trails updates every four frames) C06763: AA TAX (Initialize X index) C06764: A4 06 LDY $06 (Y = 0) C06766: BF 61 69 C0 LDA $C06961,X (Energy trail X-coordinate) C0676A: 99 04 02 STA $0204,Y (Write to DMA buffer) C0676D: BF 62 69 C0 LDA $C06962,X (Energy trail Y-coordinate) C06771: 99 05 02 STA $0205,Y (Write to DMA buffer) C06774: A5 3F LDA $3F (Get frame counter) C06776: 4A LSR A (Divide by 2) C06777: 29 01 AND #$01 (Energy trails "twinkle" every two frames) C06779: 18 CLC C0677A: 69 4A ADC #$4A (74) (Get twinkling icon) C0677C: 99 06 02 STA $0206,Y (Write to DMA buffer) C0677F: A9 36 LDA #$36 (Priority 3, palette #3) C06781: 99 07 02 STA $0207,Y (Write to DMA buffer) C06784: C2 20 REP #$20 (16-bit A) C06786: 8A TXA C06787: 18 CLC C06788: 69 10 00 ADC #$0010 (16) (Increment data table index by 16) C0678B: AA TAX C0678C: 98 TYA C0678D: 18 CLC C0678E: 69 04 00 ADC #$0004 (4) (Increment DMA buffer index by 4) C06791: A8 TAY C06792: A5 06 LDA $06 (A = 0) C06794: E2 20 SEP #$20 (8-bit A) C06796: C0 10 00 CPY #$0010 (16) C06799: D0 CB BNE $6766 (-53) (Repeat once for each energy trail) C0679B: 60 RTS (Renders icons for rideable animals on the World Map, i.e. Boco, the black chocobo and the Hiryuu.) C0679C: A4 06 LDY $06 (Y = 0) C0679E: B9 DE 0A LDA $0ADE,Y (Is vehicle boardable?) C067A1: 30 37 BMI $67DA (+55) (If not, do not render icon) C067A3: B9 DD 0A LDA $0ADD,Y (Vehicle properties) C067A6: 4A (x5) LSR x5 (Map ID containing vehicle) C067AB: CD D6 0A CMP $0AD6 (Is vehicle on current map?) C067AE: D0 2A BNE $67DA (+42) (If not, do not render icon) C067B0: B9 DF 0A LDA $0ADF,Y (Vehicle X-coordinate) C067B3: 4A LSR A (Divide by 2) C067B4: 18 CLC C067B5: 69 3C ADC #$3C (60) (Add left bound of World Map canvas) C067B7: 99 F4 02 STA $02F4,Y (Write to DMA buffer) C067BA: B9 E0 0A LDA $0AE0,Y (Vehicle Y-coordinate) C067BD: 4A LSR A (Divide by 2) C067BE: 18 CLC C067BF: 69 2C ADC #$2C (44) (Add top bound of World Map canvas) C067C1: 99 F5 02 STA $02F5,Y (Write to DMA buffer) C067C4: 98 TYA C067C5: 4A 4A LSR x2 C067C7: AA TAX C067C8: BF E9 67 C0 LDA $C067E9,X (Get icon) C067CC: 99 F6 02 STA $02F6,Y (Write to DMA buffer) C067CF: A5 3F LDA $3F (Get frame counter) C067D1: 29 10 AND #$10 (Priority changes every 16 frames) C067D3: 09 05 ORA #$05 (Palette #2) C067D5: 99 F7 02 STA $02F7,Y (Write to DMA buffer) C067D8: 80 05 BRA $67DF (+5) C067DA: A9 F8 LDA #$F8 (If vehicle is not there, render offscreen so it's not visible) C067DC: 99 F5 02 STA $02F5,Y C067DF: C8 C8 C8 C8 INY x4 C067E3: C0 0C 00 CPY #$000C (12) C067E6: D0 B6 BNE $679E (-74) (Loop over all three rideable animals) C067E8: 60 RTS (Rideable animal icon data table for the World Map.) C067E9: 0E 0F 1E (Renders location markers on the World Map.) C067EC: AD D6 0A LDA $0AD6 (Get current map ID) C067EF: 0A ASL A (Multiply by 2) C067F0: AA TAX C067F1: C2 20 REP #$20 (16-bit A) C067F3: BF EB 68 C0 LDA $C068EB,X (Location list offset of next map) C067F7: 38 SEC C067F8: FF E9 68 C0 SBC $C068E9,X (Subtract location list offset of current map) C067FC: 4A LSR A (Divide difference by 2) C067FD: 85 2C STA $2C (Essentially, this is now the total number of locations) C067FF: BF E9 68 C0 LDA $C068E9,X (Location list offset of current map) C06803: AA TAX (X index starts here) C06804: A5 06 LDA $06 (A = 0) C06806: E2 20 SEP #$20 (8-bit A) C06808: A4 06 LDY $06 (Y = 0, TAY...) C0680A: BF F5 68 C0 LDA $C068F5,X (Location's X-coordinate) C0680E: 99 00 03 STA $0300,Y (Write to DMA buffer) C06811: BF F6 68 C0 LDA $C068F6,X (Location's Y-coordinate) C06815: 99 01 03 STA $0301,Y (Write to DMA buffer) C06818: A9 4A LDA #$4A (Location marker icon) C0681A: 99 02 03 STA $0302,Y (Write to DMA buffer) C0681D: A5 3F LDA $3F (Get frame counter) C0681F: 29 20 AND #$20 (Priority changes every 32 frames) C06821: 09 06 ORA #$06 (Palette #3) C06823: 99 03 03 STA $0303,Y (Write to DMA buffer) C06826: C8 C8 C8 C8 INY x4 (Increment DMA buffer index by 4) C0682A: E8 E8 INX x2 (Increment location list offset by 2) C0682C: C6 2C DEC $2C C0682E: D0 DA BNE $680A (-38) (Loop over entire list of location markers) C06830: 60 RTS (Draw the papery edges of the World Map?) C06831: A9 0A LDA #$0A C06833: 85 DF STA $DF C06835: A9 0B LDA #$0B (INC A...) C06837: 85 E0 STA $E0 C06839: 20 AE BA JSR $BAAE C0683C: A6 06 LDX $06 (X = 0) C0683E: BF 59 68 C0 LDA $C06859,X C06842: 9D 60 03 STA $0360,X C06845: E8 INX C06846: E0 90 00 CPX #$0090 (144) C06849: D0 F3 BNE $683E (-13) C0684B: A6 06 LDX $06 (X = 0) C0684D: A9 AA LDA #$AA C0684F: 9D 16 04 STA $0416,X C06852: E8 INX C06853: E0 0A 00 CPX #$000A (10) C06856: D0 F5 BNE $684D (-11) C06858: 60 RTS (Data table containing DMA information needed to draw the papery edges of the World Map.) C06859: 31 1F 00 35 C0685D: 41 1F 02 35 C06861: 51 1F 04 35 C06865: 61 1F 06 35 C06869: 71 1F 04 35 C0686D: 81 1F 04 75 C06871: 91 1F 06 75 C06875: A1 1F 04 75 C06879: B1 1F 02 75 C0687D: C1 1F 00 75 C06881: 31 2F 08 35 C06885: C1 2F 08 75 C06889: 31 3F 0A 35 C0688D: C1 3F 0A 75 C06891: 31 4F 0C 35 C06895: C1 4F 0C 75 C06899: 31 5F 0A 35 C0689D: C1 5F 0A 75 C068A1: 31 6F 0A B5 C068A5: C1 6F 0A F5 C068A9: 31 7F 0C B5 C068AD: C1 7F 0C F5 C068B1: 31 8F 0A B5 C068B5: C1 8F 0A F5 C068B9: 31 9F 08 B5 C068BD: C1 9F 08 F5 C068C1: 31 AF 00 B5 C068C5: 41 AF 02 B5 C068C9: 51 AF 04 B5 C068CD: 61 AF 06 B5 C068D1: 71 AF 04 B5 C068D5: 81 AF 04 F5 C068D9: 91 AF 06 F5 C068DD: A1 AF 04 F5 C068E1: B1 AF 02 F5 C068E5: C1 AF 00 F5 (Location list offsets for the World Map.) C068E9: 00 00 (Bartz's World) C068EB: 20 00 (Galuf's World) C068ED: 32 00 (Merged World) C068EF: 5E 00 (Galuf's World underwater) C068F1: 64 00 (Merged World underwater) C068F3: 6C 00 (End of list) (Location marker coordinates for Bartz's World.) C068F5: 51 43 (81, 67 - Istory) C068F7: 5D 91 (93, 145 - Jacole) C068F9: 60 80 (96, 128 - Lonka Ruins) C068FB: 67 6A (103, 106 - Ancient Library) C068FD: 6A 55 (106, 85 - Karnak) C068FF: 81 5B (129, 91 - Tule) C06901: 97 46 (151, 70 - Lix) C06903: 9B 49 (155, 73 - Wind Temple) C06905: 9B 71 (155, 113 - Tycoon Castle) C06907: AA 69 (170, 105 - Walse) C06909: A2 5B (162, 91 - Walse Tower) C0690B: AD 55 (173, 85 - Carwen) C0690D: A9 46 (169, 70 - Ship Graveyard) C0690F: AD 93 (173, 147 - Crescent) C06911: 92 68 (146, 104 - Pirates' Cave) C06913: B1 42 (177, 66 - North Mountain) (Location marker coordinates for Galuf's World.) C06915: 66 66 (102, 102 - Surgate Castle) C06917: 4B 68 (75, 104 - Moore) C06919: 68 72 (104, 114 - Hiryuu Valley) C0691B: 69 78 (105, 120 - Kelb) C0691D: 6A 86 (106, 134 - Bal Castle) C0691F: 90 7C (144, 124 - Exdeath's Castle) C06921: 78 61 (120, 97 - Guido's Cave) C06923: 8A 58 (138, 88 - Sealed Castle Kuzar) C06925: 8F 4A (143, 74 - Rugor) (Location marker coordinates for Merged World.) C06927: 5D 91 (93, 145 - Jacole) C06929: 67 6A (103, 106 - Ancient Library) C0692B: 6A 55 (106, 85 - Karnak) C0692D: 81 5B (129, 91 - Tule) C0692F: 9B 49 (155, 73 - Wind Temple) C06931: 9B 71 (155, 113 - Tycoon Castle/Cleft of Dimension) C06933: AD 55 (173, 85 - Carwen) C06935: AD 93 (173, 147 - Crescent) C06937: 92 68 (146, 104 - Pirates' Cave) C06939: 66 66 (102, 102 - Surgate Castle) C0693B: 4B 68 (75, 104 - Moore) C0693D: 68 72 (104, 114 - Hiryuu Valley) C0693F: 69 78 (105, 120 - Kelb) C06941: 6A 86 (106, 134 - Bal Castle) C06943: 78 61 (120, 97 - Guido's Cave) C06945: 8A 58 (138, 88 - Sealed Castle Kuzar) C06947: 8F 4A (143, 74 - Rugor) C06949: A7 93 (167, 147 - Fork Tower) C0694B: 82 7C (130, 124 - Solitary Island Temple) C0694D: 56 6C (86, 108 - Pyramid) C0694F: 9D 5B (157, 91 - Phoenix Tower) C06951: B1 42 (177, 66 - North Mountain) (Underwater location marker coordinates for Galuf's World.) C06953: 5C 4F (92, 79 - North Island Lake) C06955: 78 61 (120, 97 - Guido's Cave) C06957: 4D 68 (77, 104 - Moore Lake) (Underwater location marker coordinates for Merged World.) C06959: 5C 4F (92, 79 - Istory Falls Tunnel) C0695B: A2 5B (162, 91 - Walse Tower) C0695D: B4 82 (180, 130 - Great Trench) C0695F: 4D 68 (77, 104 - Moore Lake) (Frame coordinates for the energy trail leading from the Karnak meteor.) C06961: 7C 5C C06963: 7E 5D C06965: 7F 5F C06967: 81 60 C06969: 82 62 C0696B: 84 63 C0696D: 85 65 C0696F: 87 66 (Frame coordinates for the energy trail leading from the Tycoon meteor.) C06971: 97 76 C06973: 95 74 C06975: 93 72 C06977: 92 70 C06979: 90 6F C0697B: 8E 6D C0697D: 8C 6B C0697F: 8A 6A (Frame coordinates for the energy trail leading from the Lonka meteor.) C06981: 5F 7E C06983: 64 7C C06985: 69 79 C06987: 6E 76 C06989: 74 73 C0698B: 79 70 C0698D: 7E 6E C0698F: 83 6B (Frame coordinates for the energy trail leading from the Walse meteor.) C06991: A6 58 C06993: A2 5A C06995: 9E 5C C06997: 9B 5E C06999: 97 60 C0699B: 93 62 C0699D: 90 64 C0699F: 8C 66 C069A1: A9 C7 LDA #$C7 C069A3: 85 25 STA $25 C069A5: A5 BA LDA $BA C069A7: 29 02 AND #$02 C069A9: D0 07 BNE $69B2 (+7) C069AB: A5 76 LDA $76 C069AD: 38 SEC C069AE: E9 1F SBC #$1F (31) C069B0: 80 05 BRA $69B7 (+5) C069B2: A5 76 LDA $76 C069B4: 18 CLC C069B5: 69 20 ADC #$20 (32) C069B7: 85 0F STA $0F C069B9: C2 20 REP #$20 (16-bit A) C069BB: 85 23 STA $23 C069BD: 06 23 ASL $23 C069BF: EB XBA C069C0: 29 00 3F AND #$3F00 C069C3: 85 26 STA $26 C069C5: AD D6 0A LDA $0AD6 (Get current map ID) C069C8: EB XBA C069C9: 0A ASL A C069CA: 18 CLC C069CB: 65 23 ADC $23 C069CD: AA TAX C069CE: BF 00 E0 CF LDA $CFE000,X C069D2: 85 23 STA $23 C069D4: E0 00 08 CPX #$0800 C069D7: 90 0B BCC $69E4 (+11) C069D9: BF 00 E0 CF LDA $CFE000,X C069DD: C9 00 80 CMP #$8000 C069E0: B0 02 BCS $69E4 (+2) C069E2: E6 25 INC $25 C069E4: A5 06 LDA $06 (A = 0) C069E6: E2 20 SEP #$20 (8-bit A) C069E8: A6 06 LDX $06 (X = 0) C069EA: 9B TXY (Y = 0) C069EB: B7 23 LDA [$23],Y C069ED: 9F 22 76 7F STA $7F7622,X C069F1: C8 INY C069F2: E8 INX C069F3: E0 00 01 CPX #$0100 (256) C069F6: D0 F3 BNE $69EB (-13) C069F8: A6 06 LDX $06 (X = 0) C069FA: 86 23 STX $23 C069FC: A4 26 LDY $26 C069FE: A6 23 LDX $23 C06A00: BF 22 76 7F LDA $7F7622,X C06A04: C9 C0 CMP #$C0 C06A06: B0 2E BCS $6A36 (+46) C06A08: C9 0C CMP #$0C C06A0A: F0 13 BEQ $6A1F (+19) C06A0C: C9 1C CMP #$1C C06A0E: F0 0F BEQ $6A1F (+15) C06A10: C9 2C CMP #$2C C06A12: F0 0B BEQ $6A1F (+11) C06A14: E8 INX C06A15: 86 23 STX $23 C06A17: BB TYX C06A18: 9F 00 00 7F STA $7F0000,X C06A1C: C8 INY C06A1D: 80 2F BRA $6A4E (+47) C06A1F: E8 INX C06A20: 86 23 STX $23 C06A22: BB TYX C06A23: 9F 00 00 7F STA $7F0000,X C06A27: 1A INC A C06A28: 9F 01 00 7F STA $7F0001,X C06A2C: 1A INC A C06A2D: 9F 02 00 7F STA $7F0002,X C06A31: C8 C8 C8 INY x3 C06A34: 80 18 BRA $6A4E (+24) C06A36: 38 SEC (Not needed!) C06A37: E9 C0 SBC #$C0 C06A39: 85 09 STA $09 C06A3B: BF 23 76 7F LDA $7F7623,X C06A3F: E8 E8 INX x2 C06A41: 86 23 STX $23 C06A43: BB TYX C06A44: 9F 00 00 7F STA $7F0000,X C06A48: E8 INX C06A49: C6 09 DEC $09 C06A4B: 10 F7 BPL $6A44 (-9) C06A4D: 9B TXY C06A4E: 98 TYA C06A4F: D0 AD BNE $69FE (-83) C06A51: C2 20 REP #$20 (16-bit A) C06A53: AD D6 0A LDA $0AD6 (Get current map ID) C06A56: 0A ASL A C06A57: AA TAX C06A58: BF BF 6A C0 LDA $C06ABF,X C06A5C: 85 0D STA $0D C06A5E: BF BD 6A C0 LDA $C06ABD,X C06A62: AA TAX C06A63: A5 06 LDA $06 (A = 0) C06A65: E2 20 SEP #$20 (8-bit A) C06A67: E4 0D CPX $0D C06A69: F0 51 BEQ $6ABC (+81) C06A6B: BF 00 00 C0 LDA $C00000,X C06A6F: C5 0F CMP $0F C06A71: F0 08 BEQ $6A7B (+8) C06A73: E8 (x6) INX x6 C06A79: 80 EC BRA $6A67 (-20) C06A7B: BF 03 00 C0 LDA $C00003,X C06A7F: 18 CLC C06A80: 69 D0 ADC #$D0 C06A82: 20 3C CA JSR $CA3C (Get flag $1xx) C06A85: C9 00 CMP #$00 C06A87: F0 EA BEQ $6A73 (-22) C06A89: DA PHX C06A8A: BF 02 00 C0 LDA $C00002,X C06A8E: 85 2C STA $2C C06A90: BF 01 00 C0 LDA $C00001,X C06A94: C2 20 REP #$20 (16-bit A, REP #$21...) C06A96: 18 CLC C06A97: 65 26 ADC $26 C06A99: A8 TAY C06A9A: BF 04 00 C0 LDA $C00004,X C06A9E: AA TAX C06A9F: A5 06 LDA $06 (A = 0) C06AA1: E2 20 SEP #$20 (8-bit A) C06AA3: A9 7F LDA #$7F C06AA5: 48 PHA C06AA6: AB PLB (Data bank reg = $7F) C06AA7: BF 00 00 C0 LDA $C00000,X C06AAB: 99 00 00 STA $0000,Y C06AAE: E8 INX C06AAF: C8 INY C06AB0: C6 2C DEC $2C C06AB2: D0 F3 BNE $6AA7 (-13) C06AB4: A9 00 LDA #$00 C06AB6: 48 PHA C06AB7: AB PLB (Data bank reg = $00) C06AB8: FA PLX C06AB9: 4C 73 6A JMP $6A73 (BRA...) C06ABC: 60 RTS C06ABD: 6C 72 C06ABF: DA 73 C06AC1: 18 75 C06AC3: 94 77 C06AC5: 9A 77 C06AC7: E6 79 C06AC9: 60 RTS C06ACA: 86 71 STX $71 C06ACC: A9 CB LDA #$CB C06ACE: 85 25 STA $25 C06AD0: C2 20 REP #$20 (16-bit A) C06AD2: A6 06 LDX $06 (X = 0) C06AD4: C0 00 00 CPY #$0000 C06AD7: F0 1A BEQ $6AF3 (+26) C06AD9: E8 E8 INX x2 C06ADB: 88 DEY C06ADC: F0 15 BEQ $6AF3 (+21) C06ADE: E8 E8 INX x2 C06AE0: BF 00 00 CB LDA $CB0000,X C06AE4: CA CA DEX x2 C06AE6: DF 00 00 CB CMP $CB0000,X C06AEA: B0 02 BCS $6AEE (+2) C06AEC: E6 25 INC $25 C06AEE: E8 E8 INX x2 C06AF0: 88 DEY C06AF1: D0 EB BNE $6ADE (-21) C06AF3: BF 00 00 CB LDA $CB0000,X C06AF7: 8D F0 04 STA $04F0 C06AFA: 85 23 STA $23 C06AFC: AD 71 0B LDA $0B71 C06AFF: 8D F3 04 STA $04F3 C06B02: A5 06 LDA $06 (A = 0) C06B04: E2 20 SEP #$20 (8-bit A) C06B06: A5 25 LDA $25 C06B08: 8D F2 04 STA $04F2 C06B0B: A9 7F LDA #$7F C06B0D: 8D F5 04 STA $04F5 C06B10: A4 06 LDY $06 (Y = 0) C06B12: B7 23 LDA [$23],Y C06B14: D0 05 BNE $6B1B (+5) C06B16: 22 02 00 C3 JSL $C30002 C06B1A: 60 RTS C06B1B: A6 71 LDX $71 C06B1D: 20 21 6B JSR $6B21 (Just why...) C06B20: 60 RTS C06B21: A0 00 10 LDY #$1000 C06B24: 9F 00 00 7F STA $7F0000,X C06B28: E8 INX C06B29: 88 DEY C06B2A: D0 F8 BNE $6B24 (-8) C06B2C: 60 RTS C06B2D: 48 PHA C06B2E: AB PLB C06B2F: A6 06 LDX $06 (X = 0) C06B31: B9 00 00 LDA $0000,Y C06B34: 9F 22 6E 7F STA $7F6E22,X C06B38: C8 INY C06B39: E8 INX C06B3A: E0 00 08 CPX #$0800 C06B3D: D0 F2 BNE $6B31 (-14) C06B3F: A5 06 LDA $06 (A = 0) C06B41: 48 PHA C06B42: AB PLB C06B43: 60 RTS C06B44: AD 11 11 LDA $1111 C06B47: 0A ASL A C06B48: AA TAX C06B49: C2 20 REP #$20 (16-bit A) C06B4B: BF 40 C5 CF LDA $CFC540,X C06B4F: 18 CLC C06B50: 69 40 C5 ADC #$C540 C06B53: 8D F0 04 STA $04F0 C06B56: A5 06 LDA $06 (A = 0) C06B58: E2 20 SEP #$20 (8-bit A) C06B5A: A9 CF LDA #$CF C06B5C: 8D F2 04 STA $04F2 C06B5F: A2 86 11 LDX #$1186 C06B62: 8E F3 04 STX $04F3 C06B65: A9 00 LDA #$00 C06B67: 8D F5 04 STA $04F5 C06B6A: 22 02 00 C3 JSL $C30002 C06B6E: AD 14 11 LDA $1114 C06B71: 0A ASL A C06B72: AA TAX C06B73: C2 20 REP #$20 (16-bit A) C06B75: BF 00 00 CF LDA $CF0000,X C06B79: 18 CLC C06B7A: 69 00 00 ADC #$0000 (Umm...what?!!) C06B7D: 8D F0 04 STA $04F0 C06B80: A5 06 LDA $06 (A = 0) C06B82: E2 20 SEP #$20 (8-bit A) C06B84: A9 CF LDA #$CF C06B86: 8D F2 04 STA $04F2 C06B89: A2 22 6E LDX #$6E22 C06B8C: 8E F3 04 STX $04F3 C06B8F: A9 7F LDA #$7F C06B91: 8D F5 04 STA $04F5 C06B94: 22 02 00 C3 JSL $C30002 C06B98: 60 RTS C06B99: A2 00 10 LDX #$1000 C06B9C: 9F FF FF 7E STA $7EFFFF,X C06BA0: 9F FF 0F 7F STA $7F0FFF,X C06BA4: 9F FF 1F 7F STA $7F1FFF,X C06BA8: CA DEX C06BA9: D0 F1 BNE $6B9C (-15) C06BAB: 60 RTS C06BAC: C2 20 REP #$20 C06BAE: AD D9 0A LDA $0AD9 (Player Y-coordinate) C06BB1: 29 FF 00 AND #$00FF C06BB4: 38 SEC C06BB5: E9 07 00 SBC #$0007 (7) C06BB8: 0A (x5) ASL x5 C06BBD: 29 FF 0F AND #$0FFF C06BC0: 85 63 STA $63 C06BC2: AD D8 0A LDA $0AD8 (Player X-coordinate) C06BC5: 29 FF 00 AND #$00FF C06BC8: 38 SEC C06BC9: E9 07 00 SBC #$0007 (7) C06BCC: 0A (x5) ASL x5 C06BD1: 29 FF 0F AND #$0FFF C06BD4: 85 61 STA $61 C06BD6: A5 06 LDA $06 (A = 0) C06BD8: E2 20 SEP #$20 (8-bit A) C06BDA: 60 RTS C06BDB: C2 20 REP #$20 C06BDD: AD D9 0A LDA $0AD9 (Player Y-coordinate) C06BE0: 29 FF 00 AND #$00FF C06BE3: 38 SEC C06BE4: E9 07 00 SBC #$0007 (7) C06BE7: 0A (x5) ASL x5 C06BEC: 29 FF 0F AND #$0FFF C06BEF: 85 63 STA $63 C06BF1: AD D8 0A LDA $0AD8 (Player X-coordinate) C06BF4: 29 FF 00 AND #$00FF C06BF7: 38 SEC C06BF8: E9 07 00 SBC #$0007 (7) C06BFB: 0A (x5) ASL x5 C06C00: 29 FF 0F AND #$0FFF C06C03: 85 61 STA $61 (Wait...why didn't you just JSR $6BAC to cover all of this?!!) C06C05: A5 78 LDA $78 C06C07: 29 FF 00 AND #$00FF C06C0A: 38 SEC C06C0B: E9 07 00 SBC #$0007 (7) C06C0E: 0A (x5) ASL x5 C06C13: 85 67 STA $67 C06C15: A5 77 LDA $77 C06C17: 29 FF 00 AND #$00FF C06C1A: 38 SEC C06C1B: E9 07 00 SBC #$0007 (7) C06C1E: 0A (x5) ASL x5 C06C23: 85 65 STA $65 C06C25: A5 7A LDA $7A C06C27: 29 FF 00 AND #$00FF C06C2A: 38 SEC C06C2B: E9 07 00 SBC #$0007 (7) C06C2E: 0A (x5) ASL x5 C06C33: 85 6B STA $6B C06C35: A5 79 LDA $79 C06C37: 29 FF 00 AND #$00FF C06C3A: 38 SEC C06C3B: E9 07 00 SBC #$0007 (7) C06C3E: 0A (x5) ASL x5 C06C43: 85 69 STA $69 C06C45: A5 06 LDA $06 (A = 0) C06C47: E2 20 SEP #$20 (8-bit A) C06C49: 60 RTS C06C4A: 20 AC 6B JSR $6BAC C06C4D: AD D9 0A LDA $0AD9 (Player Y-coordinate) C06C50: 85 76 STA $76 C06C52: AD D8 0A LDA $0AD8 (Player X-coordinate) C06C55: 85 75 STA $75 C06C57: A9 40 LDA #$40 C06C59: 48 PHA C06C5A: 20 A1 69 JSR $69A1 C06C5D: 20 13 65 JSR $6513 C06C60: 20 65 64 JSR $6465 C06C63: E6 76 INC $76 C06C65: 68 PLA C06C66: 3A DEC A C06C67: D0 F0 BNE $6C59 (-16) C06C69: 60 RTS C06C6A: AE D4 0A LDX $0AD4 (Get map ID) C06C6D: E0 BE 00 CPX #$00BE (Flying airship?) C06C70: D0 2A BNE $6C9C (+42) (Exit if not) C06C72: 9C 6D 0B STX $0B6D C06C75: A2 00 20 LDX #$2000 C06C78: 86 2E STX $2E C06C7A: 86 2C STX $2C C06C7C: 20 13 4D JSR $4D13 C06C7F: A9 80 LDA #$80 C06C81: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C06C84: A0 02 27 LDY #$2702 C06C87: 20 9D 6C JSR $6C9D C06C8A: A0 82 2D LDY #$2D82 C06C8D: 20 9D 6C JSR $6C9D C06C90: A0 42 23 LDY #$2342 C06C93: 20 D4 6C JSR $6CD4 C06C96: A0 C2 29 LDY #$29C2 C06C99: 20 D4 6C JSR $6CD4 (Could do JMP or BRA, just sayin'...) C06C9C: 60 RTS C06C9D: A6 06 LDX $06 (X = 0) C06C9F: 8C 16 21 STY $2116 (VRAM destination address) C06CA2: BF 00 CF C0 LDA $C0CF00,X C06CA6: 8D 18 21 STA $2118 C06CA9: E8 INX C06CAA: BF 00 CF C0 LDA $C0CF00,X C06CAE: 8D 19 21 STA $2119 C06CB1: E8 INX C06CB2: 8A TXA C06CB3: 29 1F AND #$1F C06CB5: D0 EB BNE $6CA2 (-21) C06CB7: C2 20 REP #$20 (16-bit A) C06CB9: 98 TYA C06CBA: 18 CLC C06CBB: 69 20 00 ADC #$0020 (32) C06CBE: A8 TAY C06CBF: 29 E0 03 AND #$03E0 C06CC2: D0 06 BNE $6CCA (+6) C06CC4: 98 TYA C06CC5: 18 CLC C06CC6: 69 00 04 ADC #$0400 (1,024) C06CC9: A8 TAY C06CCA: A5 06 LDA $06 (A = 0) C06CCC: E2 20 SEP #$20 (8-bit A) C06CCE: E0 E0 01 CPX #$01E0 C06CD1: D0 CC BNE $6C9F (-52) C06CD3: 60 RTS C06CD4: A2 E0 01 LDX #$01E0 C06CD7: 8C 16 21 STY $2116 (VRAM destination address) C06CDA: BF 00 CF C0 LDA $C0CF00,X C06CDE: 8D 18 21 STA $2118 C06CE1: E8 INX C06CE2: BF 00 CF C0 LDA $C0CF00,X C06CE6: 8D 19 21 STA $2119 C06CE9: E8 INX C06CEA: 8A TXA C06CEB: 29 1F AND #$1F C06CED: D0 EB BNE $6CDA (-21) C06CEF: C2 20 REP #$20 (16-bit A) C06CF1: 98 TYA C06CF2: 18 CLC C06CF3: 69 20 00 ADC #$0020 (32) C06CF6: A8 TAY C06CF7: 29 E0 03 AND #$03E0 C06CFA: D0 06 BNE $6D02 (+6) C06CFC: 98 TYA C06CFD: 18 CLC C06CFE: 69 00 04 ADC #$0400 (1,024) C06D01: A8 TAY C06D02: A5 06 LDA $06 (A = 0) C06D04: E2 20 SEP #$20 (8-bit A) C06D06: E0 40 03 CPX #$0340 C06D09: D0 CC BNE $6CD7 (-52) C06D0B: 60 RTS C06D0C: A9 10 LDA #$10 C06D0E: 85 09 STA $09 C06D10: 20 DB 6B JSR $6BDB C06D13: AD D9 0A LDA $0AD9 (Player Y-coordinate) C06D16: 85 0A STA $0A C06D18: A5 78 LDA $78 C06D1A: 85 0B STA $0B C06D1C: A5 7A LDA $7A C06D1E: 85 0C STA $0C C06D20: AD D8 0A LDA $0AD8 (Player X-coordinate) C06D23: 85 75 STA $75 C06D25: A5 0A LDA $0A C06D27: 85 76 STA $76 C06D29: A9 01 LDA #$01 C06D2B: A6 06 LDX $06 (X = 0) C06D2D: 86 71 STX $71 C06D2F: 20 7D 70 JSR $707D C06D32: 20 7A 6E JSR $6E7A C06D35: AD 21 11 LDA $1121 C06D38: 29 40 AND #$40 C06D3A: D0 17 BNE $6D53 (+23) C06D3C: A5 77 LDA $77 C06D3E: 85 75 STA $75 C06D40: A5 0B LDA $0B C06D42: 85 76 STA $76 C06D44: A9 01 LDA #$01 C06D46: A2 00 10 LDX #$1000 C06D49: 86 71 STX $71 C06D4B: 20 7D 70 JSR $707D C06D4E: 20 7A 6E JSR $6E7A C06D51: 80 36 BRA $6D89 (+54) C06D53: A9 07 LDA #$07 C06D55: 85 75 STA $75 C06D57: A5 0B LDA $0B C06D59: 38 SEC C06D5A: E5 78 SBC $78 C06D5C: 18 CLC C06D5D: 69 08 ADC #$08 C06D5F: 85 76 STA $76 C06D61: A9 01 LDA #$01 C06D63: A2 00 10 LDX #$1000 C06D66: 86 71 STX $71 C06D68: 20 7D 70 JSR $707D C06D6B: 20 7A 6E JSR $6E7A C06D6E: A9 17 LDA #$17 (23) C06D70: 85 75 STA $75 C06D72: A5 0B LDA $0B C06D74: 38 SEC C06D75: E5 78 SBC $78 C06D77: 18 CLC C06D78: 69 08 ADC #$08 C06D7A: 85 76 STA $76 C06D7C: A9 01 LDA #$01 C06D7E: A2 00 10 LDX #$1000 C06D81: 86 71 STX $71 C06D83: 20 7D 70 JSR $707D C06D86: 20 7A 6E JSR $6E7A C06D89: AD 21 11 LDA $1121 C06D8C: 30 17 BMI $6DA5 (+23) C06D8E: A5 79 LDA $79 C06D90: 85 75 STA $75 C06D92: A5 0C LDA $0C C06D94: 85 76 STA $76 C06D96: A9 01 LDA #$01 C06D98: A2 00 20 LDX #$2000 C06D9B: 86 71 STX $71 C06D9D: 20 7D 70 JSR $707D C06DA0: 20 7A 6E JSR $6E7A C06DA3: 80 36 BRA $6DDB (+54) C06DA5: A9 07 LDA #$07 C06DA7: 85 75 STA $75 C06DA9: A5 0C LDA $0C C06DAB: 38 SEC C06DAC: E5 7A SBC $7A C06DAE: 18 CLC C06DAF: 69 08 ADC #$08 C06DB1: 85 76 STA $76 C06DB3: A9 01 LDA #$01 C06DB5: A2 00 20 LDX #$2000 C06DB8: 86 71 STX $71 C06DBA: 20 7D 70 JSR $707D C06DBD: 20 7A 6E JSR $6E7A C06DC0: A9 17 LDA #$17 C06DC2: 85 75 STA $75 C06DC4: A5 0C LDA $0C C06DC6: 38 SEC C06DC7: E5 7A SBC $7A C06DC9: 18 CLC C06DCA: 69 08 ADC #$08 C06DCC: 85 76 STA $76 C06DCE: A9 01 LDA #$01 C06DD0: A2 00 20 LDX #$2000 C06DD3: 86 71 STX $71 C06DD5: 20 7D 70 JSR $707D C06DD8: 20 7A 6E JSR $6E7A C06DDB: E6 0A INC $0A C06DDD: E6 0B INC $0B C06DDF: E6 0C INC $0C C06DE1: C6 09 DEC $09 C06DE3: F0 03 BEQ $6DE8 (+3) C06DE5: 4C 20 6D JMP $6D20 C06DE8: 60 RTS (A commonly-used pre-DMA setup function.) C06DE9: 9C 0B 42 STZ $420B (DMA off) C06DEC: A9 18 LDA #$18 C06DEE: 8D 01 43 STA $4301 (DMA dest = $2118) C06DF1: 9C 04 43 STZ $4304 (DMA source bank = $00) C06DF4: 60 RTS C06DF5: C2 20 REP #$20 (16-bit A) C06DF7: A5 71 LDA $71 C06DF9: EB XBA C06DFA: 4A LSR A C06DFB: 85 17 STA $17 C06DFD: 4A LSR A C06DFE: 18 CLC C06DFF: 65 17 ADC $17 C06E01: A8 TAY C06E02: A5 06 LDA $06 (A = 0) C06E04: E2 20 SEP #$20 (8-bit A) C06E06: A9 81 LDA #$81 C06E08: 8D 15 21 STA $2115 (VRAM increment on write to $2119, increment size = 32) C06E0B: 20 E9 6D JSR $6DE9 (DMA dest = $2118, source bank = $00) C06E0E: A9 01 LDA #$01 C06E10: 8D 00 43 STA $4300 (Double-reg, single-write) C06E13: C2 20 REP #$20 (16-bit A) C06E15: A5 71 LDA $71 C06E17: EB XBA C06E18: 0A 0A 0A ASL x3 C06E1B: 18 CLC C06E1C: 69 F3 16 ADC #$16F3 C06E1F: 8D 02 43 STA $4302 (DMA source address) C06E22: A5 06 LDA $06 (A = 0) C06E24: E2 20 SEP #$20 (8-bit A) C06E26: B6 7F LDX $7F,Y C06E28: 8E 16 21 STX $2116 (VRAM destination address) C06E2B: B6 7B LDX $7B,Y C06E2D: 8E 05 43 STX $4305 (DMA transfer size) C06E30: A9 01 LDA #$01 C06E32: 8D 0B 42 STA $420B (Start DMA channel 0) C06E35: B6 81 LDX $81,Y C06E37: 8E 16 21 STX $2116 (VRAM destination address) C06E3A: B6 7D LDX $7D,Y C06E3C: F0 08 BEQ $6E46 (+8) C06E3E: 8E 05 43 STX $4305 (DMA transfer size) C06E41: A9 01 LDA #$01 C06E43: 8D 0B 42 STA $420B (Start DMA channel 0) C06E46: C2 20 REP #$20 (16-bit A) C06E48: A5 71 LDA $71 C06E4A: EB XBA C06E4B: 0A 0A 0A ASL x3 C06E4E: 18 CLC C06E4F: 69 33 17 ADC #$1733 C06E52: 8D 02 43 STA $4302 (DMA source address) C06E55: A5 06 LDA $06 (A = 0) C06E57: E2 20 SEP #$20 (8-bit A) C06E59: B6 83 LDX $83,Y C06E5B: 8E 16 21 STX $2116 (VRAM destination address) C06E5E: B6 7B LDX $7B,Y C06E60: 8E 05 43 STX $4305 (DMA transfer size) C06E63: A9 01 LDA #$01 C06E65: 8D 0B 42 STA $420B (Start DMA channel 0) C06E68: B6 85 LDX $85,Y C06E6A: 8E 16 21 STX $2116 (VRAM destination address) C06E6D: B6 7D LDX $7D,Y C06E6F: F0 08 BEQ $6E46 (+8) C06E71: 8E 05 43 STX $4305 (DMA transfer size) C06E74: A9 01 LDA #$01 C06E76: 8D 0B 42 STA $420B (Start DMA channel 0) C06E79: 60 RTS C06E7A: C2 20 REP #$20 (16-bit A) C06E7C: A5 71 LDA $71 C06E7E: EB XBA C06E7F: 4A LSR A C06E80: 85 17 STA $17 C06E82: 4A LSR A C06E83: 18 CLC C06E84: 65 17 ADC $17 C06E86: A8 TAY C06E87: A5 06 LDA $06 (A = 0) C06E89: E2 20 SEP #$20 (8-bit A) C06E8B: A9 80 LDA #$80 C06E8D: 8D 15 21 STA $2115 (VRAM increment on write to $2119) C06E90: 20 E9 6D JSR $6DE9 (DMA dest = $2118, source bank = $00) C06E93: A9 01 LDA #$01 C06E95: 8D 00 43 STA $4300 (Double-reg, single-write) C06E98: B6 7F LDX $7F,Y C06E9A: 8E 16 21 STX $2116 (VRAM destination address) C06E9D: C2 20 REP #$20 (16-bit A) C06E9F: A5 71 LDA $71 C06EA1: EB XBA C06EA2: 0A 0A 0A ASL x3 C06EA5: 18 CLC C06EA6: 69 F3 16 ADC #$16F3 C06EA9: 8D 02 43 STA $4302 (DMA source address) C06EAC: A5 06 LDA $06 (A = 0) C06EAE: E2 20 SEP #$20 (8-bit A) C06EB0: B6 7B LDX $7B,Y C06EB2: 8E 05 43 STX $4305 (DMA transfer size) C06EB5: A9 01 LDA #$01 C06EB7: 8D 0B 42 STA $420B (Start DMA channel 0) C06EBA: B6 81 LDX $81,Y C06EBC: 8E 16 21 STX $2116 (VRAM destination address) C06EBF: 9C 0B 42 STZ $420B (DMA off) C06EC2: B6 7D LDX $7D,Y C06EC4: F0 08 BEQ $6ECE (+8) C06EC6: 8E 05 43 STX $4305 (DMA transfer size) C06EC9: A9 01 LDA #$01 C06ECB: 8D 0B 42 STA $420B (Start DMA channel 0) C06ECE: B6 83 LDX $83,Y C06ED0: 8E 16 21 STX $2116 (VRAM destination address) C06ED3: 9C 0B 42 STZ $420B (DMA off) C06ED6: C2 20 REP #$20 (16-bit A) C06ED8: A5 71 LDA $71 C06EDA: EB XBA C06EDB: 0A 0A 0A ASL x3 C06EDE: 18 CLC C06EDF: 69 33 17 ADC #$1733 C06EE2: 8D 02 43 STA $4302 (DMA source address) C06EE5: A5 06 LDA $06 (A = 0) C06EE7: E2 20 SEP #$20 (8-bit A) C06EE9: B6 7B LDX $7B,Y C06EEB: 8E 05 43 STX $4305 (DMA transfer size) C06EEE: A9 01 LDA #$01 C06EF0: 8D 0B 42 STA $420B (Start DMA channel 0) C06EF3: B6 85 LDX $85,Y C06EF5: 8E 16 21 STX $2116 (VRAM destination address) C06EF8: 9C 0B 42 STZ $420B (DMA off) C06EFB: B6 7D LDX $7D,Y C06EFD: F0 08 BEQ $6F07 (+8) C06EFF: 8E 05 43 STX $4305 (DMA transfer size) C06F02: A9 01 LDA #$01 C06F04: 8D 0B 42 STA $420B (Start DMA channel 0) C06F07: 60 RTS C06F08: A5 76 LDA $76 C06F0A: 29 3F AND #$3F C06F0C: EB XBA C06F0D: C2 20 REP #$20 (16-bit A) C06F0F: 4A 4A LSR x2 C06F11: 05 73 ORA $73 C06F13: 85 0D STA $0D C06F15: A5 75 LDA $75 C06F17: 29 3F 00 AND #$003F C06F1A: 05 0D ORA $0D C06F1C: AA TAX C06F1D: A5 06 LDA $06 (A = 0) C06F1F: E2 20 SEP #$20 (8-bit A) C06F21: A4 06 LDY $06 (Y = 0) C06F23: A5 2D LDA $2D C06F25: 85 15 STA $15 C06F27: A5 2C LDA $2C C06F29: 85 13 STA $13 C06F2B: DA PHX C06F2C: B9 B3 16 LDA $16B3,Y C06F2F: 9F 00 00 7F STA $7F0000,X C06F33: C8 INY C06F34: E8 INX C06F35: C6 13 DEC $13 C06F37: D0 F3 BNE $6F2C (-13) C06F39: C2 20 REP #$20 (16-bit A, REP #$21...) C06F3B: 68 PLA C06F3C: 18 CLC C06F3D: 69 40 00 ADC #$0040 (64) C06F40: AA TAX C06F41: A5 06 LDA $06 (A = 0) C06F43: E2 20 SEP #$20 (8-bit A) C06F45: C6 15 DEC $15 C06F47: D0 DE BNE $6F27 (-34) C06F49: A4 73 LDY $73 C06F4B: D0 0C BNE $6F59 (+12) C06F4D: AD D8 0A LDA $0AD8 (Player X-coordinate) C06F50: 85 75 STA $75 C06F52: AD D9 0A LDA $0AD9 (Player Y-coordinate) C06F55: 85 76 STA $76 C06F57: 80 17 BRA $6F70 (+23) C06F59: C0 00 10 CPY #$1000 C06F5C: D0 0A BNE $6F68 (+10) C06F5E: A5 77 LDA $77 C06F60: 85 75 STA $75 C06F62: A5 78 LDA $78 C06F64: 85 76 STA $76 C06F66: 80 08 BRA $6F70 (+8) C06F68: A5 79 LDA $79 C06F6A: 85 75 STA $75 C06F6C: A5 7A LDA $7A C06F6E: 85 76 STA $76 C06F70: A5 76 LDA $76 C06F72: 38 SEC C06F73: E9 08 SBC #$08 (8) C06F75: 29 3F AND #$3F C06F77: EB XBA C06F78: C2 20 REP #$20 (16-bit A) C06F7A: 4A 4A LSR x2 C06F7C: 05 73 ORA $73 C06F7E: 85 23 STA $23 C06F80: A5 06 LDA $06 (A = 0) C06F82: E2 20 SEP #$20 (8-bit A) C06F84: A5 75 LDA $75 C06F86: 38 SEC C06F87: E9 07 SBC #$07 (7) C06F89: 29 3F AND #$3F C06F8B: 05 23 ORA $23 C06F8D: 85 23 STA $23 C06F8F: A5 76 LDA $76 C06F91: 38 SEC C06F92: E9 08 SBC #$08 (8) C06F94: 29 0F AND #$0F C06F96: EB XBA C06F97: C2 20 REP #$20 (16-bit A) C06F99: 4A LSR A C06F9A: 85 26 STA $26 C06F9C: A5 06 LDA $06 (A = 0) C06F9E: E2 20 SEP #$20 (8-bit A) C06FA0: A5 75 LDA $75 C06FA2: 38 SEC C06FA3: E9 07 SBC #$07 (7) C06FA5: 85 0D STA $0D C06FA7: 64 0E STZ $0E C06FA9: 29 10 AND #$10 C06FAB: D0 05 BNE $6FB2 (+5) C06FAD: A0 00 00 LDY #$0000 (LDY $06...) C06FB0: 80 03 BRA $6FB5 (+3) C06FB2: A0 00 08 LDY #$0800 C06FB5: A5 0D LDA $0D C06FB7: 29 0F AND #$0F C06FB9: 0A 0A ASL x2 C06FBB: 85 0D STA $0D C06FBD: C2 20 REP #$20 (16-bit A, REP #$21...) C06FBF: 98 TYA C06FC0: 18 CLC C06FC1: 65 0D ADC $0D C06FC3: 18 CLC C06FC4: 65 26 ADC $26 C06FC6: 85 26 STA $26 C06FC8: 29 80 0F AND #$0F80 C06FCB: 49 00 08 EOR #$0800 C06FCE: 85 29 STA $29 C06FD0: A5 06 LDA $06 (A = 0) C06FD2: E2 20 SEP #$20 (8-bit A) C06FD4: A9 7F LDA #$7F C06FD6: 48 PHA C06FD7: AB PLB (Data bank reg = $7F) C06FD8: C2 20 REP #$20 (16-bit A) C06FDA: A9 10 00 LDA #$0010 C06FDD: 85 11 STA $11 C06FDF: A6 23 LDX $23 C06FE1: 86 0D STX $0D C06FE3: A4 26 LDY $26 C06FE5: 20 3E 70 JSR $703E C06FE8: A4 29 LDY $29 C06FEA: 20 3E 70 JSR $703E C06FED: A5 23 LDA $23 C06FEF: 18 CLC C06FF0: 69 40 00 ADC #$0040 (64) C06FF3: 29 FF 0F AND #$0FFF C06FF6: 05 73 ORA $73 C06FF8: 85 23 STA $23 C06FFA: A5 26 LDA $26 C06FFC: 18 CLC C06FFD: 69 80 00 ADC #$0080 (128) C07000: 85 26 STA $26 C07002: 29 FF 07 AND #$07FF C07005: C9 80 00 CMP #$0080 (128) C07008: B0 08 BCS $7012 (+8) C0700A: A5 26 LDA $26 C0700C: 38 SEC C0700D: E9 00 08 SBC #$0800 (2,048) C07010: 85 26 STA $26 C07012: A5 29 LDA $29 C07014: 18 CLC C07015: 69 80 00 ADC #$0080 (128) C07018: 85 29 STA $29 C0701A: 29 FF 07 AND #$07FF C0701D: C9 80 00 CMP #$0080 (128) C07020: B0 08 BCS $702A (+8) C07022: A5 29 LDA $29 C07024: 38 SEC C07025: E9 00 08 SBC #$0800 (2,048) C07028: 85 29 STA $29 C0702A: C6 11 DEC $11 C0702C: D0 B1 BNE $6FDF (-79) C0702E: A5 06 LDA $06 (A = 0) C07030: E2 20 SEP #$20 (8-bit A) C07032: 48 PHA C07033: AB PLB (Data bank reg = $00) C07034: E6 A0 INC $A0 C07036: 20 41 4E JSR $4E41 (Wait for NMI interrupt) C07039: A5 A0 LDA $A0 C0703B: D0 F9 BNE $7036 (-7) C0703D: 60 RTS C0703E: A6 0D LDX $0D C07040: BD 00 00 LDA $0000,X C07043: 29 FF 00 AND #$00FF C07046: 0A ASL A C07047: AA TAX C07048: BD 22 6E LDA $6E22,X C0704B: 99 22 76 STA $7622,Y C0704E: BD 22 70 LDA $7022,X C07051: 99 24 76 STA $7624,Y C07054: BD 22 72 LDA $7222,X C07057: 99 62 76 STA $7662,Y C0705A: BD 22 74 LDA $7422,X C0705D: 99 64 76 STA $7664,Y C07060: A5 0D LDA $0D C07062: 1A ASL A C07063: 29 3F 00 AND #$003F C07066: 85 0F STA $0F C07068: A5 0D LDA $0D C0706A: 29 C0 FF AND #$FFC0 C0706D: 05 0F ORA $0F C0706F: 85 0D STA $0D C07071: 98 TYA C07072: 18 CLC C07073: 69 04 00 ADC #$0004 (4) C07076: A8 TAY C07077: 29 3F 00 AND #$003F C0707A: D0 C2 BNE $703E (-62) C0707C: 60 RTS C0707D: 85 70 STA $70 C0707F: 29 01 AND #$01 C07081: F0 03 BEQ $7086 (+3) C07083: 4C 4B 71 JMP $714B C07086: A5 76 LDA $76 C07088: 38 SEC C07089: E9 07 SBC #$07 (7) C0708B: 29 3F AND #$3F C0708D: 85 24 STA $24 C0708F: 64 23 STZ $23 C07091: C2 20 REP #$20 (16-bit A) C07093: A5 23 LDA $23 C07095: 4A 4A LSR x2 C07097: 18 CLC C07098: 65 71 ADC $71 C0709A: 85 23 STA $23 C0709C: A5 06 LDA $06 (A = 0) C0709E: E2 20 SEP #$20 (8-bit A) C070A0: A5 70 LDA $70 C070A2: 29 02 AND #$02 C070A4: F0 08 BEQ $70AE (+8) C070A6: A5 75 LDA $75 C070A8: 18 CLC C070A9: 69 09 ADC #$09 (9) C070AB: 4C B3 70 JMP $70B3 (BRA...) C070AE: A5 75 LDA $75 C070B0: 38 SEC C070B1: E9 08 SBC #$08 (8) C070B3: 29 3F AND #$3F C070B5: 18 CLC C070B6: 65 23 ADC $23 C070B8: 18 CLC C070B9: 85 23 STA $23 C070BB: A6 23 LDX $23 C070BD: 86 26 STX $26 C070BF: 20 21 72 JSR $7221 C070C2: A6 23 LDX $23 C070C4: BF 00 00 7F LDA $7F0000,X C070C8: C2 20 REP #$20 (16-bit A) C070CA: 0A ASL A C070CB: AA TAX C070CC: BF 22 6E 7F LDA $7F6E22,X C070D0: 99 F3 16 STA $16F3,Y C070D3: BF 22 72 7F LDA $7F7222,X C070D7: 99 F5 16 STA $16F5,Y C070DA: BF 22 70 7F LDA $7F7022,X C070DE: 99 33 17 STA $1733,Y C070E1: BF 22 74 7F LDA $7F7422,X C070E5: 99 35 17 STA $1735,Y C070E8: A5 23 LDA $23 C070EA: 18 CLC C070EB: 69 40 00 ADC #$0040 (64) C070EE: 29 FF 0F AND #$0FFF C070F1: 85 23 STA $23 C070F3: A5 26 LDA $26 C070F5: 29 00 F0 AND #$F000 C070F8: 18 CLC C070F9: 65 23 ADC $23 C070FB: 85 23 STA $23 C070FD: C8 C8 C8 C8 INY x4 C07101: 98 TYA C07102: 29 3F 00 AND #$003F C07105: E2 20 SEP #$20 (8-bit A) C07107: D0 B9 BNE $70C2 (-71) C07109: 20 2F 72 JSR $722F C0710C: 20 41 72 JSR $7241 C0710F: C2 20 REP #$20 (16-bit A) C07111: A5 71 LDA $71 C07113: 4A LSR A C07114: 18 CLC C07115: 69 00 48 ADC #$4800 (18,432) C07118: 18 CLC C07119: 65 26 ADC $26 C0711B: 95 7F STA $7F,X C0711D: 29 C0 03 AND #$03C0 C07120: 4A 4A 4A 4A LSR x4 C07124: 95 7D STA $7D,X C07126: A9 40 00 LDA #$0040 C07129: 38 SEC C0712A: F5 7D SBC $7D,X C0712C: 95 7B STA $7B,X C0712E: A5 06 LDA $06 (A = 0) C07130: E2 20 SEP #$20 (8-bit A) C07132: B5 80 LDA $80,X C07134: 95 84 STA $84,X C07136: 29 FC AND #$FC C07138: 95 82 STA $82,X C0713A: 95 86 STA $86,X C0713C: B5 7F LDA $7F,X C0713E: 29 1F AND #$1F C07140: 95 81 STA $81,X C07142: 1A INC A C07143: 95 85 STA $85,X C07145: B5 7F LDA $7F,X C07147: 1A INC A C07148: 95 83 STA $83,X C0714A: 60 RTS C0714B: A5 70 LDA $70 C0714D: 29 02 AND #$02 C0714F: D0 08 BNE $7159 (+8) C07151: A5 76 LDA $76 C07153: 38 SBC C07154: E9 08 SEC #$08 (8) C07156: 4C 5E 71 JMP $715E (BRA!) C07159: A5 76 LDA $76 C0715B: 18 CLC C0715C: 69 08 ADC #$08 (8) C0715E: 29 3F AND #$3F C07160: 85 24 STA $24 C07162: 64 23 STZ $23 C07164: C2 20 REP #$20 (16-bit A) C07166: A5 23 LDA $23 C07168: 4A 4A LSR x2 C0716A: 18 CLC C0716B: 65 71 ADC $71 C0716D: 85 23 STA $23 C0716F: A5 06 LDA $06 (A = 0) C07171: E2 20 SEP #$20 (8-bit A) C07173: A5 75 LDA $75 C07175: 38 SEC C07176: E9 07 SBC #$07 (7) C07178: 29 3F AND #$3F C0717A: 18 CLC C0717B: 65 23 ADC $23 C0717D: 85 23 STA $23 C0717F: A6 23 LDX $23 C07181: 86 26 STX $26 C07183: 20 21 72 JSR $7221 C07186: A6 23 LDX $23 C07188: BF 00 00 7F LDA $7F0000,X C0718C: C2 20 REP #$20 (16-bit A) C0718E: 0A ASL A C0718F: AA TAX C07190: BF 22 6E 7F LDA $7F6E22,X C07194: 99 F3 16 STA $16F3,Y C07197: BF 22 70 7F LDA $7F7022,X C0719B: 99 F5 16 STA $16F5,Y C0719E: BF 22 72 7F LDA $7F7222,X C071A2: 99 33 17 STA $1733,Y C071A5: BF 22 74 7F LDA $7F7422,X C071A9: 99 35 17 STA $1735,Y C071AC: A5 06 LDA $06 (A = 0) C071AE: E2 20 SEP #$20 (8-bit A) C071B0: A5 23 LDA $23 C071B2: 1A INC A C071B3: 29 3F AND #$3F C071B5: 85 29 STA $29 C071B7: A5 23 LDA $23 C071B9: 29 C0 AND #$C0 C071BB: 05 29 ORA $29 C071BD: 85 23 STA $23 C071BF: C8 C8 C8 C8 INY x4 C071C3: 98 TYA C071C4: 29 3F AND #$3F C071C6: D0 BE BNE $7186 (-66) C071C8: 20 2F 72 JSR $722F C071CB: 20 41 72 JSR $7241 C071CE: A5 27 LDA $27 C071D0: 95 80 STA $80,X C071D2: A5 26 LDA $26 C071D4: 95 7F STA $7F,X C071D6: B5 7F LDA $7F,X C071D8: 29 1F AND #$1F C071DA: 0A ASL A C071DB: 95 7D STA $7D,X C071DD: 74 7E STZ $7E,X C071DF: A9 40 LDA #$40 C071E1: 38 SEC C071E2: F5 7D SBC $7D,X C071E4: 95 7B STA $7B,X C071E6: 74 7C STZ $7C,X C071E8: B5 7F LDA $7F,X C071EA: 29 E0 AND #$E0 C071EC: 95 81 STA $81,X C071EE: B5 80 LDA $80,X C071F0: 18 CLC C071F1: 69 04 ADC #$04 (4) C071F3: 29 07 AND #$07 C071F5: 95 82 STA $82,X C071F7: C2 20 REP #$20 (16-bit A) C071F9: A5 71 LDA $71 C071FB: 4A LSR A C071FC: 18 CLC C071FD: 69 00 48 ADC #$4800 (18,432) C07200: 48 PHA C07201: 18 CLC C07202: 75 7F ADC $7F,X C07204: 95 7F STA $7F,X C07206: 68 PLA C07207: 18 CLC C07208: 75 81 ADC $81,X C0720A: 95 81 STA $81,X C0720C: B5 7F LDA $7F,X C0720E: 18 CLC C0720F: 69 20 00 ADC #$0020 (32) C07212: 95 83 STA $83,X C07214: B5 81 LDA $81,X C07216: 18 CLC C07217: 69 20 00 ADC #$0020 (32) C0721A: 95 85 STA $85,X C0721C: A5 06 LDA $06 (A = 0) C0721E: E2 20 SEP #$20 (8-bit A) C07220: 60 RTS C07221: C2 20 REP #$20 (16-bit A) C07223: A5 71 LDA $71 C07225: EB XBA C07226: 0A 0A 0A ASL x3 C07229: A8 TAY C0722A: A5 06 LDA $06 (A = 0) C0722C: E2 20 SEP #$20 (8-bit A) C0722E: 60 RTS C0722F: C2 20 REP #$20 (16-bit A) C07231: A5 71 LDA $71 C07233: EB XBA C07234: 4A LSR A C07235: 85 0D STA $0D C07237: 4A LSR A C07238: 18 CLC C07239: 65 0D ADC $0D C0723B: AA TAX C0723C: A5 06 LDA $06 (A = 0) C0723E: E2 20 SEP #$20 (8-bit A) C07240: 60 RTS C07241: C2 20 REP #$20 (16-bit A) C07243: A5 26 LDA $26 C07245: 29 C0 03 AND #$03C0 C07248: 85 29 STA $29 C0724A: A5 26 LDA $26 C0724C: 29 10 00 AND #$0010 C0724F: F0 08 BEQ $7259 (+8) C07251: A5 29 LDA $29 C07253: 18 CLC C07254: 69 00 04 ADC #$0400 (1,024) C07257: 85 29 STA $29 C07259: A5 26 LDA $26 C0725B: 29 0F 00 AND #$000F C0725E: 0A ASL A C0725F: 18 CLC (Not needed!) C07260: 65 29 ADC $29 C07262: 29 FF 07 AND #$07FF C07265: 85 26 STA $26 C07267: A5 06 LDA $06 (A = 0) C07269: E2 20 SEP #$20 (8-bit A) C0726B: 60 RTS