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 C30
< Final Fantasy VI | ROM map
Jump to navigation
Jump to search
This is a sub-page of Final Fantasy VI/ROM map.
C3/0000 jump table
C3/0000: 4C1B00 JMP $001B (open main menu; from C0/C6F9, EE/03EB) C3/0003: 4C45A4 JMP $A445 C3/0006: 4C24A4 JMP $A424 (timer resetting for input decoding; from C0/0053) C3/0009: 4C7AA4 JMP $A47A (decode joypad status register 1; from C0/056D, EE/0139, EE/03A6, EE/04FF) C3/000C: 4CC813 JMP $13C8 (adjust in-game time; from C0/024F, EE/A51E, EE/A73D, EE/A966) C3/000F: 4CFE14 JMP $14FE (from C0/C4F0) C3/0012: 4C1CC5 JMP $C51C (event command BA; from C0/BA3C) C3/0015: 4CD296 JMP $96D2 (empties and fully equips a character; from C0/C6BC) C3/0018: 4C7FD5 JMP $D57F (from EE/8ED8)
C3/001B: C210 REP #$10 (16 bit index registers) C3/001D: E220 SEP #$20 (8 bit memory/accum.) C3/001F: A900 LDA #$00 C3/0021: 48 PHA C3/0022: AB PLB (make the data bank reg. hold #$00) C3/0023: A20000 LDX #$0000 C3/0026: DA PHX C3/0027: 2B PLD (make the direct page reg. hold #$0000) C3/0028: A20000 LDX #$0000 (X still holds this) C3/002B: 8600 STX $00 ($00 should already hold this) C3/002D: A97E LDA #$7E C3/002F: 8D8321 STA $2183 C3/0032: 20C000 JSR $00C0 C3/0035: AD0002 LDA $0200 C3/0038: C902 CMP #$02 C3/003A: D003 BNE $003F C3/003C: 209B70 JSR $709B (set defaults for a new game) C3/003F: 20F800 JSR $00F8 C3/0042: 20DD00 JSR $00DD (based on $0200's value, jump to different spots in the menu) C3/0045: 2224A4C3 JSL $C3A424 (timer resetting for input decoding) C3/0049: A98F LDA #$8F C3/004B: 8D0021 STA $2100 C3/004E: 9C0042 STZ $4200 (turn off NMI, auto joypad read, etc) C3/0051: 9C0B42 STZ $420B (turn off DMA) C3/0054: 9C0C42 STZ $420C (turn off HDMA) C3/0057: AD0002 LDA $0200 C3/005A: C902 CMP #$02 C3/005C: D011 BNE $006F C3/005E: AD0502 LDA $0205 C3/0061: 100C BPL $006F C3/0063: AD4E1D LDA $1D4E C3/0066: 2920 AND #$20 C3/0068: F005 BEQ $006F (Branch if stereo set) C3/006A: A9FF LDA #$FF C3/006C: 203F3E JSR $3E3F C3/006F: AD0002 LDA $0200 C3/0072: D04B BNE $00BF C3/0074: AD0502 LDA $0205 C3/0077: 1046 BPL $00BF (branch if we are exiting out of the main menu?) C3/0079: C9FE CMP #$FE C3/007B: D021 BNE $009E C3/007D: A901 LDA #$01 C3/007F: 8D0002 STA $0200 C3/0082: AD0102 LDA $0201 C3/0085: 8D0F02 STA $020F C3/0088: AC0602 LDY $0206 C3/008B: 8C0102 STY $0201 C3/008E: 220000C3 JSL $C30000 this makes it a recursive call C3/0092: AD0F02 LDA $020F C3/0095: 8D0102 STA $0201 C3/0098: 9C0002 STZ $0200 C3/009B: 4C1B00 JMP $001B
C3/009E unknow
C3/009E: A906 LDA #$06 C3/00A0: 8D0002 STA $0200 (BRA $007F...) C3/00A3: AD0102 LDA $0201 C3/00A6: 8D0F02 STA $020F C3/00A9: AD0602 LDA $0206 C3/00AC: 8D0102 STA $0201 C3/00AF: 220000C3 JSL $C30000 C3/00B3: AD0F02 LDA $020F C3/00B6: 8D0102 STA $0201 C3/00B9: 9C0002 STZ $0200 C3/00BC: 4C1B00 JMP $001B C3/00BF: 6B RTL
C3/00C0 unknow
C3/00C0: A95C LDA #$5C C3/00C2: 8D0015 STA $1500 C3/00C5: 8D0415 STA $1504 (set instruction to JML) C3/00C8: A28713 LDX #$1387 C3/00CB: 8E0115 STX $1501 (set NMI to C3/1387) C3/00CE: A2C713 LDX #$13C7 C3/00D1: 8E0515 STX $1505 (set IRQ to C3/13C7) C3/00D4: A9C3 LDA #$C3 C3/00D6: 8D0315 STA $1503 C3/00D9: 8D0715 STA $1507 C3/00DC: 60 RTS
C3/00E6 unknow
C3/00DD: 7B TDC C3/00DE: AD0002 LDA $0200 C3/00E1: 0A ASL A C3/00E2: AA TAX C3/00E3: 7CE600 JMP ($00E6,X)
C3/00E6: 1A01 (pressed X/menu, initiate the menu) C3/00E8: B301 (used a Rename Card, or event command $98) C3/00EA: 6F01 (calling the loading screen) C3/00EC: 2101 (invoke a shop) C3/00EE: 2B01 (party selection screen with number of groups) C3/00F0: 3D01 C3/00F2: 4901 C3/00F4: 5201 (colliseum item selection) C3/00F6: 6601 (party select screen for final battle sequence)
C3/00F8 unknow
C3/00F8: 20FA68 JSR $68FA C3/00FB: 201569 JSR $6915 C3/00FE: 20A969 JSR $69A9 C3/0101: 2248CDD4 JSL $D4CD48 C3/0105: 2224A4C3 JSL $C3A424 (timer resetting for input decoding) C3/0109: 7B TDC C3/010A: 221DCAD4 JSL $D4CA1D (do gradient 0 for the screen) C3/010E: 20DC69 JSR $69DC C3/0111: 201411 JSR $1114 (erase all onscreen sprites) C3/0114: 20876A JSR $6A87 (load font and menu graphics) C3/0117: 4C873A JMP $3A87
$0200 is #$00, initiate the main menu C3/011A: A904 LDA #$04 C3/011C: 8526 STA $26 (execute at C3/1A8A) C3/011E: 4CBA01 JMP $01BA (could use BRL instead)
C3/0121 invoke shop
$0200 is #$03, invoke a shop C3/0121: 20993F JSR $3F99 C3/0124: A924 LDA #$24 C3/0126: 8526 STA $26 (execute at C3/B466) C3/0128: 4CBA01 JMP $01BA (could use BRL instead)
C3/012B invoke party selection
$0200 is #$04, invoke party selection screen with number of groups C3/012B: 20993F JSR $3F99 C3/012E: 203801 JSR $0138 C3/0131: A92C LDA #$2C C3/0133: 8526 STA $26 (execute at C3/70E7) C3/0135: 4CBA01 JMP $01BA (could use BRL instead) C3/0138: 7B TDC C3/0139: A8 TAY C3/013A: 848E STY $8E C3/013C: 60 RTS
C3/013D unknow
$0200 is #$05 C3/013D: 20993F JSR $3F99 C3/0140: 203801 JSR $0138 C3/0143: A92F LDA #$2F C3/0145: 8526 STA $26 (execute at C3/7AE5) C3/0147: 8071 BRA $01BA
C3/0149 unknow
$0200 is #$06 C3/0149: 20993F JSR $3F99 C3/014C: A93F LDA #$3F C3/014E: 8526 STA $26 (execute at C3/B437) C3/0150: 8068 BRA $01BA
C3/0152 invoke Colosseum
$0200 is #$07, invoke colliseum item selection screen C3/0152: 20993F JSR $3F99 C3/0155: 6479 STZ $79 C3/0157: 647A STZ $7A C3/0159: 647B STZ $7B C3/015B: A9FF LDA #$FF C3/015D: 8D0502 STA $0205 (set item bet to nothing) C3/0160: A971 LDA #$71 C3/0162: 8526 STA $26 (execute at C3/ACAA) C3/0164: 8054 BRA $01BA
C3/0166 invoke party selection for final battle
$0200 is #$08, invoke party select screen for the final battle C3/0166: 20993F JSR $3F99 C3/0169: A973 LDA #$73 C3/016B: 8526 STA $26 (execute at C3/A9F8, init final battle setup screen) C3/016D: 804B BRA $01BA
C3/016F unknow
$0200 is #$02, used when the loading screen is called C3/016F: AFF17F30 LDA $307FF1 C3/0173: 1A INC A C3/0174: 8FF17F30 STA $307FF1 C3/0178: 2224A4C3 JSL $C3A424 (timer resetting for input decoding) C3/017C: 202370 JSR $7023 (make sure SRAM markers are intact) C3/017F: 901E BCC $019F (branch if not, which forces a new game) C3/0181: A901 LDA #$01 C3/0183: 8D0113 STA $1301 (set song as the Prelude) C3/0186: A910 LDA #$10 C3/0188: 8D0013 STA $1300 C3/018B: A980 LDA #$80 C3/018D: 8D0213 STA $1302 (normal volume) C3/0190: 220400C5 JSL $C50004 (play the Prelude) C3/0194: A9FF LDA #$FF C3/0196: 8D0502 STA $0205 C3/0199: A920 LDA #$20 C3/019B: 8526 STA $26 (execute at C3/1D03) C3/019D: 801B BRA $01BA C3/019F: 20212A JSR $2A21 C3/01A2: A901 LDA #$01 C3/01A4: 8D2402 STA $0224 C3/01A7: 9C1F02 STZ $021F C3/01AA: A9FF LDA #$FF C3/01AC: 8526 STA $26 (exit the menu) C3/01AE: 9C0502 STZ $0205 C3/01B1: 8007 BRA $01BA
C3/01B3 rename card code
$0200 is #$01, used a Rename Card or event command $98 C3/01B3: 20993F JSR $3F99 C3/01B6: A95D LDA #$5D C3/01B8: 8526 STA $26 (execute at C3/652D)
The menu loop code. Execute code based on the value of $26 C3/01BA: 201214 JSR $1412 (from C3/011E, C3/0128, C3/0135) C3/01BD: 7B TDC C3/01BE: A526 LDA $26 C3/01C0: C9FF CMP #$FF C3/01C2: F014 BEQ $01D8 C3/01C4: C220 REP #$20 (16 bit memory/accum.) C3/01C6: 0A ASL A C3/01C7: AA TAX C3/01C8: E220 SEP #$20 (8 bit memory/accum.) C3/01CA: FCDB01 JSR ($01DB,X) C3/01CD: 20B011 JSR $11B0 (execute everything in the OAM queue) C3/01D0: 204D13 JSR $134D C3/01D3: 20DB02 JSR $02DB (determine if we should exit the menu) C3/01D6: 80E5 BRA $01BD C3/01D8: 6443 STZ $43 (eventually disable all 8 channels of HDMA) C3/01DA: 60 RTS
$26's jump table. The entire backbone of the menu system is here. C3/01DB: 711D (#$00, fade out) C3/01DD: 7E1D (#$01, most, if not all screens call this as a transition to the next screen) C3/01DF: 8B1D (#$02, both #$00 and #$01 call this to finish transition, then $27 is transfered to $26) C3/01E1: 941D (#$03, ) C3/01E3: 8A1A (#$04, initiate the main menu) C3/01E5: A41D (#$05, sustain the main menu) C3/01E7: E81D (#$06, selecting one character in the main menu) C3/01E9: D61A (#$07, inititate the item menu) C3/01EB: F71E (#$08, sustain the item menu) C3/01ED: 5B1B (#$09, initiate the skills menu) C3/01EF: F41F (#$0A, sustain the skills menu) C3/01F1: 461C (#$0B, initiate the status screen) C3/01F3: F521 (#$0C, sustain the status screen) C3/01F5: 7D1C (#$0D, initiate the config screen) C3/01F7: C522 (#$0E, sustain the config screen) C3/01F9: 0C24 (#$0F, browsing the order menu) C3/01FB: 5324 (#$10, a character is selected in the order menu) C3/01FD: A924 (#$11, switching characters in the order menu) C3/01FF: 3725 (#$12, changing a character's row) C3/0201: A01C (#$13, initiate the save screen) C3/0203: 4025 (#$14, sustain the save screen) C3/0205: E31C (#$15, inititate the "Erasing data. Okay?" menu) C3/0207: 9D25 (#$16, sustain the "Erasing data. Okay?" menu) C3/0209: F425 (#$17, "USE ARRANGE RARE") C3/020B: 4127 (#$18, the rare item menu) C3/020D: 7927 (#$19, an item is selected in the item menu) C3/020F: E227 (#$1A, handle the preloading for Magic descriptions) C3/0211: 8A28 (#$1B, handle the preloading for Lore descriptions) C3/0213: AA28 (#$1C, the Dance menu) C3/0215: BA28 (#$1D, the Rage menu) C3/0217: D328 (#$1E, the Espers menu) C3/0219: 9D25 (#$1F, ) C3/021B: 031D (#$20, initiate the SRAM load screen) C3/021D: C229 (#$21, sustain the SRAM load screen) C3/021F: 511D (#$22, initiate the "This data?" screen) C3/0221: 2A2A (#$23, sustain the "This data?" screen) C3/0223: 66B4 (#$24, initiate the shop menu) C3/0225: 9BB4 (#$25, sustain the shop menu) C3/0227: BDB4 (#$26, the buy menu) C3/0229: 05B5 (#$27, deciding how many items to buy) C3/022B: 0EB6 (#$28, bought an item, or can't buy any more) C3/022D: 16B6 (#$29, the sell menu) C3/022F: 76B6 (#$2A, deciding how many items to sell) C3/0231: 52B7 (#$2B, sold an item) C3/0233: E770 (#$2C, initiate the party selection screen) C3/0235: 6871 (#$2D, sustain the party selection screen) C3/0237: 0C72 (#$2E, selecting a character in the party selection screen) C3/0239: E57A (#$2F, ) C3/023B: 257B (#$30, ) C3/023D: 257B (#$31, ) C3/023F: 257B (#$32, ) C3/0241: 7729 (#$33, handle the preloading for Blitz descriptions) C3/0243: 3A29 (#$34, ??? selected an Esper that is equipped by someone else) C3/0245: B81B (#$35, initiate the equip menu) C3/0247: 2196 (#$36, sustain the equip menu) C3/0249: B51E (#$37, selecting all characters in the main menu) C3/024B: 321C (#$38, initiate the screen that displays the equipment of all members) C3/024D: 6629 (#$39, sustain the screen that displays the equipment of all members) C3/024F: 652A (#$3A, initiate the screen where you decide whom to use a spell on) C3/0251: AE2A (#$3B, sustain the screen where you decide whom to use a spell on) C3/0253: 1C2D (#$3C, returning to the magic list) C3/0255: 782D (#$3D, selecting all characters with a spell) C3/0257: 8E29 (#$3E, handle the preloading for SwdTech descriptions) C3/0259: 37B4 (#$3F, initiate the SwdTech naming screen (unused in SNES version)) C3/025B: 37B4 (#$40, sustain the SwdTech naming screen (unused in SNES version)) C3/025D: 37B4 (#$41, browsing the list of characters for the SwdTech naming screen (unused in SNES version)) C3/025F: 1D63 (#$42, initiate the status screen for the party selection screen) C3/0261: 3F63 (#$43, sustain the status screen for the party selection screen) C3/0263: 1C7D (#$44, ) C3/0265: 1C7D (#$45, ) C3/0267: 1C7D (#$46, ) C3/0269: C242 (#$47, initiate the Arrange screen) C3/026B: DF42 (#$48, sustain the Arrange screen) C3/026D: AD46 (#$49, initiate the button menu (unused in SNES version)) C3/026F: AD46 (#$4A, sustain the button menu (unused in SNES version)) C3/0271: AD46 (#$4B, initiate the Controller menu) C3/0273: CA46 (#$4C, sustain the Controller menu) C3/0275: CE58 (#$4D, viewing an Esper's specifics) C3/0277: 37B4 (#$4E, move to the second window of the SwdTech naming screen (unused in SNES version)) C3/0279: 37B4 (#$4F, move to the first window of the SwdTech naming screen (unused in SNES version)) C3/027B: 003A (#$50, move to the second window of the config menu) C3/027D: 213A (#$51, move to the first window of the config menu) C3/027F: 0A1A (#$52, ) C3/0281: FB19 (#$53, ) C3/0283: 191A (#$54, ??? exiting the save menu) C3/0285: 8498 (#$55, selecting a body slot to fill) C3/0287: CF98 (#$56, selecting a body slot to empty) C3/0289: 0F99 (#$57, selecting an item to put in body slot) C3/028B: 4B9E (#$58, initiate the relic menu) C3/028D: B89E (#$59, "EQUIP REMOVE" in the relic menu) C3/028F: FD9F (#$5A, selecting a relic slot to fill) C3/0291: 97A0 (#$5B, selecting an item to put in relic slot) C3/0293: 0AA1 (#$5C, selecting a relic slot to empty) C3/0295: 2D65 (#$5D, initiate the character naming screen) C3/0297: E689 (#$5E, viewing an item's statistics) C3/0299: 6C65 (#$5F, sustain the character naming screen) C3/029B: E865 (#$60, move to the second window of the character naming screen (unused in SNES version)) C3/029D: E865 (#$61, move to the first window of the character naming screen down (unused in SNES version)) C3/029F: 3843 (#$62, browsing the "Arrange" screen) C3/02A1: 7643 (#$63, selecting a command in the "Arrange" screen) C3/02A3: 8389 (#$64, viewing an item's specifics) C3/02A5: E736 (#$65, shift the screen) C3/02A7: FF79 (#$66, ) C3/02A9: F079 (#$67, ) C3/02AB: 0E7A (#$68, ??? related to party selection screen) C3/02AD: 877A (#$69, ??? cannot exit party selection screen) C3/02AF: A763 (#$6A, browsing the command list in Gogo's status screen) C3/02B1: B422 (#$6B, ) C3/02B3: B19F (#$6C, notifications that modifications to relics have affected equipment) C3/02B5: 1A1C (#$6D, automatically opening equip menu after changing relics) C3/02B7: 261C (#$6E, removing all equipment, called only when relics alter equipment) C3/02B9: 848A (#$6F, initiate the menu where you decide whom to use an item on) C3/02BB: 968A (#$70, sustain the menu where you decide whom to use an item on) C3/02BD: AAAC (#$71, initiate the main colosseum menu) C3/02BF: DCAC (#$72, sustain the main colosseum menu) C3/02C1: F8A9 (#$73, initiate screen for determining party order for final battle) C3/02C3: 25AA (#$74, sustain screen for determining party order for final battle) C3/02C5: B7AD (#$75, initiate the colosseum matchup screen) C3/02C7: 0FAE (#$76, sustain the colosseum matchup screen) C3/02C9: 351B (#$77, returning to the item list) C3/02CB: 8AAD (#$78, jumps to data, dummy?) C3/02CC: 7D9E (#$79, switching characters while selecting a relic slot to fill) C3/02CF: 8B9E (#$7A, switching characters while selecting a relic slot to empty) C3/02D1: 0000 (#$7B, a dummied entry) C3/02D3: 0000 (#$7C, a dummied entry) C3/02D5: 3171 (#$7D, returning to party selection screen from status screen) C3/02D7: E51B (#$7E, switching characters in the equip menu while selecting a body slot to fill) C3/02D9: F31B (#$7F, switching characters in the equip menu while selecting a body slot to empty)
C3/02DB unknow
C3/02DB: A5B4 LDA $B4 C3/02DD: D019 BNE $02F8 C3/02DF: AD8811 LDA $1188 C3/02E2: 8920 BIT #$20 C3/02E4: F012 BEQ $02F8 C3/02E6: AC8911 LDY $1189 C3/02E9: D00D BNE $02F8 C3/02EB: A9FF LDA #$FF C3/02ED: 8527 STA $27 (exit the menu) C3/02EF: 6426 STZ $26 (fade out, transition to above) C3/02F1: A905 LDA #$05 C3/02F3: 8D0502 STA $0205 C3/02F6: 85B4 STA $B4 C3/02F8: 60 RTS
C3/7FD9 main text drawing
Coming in: 16 bit Y holds location in rom C3/7FD9 calls this after writes to $2180, but jumps to C3/02FF because of bad planning C3/02F9: 84E7 STY $E7 C3/02FB: A9C3 LDA #$C3 C3/02FD: 85E9 STA $E9 (C3/xxxx holds the string) C3/02FF: A600 LDX $00 C3/0301: 9B TXY C3/0302: C220 REP #$20 (16 bit memory/accum.) C3/0304: A7E7 LDA [$E7] (get the position, determine which BG layer it will go on) C3/0306: 85EB STA $EB (save it) C3/0308: E6E7 INC $E7 C3/030A: E6E7 INC $E7 (increment twice, now get the string) C3/030C: E220 SEP #$20 (8 bit memory/accum.) C3/030E: A97E LDA #$7E C3/0310: 85ED STA $ED C3/0312: B7E7 LDA [$E7],Y (load letter) C3/0314: F00F BEQ $0325 (branch if null terminator) C3/0316: 5A PHY (save our current position) C3/0317: 9B TXY (get position for tilemap) C3/0318: 97EB STA [$EB],Y (save it there) C3/031A: E8 INX C3/031B: 9B TXY (INY?) C3/031C: A529 LDA $29 (load text color) C3/031E: 97EB STA [$EB],Y (save it) C3/0320: E8 INX (increment tilemap position again) C3/0321: 7A PLY (get our current string position) C3/0322: C8 INY (...and add 1) C3/0323: 80ED BRA $0312 (loop and keep grabbing letters) C3/0325: 60 RTS
C3/0326 unknow
((Deleted function C3/0326 from FF6j goes here)) C3/0326: 84E7 STY $E7 (from C3/171A, C3/3A9E, C3/3ABA, C3/3AD6, C3/3AF2) C3/0328: A600 LDX $00 C3/032A: C220 REP #$20 (16 bit memory/accum.) C3/032C: BF4E04C3 LDA $C3044E,X C3/0330: 18 CLC C3/0331: 65E7 ADC $E7 C3/0333: 9F199F7E STA $7E9F19,X C3/0337: E8 INX C3/0338: E8 INX C3/0339: E03800 CPX #$0038 C3/033C: D0EE BNE $032C C3/033E: E220 SEP #$20 (8 bit memory/accum.) C3/0340: 60 RTS
C3/0341 draw a window
Draw a window, 4 sides. 16-bit Y holds the location in C3 of where the window data is. The first two bytes are the starting location onscreen of where to draw the window. The third byte is the width, and the fourth byte is the height. C3/0341: A9C3 LDA #$C3 (from many places, all in C3) C3/0343: 85E9 STA $E9 C3/0345: 84E7 STY $E7 (window data is at C3/xxxx) C3/0347: A600 LDX $00 C3/0349: 9B TXY C3/034A: C220 REP #$20 (16 bit memory/accum.) C3/034C: B7E7 LDA [$E7],Y (get position for tilemap) C3/034E: 85EB STA $EB (save it) C3/0350: C8 INY C3/0351: C8 INY C3/0352: B7E7 LDA [$E7],Y (get horizontal and vertical sizes) C3/0354: 85E0 STA $E0 (save vertical size) C3/0356: E220 SEP #$20 (8 bit memory/accum.) C3/0358: 85E2 STA $E2 (save horizontal size) C3/035A: A97E LDA #$7E C3/035C: 85ED STA $ED C3/035E: A600 LDX $00 (clear X) C3/0360: 9B TXY (and clear Y) C3/0361: E210 SEP #$10 (8 bit index registers) C3/0363: A6E0 LDX $E0 (get vertical size) C3/0365: A4E1 LDY $E1 (this should be holding the horizontal size) C3/0367: C210 REP #$10 (16 bit index registers) C3/0369: 86EF STX $EF C3/036B: 84F1 STY $F1 C3/036D: C220 REP #$20 (16 bit memory/accum.) C3/036F: 207503 JSR $0375 C3/0372: E220 SEP #$20 (8 bit memory/accum.) C3/0374: 60 RTS
C3/0375 unknow
C3/0375: 20A303 JSR $03A3 C3/0378: A600 LDX $00 C3/037A: A04000 LDY #$0040 C3/037D: 84F3 STY $F3 C3/037F: DA PHX C3/0380: 8A TXA C3/0381: 290300 AND #$0003 C3/0384: 0A ASL A C3/0385: AA TAX C3/0386: FC9B03 JSR ($039B,X) C3/0389: A5F3 LDA $F3 C3/038B: 18 CLC C3/038C: 694000 ADC #$0040 C3/038E: 85F3 STA $F3 C3/0390: A8 TAY C3/0392: FA PLX C3/0393: E8 INX C3/0394: E4F1 CPX $F1 C3/0396: D0E7 BNE $037F C3/0398: 4CBB03 JMP $03BB
C3/039B pointers
C3/039B: D103 C3/039D: DB03 C3/039F: E803 C3/03A1: F503
C3/03A3 unknow
C3/03A3: A400 LDY $00 C3/03A5: 200804 JSR $0408 C3/03A8: AF499F7E LDA $7E9F49 C3/03AC: 85E3 STA $E3 C3/03AE: AF4B9F7E LDA $7E9F4B C3/03B2: 85E5 STA $E5 C3/03B4: A22000 LDX #$0020 C3/03B7: 86E0 STX $E0 C3/03B9: 806D BRA $0428
C3/03BB unknow
C3/03BB: 200804 JSR $0408 C3/03BE: AF4D9F7E LDA $7E9F4D C3/03C2: 85E3 STA $E3 C3/03C4: AF4F9F7E LDA $7E9F4F C3/03C8: 85E5 STA $E5 C3/03CA: A22400 LDX #$0024 C3/03CD: 86E0 STX $E0 C3/03CF: 8057 BRA $0428
C3/03D1 unknow
C3/03D1: 200204 JSR $0402 (from C3/039B) C3/03D4: 200E04 JSR $040E C3/03D7: 64E0 STZ $E0 C3/03D9: 804D BRA $0428
C3/03DB unknow
C3/03DB: 200204 JSR $0402 (from C3/039D) C3/03DE: 201B04 JSR $041B C3/03E1: A20800 LDX #$0008 C3/03E4: 86E0 STX $E0 C3/03E6: 8040 BRA $0428
C3/03E8 unknow
C3/03E8: 200204 JSR $0402 (from C3/039F) C3/03EB: 200E04 JSR $040E C3/03EE: A21000 LDX #$0010 C3/03F1: 86E0 STX $E0 C3/03F3: 8033 BRA $0428
C3/03F5 unknow
C3/03F5: 200204 JSR $0402 (from C3/03A1) C3/03F8: 201B04 JSR $041B C3/03FB: A21800 LDX #$0018 C3/03FE: 86E0 STX $E0 C3/0400: 8026 BRA $0428
C3/0402 unknow
C3/0402: A20300 LDX #$0003 C3/0405: 86F5 STX $F5 C3/0407: 60 RTS
C3/0408 unknow
C3/0408: A20100 LDX #$0001 (from C3/03A5, C3/03BB) C3/040B: 86F5 STX $F5 C3/040D: 60 RTS
C3/040E unknow
C3/040E: AF419F7E LDA $7E9F41 (from C3/03D4, C3/03EB) C3/0412: 85E3 STA $E3 C3/0414: AF439F7E LDA $7E9F43 C3/0418: 85E5 STA $E5 C3/041A: 60 RTS
C3/041B unknow
C3/041B: AF459F7E LDA $7E9F45 (from C3/03DE, C3/03F8) C3/041F: 85E3 STA $E3 C3/0421: AF479F7E LDA $7E9F47 C3/0425: 85E5 STA $E5 C3/0427: 60 RTS
C3/0428 unknow
C3/0428: A600 LDX $00 (from C3/03B9, C3/03CF, C3/03D9, C3/03E6, C3/03F3, C3/0400) C3/042A: A5E3 LDA $E3 C3/042C: 97EB STA [$EB],Y C3/042E: C8 INY C3/042F: C8 INY C3/0430: DA PHX C3/0431: 8A TXA C3/0432: 25F5 AND $F5 C3/0434: 0A ASL A C3/0435: 18 CLC C3/0436: 65E0 ADC $E0 C3/0438: AA TAX C3/0439: BF199F7E LDA $7E9F19,X C3/043D: FA PLX C3/043E: E4EF CPX $EF C3/0440: F007 BEQ $0449 C3/0442: 97EB STA [$EB],Y C3/0444: C8 INY C3/0445: C8 INY C3/0446: E8 INX C3/0447: 80E7 BRA $0430 C3/0449: A5E5 LDA $E5 C3/044B: 97EB STA [$EB],Y C3/044D: 60 RTS
C3/044E data
C3/044E: 8001 C3/0450: 8101 C3/0452: 8201 C3/0454: 8301 C3/0456: 8401 C3/0458: 8501 C3/045A: 8601 C3/045C: 8701 C3/045E: 8801 C3/0460: 8901 C3/0462: 8A01 C3/0464: 8B01 C3/0466: 8C01 C3/0468: 8D01 C3/046A: 8E01 C3/046C: 8F01 C3/046E: 9101 C3/0470: 9201 C3/0472: 9901 C3/0474: 9A01 C3/0476: 9401 C3/0478: 9501 C3/047A: 9601 C3/047C: 9701 C3/047E: 9001 C3/0480: 9301 C3/0482: 9801 C3/0484: 9B01
C3/0486 buffer-clipping functions
Following are several buffer-clipping functions. I believe they basically print from the first position to the second one. C3/0486: A00500 LDY #$0005 (maximum of 5 digits) C3/0489: 84E0 STY $E0 C3/048B: A00200 LDY #$0002 (5 - 2 = 3 digits to display) C3/048E: 8037 BRA $04C7 C3/0490: A00500 LDY #$0005 (maximum of 5 digits) C3/0493: 84E0 STY $E0 C3/0495: A00100 LDY #$0001 (5 - 1 = 4 digits to display) C3/0498: 802D BRA $04C7 C3/049A: A00500 LDY #$0005 (maximum of 5 digits) C3/049D: 84E0 STY $E0 C3/049F: A400 LDY $00 (5 - 0 = 5 digits to display) C3/04A1: 8024 BRA $04C7 C3/04A3: A00800 LDY #$0008 (maximum of 8 digits) C3/04A6: 84E0 STY $E0 C3/04A8: A400 LDY $00 (8 - 0 = 8 digits to display) C3/04AA: 801B BRA $04C7 C3/04AC: A00800 LDY #$0008 (maximum of 8 digits) C3/04AF: 84E0 STY $E0 C3/04B1: A00100 LDY #$0001 (8 - 1 = 7 digits to display) C3/04B4: 8011 BRA $04C7 C3/04B6: A00300 LDY #$0003 (maximum of 3 digits) C3/04B9: 84E0 STY $E0 C3/04BB: A00100 LDY #$0001 (3 - 1 = 2 digits to display) C3/04BE: 8007 BRA $04C7 C3/04C0: A00300 LDY #$0003 (maximum of 3 digits) C3/04C3: 84E0 STY $E0 C3/04C5: A400 LDY $00 (3 - 0 = 3 digits to display, but why a variation of C3/0486?) C3/04C7: 86EB STX $EB C3/04C9: A97E LDA #$7E C3/04CB: 85ED STA $ED C3/04CD: BB TYX C3/04CE: A400 LDY $00 C3/04D0: B5F7 LDA $F7,X C3/04D2: 97EB STA [$EB],Y C3/04D4: C8 INY C3/04D5: A529 LDA $29 (get text color) C3/04D7: 97EB STA [$EB],Y C3/04D9: C8 INY C3/04DA: E8 INX C3/04DB: E4E0 CPX $E0 C3/04DD: D0F1 BNE $04D0 C3/04DF: 60 RTS
C3/04E0 unknow
This calls the function below here, then any leading zeros are converted to spaces. A zero in the third position (ones place) is not converted. C3/04E0: 20F904 JSR $04F9 C3/04E3: A400 LDY $00 C3/04E5: A20200 LDX #$0002 C3/04E8: B9F700 LDA $00F7,Y C3/04EB: C9B4 CMP #$B4 C3/04ED: D009 BNE $04F8 C3/04EF: A9FF LDA #$FF C3/04F1: 99F700 STA $00F7,Y C3/04F4: C8 INY C3/04F5: CA DEX C3/04F6: D0F0 BNE $04E8 C3/04F8: 60 RTS
C3/04F9 convert number for display: 3 digits
Takes a number from A (which is put into $E0 internally) and converts it into a number up to 3 digits in decimal text. The digits are stored to $F7, $F8, and $F9. C3/04F9: 85E0 STA $E0 C3/04FB: A903 LDA #$03 C3/04FD: 85E4 STA $E4 C3/04FF: A400 LDY $00 C3/0501: BB TYX C3/0502: 64E1 STZ $E1 C3/0504: BF2B05C3 LDA $C3052B,X C3/0508: E8 INX C3/0509: 85E3 STA $E3 C3/050B: A5E0 LDA $E0 C3/050D: 38 SEC C3/050E: E5E3 SBC $E3 C3/0510: 9006 BCC $0518 C3/0512: 85E0 STA $E0 C3/0514: E6E1 INC $E1 C3/0516: 80F3 BRA $050B C3/0518: 18 CLC C3/0519: 65ED ADC $ED C3/051B: 85F3 STA $F3 C3/051D: A5E1 LDA $E1 C3/051F: 18 CLC C3/0520: 69B4 ADC #$B4 C3/0522: 99F700 STA $00F7,Y C3/0525: C8 INY C3/0526: C6E4 DEC $E4 C3/0528: D0D8 BNE $0502 C3/052A: 60 RTS
C3/052B unknow
Data (for decimal place-values) C3/052B: 64 (100) C3/052C: 0A (10) C3/052D: 01 (1)
C3/052E convert number for display: 5 digits
Takes a number from $F3 and $F4 (or 16-bit $F3 if you prefer to say that) and converts it to a number up to 5 digits in decimal text. Unlike the above, it automatically changes leading zeros to spaces. This is stored to a buffer from $F7 to $FB. C3/052E: A905 LDA #$05 C3/0530: 85E0 STA $E0 C3/0532: A400 LDY $00 C3/0534: BB TYX C3/0535: C220 REP #$20 (16 bit memory/accum.) C3/0537: BF7805C3 LDA $C30578,X C3/053B: E8 INX C3/053C: E8 INX C3/053D: 85ED STA $ED C3/053F: 64EB STZ $EB C3/0541: 38 SEC C3/0542: A5F3 LDA $F3 C3/0544: E5ED SBC $ED C3/0546: 9006 BCC $054E C3/0548: 85F3 STA $F3 C3/054A: E6EB INC $EB C3/054C: 80F3 BRA $0541 C3/054E: 18 CLC C3/054F: 65ED ADC $ED C3/0551: 85F3 STA $F3 C3/0553: E220 SEP #$20 (8 bit memory/accum.) C3/0555: A5EB LDA $EB C3/0557: 18 CLC C3/0558: 69B4 ADC #$B4 C3/055A: 99F700 STA $00F7,Y C3/055D: C8 INY C3/055E: C6E0 DEC $E0 C3/0560: D0D3 BNE $0535 C3/0562: A400 LDY $00 C3/0564: A20400 LDX #$0004 (Only check the first 4 digits for 0) C3/0567: B9F700 LDA $00F7,Y C3/056A: C9B4 CMP #$B4 (That's text for "0") C3/056C: D009 BNE $0577 C3/056E: A9FF LDA #$FF (Change to a space) C3/0570: 99F700 STA $00F7,Y C3/0573: C8 INY C3/0574: CA DEX C3/0575: D0F0 BNE $0567 C3/0577: 60 RTS
C3/0578 data
C3/0578: 1027 (10000) C3/057A: E803 (1000) C3/057C: 6400 (100) C3/057E: 0A00 (10) C3/0580: 0100 (1)
C3/0582 unknow
C3/0582: 64F4 STZ $F4 C3/0584: A908 LDA #$08 C3/0586: 85E0 STA $E0 C3/0588: A400 LDY $00 C3/058A: BB TYX C3/058B: C220 REP #$20 (16 bit memory/accum.) C3/058D: 64EB STZ $EB C3/058F: 38 SEC C3/0590: A5F1 LDA $F1 C3/0592: FFDE05C3 SBC $C305DE,X C3/0596: 85F1 STA $F1 C3/0598: A5F3 LDA $F3 C3/059A: FFEE05C3 SBC $C305EE,X C3/059E: 85F3 STA $F3 C3/05A0: 9004 BCC $05A6 C3/05A2: E6EB INC $EB C3/05A4: 80E9 BRA $058F C3/05A6: A5F1 LDA $F1 C3/05A8: 18 CLC C3/05A9: 7FDE05C3 ADC $C305DE,X C3/05AD: 85F1 STA $F1 C3/05AF: A5F3 LDA $F3 C3/05B1: 7FEE05C3 ADC $C305EE,X C3/05B5: 85F3 STA $F3 C3/05B7: E220 SEP #$20 (8 bit memory/accum.) C3/05B9: A5EB LDA $EB C3/05BB: 18 CLC C3/05BC: 69B4 ADC #$B4 C3/05BE: 99F700 STA $00F7,Y C3/05C1: C8 INY C3/05C2: E8 INX C3/05C3: E8 INX C3/05C4: C6E0 DEC $E0 C3/05C6: D0C3 BNE $058B C3/05C8: A400 LDY $00 C3/05CA: A20700 LDX #$0007 C3/05CD: B9F700 LDA $00F7,Y C3/05D0: C9B4 CMP #$B4 C3/05D2: D009 BNE $05DD C3/05D4: A9FF LDA #$FF C3/05D6: 99F700 STA $00F7,Y C3/05D9: C8 INY C3/05DA: CA DEX C3/05DB: D0F0 BNE $05CD C3/05DD: 60 RTS
C3/05DE data
In case this wasn't obvious from the others, here ya go: C3/05DE: 8096 (10000000) C3/05E0: 4042 (1000000) C3/05E2: A086 (100000) C3/05E4: 1027 (10000) C3/05E6: E803 (1000) C3/05E8: 6400 (100) C3/05EA: 0A00 (10) C3/05EC: 0100 (1) C3/05EE: 9800 C3/05F1: 0F00 C3/05F3: 0100 C3/05F5: 0000 C3/05F7: 0000 C3/05F9: 0000 C3/05FA: 0000 C3/05FC: 0000
C3/05FE hotspot loading function
C3/05FE: A9C3 LDA #$C3 C3/0600: 85ED STA $ED C3/0602: 84EB STY $EB C3/0604: A400 LDY $00 C3/0606: B7EB LDA [$EB],Y C3/0608: 8559 STA $59 C3/060A: C8 INY C3/060B: C220 REP #$20 (16 bit memory/accum.) C3/060D: 6451 STZ $51 C3/060F: B7EB LDA [$EB],Y C3/0611: 854D STA $4D C3/0613: C8 INY C3/0614: C8 INY C3/0615: B7EB LDA [$EB],Y C3/0617: 8553 STA $53 C3/0619: 644F STZ $4F C3/061B: E220 SEP #$20 (8 bit memory/accum.) C3/061D: 60 RTS
C3/061E unknow
C3/061E: 7B TDC (set A to 0) C3/061F: A8 TAY (set Y to 0) C3/0620: 98 TYA C3/0621: 0A ASL A C3/0622: AA TAX C3/0623: B585 LDA $85,X C3/0625: D008 BNE $062F C3/0627: E64E INC $4E C3/0629: C8 INY C3/062A: C00400 CPY #$0004 C3/062D: D0F1 BNE $0620 C3/062F: 60 RTS
C3/0630 unknow
C3/0630: 84E7 STY $E7 C3/0632: A9C3 LDA #$C3 C3/0634: 85E9 STA $E9 C3/0636: 60 RTS
C3/0637 unknow
C3/0637: 203006 JSR $0630 C3/063A: 205006 JSR $0650 C3/063D: 4CC506 JMP $06C5
C3/0640 finger positioning decoder
Finger positioning decoding function! C3/0640: 203006 JSR $0630 C3/0643: 207706 JSR $0677 C3/0646: 807D BRA $06C5
C3/0648 unknow
C3/0648: 203006 JSR $0630 C3/064B: 209E06 JSR $069E C3/064E: 8075 BRA $06C5
C3/0650 unknow
C3/0650: 8B PHB C3/0651: A900 LDA #$00 C3/0653: 48 PHA C3/0654: AB PLB C3/0655: AF124200 LDA $004212 C3/0659: 2940 AND #$40 (are we in H-blank?) C3/065B: F0F8 BEQ $0655 (branch if not) C3/065D: A554 LDA $54 C3/065F: 8D1B21 STA $211B C3/0662: 9C1B21 STZ $211B C3/0665: A54D LDA $4D C3/0667: 8D1C21 STA $211C C3/066A: 8D1C21 STA $211C C3/066D: AD3421 LDA $2134 C3/0670: 18 CLC C3/0671: 654E ADC $4E C3/0673: 854B STA $4B C3/0675: AB PLB C3/0676: 60 RTS
C3/0677 unknow
C3/0677: 8B PHB C3/0678: A900 LDA #$00 C3/067A: 48 PHA C3/067B: AB PLB C3/067C: AF124200 LDA $004212 C3/0680: 2940 AND #$40 (are we in H-blank?) C3/0682: F0F8 BEQ $067C (branch if not) C3/0684: A553 LDA $53 C3/0686: 8D1B21 STA $211B C3/0689: 9C1B21 STZ $211B C3/068C: A54E LDA $4E C3/068E: 8D1C21 STA $211C C3/0691: 8D1C21 STA $211C C3/0694: AD3421 LDA $2134 C3/0697: 18 CLC C3/0698: 654D ADC $4D C3/069A: 854B STA $4B C3/069C: AB PLB C3/069D: 60 RTS
C3/069E unknow
C3/069E: 8B PHB C3/069F: A900 LDA #$00 C3/06A1: 48 PHA C3/06A2: AB PLB C3/06A3: AF124200 LDA $004212 C3/06A7: 2940 AND #$40 (are we in H-blank?) C3/06A9: F0F8 BEQ $06A3 (branch if not) C3/06AB: A553 LDA $53 C3/06AD: 8D1B21 STA $211B C3/06B0: 9C1B21 STZ $211B C3/06B3: A550 LDA $50 C3/06B5: 8D1C21 STA $211C C3/06B8: 8D1C21 STA $211C C3/06BB: AD3421 LDA $2134 C3/06BE: 18 CLC C3/06BF: 654F ADC $4F C3/06C1: 854B STA $4B C3/06C3: AB PLB C3/06C4: 60 RTS
C3/06C5 unknow
C3/06C5: 8B PHB C3/06C6: A900 LDA #$00 C3/06C8: 48 PHA C3/06C9: AB PLB C3/06CA: A553 LDA $53 C3/06CC: 3A DEC A C3/06CD: C54D CMP $4D C3/06CF: B00C BCS $06DD C3/06D1: A553 LDA $53 C3/06D3: 3A DEC A C3/06D4: 38 SEC C3/06D5: E551 SBC $51 C3/06D7: 85E0 STA $E0 C3/06D9: 85E2 STA $E2 C3/06DB: 8008 BRA $06E5 C3/06DD: A553 LDA $53 C3/06DF: 85E0 STA $E0 C3/06E1: A54D LDA $4D C3/06E3: 85E2 STA $E2 C3/06E5: A554 LDA $54 C3/06E7: 3A DEC A C3/06E8: C54E CMP $4E C3/06EA: B00A BCS $06F6 C3/06EC: A554 LDA $54 C3/06EE: 3A DEC A C3/06EF: 38 SEC C3/06F0: E552 SBC $52 C3/06F2: 85E1 STA $E1 C3/06F4: 8004 BRA $06FA C3/06F6: A54E LDA $4E C3/06F8: 85E1 STA $E1 C3/06FA: AF124200 LDA $004212 C3/06FE: 2940 AND #$40 (are we in H-blank?) C3/0700: F0F8 BEQ $06FA (branch if not) C3/0702: A5E0 LDA $E0 C3/0704: 8D1B21 STA $211B C3/0707: 9C1B21 STZ $211B C3/070A: A5E1 LDA $E1 C3/070C: 8D1C21 STA $211C C3/070F: 8D1C21 STA $211C C3/0712: AD3421 LDA $2134 C3/0715: 18 CLC C3/0716: 65E2 ADC $E2 C3/0718: 0A ASL A C3/0719: EB XBA C3/071A: A500 LDA $00 C3/071C: EB XBA C3/071D: A8 TAY C3/071E: B7E7 LDA [$E7],Y C3/0720: 8555 STA $55 C3/0722: 6456 STZ $56 C3/0724: C8 INY C3/0725: B7E7 LDA [$E7],Y C3/0727: 8557 STA $57 C3/0729: 6458 STZ $58 C3/072B: AB PLB C3/072C: 60 RTS
C3/072D move and update finger position
Used by finger positioning data, determine current position and move to a new position based on direction pressed C3/072D: A50B LDA $0B (from various) C3/072F: 8908 BIT #$08 (did you press up?) C3/0731: F01D BEQ $0750 (branch if not) C3/0733: A54E LDA $4E (byte 3 of hotspot data) C3/0735: D011 BNE $0748 (branch if not on position 0) C3/0737: A559 LDA $59 (byte 1 of hotspot data) C3/0739: 2901 AND #$01 (check lowest bit, if set it will allow left/right) C3/073B: D072 BNE $07AF C3/073D: A554 LDA $54 C3/073F: 3A DEC A C3/0740: 854E STA $4E (byte 3 of hotspot data) C3/0742: 20A30E JSR $0EA3 C3/0745: 4CAF07 JMP $07AF (BRA would save a byte) C3/0748: C64E DEC $4E C3/074A: 20A30E JSR $0EA3 C3/074D: 4CAF07 JMP $07AF (BRA would save a byte) C3/0750: A50B LDA $0B (A already holds the contents of $0B) C3/0752: 8904 BIT #$04 (did you press down?) C3/0754: F01D BEQ $0773 (branch if not) C3/0756: A554 LDA $54 (byte 5 of hotspot data) C3/0758: 3A DEC A C3/0759: C54E CMP $4E (byte 3 of hotspot data) C3/075B: D00E BNE $076B C3/075D: A559 LDA $59 (byte 1 of hotspot data) C3/075F: 2901 AND #$01 (check lowest bit, if set it will allow left/right) C3/0761: D04C BNE $07AF C3/0763: 644E STZ $4E C3/0765: 20A30E JSR $0EA3 C3/0768: 4CAF07 JMP $07AF (BRA would save a byte) C3/076B: E64E INC $4E (byte 3 of hotspot data) C3/076D: 20A30E JSR $0EA3 C3/0770: 4CAF07 JMP $07AF C3/0773: A50B LDA $0B (A already holds the contents of $0B) C3/0775: 8902 BIT #$02 (did you press left?) C3/0777: F019 BEQ $0792 (branch if not) C3/0779: A54D LDA $4D (bytes 2 and 3 of hotspot data) C3/077B: D00E BNE $078B C3/077D: A559 LDA $59 (byte 1 of hotspot data) C3/077F: 302E BMI $07AF (check highest bit, if set it will allow up/down) C3/0781: A553 LDA $53 (byte 4 of hotspot data) C3/0783: 3A DEC A C3/0784: 854D STA $4D (byte 2 of hotspot data) C3/0786: 20A30E JSR $0EA3 C3/0789: 8024 BRA $07AF C3/078B: C64D DEC $4D (byte 2 of hotspot data) C3/078D: 20A30E JSR $0EA3 C3/0790: 801D BRA $07AF C3/0792: A50B LDA $0B (A already holds the contents of $0B) C3/0794: 8901 BIT #$01 (did you press right?) C3/0796: F017 BEQ $07AF (branch if not) C3/0798: A553 LDA $53 (byte 4 of hotspot data) C3/079A: 3A DEC A C3/079B: C54D CMP $4D (byte 2 of hotspot data) C3/079D: D00B BNE $07AA C3/079F: A559 LDA $59 (byte 1 of hotspot data) C3/07A1: 300C BMI $07AF (check highest bit, if set it will allow up/down) C3/07A3: 644D STZ $4D (byte 2 of hotspot data) C3/07A5: 20A30E JSR $0EA3 C3/07A8: 8005 BRA $07AF C3/07AA: E64D INC $4D (byte 2 of hotspot data) C3/07AC: 20A30E JSR $0EA3 C3/07AF: 60 RTS
C3/07B0 OAM initial routine
OAM initiating routine for hotspots C3/07B0: A901 LDA #$01 C3/07B2: A0B807 LDY #$07B8 C3/07B5: 4C7311 JMP $1173 (put C3/07B8 in the queue) C3/07B8: AA TAX C3/07B9: 7CBC07 JMP ($07BC,X)
C3/07BC data
C3/07BC: C007 C3/07BE: DC07
C3/07C0 unknow
C3/07C0: A62D LDX $2D C3/07C3: C220 REP #$20 C3/07C4: A98D08 LDA #$088D C3/07C7: 9DC932 STA $32C9,X (save as pointer to OAM data) C3/07CA: E220 SEP #$20 (8 bit memory/accum.) C3/07CC: A9C3 LDA #$C3 C3/07CE: 9DCA35 STA $35CA,X (save bank pointer to OAM data) C3/07D1: 200612 JSR $1206 C3/07D4: FE4936 INC $3649,X (execute the next entry in this queue's jump table) C3/07D7: A901 LDA #$01 C3/07D9: 9D4A36 STA $364A,X C3/07DC: A546 LDA $46 C3/07DE: 2906 AND #$06 C3/07E0: F01B BEQ $07FD C3/07E2: A545 LDA $45 C3/07E4: 8904 BIT #$04 C3/07E6: F013 BEQ $07FB C3/07E8: A62D LDX $2D C3/07EA: C220 REP #$20 (16 bit memory/accum.) C3/07EC: A555 LDA $55 C3/07EE: 9DCA33 STA $33CA,X C3/07F1: A557 LDA $57 C3/07F3: 9D4A34 STA $344A,X C3/07F6: E220 SEP #$20 (8 bit memory/accum.) C3/07F8: 202112 JSR $1221 (draw the sprites!) C3/07FB: 38 SEC (not done with this queue yet) C3/07FC: 60 RTS C3/07FD: 18 CLC (flag that this queue can be removed) C3/07FE: 60 RTS
C3/07FF unknow
C3/07FF: AA TAX C3/0800: 7C0308 JMP ($0803,X)
C3/0803 pointers
C3/0803: 0B08 C3/0805: 2B08 C3/0807: 0B08 C3/0809: 6708
C3/080B unknow
C3/080B: A62D LDX $2D (from C3/0803, C3/0807) C3/080D: A901 LDA #$01 C3/080F: 0446 TSB $46 C3/0811: C220 REP #$20 (16 bit memory/accum.) C3/0813: A99608 LDA #$0896 C3/0816: 9DC932 STA $32C9,X (save as pointer to OAM data) C3/0819: E220 SEP #$20 (8 bit memory/accum.) C3/081B: A9C3 LDA #$C3 C3/081D: 9DCA35 STA $35CA,X (save bank pointer to OAM data) C3/0820: 200612 JSR $1206 C3/0823: A901 LDA #$01 C3/0825: 9D4A36 STA $364A,X C3/0828: FE4936 INC $3649,X (execute the next entry in this queue's jump table) C3/082B: A546 LDA $46 (from C3/0805) C3/082D: 8901 BIT #$01 C3/082F: F034 BEQ $0865 C3/0831: A62D LDX $2D C3/0833: C220 REP #$20 (16 bit memory/accum.) C3/0835: A541 LDA $41 C3/0837: 49FFFF EOR #$FFFF C3/083A: 1A INC A C3/083B: 18 CLC C3/083C: 7D4A34 ADC $344A,X C3/083F: 9D4A34 STA $344A,X C3/0842: E220 SEP #$20 (8 bit memory/accum.) C3/0844: A546 LDA $46 C3/0846: 29C0 AND #$C0 C3/0848: F016 BEQ $0860 C3/084A: A528 LDA $28 C3/084C: 85E1 STA $E1 C3/084E: 1A INC A C3/084F: 85E0 STA $E0 C3/0851: A54A LDA $4A C3/0853: 18 CLC C3/0854: 6909 ADC #$09 C3/0856: C5E1 CMP $E1 C3/0858: 9009 BCC $0863 C3/085A: A54A LDA $4A C3/085C: C5E0 CMP $E0 C3/085E: B003 BCS $0863 C3/0860: 202112 JSR $1221 (draw the sprites!) C3/0863: 38 SEC C3/0864: 60 RTS C3/0865: 18 CLC C3/0866: 60 RTS
C3/0867 unknow
C3/0867: A546 LDA $46 (from C3/0809) C3/0869: 8901 BIT #$01 C3/086B: F0F8 BEQ $0865 C3/086D: A62D LDX $2D C3/086F: C220 REP #$20 (16 bit memory/accum.) C3/0871: A597 LDA $97 C3/0873: 49FFFF EOR #$FFFF C3/0876: 1A INC A C3/0877: 18 CLC C3/0878: 7DCA33 ADC $33CA,X C3/087B: 9DCA33 STA $33CA,X C3/087E: E220 SEP #$20 (8 bit memory/accum.) C3/0880: BCCA33 LDY $33CA,X C3/0883: C00001 CPY #$0100 C3/0886: B003 BCS $088B C3/0888: 202112 JSR $1221 (draw the sprites!) C3/088B: 38 SEC C3/088C: 60 RTS
C3/088D oam data: finger
C3/088D: 90 08 C3/088F: FE (???) C3/0890: 01 (one set of data) C3/0891: 80 00 00 3E (position 80,0, 0 is ?, finger) C3/0895: 00 (no data)
C3/0896 blink effect for finger
Cycle to create blinking effect for finger C3/0896: 9008 C3/0898: 02 C3/0899: 9508 C3/089B: 02 C3/089C: 9008 C3/089E: FF
C3/089F unknow
C3/089F: 7B TDC C3/08A0: AA TAX C3/08A1: B585 LDA $85,X C3/08A3: F024 BEQ $08C9 C3/08A5: DA PHX C3/08A6: A901 LDA #$01 C3/08A8: A0D108 LDY #$08D1 C3/08AB: 207311 JSR $1173 (put C3/08D1 in the queue) C3/08AE: 9B TXY C3/08AF: FA PLX C3/08B0: A97E LDA #$7E C3/08B2: 48 PHA C3/08B3: AB PLB C3/08B4: B585 LDA $85,X C3/08B6: 99CA33 STA $33CA,Y C3/08B9: B586 LDA $86,X C3/08BB: 994A34 STA $344A,Y C3/08BE: 7B TDC C3/08BF: 99CB33 STA $33CB,Y C3/08C2: 994B34 STA $344B,Y C3/08C5: A900 LDA #$00 C3/08C7: 48 PHA C3/08C8: AB PLB C3/08C9: E8 INX C3/08CA: E8 INX C3/08CB: E00800 CPX #$0008 C3/08CE: D0D1 BNE $08A1 C3/08D0: 60 RTS
C3/08D1 unknow
C3/08D1: AA TAX C3/08D2: 7CD508 JMP ($08D5,X)
C3/08D5 pointers
C3/08D5: D908 C3/08D7: F908
C3/08D9 unknow
C3/08D9: A62D LDX $2D C3/08DB: A908 LDA #$08 C3/08DD: 0446 TSB $46 C3/08DF: C220 REP #$20 (16 bit memory/accum.) C3/08E1: A99608 LDA #$0896 C3/08E4: 9DC932 STA $32C9,X (save as pointer to OAM data) C3/08E7: E220 SEP #$20 (8 bit memory/accum.) C3/08E9: A9C3 LDA #$C3 C3/08EB: 9DCA35 STA $35CA,X (save bank pointer to OAM data) C3/08EE: 200612 JSR $1206 C3/08F1: FE4936 INC $3649,X (execute the next entry in this queue's jump table) C3/08F4: A901 LDA #$01 C3/08F6: 9D4A36 STA $364A,X C3/08F9: A546 LDA $46 C3/08FB: 8908 BIT #$08 C3/08FD: F007 BEQ $0906 C3/08FF: A62D LDX $2D C3/0901: 202112 JSR $1221 (draw the sprites!) C3/0904: 38 SEC (not done yet with this queue) C3/0905: 60 RTS C3/0906: 18 CLC (this queue can be removed) C3/0907: 60 RTS
C3/0908 unknow
C3/0908: A9C0 LDA #$C0 C3/090A: 0446 TSB $46 C3/090C: A54A LDA $4A C3/090E: D004 BNE $0914 C3/0910: A940 LDA #$40 C3/0912: 1446 TRB $46 C3/0914: A54A LDA $4A C3/0916: C55C CMP $5C C3/0918: D004 BNE $091E C3/091A: A980 LDA #$80 C3/091C: 1446 TRB $46 C3/091E: 60 RTS
C3/091F unknow
C3/091F: A903 LDA #$03 (from C3/1B14, C3/20B5, C3/2132, C3/2170, C3/21A8, C3/265A, C3/591E, C3/89DE, C3/BC05) C3/0921: A04709 LDY #$0947 C3/0924: 207311 JSR $1173 (put C3/0947 in the queue) C3/0927: C220 REP #$20 (16 bit memory/accum.) C3/0929: A9E800 LDA #$00E8 (arrow's initial position, E8 is X, 00 is Y) C3/092C: 9FCA337E STA $7E33CA,X C3/0930: E220 SEP #$20 (8 bit memory/accum.) C3/0932: 60 RTS
C3/0933 unknow
C3/0933: A903 LDA #$03 (only from C3/9B0F) C3/0935: A04709 LDY #$0947 C3/0938: 207311 JSR $1173 (put C3/0947 in the queue) C3/093B: C220 REP #$20 (16 bit memory/accum.) C3/093D: A97800 LDA #$0078 (arrow's initial position in equip screen, 78 is X, 00 is Y) C3/0940: 9FCA337E STA $7E33CA,X C3/0944: E220 SEP #$20 (8 bit memory/accum.) C3/0946: 60 RTS
C3/0947 unknow
C3/0947: AA TAX C3/0948: 7C4B09 JMP ($094B,X)
C3/094B pointers
C3/094B: 4F09 C3/094D: 6A09
C3/094F unknow
C3/094F: A62D LDX $2D C3/0951: C220 REP #$20 (16 bit memory/accum.) C3/0953: A9E309 LDA #$09E3 C3/0956: 9DC932 STA $32C9,X (save as pointer to OAM data) C3/0959: E220 SEP #$20 (8 bit memory/accum.) C3/095B: A9C3 LDA #$C3 C3/095D: 9DCA35 STA $35CA,X (save bank pointer to OAM data) C3/0960: FE4936 INC $3649,X (execute the next entry in this queue's jump table) C3/0963: 200612 JSR $1206 C3/0966: A9C0 LDA #$C0 C3/0968: 0446 TSB $46 C3/096A: A546 LDA $46 C3/096C: 29C0 AND #$C0 C3/096E: F069 BEQ $09D9 C3/0970: A62D LDX $2D C3/0972: 200809 JSR $0908 C3/0975: AF124200 LDA $004212 C3/0979: 2940 AND #$40 C3/097B: F0F8 BEQ $0975 C3/097D: BD4A35 LDA $354A,X C3/0980: 8F1B2100 STA $00211B C3/0984: BD4B35 LDA $354B,X C3/0987: 8F1B2100 STA $00211B C3/098B: A54A LDA $4A C3/098D: 8F1C2100 STA $00211C C3/0991: 8F1C2100 STA $00211C C3/0995: A54A LDA $4A C3/0997: 3011 BMI $09AA C3/0999: 7B TDC C3/099A: AF352100 LDA $002135 C3/099E: C221 REP #$21 C3/09A0: 7DCA34 ADC $34CA,X C3/09A3: 9D4A34 STA $344A,X C3/09A6: E220 SEP #$20 (8 bit memory/accum.) C3/09A8: 8013 BRA $09BD C3/09AA: 7B TDC C3/09AB: AF352100 LDA $002135 C3/09AF: C221 REP #$21 C3/09B1: 697000 ADC #$0070 C3/09B4: 18 CLC C3/09B5: 7DCA34 ADC $34CA,X C3/09B8: 9D4A34 STA $344A,X C3/09BB: E220 SEP #$20 (8 bit memory/accum.) C3/09BD: 7B TDC C3/09BE: A546 LDA $46 C3/09C0: 29C0 AND #$C0 C3/09C2: 4A LSR A C3/09C3: 4A LSR A C3/09C4: 4A LSR A C3/09C5: 4A LSR A C3/09C6: 4A LSR A C3/09C7: 9B TXY C3/09C8: AA TAX C3/09C9: C220 REP #$20 (16 bit memory/accum.) C3/09CB: BFDB09C3 LDA $C309DB,X C3/09CF: 99C932 STA $32C9,Y (save as pointer to OAM data) C3/09D2: E220 SEP #$20 (8 bit memory/accum.) C3/09D4: 202112 JSR $1221 (draw the sprites!) C3/09D7: 38 SEC (not done yet with this queue) C3/09D8: 60 RTS C3/09D9: 18 CLC (this queue can be removed) C3/09DA: 60 RTS
C3/09DB pointers: oam arrow cycle
C3/09DB: E309 C3/09DD: EC09 C3/09DF: F509 C3/09E1: E309
OAM format: pointer, timer, pointer, timer, pointer, end C3/09E3: FE09 C3/09E5: 10 C3/09E6: 070A C3/09E8: 10 C3/09E9: FE09 C3/09EB: FF C3/09EC: FE09 C3/09EE: 10 C3/09EF: 100A C3/09F1: 10 C3/09F2: FE09 C3/09F4: FF C3/09F5: FE09 C3/09F7: 10 C3/09F8: 190A C3/09FA: 10 C3/09FB: FE09 C3/09FD: FF
C3/09FE oam arrow position
Data: OAM arrow position....GENERAL PURPOSE! format is X Y state sprite, X and Y are relative to starting and current positions C3/09FE: 02 (no idea...) C3/09FF: 0000023E (upper arrow, 02 is not flashing) (position 0,0, disabled, arrow pointing up) C3/0A03: 000802BE (lower arrow, 02 is not flashing) (position 0,8, disabled, arrow pointing down) C3/0A07: 02 (no idea...) C3/0A08: 0000123E (upper arrow, 12 is flashing) (position 0,0, enabled, arrow pointing up) C3/0A0C: 000812BE (lower arrow, 12 is flashing) (position 0,8, enabled, arrow pointing down) C3/0A10: 02 (no idea...) C3/0A11: 0000123E (upper arrow) (position 0,0, enabled, arrow pointing up) C3/0A15: 000802BE (lower arrow) (position 0,8, disabled, arrow pointing down) C3/0A19: 02 (no idea...) C3/0A1A: 0000023E (upper arrow) (position 0,0, disabled, arrow pointing up) C3/0A1E: 000812BE (lower arrow) (position 0,8, enabled, arrow pointing down)
C3/0A22 unknow
C3/0A22: A903 LDA #$03 C3/0A24: A0120B LDY #$0B12 C3/0A27: 207311 JSR $1173 (put C3/0B12 in the queue) C3/0A2A: 8A TXA C3/0A2B: 8560 STA $60 C3/0A2D: 8B PHB C3/0A2E: A97E LDA #$7E C3/0A30: 48 PHA C3/0A31: AB PLB C3/0A32: A400 LDY $00 C3/0A34: 20F10A JSR $0AF1 C3/0A37: A400 LDY $00 C3/0A39: 20CC0A JSR $0ACC C3/0A3C: C220 REP #$20 (16 bit memory/accum.) C3/0A3E: A91500 LDA #$0015 C3/0A41: 9D4A34 STA $344A,X C3/0A44: E220 SEP #$20 (8 bit memory/accum.) C3/0A46: 200612 JSR $1206 C3/0A49: AB PLB C3/0A4A: 60 RTS
C3/0A4B unknow
C3/0A4B: A903 LDA #$03 C3/0A4D: A0120B LDY #$0B12 C3/0A50: 207311 JSR $1173 (put C3/0B12 in the queue) C3/0A53: 8A TXA C3/0A54: 8561 STA $61 C3/0A56: 8B PHB C3/0A57: A97E LDA #$7E C3/0A59: 48 PHA C3/0A5A: AB PLB C3/0A5B: A00100 LDY #$0001 C3/0A5E: 20F10A JSR $0AF1 C3/0A61: A00100 LDY #$0001 C3/0A64: 20CC0A JSR $0ACC C3/0A67: C220 REP #$20 (16 bit memory/accum.) C3/0A69: A94500 LDA #$0045 C3/0A6C: 9D4A34 STA $344A,X C3/0A6F: E220 SEP #$20 (8 bit memory/accum.) C3/0A71: 200612 JSR $1206 C3/0A74: AB PLB C3/0A75: 60 RTS
C3/0A76 unknow
C3/0A76: A903 LDA #$03 C3/0A78: A0120B LDY #$0B12 C3/0A7B: 207311 JSR $1173 (put C3/0B12 in the queue) C3/0A7E: 8A TXA C3/0A7F: 8562 STA $62 C3/0A81: 8B PHB C3/0A82: A97E LDA #$7E C3/0A84: 48 PHA C3/0A85: AB PLB C3/0A86: A00200 LDY #$0002 C3/0A89: 20F10A JSR $0AF1 C3/0A8C: A00200 LDY #$0002 C3/0A8F: 20CC0A JSR $0ACC C3/0A92: C220 REP #$20 (16 bit memory/accum.) C3/0A94: A97500 LDA #$0075 C3/0A97: 9D4A34 STA $344A,X C3/0A9A: E220 SEP #$20 (8 bit memory/accum.) C3/0A9C: 200612 JSR $1206 C3/0A9F: AB PLB C3/0AA0: 60 RTS
C3/0AA1 unknow
C3/0AA1: A903 LDA #$03 C3/0AA3: A0120B LDY #$0B12 C3/0AA6: 207311 JSR $1173 (put C3/0B12 in the queue) C3/0AA9: 8A TXA C3/0AAA: 8563 STA $63 C3/0AAC: 8B PHB C3/0AAD: A97E LDA #$7E C3/0AAF: 48 PHA C3/0AB0: AB PLB C3/0AB1: A00300 LDY #$0003 C3/0AB4: 20F10A JSR $0AF1 C3/0AB7: A00300 LDY #$0003 C3/0ABA: 20CC0A JSR $0ACC C3/0ABD: C220 REP #$20 (16 bit memory/accum.) C3/0ABF: A9A500 LDA #$00A5 C3/0AC2: 9D4A34 STA $344A,X C3/0AC5: E220 SEP #$20 (8 bit memory/accum.) C3/0AC7: 200612 JSR $1206 C3/0ACA: AB PLB C3/0ACB: 60 RTS
C3/0ACC unknow
C3/0ACC: DA PHX C3/0ACD: DA PHX (should this be PHY? Y isn't touched at all, but still) C3/0ACE: BB TYX C3/0ACF: B575 LDA $75,X C3/0AD1: 2918 AND #$18 C3/0AD3: 4A LSR A C3/0AD4: 4A LSR A C3/0AD5: AA TAX C3/0AD6: C220 REP #$20 (16 bit memory/accum.) C3/0AD8: BFE90AC3 LDA $C30AE9,X C3/0ADC: 7A PLY (Y is lost) C3/0ADD: 99C932 STA $32C9,Y (save as pointer to OAM data) C3/0AE0: E220 SEP #$20 (8 bit memory/accum.) C3/0AE2: A9C3 LDA #$C3 C3/0AE4: 99CA35 STA $35CA,Y (save bank pointer to OAM data) C3/0AE7: FA PLX (no stack mismatch, but something has to have bugged... Kejardon claims this to be intentional) C3/0AE8: 60 RTS
C3/0AE9 data
C3/0AE9: 8C0B C3/0AEB: C40B C3/0AED: FC0B C3/0AEF: 340C
C3/0AF1 unknow
C3/0AF1: DA PHX C3/0AF2: BB TYX C3/0AF3: A902 LDA #$02 C3/0AF5: 2445 BIT $45 C3/0AF7: D006 BNE $0AFF C3/0AF9: B575 LDA $75,X C3/0AFB: 8920 BIT #$20 C3/0AFD: F007 BEQ $0B06 C3/0AFF: C220 REP #$20 (16 bit memory/accum.) C3/0B01: A91A00 LDA #$001A C3/0B04: 8005 BRA $0B0B C3/0B06: C220 REP #$20 (16 bit memory/accum.) C3/0B08: A90E00 LDA #$000E C3/0B0B: FA PLX C3/0B0C: 9DCA33 STA $33CA,X C3/0B0F: E220 SEP #$20 (8 bit memory/accum.) C3/0B11: 60 RTS
C3/0B12 unknow
C3/0B12: AA TAX C3/0B13: 7C160B JMP ($0B16,X)
C3/0B16 pointers
C3/0B16: 200B C3/0B18: 2A0B C3/0B1A: 380B C3/0B1C: 4C0B C3/0B1E: 5E0B
C3/0B20 unknow
C3/0B20: A62D LDX $2D C3/0B22: FE4936 INC $3649,X (execute the next entry in this queue's jump table) C3/0B25: A901 LDA #$01 C3/0B27: 9D4A36 STA $364A,X C3/0B2A: A62D LDX $2D C3/0B2C: BDC935 LDA $35C9,X C3/0B2F: 3005 BMI $0B36 C3/0B31: 202112 JSR $1221 (draw the sprites!) C3/0B34: 38 SEC (not done yet with this queue) C3/0B35: 60 RTS C3/0B36: 18 CLC (this queue can be removed) C3/0B37: 60 RTS
C3/0B38 unknow
C3/0B38: A62D LDX $2D C3/0B3A: C220 REP #$20 (16 bit memory/accum.) C3/0B3C: A90100 LDA #$0001 C3/0B3F: 9DCA34 STA $34CA,X C3/0B42: A90C00 LDA #$000C C3/0B45: 9D4933 STA $3349,X C3/0B48: E220 SEP #$20 (8 bit memory/accum.) C3/0B4A: 8012 BRA $0B5E C3/0B4C: A62D LDX $2D C3/0B4E: C220 REP #$20 (16 bit memory/accum.) C3/0B50: A9FFFF LDA #$FFFF (TDC then DEC would do the same) C3/0B53: 9DCA34 STA $34CA,X C3/0B56: A90C00 LDA #$000C C3/0B59: 9D4933 STA $3349,X C3/0B5C: E220 SEP #$20 (8 bit memory/accum.) C3/0B5E: A62D LDX $2D C3/0B60: A904 LDA #$04 C3/0B62: 9D4936 STA $3649,X (execute the fifth entry in this queue's jump table) C3/0B65: C220 REP #$20 (16 bit memory/accum.) C3/0B67: BD4933 LDA $3349,X C3/0B6A: F014 BEQ $0B80 C3/0B6C: BDCA34 LDA $34CA,X C3/0B6F: 18 CLC C3/0B70: 7DCA33 ADC $33CA,X C3/0B73: 9DCA33 STA $33CA,X C3/0B76: DE4933 DEC $3349,X C3/0B79: E220 SEP #$20 (8 bit memory/accum.) C3/0B7B: 202112 JSR $1221 (draw the sprites!) C3/0B7E: 38 SEC (not done yet with this queue) C3/0B7F: 60 RTS
C3/0B80 unknow
C3/0B80: E220 SEP #$20 (8 bit memory/accum.) C3/0B82: A901 LDA #$01 C3/0B84: 9D4936 STA $3649,X (execute the second entry in this queue's jump table) C3/0B87: 202112 JSR $1221 (draw the sprites!) C3/0B8A: 38 SEC (not done yet with this queue) C3/0B8B: 60 RTS
C3/0B8C oam data
C3/0B8C: 8F0B C3/0B8E: FE (...) C3/0B8F: 0D (13 sets of data) C3/0B90: 80006020 (position 80,00, 60 is ?, 20 is ?) C3/0B94: 90006220 (position 90,00, 62 is ?, 20 is ?) C3/0B98: 80106420 (position 80,10, 64 is ?, 20 is ?) C3/0B9C: 90106620 (position 90,10, 66 is ?, 20 is ?) C3/0BA0: 20006820 (position 20,00, 68 is ?, 20 is ?) C3/0BA4: 20086920 (position 20,08, 69 is ?, 20 is ?) C3/0BA8: 20106A20 (position 20,10, 6A is ?, 20 is ?) C3/0BAC: 20186B20 (position 20,18, 6B is ?, 20 is ?) C3/0BB0: 20206C20 (position 20,20, 6C is ?, 20 is ?) C3/0BB4: 00206D20 (position 00,20, 6D is ?, 20 is ?) C3/0BB8: 08206E20 (position 08,20, 6E is ?, 20 is ?) C3/0BBC: 10206F20 (position 10,20, 6F is ?, 20 is ?) C3/0BC0: 18207820 (position 18,20, 78 is ?, 20 is ?) C3/0BC4: C70B C3/0BC6: FE (...) C3/0BC7: 0D (13 sets of data) C3/0BC8: 80008022 (position 80,00, 80 is ?, 22 is ?) C3/0BCC: 90008222 (position 90,00, 82 is ?, 22 is ?) C3/0BD0: 80108422 (position 80,10, 84 is ?, 22 is ?) C3/0BD4: 90108622 (position 90,10, 86 is ?, 22 is ?) C3/0BD8: 20008822 (position 20,00, 88 is ?, 22 is ?) C3/0BDC: 20088922 (position 20,08, 89 is ?, 22 is ?) C3/0BE0: 20108A22 (position 20,10, 8A is ?, 22 is ?) C3/0BE4: 20188B22 (position 20,18, 8B is ?, 22 is ?) C3/0BE8: 20208C22 (position 20,20, 8C is ?, 22 is ?) C3/0BEC: 00208D22 (position 00,20, 8D is ?, 22 is ?) C3/0BF0: 08208E22 (position 08,20, 8E is ?, 22 is ?) C3/0BF4: 10208F22 (position 10,20, 8F is ?, 22 is ?) C3/0BF8: 18209822 (position 18,20, 98 is ?, 22 is ?) C3/0BFC: FF0B C3/0BFE: FE (...) C3/0BFF: 0D (13 sets of data) C3/0C00: 8000A024 C3/0C04: 9000A224 C3/0C08: 8010A424 C3/0C0C: 9010A624 C3/0C10: 2000A824 C3/0C14: 2008A924 C3/0C18: 2010AA24 C3/0C1C: 2018AB24 C3/0C20: 2020AC24 C3/0C24: 0020AD24 C3/0C28: 0820AE24 C3/0C2C: 1020AF24 C3/0C30: 1820B824 C3/0C34: 370C C3/0C36: FE (...) C3/0C37: 0D (13 sets of data) C3/0C38: 8000C026 C3/0C3C: 9000C226 C3/0C40: 8010C426 C3/0C44: 9010C626 C3/0C48: 2000C826 C3/0C4C: 2008C926 C3/0C50: 2010CA26 C3/0C54: 2018CB26 C3/0C58: 2020CC26 C3/0C5C: 0020CD26 C3/0C60: 0820CE26 C3/0C64: 1020CF26 C3/0C68: 1820D826
C3/0C6C display character level, HP and MP
This same function is used for main menu, skills screen, status screen, equipment, relics, or save screen C3/0C6C: 86EF STX $EF (save position to look in rom) C3/0C6E: A9C3 LDA #$C3 C3/0C70: 85F1 STA $F1 (C3/xxxx holds the stats for this character) C3/0C72: A667 LDX $67 C3/0C74: BD0800 LDA $0008,X (Level) C3/0C77: 20E004 JSR $04E0 C3/0C7A: C220 REP #$20 C3/0C7C: A7EF LDA [$EF] (load stat position for tilemap) C3/0C7E: AA TAX C3/0C7F: E220 SEP #$20 C3/0C81: 20B604 JSR $04B6 C3/0C84: A667 LDX $67 C3/0C86: BD0B00 LDA $000B,X (maximum HP, high byte) C3/0C89: 85F3 STA $F3 C3/0C8B: BD0C00 LDA $000C,X (maximum HP, low byte) C3/0C8E: 85F4 STA $F4 C3/0C90: 20650D JSR $0D65 (boost HP according to equipment) C3/0C93: 20920D JSR $0D92 (truncate HP display to 9999) C3/0C96: 202E05 JSR $052E (convert to displayable digits) C3/0C99: A00400 LDY #$0004 C3/0C9C: 20210D JSR $0D21 C3/0C9F: A467 LDY $67 C3/0CA1: 209A2B JSR $2B9A C3/0CA4: B90900 LDA $0009,Y (current HP, high byte) C3/0CA7: 85F3 STA $F3 C3/0CA9: B90A00 LDA $000A,Y (current HP, low byte) C3/0CAC: 85F4 STA $F4 C3/0CAE: 202E05 JSR $052E (convert to displayable digits) C3/0CB1: A00200 LDY #$0002 C3/0CB4: 20210D JSR $0D21 C3/0CB7: 202B0D JSR $0D2B (check to see if this character knows magic) C3/0CBA: 9033 BCC $0CEF (branch if character doesn't know any magic) C3/0CBC: A667 LDX $67 C3/0CBE: BD0F00 LDA $000F,X (maximum MP, high byte) C3/0CC1: 85F3 STA $F3 C3/0CC3: BD1000 LDA $0010,X (maximum MP, low byte) C3/0CC6: 85F4 STA $F4 C3/0CC8: 20650D JSR $0D65 (boost MP according to equipment) C3/0CCB: 209F0D JSR $0D9F (truncate MP display to 999) C3/0CCE: 202E05 JSR $052E (convert to displayable digits) C3/0CD1: A00800 LDY #$0008 C3/0CD4: 20210D JSR $0D21 C3/0CD7: A467 LDY $67 C3/0CD9: 20BC2B JSR $2BBC C3/0CDC: B90D00 LDA $000D,Y (current MP, high byte) C3/0CDF: 85F3 STA $F3 C3/0CE1: B90E00 LDA $000E,Y (current MP, low byte) C3/0CE4: 85F4 STA $F4 C3/0CE6: 202E05 JSR $052E (convert to displayable digits) C3/0CE9: A00600 LDY #$0006 C3/0CEC: 4C210D JMP $0D21 (BRA fool!)
C3/0CEF unknow
C3/0CEF: A28B9E LDX #$9E8B C3/0CF2: 8E8121 STX $2181 C3/0CF5: C220 REP #$20 (16 bit memory/accum.) C3/0CF7: A00600 LDY #$0006 C3/0CFA: B7EF LDA [$EF],Y C3/0CFC: 38 SEC C3/0CFD: E90600 SBC #$0006 C3/0D00: 8F899E7E STA $7E9E89 C3/0D04: E220 SEP #$20 (8 bit memory/accum.) C3/0D06: A20C00 LDX #$000C C3/0D09: A9FF LDA #$FF C3/0D0B: 8D8021 STA $2180 C3/0D0E: CA DEX C3/0D0F: D0FA BNE $0D0B (draw 12 spaces) C3/0D11: 9C8021 STZ $2180 (end this string) C3/0D14: A0899E LDY #$9E89 (JMP $7FD9 fool!) C3/0D17: 84E7 STY $E7 C3/0D19: A97E LDA #$7E C3/0D1B: 85E9 STA $E9 C3/0D1D: 20FF02 JSR $02FF (JMP fool!) C3/0D20: 60 RTS
C3/0D21 unknow
C3/0D21: C220 REP #$20 (16 bit memory/accum.) C3/0D23: B7EF LDA [$EF],Y C3/0D25: AA TAX C3/0D26: E220 SEP #$20 (8 bit memory/accum.) C3/0D28: 4C9004 JMP $0490
C3/0D2B check if character knows magic
C3/0D2B: AD691A LDA $1A69 (from C3/0CB7) C3/0D2E: 0D6A1A ORA $1A6A C3/0D31: 0D6B1A ORA $1A6B C3/0D34: 0D6C1A ORA $1A6C C3/0D37: D02A BNE $0D63 (branch if you have at least one esper) C3/0D39: A667 LDX $67 C3/0D3B: 7B TDC C3/0D3C: BD0000 LDA $0000,X (character ID) C3/0D3F: C90C CMP #$0C C3/0D41: F020 BEQ $0D63 (Branch if it's Gogo) C3/0D43: B01C BCS $0D61 (Branch if it's Umaro or higher) C3/0D45: 8D0242 STA $4202 (we're here if character is below Gogo, and you have no espers) C3/0D48: A936 LDA #$36 C3/0D4A: 8D0342 STA $4203 (#$36 as multiplier) C3/0D4D: EA NOP C3/0D4E: EA NOP C3/0D4F: EA NOP C3/0D50: A03600 LDY #$0036 (TAY?) C3/0D53: AE1642 LDX $4216 (load character * spell total) C3/0D56: BD6E1A LDA $1A6E,X (load spell at X) C3/0D59: C9FF CMP #$FF (learned it?) C3/0D5B: F006 BEQ $0D63 (branch if so) C3/0D5D: E8 INX C3/0D5E: 88 DEY C3/0D5F: D0F5 BNE $0D56 (branch if we haven't checked every spell) C3/0D61: 18 CLC (used by C3/0C6C, says that this character doesn't know magic) C3/0D62: 60 RTS C3/0D63: 38 SEC (flag MP as ok to display) C3/0D64: 60 RTS
C3/0D65 adjust HP and MP based on equipment
This is called by both HP and MP to adjust their values based on boosting equipment C3/0D65: C220 REP #$20 (16 bit memory/accum.) C3/0D67: A5F3 LDA $F3 (load HP/MP) C3/0D69: 29FF3F AND #$3FFF (only keep the HP/MP) C3/0D6C: 85E7 STA $E7 (save it to a temp location) C3/0D6E: A5F3 LDA $F3 (load HP/MP again) C3/0D70: 2900C0 AND #$C000 (this time keep only the boosts) C3/0D73: 18 CLC (this is crucial) C3/0D74: 2A ROL A C3/0D75: 2A ROL A C3/0D76: 2A ROL A C3/0D77: 2A ROL A (transfer boosts to lower two bits) C3/0D78: AA TAX (index them) C3/0D79: A5E7 LDA $E7 (load our non-boosted HP/MP) C3/0D7B: 7C7E0D JMP ($0D7E,X)
C3/0D7E pointers: HP and MP boosts
C3/0D7E: 860D (no HP/MP boost) C3/0D80: 880D (25% HP/MP boost) C3/0D82: 890D (50% HP/MP boost) C3/0D84: 870D (12.5% HP/MP boost)
C3/0D86 HP and MP boosts
C3/0D86: 7B TDC C3/0D87: 4A LSR A C3/0D88: 4A LSR A C3/0D89: 4A LSR A C3/0D8A: 18 CLC C3/0D8B: 65E7 ADC $E7 (add in the non-boosted HP/MP) C3/0D8D: 85F3 STA $F3 (save new boosted HP/MP) C3/0D8F: E220 SEP #$20 (8 bit memory/accum.) C3/0D91: 60 RTS
C3/0D92 trim HP if HP above 9999
C3/0D92: A6F3 LDX $F3 C3/0D94: E01027 CPX #$2710 C3/0D97: 9005 BCC $0D9E C3/0D99: A20F27 LDX #$270F C3/0D9C: 86F3 STX $F3 C3/0D9E: 60 RTS
C3/0D9F trim MP if MP above 999
C3/0D9F: A6F3 LDX $F3 C3/0DA1: E0E803 CPX #$03E8 C3/0DA4: 9005 BCC $0DAB C3/0DA6: A2E703 LDX #$03E7 C3/0DA9: 86F3 STX $F3 C3/0DAB: 60 RTS
C3/0DAC unknow
C3/0DAC: AC2F02 LDY $022F C3/0DAF: 844F STY $4F C3/0DB1: A54F LDA $4F C3/0DB3: 854D STA $4D C3/0DB5: AD3102 LDA $0231 C3/0DB8: 8064 BRA $0E1E
C3/0DBA unknow
C3/0DBA: 7B TDC C3/0DBB: A54B LDA $4B C3/0DBD: 0A ASL A C3/0DBE: AA TAX C3/0DBF: A528 LDA $28 C3/0DC1: 0A ASL A C3/0DC2: A8 TAY C3/0DC3: C220 REP #$20 (16 bit memory/accum.) C3/0DC5: BD3602 LDA $0236,X C3/0DC8: 85E7 STA $E7 C3/0DCA: B93602 LDA $0236,Y C3/0DCD: 9D3602 STA $0236,X C3/0DD0: A5E7 LDA $E7 C3/0DD2: 993602 STA $0236,Y C3/0DD5: BD3E02 LDA $023E,X C3/0DD8: 85E7 STA $E7 C3/0DDA: B93E02 LDA $023E,Y C3/0DDD: 9D3E02 STA $023E,X C3/0DE0: A5E7 LDA $E7 C3/0DE2: 993E02 STA $023E,Y C3/0DE5: E220 SEP #$20 (8 bit memory/accum.) C3/0DE7: 7B TDC C3/0DE8: A54B LDA $4B C3/0DEA: AA TAX C3/0DEB: A528 LDA $28 C3/0DED: A8 TAY C3/0DEE: BD4602 LDA $0246,X C3/0DF1: 85E0 STA $E0 C3/0DF3: B94602 LDA $0246,Y C3/0DF6: 9D4602 STA $0246,X C3/0DF9: A5E0 LDA $E0 C3/0DFB: 994602 STA $0246,Y C3/0DFE: 60 RTS
C3/0DFF unknow
C3/0DFF: 7B TDC C3/0E00: A528 LDA $28 C3/0E02: 0A ASL A C3/0E03: AA TAX C3/0E04: BC3602 LDY $0236,X C3/0E07: 844D STY $4D C3/0E09: 60 RTS
C3/0E0A unknow
C3/0E0A: 7B TDC C3/0E0B: A528 LDA $28 C3/0E0D: 0A ASL A C3/0E0E: AA TAX C3/0E0F: BC3E02 LDY $023E,X C3/0E12: 844F STY $4F C3/0E14: A54F LDA $4F C3/0E16: 854D STA $4D C3/0E18: A528 LDA $28 C3/0E1A: AA TAX C3/0E1B: BD4602 LDA $0246,X C3/0E1E: 854A STA $4A C3/0E20: A550 LDA $50 C3/0E22: 38 SEC C3/0E23: E54A SBC $4A C3/0E25: 854E STA $4E C3/0E27: 60 RTS
C3/0E28 unknow
C3/0E28: A00000 LDY #$0000 C3/0E2B: 8C1621 STY $2116 C3/0E2E: A04938 LDY #$3849 C3/0E31: 8C0243 STY $4302 (set address, 7E/3849) C3/0E34: 8052 BRA $0E88 (BRA $0E85...)
C3/0E36: A00004 LDY #$0400 (from C3/674F, C3/7E04, C3/8F13, C3/90E4, C3/AB46, C3/AD6B) C3/0E39: 8C1621 STY $2116 C3/0E3C: A04940 LDY #$4049 C3/0E3F: 8C0243 STY $4302 (set address, 7E/4049) C3/0E42: 8044 BRA $0E88 (BRA $0E85...)
C3/0E44: A00008 LDY #$0800 (from C3/6752, C3/B933) C3/0E47: 8C1621 STY $2116 C3/0E4A: A04948 LDY #$4849 C3/0E4D: 8C0243 STY $4302 (set address, 7E/4849) C3/0E50: 8036 BRA $0E88 (BRA $0E85...)
C3/0E52: A00010 LDY #$1000 C3/0E55: 8C1621 STY $2116 C3/0E58: A04958 LDY #$5849 C3/0E5B: 8C0243 STY $4302 (set address, 7E/5849) C3/0E5E: 8028 BRA $0E88 (BRA $0E85...)
C3/0E60: A00018 LDY #$1800 (from C3/B92A) C3/0E63: 8C1621 STY $2116 C3/0E66: A04968 LDY #$6849 C3/0E69: 8C0243 STY $4302 (set address, 7E/6849) C3/0E6C: 801A BRA $0E88 (BRA $0E85...)
C3/0E6E: A00040 LDY #$4000 C3/0E71: 8C1621 STY $2116 C3/0E74: A04978 LDY #$7849 C3/0E77: 8C0243 STY $4302 (set address, 7E/7849) C3/0E7A: 800C BRA $0E88 (BRA $0E85...)
C3/0E7C: A00048 LDY #$4800 (from C3/1899, C3/31A5, C3/5D80, C3/7E0A, C3/AD5C, C3/B94B) C3/0E7F: 8C1621 STY $2116 C3/0E82: A04988 LDY #$8849 C3/0E85: 8C0243 STY $4302 (set address, 7E/8849) C3/0E88: A901 LDA #$01 C3/0E8A: 8D0043 STA $4300 C3/0E8D: A918 LDA #$18 C3/0E8F: 8D0143 STA $4301 (register address becomes $2118) C3/0E92: A97E LDA #$7E C3/0E94: 8D0443 STA $4304 (set bank) C3/0E97: A00010 LDY #$1000 C3/0E9A: 8C0543 STY $4305 (amount to transfer) C3/0E9D: A901 LDA #$01 C3/0E9F: 8D0B42 STA $420B (turn on channel 0 of DMA) C3/0EA2: 60 RTS
C3/0EA3 unknow
C3/0EA3: A5AE LDA $AE C3/0EA5: C921 CMP #$21 C3/0EA7: F008 BEQ $0EB1 (if $AE is already #$21, don't output any sound for moving the finger) C3/0EA9: A921 LDA #$21 C3/0EAB: 85AE STA $AE C3/0EAD: 8F402100 STA $002140 (here if you can move and have moved, output sound and trigger no more sound) C3/0EB1: 60 RTS
C3/0EB2 click sound
C3/0EB2: A920 LDA #$20 (20 is the familiar "click" sound) C3/0EB4: 8F402100 STA $002140 C3/0EB8: 60 RTS
C3/0EB9 healing sound
C3/0EB9: A923 LDA #$23 (23 is the "heal" sound, like when you use a potion) C3/0EBB: 8F402100 STA $002140 C3/0EBF: 60 RTS
C3/0EC0 buzzer sound
Makes the Buzzer Sound C3/0EC0: A922 LDA #$22 (22 is the "buzz" sound, as in "No, you can't do that") C3/0EC2: 8F402100 STA $002140 C3/0EC6: 60 RTS
C3/0EC7 shift sound
Makes the Shift Sound C3/0EC7: A924 LDA #$24 (24 is the "shift" sound, deleting letters while naming a character) C3/0EC9: 8F402100 STA $002140 C3/0ECD: 60 RTS
C3/0ECE cha-ching sound
Makes the Cha-ching Sound (I'm guessing) C3/0ECE: A9BF LDA #$BF C3/0ED0: 8F011300 STA $001301 C3/0ED4: A918 LDA #$18 C3/0ED6: 8F001300 STA $001300 C3/0EDA: A980 LDA #$80 C3/0EDC: 8F021300 STA $001302 C3/0EE0: 220400C5 JSL $C50004 C3/0EE4: 60 RTS
C3/0EE5 true sound
Makes the "Trueeeeeeee" Sound C3/0EE5: A9C5 LDA #$C5 C3/0EE7: 80E7 BRA $0ED0
C3/0EE9 unknow
C3/0EE9: A00000 LDY #$0000 C3/0EEC: 8414 STY $14 C3/0EEE: A04938 LDY #$3849 C3/0EF1: 8416 STY $16 C3/0EF3: A97E LDA #$7E C3/0EF5: 8518 STA $18 C3/0EF7: A00010 LDY #$1000 C3/0EFA: 8412 STY $12 C3/0EFC: 60 RTS
C3/0EFD unknow
C3/0EFD: A00000 LDY #$0000 C3/0F00: 8414 STY $14 C3/0F02: A04938 LDY #$3849 C3/0F05: 8416 STY $16 C3/0F07: A97E LDA #$7E C3/0F09: 8518 STA $18 C3/0F0B: A00008 LDY #$0800 C3/0F0E: 8412 STY $12 C3/0F10: 60 RTS
C3/0F11 unknow
C3/0F11: A00004 LDY #$0400 C3/0F14: 8414 STY $14 C3/0F16: A04940 LDY #$4049 C3/0F19: 8416 STY $16 C3/0F1B: A97E LDA #$7E C3/0F1D: 8518 STA $18 C3/0F1F: A00008 LDY #$0800 C3/0F22: 8412 STY $12 C3/0F24: 60 RTS
C3/0F25 unknow
C3/0F25: A00040 LDY #$4000 C3/0F28: 8414 STY $14 C3/0F2A: A04978 LDY #$7849 C3/0F2D: 8416 STY $16 C3/0F2F: A97E LDA #$7E C3/0F31: 8518 STA $18 C3/0F33: A00010 LDY #$1000 C3/0F36: 8412 STY $12 C3/0F38: 60 RTS
C3/0F39 unknow
C3/0F39: A00040 LDY #$4000 C3/0F3C: 8414 STY $14 C3/0F3E: A04978 LDY #$7849 C3/0F41: 8416 STY $16 C3/0F43: A97E LDA #$7E C3/0F45: 8518 STA $18 C3/0F47: A00008 LDY #$0800 C3/0F4A: 8412 STY $12 C3/0F4C: 60 RTS
C3/0F4D unknow
C3/0F4D: A00044 LDY #$4400 C3/0F50: 8414 STY $14 C3/0F52: A04980 LDY #$8049 C3/0F55: 8416 STY $16 C3/0F57: A97E LDA #$7E C3/0F59: 8518 STA $18 C3/0F5B: A00008 LDY #$0800 C3/0F5E: 8412 STY $12 C3/0F60: 60 RTS
C3/0F61 unknow
C3/0F61: A00040 LDY #$4000 C3/0F64: 841B STY $1B C3/0F66: A04978 LDY #$7849 C3/0F69: 841D STY $1D C3/0F6B: A97E LDA #$7E C3/0F6D: 851F STA $1F C3/0F6F: A00008 LDY #$0800 C3/0F72: 8419 STY $19 C3/0F74: 60 RTS
C3/0F75 unknow
C3/0F75: A00044 LDY #$4400 C3/0F78: 841B STY $1B C3/0F7A: A04980 LDY #$8049 C3/0F7D: 841D STY $1D C3/0F7F: A97E LDA #$7E C3/0F81: 851F STA $1F C3/0F83: A00008 LDY #$0800 C3/0F86: 8419 STY $19 C3/0F88: 60 RTS
C3/0F89 unknow
C3/0F89: 641B STZ $1B C3/0F8B: 641C STZ $1C C3/0F8D: 60 RTS
C3/0F8E copy function
Copy a block of 32 bytes Coming in: 8-bit A holds bank source 16-bit Y holds destination 16-bit X holds address source C3/0F8E: 85ED STA $ED (source bank) C3/0F90: 84E7 STY $E7 (destination address) C3/0F92: 86EB STX $EB (source address) C3/0F94: A97E LDA #$7E C3/0F96: 85E9 STA $E9 (destination bank) C3/0F98: A400 LDY $00 C3/0F9A: C220 REP #$20 (16 bit memory/accum.) C3/0F9C: B7EB LDA [$EB],Y C3/0F9E: 97E7 STA [$E7],Y C3/0FA0: C8 INY C3/0FA1: C8 INY C3/0FA2: C02000 CPY #$0020 C3/0FA5: D0F5 BNE $0F9C C3/0FA7: E220 SEP #$20 (8 bit memory/accum.) C3/0FA9: 60 RTS
C3/0FAA unknow
C3/0FAA: 48 PHA C3/0FAB: 84E7 STY $E7 C3/0FAD: 86EB STX $EB C3/0FAF: A97E LDA #$7E C3/0FB1: 85E9 STA $E9 C3/0FB3: A900 LDA #$00 C3/0FB5: A0DD0F LDY #$0FDD C3/0FB8: 207311 JSR $1173 (put C3/0FDD in the queue) C3/0FBB: 68 PLA C3/0FBC: 9FCA377E STA $7E37CA,X C3/0FC0: A5E9 LDA $E9 C3/0FC2: 9FC9367E STA $7E36C9,X C3/0FC6: A5ED LDA $ED C3/0FC8: 9FCA367E STA $7E36CA,X C3/0FCC: C220 REP #$20 (16 bit memory/accum.) C3/0FCE: A5E7 LDA $E7 C3/0FD0: 9FC9337E STA $7E33C9,X C3/0FD4: A5EB LDA $EB C3/0FD6: 9F49347E STA $7E3449,X C3/0FDA: E220 SEP #$20 (8 bit memory/accum.) C3/0FDC: 60 RTS
C3/0FDD jump table
C3/0FDD: AA TAX C3/0FDE: 7CE10F JMP ($0FE1,X) C3/0FE1: E50F C3/0FE3: F60F
C3/0FE5 unknow
C3/0FE5: A62D LDX $2D C3/0FE7: A91F LDA #$1F C3/0FE9: 9D4933 STA $3349,X C3/0FEC: A500 LDA $00 C3/0FEE: 9D4A33 STA $334A,X C3/0FF1: FE4936 INC $3649,X (execute the next entry in this queue's jump table) C3/0FF4: 38 SEC (not done yet with this queue) C3/0FF5: 60 RTS