If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Final Fantasy VI/ROM map/Assembly C31
< Final Fantasy VI | ROM map
Jump to navigation
Jump to search
C3/0FF6: A62D LDX $2D C3/0FF8: BDC935 LDA $35C9,X C3/0FFB: D035 BNE $1032 C3/0FFD: BDCA37 LDA $37CA,X C3/1000: 9DC935 STA $35C9,X C3/1003: BDC936 LDA $36C9,X C3/1006: 85E2 STA $E2 C3/1008: BDCA36 LDA $36CA,X C3/100B: 85E5 STA $E5 C3/100D: C220 REP #$20 (16 bit memory/accum.) C3/100F: BDC933 LDA $33C9,X C3/1012: 85E0 STA $E0 C3/1014: BD4934 LDA $3449,X C3/1017: 85E3 STA $E3 C3/1019: BD4933 LDA $3349,X C3/101C: 85F1 STA $F1 C3/101E: 203710 JSR $1037 C3/1021: E220 SEP #$20 (8 bit memory/accum.) C3/1023: AE2D00 LDX $002D C3/1026: BD4933 LDA $3349,X C3/1029: F005 BEQ $1030 C3/102B: DE4933 DEC $3349,X C3/102E: D002 BNE $1032 C3/1030: 18 CLC (this queue can be removed) C3/1031: 60 RTS C3/1032: DEC935 DEC $35C9,X C3/1035: 38 SEC (not done yet with this queue) C3/1036: 60 RTS C3/1037: A21000 LDX #$0010 C3/103A: A400 LDY $00 C3/103C: B7E0 LDA [$E0],Y C3/103E: 85E7 STA $E7 C3/1040: B7E3 LDA [$E3],Y C3/1042: 85E9 STA $E9 C3/1044: 205110 JSR $1051 C3/1047: A5E7 LDA $E7 C3/1049: 97E0 STA [$E0],Y C3/104B: C8 INY C3/104C: C8 INY C3/104D: CA DEX C3/104E: D0EC BNE $103C C3/1050: 60 RTS C3/1051: A5E7 LDA $E7 C3/1053: 291F00 AND #$001F C3/1056: 85EB STA $EB C3/1058: A5E9 LDA $E9 C3/105A: 291F00 AND #$001F C3/105D: 38 SEC C3/105E: E5EB SBC $EB C3/1060: F00C BEQ $106E C3/1062: 9008 BCC $106C C3/1064: C5F1 CMP $F1 C3/1066: 9006 BCC $106E C3/1068: E6EB INC $EB C3/106A: 8002 BRA $106E C3/106C: C6EB DEC $EB C3/106E: A5E7 LDA $E7 C3/1070: 29E003 AND #$03E0 C3/1073: 85ED STA $ED C3/1075: A5E9 LDA $E9 C3/1077: 29E003 AND #$03E0 C3/107A: 38 SEC C3/107B: E5ED SBC $ED C3/107D: F01C BEQ $109B C3/107F: 9012 BCC $1093 C3/1081: 0A ASL A C3/1082: 0A ASL A C3/1083: 0A ASL A C3/1084: EB XBA C3/1085: C5F1 CMP $F1 C3/1087: 9012 BCC $109B C3/1089: 18 CLC C3/108A: A5ED LDA $ED C3/108C: 692000 ADC #$0020 C3/108F: 85ED STA $ED C3/1091: 8008 BRA $109B C3/1093: A5ED LDA $ED C3/1095: 38 SEC C3/1096: E92000 SBC #$0020 C3/1099: 85ED STA $ED C3/109B: A5E7 LDA $E7 C3/109D: 29007C AND #$7C00 C3/10A0: 85EF STA $EF C3/10A2: A5E9 LDA $E9 C3/10A4: 29007C AND #$7C00 C3/10A7: 38 SEC C3/10A8: E5EF SBC $EF C3/10AA: F01F BEQ $10CB C3/10AC: 9015 BCC $10C3 C3/10AE: E220 SEP #$20 C3/10B0: EB XBA C3/10B1: 4A LSR A C3/10B2: 4A LSR A C3/10B3: C220 REP #$20 (16 bit memory/accum.) C3/10B5: C5F1 CMP $F1 C3/10B7: 9012 BCC $10CB C3/10B9: 18 CLC C3/10BA: A5EF LDA $EF C3/10BC: 690004 ADC #$0400 C3/10BF: 85EF STA $EF C3/10C1: 8008 BRA $10CB C3/10C3: A5EF LDA $EF C3/10C5: 38 SEC C3/10C6: E90004 SBC #$0400 C3/10C9: 85EF STA $EF C3/10CB: A5EB LDA $EB C3/10CD: 05ED ORA $ED C3/10CF: 05EF ORA $EF C3/10D1: 85E7 STA $E7 C3/10D3: 60 RTS Data C3/10D4: 0000 C3/10D6: FF7F C3/10D8: FF7F C3/10DA: FF7F C3/10DC: FF7F C3/10DE: FF7F C3/10E0: FF7F C3/10E2: FF7F C3/10E4: FF7F C3/10E6: FF7F C3/10E8: FF7F C3/10EA: FF7F C3/10EC: FF7F C3/10EE: FF7F C3/10F0: FF7F C3/10F2: FF7F Data, loaded from C3/D15C via C3/0F8E We need a table for a bunch of zeroes? C3/10F4: 0000 C3/10F6: 0000 C3/10F8: 0000 C3/10FA: 0000 C3/10FC: 0000 C3/10FE: 0000 C3/1100: 0000 C3/1102: 0000 C3/1104: 0000 C3/1106: 0000 C3/1108: 0000 C3/110A: 0000 C3/110C: 0000 C3/110E: 0000 C3/1110: 0000 C3/1112: 0000 C3/1114: A600 LDX $00 C3/1116: 862D STX $2D (set queue position to 0) C3/1118: 862F STX $2F C3/111A: C220 REP #$20 (16 bit memory/accum.) C3/111C: 204E11 JSR $114E C3/111F: E210 SEP #$10 (8 bit index registers) C3/1121: A27E LDX #$7E C3/1123: DA PHX C3/1124: AB PLB (set bank to 7E) C3/1125: A200 LDX #$00 C3/1127: 9E4932 STZ $3249,X (zero this jump address) C3/112A: 9E4936 STZ $3649,X (zero this jump entry) C3/112D: 9EC935 STZ $35C9,X (zero this pointer to OAM) C3/1130: 9E4937 STZ $3749,X C3/1133: 9EC933 STZ $33C9,X C3/1136: 9E4934 STZ $3449,X C3/1139: 9EC934 STZ $34C9,X C3/113C: 9E4935 STZ $3549,X C3/113F: E8 INX C3/1140: E8 INX C3/1141: E080 CPX #$80 (have we done the whole "stack" yet?) C3/1143: D0E2 BNE $1127 (branch if not) C3/1145: A200 LDX #$00 C3/1147: DA PHX C3/1148: AB PLB (set bank to 0) C3/1149: E220 SEP #$20 (8 bit memory/accum.) C3/114B: C210 REP #$10 (16 bit index registers) C3/114D: 60 RTS Clean out all OAM data C3/114E: A600 LDX $00 C3/1150: A901E0 LDA #$E001 C3/1152: 9D0003 STA $0300,X C3/1155: E8 INX C3/1157: E8 INX C3/1158: A90100 LDA #$0001 (TDC then INC A...) C3/115A: 9D0003 STA $0300,X C3/115E: E8 INX C3/115F: E8 INX C3/1160: E00002 CPX #$0200 C3/1163: D0EB BNE $1150 C3/1165: A400 LDY $00 C3/1167: 98 TYA C3/1168: 990005 STA $0500,Y C3/116B: C8 INY C3/116C: C8 INY C3/116D: C02000 CPY #$0020 C3/1170: D0F6 BNE $1168 C3/1172: 60 RTS Queue up routines for OAM purposes Coming in: 8-bit A holds position in queue to execute? 16-bit Y holds address in bank C3 to execute C3/1173: AA TAX C3/1174: A97E LDA #$7E C3/1176: 48 PHA C3/1177: AB PLB C3/1178: 8A TXA C3/1179: 208B11 JSR $118B (set the jump address) C3/117C: E220 SEP #$20 (8 bit memory/accum.) C3/117E: A900 LDA #$00 C3/1180: 48 PHA C3/1181: AB PLB C3/1182: A52D LDA $2D C3/1184: 9F4A377E STA $7E374A,X C3/1188: E62F INC $2F C3/118A: 60 RTS C3/118B: EB XBA C3/118C: A900 LDA #$00 C3/118E: EB XBA C3/118F: 0A ASL A C3/1190: 0A ASL A C3/1191: 0A ASL A C3/1192: 0A ASL A C3/1193: C220 REP #$20 (16 bit memory/accum.) C3/1195: AA TAX C3/1196: BD4932 LDA $3249,X (load this jump address) C3/1199: D005 BNE $11A0 (branch if one exists) C3/119B: 98 TYA C3/119C: 9D4932 STA $3249,X (otherwise save the jump address here) C3/119F: 60 RTS C3/11A0: E8 INX C3/11A1: E8 INX C3/11A2: E08000 CPX #$0080 (have we run through the whole "stack?") C3/11A5: D0EF BNE $1196 (branch if not) C3/11A7: CA DEX C3/11A8: CA DEX C3/11A9: 98 TYA C3/11AA: 9D4932 STA $3249,X C3/11AD: 80FE BRA $11AD (Changing this to 80 ED unfreezes Novalia Spirit's Shop bug) C3/11AF: 60 RTS Execute the entire OAM queue C3/11B0: 8B PHB C3/11B1: A97E LDA #$7E C3/11B3: 48 PHA C3/11B4: AB PLB C3/11B5: A20003 LDX #$0300 C3/11B8: 860E STX $0E C3/11BA: A20005 LDX #$0500 C3/11BD: 8610 STX $10 C3/11BF: A903 LDA #$03 C3/11C1: 8533 STA $33 (LDX #$0003...) C3/11C3: 6434 STZ $34 (STX $34?) C3/11C5: A28000 LDX #$0080 C3/11C8: 8631 STX $31 C3/11CA: A600 LDX $00 C3/11CC: C220 REP #$20 (16 bit memory/accum.) C3/11CE: BD4932 LDA $3249,X (jump address) C3/11D1: F022 BEQ $11F5 (branch if none) C3/11D3: 862D STX $2D (save X's position for now) C3/11D5: DA PHX C3/11D6: 852B STA $2B (save the jump address) C3/11D8: E220 SEP #$20 (8 bit memory/accum.) C3/11DA: 7B TDC C3/11DB: BD4936 LDA $3649,X (jump entry) C3/11DE: 0A ASL A (double it, since we're executing a jump table most of the time) C3/11DF: 200312 JSR $1203 C3/11E2: C220 REP #$20 (16 bit memory/accum.) C3/11E4: FA PLX C3/11E5: B00E BCS $11F5 C3/11E7: 9E4932 STZ $3249,X (zero this jump address) C3/11EA: 9E4936 STZ $3649,X (zero this jump entry) C3/11ED: 9EC935 STZ $35C9,X (zero this pointer to OAM) C3/11F0: 9E4937 STZ $3749,X C3/11F3: C62F DEC $2F C3/11F5: E8 INX C3/11F6: E8 INX C3/11F7: E08000 CPX #$0080 (have we run through the whole "stack" yet?) C3/11FA: D0D2 BNE $11CE (branch if not) C3/11FC: 203813 JSR $1338 C3/11FF: E220 SEP #$20 (8 bit memory/accum.) C3/1201: AB PLB C3/1202: 60 RTS C3/1203: 6C2B00 JMP ($002B) (execute whatever is queued up) C3/1206: 7B TDC C3/1207: 9DC936 STA $36C9,X C3/120A: C220 REP #$20 (16 bit memory/accum.) C3/120C: BDC932 LDA $32C9,X (load pointer to OAM data) C3/120F: 85EB STA $EB C3/1211: E220 SEP #$20 (8 bit memory/accum.) C3/1213: BDCA35 LDA $35CA,X (load bank pointer to OAM data) C3/1216: 85ED STA $ED C3/1218: A00200 LDY #$0002 C3/121B: B7EB LDA [$EB],Y C3/121D: 9DCA36 STA $36CA,X C3/1220: 60 RTS C3/1221: 202712 JSR $1227 (prep the sprites?) C3/1224: 4C7312 JMP $1273 (draw the sprites, also BRA fool!) C3/1227: A62D LDX $2D C3/1229: A400 LDY $00 C3/122B: C220 REP #$20 (16 bit memory/accum.) C3/122D: BDC932 LDA $32C9,X (load pointer to OAM data) C3/1230: 85EB STA $EB C3/1232: E220 SEP #$20 (8 bit memory/accum.) C3/1234: BDCA35 LDA $35CA,X (load bank pointer to OAM data) C3/1237: 85ED STA $ED C3/1239: BDCA36 LDA $36CA,X C3/123C: C9FE CMP #$FE C3/123E: F022 BEQ $1262 C3/1240: C9FF CMP #$FF C3/1242: D008 BNE $124C C3/1244: 9EC936 STZ $36C9,X C3/1247: 206312 JSR $1263 C3/124A: 80ED BRA $1239 C3/124C: BDCA36 LDA $36CA,X C3/124F: D00E BNE $125F C3/1251: BDC936 LDA $36C9,X C3/1254: 18 CLC C3/1255: 6903 ADC #$03 C3/1257: 9DC936 STA $36C9,X C3/125A: 206312 JSR $1263 C3/125D: 80DA BRA $1239 C3/125F: DECA36 DEC $36CA,X C3/1262: 60 RTS C3/1263: E210 SEP #$10 (8 bit index registers) C3/1265: BDC936 LDA $36C9,X C3/1268: A8 TAY C3/1269: C8 INY C3/126A: C8 INY C3/126B: B7EB LDA [$EB],Y C3/126D: 9DCA36 STA $36CA,X C3/1270: C210 REP #$10 (16 bit index registers) C3/1272: 60 RTS C3/1273: E210 SEP #$10 (8 bit index registers) C3/1275: BDC936 LDA $36C9,X C3/1278: A8 TAY C3/1279: C220 REP #$20 (16 bit memory/accum.) C3/127B: B7EB LDA [$EB],Y C3/127D: 85E7 STA $E7 C3/127F: C8 INY C3/1280: C8 INY C3/1281: E220 SEP #$20 (8 bit memory/accum.) C3/1283: BDCA35 LDA $35CA,X (load bank pointer to OAM data) C3/1286: 85E9 STA $E9 C3/1288: C210 REP #$10 (16 bit index registers) C3/128A: A400 LDY $00 C3/128C: A531 LDA $31 C3/128E: F06B BEQ $12FB C3/1290: B7E7 LDA [$E7],Y C3/1292: 85E6 STA $E6 C3/1294: F065 BEQ $12FB C3/1296: C8 INY C3/1297: B7E7 LDA [$E7],Y C3/1299: 85E0 STA $E0 C3/129B: 1013 BPL $12B0 C3/129D: 7B TDC C3/129E: A533 LDA $33 C3/12A0: AA TAX C3/12A1: BF3413C3 LDA $C31334,X C3/12A5: 18 CLC C3/12A6: 6534 ADC $34 C3/12A8: 8534 STA $34 C3/12AA: 9210 STA ($10) C3/12AC: A62D LDX $2D C3/12AE: 8004 BRA $12B4 C3/12B0: A534 LDA $34 C3/12B2: 9210 STA ($10) C3/12B4: A5E0 LDA $E0 C3/12B6: 297F AND #$7F C3/12B8: 85E0 STA $E0 C3/12BA: BD4A36 LDA $364A,X C3/12BD: 8901 BIT #$01 C3/12BF: F00D BEQ $12CE C3/12C1: 64E1 STZ $E1 C3/12C3: C220 REP #$20 (16 bit memory/accum.) C3/12C5: A5E0 LDA $E0 C3/12C7: 38 SEC C3/12C8: E535 SBC $35 C3/12CA: 85E0 STA $E0 C3/12CC: E220 SEP #$20 (8 bit memory/accum.) C3/12CE: 20FC12 JSR $12FC C3/12D1: C633 DEC $33 C3/12D3: 100A BPL $12DF C3/12D5: A903 LDA #$03 C3/12D7: 8533 STA $33 C3/12D9: 6434 STZ $34 C3/12DB: C220 REP #$20 (16 bit memory/accum.) C3/12DD: E610 INC $10 C3/12DF: C220 REP #$20 (16 bit memory/accum.) C3/12E1: A5E0 LDA $E0 C3/12E3: 920E STA ($0E) C3/12E5: E60E INC $0E C3/12E7: E60E INC $0E C3/12E9: A5E2 LDA $E2 C3/12EB: 920E STA ($0E) C3/12ED: E60E INC $0E C3/12EF: E60E INC $0E C3/12F1: E220 SEP #$20 (8 bit memory/accum.) C3/12F3: C631 DEC $31 C3/12F5: F004 BEQ $12FB C3/12F7: C6E6 DEC $E6 C3/12F9: D09C BNE $1297 C3/12FB: 60 RTS C3/12FC: A5E0 LDA $E0 C3/12FE: 18 CLC C3/12FF: 7DCA33 ADC $33CA,X C3/1302: 85E0 STA $E0 C3/1304: C8 INY C3/1305: B7E7 LDA [$E7],Y C3/1307: 18 CLC C3/1308: 7D4A34 ADC $344A,X C3/130B: 85E1 STA $E1 C3/130D: C8 INY C3/130E: B7E7 LDA [$E7],Y C3/1310: 85E2 STA $E2 C3/1312: C8 INY C3/1313: BD4A36 LDA $364A,X C3/1316: 8902 BIT #$02 C3/1318: F006 BEQ $1320 C3/131A: B7E7 LDA [$E7],Y C3/131C: 0940 ORA #$40 C3/131E: 8002 BRA $1322 C3/1320: B7E7 LDA [$E7],Y C3/1322: 85E3 STA $E3 C3/1324: BD4937 LDA $3749,X C3/1327: F009 BEQ $1332 C3/1329: A5E3 LDA $E3 C3/132B: 29F1 AND #$F1 C3/132D: 1D4937 ORA $3749,X C3/1330: 85E3 STA $E3 C3/1332: C8 INY C3/1333: 60 RTS Data: accessed from above (C3/12A1) C3/1334: 8020 C3/1336: 0802 C3/1338: A434 LDY $34 C3/133A: F010 BEQ $134C C3/133C: A2FC01 LDX #$01FC C3/133F: A901E0 LDA #$E001 C3/1342: 9D0003 STA $0300,X C3/1345: CA DEX C3/1346: CA DEX C3/1347: CA DEX C3/1348: CA DEX C3/1349: 88 DEY C3/134A: D0F6 BNE $1342 C3/134C: 60 RTS C3/134D: 206813 JSR $1368 (trigger NMI) C3/1350: A546 LDA $46 C3/1352: 8920 BIT #$20 C3/1354: F003 BEQ $1359 C3/1356: 200581 JSR $8105 C3/1359: 226EA4C3 JSL $C3A46E (get Joypad status 1) C3/135D: A520 LDA $20 C3/135F: F006 BEQ $1367 C3/1361: 7B TDC C3/1362: A8 TAY C3/1363: 8408 STY $08 C3/1365: 840A STY $0A C3/1367: 60 RTS C3/1368: A981 LDA #$81 C3/136A: 8D0042 STA $4200 C3/136D: 8524 STA $24 C3/136F: 58 CLI C3/1370: A524 LDA $24 C3/1372: D0FC BNE $1370 (wait for NMI to finish before proceeding) C3/1374: 78 SEI C3/1375: A544 LDA $44 C3/1377: 8D0021 STA $2100 C3/137A: A543 LDA $43 C3/137C: 8D0C42 STA $420C (turn on all enabled channels of HDMA) C3/137F: A5B5 LDA $B5 C3/1381: 8D0621 STA $2106 (and now it's mosaic!) C3/1384: 64AE STZ $AE C3/1386: 60 RTS NMI interrupt C3/1387: 08 PHP (from 00/1500, set at C3/00CB) C3/1388: C230 REP #$30 C3/138A: 48 PHA C3/138B: DA PHX C3/138C: 5A PHY C3/138D: 8B PHB C3/138E: 0B PHD C3/138F: E220 SEP #$20 (8 bit memory/accum.) C3/1391: AD1042 LDA $4210 C3/1394: A900 LDA #$00 C3/1396: 48 PHA C3/1397: AB PLB C3/1398: A20000 LDX #$0000 (LDX $00?) C3/139B: DA PHX C3/139C: 2B PLD C3/139D: A524 LDA $24 C3/139F: F010 BEQ $13B1 C3/13A1: 201214 JSR $1412 (execute a bunch of DMA) C3/13A4: C220 REP #$20 (16 bit memory/accum.) C3/13A6: E6CF INC $CF C3/13A8: E220 SEP #$20 (8 bit memory/accum.) C3/13AA: A420 LDY $20 C3/13AC: F003 BEQ $13B1 C3/13AE: 88 DEY C3/13AF: 8420 STY $20 C3/13B1: 221500C0 JSL $C00015 C3/13B5: 22C813C3 JSL $C313C8 (get the game time played) C3/13B9: E623 INC $23 C3/13BB: 7B TDC C3/13BC: 8524 STA $24 (STZ $24?) C3/13BE: C230 REP #$30 (16 bit memory, accum., X, and Y registers) C3/13C0: 2B PLD C3/13C1: AB PLB C3/13C2: 7A PLY C3/13C3: FA PLX C3/13C4: 68 PLA C3/13C5: 28 PLP C3/13C6: 40 RTI C3/13C7: 40 RTI (IRQ jumps here, from 00/1504, set at C3/00D1) C3/13C8: AD1E02 LDA $021E (Load frame count) C3/13CB: C93C CMP #$3C (Is it 60?) C3/13CD: F002 BEQ $13D1 (If so, branch to below "carry out" into seconds) C3/13CF: 802B BRA $13FC (Otherwise, branch directly to overflow checks) C3/13D1: 9C1E02 STZ $021E (Set frames to 0) C3/13D4: AD1D02 LDA $021D (Load seconds) C3/13D7: C93B CMP #$3B (Is it 59?) C3/13D9: F005 BEQ $13E0 (If so, branch to below "carry out" into minutes) C3/13DB: EE1D02 INC $021D (Increment seconds) C3/13DE: 801C BRA $13FC (Branch to overflow checks) C3/13E0: 9C1D02 STZ $021D (Set seconds to 0) C3/13E3: AD1C02 LDA $021C (Load minutes) C3/13E6: C93B CMP #$3B (Is it 59?) C3/13E8: F005 BEQ $13EF (If so, branch to below "carry out" into hours) C3/13EA: EE1C02 INC $021C (Increment minutes) C3/13ED: 800D BRA $13FC (Branch to overflow checks) C3/13EF: 9C1C02 STZ $021C (Set minutes to 0) C3/13F2: AD1B02 LDA $021B (Load hours) C3/13F5: C963 CMP #$63 (Is it 99?) C3/13F7: F003 BEQ $13FC (If so, branch to overflow checks) C3/13F9: EE1B02 INC $021B (Increment hours) C3/13FC: AD1B02 LDA $021B (Load hours) C3/13FF: C963 CMP #$63 (Is it 99 now?) C3/1401: D00A BNE $140D (If not, branch to frame increment; hours haven't overflowed) C3/1403: AD1C02 LDA $021C (Otherwise, check minutes) C3/1406: C93B CMP #$3B (Is it 59?) C3/1408: D003 BNE $140D (If not, branch to frame increment; minutes haven't overflowed) C3/140A: 9C1D02 STZ $021D (Set seconds to 0) C3/140D: EE1E02 INC $021E (Increment frames) C3/1410: 7B TDC C3/1411: 6B RTL C3/1412: 9C0C42 STZ $420C (turn off HDMA) C3/1415: 9C0B42 STZ $420B (turn off DMA) C3/1418: A535 LDA $35 C3/141A: 8D0D21 STA $210D C3/141D: A536 LDA $36 C3/141F: 8D0D21 STA $210D C3/1422: A537 LDA $37 C3/1424: 8D0E21 STA $210E C3/1427: A538 LDA $38 C3/1429: 8D0E21 STA $210E C3/142C: A539 LDA $39 C3/142E: 8D0F21 STA $210F C3/1431: A53A LDA $3A C3/1433: 8D0F21 STA $210F C3/1436: A53B LDA $3B C3/1438: 8D1021 STA $2110 C3/143B: A53C LDA $3C C3/143D: 8D1021 STA $2110 C3/1440: A53D LDA $3D C3/1442: 8D1121 STA $2111 C3/1445: A53E LDA $3E C3/1447: 8D1121 STA $2111 C3/144A: A53F LDA $3F C3/144C: 8D1221 STA $2112 C3/144F: A540 LDA $40 C3/1451: 8D1221 STA $2112 C3/1454: 2063D2 JSR $D263 C3/1457: 206314 JSR $1463 C3/145A: 20D214 JSR $14D2 C3/145D: 208814 JSR $1488 C3/1460: 4CAC14 JMP $14AC (BRA fool!) DMA routine 1 C3/1463: A600 LDX $00 (X = #$0000) C3/1465: 8E0221 STX $2102 C3/1468: 8A TXA (A = #$0000) C3/1469: 8D0443 STA $4304 (starting bank, $00) C3/146C: A902 LDA #$02 C3/146E: 8D0043 STA $4300 (set transfer method to...?) C3/1471: A904 LDA #$04 C3/1473: 8D0143 STA $4301 (register address becomes $2104) C3/1476: A00003 LDY #$0300 C3/1479: 8C0243 STY $4302 (starting location, 00/0300, OAM!) C3/147C: A02002 LDY #$0220 C3/147F: 8C0543 STY $4305 (amount to transfer) C3/1482: A901 LDA #$01 C3/1484: 8D0B42 STA $420B (turn on channel 0 of DMA) C3/1487: 60 RTS DMA routine 3 C3/1488: A414 LDY $14 C3/148A: 8C1621 STY $2116 C3/148D: A901 LDA #$01 C3/148F: 8D0043 STA $4300 (set transfer method to...?) C3/1492: A918 LDA #$18 C3/1494: 8D0143 STA $4301 (register address becomes $2118) C3/1497: A416 LDY $16 C3/1499: 8C0243 STY $4302 (starting location) C3/149C: A518 LDA $18 C3/149E: 8D0443 STA $4304 (starting bank) C3/14A1: A412 LDY $12 C3/14A3: 8C0543 STY $4305 (amount to transfer) C3/14A6: A901 LDA #$01 C3/14A8: 8D0B42 STA $420B (turn on channel 0 of DMA) C3/14AB: 60 RTS DMA routine 4 C3/14AC: A41B LDY $1B C3/14AE: F021 BEQ $14D1 C3/14B0: 8C1621 STY $2116 C3/14B3: A901 LDA #$01 C3/14B5: 8D0043 STA $4300 (set transfer method to...?) C3/14B8: A918 LDA #$18 C3/14BA: 8D0143 STA $4301 (register address becomes $2118) C3/14BD: A41D LDY $1D C3/14BF: 8C0243 STY $4302 (starting location) C3/14C2: A51F LDA $1F C3/14C4: 8D0443 STA $4304 (starting bank) C3/14C7: A419 LDY $19 C3/14C9: 8C0543 STY $4305 (amount to transfer) C3/14CC: A901 LDA #$01 C3/14CE: 8D0B42 STA $420B (turn on channel 0 of DMA) C3/14D1: 60 RTS DMA routine 2 C3/14D2: A545 LDA $45 C3/14D4: 8901 BIT #$01 C3/14D6: F025 BEQ $14FD C3/14D8: A500 LDA $00 C3/14DA: 8D2121 STA $2121 C3/14DD: A902 LDA #$02 C3/14DF: 8D0043 STA $4300 (set transfer method to...?) C3/14E2: A922 LDA #$22 C3/14E4: 8D0143 STA $4301 (register address becomes $2122) C3/14E7: A04930 LDY #$3049 C3/14EA: 8C0243 STY $4302 (starting location) C3/14ED: A97E LDA #$7E C3/14EF: 8D0443 STA $4304 (starting bank, 7E/3049, palettes?) C3/14F2: A00002 LDY #$0200 C3/14F5: 8C0543 STY $4305 (amount to transfer) C3/14F8: A901 LDA #$01 C3/14FA: 8D0B42 STA $420B (turn on channel 0 of DMA) C3/14FD: 60 RTS C3/14FE: AD1F02 LDA $021F (from C0/C4F0) C3/1501: F011 BEQ $1514 C3/1503: 206615 JSR $1566 (Load everything from SRAM) C3/1506: 20D119 JSR $19D1 (Calculate SRAM checksum) C3/1509: 20EB19 JSR $19EB (determine if save file exists) C3/150C: F006 BEQ $1514 (branch if not) C3/150E: 209515 JSR $1595 C3/1511: 7B TDC C3/1512: 8004 BRA $1518 C3/1514: E220 SEP #$20 (8 bit memory/accum.) C3/1516: A9FF LDA #$FF C3/1518: 8D0502 STA $0205 C3/151B: 7B TDC C3/151C: 6B RTL Store everything to SRAM C3/151D: 2903 AND #$03 C3/151F: 8FF07F30 STA $307FF0 C3/1523: 8D2402 STA $0224 C3/1526: 48 PHA (save current save slot) C3/1527: AC1B02 LDY $021B C3/152A: 8C6318 STY $1863 (save current time, lower two bytes) C3/152D: AD1D02 LDA $021D C3/1530: 8D6518 STA $1865 (save current time, upper byte) C3/1533: 208615 JSR $1586 C3/1536: 20D119 JSR $19D1 (Calculate SRAM checksum) C3/1539: A4E7 LDY $E7 (load checksum) C3/153B: 8CFE1F STY $1FFE (save it) C3/153E: 7B TDC C3/153F: 68 PLA (get current save slot) C3/1540: 0A ASL A C3/1541: AA TAX C3/1542: C220 REP #$20 (16 bit memory/accum.) C3/1544: BF5E15C3 LDA $C3155E,X C3/1548: AA TAX C3/1549: E220 SEP #$20 (8 bit memory/accum.) C3/154B: A400 LDY $00 C3/154D: B90016 LDA $1600,Y (current working RAM) C3/1550: 9F006030 STA $306000,X (save to SRAM) C3/1554: E8 INX C3/1555: C8 INY C3/1556: C0000A CPY #$0A00 (have we done all bytes for this save slot?) C3/1559: D0F2 BNE $154D (branch if not) C3/155B: 4C8370 JMP $7083 (write SRAM markers) Data: Different Slots start at different offsets in the SRAM C3/155E: 0000 (New game) C3/1560: 0000 (Slot 1) C3/1562: 000A (Slot 2) C3/1564: 0014 (Slot 3) Load everything from SRAM C3/1566: EB XBA C3/1567: A500 LDA $00 C3/1569: EB XBA C3/156A: 0A ASL A C3/156B: AA TAX C3/156C: C220 REP #$20 (16 bit memory/accum.) C3/156E: BF5E15C3 LDA $C3155E,X C3/1572: AA TAX C3/1573: E220 SEP #$20 (8 bit memory/accum.) C3/1575: A400 LDY $00 C3/1577: BF006030 LDA $306000,X C3/157B: 990016 STA $1600,Y C3/157E: E8 INX C3/157F: C8 INY C3/1580: C0000A CPY #$0A00 C3/1583: D0F2 BNE $1577 C3/1585: 60 RTS C3/1586: 7B TDC C3/1587: AA TAX C3/1588: BD8811 LDA $1188,X C3/158B: 9DA81F STA $1FA8,X C3/158E: E8 INX C3/158F: E01800 CPX #$0018 C3/1592: D0F4 BNE $1588 C3/1594: 60 RTS C3/1595: 7B TDC C3/1596: AA TAX C3/1597: BDA81F LDA $1FA8,X C3/159A: 9D8811 STA $1188,X C3/159D: E8 INX C3/159E: E01800 CPX #$0018 C3/15A1: D0F4 BNE $1597 C3/15A3: 60 RTS C3/15A4: A0B315 LDY #$15B3 (get save screen hotspot data) C3/15A7: 4CFE05 JMP $05FE C3/15AA: 202D07 JSR $072D C3/15AD: A0CE15 LDY #$15CE (get finger positioning for save screen) C3/15B0: 4C4006 JMP $0640 Data: Save screen hotspots C3/15B3: 80 00 00 01 03 C3/15B8: A0C715 LDY #$15C7 (get load screen hotspot data) C3/15BB: 4CFE05 JMP $05FE C3/15BE: 202D07 JSR $072D C3/15C1: A0CC15 LDY #$15CC (get finger positioning for load screen) C3/15C4: 4C4006 JMP $0640 Data: Load screen hotspots C3/15C7: 80 00 00 01 04 Data: finger positions in save/load screen C3/15CC: 081C (X/Y position of finger in "new game" slot) C3/15CE: 083C (X/Y position of finger in slot 1) C3/15D0: 0874 (X/Y position of finger in slot 2) C3/15D2: 08AC (X/Y position of finger in slot 3) C3/15D4: A0E315 LDY #$15E3 C3/15D7: 4CFE05 JMP $05FE C3/15DA: 202D07 JSR $072D C3/15DD: A0E815 LDY #$15E8 C3/15E0: 4C4006 JMP $0640 Data: Confirm save/load hotspots C3/15E3: 80 00 00 01 02 Data: finger positioning for confirming save/load C3/15E8: BF44 C3/15EA: BF54 C3/15EC: 20286A JSR $6A28 C3/15EF: 203216 JSR $1632 (get all 3 save files, display as needed) C3/15F2: 20873A JSR $3A87 C3/15F5: A09C18 LDY #$189C C3/15F8: 204103 JSR $0341 (draw new game window) C3/15FB: A920 LDA #$20 C3/15FD: 8529 STA $29 (set text color to white) C3/15FF: A0781A LDY #$1A78 C3/1602: 20F902 JSR $02F9 (display "Save") C3/1605: 4C9018 JMP $1890 C3/1608: 20286A JSR $6A28 C3/160B: 9C4E1D STZ $1D4E C3/160E: 20BC6B JSR $6BBC C3/1611: 20873A JSR $3A87 (determine new game window background) C3/1614: A09C18 LDY #$189C C3/1617: 204103 JSR $0341 (draw the "New game" window) C3/161A: AD4E1D LDA $1D4E (load saved bits) C3/161D: 2970 AND #$70 (keep cursor memory, sound mono, and gauge off) C3/161F: 8D4E1D STA $1D4E C3/1622: 203216 JSR $1632 (get all 3 save files, display as needed) C3/1625: A920 LDA #$20 C3/1627: 8529 STA $29 (set text color to white) C3/1629: A07F1A LDY #$1A7F C3/162C: 20F902 JSR $02F9 (display "New game") C3/162F: 4C9018 JMP $1890 C3/1632: 20606C JSR $6C60 C3/1635: A920 LDA #$20 C3/1637: 1443 TRB $43 (eventually disable channel 5 of HDMA) C3/1639: A00200 LDY #$0002 C3/163C: 8437 STY $37 C3/163E: AC551D LDY $1D55 (load font palette) C3/1641: 84E7 STY $E7 (save it for now) C3/1643: A0FF7F LDY #$7FFF C3/1646: 8C551D STY $1D55 C3/1649: 20993F JSR $3F99 C3/164C: A4E7 LDY $E7 C3/164E: 8C551D STY $1D55 C3/1651: A901 LDA #$01 C3/1653: 221DCAD4 JSL $D4CA1D (do gradient effect for save slot window 1, 2, and 3) C3/1657: 20156A JSR $6A15 C3/165A: 203C6A JSR $6A3C C3/165D: 20466A JSR $6A46 C3/1660: 20AC18 JSR $18AC (backup new game data) C3/1663: A901 LDA #$01 C3/1665: 8566 STA $66 (save slot 1) C3/1667: 206615 JSR $1566 (load this slots contents) C3/166A: 201569 JSR $6915 C3/166D: 20D119 JSR $19D1 (Calculate SRAM checksum) C3/1670: 20EB19 JSR $19EB (determine if save file exists) C3/1673: 8491 STY $91 (save result) C3/1675: F00B BEQ $1682 (branch if save file 1 is empty) C3/1677: 20616F JSR $6F61 C3/167A: 201D17 JSR $171D C3/167D: 20F53A JSR $3AF5 C3/1680: 8013 BRA $1695 (save file 1 exists) C3/1682: 20C118 JSR $18C1 (restore new game data) C3/1685: 20616F JSR $6F61 C3/1688: A920 LDA #$20 C3/168A: 8529 STA $29 (set text color to white) C3/168C: A0241A LDY #$1A24 C3/168F: 20F902 JSR $02F9 (display save file 1's "Empty") C3/1692: 20F53A JSR $3AF5 C3/1695: A902 LDA #$02 C3/1697: 8566 STA $66 (save slot 2) C3/1699: 206615 JSR $1566 (load this slots contents) C3/169C: 201569 JSR $6915 C3/169F: 20D119 JSR $19D1 (Calculate SRAM checksum) C3/16A2: 20EB19 JSR $19EB (determine if save file exists) C3/16A5: 8493 STY $93 (save result) C3/16A7: F00B BEQ $16B4 (branch if save file 2 is empty) C3/16A9: 20B86F JSR $6FB8 C3/16AC: 20CA17 JSR $17CA C3/16AF: 20093B JSR $3B09 C3/16B2: 8013 BRA $16C7 (save file 2 exists) C3/16B4: 20C118 JSR $18C1 (restore new game data) C3/16B7: 20B86F JSR $6FB8 C3/16BA: A920 LDA #$20 C3/16BC: 8529 STA $29 (set text color to white) C3/16BE: A02C1A LDY #$1A2C C3/16C1: 20F902 JSR $02F9 (display save file 2's "Empty") C3/16C4: 20093B JSR $3B09 C3/16C7: A903 LDA #$03 C3/16C9: 8566 STA $66 (save slot 3) C3/16CB: 206615 JSR $1566 (load this slots contents) C3/16CE: 201569 JSR $6915 C3/16D1: 20D119 JSR $19D1 (Calculate SRAM checksum) C3/16D4: 20EB19 JSR $19EB (determine if save file exists) C3/16D7: 8495 STY $95 (save result) C3/16D9: F00B BEQ $16E6 (branch if save file 3 is empty) C3/16DB: 20DC6F JSR $6FDC C3/16DE: 202D18 JSR $182D C3/16E1: 201D3B JSR $3B1D C3/16E4: 8013 BRA $16F9 (save file 3 exists) C3/16E6: 20C118 JSR $18C1 (restore new game data) C3/16E9: 20DC6F JSR $6FDC C3/16EC: A920 LDA #$20 C3/16EE: 8529 STA $29 (set text color to white) C3/16F0: A0341A LDY #$1A34 C3/16F3: 20F902 JSR $02F9 (display save file 3's "Empty") C3/16F6: 201D3B JSR $3B1D C3/16F9: 20C118 JSR $18C1 (restore new game data) C3/16FC: 20A13A JSR $3AA1 (determine save file 1 window background) C3/16FF: A0A018 LDY #$18A0 C3/1702: 204103 JSR $0341 (draw save file 1 window) C3/1705: 20BD3A JSR $3ABD (determine save file 2 window background) C3/1708: A0A418 LDY #$18A4 C3/170B: 204103 JSR $0341 (draw save file 2 window) C3/170E: 20D93A JSR $3AD9 (determine save file 3 window background) C3/1711: A0A818 LDY #$18A8 C3/1714: 204103 JSR $0341 (draw save file 3 window) C3/1717: A0001C LDY #$1C00 C3/171A: 4C2603 JMP $0326 C3/171D: A920 LDA #$20 C3/171F: 8529 STA $29 (set text color to white) C3/1721: A0511A LDY #$1A51 C3/1724: 20F902 JSR $02F9 (display save file 1's ":") C3/1727: AD6318 LDA $1863 C3/172A: 20E004 JSR $04E0 C3/172D: A20D7B LDX #$7B0D C3/1730: 20B604 JSR $04B6 (display save file 1's hours) C3/1733: AD6418 LDA $1864 C3/1736: 20F904 JSR $04F9 C3/1739: A2137B LDX #$7B13 C3/173C: 20B604 JSR $04B6 (display save file 1's minutes) C3/173F: 204D17 JSR $174D C3/1742: A92C LDA #$2C C3/1744: 8529 STA $29 (set text color to blue) C3/1746: A03C1A LDY #$1A3C C3/1749: 20F902 JSR $02F9 (display save file 1's "Time") C3/174C: 60 RTS C3/174D: 7B TDC C3/174E: AA TAX C3/174F: B569 LDA $69,X C3/1751: 3029 BMI $177C C3/1753: 20BE17 JSR $17BE C3/1756: A92C LDA #$2C C3/1758: 8529 STA $29 (set text color to blue) C3/175A: A05D1A LDY #$1A5D C3/175D: 20F902 JSR $02F9 (display save file 1's "LV") C3/1760: A920 LDA #$20 C3/1762: 8529 STA $29 (set text color to white) C3/1764: A06C1A LDY #$1A6C C3/1767: 20F902 JSR $02F9 (display save file 1's "/") C3/176A: A04F3A LDY #$3A4F C3/176D: 5A PHY (save file 1's lead character name position) C3/176E: A2FD7A LDX #$7AFD C3/1771: DA PHX (save file 1's max HP position) C3/1772: A2F37A LDX #$7AF3 C3/1775: DA PHX (save file 1's current HP position) C3/1776: A2817A LDX #$7A81 C3/1779: DA PHX (save file 1's level position) C3/177A: 8003 BRA $177F C3/177C: E8 INX C3/177D: 80D0 BRA $174F C3/177F: A667 LDX $67 C3/1781: BD0800 LDA $0008,X (level) C3/1784: 20E004 JSR $04E0 C3/1787: FA PLX C3/1788: 20B604 JSR $04B6 (display level) C3/178B: A467 LDY $67 C3/178D: 209A2B JSR $2B9A C3/1790: B90900 LDA $0009,Y (current HP, high byte) C3/1793: 85F3 STA $F3 C3/1795: B90A00 LDA $000A,Y (current HP, low byte) C3/1798: 85F4 STA $F4 C3/179A: 202E05 JSR $052E (convert HP to digits) C3/179D: FA PLX C3/179E: 209004 JSR $0490 (display HP) C3/17A1: A667 LDX $67 C3/17A3: BD0B00 LDA $000B,X (maximum HP, high byte) C3/17A6: 85F3 STA $F3 C3/17A8: BD0C00 LDA $000C,X (maximum HP, low byte) C3/17AB: 85F4 STA $F4 C3/17AD: 20650D JSR $0D65 C3/17B0: 20920D JSR $0D92 C3/17B3: 202E05 JSR $052E (convert HP to digits) C3/17B6: FA PLX C3/17B7: 209004 JSR $0490 (display HP) C3/17BA: 7A PLY C3/17BB: 4CCF34 JMP $34CF C3/17BE: C220 REP #$20 (16 bit memory/accum.) C3/17C0: 8A TXA C3/17C1: 0A ASL A C3/17C2: AA TAX C3/17C3: B56D LDA $6D,X C3/17C5: 8567 STA $67 C3/17C7: E220 SEP #$20 (8 bit memory/accum.) C3/17C9: 60 RTS C3/17CA: A920 LDA #$20 C3/17CC: 8529 STA $29 (set text color to white) C3/17CE: A0551A LDY #$1A55 C3/17D1: 20F902 JSR $02F9 (display save file 2's ":") C3/17D4: AD6318 LDA $1863 C3/17D7: 20E004 JSR $04E0 C3/17DA: A2CD7C LDX #$7CCD C3/17DD: 20B604 JSR $04B6 (display save file 2's hours) C3/17E0: AD6418 LDA $1864 C3/17E3: 20F904 JSR $04F9 C3/17E6: A2D37C LDX #$7CD3 C3/17E9: 20B604 JSR $04B6 (display save file 2's minutes) C3/17EC: 20FA17 JSR $17FA C3/17EF: A92C LDA #$2C C3/17F1: 8529 STA $29 (set text color to blue) C3/17F3: A0431A LDY #$1A43 C3/17F6: 20F902 JSR $02F9 (display save file 2's "Time") C3/17F9: 60 RTS C3/17FA: 7B TDC C3/17FB: AA TAX C3/17FC: B569 LDA $69,X C3/17FE: 302A BMI $182A C3/1800: 20BE17 JSR $17BE C3/1803: A92C LDA #$2C C3/1805: 8529 STA $29 (set text color to blue) C3/1807: A0621A LDY #$1A62 C3/180A: 20F902 JSR $02F9 (display save file 2's "LV") C3/180D: A920 LDA #$20 C3/180F: 8529 STA $29 (set text color to white) C3/1811: A0701A LDY #$1A70 C3/1814: 20F902 JSR $02F9 (display save file 2's "/") C3/1817: A00F3C LDY #$3C0F C3/181A: 5A PHY (save file 2's lead character name position) C3/181B: A2BD7C LDX #$7CBD C3/181E: DA PHX (save file 2's max HP position) C3/181F: A2B37C LDX #$7CB3 C3/1822: DA PHX (save file 2's current HP position) C3/1823: A2417C LDX #$7C41 C3/1826: DA PHX (save file 2's level position) C3/1827: 4C7F17 JMP $177F C3/182A: E8 INX C3/182B: 80CF BRA $17FC C3/182D: A920 LDA #$20 C3/182F: 8529 STA $29 (set text color to white) C3/1831: A0591A LDY #$1A59 C3/1834: 20F902 JSR $02F9 (display save file 3's ":") C3/1837: AD6318 LDA $1863 C3/183A: 20E004 JSR $04E0 C3/183D: A28D7E LDX #$7E8D C3/1840: 20B604 JSR $04B6 (display save file 3's hours) C3/1843: AD6418 LDA $1864 C3/1846: 20F904 JSR $04F9 C3/1849: A2937E LDX #$7E93 C3/184C: 20B604 JSR $04B6 (display save file 3's minutes) C3/184F: 205D18 JSR $185D C3/1852: A92C LDA #$2C C3/1854: 8529 STA $29 (set text color to blue) C3/1856: A04A1A LDY #$1A4A C3/1859: 20F902 JSR $02F9 (display save file 3's "Time") C3/185C: 60 RTS C3/185D: 7B TDC C3/185E: AA TAX C3/185F: B569 LDA $69,X C3/1861: 302A BMI $188D C3/1863: 20BE17 JSR $17BE C3/1866: A92C LDA #$2C C3/1868: 8529 STA $29 (set text color to blue) C3/186A: A0671A LDY #$1A67 C3/186D: 20F902 JSR $02F9 (display save file 3's "LV") C3/1870: A920 LDA #$20 C3/1872: 8529 STA $29 (set text color to white) C3/1874: A0741A LDY #$1A74 C3/1877: 20F902 JSR $02F9 (display save file 3's "/") C3/187A: A0CF3D LDY #$3DCF C3/187D: 5A PHY (save file 3's lead character name position) C3/187E: A27D7E LDX #$7E7D C3/1881: DA PHX (save file 3's max HP position) C3/1882: A2737E LDX #$7E73 C3/1885: DA PHX (save file 3's current HP position) C3/1886: A2017E LDX #$7E01 C3/1889: DA PHX (save file 3's level position) C3/188A: 4C7F17 JMP $177F C3/188D: E8 INX C3/188E: 80CF BRA $185F C3/1890: 20280E JSR $0E28 C3/1893: 20520E JSR $0E52 C3/1896: 206E0E JSR $0E6E C3/1899: 4C7C0E JMP $0E7C Data: window sizes for save/load screen C3/189C: CB581C02 ("New game" window) C3/18A0: CB591C05 (save file 1 window) C3/18A4: 8B5B1C05 (save file 2 window) C3/18A8: 4B5D1C05 (save file 3 window) C3/18AC: A08DAC LDY #$AC8D C3/18AF: 8C8121 STY $2181 C3/18B2: A600 LDX $00 C3/18B4: BD0016 LDA $1600,X C3/18B7: 8D8021 STA $2180 C3/18BA: E8 INX C3/18BB: E0000A CPX #$0A00 C3/18BE: D0F4 BNE $18B4 C3/18C0: 60 RTS C3/18C1: A600 LDX $00 C3/18C3: BF8DAC7E LDA $7EAC8D,X C3/18C7: 9D0016 STA $1600,X C3/18CA: E8 INX C3/18CB: E0000A CPX #$0A00 C3/18CE: D0F3 BNE $18C3 C3/18D0: 60 RTS C3/18D1: A902 LDA #$02 (from C3/1CF5, C3/1D63, C3/ADDE) C3/18D3: 8D5043 STA $4350 C3/18D6: A912 LDA #$12 C3/18D8: 8D5143 STA $4351 (register address becomes $2112) C3/18DB: A0F018 LDY #$18F0 C3/18DE: 8C5243 STY $4352 (set address) C3/18E1: A9C3 LDA #$C3 C3/18E3: 8D5443 STA $4354 (set bank, C3/18F0) C3/18E6: A9C3 LDA #$C3 C3/18E8: 8D5743 STA $4357 C3/18EB: A920 LDA #$20 C3/18ED: 0443 TSB $43 (eventually enable channel channel 5 of HDMA) C3/18EF: 60 RTS HDMA transfer table C3/18F0: 200000 (32 scanlines, 0 pixel shift) C3/18F3: 0C0400 (12 scanlines, 4 pixel shift) C3/18F6: 0C0800 (12 scanlines, 8 pixel shift) C3/18F9: 08C8FF (8 scanlines, ?? pixel shift) C3/18FC: 500000 (80 scanlines, 0 pixel shift) C3/18FF: 580000 (88 scanlines, 0 pixel shift, 232 scanlines total) C3/1902: 00 (end) C3/1903: A600 LDX $00 C3/1905: BF71AA7E LDA $7EAA71,X C3/1909: 306C BMI $1977 C3/190B: DA PHX C3/190C: DA PHX C3/190D: A903 LDA #$03 C3/190F: A0C719 LDY #$19C7 C3/1912: 207311 JSR $1173 (put C3/19C7 in the queue) C3/1915: 9B TXY C3/1916: FA PLX C3/1917: 8B PHB C3/1918: A97E LDA #$7E C3/191A: 48 PHA C3/191B: AB PLB C3/191C: A566 LDA $66 (load finger's position) C3/191E: F011 BEQ $1931 (branch if on "New Game") C3/1920: C901 CMP #$01 C3/1922: F01F BEQ $1943 (branch if on slot 1) C3/1924: C902 CMP #$02 C3/1926: F012 BEQ $193A (branch if on slot 2) C3/1928: BFBB19C3 LDA $C319BB,X (set slot 3's sprites to "enabled") C3/192C: 994937 STA $3749,Y C3/192F: 8019 BRA $194A C3/1931: BF9719C3 LDA $C31997,X (set all slot's sprites to "disabled") C3/1935: 994937 STA $3749,Y C3/1938: 8010 BRA $194A C3/193A: BFAF19C3 LDA $C319AF,X (set slot 2's sprites to "enabled") C3/193E: 994937 STA $3749,Y C3/1941: 8007 BRA $194A C3/1943: BFA319C3 LDA $C319A3,X (set slot 1's sprites to "enabled") C3/1947: 994937 STA $3749,Y C3/194A: A9D8 LDA #$D8 C3/194C: 99CA35 STA $35CA,Y (save bank pointer to OAM data) C3/194F: 7B TDC C3/1950: 99CB33 STA $33CB,Y C3/1953: 994B34 STA $344B,Y C3/1956: BF7F19C3 LDA $C3197F,X (get horizontal sprite positions) C3/195A: 99CA33 STA $33CA,Y C3/195D: BF8B19C3 LDA $C3198B,X (get vertical sprite positions) C3/1961: 994A34 STA $344A,Y C3/1964: BF71AA7E LDA $7EAA71,X C3/1968: C220 REP #$20 (16 bit memory/accum.) C3/196A: 0A ASL A C3/196B: AA TAX C3/196C: BF17E9D8 LDA $D8E917,X (determine which sprites to load?) C3/1970: 99C932 STA $32C9,Y (save as pointer to OAM data) C3/1973: E220 SEP #$20 (8 bit memory/accum.) C3/1975: AB PLB C3/1976: FA PLX C3/1977: E8 INX C3/1978: E00C00 CPX #$000C (have we done all 12 sprites?) C3/197B: D088 BNE $1905 (branch if not) C3/197D: 38 SEC C3/197E: 60 RTS Data: Sprite positions for the three save files C3/197F: 50688098 (X position for sprites in save slot 1) C3/1983: 50688098 (X position for sprites in save slot 2) C3/1987: 50688098 (X position for sprites in save slot 3) C3/198B: 40404040 (Y position for sprites in save slot 1) C3/198F: 78787878 (Y position for sprites in save slot 2) C3/1993: B0B0B0B0 (Y position for sprites in save slot 3) Data: set sprites to "enabled" or "disabled" based on finger position C3/1997: 02020202 (disable all three slot's sprites) C3/199B: 02020202 C3/199F: 02020202 C3/19A3: 00000000 (enable slot 1's sprites) C3/19A7: 02020202 C3/19AB: 02020202 C3/19AF: 02020202 (enable slot 2's sprites) C3/19B3: 00000000 C3/19B7: 02020202 C3/19BB: 02020202 (enable slot 3's sprites) C3/19BF: 02020202 C3/19C3: 00000000 C3/19C7: A62D LDX $2D C3/19C9: 200612 JSR $1206 C3/19CC: 202112 JSR $1221 (draw the sprites!) C3/19CF: 18 CLC (this queue can be removed) C3/19D0: 60 RTS Calculate SRAM checksum C3/19D1: 64E7 STZ $E7 C3/19D3: 64E8 STZ $E8 C3/19D5: A600 LDX $00 C3/19D7: 18 CLC C3/19D8: BD0016 LDA $1600,X C3/19DB: 65E7 ADC $E7 C3/19DD: 85E7 STA $E7 C3/19DF: 7B TDC C3/19E0: 65E8 ADC $E8 C3/19E2: 85E8 STA $E8 C3/19E4: E8 INX C3/19E5: E0FE09 CPX #$09FE C3/19E8: D0EE BNE $19D8 C3/19EA: 60 RTS Determine if save file exists C3/19EB: C220 REP #$20 (16 bit memory/accum.) C3/19ED: A5E7 LDA $E7 (load calculated checksum) C3/19EF: CDFE1F CMP $1FFE (does it match this file's checksum?) C3/19F2: D002 BNE $19F6 (they don't match, save file was tampered with or corrupt) C3/19F4: 8001 BRA $19F7 (they do match, everything's ok) C3/19F6: 7B TDC C3/19F7: A8 TAY C3/19F8: E220 SEP #$20 (8 bit memory/accum.) C3/19FA: 60 RTS DP $26 is #$53 C3/19FB: 204F30 JSR $304F C3/19FE: A00800 LDY #$0008 C3/1A01: 8420 STY $20 C3/1A03: A954 LDA #$54 C3/1A05: 8526 STA $26 (execute at C3/1A19) C3/1A07: 4C0319 JMP $1903 DP $26 is #$52 C3/1A0A: 205630 JSR $3056 C3/1A0D: A00800 LDY #$0008 C3/1A10: 8420 STY $20 C3/1A12: A954 LDA #$54 C3/1A14: 8526 STA $26 (execute at C3/1A19) C3/1A16: 4C0319 JMP $1903 DP $26 is #$54 C3/1A19: A420 LDY $20 (from C3/0283, the massive jump table; $26 = #$54) C3/1A1B: D004 BNE $1A21 C3/1A1D: A527 LDA $27 (load the queue to execute) C3/1A1F: 8526 STA $26 (transfer it to be executed next) C3/1A21: 4C0319 JMP $1903 C3/1A24: 4F7A84A6A9ADB200 (position of and word "Empty") C3/1A2C: 0F7C84A6A9ADB200 (position of and word "Empty") C3/1A34: CF7D84A6A9ADB200 (position of and word "Empty") C3/1A3C: CF7A93A2A69E00 (position of and word "Time") C3/1A45: 8F7C93A2A69E00 (position of and word "Time") C3/1A4A: 4F7E93A2A69E00 (position of and word "Time") C3/1A51: 117BC100 (position of and word ":") C3/1A55: D17CC100 (position of and word ":") C3/1A59: 917EC100 (position of and word ":") C3/1A5D: 7B7A8B9500 (position of and word "LV") C3/1A62: 3B7C8B9500 (position of and word "LV") C3/1A67: FB7D8B9500 (position of and word "LV") C3/1A6C: FB7AC000 (position of and word "/") C3/1A70: BB7CC000 (position of and word "/") C3/1A74: 7B7EC000 (position of and word "/") C3/1A78: 6779929AAF9E00 (position of and word "Save") C3/1A7F: 63798D9EB0FF869AA69E00 (position of and word "New Game") DP $26 is #$04 - initiate the main menu C3/1A8A: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1A8D: 20A81B JSR $1BA8 C3/1A90: 20890F JSR $0F89 C3/1A93: 206B3A JSR $3A6B C3/1A96: A904 LDA #$04 C3/1A98: 0443 TSB $43 (eventually enable channel 2 of HDMA) C3/1A9A: 20890F JSR $0F89 C3/1A9D: 200469 JSR $6904 C3/1AA0: A903 LDA #$03 C3/1AA2: 8D0721 STA $2107 C3/1AA5: A943 LDA #$43 C3/1AA7: 8D0921 STA $2109 C3/1AAA: A9C0 LDA #$C0 C3/1AAC: 1443 TRB $43 (eventually disable channels 6 and 7 of HDMA) C3/1AAE: A902 LDA #$02 C3/1AB0: 8546 STA $46 C3/1AB2: 20F530 JSR $30F5 C3/1AB5: A900 LDA #$00 C3/1AB7: A0422F LDY #$2F42 C3/1ABA: 207311 JSR $1173 (put C3/2F42 in the queue) C3/1ABD: 20B007 JSR $07B0 (finger OAM initiating) C3/1AC0: 204E35 JSR $354E C3/1AC3: A00200 LDY #$0002 C3/1AC6: 8437 STY $37 C3/1AC8: 20A336 JSR $36A3 C3/1ACB: A905 LDA #$05 C3/1ACD: 8527 STA $27 (sustain main menu, queue up to execute at C3/1D4A) C3/1ACF: A901 LDA #$01 C3/1AD1: 8526 STA $26 (transition process) C3/1AD3: 4C4135 JMP $3541 DP $26 is #$07 - initiate the item menu C3/1AD6: 20E21A JSR $1AE2 C3/1AD9: 20FE1A JSR $1AFE C3/1ADC: 200E1B JSR $1B0E C3/1ADF: 4C2E1B JMP $1B2E C3/1AE2: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1AE5: 20991B JSR $1B99 C3/1AE8: 200469 JSR $6904 C3/1AEB: 644A STZ $4A C3/1AED: 6449 STZ $49 C3/1AEF: A9F5 LDA #$F5 C3/1AF1: 855C STA $5C (set item screen's maximum scroll range) C3/1AF3: A90A LDA #$0A C3/1AF5: 855A STA $5A C3/1AF7: A901 LDA #$01 C3/1AF9: 855B STA $5B C3/1AFB: 4C1C7D JMP $7D1C C3/1AFE: AD4E1D LDA $1D4E (load some config stuff) C3/1B01: 2940 AND #$40 (cursor on memory set?) C3/1B03: F003 BEQ $1B08 (branch if not) C3/1B05: 20AC0D JSR $0DAC C3/1B08: 20257D JSR $7D25 C3/1B0B: 4CA37D JMP $7DA3 C3/1B0E: 202B7E JSR $7E2B C3/1B11: 20B007 JSR $07B0 (finger OAM initiating) C3/1B14: 201F09 JSR $091F (set arrow's initial position) C3/1B17: C220 REP #$20 (16 bit memory/accum.) C3/1B19: A97000 LDA #$0070 C3/1B1C: 9F4A357E STA $7E354A,X C3/1B20: A95800 LDA #$0058 C3/1B23: 9FCA347E STA $7E34CA,X C3/1B27: E220 SEP #$20 (8 bit memory/accum.) C3/1B29: A901 LDA #$01 C3/1B2B: 8526 STA $26 (transition process) C3/1B2D: 60 RTS C3/1B2E: A908 LDA #$08 C3/1B30: 8527 STA $27 (queue up to execute at C3/1EF7) C3/1B32: 4C4135 JMP $3541 C3/1B35: 20E21A JSR $1AE2 (from C3/02C9, the massive jump table; $26 = #$77) C3/1B38: A58E LDA $8E C3/1B3A: 854D STA $4D C3/1B3C: A48E LDY $8E C3/1B3E: 844F STY $4F C3/1B40: A590 LDA $90 C3/1B42: 854A STA $4A C3/1B44: A54A LDA $4A (...really?) C3/1B46: 85E0 STA $E0 C3/1B48: A550 LDA $50 C3/1B4A: 38 SEC C3/1B4B: E5E0 SBC $E0 C3/1B4D: 854E STA $4E C3/1B4F: 20257D JSR $7D25 C3/1B52: 20A37D JSR $7DA3 C3/1B55: 200E1B JSR $1B0E C3/1B58: 4C2E1B JMP $1B2E DP $26 is #$09 - initiate the skills menu C3/1B5B: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1B5E: 7B TDC C3/1B5F: A528 LDA $28 C3/1B61: AA TAX C3/1B62: B569 LDA $69,X C3/1B64: 220600C2 JSL $C20006 (equipment set/check) C3/1B68: 20A81B JSR $1BA8 C3/1B6B: 20086A JSR $6A08 C3/1B6E: 644A STZ $4A C3/1B70: 6449 STZ $49 C3/1B72: 20BC4D JSR $4DBC C3/1B75: 20804C JSR $4C80 C3/1B78: 20504B JSR $4B50 C3/1B7B: AD4E1D LDA $1D4E (various saved things in config screen) C3/1B7E: 2940 AND #$40 (Re-equip set to empty?) C3/1B80: F003 BEQ $1B85 (branch if not) C3/1B82: 20FF0D JSR $0DFF C3/1B85: 20594B JSR $4B59 C3/1B88: 20B007 JSR $07B0 (finger OAM initiating) C3/1B8B: 20991B JSR $1B99 C3/1B8E: A901 LDA #$01 C3/1B90: 8526 STA $26 (transition process) C3/1B92: A90A LDA #$0A C3/1B94: 8527 STA $27 (queue up to execute at C3/1FF4) C3/1B96: 4C4135 JMP $3541 C3/1B99: 2096A7 JSR $A796 C3/1B9C: 2091A9 JSR $A991 C3/1B9F: A900 LDA #$00 C3/1BA1: A00EA8 LDY #$A80E C3/1BA4: 207311 JSR $1173 (put C3/A80E in the queue) C3/1BA7: 60 RTS C3/1BA8: 201569 JSR $6915 C3/1BAB: 20826E JSR $6E82 C3/1BAE: 20096C JSR $6C09 C3/1BB1: A905 LDA #$05 C3/1BB3: 0445 TSB $45 C3/1BB5: 4CD214 JMP $14D2 DB $26 is #$35 - initiate the equip menu C3/1BB8: 20BD1B JSR $1BBD C3/1BBB: 801A BRA $1BD7 C3/1BBD: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1BC0: 20086A JSR $6A08 C3/1BC3: A906 LDA #$06 C3/1BC5: 0446 TSB $46 C3/1BC7: 644A STZ $4A C3/1BC9: 6449 STZ $49 C3/1BCB: 20B694 JSR $94B6 C3/1BCE: 20508E JSR $8E50 C3/1BD1: 20598E JSR $8E59 C3/1BD4: 4CB007 JMP $07B0 (finger OAM initiating) C3/1BD7: 203290 JSR $9032 C3/1BDA: A901 LDA #$01 C3/1BDC: 8526 STA $26 (transition process) C3/1BDE: A936 LDA #$36 C3/1BE0: 8527 STA $27 (queue up to execute at C3/9621) C3/1BE2: 4C4135 JMP $3541 DP $26 is #$7E C3/1BE5: 20011C JSR $1C01 (from C3/02D7) C3/1BE8: 204F96 JSR $964F C3/1BEB: 200A1C JSR $1C0A C3/1BEE: A955 LDA #$55 (queue up to execute at C3/9884) C3/1BF0: 4C151C JMP $1C15 (BRA would work here) DP $26 is #$7F C3/1BF3: 20011C JSR $1C01 (from C3/02D9) C3/1BF6: 205696 JSR $9656 C3/1BF9: 200A1C JSR $1C0A C3/1BFC: A956 LDA #$56 (queue up to execute at C3/98CF) C3/1BFE: 4C151C JMP $1C15 (BRA would work here) C3/1C01: 20BD1B JSR $1BBD C3/1C04: 203290 JSR $9032 C3/1C07: 4C1496 JMP $9614 C3/1C0A: 206C8E JSR $8E6C C3/1C0D: 20758E JSR $8E75 C3/1C10: A901 LDA #$01 C3/1C12: 8526 STA $26 (transition process) C3/1C14: 60 RTS C3/1C15: 8527 STA $27 C3/1C17: 4C4135 JMP $3541 DP $26 is #$6D - "Reequip" is set to Optimum in config; called when relics change equipment C3/1C1A: 20BD1B JSR $1BBD (from C3/02B5) C3/1C1D: 20F096 JSR $96F0 (Optimum command - fully equips standard equipment) C3/1C20: A902 LDA #$02 C3/1C22: 8525 STA $25 C3/1C24: 80B1 BRA $1BD7 DP $26 is #$6E - "Reequip" is set to Empty in config; called when relics change equipment C3/1C26: 20BD1B JSR $1BBD (from C3/02B7) C3/1C29: 20A896 JSR $96A8 (Empty command - removes standard equipment) C3/1C2C: A902 LDA #$02 C3/1C2E: 8525 STA $25 C3/1C30: 80A5 BRA $1BD7 DP $26 is #$38 - initiate screen that displays equipment for all characters C3/1C32: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1C35: 209794 JSR $9497 (get DMA transfer initiated) C3/1C38: 20ED8E JSR $8EED C3/1C3B: A901 LDA #$01 C3/1C3D: 8526 STA $26 (transition process) C3/1C3F: A939 LDA #$39 C3/1C41: 8527 STA $27 (queue up to execute at C3/2966) C3/1C43: 4C4135 JMP $3541 DP $26 is #$0B - initiate the status screen C3/1C46: 202F35 JSR $352F (from C3/01F1, turns off DMA and HDMA transfers, turns the screen off) C3/1C49: 200B62 JSR $620B (do a DMA transfer) C3/1C4C: 20055D JSR $5D05 (put status screen in VRAM?) C3/1C4F: 205D1C JSR $1C5D C3/1C52: A901 LDA #$01 C3/1C54: 8526 STA $26 (transition process) C3/1C56: A90C LDA #$0C C3/1C58: 8527 STA $27 (queue up to execute at C3/21F5) C3/1C5A: 4C4135 JMP $3541 C3/1C5D: 7B TDC C3/1C5E: A528 LDA $28 C3/1C60: 0A ASL A C3/1C61: AA TAX C3/1C62: B46D LDY $6D,X C3/1C64: B90000 LDA $0000,Y (load character ID) C3/1C67: C90C CMP #$0C (Is this Gogo?) C3/1C69: D00D BNE $1C78 (branch if not) C3/1C6B: 20FF36 JSR $36FF (get hotspot data) C3/1C6E: 200837 JSR $3708 (set finger positioning) C3/1C71: A906 LDA #$06 C3/1C73: 0446 TSB $46 C3/1C75: 4CB007 JMP $07B0 (finger OAM initiating) C3/1C78: A906 LDA #$06 C3/1C7A: 1446 TRB $46 C3/1C7C: 60 RTS DP $26 is #$0D - initiate the config screen C3/1C7D: 202F35 JSR $352F (fade out screen, disable H/DMA, from C3/01F5) C3/1C80: 644A STZ $4A C3/1C82: 204C3A JSR $3A4C (do a DMA transfer) C3/1C85: 209E38 JSR $389E (draw the config screen) C3/1C88: 205838 JSR $3858 (get hotspot data for config screen 1) C3/1C8B: A55F LDA $5F C3/1C8D: 854E STA $4E C3/1C8F: 206138 JSR $3861 (get finger positioning data for config screen 1) C3/1C92: 20B007 JSR $07B0 (finger OAM initiating) C3/1C95: A901 LDA #$01 C3/1C97: 8526 STA $26 (transition process) C3/1C99: A90E LDA #$0E C3/1C9B: 8527 STA $27 (queue up to execute at C3/22C5) C3/1C9D: 4C4135 JMP $3541 DP $26 is #$13 - initiate the save menu C3/1CA0: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1CA3: A00200 LDY #$0002 C3/1CA6: 8437 STY $37 C3/1CA8: 20A336 JSR $36A3 (do an HDMA transfer) C3/1CAB: A9E3 LDA #$E3 C3/1CAD: 1443 TRB $43 (eventually disable channels 0, 1, 5-7 of HDMA) C3/1CAF: 20EC15 JSR $15EC (draw save screen and get data of the three save files) C3/1CB2: 20C76C JSR $6CC7 (get character sprite palettes) C3/1CB5: 20846C JSR $6C84 (palette of finger) C3/1CB8: 20A415 JSR $15A4 (hotspot data for save screen) C3/1CBB: A491 LDY $91 C3/1CBD: D008 BNE $1CC7 C3/1CBF: A493 LDY $93 C3/1CC1: D004 BNE $1CC7 C3/1CC3: A495 LDY $95 C3/1CC5: F006 BEQ $1CCD C3/1CC7: AD2402 LDA $0224 C3/1CCA: 3A DEC A C3/1CCB: 854E STA $4E C3/1CCD: 20AD15 JSR $15AD (finger positioning for save screen) C3/1CD0: 20B007 JSR $07B0 (finger OAM initiating) C3/1CD3: A54B LDA $4B C3/1CD5: 1A INC A C3/1CD6: 8566 STA $66 C3/1CD8: A952 LDA #$52 C3/1CDA: 8526 STA $26 (execute at C3/1A0A) C3/1CDC: A914 LDA #$14 C3/1CDE: 8527 STA $27 (queue up to execute at C3/2540) C3/1CE0: 4C4135 JMP $3541 DP $26 is #$15 - initiate "Erasing data" screen C3/1CE3: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1CE6: 201569 JSR $6915 C3/1CE9: 202831 JSR $3128 C3/1CEC: 20D415 JSR $15D4 (hotspot data for confirming save) C3/1CEF: 20DD15 JSR $15DD (finger positioning for confirming save) C3/1CF2: 20B007 JSR $07B0 (finger OAM initiating) C3/1CF5: 20D118 JSR $18D1 C3/1CF8: A916 LDA #$16 C3/1CFA: 8527 STA $27 (queue up to execute at C3/259D) C3/1CFC: A901 LDA #$01 C3/1CFE: 8526 STA $26 (transition process to above) C3/1D00: 4C4135 JMP $3541 DP $26 is #$20 - initiate SRAM loading screen C3/1D03: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1D06: A00200 LDY #$0002 C3/1D09: 8437 STY $37 C3/1D0B: 20A336 JSR $36A3 (do an HDMA transfer) C3/1D0E: A9E3 LDA #$E3 C3/1D10: 1443 TRB $43 (eventually disable channels 0, 1, 5-7 of HDMA) C3/1D12: A400 LDY $00 C3/1D14: 8435 STY $35 C3/1D16: 8439 STY $39 C3/1D18: 843D STY $3D C3/1D1A: A902 LDA #$02 C3/1D1C: 8546 STA $46 C3/1D1E: 200816 JSR $1608 (draw all windows, get screen filled with data) C3/1D21: 20C76C JSR $6CC7 (get character sprite palettes) C3/1D24: 20846C JSR $6C84 (palette of finger) C3/1D27: 20B815 JSR $15B8 (load screen's hotspot data) C3/1D2A: A491 LDY $91 C3/1D2C: D008 BNE $1D36 C3/1D2E: A493 LDY $93 C3/1D30: D004 BNE $1D36 C3/1D32: A495 LDY $95 C3/1D34: F006 BEQ $1D3C C3/1D36: AFF07F30 LDA $307FF0 C3/1D3A: 854E STA $4E C3/1D3C: 20C115 JSR $15C1 (finger positioning data) C3/1D3F: 20B007 JSR $07B0 (finger OAM initiating) C3/1D42: A54B LDA $4B C3/1D44: 8566 STA $66 C3/1D46: A921 LDA #$21 C3/1D48: 8527 STA $27 (queue up to execute at C3/29C2) C3/1D4A: A952 LDA #$52 C3/1D4C: 8526 STA $26 (execute at C3/1A0A) C3/1D4E: 4C4135 JMP $3541 DP $26 is #$22 - initiate the "This data?" screen C3/1D51: 202F35 JSR $352F (fade out screen, disable H/DMA) C3/1D54: 201569 JSR $6915 C3/1D57: 204C31 JSR $314C C3/1D5A: 20D415 JSR $15D4 (confirm save/load hotspots) C3/1D5D: 20DD15 JSR $15DD (confirm save/load finger positioning data) C3/1D60: 20B007 JSR $07B0 (finger OAM initiating) C3/1D63: 20D118 JSR $18D1 C3/1D66: A923 LDA #$23 C3/1D68: 8527 STA $27 (queue up to execute at C3/2A2A) C3/1D6A: A901 LDA #$01 C3/1D6C: 8526 STA $26 (transition process to above) C3/1D6E: 4C4135 JMP $3541 DP $26 is #$00, general fade out C3/1D71: 204F30 JSR $304F C3/1D74: A00800 LDY #$0008 C3/1D77: 8420 STY $20 C3/1D79: A902 LDA #$02 C3/1D7B: 8526 STA $26 (execute at C3/1D8B) C3/1D7D: 60 RTS DP $26 is #$01, general fade out C3/1D7E: 205630 JSR $3056 C3/1D81: A00800 LDY #$0008 C3/1D84: 8420 STY $20 C3/1D86: A902 LDA #$02 C3/1D88: 8526 STA $26 (execute at C3/1D8B) C3/1D8A: 60 RTS DP $26 is #$02, transfers $27 to $26 C3/1D8B: A420 LDY $20 C3/1D8D: D004 BNE $1D93 C3/1D8F: A527 LDA $27 (load queued) C3/1D91: 8526 STA $26 (transfer it to execute) C3/1D93: 60 RTS DP $26, value of #$03 C3/1D94: A900 LDA #$00 C3/1D96: A0422F LDY #$2F42 C3/1D99: 207311 JSR $1173 (put C3/2F42 in the queue) C3/1D9C: 20B007 JSR $07B0 (finger OAM initiating) C3/1D9F: A905 LDA #$05 C3/1DA1: 8526 STA $26 (execute at C3/1DA4) C3/1DA3: 60 RTS DP $26 is #$05 - sustain the main menu C3/1DA4: 204835 JSR $3548 C3/1DA7: A508 LDA $08 C3/1DA9: 8980 BIT #$80 (did you press A?) C3/1DAB: F003 BEQ $1DB0 (branch if not, BPL...) C3/1DAD: 4C622E JMP $2E62 C3/1DB0: A509 LDA $09 C3/1DB2: 8902 BIT #$02 C3/1DB4: F006 BEQ $1DBC C3/1DB6: 20A30E JSR $0EA3 C3/1DB9: 4CC62E JMP $2EC6 C3/1DBC: A509 LDA $09 (A already holds the contents of $09) C3/1DBE: 8980 BIT #$80 (did you press B?) C3/1DC0: F00F BEQ $1DD1 (branch if not, BPL...) C3/1DC2: 9C0502 STZ $0205 C3/1DC5: 20A90E JSR $0EA9 C3/1DC8: 20D21D JSR $1DD2 C3/1DCB: A9FF LDA #$FF C3/1DCD: 8527 STA $27 (exit the menu) C3/1DCF: 6426 STZ $26 (fade out) C3/1DD1: 60 RTS C3/1DD2: 9CDF11 STZ $11DF C3/1DD5: A600 LDX $00 C3/1DD7: B569 LDA $69,X C3/1DD9: 3006 BMI $1DE1 C3/1DDB: DA PHX C3/1DDC: 220600C2 JSL $C20006 (equipment check function) C3/1DE0: FA PLX C3/1DE1: E8 INX C3/1DE2: E00400 CPX #$0004 C3/1DE5: D0F0 BNE $1DD7 C3/1DE7: 60 RTS DP $26 is #$06 C3/1DE8: 204835 JSR $3548 C3/1DEB: A509 LDA $09 C3/1DED: 8980 BIT #$80 (did you press B?) C3/1DEF: F00C BEQ $1DFD (branch if not, BPL...) C3/1DF1: 20A90E JSR $0EA9 C3/1DF4: A905 LDA #$05 C3/1DF6: 1446 TRB $46 C3/1DF8: A903 LDA #$03 C3/1DFA: 8526 STA $26 (execute at C3/1D94) C3/1DFC: 60 RTS C3/1DFD: A509 LDA $09 (A already holds the contents of $09) C3/1DFF: 8902 BIT #$02 (did you press left?) C3/1E01: F01C BEQ $1E1F (branch if not) C3/1E03: A525 LDA $25 C3/1E05: C902 CMP #$02 C3/1E07: F004 BEQ $1E0D C3/1E09: C903 CMP #$03 C3/1E0B: D012 BNE $1E1F C3/1E0D: 20A30E JSR $0EA3 C3/1E10: A906 LDA #$06 C3/1E12: 1446 TRB $46 C3/1E14: A937 LDA #$37 C3/1E16: 8526 STA $26 (execute at C3/1EB5) C3/1E18: A54E LDA $4E C3/1E1A: 855E STA $5E C3/1E1C: 4C9F08 JMP $089F C3/1E1F: A508 LDA $08 C3/1E21: 8980 BIT #$80 (did you press A?) C3/1E23: F007 BEQ $1E2C (branch if not, BPL... and branch backwards!) C3/1E25: A54B LDA $4B C3/1E27: 8528 STA $28 C3/1E29: 4C2D1E JMP $1E2D (BRA would work here) C3/1E2C: 60 RTS (this RTS doesn't need to be here, good ol compilers :P) C3/1E2D: 204E1E JSR $1E4E C3/1E30: B010 BCS $1E42 C3/1E32: 7B TDC C3/1E33: A525 LDA $25 C3/1E35: AA TAX C3/1E36: BF491EC3 LDA $C31E49,X C3/1E3A: 8527 STA $27 (queue up an exit, C3/5B1B, C3/1BB8, C3/9E4B, or the status screen at C3/1C46) C3/1E3C: 6426 STZ $26 (fade out) C3/1E3E: 20B20E JSR $0EB2 (makes the click sound) C3/1E41: 60 RTS C3/1E42: 20C00E JSR $0EC0 (makes the buzzer sound) C3/1E45: 205D30 JSR $305D (mosaic effect) C3/1E48: 60 RTS C3/1E49: FF C3/1E4A: 09 C3/1E4B: 35 C3/1E4C: 58 C3/1E4D: 0B Determine if a character can be equipped C3/1E4E: 7B TDC C3/1E4F: A525 LDA $25 C3/1E51: C901 CMP #$01 C3/1E53: F034 BEQ $1E89 C3/1E55: C902 CMP #$02 C3/1E57: F006 BEQ $1E5F C3/1E59: C903 CMP #$03 C3/1E5B: F017 BEQ $1E74 C3/1E5D: 8054 BRA $1EB3 Fork: Standard equipment C3/1E5F: 7B TDC (upper 8 bits of A are already 0...) C3/1E60: A528 LDA $28 C3/1E62: 0A ASL A C3/1E63: AA TAX C3/1E64: C220 REP #$20 (16 bit memory/accum.) C3/1E66: B56D LDA $6D,X C3/1E68: E220 SEP #$20 (8 bit memory/accum.) C3/1E6A: AA TAX C3/1E6B: BD0000 LDA $0000,X C3/1E6E: C90D CMP #$0D (Umaro or higher?) (NOTE: NOP these two out to let anyone be equippable) C3/1E70: B03F BCS $1EB1 C3/1E72: 8028 BRA $1E9C Fork: Relics C3/1E74: 7B TDC (upper 8 bits of A are already 0...) C3/1E75: A528 LDA $28 C3/1E77: 0A ASL A C3/1E78: AA TAX C3/1E79: C220 REP #$20 (16 bit memory/accum.) C3/1E7B: B56D LDA $6D,X C3/1E7D: E220 SEP #$20 (8 bit memory/accum.) C3/1E7F: AA TAX C3/1E80: BD0000 LDA $0000,X C3/1E83: C90E CMP #$0E (Leo or higher?) C3/1E85: B02A BCS $1EB1 C3/1E87: 8013 BRA $1E9C Fork: Espers C3/1E89: 203D4D JSR $4D3D (enable and disable skills) C3/1E8C: A924 LDA #$24 C3/1E8E: A600 LDX $00 C3/1E90: D579 CMP $79,X C3/1E92: D008 BNE $1E9C C3/1E94: E8 INX C3/1E95: E00700 CPX #$0007 C3/1E98: D0F6 BNE $1E90 C3/1E9A: 8015 BRA $1EB1 Fork: Check for status ineligibility C3/1E9C: 7B TDC C3/1E9D: A528 LDA $28 C3/1E9F: 0A ASL A C3/1EA0: AA TAX C3/1EA1: C220 REP #$20 (16 bit memory/accum.) C3/1EA3: B56D LDA $6D,X C3/1EA5: E220 SEP #$20 (8 bit memory/accum.) C3/1EA7: AA TAX C3/1EA8: BD1400 LDA $0014,X (status byte 1) C3/1EAB: 29C2 AND #$C2 (Check Death, Zombie, Stone) C3/1EAD: D002 BNE $1EB1 (branch if any are set) C3/1EAF: 8002 BRA $1EB3 C3/1EB1: 38 SEC C3/1EB2: 60 RTS C3/1EB3: 18 CLC C3/1EB4: 60 RTS C3/1EB5: 204835 JSR $3548 C3/1EB8: A509 LDA $09 C3/1EBA: 8980 BIT #$80 (did you press B?) C3/1EBC: D006 BNE $1EC4 (branch if so, BMI...) C3/1EBE: A509 LDA $09 (A already holds the contents of $09) C3/1EC0: 8901 BIT #$01 (did you press right? LSR A...) C3/1EC2: F021 BEQ $1EE5 (branch if not, BCC...) C3/1EC4: 20A90E JSR $0EA9 C3/1EC7: 20982F JSR $2F98 C3/1ECA: 20B007 JSR $07B0 (finger OAM initiating) C3/1ECD: A900 LDA #$00 C3/1ECF: A0C02F LDY #$2FC0 C3/1ED2: 207311 JSR $1173 (put C3/2FC0 in the queue) C3/1ED5: 20B011 JSR $11B0 (execute everything in OAM queue) C3/1ED8: A55E LDA $5E C3/1EDA: 854E STA $4E C3/1EDC: A906 LDA #$06 C3/1EDE: 8526 STA $26 (execute at C3/1DE8) C3/1EE0: A908 LDA #$08 C3/1EE2: 1446 TRB $46 C3/1EE4: 60 RTS C3/1EE5: A508 LDA $08 C3/1EE7: 8980 BIT #$80 (did you press A?) C3/1EE9: F00A BEQ $1EF5 (branch if not, BPL...) C3/1EEB: 20B20E JSR $0EB2 (makes the click sound) C3/1EEE: 6426 STZ $26 (fade out) C3/1EF0: A938 LDA #$38 C3/1EF2: 8527 STA $27 (queue up to execute at C3/1C32) C3/1EF4: 60 RTS C3/1EF5: 60 RTS C3/1EF6: 60 RTS DP $26 is #$08 - sustain the item menu C3/1EF7: A910 LDA #$10 C3/1EF9: 1445 TRB $45 C3/1EFB: 7B TDC C3/1EFC: 852A STA $2A C3/1EFE: 20FD0E JSR $0EFD C3/1F01: 20641F JSR $1F64 C3/1F04: B0F0 BCS $1EF6 C3/1F06: 20227D JSR $7D22 C3/1F09: 20F182 JSR $82F1 C3/1F0C: A509 LDA $09 C3/1F0E: 8980 BIT #$80 (did you press B?) C3/1F10: F029 BEQ $1F3B (branch if not, BPL...) C3/1F12: 20A90E JSR $0EA9 C3/1F15: A44F LDY $4F C3/1F17: 8C2F02 STY $022F C3/1F1A: A54A LDA $4A C3/1F1C: 8D3102 STA $0231 C3/1F1F: 20807D JSR $7D80 C3/1F22: AD4E1D LDA $1D4E (various things set in the config screen) C3/1F25: 2940 AND #$40 (cursor memory set?) C3/1F27: F005 BEQ $1F2E (branch if not) C3/1F29: AC3402 LDY $0234 C3/1F2C: 844D STY $4D C3/1F2E: 20867D JSR $7D86 C3/1F31: A917 LDA #$17 C3/1F33: 8526 STA $26 (execute at C3/25F4) C3/1F35: 208583 JSR $8385 C3/1F38: 4C390F JMP $0F39 C3/1F3B: A508 LDA $08 C3/1F3D: 8980 BIT #$80 (did you press A?) C3/1F3F: F00E BEQ $1F4F (branch if not, BPL...) C3/1F41: 20B20E JSR $0EB2 (makes the click sound) C3/1F44: A54B LDA $4B C3/1F46: 8528 STA $28 C3/1F48: A919 LDA #$19 C3/1F4A: 8526 STA $26 (execute at C3/2779) C3/1F4C: 4C212F JMP $2F21 C3/1F4F: 60 RTS C3/1F50: 6450 STZ $50 C3/1F52: 644E STZ $4E C3/1F54: 38 SEC C3/1F55: 60 RTS C3/1F56: A554 LDA $54 C3/1F58: 3A DEC A C3/1F59: 854E STA $4E C3/1F5B: 18 CLC C3/1F5C: 654A ADC $4A C3/1F5E: 8550 STA $50 C3/1F60: 38 SEC C3/1F61: 60 RTS C3/1F62: 18 CLC C3/1F63: 60 RTS Scroll through pages in a scrolling screen C3/1F64: A520 LDA $20 C3/1F66: D0FA BNE $1F62 C3/1F68: A50A LDA $0A C3/1F6A: 8910 BIT #$10 C3/1F6C: F025 BEQ $1F93 C3/1F6E: A54A LDA $4A C3/1F70: C55C CMP $5C C3/1F72: F0E2 BEQ $1F56 C3/1F74: A55C LDA $5C C3/1F76: 38 SEC C3/1F77: E54A SBC $4A C3/1F79: C55A CMP $5A C3/1F7B: B002 BCS $1F7F C3/1F7D: 8002 BRA $1F81 C3/1F7F: A55A LDA $5A C3/1F81: 85E0 STA $E0 C3/1F83: A54A LDA $4A C3/1F85: 18 CLC C3/1F86: 65E0 ADC $E0 C3/1F88: 854A STA $4A C3/1F8A: A550 LDA $50 C3/1F8C: 18 CLC C3/1F8D: 65E0 ADC $E0 C3/1F8F: 8550 STA $50 C3/1F91: 8024 BRA $1FB7 C3/1F93: A50A LDA $0A C3/1F95: 8920 BIT #$20 C3/1F97: F0C9 BEQ $1F62 C3/1F99: A54A LDA $4A C3/1F9B: F0B3 BEQ $1F50 C3/1F9D: C55A CMP $5A C3/1F9F: B004 BCS $1FA5 C3/1FA1: A54A LDA $4A C3/1FA3: 8002 BRA $1FA7 C3/1FA5: A55A LDA $5A C3/1FA7: 85E0 STA $E0 C3/1FA9: A54A LDA $4A C3/1FAB: 38 SEC C3/1FAC: E5E0 SBC $E0 C3/1FAE: 854A STA $4A C3/1FB0: A550 LDA $50 C3/1FB2: 38 SEC C3/1FB3: E5E0 SBC $E0 C3/1FB5: 8550 STA $50 C3/1FB7: 20A30E JSR $0EA3 C3/1FBA: 7B TDC C3/1FBB: A52A LDA $2A C3/1FBD: 0A ASL A C3/1FBE: AA TAX C3/1FBF: FCC41F JSR ($1FC4,X) C3/1FC2: 38 SEC C3/1FC3: 60 RTS C3/1FC4: D01F C3/1FC6: D61F C3/1FC8: DC1F C3/1FCA: E21F C3/1FCC: E81F C3/1FCE: EE1F C3/1FD0: 20957E JSR $7E95 C3/1FD3: 4C887F JMP $7F88 C3/1FD6: 202D4E JSR $4E2D C3/1FD9: 4C874F JMP $4F87 C3/1FDC: 202D4E JSR $4E2D C3/1FDF: 4C3C52 JMP $523C C3/1FE2: 202D4E JSR $4E2D C3/1FE5: 4CA753 JMP $53A7 C3/1FE8: 202D4E JSR $4E2D C3/1FEB: 4C6C54 JMP $546C C3/1FEE: 202095 JSR $9520 C3/1FF1: 4CAC9C JMP $9CAC DP $26 is #$0A - sustain the skills menu C3/1FF4: A910 LDA #$10 C3/1FF6: 0445 TSB $45 C3/1FF8: A9C0 LDA #$C0 C3/1FFA: 1446 TRB $46 C3/1FFC: 20564B JSR $4B56 C3/1FFF: A509 LDA $09 C3/2001: 8980 BIT #$80 (did you press B?) C3/2003: F00A BEQ $200F (branch if not, BPL...) C3/2005: 20A90E JSR $0EA9 C3/2008: A904 LDA #$04 C3/200A: 8527 STA $27 (init the main menu, queue up to execute at C3/1A8A) C3/200C: 6426 STZ $26 (fade out) C3/200E: 60 RTS