Final Fantasy VI:ROM map/Assembly C26

From Data Crystal
Jump to: navigation, search

C2/602A learn spell based on esper

C2/602A: DA           PHX
C2/602B: 20 93 62     JSR $6293     (Multiply A by #$0B and store in X)
C2/602E: A0 05 00     LDY #$0005    (Do for each spell taught by esper)
C2/6031: 7B           TDC           (Clear A)
C2/6032: BF 01 6E D8  LDA $D86E01,X (Spell taught)
C2/6036: C9 FF        CMP #$FF
C2/6038: F0 0A        BEQ $6044     (Branch if no spell taught)
C2/603A: 5A           PHY 
C2/603B: A8           TAY 
C2/603C: BF 00 6E D8  LDA $D86E00,X (Spell learn rate)
C2/6040: 20 4B 60     JSR $604B     (Add amount to known% for spell)
C2/6043: 7A           PLY 
C2/6044: E8           INX 
C2/6045: E8           INX 
C2/6046: 88           DEY 
C2/6047: D0 E8        BNE $6031     (Check next spell taught)
C2/6049: FA           PLX 
C2/604A: 60           RTS 

C2/604B learn spell

C2/604B: F0 1F        BEQ $606C   (If no spell to learn)
C2/604D: EB           XBA 
C2/604E: A5 FB        LDA $FB     (Magic points gained from the battle)
C2/6050: 20 81 47     JSR $4781   (Multiply by spell learn rate)
C2/6053: 85 EE        STA $EE     (Store this amount in $EE)
C2/6055: B1 F4        LDA ($F4),Y
C2/6057: C9 FF        CMP #$FF
C2/6059: F0 11        BEQ $606C   (Branch if spell already known)
C2/605B: 18           CLC 
C2/605C: 65 EE        ADC $EE     (Add amount learned to % known for spell)
C2/605E: B0 04        BCS $6064
C2/6060: C9 64        CMP #$64
C2/6062: 90 02        BCC $6066
C2/6064: A9 80        LDA #$80
C2/6066: 91 F4        STA ($F4),Y
C2/6068: A5 F1        LDA $F1
C2/606A: 04 F0        TSB $F0
C2/606C: 60           RTS 

C2/606D unknow

C2/606D: 64 F8        STZ $F8
C2/606F: 7B           TDC           (Clear 16-bit A)
C2/6070: BD 08 16     LDA $1608,X   (current level)
C2/6073: C9 63        CMP #$63
C2/6075: B0 F5        BCS $606C     (exit if >= 99)
C2/6077: C2 20        REP #$20      (Set 16-bit A)
C2/6079: 0A           ASL           
C2/607A: DA           PHX 
C2/607B: AA           TAX           (level * 2)
C2/607C: 7B           TDC           (Clear 16-bit A)
C2/607D: 18           CLC           (Clear carry)
C2/607E: 7F 1E 82 ED  ADC $ED821E,X (add to Experience Needed for Level Up FROM this level)
C2/6082: 90 02        BCC $6086     (branch if bottom 16-bits of sum didn't overflow)
C2/6084: E6 F8        INC $F8       (if so, increment a counter that will determine
                                     top 16-bits)
C2/6086: CA           DEX 
C2/6087: CA           DEX           (point to experience needed for next lowest level)
C2/6088: D0 F3        BNE $607D     (total experience needed for level 1 thru current level.
                                     IOW, total experience needed to reach next level.)
C2/608A: FA           PLX 

                            (BUT, experience needed is stored divided by 8 in ROM, so we
                             must multiply it to get true value)

C2/608B: 0A           ASL           
C2/608C: 26 F8        ROL $F8       (multiply 32-bit [only 24 bits ever used] experience
                                     needed by 2)
C2/608E: 0A           ASL 
C2/608F: 26 F8        ROL $F8       (again)
C2/6091: 0A           ASL 
C2/6092: 26 F8        ROL $F8       (again)
C2/6094: 85 F6        STA $F6       (so now, $F6 thru $F8 = total 24-bit experience needed
                                     to advance from our given level)
C2/6096: BD 12 16     LDA $1612,X   (top 2 bytes of current Experience)
C2/6099: C5 F7        CMP $F7       (compare to top 2 bytes of needed experience)
C2/609B: E2 20        SEP #$20      (set 8-bit Accumulator)
C2/609D: 90 CD        BCC $606C     (Exit if (current exp / 256) < (needed exp / 256) )
C2/609F: D0 07        BNE $60A8     (if (current exp / 256) != (needed exp / 256), branch)
                                    (since it's not less than, we know it's greater than)
C2/60A1: BD 11 16     LDA $1611,X   (bottom byte of Experience)
C2/60A4: C5 F6        CMP $F6       (compare to experience needed)
C2/60A6: 90 C4        BCC $606C     (Exit if less)
C2/60A8: A5 F2        LDA $F2
C2/60AA: F0 05        BEQ $60B1
C2/60AC: 64 F2        STZ $F2
C2/60AE: 20 D4 5F     JSR $5FD4
C2/60B1: 20 C2 60     JSR $60C2     (raise level, raise normal HP and MP, and give any
                                     Esper bonus)
C2/60B4: DA           PHX 
C2/60B5: BD 08 16     LDA $1608,X   (load level)
C2/60B8: EB           XBA           (put in top of A)
C2/60B9: BD 00 16     LDA $1600,X
C2/60BC: 20 B6 61     JSR $61B6
C2/60BF: FA           PLX 
C2/60C0: 80 AB        BRA $606D     (repeat to check for another possible level gain,
                                     since it's possible a battle with wicked high
                                     experience on a wussy character boosted multiple
                                     levels.)

C2/60C2 add bonus when level up

(Gain level, raise HP and MP, and give any Esper bonus)
C2/60C2: 08           PHP 
C2/60C3: FE 08 16     INC $1608,X    (increment current level)
C2/60C6: 64 FD        STZ $FD
C2/60C8: 64 FF        STZ $FF
C2/60CA: DA           PHX 
C2/60CB: 7B           TDC            (Clear 16-bit A)
C2/60CC: BD 08 16     LDA $1608,X    (get level)
C2/60CF: AA           TAX 
C2/60D0: BF 00 F5 E6  LDA $E6F500,X  (normal MP gain for level)
C2/60D4: 85 FE        STA $FE
C2/60D6: BF 9E F4 E6  LDA $E6F49E,X  (normal HP gain for level)
C2/60DA: 85 FC        STA $FC
C2/60DC: FA           PLX 
C2/60DD: BD 1E 16     LDA $161E,X    (get equipped Esper)
C2/60E0: 30 14        BMI $60F6      (if it's null, don't try to calculate bonuses)
C2/60E2: 5A           PHY 
C2/60E3: DA           PHX 
C2/60E4: 9B           TXY            (Y will be used to index stats that are boosted
                                      by the $614E call.  i believe it currently points
                                      to offset of character block from $1600)
C2/60E5: 20 93 62     JSR $6293      (X = A * 11d)
C2/60E8: 7B           TDC            (Clear 16-bit A)
C2/60E9: BF 0A 6E D8  LDA $D86E0A,X  (end of data block for Esper..  probably
                                      has level-up bonus)
C2/60ED: 30 05        BMI $60F4      (if null, don't try to calculate bonus)
C2/60EF: 0A           ASL 
C2/60F0: AA           TAX            (multiply bonus index by 2)
C2/60F1: FC 4E 61     JSR ($614E,X)  (calculate bonus.  note that [Stat]+1 jumps to the
                                      same place as [Stat]+2.  what distinguishes them?
                                      Bit 1 of X.  if X is 20, 24, 28, 32, you'll get +1
                                      to a stat.. if it's 18, 22, 26, 30, you get +2.

                                      for HP/MP boosts, X of 0/2/4 means HP, and
                                      6/8/10 means MP)
C2/60F4: FA           PLX 
C2/60F5: 7A           PLY 
C2/60F6: C2 21        REP #$21     (set 16-bit A, clear carry)
C2/60F8: BD 0B 16     LDA $160B,X  (maximum HP)
C2/60FB: 48           PHA 
C2/60FC: 29 00 C0     AND #$C000   (isolate top bits, which indicate (bit 7, then bit 6):
                                    00 = no equipment % bonus, 11 = 12.5% bonus,
                                    01 = 25% bonus, 10 = 50% bonus)

C2/60FF: 85 EE        STA $EE      (save equipment bonus bits)
C2/6101: 68           PLA          (get max HP again)
C2/6102: 29 FF 3F     AND #$3FFF   (isolate bottom 14 bits.. just the max HP w/o bonus)
C2/6105: 65 FC        ADC $FC      (add to HP gain for level)
C2/6107: C9 10 27     CMP #$2710   
C2/610A: 90 03        BCC $610F    (branch if less than 10000)
C2/610C: A9 0F 27     LDA #$270F   (replace with 9999)
C2/610F: 05 EE        ORA $EE      (combine with bonus bits)
C2/6111: 9D 0B 16     STA $160B,X  (save updated max HP)
C2/6114: 18           CLC          (clear carry)
C2/6115: BD 0F 16     LDA $160F,X  (now maximum MP)
C2/6118: 48           PHA 
C2/6119: 29 00        AND #$C000   (isolate top bits, which indicate (bit 7, then bit 6):
                                    00 = no equipment % bonus, 11 = 12.5% bonus,
                                    01 = 25% bonus, 10 = 50% bonus)
C2/611C: 85 EE        STA $EE      (save equipment bonus bits)
C2/611E: 68           PLA          (get max MP again)
C2/611F: 29 FF 3F     AND #$3FFF   (isolate bottom 14 bits.. just the max MP w/o bonus)
C2/6122: 65 FE        ADC $FE      (add to MP gain for level)
C2/6124: C9 E8 03     CMP #$03E8
C2/6127: 90 03        BCC $612C    (branch if less than 1000)
C2/6129: A9 E7 03     LDA #$03E7   (replace with 999)
C2/612C: 05 EE        ORA $EE      (combine with bonus bits)
C2/612E: 9D 0F 16     STA $160F,X  (save updated max MP)
C2/6131: 28           PLP 
C2/6132: 60           RTS 

C2/6133 unknow

C2/6133: 5A           PHY
C2/6134: A0 35 00     LDY #$0035
C2/6137: B1 F4        LDA ($F4),Y
C2/6139: C9 80        CMP #$80
C2/613B: D0 0C        BNE $6149
C2/613D: A9 FF        LDA #$FF
C2/613F: 91 F4        STA ($F4),Y
C2/6141: 8C 35 2F     STY $2F35
C2/6144: A9 32        LDA #$32
C2/6146: 20 D4 5F     JSR $5FD4
C2/6149: 88           DEY 
C2/614A: 10 EB        BPL $6137
C2/614C: 7A           PLY 
C2/614D: 60           RTS 

C2/614E pointers: esper bonus

C2/614E: 70 61  (~10% HP bonus)  (HP due to X)
C2/6150: 74 61  (~30% HP bonus)  (HP due to X)
C2/6152: 78 61  (50% HP bonus)   (HP due to X)
C2/6154: 70 61  (~10% MP bonus)  (MP due to X)
C2/6156: 74 61  (~30% MP bonus)  (MP due to X)
C2/6158: 78 61  (50% MP bonus)   (MP due to X)  
C2/615A: B0 61  (Double natural HP gain for level.  Curious...)
C2/615C: 97 61  (No bonus)
C2/615E: 97 61  (No bonus)
C2/6160: 9B 61  (Vigor bonus)    (+1 due to X value in caller)
C2/6162: 9B 61  (Vigor bonus)    (+2 due to X)
C2/6164: 9A 61  (Speed bonus)    (+1 due to X)
C2/6166: 9A 61  (Speed bonus)    (+2 due to X.  No Esper currently uses)
C2/6168: 99 61  (Stamina bonus)  (+1 due to X)
C2/616A: 99 61  (Stamina bonus)  (+2 due to X)
C2/616C: 98 61  (MagPwr bonus)   (+1 due to X)
C2/616E: 98 61  (MagPwr bonus)   (+2 due to X)

C2/6170 esper bonus: HP or MP

C2/6170: A9 1A        LDA #$1A     (26 => 10.12625% bonus)  
C2/6172: 80 06        BRA $617A
C2/6174: A9 4E        LDA #$4E     (78 => 30.46875% bonus)    
C2/6176: 80 02        BRA $617A
C2/6178: A9 80        LDA #$80     (128 ==> 50% bonus)
C2/617A: E0 06 00     CPX #$0006   (are we boosting MP rather than HP?)
C2/617D: A2 00 00     LDX #$0000   (start pointing to $FC, which holds normal HP to raise)
C2/6180: 90 02        BCC $6184    (if X was less than 6, we're just boosting HP,
                                    so branch)
C2/6182: E8           INX 
C2/6183: E8           INX          (point to $FE, which holds normal MP to raise)
C2/6184: EB           XBA          (put boost numerator in top of A)
C2/6185: B5 FC        LDA $FC,X    (get current HP or MP to add)
C2/6187: 20 81 47     JSR $4781    
C2/618A: EB           XBA          (get (boost number * current HP or MP to add) / 256.
                                    after all, the boost IS a percentage..)
C2/618B: D0 01        BNE $618E    (if the HP/MP bonus is nonzero, branch)
C2/618D: 1A           INC          (if it was zero, be nice and give the chump one..)
C2/618E: 18           CLC 
C2/618F: 75 FC        ADC $FC,X
C2/6191: 95 FC        STA $FC,X    (add boost to natural HP/MP gain)
C2/6193: 90 02        BCC $6197    
C2/6195: F6 FD        INC $FD,X    (if bottom byte overflowed from add, boost top byte)
C2/6197: 60           RTS 

C2/6198 esper bonus: vigor, speed, stamina or magic power

(Esper stat bonus at level-up.  Vigor, Speed, Stamina, or MagPwr.
 If Bit 1 of X is set, give +1 bonus.  If not, give +2.)
C2/6198: C8           INY          (enter here = 3 INYs = point to MagPwr)
C2/6199: C8           INY          (enter here = 2 INYs = point to Stamina)
C2/619A: C8           INY          (enter here = 1 INY  = point to Speed)
C2/619B: 8A           TXA          (enter here = 0 INYs = point to Vigor)

C2/619C: 4A           LSR 
C2/619D: 4A           LSR          (Carry holds bit 1 of X)

C2/619E: BB           TYX          (0 to 3 value.  determines which stat will be altered)
C2/619F: BD 1A 16     LDA $161A,X  (at $161A,X we have Vigor, Speed, Stamina, and MagPwr,
                                    respectively)
C2/61A2: 1A           INC
C2/61A3: B0 01        BCS $61A6    (If carry set, just give +1)
C2/61A5: 1A           INC 
C2/61A6: C9 81        CMP #$81     (is stat >= 129?)
C2/61A8: 90 02        BCC $61AC
C2/61AA: A9 80        LDA #$80     (if so, make it 128)
C2/61AC: 9D 1A 16     STA $161A,X  (save updated stat)
C2/61AF: 60           RTS

C2/61B0 esper bonus: double natural HP gain by level (unused)

(Give double natural HP gain for level?  Can't say I know when this happens...)
C2/61B0: 7B           TDC            (Clear 16-bit A)
C2/61B1: AA           TAX            (X = 0)
C2/61B2: A5 FC        LDA $FC
C2/61B4: 80 D8        BRA $618E

C2/61B6 unknow

C2/61B6: A2 00 00     LDX #$0000   (point to start of Terra's magic learned at
                                    level up block)
C2/61B9: C9 00        CMP #$00     (is it character #0, Terra?)
C2/61BB: F0 3F        BEQ $61FC    (if yes, branch to see if she learns any spells)
C2/61BD: A2 20 00     LDX #$0020   (point to start of Celes' magic learned at
                                    level up block)
C2/61C0: C9 06        CMP #$06     (is it character #6, Celes?)
C2/61C2: F0 38        BEQ $61FC    (if yes, branch to see if she learns any spells)
C2/61C4: A2 00 00     LDX #$0000   (point to start of Cyan's SwdTechs learned
                                    at level up block)
C2/61C7: C9 02        CMP #$02     (if it character #2, Cyan?)
C2/61C9: D0 15        BNE $61E0    (if not, check for Sabin)

C2/61CB level up: sword tech learning

(Cyan learning SwdTechs at level up.
 His data block is just an array of 8 bytes: the level for learning each SwdTech)
C2/61CB: 20 22 62     JSR $6222    (are any SwdTechs learned at the current level?)
C2/61CE: F0 51        BEQ $6221    (if not, exit)
C2/61D0: 0C F7 1C     TSB $1CF7    (if so, enable the newly learnt SwdTech)
C2/61D3: D0 4C        BNE $6221    (if it was already enabled [e.g. Cleave learned
                                    in nightmare], suppress celebratory messages
                                    and such)
C2/61D5: A9 40        LDA #$40
C2/61D7: 04 F0        TSB $F0
C2/61D9: D0 46        BNE $6221
C2/61DB: A9 42        LDA #$42
C2/61DD: 4C D4 5F     JMP $5FD4

C2/61E0 level up: blitz learning

(Sabin learning Blitzes at level up.
 His data block is just an array of 8 bytes: the level for learning each Blitz)
C2/61E0: A2 08 00     LDX #$0008  (point to start of Sabin's Blitzes learned
                                   at level up block)
C2/61E3: C9 05        CMP #$05    (is it character #5, Sabin?)
C2/61E5: D0 3A        BNE $6221   (if not, exit)
C2/61E7: 20 22 62     JSR $6222   (are any Blitzes learned at the current level?)
C2/61EA: F0 35        BEQ $6221   (if not, exit)
C2/61EC: 0C 28 1D     TSB $1D28   (if so, enable the newly learnt Blitz)
C2/61EF: D0 30        BNE $6221   (if it was already enabled [e.g. Bum Rush taught
                                   by Duncan], suppress celebratory messages
                                   and such)
C2/61F1: A9 80        LDA #$80
C2/61F3: 04 F0        TSB $F0
C2/61F5: D0 2A        BNE $6221
C2/61F7: A9 33        LDA #$33
C2/61F9: 4C D4 5F     JMP $5FD4

C2/61FC level up: Terra and Celes learning of spells

(Terra and Celes natural magic learning at level up)
C2/61FC: 5A           PHY 
C2/61FD: EB           XBA 
C2/61FE: A0 10 00     LDY #$0010     (check a total of 32 bytes, as Terra and Celes
                                      each have a 16-element spell list, with
                                      2 bytes per element [spell #, then level] )
C2/6201: DF C1 E3 EC  CMP $ECE3C1,X  (Terra/Celes level-up spell list: Level at
                                      which spell learned)
C2/6205: D0 14        BNE $621B      (if this level isn't one where the character
                                      learns a spell, branch to check the next
                                      list element)
C2/6207: 48           PHA 
C2/6208: 5A           PHY 
C2/6209: 7B           TDC            (Clear 16-bit A)
C2/620A: BF C0 E3 EC  LDA $ECE3C0,X  (Terra/Celes level-up spell list: Spell number)
C2/620E: A8           TAY 
C2/620F: B1 F4        LDA ($F4),Y    (?? check entry in spell list ??)
C2/6211: C9 FF        CMP #$FF       
C2/6213: F0 04        BEQ $6219     
C2/6215: A9 80        LDA #$80
C2/6217: 91 F4        STA ($F4),Y
C2/6219: 7A           PLY 
C2/621A: 68           PLA 
C2/621B: E8           INX 
C2/621C: E8           INX            (check next spell and level pair)
C2/621D: 88           DEY 
C2/621E: D0 E1        BNE $6201
C2/6220: 7A           PLY 
C2/6221: 60           RTS 

C2/6222 handle blitz or sword tech learned abilities

(Handles Sabin's Blitzes learned or Cyan's SwdTechs learned, depending on X value)
C2/6222: A9 01        LDA #$01
C2/6224: 85 EE        STA $EE       (start by marking SwdTech/Blitz #0)
C2/6226: EB           XBA           (get current level from top of A?)
C2/6227: DF 90 F4 E6  CMP $E6F490,X (does level match the one in the SwdTech/Blitz
                                     table?)
C2/622B: F0 05        BEQ $6232     (if so, branch)
C2/622D: E8           INX           (otherwise, move to check next level)
C2/622E: 06 EE        ASL $EE       (mark the next SwdTech/Blitz as learned instead)
C2/6230: 90 F5        BCC $6227     (loop for all 8 bits.  if Carry is set, we've
                                     checked all 8 to no avail, and $EE will be 0,
                                     indicating no SwdTech or Blitz is learned)
C2/6232: A5 EE        LDA $EE       (get the SwdTech/Blitz bitfield.. where the number
                                     of the bit that is set represents the number of
                                     the SwdTech/Blitz to learn)
C2/6234: 60           RTS 

C2/6235 add experience to character

Add Experience for battle to character
If XP over 15,000,000 sets XP to 15,000,000
C2/6235: 08           PHP
C2/6236: C2 21        REP #$21
C2/6238: AD 35 2F     LDA $2F35   (XP Gained from battle)
C2/623B: 7D 11 16     ADC $1611,X (Add to XP for character)
C2/623E: 85 F6        STA $F6
C2/6240: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/6242: AD 37 2F     LDA $2F37   (Do third byte of XP)
C2/6245: 7D 13 16     ADC $1613,X
C2/6248: 85 F8        STA $F8
C2/624A: DA           PHX 
C2/624B: A2 02 00     LDX #$0002   (The following loops will compare the character's
                                    new Experience (held in $F6 - $F8) to 15000000, and
                                    if it exceeds that amount, cap it at 15000000.)
C2/624E: BF 76 62 C2  LDA $C26276,X
C2/6252: D5 F6        CMP $F6,X
C2/6254: F0 0E        BEQ $6264
C2/6256: B0 0F        BCS $6267
C2/6258: A2 02        LDX #$0002
C2/625B: BF 76 62 C2  LDA $C26276,X
C2/625F: 95 F6        STA $F6,X
C2/6261: CA           DEX
C2/6262: 10 F7        BPL $625B
C2/6264: CA           DEX 
C2/6265: 10 E7        BPL $624E
C2/6267: FA           PLX 
C2/6268: A5 F8        LDA $F8
C2/626A: 9D 13 16     STA $1613,X  (store to third persistent byte of XP)
C2/626D: C2 20        REP #$20
C2/626F: A5 F6        LDA $F6
C2/6271: 9D 11 16     STA $1611,X  (store to bottom two bytes of XP)
C2/6274: 28           PLP 
C2/6275: 60           RTS 

C2/6276 data: experience cap

Data (Experience cap: 15000000)
C2/6276: C0
C2/6277: E1
C2/6278: E4

C2/6279 unknow

C2/6279: A9 05       LDA #$05
C2/627B: 20 11 64    JSR $6411
C2/627E: A9 0A       LDA #$0A
C2/6280: 4C 11 64    JMP $6411

C2/6283 set address for spells knows by character

Stores address for spells known by character in $F4
C2/6283: 08           PHP
C2/6284: EB           XBA 
C2/6285: A9 36        LDA #$36
C2/6287: 20 81 47     JSR $4781   
C2/628A: C2 21        REP #$21
C2/628C: 69 6E 1A     ADC #$1A6E  
C2/628F: 85 F4        STA $F4
C2/6291: 28           PLP 
C2/6292: 60           RTS 

C2/6293 math: X = A * 0B

Multiply A by #$0B and store in X
C2/6293: EB           XBA
C2/6294: A9 0B        LDA #$0B
C2/6296: 20 81 47     JSR $4781
C2/6299: AA           TAX 
C2/629A: 60           RTS 

C2/629B copy function

(Copy $3A28-$3A2B variables into ($76) buffer)
C2/629B: 8D 28 3A     STA $3A28
C2/629E: 48           PHA 
C2/629F: DA           PHX 
C2/62A0: 08           PHP 
C2/62A1: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/62A3: E2 10        SEP #$10    (Set 8-bit Index Registers)
C2/62A5: AE 72 3A     LDX $3A72   (X = animation buffer pointer)
C2/62A8: AD 28 3A     LDA $3A28
C2/62AB: 9D 6E 2D     STA $2D6E,X 
C2/62AE: AD 2A 3A     LDA $3A2A   (Final Damage)
C2/62B1: 9D 70 2D     STA $2D70,X (Store in damage taken)
C2/62B4: E8           INX 
C2/62B5: E8           INX 
C2/62B6: E8           INX 
C2/62B7: E8           INX 
C2/62B8: 8E 72 3A     STX $3A72   (increase animation buffer pointer by 4)
C2/62BB: 28           PLP 
C2/62BC: FA           PLX 
C2/62BD: 68           PLA 
C2/62BE: 60           RTS 

C2/62BF unknow

??? Function
Calls 629B, setting the accumulator to 16-bit before.
C2/62BF: 08           PHP
C2/62C0: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/62C2: 20 9B 62     JSR $629B
C2/62C5: 28           PLP 
C2/62C6: 60           RTS 

C2/62C7 add item to inventory

(Add/restore characters' items to inventory.  This function is called:
 - At the end of a character's turn when they Steal or Metamorph something.
 - At the end of battle for all characters, to account for items they tried to use
   during the battle, but were thwarted by being killed/etc (the game depletes items
   upon *issuing* the command, so it'll be gone from inventory even if the command
   never executed).
 - It can also be used to restore a "bottomless" item at the end of a character's
   turn.  [The game does support equipment that doesn't deplete when you use it as
   an Item, though no such equipment exists.])
C2/62C7: A2 06        LDX #$06
C2/62C9: BD 18 30     LDA $3018,X
C2/62CC: 1C 8C 3A     TRB $3A8C     (clear this character's "add my items to inventory"
                                     flag)
C2/62CF: F0 19        BEQ $62EA     (if it wasn't set, then skip this character)
C2/62D1: BD F4 32     LDA $32F4,X
C2/62D4: C9 FF        CMP #$FF      (does this character have a valid item to add to
                                     inventory?)
C2/62D6: F0 12        BEQ $62EA     (branch if not)
C2/62D8: 20 DC 54     JSR $54DC
C2/62DB: A9 01        LDA #$01
C2/62DD: 8D 75 2E     STA $2E75
C2/62E0: A9 05        LDA #$05
C2/62E2: 20 11 64     JSR $6411
C2/62E5: A9 FF        LDA #$FF
C2/62E7: 9D F4 32     STA $32F4,X   (null the item to add to inventory)
C2/62EA: CA           DEX 
C2/62EB: CA           DEX 
C2/62EC: 10 DB        BPL $62C9     (loop for all 4 party members)
C2/62EE: 60           RTS 

C2/62EF display damage/healing

(Call C2/12F5 to do actual damage/healing at the end of a "strike", then queue
 damage and/or healing values for display.  Note that -1 (FFFFh) in a Damage
 Taken/Healed variable means the damage taken or healed is nonexistent and won't
 be displayed, as opposed to a displayable 0.)
C2/62EF: DA           PHX
C2/62F0: 5A           PHY 
C2/62F1: 64 F0        STZ $F0
C2/62F3: 64 F2        STZ $F2
C2/62F5: A0 12        LDY #$12
C2/62F7: B9 D0 33     LDA $33D0,Y (Damage Taken)
C2/62FA: D9 E4 33     CMP $33E4,Y (Damage Healed)
C2/62FD: D0 03        BNE $6302   
C2/62FF: 1A           INC 
C2/6300: F0 43        BEQ $6345   (Branch if Damage Taken and Damage Healed are
                                   both nonexistent)
C2/6302: B9 18 30     LDA $3018,Y
C2/6305: 1C 5A 3A     TRB $3A5A   (Target is not missed)
                                  (how can we have a target who's both missed
                                   and being damaged/healed going into this
                                   function, you ask?  it could be from Launcher
                                   firing multiple missiles at a single target.
                                   or it could be from spread-aiming a spell at
                                   a Reflective group, and multiple reflections
                                   coming back at a single target.)
C2/6308: 20 F5 12     JSR $12F5   (Do the HP or MP Damage/Healing to entity)
C2/630B: CC 82 3A     CPY $3A82   (Check if target protected by Golem)
C2/630E: D0 13        BNE $6323   (Branch if not ^)
C2/6310: B9 D0 33     LDA $33D0,Y (Damage Taken)
C2/6313: 1A           INC 
C2/6314: F0 0D        BEQ $6323   (branch if Damage Taken is nonexistent, but
                                   there is Damage Healed)
C2/6316: 38           SEC 
C2/6317: AD 36 3A     LDA $3A36   (HP for Golem)
C2/631A: F9 D0 33     SBC $33D0,Y (Subtract damage)
C2/631D: B0 01        BCS $6320   (If > 0)
C2/631F: 7B           TDC 
C2/6320: 8D 36 3A     STA $3A36   (Set to 0 if < 0)
C2/6323: B9 E4 33     LDA $33E4,Y (Damage Healed)
C2/6326: 1A           INC 
C2/6327: F0 1C        BEQ $6345   (Branch if Damage Healed nonexistent)
C2/6329: 3A           DEC 
C2/632A: 09 00 80     ORA #$8000
C2/632D: 99 E4 33     STA $33E4,Y (Set "sign bit" in Damage Healed)
C2/6330: E6 F2        INC $F2     (will be nonzero if any target has both damage done and
                                   damage healed)
C2/6332: B9 D0 33     LDA $33D0,Y
C2/6335: 1A           INC 
C2/6336: D0 0D        BNE $6345   (Branch if there is Damage Taken)
C2/6338: C6 F2        DEC $F2     (damage was healed but not done, so undo incrementation done
                                   for this target)
				
C2/633A: B9 E4 33     LDA $33E4,Y
C2/633D: 99 D0 33     STA $33D0,Y (If only Damage Healed, Damage Taken = - Damage Healed)
C2/6340: 7B           TDC 
C2/6341: 3A           DEC 
C2/6342: 99 E4 33     STA $33E4,Y (Store -1 in Damage Healed)
C2/6345: B9 18 30     LDA $3018,Y
C2/6348: 2C 5A 3A     BIT $3A5A
C2/634B: F0 06        BEQ $6353   (branch if target is not missed)
C2/634D: A9 00 40     LDA #$4000
C2/6350: 99 D0 33     STA $33D0,Y (Store Miss bit in damage)
C2/6353: B9 D0 33     LDA $33D0,Y
C2/6356: 1A           INC 
C2/6357: F0 02        BEQ $635B   (If no damage dealt and/or damage healed)
C2/6359: E6 F0        INC $F0
C2/635B: 88           DEY 
C2/635C: 88           DEY 
C2/635D: 10 98        BPL $62F7
C2/635F: A4 F0        LDY $F0     (how many targets have damage dealt and/or damage healed)
C2/6361: C0 05        CPY #$05
C2/6363: 20 98 63     JSR $6398
C2/6366: 20 B4 63     JSR $63B4
C2/6369: A5 F2        LDA $F2
C2/636B: F0 1A        BEQ $6387   (if no target had both damage healed and damage done, branch)
C2/636D: A2 12        LDX #$12
C2/636F: A0 00        LDY #$00
C2/6371: BD E4 33     LDA $33E4,X (Damage Healed)
C2/6374: 9D D0 33     STA $33D0,X (Store in Damage Taken)
C2/6377: 1A           INC 
C2/6378: F0 01        BEQ $637B   (If no damage dealt)
C2/637A: C8           INY         (how many targets have [2nd round of] damage dealt?)
C2/637B: CA           DEX 
C2/637C: CA           DEX 
C2/637D: 10 F2        BPL $6371
C2/637F: C0 05        CPY #$05    
C2/6381: 20 98 63     JSR $6398
C2/6384: 20 B4 63     JSR $63B4
C2/6387: 7B           TDC 
C2/6388: 3A           DEC 
C2/6389: A2 12        LDX #$12
C2/638B: 9D E4 33     STA $33E4,X (Store -1 in Damage Healed)
C2/638E: 9D D0 33     STA $33D0,X (Store -1 in Damage Taken)
C2/6391: CA           DEX 
C2/6392: CA           DEX 
C2/6393: 10 F6        BPL $638B   (null out damage for all onscreen targets)
C2/6395: 7A           PLY 
C2/6396: FA           PLX 
C2/6397: 60           RTS 

C2/6398 display damage

(For less than 5 targets damaged or healed, use a "cascading" damage display.
 One target's damage/healing numbers will show up a split second after the other's.)
C2/6398: B0 19        BCS $63B3   (Exit function if 5+ targets have damage dealt?
                                   Why the hell not branch to C2/63B4, cut the BCC there,
                                   and cut the "JSR $63B4"s out of function C2/62EF?)
C2/639A: A2 12        LDX #$12
C2/639C: BD D0 33     LDA $33D0,X (Damage Taken)
C2/639F: 1A           INC 
C2/63A0: F0 0D        BEQ $63AF   (If no damage)
C2/63A2: 3A           DEC 
C2/63A3: 8D 2A 3A     STA $3A2A   (Store in final damage)
C2/63A6: 8A           TXA 
C2/63A7: 4A           LSR         (Acc = 0-9 target #)
C2/63A8: EB           XBA         
C2/63A9: 09 0B 00     ORA #$000B  (target # in top of A, 0x0B in bottom?)
C2/63AB: 20 9B 62     JSR $629B   (Copy $3A28-$3A2B variables into ($76) buffer)
C2/63AE: CA           DEX
C2/63AF: CA           DEX
C2/63B1: 10 E9        BPL $639C   (loop for all onscreen targets)
C2/63B3: 60           RTS         (if < 5 targets have damage dealt, Carry will always
                                   be clear here.  either we skipped the LSR above, or
                                   it was done on an even number.)

C2/63B4 display damage simultaneously

(For 5+ targets damaged or healed, have all their damage/healing numbers pop up
 simultaneously.)
C2/63B4: 90 24        BCC $63DA   (exit function if less than 5 targets have damage dealt?)
C2/63B6: 08           PHP 
C2/63B7: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/63B9: A9 03        LDA #$03
C2/63BB: 20 9B 62     JSR $629B   (Copy $3A28-$3A2B variables into ($76) buffer)
C2/63BE: AD 34 3A     LDA $3A34
C2/63C1: EE 34 3A     INC $3A34
C2/63C4: EB           XBA 
C2/63C5: A9 14        LDA #$14
C2/63C7: 20 81 47     JSR $4781
C2/63CA: C2 31        REP #$31    (Set 16-bit Accumulator, 16-bit X and Y, clear Carry)
C2/63CC: 69 CE 2B     ADC #$2BCE
C2/63CF: A8           TAY 
C2/63D0: A2 D0 33     LDX #$33D0
C2/63D3: A9 13 00     LDA #$0013
C2/63D6: 54 7E 7E     MVN $7E,$7E  (copy $33D0 thru $33E3, the damage variables for all
                                    10 targets, to some other memory location)
C2/63D9: 28           PLP 
C2/63DA: 60           RTS 

C2/63D8 copy function

(Copy 8 words (16 bytes) from $A0 to ((7E:3A32) + #$2C6E))
(C1 inspection shows $2C6E to be the area where animation 
scripts are read from. Thus, $3A32 stores the beginning 
offset for the animation script.)
C2/63DB: DA           PHX
C2/63DC: 5A           PHY 
C2/63DD: 08           PHP 
C2/63DE: E2 20        SEP #$20    (Set 8-bit A)
C2/63E0: 7B           TDC 
C2/63E1: AD 32 3A     LDA $3A32
C2/63E4: 48           PHA 
C2/63E5: C2 31        REP #$31    (Set 16-bit A,Y,X)
C2/63E7: 69 6E 2C     ADC #$2C6E
C2/63EA: A8           TAY
C2/63EB: A2 A0 00     LDX #$00A0
C2/63EE: A9 0F 00     LDA #$000F
C2/63F1: 54 7E 7E     MVN #$7E,7E
C2/63F4: E2 30        SEP #$30    (Set 8-bit A,Y,X)
C2/63F6: 68           PLA
C2/63F7: 69 10        ADC #$10
C2/63F9: 8D 32 3A     STA $3A32
C2/63FC: 28           PLP 
C2/63FD: 7A           PLY 
C2/63FE: FA           PLX 
C2/63FF: 60           RTS 

C2/6400 null function

(Zero $A0 through $AF)
C2/6400: DA           PHX
C2/6401: 08           PHP 
C2/6402: C2 20        REP #$20   (set 16-bit accumulator)
C2/6404: A2 06        LDX #$06
C2/6406: 74 A0        STZ $A0,X
C2/6408: 74 A8        STZ $A8,X  (overall: $A0 thru $AF are zeroed out)
C2/640A: CA           DEX 
C2/640B: CA           DEX 
C2/640C: 10 F8        BPL $6406  (loop 4 times)
C2/640E: 28           PLP 
C2/640F: FA           PLX 
C2/6410: 60           RTS 

C2/6411 unknow

C2/6411: DA           PHX
C2/6412: 5A           PHY 
C2/6413: 08           PHP 
C2/6414: E2 20        SEP #$20
C2/6416: C2 11        REP #$11
C2/6418: 48           PHA 
C2/6419: 7B           TDC 
C2/641A: 68           PLA 
C2/641B: C9 02        CMP #$02
C2/641D: D0 06        BNE $6425
C2/641F: A5 B1        LDA $B1
C2/6421: 30 06        BMI $6429
C2/6423: A9 02        LDA #$02
C2/6425: 22 00 00 C1  JSR $C10000
C2/6429: 28           PLP 
C2/642A: 7A           PLY 
C2/642B: FA           PLX 
C2/642C: 60           RTS 

C2/642D monster commands script FA

Monster command script command #$FA
C2/642D: C2 20        REP #$20    (Set 16-bit accumulator)
C2/642F: A5 B8        LDA $B8     (Byte 2 & 3)
C2/6431: 8D 2A 3A     STA $3A2A   (Store in final damage)?
C2/6434: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/6436: A5 B6        LDA $B6     (Byte 0)
C2/6438: EB           XBA 
C2/6439: A9 14        LDA #$14
C2/643B: 4C BF 62     JMP $62BF

C2/643E unknow (unused)

(Well, well, well...  it's a shame that this function is
 apparently never called.)
C2/643E: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/6440: AD 55 1D     LDA $1D55   (get Font color from Configuration)
C2/6443: C9 DE 7B     CMP #$7BDE  (are Red, Green, and Blue all equal
                                   to 30?)
C2/6446: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/6448: D0 1E        BNE $6468   (branch if not desired Font color)
C2/644A: AF 19 42 00  LDA $004219 (Joypad #1 status register)
C2/644E: C9 28        CMP #$28    (are Up and Select pressed, and
                                   only those?)
C2/6450: D0 16        BNE $6468   (branch if not)
C2/6452: A9 02        LDA #$02
C2/6454: 0C 96 3A     TSB $3A96   (set some flag)
C2/6457: D0 0F        BNE $6468   (branch if it was already set)
C2/6459: A9 FF        LDA #$FF
C2/645B: 85 B9        STA $B9
C2/645D: A9 05        LDA #$05
C2/645F: 85 B8        STA $B8
C2/6461: A2 00        LDX #$00
C2/6463: A9 24        LDA #$24
C2/6465: 20 91 4E     JSR $4E91   (queue up something.  you tell me what.)
C2/6468: 60           RTS 

C2/6469 free space

(Blank Space - 919 bytes)
C2/6469: FF FF FF FF
C2/646D: FF FF FF FF
C2/6471: FF FF FF FF
C2/6475: FF FF FF FF
C2/6479: FF FF FF FF
C2/647D: FF FF FF FF
C2/6481: FF FF FF FF
C2/6485: FF FF FF FF
C2/6489: FF FF FF FF
C2/648D: FF FF FF FF
C2/6491: FF FF FF FF
C2/6495: FF FF FF FF
C2/6499: FF FF FF FF
C2/649D: FF FF FF FF
C2/64A1: FF FF FF FF
C2/64A5: FF FF FF FF
C2/64A9: FF FF FF FF
C2/64AD: FF FF FF FF
C2/64B1: FF FF FF FF
C2/64B5: FF FF FF FF
C2/64B9: FF FF FF FF
C2/64BD: FF FF FF FF
C2/64C1: FF FF FF FF
C2/64C5: FF FF FF FF
C2/64C9: FF FF FF FF
C2/64CD: FF FF FF FF
C2/64D1: FF FF FF FF
C2/64D5: FF FF FF FF
C2/64D9: FF FF FF FF
C2/64DD: FF FF FF FF
C2/64E1: FF FF FF FF
C2/64E5: FF FF FF FF
C2/64E9: FF FF FF FF
C2/64ED: FF FF FF FF
C2/64F1: FF FF FF FF
C2/64F5: FF FF FF FF
C2/64F9: FF FF FF FF
C2/64FD: FF FF FF FF
C2/6501: FF FF FF FF
C2/6505: FF FF FF FF
C2/6509: FF FF FF FF
C2/650D: FF FF FF FF
C2/6511: FF FF FF FF
C2/6515: FF FF FF FF
C2/6519: FF FF FF FF
C2/651D: FF FF FF FF
C2/6521: FF FF FF FF
C2/6525: FF FF FF FF
C2/6529: FF FF FF FF
C2/652D: FF FF FF FF
C2/6531: FF FF FF FF
C2/6535: FF FF FF FF
C2/6539: FF FF FF FF
C2/653D: FF FF FF FF
C2/6541: FF FF FF FF
C2/6545: FF FF FF FF
C2/6549: FF FF FF FF
C2/654D: FF FF FF FF
C2/6551: FF FF FF FF
C2/6555: FF FF FF FF
C2/6559: FF FF FF FF
C2/655D: FF FF FF FF
C2/6561: FF FF FF FF
C2/6565: FF FF FF FF
C2/6569: FF FF FF FF
C2/656D: FF FF FF FF
C2/6571: FF FF FF FF
C2/6575: FF FF FF FF
C2/6579: FF FF FF FF
C2/657D: FF FF FF FF
C2/6581: FF FF FF FF
C2/6585: FF FF FF FF
C2/6589: FF FF FF FF
C2/658D: FF FF FF FF
C2/6591: FF FF FF FF
C2/6595: FF FF FF FF
C2/6599: FF FF FF FF
C2/659D: FF FF FF FF
C2/65A1: FF FF FF FF
C2/65A5: FF FF FF FF
C2/65A9: FF FF FF FF
C2/65AD: FF FF FF FF
C2/65B1: FF FF FF FF
C2/65B5: FF FF FF FF
C2/65B9: FF FF FF FF
C2/65BD: FF FF FF FF
C2/65C1: FF FF FF FF
C2/65C5: FF FF FF FF
C2/65C9: FF FF FF FF
C2/65CD: FF FF FF FF
C2/65D1: FF FF FF FF
C2/65D5: FF FF FF FF
C2/65D9: FF FF FF FF
C2/65DD: FF FF FF FF
C2/65E1: FF FF FF FF
C2/65E5: FF FF FF FF
C2/65E9: FF FF FF FF
C2/65ED: FF FF FF FF
C2/65F1: FF FF FF FF
C2/65F5: FF FF FF FF
C2/65F9: FF FF FF FF
C2/65FD: FF FF FF FF
C2/6601: FF FF FF FF
C2/6605: FF FF FF FF
C2/6609: FF FF FF FF
C2/660D: FF FF FF FF
C2/6611: FF FF FF FF
C2/6615: FF FF FF FF
C2/6619: FF FF FF FF
C2/661D: FF FF FF FF
C2/6621: FF FF FF FF
C2/6625: FF FF FF FF
C2/6629: FF FF FF FF
C2/662D: FF FF FF FF
C2/6631: FF FF FF FF
C2/6635: FF FF FF FF
C2/6639: FF FF FF FF
C2/663D: FF FF FF FF
C2/6641: FF FF FF FF
C2/6645: FF FF FF FF
C2/6649: FF FF FF FF
C2/664D: FF FF FF FF
C2/6651: FF FF FF FF
C2/6655: FF FF FF FF
C2/6659: FF FF FF FF
C2/665D: FF FF FF FF
C2/6661: FF FF FF FF
C2/6665: FF FF FF FF
C2/6669: FF FF FF FF
C2/666D: FF FF FF FF
C2/6671: FF FF FF FF
C2/6675: FF FF FF FF
C2/6679: FF FF FF FF
C2/667D: FF FF FF FF
C2/6681: FF FF FF FF
C2/6685: FF FF FF FF
C2/6689: FF FF FF FF
C2/668D: FF FF FF FF
C2/6691: FF FF FF FF
C2/6695: FF FF FF FF
C2/6699: FF FF FF FF
C2/669D: FF FF FF FF
C2/66A1: FF FF FF FF
C2/66A5: FF FF FF FF
C2/66A9: FF FF FF FF
C2/66AD: FF FF FF FF
C2/66B1: FF FF FF FF
C2/66B5: FF FF FF FF
C2/66B9: FF FF FF FF
C2/66BD: FF FF FF FF
C2/66C1: FF FF FF FF
C2/66C5: FF FF FF FF
C2/66C9: FF FF FF FF
C2/66CD: FF FF FF FF
C2/66D1: FF FF FF FF
C2/66D5: FF FF FF FF
C2/66D9: FF FF FF FF
C2/66DD: FF FF FF FF
C2/66E1: FF FF FF FF
C2/66E5: FF FF FF FF
C2/66E9: FF FF FF FF
C2/66ED: FF FF FF FF
C2/66F1: FF FF FF FF
C2/66F5: FF FF FF FF
C2/66F9: FF FF FF FF
C2/66FD: FF FF FF FF
C2/6701: FF FF FF FF
C2/6705: FF FF FF FF
C2/6709: FF FF FF FF
C2/670D: FF FF FF FF
C2/6711: FF FF FF FF
C2/6715: FF FF FF FF
C2/6719: FF FF FF FF
C2/671D: FF FF FF FF
C2/6721: FF FF FF FF
C2/6725: FF FF FF FF
C2/6729: FF FF FF FF
C2/672D: FF FF FF FF
C2/6731: FF FF FF FF
C2/6735: FF FF FF FF
C2/6739: FF FF FF FF
C2/673D: FF FF FF FF
C2/6741: FF FF FF FF
C2/6745: FF FF FF FF
C2/6749: FF FF FF FF
C2/674D: FF FF FF FF
C2/6751: FF FF FF FF
C2/6755: FF FF FF FF
C2/6759: FF FF FF FF
C2/675D: FF FF FF FF
C2/6761: FF FF FF FF
C2/6765: FF FF FF FF
C2/6769: FF FF FF FF
C2/676D: FF FF FF FF
C2/6771: FF FF FF FF
C2/6775: FF FF FF FF
C2/6779: FF FF FF FF
C2/677D: FF FF FF FF
C2/6781: FF FF FF FF
C2/6785: FF FF FF FF
C2/6789: FF FF FF FF
C2/678D: FF FF FF FF
C2/6791: FF FF FF FF
C2/6795: FF FF FF FF
C2/6799: FF FF FF FF
C2/679D: FF FF FF FF
C2/67A1: FF FF FF FF
C2/67A5: FF FF FF FF
C2/67A9: FF FF FF FF
C2/67AD: FF FF FF FF
C2/67B1: FF FF FF FF
C2/67B5: FF FF FF FF
C2/67B9: FF FF FF FF
C2/67BD: FF FF FF FF
C2/67C1: FF FF FF FF
C2/67C5: FF FF FF FF
C2/67C9: FF FF FF FF
C2/67CD: FF FF FF FF
C2/67D1: FF FF FF FF
C2/67D5: FF FF FF FF
C2/67D9: FF FF FF FF
C2/67DD: FF FF FF FF
C2/67E1: FF FF FF FF
C2/67E5: FF FF FF FF
C2/67E9: FF FF FF FF
C2/67ED: FF FF FF FF
C2/67F1: FF FF FF FF
C2/67F5: FF FF FF FF
C2/67F9: FF FF FF FF
C2/67FD: FF FF FF

C2/6800 decompress cinematics block and do selected cinematic

C2/6800: 4C 13 68     JMP $6813
C2/6803: 4C 0C 68     JMP $680C
C2/6806: 4C 1A 68     JMP $681A
C2/6809: 4C 21 68     JMP $6821
C2/680C: 20 28 68     JSR $6828
C2/680F: 5C 00 50 7E  JMP $7E5000 (do title screen cinematic)
C2/6813: 20 28 68     JSR $6828
C2/6816: 5C 03 50 7E  JMP $7E5003 (do opening credits cinematic)
C2/681A: 20 28 68     JSR $6828
C2/681D: 5C 06 50 7E  JMP $7E5006 (do floating island cinematic)
C2/6821: 20 28 68     JSR $6828
C2/6824: 5C 09 50 7E  JMP $7E5009 (do world tearing apart cinematic)
C2/6828: 08           PHP 
C2/6829: C2 30        REP #$30
C2/682B: 48           PHA 
C2/682C: DA           PHX 
C2/682D: 5A           PHY 
C2/682E: 8B           PHB 
C2/682F: 0B           PHD 
C2/6830: C2 10        REP #$10
C2/6832: E2 20        SEP #$20
C2/6834: A9 00        LDA #$00
C2/6836: 48           PHA
C2/6837: AB           PLB 
C2/6838: A2 00 00     LDX #$0000
C2/683B: DA           PHX
C2/683C: 2B           PLD 
C2/683D: A2 00 00     LDX #$0000
C2/6840: 86 00        STX $00
C2/6842: A9 7E        LDA #$7E
C2/6844: 8D 83 21     STA $2183
C2/6847: A0 6C 68     LDY #$686C
C2/684A: 84 F3        STY $F3
C2/684C: A9 C2        LDA #$C2
C2/684E: 85 F5        STA $F5
C2/6850: A0 00 50     LDY #$5000
C2/6853: 84 F6        STY $F6
C2/6855: A9 7E        LDA #$7E
C2/6857: 85 F8        STA $F8
C2/6859: 8B           PHB 
C2/685A: A9 7E        LDA #$7E
C2/685C: 48           PHA 
C2/685D: AB           PLB 
C2/685E: 22 6D FF C2  JSR $C2FF6D
C2/6862: AB           PLB 
C2/6863: C2 30        REP #$30
C2/6865: 2B           PLD 
C2/6866: AB           PLB 
C2/6867: 7A           PLY 
C2/6868: FA           PLX 
C2/6869: 68           PLA 
C2/686A: 28           PLP 
C2/686B: 60           RTS

C2/686C data (compressed)

(Compressed data - format explained in Function C2/FF6D)
(Decompressed data available here)
C2/686C: F4 21  (block is 8692 bytes in length, including control bytes)
C2/686E: FF 4C 0C 50 4C F3 57 4C C4 (control byte + compressed data)
C2/6877: FF 69 4C F2 6C 08 C2 30 48 (control byte + compressed data)
C2/6880: FF DA 5A 8B 0B 20 2F 50 20 (etc.)
C2/6889: FF 7F 50 20 F7 50 20 A8 50
C2/6892: FF 20 43 50 20 4E 50 C2 30
C2/689B: FF 2B AB 7A FA 68 28 6B E2
C2/68A4: FF 20 A9 7E 48 AB A2 00 00
C2/68AD: FB DA 2B 13 00 86 00 20 62 50
C2/68B7: FF 60 A9 F0 8F 00 13 00 22
C2/68C0: FF 04 00 C5 60 A9 8F 8F 00
C2/68C9: FF 21 00 7B 8F 00 42 00 8F
C2/68D2: FD 0B 35 00 0C 42 00 60 A9 5C
C2/68DC: FF 8D 00 15 8D 04 15 A2 33
C2/68E5: FF 72 8E 01 15 A2 64 72 8E
C2/68EE: FF 05 15 A9 7E 8D 03 15 8D
C2/68F7: FF 07 15 60 20 11 77 7B 20
C2/6900: FF 93 50 20 15 78 20 4F 78
C2/6909: FF 20 85 74 20 FA 78 60 8F
C2/6912: DF 02 13 00 A9 10 23 08 A9 02
C2/691C: FB 8F 01 25 20 7B A5 19 30 18
C2/6926: FF 0A AA FC DF 50 A5 06 89
C2/692F: FF 80 D0 08 20 0F 75 20 FD
C2/6938: FF 71 80 E8 A9 FF 8D 00 02
C2/6941: FF A0 0F 00 84 15 A9 00 A0
C2/694A: FF A0 55 20 DC 74 A4 15 F0
C2/6953: FE 95 28 F4 60 AE 51 80 52 97
C2/695D: FF 52 A6 52 E0 52 EC 52 3F
C2/6966: FF 53 77 53 8A 53 9C 53 B5
C2/696F: D7 53 BC 53 86 08 0D 8B 00 31 51
C2/697A: FA 96 20 EE A3 B0 7B A8 85 19 84
C2/6985: F7 25 84 27 6A 08 4E 50 60 55
C2/698F: FF 51 A5 51 00 00 63 10 BD
C2/6998: DF 77 00 00 FF 7F 1B 99 20 06
C2/69A2: FF 53 A2 00 30 A0 65 74 20
C2/69AB: AF 24 73 A2 20 38 31 31 42 39 43
C2/69B6: BF 7B A9 01 20 3A 73 36 09 45
C2/69C0: D9 74 57 19 40 01 35 51 57 11 A0 00
C2/69CC: FF 01 84 25 A0 2C 01 84 15
C2/69D5: FF E6 19 A9 0F 85 32 60 A4
C2/69DE: FF 15 D0 04 A9 FF 85 19 60
C2/69E7: 16 48 09 63 7B 3C 09 40 53 09 3C 09 37 49
C2/69F5: 55 C3 91 11 C0 38 29 40 38 29 60 38 29
C2/6A02: E5 E0 38 29 A0 38 29 B1 01 03 7C A9
C2/6A0E: 09 04 59 09 BA 01 23 E2 21 C3 01 EC 29 CC 01
C2/6A1D: D9 43 E2 21 D5 01 E3 7B E3 11 A9 01
C2/6A29: 1B A0 39 AC 08 A0 3C A5 00 7C 19 14 02
C2/6A36: FD C8 AC 08 C2 20 A9 40 30 9D
C2/6A40: 53 01 37 0D 00 28 3A 60 33 72 C0 33 1A
C2/6A4D: 7E 82 09 12 E6 19 A0 43 04 A6 00
C2/6A58: 97 FF 8F 05 73 00 FF 61 00 82 09 0A
C2/6A64: 9F 20 97 78 A0 1E 1E 12 82 09 35
C2/6A6F: 66 A8 00 C5 53 AD 00 A8 00 31 54 8D 1A
C2/6A7C: 79 AF 94 0A 36 09 83 7B A9 02 64 21
C2/6A88: 4D A3 56 19 A0 4A 79 11 82 09 07 62 02
C2/6A95: F1 F0 A5 00 82 09 7B 01 A0 C0 03 84
C2/6AA1: D1 15 33 09 52 19 E4 09 60 A8 00 DB 76
C2/6AAE: BE 2C 1A 5C 7A 9D 00 35 0D 00 40
C2/6AB9: FF 9D 01 33 A9 A0 9D 01 34
C2/6AC2: 4A E4 42 5F F0 22 90 F8 2A 82 09 33 62 02
C2/6AD0: 0E 73 01 15 A2 00 8E 09 A6 22 2A 13 E4 11
C2/6ADE: C4 37 01 2C 03 08 64 21 42 23 82 09 0E A9
C2/6AEC: EB 40 04 20 0B 01 A5 00 20 BD 5C
C2/6AF7: FE 82 09 0D E6 19 64 31 A9 80
C2/6B01: CF 85 33 A0 A0 D2 02 82 09 08 A0
C2/6B0C: FD E0 B8 1A A5 18 29 03 D0 06
C2/6B16: 2F C2 20 E6 27 5B 1A 02 81 02 87 09
C2/6B22: FD 7B A0 00 60 AA 7C C9 53 CD
C2/6B2C: FF 53 D5 53 A6 1D FE 00 3A
C2/6B35: FF 9E 01 37 A5 33 30 56 A6
C2/6B3E: FF 1D 7B A8 9E 01 38 A6 1D
C2/6B47: FF BD 01 37 18 7D 01 38 20
C2/6B50: FF A5 54 48 AF 12 42 00 29
C2/6B59: 7F 40 F0 F8 A9 08 8F 1B 30 08
C2/6B63: BE D6 03 68 8F 1C 21 00 DF 0B A6
C2/6B6E: FF 1D C2 20 AF 35 21 00 99
C2/6B77: EF 80 41 E2 20 BE 0B 38 18 69
C2/6B81: DF 04 9D 01 38 C8 FF 03 C0 C0
C2/6B8B: FF 00 D0 B6 FE 01 37 38 60
C2/6B94: FD 18 A2 03 35 54 39 54 41 54
C2/6B9E: D6 AB 1B 00 39 B3 03 5B B7 0B A9 10
C2/6BAA: F4 FC 03 BE 9B 0A D5 C3 00 45 99 02
C2/6BB6: F5 45 F2 93 B3 08 24 18 69 40 EB
C2/6BC1: FF A5 00 EB AA BF 6D FE C2
C2/6BCA: BE A2 03 B3 54 B7 54 C1 16 1C A9
C2/6BD5: FB 01 9D 1D 04 18 29 01 F0 0F
C2/6BDF: DE BE 03 00 39 C9 40 B2 00 DA 54
C2/6BEA: F7 FE 00 39 0B 0C A9 40 8F 05
C2/6BF4: DD 42 31 00 04 42 00 A7 04 8F 06
C2/6BFF: F7 42 00 EA CA 0C 64 F2 A0 FC
C2/6C09: FF 00 64 E2 64 E9 64 EA AF
C2/6C12: 7F 15 42 00 85 E8 AF 14 DC 04
C2/6C1C: FD E7 A7 04 C5 E2 90 02 80 07
C2/6C26: FE 2F 02 00 01 80 0C 7B A5 EA
C2/6C30: FF 38 E5 E2 C2 20 49 FF FF
C2/6C39: FF 1A 99 FA 3D A5 E7 18 65
C2/6C42: FF E9 85 E9 E2 20 E6 E2 88
C2/6C4B: F6 10 05 D0 D0 A2 03 3D 55 41 55
C2/6C56: FF 59 55 A0 FF FF 84 10 A0
C2/6C5F: FF 40 00 84 0E A9 7F 85 14
C2/6C68: F2 5F 0B 27 AB 13 86 13 36 C2 20 A5
C2/6C74: FF 27 C9 1F 01 F0 2F C9 00
C2/6C7D: FF 01 B0 24 29 07 00 D0 1F
C2/6C86: FF A5 27 38 E9 08 00 29 F8
C2/6C8F: FF FF 0A 0A 0A 18 69 C0 23
C2/6C98: DB 85 12 50 45 85 10 8E 0B 38 60
C2/6CA3: F3 E2 20 1F 15 0D 0C A4 55 A8 55
C2/6CAE: 4B B2 55 95 1C 0F F8 02 B0 00 0C BE 0B
C2/6CBB: FF 33 85 32 DE 01 33 38 60
C2/6CC4: FA 70 03 32 0D 0C CC 55 D2 55 EB
C2/6CCF: 73 55 20 B6 03 97 0C 80 9D 00 3C 05
C2/6CDB: F7 A9 3E 56 F1 12 20 5F 75 38
C2/6CE5: FD 60 A5 0C 36 F0 17 C9 01 F0
C2/6CEF: BF 07 A6 1D DE 00 36 9E 05 02
C2/6CF9: F7 A0 F9 56 AD 00 E6 36 80 ED
C2/6D03: 7F BD 01 3B C9 FE D0 03 AD 03
C2/6D0D: AB C2 20 C0 03 AA C2 05 75 C6 05 20
C2/6D19: F8 B5 0B B7 05 9A 0C 3A 4C DC 55 7B
C2/6D25: FF E6 34 A5 18 18 65 34 AA
C2/6D2E: FF BF 00 FD C0 60 23 7C 01
C2/6D37: DF 59 56 02 D9 56 1E 26 79 56
C2/6D41: FF 02 99 56 03 B9 56 04 D9
C2/6D4A: FF 56 FE 63 10 DE 66 5B 56
C2/6D53: FF B4 45 2E 35 08 31 E8 2C
C2/6D5C: FF C7 28 A6 24 A5 1C 84 18
C2/6D65: FF 64 14 63 10 BB 21 36 11
C2/6D6E: FF 7F 73 00 00 39 52 D7 45
C2/6D77: DF 51 39 EC 2C E7 44 16 85 20
C2/6D81: EF 84 18 84 14 4D 2E 7B 5A 00
C2/6D8B: FF 00 94 3D 53 35 EE 2C AA
C2/6D94: 1B 24 A5 66 06 64 1C 4D 0E 89 1E 51 0E
C2/6DA1: FF D6 45 00 00 AA 20 A7 20
C2/6DAA: CF 85 1C 43 18 89 2E 89 4E CC 24
C2/6DB5: F8 13 09 B9 9E 51 0E 63 10 AA 7C FD
C2/6DC1: 9F 56 01 57 36 57 AB 13 FE 05 29
C2/6DCC: 5F 03 F0 37 0A AA F1 05 46 DE 06
C2/6DD7: 2E F1 12 E2 20 DA FE 05 FA F8 02 FB 16
C2/6DE4: 77 29 7F 69 28 04 34 A6 1D C4 05
C2/6DEF: BC BE 0B E9 05 F0 05 20 8D C6 05 18
C2/6DFB: FF 60 00 00 4E 57 66 57 4E
C2/6E04: FF 57 7F 57 01 7E 57 01 84
C2/6E0D: 6A 2D 17 91 2D 17 9E 2D 0F FE AB 2D 17
C2/6E1A: D5 B0 2D 17 BD 2D 17 CA 3F 17 00 01
C2/6E26: DF 08 00 4C 35 03 24 07 35 10
C2/6E30: FF 00 60 35 08 10 62 35 03
C2/6E39: F7 08 00 64 6A 07 66 35 08 20
C2/6E43: D5 68 6E 0F 6A 6A 07 6C 77 07 6E 35
C2/6E4F: FE 5D 0F 75 03 10 00 4E 75 08
C2/6E59: 97 00 60 75 6B 07 75 6F 0F 96 07 66
C2/6E65: A9 75 78 07 9A 0F 6A 96 07 6C A3 07 6E
C2/6E72: FF 75 40 A8 40 70 B0 48 68
C2/6E7B: FF A8 70 68 60 A8 80 D0 88
C2/6E84: FF 58 90 A8 98 88 50 58 70
C2/6E8D: FF 60 90 60 10 78 08 C2 30
C2/6E96: FF 48 DA 5A 8B 0B 20 2F 50
C2/6E9F: FF 20 13 58 20 72 58 20 43
C2/6EA8: FD 50 0B 01 C2 30 2B AB 7A FA
C2/6EB2: 77 68 28 6B 5D 00 20 3C 58 69 02
C2/6EBD: F2 72 38 04 7D 28 64 38 FF 61 60 8B
C2/6EC9: FF A9 00 48 AB A9 03 8D 01
C2/6ED2: FF 21 A6 00 8E 02 21 A9 07
C2/6EDB: FF 8D 05 21 A9 78 8D 07 21
C2/6EE4: FF A9 7C 8D 08 21 A9 74 8D
C2/6EED: FF 09 21 8D 0A 21 A9 22 8D
C2/6EF6: FF 0B 21 A9 77 8D 0C 21 7B
C2/6EFF: 6F 8D 1A 21 AB 85 30 AD 58 90 F8
C2/6F0A: FE B2 38 22 0C 00 EE 60 B5 58
C2/6F14: FF 4C 5A 66 5A 70 5A 20 70
C2/6F1D: EF 5C 20 5D 5B 1A 10 22 09 00
C2/6F27: FF EE 22 03 00 EE AB 20 45
C2/6F30: 51 5C 08 01 28 0B 43 61 60 4A 29 80 4A 29
C2/6F3E: F1 A0 4A 29 37 79 BA B9 A9 68 85 39
C2/6F4A: FF A9 48 85 3A A9 78 85 3B
C2/6F53: EF A9 C0 85 3C 70 03 3D A9 90
C2/6F5D: FF 85 3E 64 29 64 2A A0 38
C2/6F66: 7F 00 84 2B 64 37 64 38 72 00
C2/6F70: 7B C0 5F 77 00 7B 20 08 5B B1 02
C2/6F7B: 32 36 01 02 35 01 33 0B 90 64 B1 12 BF 08
C2/6F89: 40 46 01 A7 12 C9 00 46 01 05 1A 44 11 06 3B 13
C2/6F99: BF 31 A0 70 64 A9 03 A8 22 10
C2/6FA3: 24 52 21 ED 00 30 52 21 C3 01 50 52 21 FF 39
C2/6FB2: B2 72 00 27 30 09 72 00 ED 5A 8D 1A 92
C2/6FBF: DE B1 09 7B 9D 01 39 9A 0C 36 A9
C2/6FCA: F9 5A 9C 04 2F 02 A0 FF 9D 00 38
C2/6FD5: 50 F4 02 B6 21 9A 04 BF 01 0A 03 0E 28 C8 19
C2/6FE4: 55 60 CF 61 02 BE 09 07 03 0E 2D C8 19
C2/6FF1: FD 80 CF 19 E6 19 A9 01 85 32
C2/6FFB: 76 63 00 A0 CA (continued at C2/7000)