Final Fantasy VI/ROM map/Assembly C20: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
mNo edit summary
m (Xkeeper moved page Final Fantasy VI:ROM map/Assembly C20 to Final Fantasy VI/ROM map/Assembly C20: normalize subpages and titles)
 
(No difference)

Latest revision as of 02:41, 24 January 2024

This is a sub-page of Final Fantasy VI/ROM map.

C2/0000 unknow

C2/0000: 4C 0C 00     JMP $000C
C2/0003: 4C 1B 11     JMP $111B
C2/0006: 4C 77 0E     JMP $0E77
C2/0009: 4C 30 47     JMP $4730

C2/000C unknow

C2/000C: 08           PHP
C2/000D: E2 30        SEP #$30
C2/000F: A9 7E        LDA #$7E
C2/0011: 48           PHA 
C2/0012: AB           PLB 
C2/0013: 20 1E 26     JSR $261E
C2/0016: 20 ED 23     JSR $23ED
C2/0019: E6 BE        INC $BE    (increment RNG table index)
C2/001B: AD 02 34     LDA $3402  (Get the number of turns due to Quick)
C2/001E: D0 03        BNE $0023  (Branch if not zero; either we are in a regular (i.e. non-Quick)
                                  turn, or else we are in the process of executing Quick turns.
                                  Only if the final Quick turn just passed will we do the next line.
                                  Either way, we still need to decrement the number of Quick turns.)
C2/0020: CE 02 34     DEC $3402  (Decrement the number of turns due to Quick)
C2/0023: A9 01        LDA #$01
C2/0025: 20 11 64     JSR $6411
C2/0028: 20 95 20     JSR $2095
C2/002B: AD 58 3A     LDA $3A58  (was anybody's main menu flagged to be redrawn right away?)
C2/002E: F0 03        BEQ $0033  (branch if not)
C2/0030: 20 CC 00     JSR $00CC  (redraw the applicable menus)
C2/0033: AD 0A 34     LDA $340A
C2/0036: C9 FF        CMP #$FF
C2/0038: F0 03        BEQ $003D
C2/003A: 4C 63 21     JMP $2163
C2/003D: A9 04        LDA #$04
C2/003F: 1C 46 3A     TRB $3A46
C2/0042: F0 05        BEQ $0049
C2/0044: 20 91 0A     JSR $0A91
C2/0047: 80 D0        BRA $0019
C2/0049: AE 07 34     LDX $3407
C2/004C: 10 11        BPL $005F
C2/004E: AE 68 3A     LDX $3A68
C2/0051: EC 69 3A     CPX $3A69
C2/0054: F0 0C        BEQ $0062
C2/0056: EE 68 3A     INC $3A68
C2/0059: BD 20 39     LDA $3920,X
C2/005C: 30 F0        BMI $004E
C2/005E: AA           TAX 
C2/005F: 4C 7B 4B     JMP $4B7B
C2/0062: AD 3A 3A     LDA $3A3A
C2/0065: 2D 2F 2F     AND $2F2F
C2/0068: F0 05        BEQ $006F
C2/006A: 1C 2F 2F     TRB $2F2F
C2/006D: 80 AA        BRA $0019
C2/006F: A9 20        LDA #$20
C2/0071: 14 B0        TRB $B0
C2/0073: F0 08        BEQ $007D
C2/0075: 20 73 5C     JSR $5C73
C2/0078: A9 06        LDA #$06
C2/007A: 20 11 64     JSR $6411
C2/007D: A9 04        LDA #$04
C2/007F: 14 B0        TRB $B0
C2/0081: 20 ED 47     JSR $47ED
C2/0084: A9 FF        LDA #$FF
C2/0086: A2 03        LDX #$03
C2/0088: 9D FC 33     STA $33FC,X
C2/008B: CA           DEX 
C2/008C: 10 FA        BPL $0088
C2/008E: A9 01        LDA #$01
C2/0090: 14 B1        TRB $B1
C2/0092: AE 64 3A     LDX $3A64  (get position of next Wait Queue slot to read)
C2/0095: EC 65 3A     CPX $3A65  (does it match position of the next available [unused]
                                  queue slot?  iow, have we read through the end of queue?)
C2/0098: F0 0C        BEQ $00A6  (if so, branch)
C2/009A: EE 64 3A     INC $3A64    (increment next Wait Queue position)
C2/009D: BD 20 37     LDA $3720,X  (see who's in line at current position)
C2/00A0: 30 F0        BMI $0092    (if it's null entry, skip it and check next one)
C2/00A2: AA           TAX 
C2/00A3: 4C 88 21     JMP $2188
C2/00A6: AE 06 34     LDX $3406
C2/00A9: 10 17        BPL $00C2
C2/00AB: AE 66 3A     LDX $3A66  (get position of next Action Queue slot to read)
C2/00AE: EC 67 3A     CPX $3A67  (does it match position of the next available [unused]
                                  queue slot?  iow, have we read through the end of queue?)
C2/00B1: D0 06        BNE $00B9  (if not, branch)
C2/00B3: 9C 95 3A     STZ $3A95
C2/00B6: 4C 19 00     JMP $0019
C2/00B9: EE 66 3A     INC $3A66    (increment next Action Queue position)
C2/00BC: BD 20 38     LDA $3820,X  (see who's in line at current position)
C2/00BF: 30 EA        BMI $00AB    (if it's null entry, which can happen from Palidor
                                    and who knows what else, skip it and check next one)
C2/00C1: AA           TAX 
C2/00C2: 4C F9 00     JMP $00F9
C2/00C5: A9 09        LDA #$09
C2/00C7: 20 11 64     JSR $6411
C2/00CA: 28           PLP 
C2/00CB: 6B           RTL 

C2/00CC redraw main menus of characters

(Will keep grayed versus white commands up-to-date.)
C2/00CC: A2 06        LDX #$06
C2/00CE: BD 18 30     LDA $3018,X
C2/00D1: 1C 58 3A     TRB $3A58    (clear flag to redraw this character's menu
                                    [note that switching between characters with
                                    X and Y will still redraw])
C2/00D4: F0 09        BEQ $00DF    (branch if it hadn't been set)
C2/00D6: 86 10        STX $10
C2/00D8: 46 10        LSR $10
C2/00DA: A9 0B        LDA #$0B
C2/00DC: 20 11 64     JSR $6411    (this must be responsible for the menu redrawing)
C2/00DF: CA           DEX 
C2/00E0: CA           DEX 
C2/00E1: 10 EB        BPL $00CE    (loop for all 4 party members)
C2/00E3: 60           RTS 

C2/00E4 unknow

C2/00E4: 0C 2C 3F     TSB $3F2C    (set "Jumping" flag for whomever is held in A)
C2/00E7: E2 20        SEP #$20     (Set 8-bit Accumulator)
C2/00E9: BD A0 3A     LDA $3AA0,X
C2/00EC: 09 08        ORA #$08
C2/00EE: 29 DF        AND #$DF
C2/00F0: 9D A0 3A     STA $3AA0,X  ($3AA0: turn on bit 3 and turn off bit 5)
C2/00F3: 9E B5 3A     STZ $3AB5,X  
C2/00F6: 4C 66 4E     JMP $4E66

C2/00F9 unknow

C2/00F9: 38           SEC
C2/00FA: 6E 06 34     ROR $3406   (set top bit of $3406)
C2/00FD: F4 18 00     PEA $0018
C2/0100: A9 12        LDA #$12
C2/0102: 85 B5        STA $B5 
C2/0104: 8D 7C 3A     STA $3A7C
C2/0107: BD CC 32     LDA $32CC,X
C2/010A: 30 77        BMI $0183
C2/010C: 0A           ASL 
C2/010D: A8           TAY 
C2/010E: B9 20 34     LDA $3420,Y
C2/0111: C9 12        CMP #$12   
C2/0113: D0 03        BNE $0118   (Branch if not Mimic)
C2/0115: 20 D9 01     JSR $01D9
C2/0118: 38           SEC 
C2/0119: 20 76 02     JSR $0276
C2/011C: C9 1F        CMP #$1F    (is the command Counterattack?)
C2/011E: D0 1E        BNE $013E   (branch if not)
C2/0120: 20 01 03     JSR $0301
C2/0123: AD 97 3A     LDA $3A97
C2/0126: D0 0C        BNE $0134   (branch if in the Colosseum)
C2/0128: BD 95 33     LDA $3395,X
C2/012B: 10 07        BPL $0134   (branch if the monster is Charmed)
C2/012D: BD E5 3E     LDA $3EE5,X
C2/0130: 89 30        BIT #$30
C2/0132: F0 05        BEQ $0139   (Branch if not Berserk or Muddled)
C2/0134: 20 34 06     JSR $0634   (Picks random command for monsters)
C2/0137: 80 C7        BRA $0100
C2/0139: 20 DC 02     JSR $02DC   (Pick command for monster)
C2/013C: 80 C2        BRA $0100
C2/013E: C9 16        CMP #$16    (is the command Jump?)
C2/0140: D0 0C        BNE $014E   (branch if not)
C2/0142: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0144: BD 18 30     LDA $3018,X
C2/0147: 1C 2C 3F     TRB $3F2C   (clear the monster's "Jumping" flag)
C2/014A: F0 98        BEQ $00E4   (if it hadn't been set, we're currently initiating a
                                   jump rather than landing from one, so go set the
                                   flag and do some other preparation.)
C2/014C: E2 20        SEP #$20
C2/014E: BD CC 32     LDA $32CC,X
C2/0151: A8           TAY 
C2/0152: B9 84 31     LDA $3184,Y
C2/0155: DD CC 32     CMP $32CC,X
C2/0158: D0 13        BNE $016D
C2/015A: A9 80        LDA #$80
C2/015C: 14 B1        TRB $B1
C2/015E: A9 FF        LDA #$FF
C2/0160: EC 04 34     CPX $3404   (Is this target under the influence of Quick?)
C2/0163: D0 08        BNE $016D   (Branch if not)
C2/0165: CE 02 34     DEC $3402   (Decrement the number of turns due to Quick)
C2/0168: D0 03        BNE $016D   (Branch if this was not the last Quick turn)
C2/016A: 8D 04 34     STA $3404   (If it was, store an #$FF (empty) in Quick's target byte)
C2/016D: EB           XBA 
C2/016E: BD A0 3A     LDA $3AA0,X
C2/0171: 89 50        BIT #$50    
C2/0173: F0 05        BEQ $017A   (branch if bits 4 and 6 both unset)
C2/0175: A9 80        LDA #$80
C2/0177: 4C AB 5B     JMP $5BAB   (set bit 7 of $3AA1,X)
C2/017A: A9 FF        LDA #$FF
C2/017C: 99 84 31     STA $3184,Y
C2/017F: EB           XBA 
C2/0180: 9D CC 32     STA $32CC,X
C2/0183: BD A0 3A     LDA $3AA0,X
C2/0186: 29 D7        AND #$D7     
C2/0188: 09 40        ORA #$40
C2/018A: 9D A0 3A     STA $3AA0,X  (turn off bits 3 and 5.  turn on bit 6.)
C2/018D: 4A           LSR 
C2/018E: 90 16        BCC $01A6
C2/0190: BD 04 32     LDA $3204,X
C2/0193: 09 04        ORA #$04
C2/0195: 9D 04 32     STA $3204,X
C2/0198: BD 05 32     LDA $3205,X
C2/019B: 09 80        ORA #$80
C2/019D: 9D 05 32     STA $3205,X
C2/01A0: 20 D3 13     JSR $13D3
C2/01A3: 20 1E 02     JSR $021E
C2/01A6: A9 A0        LDA #$A0
C2/01A8: 04 B0        TSB $B0
C2/01AA: A9 10        LDA #$10
C2/01AC: 1C 46 3A     TRB $3A46
C2/01AF: D0 06        BNE $01B7
C2/01B1: BD CC 32     LDA $32CC,X
C2/01B4: 1A           INC 
C2/01B5: D0 1E        BNE $01D5
C2/01B7: BD A0 3A     LDA $3AA0,X
C2/01BA: 89 08        BIT #$08
C2/01BC: D0 08        BNE $01C6
C2/01BE: FE 19 32     INC $3219,X
C2/01C1: D0 03        BNE $01C6
C2/01C3: DE 19 32     DEC $3219,X
C2/01C6: A9 FF        LDA #$FF
C2/01C8: 9D 2C 32     STA $322C,X
C2/01CB: 9E B5 3A     STZ $3AB5,X
C2/01CE: A9 80        LDA #$80
C2/01D0: 14 B0        TRB $B0
C2/01D2: 4C 67 02     JMP $0267
C2/01D5: 8E 06 34     STX $3406
C2/01D8: 60           RTS 

C2/01D9 mimic related

C2/01D9: AD 28 3F     LDA $3F28   (16h if last character command was Jump,12h if it's a different command)
C2/01DC: C9 16        CMP #$16
C2/01DE: D0 11        BNE $01F1   (branch if not Jump)
C2/01E0: C2 20        REP #$20
C2/01E2: AD 28 3F     LDA $3F28
C2/01E5: 99 20 34     STA $3420,Y
C2/01E8: AD 2A 3F     LDA $3F2A
C2/01EB: 99 20 35     STA $3520,Y
C2/01EE: E2 20        SEP #$20
C2/01F0: 60           RTS 

C2/01F1 unknow

C2/01F1: C2 20        REP #$20
C2/01F3: AD 20 3F     LDA $3F20
C2/01F6: 99 20 34     STA $3420,Y
C2/01F9: AD 22 3F     LDA $3F22
C2/01FC: 99 20 35     STA $3520,Y
C2/01FF: E2 20        SEP #$20
C2/0201: AD 24 3F     LDA $3F24
C2/0204: C9 12        CMP #$12
C2/0206: F0 D0        BEQ $01D8
C2/0208: C2 20        REP #$20
C2/020A: AD 24 3F     LDA $3F24
C2/020D: 8D 7A 3A     STA $3A7A
C2/0210: AD 26 3F     LDA $3F26
C2/0213: 85 B8        STA $B8
C2/0215: E2 20        SEP #$20
C2/0217: A9 40        LDA #$40
C2/0219: 04 B1        TSB $B1
C2/021B: 4C CB 4E     JMP $4ECB

C2/021E save last attack to be used by mimic command

C2/021E: DA           PHX 
C2/021F: 08           PHP 
C2/0220: E0 08        CPX #$08
C2/0222: B0 40        BCS $0264    (branch if it's a monster taking this turn)
C2/0224: AD 7C 3A     LDA $3A7C
C2/0227: C9 1E        CMP #$1E
C2/0229: B0 39        BCS $0264    (branch if not a normal character command.  iow, Roulette or a counterattack)
C2/022B: 0A           ASL 
C2/022C: AA           TAX 
C2/022D: BF 00 FE CF  LDA $CFFE00,X  (get command data)
C2/0231: 89 02        BIT #$02
C2/0233: F0 2F        BEQ $0264    (branch if this command can't be Mimicked)
C2/0235: A9 12        LDA #$12
C2/0237: 8D 28 3F     STA $3F28    (indicate to Mimic that the command is something other than Jump?)
C2/023A: AD 7C 3A     LDA $3A7C
C2/023D: C9 17        CMP #$17
C2/023F: F0 15        BEQ $0256    (branch if command is X-Magic)
C2/0241: A9 12        LDA #$12
C2/0243: 8D 24 3F     STA $3F24    (Last attack (second attack w/ Gem Box) (for use by Mimic).
C2/0246: C2 20        REP #$20
C2/0248: AD 7C 3A     LDA $3A7C
C2/024B: 8D 20 3F     STA $3F20    (Last attack (for use by Mimic))
C2/024E: AD 30 3A     LDA $3A30
C2/0251: 8D 22 3F     STA $3F22    (Last targets (for use by Mimic))
C2/0254: 80 0E        BRA $0264
C2/0256: C2 20        REP #$20
C2/0258: AD 7C 3A     LDA $3A7C
C2/025B: 8D 24 3F     STA $3F24    (Last attack (second attack w/ Gem Box) (for use by Mimic))
C2/025E: AD 30 3A     LDA $3A30
C2/0261: 8D 26 3F     STA $3F26    (Last targets (second attack w/ Gem Box) (for use by Mimic))
C2/0264: 28           PLP 
C2/0265: FA           PLX 
C2/0266: 60           RTS 

C2/0267 unknow

C2/0267: A9 0D        LDA #$0D
C2/0269: 8D 6E 2D     STA $2D6E
C2/026C: A9 FF        LDA #$FF
C2/026E: 8D 72 2D     STA $2D72
C2/0271: A9 04        LDA #$04
C2/0273: 4C 11 64     JMP $6411

C2/0276 unknow

C2/0276: 08           PHP 
C2/0277: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0279: B9 20 35     LDA $3520,Y
C2/027C: 85 B8        STA $B8
C2/027E: B9 20 34     LDA $3420,Y
C2/0281: 8D 7C 3A     STA $3A7C
C2/0284: 85 B5        STA $B5
C2/0286: 28           PLP 
C2/0287: 48           PHA 
C2/0288: 90 10        BCC $029A
C2/028A: C9 1D        CMP #$1D
C2/028C: B0 0C        BCS $029A   (Branch if command is MagiTek or a non-character command?)
C2/028E: BD 18 30     LDA $3018,X
C2/0291: 1C 4A 3A     TRB $3A4A
C2/0294: F0 04        BEQ $029A
C2/0296: 64 B8        STZ $B8
C2/0298: 64 B9        STZ $B9
C2/029A: B9 20 36     LDA $3620,Y
C2/029D: 8D 4C 3A     STA $3A4C    (save actual MP cost to caster)
C2/02A0: BD E4 3E     LDA $3EE4,X
C2/02A3: 89 20        BIT #$20    (Check for Imp Status)
C2/02A5: F0 33        BEQ $02DA   (If not imp)
C2/02A7: A5 B5        LDA $B5     (get command)
C2/02A9: C9 1E        CMP #$1E
C2/02AB: B0 2D        BCS $02DA   (branch if not character command)
C2/02AD: DA           PHX 
C2/02AE: 0A           ASL 
C2/02AF: AA           TAX 
C2/02B0: BF 00 FE CF  LDA $CFFE00,X  (get command data)
C2/02B4: FA           PLX 
C2/02B5: 89 04        BIT #$04
C2/02B7: D0 21        BNE $02DA   (branch if command is supported while Imped)
C2/02B9: 9C 4C 3A     STZ $3A4C   (zero actual MP cost to caster)
C2/02BC: DA           PHX 
C2/02BD: 7B           TDC         (clear 16-bit A)
C2/02BE: E0 08        CPX #$08    (set Carry if monster attacker)
C2/02C0: 2A           ROL         
C2/02C1: AA           TAX         (move Carry into X)
C2/02C2: B5 B8        LDA $B8,X   (get targets from $B8 or $B9)
C2/02C4: 3D 40 3A     AND $3A40,X (characters acting as enemies)
C2/02C7: 95 B8        STA $B8,X   (remove all targets who weren't members of opposition)
C2/02C9: C2 20        REP #$20
C2/02CB: 9C 7C 3A     STZ $3A7C
C2/02CE: 64 B5        STZ $B5     (zero out command, making it Fight?)
C2/02D0: A5 B8        LDA $B8     (get all targets of attack)
C2/02D2: 20 2A 52     JSR $522A   (pick one at random)
C2/02D5: 85 B8        STA $B8
C2/02D7: E2 20        SEP #$20
C2/02D9: FA           PLX 
C2/02DA: 68           PLA 
C2/02DB: 60           RTS 

C2/02DC unknow

C2/02DC: C2 20        REP #$20
C2/02DE: 9C 98 3A     STZ $3A98
C2/02E1: BD 54 32     LDA $3254,X
C2/02E4: 85 F0        STA $F0
C2/02E6: BD 0C 3D     LDA $3D0C,X
C2/02E9: 85 F2        STA $F2
C2/02EB: BD 40 32     LDA $3240,X
C2/02EE: 85 F4        STA $F4
C2/02F0: 18           CLC 
C2/02F1: 20 2F 1A     JSR $1A2F
C2/02F4: A5 F2        LDA $F2
C2/02F6: 9D 0C 3D     STA $3D0C,X
C2/02F9: E2 20        SEP #$20
C2/02FB: A5 F5        LDA $F5
C2/02FD: 9D 40 32     STA $3240,X
C2/0300: 60           RTS 

C2/0301 unknow

C2/0301: BD CC 32     LDA $32CC,X
C2/0304: 30 15        BMI $031B
C2/0306: 5A           PHY 
C2/0307: A8           TAY 
C2/0308: B9 84 31     LDA $3184,Y
C2/030B: DD CC 32     CMP $32CC,X
C2/030E: D0 02        BNE $0312
C2/0310: A9 FF        LDA #$FF
C2/0312: 9D CC 32     STA $32CC,X
C2/0315: A9 FF        LDA #$FF
C2/0317: 99 84 31     STA $3184,Y
C2/031A: 7A           PLY 
C2/031B: 60           RTS 

C2/031C unknow

C2/031C: 64 B8        STZ $B8
C2/031E: 64 B9        STZ $B9
C2/0320: FE 2C 32     INC $322C,X
C2/0323: F0 03        BEQ $0328
C2/0325: DE 2C 32     DEC $322C,X  (if Time to Wait is FFh, set it 0)
C2/0328: 20 41 0A     JSR $0A41
C2/032B: BD 4C 3E     LDA $3E4C,X
C2/032E: 29 FA        AND #$FA
C2/0330: 9D 4C 3E     STA $3E4C,X  (Clear Retort and Runic)
C2/0333: E0 08        CPX #$08
C2/0335: 90 0D        BCC $0344    (branch if character)
C2/0337: BD CC 32     LDA $32CC,X
C2/033A: 10 1B        BPL $0357
C2/033C: A9 1F        LDA #$1F
C2/033E: 8D 7A 3A     STA $3A7A
C2/0341: 4C CB 4E     JMP $4ECB

C2/0344 unknow

C2/0344: BD 18 30     LDA $3018,X
C2/0347: 1C 4A 3A     TRB $3A4A
C2/034A: BD 55 32     LDA $3255,X
C2/034D: 30 03        BMI $0352
C2/034F: 4C DC 02     JMP $02DC

C2/0352 unknow

C2/0352: BD CC 32     LDA $32CC,X
C2/0355: 30 24        BMI $037B
C2/0357: 48           PHA 
C2/0358: 0A           ASL 
C2/0359: A8           TAY 
C2/035A: C2 20        REP #$20
C2/035C: B9 20 35     LDA $3520,Y
C2/035F: 85 B8        STA $B8
C2/0361: B9 20 34     LDA $3420,Y
C2/0364: 20 E4 03     JSR $03E4
C2/0367: A5 B8        LDA $B8
C2/0369: 99 20 35     STA $3520,Y
C2/036C: E2 20        SEP #$20
C2/036E: 68           PLA 
C2/036F: A8           TAY 
C2/0370: D9 84 31     CMP $3184,Y
C2/0373: F0 05        BEQ $037A
C2/0375: B9 84 31     LDA $3184,Y
C2/0378: 80 DD        BRA $0357
C2/037A: 60           RTS 

C2/037B unknow

C2/037B: BD F8 3E     LDA $3EF8,X
C2/037E: 4A           LSR 
C2/037F: B0 56        BCS $03D7   (Branch if Dance status)
C2/0381: BD F9 3E     LDA $3EF9,X
C2/0384: 4A           LSR 
C2/0385: B0 47        BCS $03CE   (Branch if Rage status)
C2/0387: BD E4 3E     LDA $3EE4,X
C2/038A: 89 08        BIT #$08    
C2/038C: D0 38        BNE $03C6   (Branch if M-Tek Status)
C2/038E: 20 20 04     JSR $0420
C2/0391: C9 17        CMP #$17
C2/0393: D0 1B        BNE $03B0   (Branch if not X-Magic)
C2/0395: 48           PHA 
C2/0396: EB           XBA 
C2/0397: 48           PHA 
C2/0398: 48           PHA 
C2/0399: 9B           TXY 
C2/039A: 20 1A 05     JSR $051A   (Pick another spell)
C2/039D: 83 01        STA $01,S
C2/039F: 68           PLA 
C2/03A0: EB           XBA 
C2/03A1: A9 02        LDA #$02
C2/03A3: 20 E4 03     JSR $03E4
C2/03A6: 20 CB 4E     JSR $4ECB
C2/03A9: 64 B8        STZ $B8
C2/03AB: 64 B9        STZ $B9
C2/03AD: 68           PLA 
C2/03AE: EB           XBA 
C2/03AF: 68           PLA 
C2/03B0: 20 B9 03     JSR $03B9
C2/03B3: 20 E4 03     JSR $03E4
C2/03B6: 4C CB 4E     JMP $4ECB

C2/03B9 swap roulette to enemy roulette

C2/03B9: 08           PHP
C2/03BA: C2 20        REP #$20
C2/03BC: C9 0C 8C     CMP #$8C0C  (is the command Lore and the attack Roulette?)
C2/03BF: D0 03        BNE $03C4   (branch if not)
C2/03C1: A9 1E 8C     LDA #$8C1E  (set command to Enemy Roulette, keep attack as Roulette)
C2/03C4: 28           PLP
C2/03C5: 60           RTS

C2/03C6 unknow

C2/03C6: 20 84 05     JSR $0584
C2/03C9: EB           XBA 
C2/03CA: A9 1D        LDA #$1D
C2/03CC: 80 10        BRA $03DE
C2/03CE: 9B           TXY
C2/03CF: 20 D1 05     JSR $05D1  (Picks a Rage [when Muddled/Berserked/etc], and picks the Rage move)
C2/03D2: EB           XBA 
C2/03D3: A9 10        LDA #$10
C2/03D5: 80 07        BRA $03DE
C2/03D7: 9B           TXY
C2/03D8: 20 9C 05     JSR $059C
C2/03DB: EB           XBA 
C2/03DC: A9 13        LDA #$13
C2/03DE: 20 E4 03     JSR $03E4
C2/03E1: 4C CB 4E     JMP $4ECB

C2/03E4 unknow

C2/03E4: 08           PHP
C2/03E5: E2 30        SEP #$30       (Set 8-bit A,X, & Y)
C2/03E7: 8D 7A 3A     STA $3A7A
C2/03EA: EB           XBA 
C2/03EB: 8D 7B 3A     STA $3A7B
C2/03EE: EB           XBA 
C2/03EF: C9 1E        CMP #$1E
C2/03F1: B0 2B        BCS $041E      (branch if command is 1Eh or above.. i.e. it's enemy Roulette or a counterattack)
C2/03F3: 48           PHA 
C2/03F4: DA           PHX 
C2/03F5: AA           TAX 
C2/03F6: BF 7B 06 C2  LDA $C2067B,X  (get command's "time to wait")
C2/03FA: FA           PLX 
C2/03FB: 18           CLC 
C2/03FC: 7D 2C 32     ADC $322C,X    (add it to character's existing "time to wait")
C2/03FF: B0 03        BCS $0404
C2/0401: 1A           INC 
C2/0402: D0 02        BNE $0406
C2/0404: A9 FF        LDA #$FF
C2/0406: 3A           DEC            (if sum overflowed or equalled FFh, set it to FEh)
C2/0407: 9D 2C 32     STA $322C,X    (update time to wait)
C2/040A: 68           PLA 
C2/040B: 20 D3 26     JSR $26D3
C2/040E: A9 04        LDA #$04
C2/0410: 14 BA        TRB $BA       (Clear "Don't retarget if target invalid")
C2/0412: C2 20        REP #$20
C2/0414: A5 B8        LDA $B8
C2/0416: D0 06        BNE $041E     (branch if there are already targets)
C2/0418: 9C 4E 3A     STZ $3A4E
C2/041B: 20 7E 58     JSR $587E     (targeting function)
C2/041E: 28           PLP 
C2/041F: 60           RTS 

C2/0420 pick action if berserked, zombied, muddled, charmed or in the colosseum

C2/0420: 8A           TXA
C2/0421: EB           XBA 
C2/0422: A9 06        LDA #$06
C2/0424: 20 81 47     JSR $4781    (X * 6)
C2/0427: A8           TAY 
C2/0428: 64 FE        STZ $FE      (save Fight as Command 5)
C2/042A: 64 FF        STZ $FF      
C2/042C: B9 2E 20     LDA $202E,Y  (get Command 1)
C2/042F: 85 F6        STA $F6
C2/0431: B9 31 20     LDA $2031,Y  (get Command 2)
C2/0434: 85 F8        STA $F8
C2/0436: B9 34 20     LDA $2034,Y  (get Command 3)
C2/0439: 85 FA        STA $FA
C2/043B: B9 37 20     LDA $2037,Y  (get Command 4)
C2/043E: 85 FC        STA $FC
C2/0440: A9 05        LDA #$05     (indicate 5 valid commands to choose from)
C2/0442: 85 F5        STA $F5
C2/0444: BD E5 3E     LDA $3EE5,X  (Status byte 2)
C2/0447: 0A           ASL 
C2/0448: 0A           ASL 
C2/0449: 85 F4        STA $F4      (Bit 7 = Muddled, Bit 6 = Berserk, etc)
C2/044B: 0A           ASL 
C2/044C: 10 04        BPL $0452    (If no Berserk status)
C2/044E: 64 F4        STZ $F4      (Clear $F4, then skip Charm and Colosseum checks if Berserked)
C2/0450: 80 0C        BRA $045E    
C2/0452: BD 95 33     LDA $3395,X  (Which target Charmed you)
C2/0455: 49 80        EOR #$80     (FFh indicates no Charmer, so Bit 7 will now be set if there IS a Charmer)
C2/0457: 04 F4        TSB $F4
C2/0459: AD 97 3A     LDA $3A97    (Top bit indicates Colosseum battle?)
C2/045C: 04 F4        TSB $F4
(Note that Berserk status will override Muddle/Charm/Colosseum for purposes of
 determining whether we choose from the C2/04D0 or the C2/04D4 command list.
 In contrast, Zombie will not; Charm/Colosseum/Muddle override it.)
C2/045E: 9B           TXY          (Y now points to the attacker who is taking this turn)
C2/045F: DA           PHX 
C2/0460: A2 06        LDX #$06       (start checking 4th command slot)
C2/0462: DA           PHX            (save slot position)
C2/0463: B5 F6        LDA $F6,X
C2/0465: 48           PHA            (save command)
C2/0466: 30 1A        BMI $0482      (branch if slot empty)
C2/0468: 18           CLC            (clear Carry)
C2/0469: 20 17 52     JSR $5217      (X = A DIV 8, A = 2 ^ (A MOD 8) )
C2/046C: 3F D0 04 C2  AND $C204D0,X  (is command allowed when Muddled/Charmed/Colosseum?)
C2/0470: F0 10        BEQ $0482      (branch if not)
C2/0472: A5 F4        LDA $F4
C2/0474: 30 12        BMI $0488      (Branch if Muddled/Charmed/Colosseum but not Berserked)
C2/0476: A3 01        LDA $01,S      (get command)
C2/0478: 18           CLC 
C2/0479: 20 17 52     JSR $5217      (X = A DIV 8, A = 2 ^ (A MOD 8) )
C2/047C: 3F D4 04 C2  AND $C204D4,X  (is command allowed when Berserked/Zombied?)
C2/0480: D0 06        BNE $0488      (branch if so)
C2/0482: A9 FF        LDA #$FF 
C2/0484: 83 01        STA $01,S      (replace command on stack with Empty entry)
C2/0486: C6 F5        DEC $F5        (decrement number of valid commands)
C2/0488: 7B           TDC            (clear 16-bit A)
C2/0489: A3 01        LDA $01,S      (get current command)

(Loop below sees if our current command is one that requires special code to
 work with Muddle/Charm/Colosseum/Berserk/Zombie.  If it is, a special function
 is called for the command.)

C2/048B: A2 08        LDX #$08
C2/048D: DF D8 04 C2  CMP $C204D8,X  (does our current command match one from table?)
C2/0491: D0 06        BNE $0499      (if not, compare it to a second command in this loop iteration)
C2/0493: FC E2 04     JSR ($04E2,X)  (if it does, call the special code used by that command)
C2/0496: EB           XBA            (put attack/spell # in top of A)
C2/0497: 80 10        BRA $04A9      (exit loop, as we found our command)
C2/0499: DF D9 04 C2  CMP $C204D9,X  (does our current command match one from table?)
C2/049D: D0 06        BNE $04A5      (if not, our current command didn't match either
                                      compared one.  so move to new pair of commands
                                      in table, and repeat loop)
C2/049F: FC EC 04     JSR ($04EC,X)  (if it did match, call the special code used
                                      by that command)
C2/04A2: EB           XBA            (put attack/spell # in top of A)
C2/04A3: 80 04        BRA $04A9      (exit loop, as we found our command)
C2/04A5: CA           DEX 
C2/04A6: CA           DEX 
C2/04A7: 10 E4        BPL $048D     (Loop to compare current command to all 10 commands
                                     that utilize special code.
                                     If this loop doesn't exit before X becomes negative,
                                     that means our current command has no special function,
                                     and the Attack # in the top half of A will be zero.)
C2/04A9: 68           PLA           (get command # from stack)
C2/04AA: FA           PLX           (get command slot from stack)
C2/04AB: 95 F6        STA $F6,X     (save command # in current command slot)
C2/04AD: EB           XBA 
C2/04AE: 95 F7        STA $F7,X     (save attack/spell # corresponding to that attack)
C2/04B0: CA           DEX 
C2/04B1: CA           DEX 
C2/04B2: 10 AE        BPL $0462     (loop for first 4 command slots)

(Fight has been put in the 5th command slot.  Any valid commands, with their
 accompanying attack/spell numbers, have been established for slots 1 thru 4.
 Now we shall randomly pick from those commands.  Each slot should have equal
 probability of being chosen.)

C2/04B4: A5 F5        LDA $F5     (# of valid command slots)
C2/04B6: 20 65 4B     JSR $4B65   (RNG: 0 to A - 1 .  we're randomly picking a command)
C2/04B9: A8           TAY         
C2/04BA: A2 08        LDX #$08    (start pointing to Command slot 5)
C2/04BC: B5 F6        LDA $F6,X
C2/04BE: 30 03        BMI $04C3   (if that command slot is Empty, move to next one)
C2/04C0: 88           DEY         (only decrement when on a valid command slot)
C2/04C1: 30 07        BMI $04CA   (If Y is negative, we've found our Nth valid command
                                   [starting with the last valid command and counting
                                   backward], where N is the number returned from the
                                   RNG plus 1.
                                   This is what we wanted, so branch.)

C2/04C3: CA           DEX 
C2/04C4: CA           DEX 
C2/04C5: 10 F5        BPL $04BC   (loop for all 5 command slots)
C2/04C7: 7B           TDC         (clear 16-bit A)
C2/04C8: 80 04        BRA $04CE   (clean up stack and exit function.  A is zero,
                                   indicating Fight, which must be a fallback in case
                                   all 5 Command slots somehow came up useless.  not
                                   sure how that'd happen, as Slot #5 should always
                                   hold Fight anyway...)

C2/04CA: EB           XBA 
C2/04CB: B5 F7        LDA $F7,X
C2/04CD: EB           XBA         (bottom of A = command # from $F6,X
                                   top of A = attack/spell # from $F7,X)
C2/04CE: FA           PLX 
C2/04CF: 60           RTS 

C2/04D0 data - commands allowed in colosseum, muddled or charmed

C2/04D0: ED  (Fight, Magic, Morph, Steal, Capture, SwdTech)
C2/04D1: 3E  (Tools, Blitz, Runic, Lore, Sketch)
C2/04D2: DD  (Rage, Mimic, Dance, Row, Jump, X-Magic)
C2/04D3: 2D  (GP Rain, Health, Shock, MagiTek)

C2/04D4 data - commands allowed when berserked or zombied

C2/04D4: 41  (Fight, Capture)
C2/04D5: 00  (none)
C2/04D6: 41  (Rage, Jump)
C2/04D7: 20  (MagiTek)

C2/04D8 data - commands with special functions when acts automatically

C2/04D8: 02   (Magic)
C2/04D9: 17   (X-Magic)
C2/04DA: 07   (SwdTech)
C2/04DB: 0A   (Blitz)
C2/04DC: 10   (Rage)
C2/04DD: 13   (Dance)
C2/04DE: 0C   (Lore)
C2/04DF: 03   (Morph)
C2/04E0: 1D   (MagiTek)
C2/04E1: 09   (Tools)

C2/04E2 unknow - code pointers

C2/04E2: 1A 05     (Magic)
C2/04E4: 60 05     (SwdTech)
C2/04E6: D1 05     (Rage)
C2/04E8: F6 04     (Lore)
C2/04EA: 84 05     (MagiTek)
C2/04EC: 1A 05     (X-Magic)
C2/04EE: 75 05     (Blitz)
C2/04F0: 9C 05     (Dance)
C2/04F2: 57 05     (Morph)
C2/04F4: 8D 05     (Tools)

C2/04F6 lore command - auto setup

C2/04F6: B9 E5 3E     LDA $3EE5,Y (Status Byte 2)
C2/04F9: 89 08        BIT #$08
C2/04FB: D0 52        BNE $054F   (If Mute)
C2/04FD: AD 87 3A     LDA $3A87   (Number of Lores possessed?)
C2/0500: F0 4D        BEQ $054F   (if there's zero, don't use Lore command)
C2/0502: 48           PHA 
C2/0503: C2 21        REP #$21
C2/0505: B9 2C 30     LDA $302C,Y (starting address of Magic menu?)
C2/0508: 69 D8 00     ADC #$00D8  (add 54 spells * 4 to get to next menu(?), which is Lore?)
C2/050B: 85 EE        STA $EE
C2/050D: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/050F: 68           PLA 
C2/0510: EB           XBA         (put # of Lores possessed in top of A)
C2/0511: A9 60        LDA #$60    (there are 24 Lores, and each menu slot must occupy
                                   4 bytes, so set loop limit to 96)
C2/0513: 20 34 05     JSR $0534   (randomly pick a valid Lore menu slot)
C2/0516: 18           CLC
C2/0517: 69 8B        ADC #$8B    (first Lore is #139, Condemned)
C2/0519: 60           RTS 

C2/051A magic and x-magic command - auto setup

C2/051A: B9 E5 3E     LDA $3EE5,Y (Status Byte 2)
C2/051D: 89 08        BIT #$08
C2/051F: D0 2E        BNE $054F   (If Mute)
C2/0521: B9 F8 3C     LDA $3CF8,Y (Number of spells possessed by this character?)
C2/0524: F0 29        BEQ $054F   (if there's zero, don't use Magic/X-Magic command)
C2/0526: 48           PHA 
C2/0527: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0529: B9 2C 30     LDA $302C,Y (starting address of Magic menu?)
C2/052C: 85 EE        STA $EE
C2/052E: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/0530: 68           PLA 
C2/0531: EB           XBA         (put # of spells possessed in top of A)
C2/0532: A9 D8        LDA #$D8    (there are 54 spells, and each menu slot must occupy
                                   4 bytes, so set loop limit to 216)
C2/0534: DA           PHX 
C2/0535: 5A           PHY 
C2/0536: A8           TAY 
C2/0537: EB           XBA         (retrieve number of spells/Lores possessed)
C2/0538: 20 65 4B     JSR $4B65   (RNG: 0 to A - 1 . we're randomly picking a
                                   spell/lore)
C2/053B: AA           TAX
C2/053C: B1 EE        LDA ($EE),Y (what's in this Magic/Lore menu slot?)
C2/053E: C9 FF        CMP #$FF    (is it null?)
C2/0540: F0 03        BEQ $0545   (if so, skip to next slot)
C2/0542: CA           DEX         
C2/0543: 30 07        BMI $054C   (If X becomes negative, that means we've found the
                                   Nth valid slot [starting with the last valid slot
                                   and counting backward], where N is the X returned
                                   from our RNG plus 1.
                                   This is what we wanted, so branch.)
C2/0545: 88           DEY 
C2/0546: 88           DEY 
C2/0547: 88           DEY 
C2/0548: 88           DEY 
C2/0549: D0 F1        BNE $053C   (loop and check next slot)
C2/054B: 7B           TDC         (if we didn't get any matches, just use Fire
                                   [or Condemned for Lore, since 139 gets added])
C2/054C: 7A           PLY 
C2/054D: FA           PLX 
C2/054E: 60           RTS 

C2/054F randomly chosen command failed

C2/054F: C6 F5        DEC $F5     (decrement # of valid command slots)
C2/0551: A9 FF        LDA #$FF
C2/0553: 83 03        STA $03,S   (store Empty in current command slot, indicating
                                   that it cannot be chosen)
C2/0555: 7B           TDC         (clear 16-bit A.  note that only the bottom 8-bits,
                                   which indicate the attack/spell #, matter.. 
                                   the command # is loaded by the stack retrieval at
                                   C2/04A9, and will obviously be FFh in this case.)
C2/0556: 60           RTS 

C2/0557 morph command - check availability

C2/0557: A9 0F        LDA #$0F
C2/0559: CD F6 1C     CMP $1CF6   (Morph supply)
C2/055C: 7B           TDC         (clear 16-bit A)
C2/055D: B0 F0        BCS $054F   (if Morph supply isn't at least 16, don't allow Morph command)
C2/055F: 60           RTS 

C2/0560 sword tech command - auto setup

C2/0560: B9 A4 3B     LDA $3BA4,Y (Special properties for right-hand weapon slot)
C2/0563: 19 A5 3B     ORA $3BA5,Y ( for left-hand)
C2/0566: 89 02        BIT #$02    (is Swdtech allowed by either hand?)
C2/0568: F0 E5        BEQ $054F   (if not, don't use Swdtech as command)
C2/056A: AD 20 20     LDA $2020   (index of highest known Swdtech?)
C2/056D: 1A           INC         (# of known Swdtechs)
C2/056E: 20 65 4B     JSR $4B65   (Pick a known Swdtech)
C2/0571: 18           CLC 
C2/0572: 69 55        ADC #$55    (first Swdtech is #85, Dispatch)
C2/0574: 60           RTS 

C2/0575 blitz command - auto setup

C2/0575: 7B           TDC
C2/0576: AD 28 1D     LDA $1D28   (Known Blitzes)
C2/0579: 20 2A 52     JSR $522A   (Pick a random bit that is set)
C2/057C: 20 F0 51     JSR $51F0   (Get which bit is picked)
C2/057F: 8A           TXA 
C2/0580: 18           CLC
C2/0581: 69 5D        ADC #$5D    (first Blitz is #93, Pummel)
C2/0583: 60           RTS 

C2/0584 magitek command - auto setup

C2/0584: A9 03        LDA #$03
C2/0586: 20 65 4B     JSR $4B65   (0 to 2 -- only pick between first 3 MagiTek moves,
                                   since anybody besides Terra can only use
                                   Fire Beam + Bolt Beam + Ice Beam + Heal Force,
                                   but there's Bio Blast in between those last two.

                                   just picking from the first three simplifies code,
                                   although decent planning would have had Heal Force
                                   before Bio Blast..  or add a few instructions here
                                   and include Bio Blast anyway.)
C2/0589: 18           CLC 
C2/058A: 69 83        ADC #$83    (first MagiTek move is #131, Fire Beam)
C2/058C: 60           RTS 

C2/058d tools command - auto setup

C2/058D: 7B           TDC
C2/058E: AD 9B 3A     LDA $3A9B   (Which tools are owned)
C2/0591: 20 2A 52     JSR $522A   (Pick a random tool that is owned)
C2/0594: 20 F0 51     JSR $51F0   (Get which bit is set, thus returning a 0-7 Tool index)
C2/0597: 8A           TXA         
C2/0598: 18           CLC 
C2/0599: 69 A3        ADC #$A3    (item number of first tool, NoiseBlaster, is 163)
C2/059B: 60           RTS 

C2/059C dance command - auto setup

C2/059C: DA           PHX
C2/059D: B9 E1 32     LDA $32E1,Y (get the dance number?)
C2/05A0: C9 FF        CMP #$FF    (is it null?)
C2/05A2: D0 0E        BNE $05B2   (if it's valid, a Dance has already been chosen,
                                   so just proceed to choose a step)
C2/05A4: 7B           TDC         (clear 16-bit A)
C2/05A5: AD 4C 1D     LDA $1D4C   (bitfield of known Dances?)
C2/05A8: 20 2A 52     JSR $522A   (Pick a random bit that is set)
C2/05AB: 20 F0 51     JSR $51F0   (Get which bit is picked)
C2/05AE: 8A           TXA 
C2/05AF: 99 E1 32     STA $32E1,Y (save our Dance #)
C2/05B2: 0A           ASL 
C2/05B3: 0A           ASL         (* 4)
C2/05B4: 85 EE        STA $EE     (Each Dance has 4 steps, and occupies 4 bytes
                                   in the Dance Step --> Attack Number table
                                   at $CFFE80)
C2/05B6: 20 5A 4B     JSR $4B5A   (RNG: 0 to 255)
C2/05B9: A2 02        LDX #$02
C2/05BB: DF CE 05 C2  CMP $C205CE,X  (see data below for chances of each step)
C2/05BF: B0 02        BCS $05C3    
C2/05C1: E6 EE        INC $EE        (move to next step for this Dance)
C2/05C3: CA           DEX 
C2/05C4: 10 F5        BPL $05BB      (loop until we reach step determined by random #)
C2/05C6: A6 EE        LDX $EE        (= (Dance * 4) + step)
C2/05C8: BF 80 FE CF  LDA $CFFE80,X  (get attack # for the Dance step used)
C2/05CC: FA           PLX 
C2/05CD: 60           RTS 

C2/05CE data - chances for each dance step

(Data - for chances of each dance step)
(Probabilities: Dance Step 0 = 7/16, Step 1 = 6/16, Step 2 = 2/16, Step 3 = 1/16)
C2/05CE: 10 30 90  

C2/05D1 rage command - auto setup

C2/05D1: DA           PHX
C2/05D2: 08           PHP 
C2/05D3: 7B           TDC 
C2/05D4: 99 A9 33     STA $33A9,Y
C2/05D7: B9 A8 33     LDA $33A8,Y   (which monster it is)
C2/05DA: C9 FF        CMP #$FF
C2/05DC: D0 22        BNE $0600     (branch if a non-null monster was passed)
C2/05DE: 1A           INC 
C2/05DF: 99 A8 33     STA $33A8,Y   (store enemy #0, Guard)
C2/05E2: AD 9A 3A     LDA $3A9A     (# of rages possessed)
C2/05E5: 20 65 4B     JSR $4B65   
C2/05E8: 1A           INC           (random #: 1 to $3A9A)
C2/05E9: 85 EE        STA $EE
C2/05EB: A2 00        LDX #$00
C2/05ED: BD 7E 25     LDA $257E,X   (copy of Rages menu?  menu is filled in C2/580C routine,
                                     and #$257E constant is copied to $002181)
C2/05F0: C9 FF        CMP #$FF
C2/05F2: F0 0C        BEQ $0600     (branch if that menu slot was null, which means
                                     enemy #0 should be defaulted to)
C2/05F4: C6 EE        DEC $EE       (decrement our random index)
C2/05F6: F0 05        BEQ $05FD     (if it's zero, branch, and use the menu item last read)
C2/05F8: E8           INX 
C2/05F9: D0 F2        BNE $05ED     (loop again to check next menu entry)
C2/05FB: 80 03        BRA $0600     (if we've looped a full 256 times and somehow there's
                                     been no match with the random index, branch and just
                                     use enemy #0)

(i'm not sure what the purpose of the above loop is..  it selects Enemy #0
 if any menu slots up to and including the randomly chosen one hold FFh.  maybe it's a check
 to see if the list got "broken," as a normally generated one should never have any nulls
 in the middle.)

C2/05FD: 99 A8 33     STA $33A8,Y   (store enemy number)
C2/0600: 20 53 4B     JSR $4B53     (0 or 1)
C2/0603: C2 30        REP #$30
C2/0605: 2A           ROL 
C2/0606: AA           TAX 
C2/0607: E2 20        SEP #$20      (Set 8-bit Accumulator)
C2/0609: BF 00 46 CF  LDA $CF4600,X (Rage)
C2/060D: 28           PLP 
C2/060E: FA           PLX 
C2/060F: 60           RTS 

C2/0610 load monster properties for rage

C2/0610: 08           PHP
C2/0611: B9 A8 33     LDA $33A8,Y    (Which monster it is)
C2/0614: AA           TAX
C2/0615: EB           XBA
C2/0616: BF C0 37 CF  LDA $CF37C0,X  (get enemy Special move graphic)
C2/061A: 99 81 3C     STA $3C81,Y
C2/061D: A9 20        LDA #$20
C2/061F: 20 81 47     JSR $4781      (get monster # * 32 to access the monster
                                      data block)
C2/0622: C2 10        REP #$10
C2/0624: AA           TAX
C2/0625: BF 1A 00 CF  LDA $CF001A,X  (monster's regular weapon graphic)
C2/0629: 99 A8 3C     STA $3CA8,Y
C2/062C: 99 A9 3C     STA $3CA9,Y
C2/062F: 20 C1 2D     JSR $2DC1      (load monster's special attack, elemental properties,
                                      statuses, status immunities, special properties like
                                      Human/Undead/Dies at MP=0 , etc)
C2/0632: 28           PLP
C2/0633: 60           RTS

C2/0634 monster commands - auto setup

Picks command for Muddled/Charmed/Berserk/Colosseum monsters
C2/0634: DA           PHX
C2/0635: C2 30        REP #$30    (Set 16-bit A,X & Y)
C2/0637: BD F9 1F     LDA $1FF9,X (Which monster it is)
C2/063A: 0A           ASL 
C2/063B: 0A           ASL 
C2/063C: AA           TAX           (multiply monster # by 4 to index its
                                     Control/Muddled/Charm/Colosseum attack table)
C2/063D: BF 00 3D CF  LDA $CF3D00,X (Muddled commands)
C2/0641: 85 F0        STA $F0
C2/0643: BF 02 3D CF  LDA $CF3D02,X (Muddled commands)
C2/0647: 85 F2        STA $F2
C2/0649: E2 30        SEP #$30    (Set 8-bit A,X, & Y)
C2/064B: 64 EE        STZ $EE
C2/064D: 20 5A 4B     JSR $4B5A   (random: 0 to 255)
C2/0650: 29 03        AND #$03    (0 to 3 - point to a random attack slot)
C2/0652: AA           TAX 
C2/0653: B5 F0        LDA $F0,X
C2/0655: C9 FF        CMP #$FF
C2/0657: D0 0B        BNE $0664   (branch if valid attack in slot)
C2/0659: CA           DEX 
C2/065A: 10 F7        BPL $0653   (loop through remainder of attack slots)
C2/065C: E6 EE        INC $EE     (if we couldn't find any valid attacks,
                                   increment counter)
C2/065E: F0 04        BEQ $0664   (give up if we've incremented it 256 times?
                                   i can't see why more than 1 time would be
                                   necessary..  if we give up, it appears
                                   FFh is retained as the attack #, which
                                   should make the monster do nothing..)
                                  (it would've been far faster to change C2/064B
                                   to "LDA #$FF / STA $EE" and this BEQ to a BNE.)

C2/0660: A2 03        LDX #$03    (if randomly chosen attack slot and all the
                                   ones below it were Empty, go do the loop again,
                                   this time starting with the highest
                                   numbered slot.  this way, we'll check EVERY
                                   slot before throwing in the towel)

C2/0662: 80 EF        BRA $0653
C2/0664: FA           PLX 
C2/0665: 48           PHA 
C2/0666: BD E5 3E     LDA $3EE5,X
C2/0669: 89 10        BIT #$10
C2/066B: F0 04        BEQ $0671   (Branch if not Berserk)
C2/066D: A9 EE        LDA #$EE
C2/066F: 83 01        STA $01,S   (Set attack to Battle)
C2/0671: 68           PLA 
C2/0672: 20 BF 1D     JSR $1DBF   (choose a command based on attack #)
C2/0675: 20 E4 03     JSR $03E4
C2/0678: 4C CB 4E     JMP $4ECB

C2/067B data - time to wait for commands

(Data - Time to wait after entering a command until character actually
 performs it (iow, how long they spend in their ready stance).  This
 value * 256 is compared to their $3AB4 counter.  I'm really not sure
 how this applies to enemies.)
C2/067B: 10   (Fight)
C2/067C: 10   (Item)
C2/067D: 20   (Magic)
C2/067E: 00   (Morph)
C2/067F: 00   (Revert)
C2/0680: 10   (Steal)
C2/0681: 10   (Capture)
C2/0682: 10   (SwdTech)
C2/0683: 10   (Throw)
C2/0684: 10   (Tools)
C2/0685: 10   (Blitz)
C2/0686: 10   (Runic)
C2/0687: 20   (Lore)
C2/0688: 10   (Sketch)
C2/0689: 10   (Control)
C2/068A: 10   (Slot)
C2/068B: 10   (Rage)
C2/068C: 10   (Leap)
C2/068D: 10   (Mimic)
C2/068E: 10   (Dance)
C2/068F: 10   (Row)
C2/0690: 10   (Def.)
C2/0691: E0   (Jump)
C2/0692: 20   (X-Magic)
C2/0693: 10   (GP Rain)
C2/0694: 10   (Summon)
C2/0695: 20   (Health)
C2/0696: 20   (Shock)
C2/0697: 10   (Possess)
C2/0698: 10   (MagiTek)
C2/0699: 00
C2/069A: 00           

C2/069B unknow

C2/069B: A2 12        LDX #$12 
C2/069D: BD A0 3A     LDA $3AA0,X 
C2/06A0: 4A           LSR 
C2/06A1: 90 5D        BCC $0700
C2/06A3: C2 20        REP #$20
C2/06A5: BD 18 30     LDA $3018,X
C2/06A8: 2C 4E 2F     BIT $2F4E
C2/06AB: E2 20        SEP #$20
C2/06AD: D0 51        BNE $0700
C2/06AF: 20 AD 07     JSR $07AD
C2/06B2: BD E4 3E     LDA $3EE4,X
C2/06B5: 89 82        BIT #$82    (Check for Dead or Zombie Status)
C2/06B7: F0 06        BEQ $06BF   (branch if none set)
C2/06B9: 9E F4 3B     STZ $3BF4,X (Set HP to 0)
C2/06BC: 9E F5 3B     STZ $3BF5,X
C2/06BF: BD E4 3E     LDA $3EE4,X
C2/06C2: 89 C2        BIT #$C2    (Check for Dead, Zombie, or Petrify status)
C2/06C4: F0 09        BEQ $06CF   (branch if none set)
C2/06C6: BD 19 30     LDA $3019,X
C2/06C9: 0C 3A 3A     TSB $3A3A
C2/06CC: 20 C8 07     JSR $07C8
C2/06CF: BD E4 3E     LDA $3EE4,X
C2/06D2: 10 2C        BPL $0700   (Branch if alive)
C2/06D4: E0 08        CPX #$08
C2/06D6: B0 0C        BCS $06E4   (branch if monster)
C2/06D8: BD D8 3E     LDA $3ED8,X (Which character)
C2/06DB: C9 0E        CMP #$0E
C2/06DD: D0 05        BNE $06E4   (Branch if not Banon)
C2/06DF: A9 06        LDA #$06
C2/06E1: 8D 6E 3A     STA $3A6E   (Banon fell... "End of combat" method #6)
C2/06E4: 20 10 07     JSR $0710    
C2/06E7: BD E4 3E     LDA $3EE4,X
C2/06EA: 89 02        BIT #$02    (Check for Zombie Status)
C2/06EC: F0 03        BEQ $06F1
C2/06EE: 20 28 07     JSR $0728
C2/06F1: BD E4 3E     LDA $3EE4,X
C2/06F4: 10 0A        BPL $0700   (Branch if alive)
C2/06F6: BD F9 3E     LDA $3EF9,X
C2/06F9: 89 04        BIT #$04
C2/06FB: F0 03        BEQ $0700   (branch if no Life 3 status)
C2/06FD: 20 99 07     JSR $0799   (prepare Life 3 revival)
C2/0700: CA           DEX 
C2/0701: CA           DEX 
C2/0702: 10 99        BPL $069D
C2/0704: A2 12        LDX #$12
C2/0706: 20 39 07     JSR $0739   (clean up Control)
C2/0709: CA           DEX 
C2/070A: CA           DEX 
C2/070B: 10 F9        BPL $0706   (loop for every entity onscreen)
C2/070D: 4C 26 5D     JMP $5D26

C2/0710 unknow

C2/0710: C2 20        REP #$20
C2/0712: BD 18 30     LDA $3018,X
C2/0715: 2C 2C 3F     BIT $3F2C   (are they in the middle of a Jump?)
C2/0718: E2 20        SEP #$20
C2/071A: F0 0B        BEQ $0727   (Exit function if not)
C2/071C: 20 28 07     JSR $0728   (clear Wound for now, so they don't actually croak
                                   in mid-air)
C2/071F: BD 05 32     LDA $3205,X
C2/0722: 29 FB        AND #$FB
C2/0724: 9D 05 32     STA $3205,X (Set Air Anchor effect)
C2/0727: 60           RTS 

C2/0728 unknow

C2/0728: BD E4 3E     LDA $3EE4,X
C2/072B: 29 7F        AND #$7F    (Clear death status)
C2/072D: 9D E4 3E     STA $3EE4,X
C2/0730: BD 04 32     LDA $3204,X
C2/0733: 29 BF        AND #$BF    (clear bit 6)
C2/0735: 9D 04 32     STA $3204,X
C2/0738: 60           RTS 

C2/0739 check and remove control effects

(Remove Control's influence from this entity and its Controller/Controllee if
 Control was flagged to be deactivated due to:
  - C2/07AD found certain statuses on entity [doesn't matter whether
    it's the Controller or it's the Controllee])
  - this entity is a Controllee and C2/0C2D detected them sustaining physical
    damage [healing or 0 damage will count, but a non-damaging attack -- i.e.
    one with no damage numerals -- will not] )

C2/0739: BD B9 32     LDA $32B9,X   (who's Controlling this entity?)
C2/073C: C9 FF        CMP #$FF
C2/073E: F0 08        BEQ $0748     (branch if nobody controls them)
C2/0740: 10 06        BPL $0748     (branch if somebody controls them, and Control
                                     wasn't flagged to be deactivated)
C2/0742: 29 7F        AND #$7F
C2/0744: A8           TAY           (put Controller in Y  [Controllee is in X])
C2/0745: 20 5B 07     JSR $075B     (clear Control info for the Controller and
                                     Controllee [this entity])
C2/0748: BD B8 32     LDA $32B8,X   (now see who this entity Controls)
C2/074B: C9 FF        CMP #$FF
C2/074D: F0 0B        BEQ $075A     (branch if they control nobody)
C2/074F: 10 09        BPL $075A     (branch if they control somebody, and Control
                                     wasn't flagged to be deactivated)
C2/0751: 29 7F        AND #$7F
C2/0753: DA           PHX 
C2/0754: 9B           TXY           (put Controller in Y)
C2/0755: AA           TAX           (put Controllee in X)
C2/0756: 20 5B 07     JSR $075B     (clear Control info for the Controller [this
                                     entity] and Controllee)
C2/0759: FA           PLX 
C2/075A: 60           RTS 

C2/075B clear control data

(Clear Control-related data for a Controller, addressed by Y, and
 a Controllee, addressed by X)
C2/075B: B9 4D 3E     LDA $3E4D,Y
C2/075E: 29 FE        AND #$FE
C2/0760: 99 4D 3E     STA $3E4D,Y
C2/0763: B9 F9 3E     LDA $3EF9,Y
C2/0766: 29 EF        AND #$EF
C2/0768: 99 F9 3E     STA $3EF9,Y  (clear "Chant" status from Controller)
C2/076B: A9 FF        LDA #$FF
C2/076D: 9D B9 32     STA $32B9,X  (set to nobody controlling Controllee)
C2/0770: 99 B8 32     STA $32B8,Y  (set to Controller controlling nobody)
C2/0773: BD 19 30     LDA $3019,X
C2/0776: 1C 54 2F     TRB $2F54
C2/0779: DA           PHX 
C2/077A: 20 83 07     JSR $0783
C2/077D: BB           TYX 
C2/077E: 20 83 07     JSR $0783
C2/0781: FA           PLX 
C2/0782: 60           RTS 

C2/0783 unknow

C2/0783: A9 40        LDA #$40
C2/0785: 20 AB 5B     JSR $5BAB    (set bit 6 of $3AA1,X)
C2/0788: BD 04 32     LDA $3204,X
C2/078B: 09 40        ORA #$40
C2/078D: 9D 04 32     STA $3204,X  (set bit 6)
C2/0790: A9 7F        LDA #$7F
C2/0792: 3D A0 3A     AND $3AA0,X
C2/0795: 9D A0 3A     STA $3AA0,X
C2/0798: 60           RTS 

C2/0799 prepare life 3 revival

C2/0799: 29 FB        AND #$FB
C2/079B: 9D F9 3E     STA $3EF9,X   (clear Life 3 status)
C2/079E: BD 19 30     LDA $3019,X
C2/07A1: 1C 2F 2F     TRB $2F2F
C2/07A4: A9 30        LDA #$30
C2/07A6: 85 B8        STA $B8
C2/07A8: A9 26        LDA #$26      (command #$26)
C2/07AA: 4C 91 4E     JMP $4E91     (queue it?)

C2/07AD unknow

C2/07AD: F4 C2 B0     PEA $B0C2   (Sleep, Muddled, Berserk, Death, Petrify, Zombie)
C2/07B0: F4 11 03     PEA $0311   (Rage, Freeze, Dance, Stop)
C2/07B3: 9B           TXY 
C2/07B4: 20 64 58     JSR $5864
C2/07B7: B0 0E        BCS $07C7   (Exit function if none of those statuses set)
C2/07B9: 1E B8 32     ASL $32B8,X
C2/07BC: 38           SEC 
C2/07BD: 7E B8 32     ROR $32B8,X (flag "Who you control" link to be deactivated)
C2/07C0: 1E B9 32     ASL $32B9,X 
C2/07C3: 38           SEC 
C2/07C4: 7E B9 32     ROR $32B9,X (flag "Who controls you" link to be deactivated)
C2/07C7: 60           RTS 

C2/07C8 unknow

C2/07C8: EC F9 33     CPX $33F9
C2/07CB: D0 28        BNE $07F5    (branch if you're not being Zingered)
C2/07CD: DA           PHX 
C2/07CE: AE F8 33     LDX $33F8    (who's doing the Zingering)
C2/07D1: BD 19 30     LDA $3019,X
C2/07D4: 85 B9        STA $B9
C2/07D6: A9 04        LDA #$04
C2/07D8: 85 B8        STA $B8
C2/07DA: A2 00        LDX #$00
C2/07DC: A9 24        LDA #$24
C2/07DE: 20 91 4E     JSR $4E91
C2/07E1: A9 02        LDA #$02
C2/07E3: 85 B8        STA $B8
C2/07E5: A2 08        LDX #$08
C2/07E7: A9 24        LDA #$24
C2/07E9: 20 91 4E     JSR $4E91
C2/07EC: A9 FF        LDA #$FF
C2/07EE: 8D F8 33     STA $33F8    (nobody's Zingering)
C2/07F1: 8D F9 33     STA $33F9    (nobody's being Zingered)
C2/07F4: FA           PLX 
C2/07F5: BD 6C 33     LDA $336C,X
C2/07F8: 30 04        BMI $07FE    (branch if you have no Love Token slave)
C2/07FA: A8           TAY 
C2/07FB: 20 2D 08     JSR $082D    (Clear Love Token links between you and slave)
C2/07FE: BD 6D 33     LDA $336D,X
C2/0801: 30 07        BMI $080A    (branch if you're nobody's Love Token slave)
C2/0803: DA           PHX 
C2/0804: 9B           TXY 
C2/0805: AA           TAX 
C2/0806: 20 2D 08     JSR $082D    (Clear Love Token links between you and master)
C2/0809: FA           PLX 
C2/080A: BD 94 33     LDA $3394,X
C2/080D: 30 04        BMI $0813    (branch if you're not Charming anybody)
C2/080F: A8           TAY 
C2/0810: 20 36 08     JSR $0836    (Clear Charm links between you and your Charmee)
C2/0813: BD 95 33     LDA $3395,X
C2/0816: 30 07        BMI $081F    (branch if you're not Charmed by anybody)
C2/0818: DA           PHX 
C2/0819: 9B           TXY 
C2/081A: AA           TAX 
C2/081B: 20 36 08     JSR $0836    (Clear Charm links between you and Charmer)
C2/081E: FA           PLX 
C2/081F: EC 04 34     CPX $3404   (Compare to Quick's target byte)
C2/0822: D0 08        BNE $082C   (Exit If this actor does not get extra turn due to Quick)
C2/0824: A9 FF        LDA #$FF
C2/0826: 8D 04 34     STA $3404   (Store #$FF (empty) to Quick's target byte)
C2/0829: 8D 02 34     STA $3402   (Store #$FF (for none) to the number of turns due to Quick)
C2/082C: 60           RTS 

C2/082D clear love token effect

C2/082D: A9 FF        LDA #$FF
C2/082F: 9D 6C 33     STA $336C,X
C2/0832: 99 6D 33     STA $336D,Y
C2/0835: 60           RTS 

C2/0836 clear charm effect

C2/0836: A9 FF        LDA #$FF
C2/0838: 9D 94 33     STA $3394,X
C2/083B: 99 95 33     STA $3395,Y
C2/083E: 60           RTS 

C2/083F update battle variables

(Update a variety of things when the battle starts, when the enemy formation
 is switched, and at the end of each turn [after the turn's animation plays out])
C2/083F: A2 12        LDX #$12
C2/0841: BD A0 3A     LDA $3AA0,X
C2/0844: 4A           LSR 
C2/0845: 90 77        BCC $08BE
C2/0847: 1E E0 32     ASL $32E0,X
C2/084A: 5E E0 32     LSR $32E0,X (clear Bit 7 of $32E0.  this prevents C2/4C5B
                                   from triggering a counterattack for a once-attacked
                                   entity turn after turn, while still preserving the
                                   attacker in Bits 0-6.)
C2/084D: BD E4 3E     LDA $3EE4,X
C2/0850: 30 07        BMI $0859   (Branch if dead)
C2/0852: BD A1 3A     LDA $3AA1,X
C2/0855: 89 40        BIT #$40
C2/0857: F0 03        BEQ $085C   (If bit 5 of $3AA1 is not set)
C2/0859: 20 77 09     JSR $0977
C2/085C: BD 04 32     LDA $3204,X
C2/085F: F0 4A        BEQ $08AB
C2/0861: 4A           LSR 
C2/0862: 90 03        BCC $0867
C2/0864: 20 4A 0B     JSR $0B4A   (If bit 0 of $3204,X is set)
C2/0867: 1E 04 32     ASL $3204,X
C2/086A: 90 03        BCC $086F   (Branch if bit 7 of $3204,X is not set.
                                   It is set for an entity when their Imp status is
                                   toggled, the attack/spell costs them MP to cast, or
                                   the attack itself affects their MP because they're a
                                   target [or the caster, if it's a draining attack])
C2/086C: 20 63 57     JSR $5763   (Update availability of entries on Esper, Magic,
                                   and Lore menus)
C2/086F: 1E 04 32     ASL $3204,X
C2/0872: 90 08        BCC $087C
C2/0874: 20 0F 0A     JSR $0A0F   (If bit 6 of $3204,X is set)
C2/0877: A9 80        LDA #$80
C2/0879: 20 AB 5B     JSR $5BAB   (set bit 7 of $3AA1,X)
C2/087C: 1E 04 32     ASL $3204,X
C2/087F: 90 03        BCC $0884   (Branch if bit 5 of $3204,X is not set.
                                   It is set for an entity upon Condemned status
                                   being set.)
C2/0881: 20 B4 09     JSR $09B4   (Assign a starting value to Condemned counter)
C2/0884: 1E 04 32     ASL $3204,X
C2/0887: 90 03        BCC $088C   (Branch if bit 4 of $3204,X is not set.
                                   It is set for an entity when Condemned expires or
                                   is otherwise cleared.)
C2/0889: 20 CE 09     JSR $09CE   (Zero the Condemned counter)
C2/088C: 1E 04 32     ASL $3204,X
C2/088F: 90 07        BCC $0898   (Branch if bit 3 of $3204,X is not set.
                                   It is set for an entity when Mute or Imp status
                                   is toggled.)
C2/0891: E0 08        CPX #$08
C2/0893: B0 03        BCS $0898   (Branch if not a character)
C2/0895: 20 7D 52     JSR $527D   (Update availability of commands on character's
                                   main menu)
C2/0898: 1E 04 32     ASL $3204,X
C2/089B: 90 03        BCC $08A0   (Branch if bit 2 of $3204,X is not set.
                                   It is set for an entity when Haste or Slow is toggled,
                                   and a couple other cases I'm not sure of.)
C2/089D: 20 D2 09     JSR $09D2   (Recalculate the amount by which to increase the ATB
                                   gauge.  Affects various other timers, too)
C2/08A0: 1E 04 32     ASL $3204,X
C2/08A3: 90 03        BCC $08A8   (Branch if bit 1 of $3204,X is not set.
                                   It is set for an entity when Morph status is toggled)
C2/08A5: 20 A8 0A     JSR $0AA8   (switch command on main menu from Morph to Revert
                                   [or vice versa], and adjust Morph-related variables
                                   like timers)
C2/08A8: 1E 04 32     ASL $3204,X
C2/08AB: 20 1F 09     JSR $091F
C2/08AE: 20 C6 08     JSR $08C6
C2/08B1: BD A0 3A     LDA $3AA0,X
C2/08B4: 89 50        BIT #$50
C2/08B6: F0 03        BEQ $08BB
C2/08B8: 20 41 0A     JSR $0A41
C2/08BB: 20 4A 0A     JSR $0A4A   (Prepare equipment spell activations on low HP)
C2/08BE: CA           DEX 
C2/08BF: CA           DEX 
C2/08C0: 30 03        BMI $08C5
C2/08C2: 4C 41 08     JMP $0841   (loop for all 10 entities)
C2/08C5: 60           RTS 

C2/08C6 unknow

C2/08C6: A9 50        LDA #$50
C2/08C8: 20 B4 11     JSR $11B4
C2/08CB: AD 04 34     LDA $3404
C2/08CE: 30 05        BMI $08D5
C2/08D0: EC 04 34     CPX $3404
C2/08D3: D0 F0        BNE $08C5
C2/08D5: BD E4 3E     LDA $3EE4,X
C2/08D8: 89 C0        BIT #$C0
C2/08DA: D0 E9        BNE $08C5   (Exit if dead or Petrify)
C2/08DC: BD F8 3E     LDA $3EF8,X
C2/08DF: 89 10        BIT #$10
C2/08E1: D0 E2        BNE $08C5   (Exit if stop)
C2/08E3: A9 EF        LDA #$EF
C2/08E5: 20 92 07     JSR $0792
C2/08E8: BD B9 32     LDA $32B9,X
C2/08EB: 10 D8        BPL $08C5   (Exit if you are controlled)
C2/08ED: BD E5 3E     LDA $3EE5,X
C2/08F0: 30 D3        BMI $08C5   (Exit if asleep)
C2/08F2: BD F9 3E     LDA $3EF9,X
C2/08F5: 89 02        BIT #$02
C2/08F7: D0 CC        BNE $08C5   (Exit if life 3)
C2/08F9: BD 59 33     LDA $3359,X
C2/08FC: 10 C7        BPL $08C5   (Exit if seized)
C2/08FE: A9 BF        LDA #$BF
C2/0900: 20 92 07     JSR $0792
C2/0903: BD A1 3A     LDA $3AA1,X
C2/0906: 10 BD        BPL $08C5   (Exit if bit 7 of $3AA1 is not set)
C2/0908: 29 7F        AND #$7F    (Clear bit 7)
C2/090A: 9D A1 3A     STA $3AA1,X
C2/090D: BD CC 32     LDA $32CC,X
C2/0910: 1A           INC 
C2/0911: F0 B2        BEQ $08C5   (Exit if $32CC is #$FF)
C2/0913: BD A1 3A     LDA $3AA1,X
C2/0916: 4A           LSR 
C2/0917: 90 03        BCC $091C   (Branch if bit 0 of $3AA1 is not set)
C2/0919: 4C 77 4E     JMP $4E77
C2/091C: 4C 66 4E     JMP $4E66

C2/091F unknow

C2/091F: E0 08        CPX #$08
C2/0921: B0 A2        BCS $08C5   (exit if monster)
C2/0923: BD D8 3E     LDA $3ED8,X (Which character it is)
C2/0926: C9 0D        CMP #$0D
C2/0928: F0 9B        BEQ $08C5   (Exit if Umaro)
C2/092A: BD 55 32     LDA $3255,X
C2/092D: 10 96        BPL $08C5
C2/092F: AD 97 3A     LDA $3A97
C2/0932: D0 91        BNE $08C5   (exit if in the Colosseum)
C2/0934: A9 02        LDA #$02
C2/0936: 85 EE        STA $EE
C2/0938: EC 04 34     CPX $3404
C2/093B: D0 04        BNE $0941
C2/093D: A9 88        LDA #$88
C2/093F: 04 EE        TSB $EE
C2/0941: A5 EE        LDA $EE
C2/0943: 20 B4 11     JSR $11B4
C2/0946: BD 18 30     LDA $3018,X
C2/0949: 2C 4C 2F     BIT $2F4C
C2/094C: D0 38        BNE $0986
C2/094E: BD 59 33     LDA $3359,X
C2/0951: 3D 95 33     AND $3395,X
C2/0954: 10 30        BPL $0986   (branch if Seized or Charmed)
C2/0956: F4 C2 B0     PEA $B0C2   (Sleep, Muddled, Berserk, Death, Petrify, Zombie)
C2/0959: F4 01 21     PEA $2101   (Dance, Hide, Rage)
C2/095C: 9B           TXY 
C2/095D: 20 64 58     JSR $5864
C2/0960: 90 24        BCC $0986   (Branch if any set)
C2/0962: BD A0 3A     LDA $3AA0,X
C2/0965: 10 66        BPL $09CD
C2/0967: BD CC 32     LDA $32CC,X
C2/096A: 10 61        BPL $09CD
C2/096C: BD A0 3A     LDA $3AA0,X
C2/096F: 09 08        ORA #$08
C2/0971: 9D A0 3A     STA $3AA0,X   (turn on bit 3)
C2/0974: 4C EF 11     JMP $11EF

C2/0977 unknow

C2/0977: C2 20        REP #$20
C2/0979: A9 D3        LDA #$D3
C2/097B: BF 20 92 07  LDA $079220,X
C2/097F: E2 20        SEP #$20
C2/0981: A9 01        LDA #$01
C2/0983: 9D 19 32     STA $3219,X
C2/0986: A9 F9        LDA #$F9
C2/0988: EB           XBA 
C2/0989: BD F9 3E     LDA $3EF9,X
C2/098C: 89 20        BIT #$20
C2/098E: D0 13        BNE $09A3   (Branch if Hide status)
C2/0990: BD 18 30     LDA $3018,X
C2/0993: 2C 4C 2F     BIT $2F4C
C2/0996: D0 0B        BNE $09A3
C2/0998: BD A0 3A     LDA $3AA0,X
C2/099B: 10 06        BPL $09A3   (Branch if bit 7 of $3AA0 is not set)
C2/099D: A9 79        LDA #$79
C2/099F: EB           XBA 
C2/09A0: 20 66 4E     JSR $4E66
C2/09A3: EB           XBA 
C2/09A4: 20 92 07     JSR $0792
C2/09A7: E0 08        CPX #$08
C2/09A9: B0 22        BCS $09CD   (Exit function)
C2/09AB: 8A           TXA 
C2/09AC: 4A           LSR 
C2/09AD: 85 10        STA $10
C2/09AF: A9 03        LDA #$03
C2/09B1: 4C 11 64     JMP $6411

C2/09B4 assign value to condemned counter

C2/09B4: AD AF 11     LDA $11AF   (Level)
C2/09B7: 20 65 4B     JSR $4B65   (random: 0 to Level - 1)
C2/09BA: 18           CLC 
C2/09BB: 6D AF 11     ADC $11AF   (Add to level)
C2/09BE: 85 EE        STA $EE
C2/09C0: 38           SEC 
C2/09C1: A9 3C        LDA #$3C
C2/09C3: E5 EE        SBC $EE     (Subtract from 60)
C2/09C5: B0 01        BCS $09C8
C2/09C7: 7B           TDC         (Set to 0 if less than 0)
C2/09C8: 69 14        ADC #$14    (Add 21.  if it was less than 0, add 20 instead,
                                   giving it a starting value of 20.)
C2/09CA: 9D 05 3B     STA $3B05,X (set Condemned counter)
                                  (note that this counter is "one off" from the
                                   actual numerals you'll see onscreen:
                                      00 value = numerals disabled
                                      01 value = numerals at "00"
                                      02 value = numerals at "01"
                                      03 value = numerals at "02" , etc.)
C2/09CD: 60           RTS 

C2/09CE null condemned counter

C2/09CE: 9E 05 3B     STZ $3B05,X  (Condemned counter = 0)
C2/09D1: 60           RTS 

C2/09D2 battle timer counter function

Battle Time Counter function
(Recalculate the amount by which to increase the ATB gauge.  
 This will also affect the speed of the "wait timer" [which determines how long a
 character is in their ready stance], the Condemned counter, invisible timers
 for auto-expiring statuses, and the frequency of damage/healing from statuses
 like Regen and Poison.)
C2/09D2: 08           PHP
C2/09D3: A0 20        LDY #$20      (ATB multiplier = 32 if slowed)
C2/09D5: BD F8 3E     LDA $3EF8,X
C2/09D8: 89 04        BIT #$04
C2/09DA: D0 08        BNE $09E4     (Branch if Slow)
C2/09DC: A0 40        LDY #$40      (ATB multiplier = 64 normally)
C2/09DE: 89 08        BIT #$08
C2/09E0: F0 02        BEQ $09E4     (Branch if not Haste)
C2/09E2: A0 54        LDY #$54      (ATB multiplier = 84 if hasted)
C2/09E4: 98           TYA 
C2/09E5: 9D DD 3A     STA $3ADD,X   (save the ATB multiplier)
C2/09E8: 98           TYA           (this instruction seems frivolous)
C2/09E9: 48           PHA 
C2/09EA: 18           CLC 
C2/09EB: 4A           LSR 
C2/09EC: 63 01        ADC $01,S
C2/09EE: 83 01        STA $01,S     (ATB multiplier *= 1.5)
C2/09F0: BD 19 3B     LDA $3B19,X   (Speed)
C2/09F3: 69 14        ADC #$14        
C2/09F5: EB           XBA           (Speed + 20 in top byte of Accumulator)
C2/09F6: E0 08        CPX #$08    
C2/09F8: 90 06        BCC $0A00     (branch if not an enemy)
C2/09FA: AD 90 3A     LDA $3A90     (= 255 - (Battle Speed setting * 24) )
                                    (remember that what you see on the Config menu is
                                     Battle Speed + 1)
C2/09FD: 20 81 47     JSR $4781     (A = (speed + 20) * $3A90 )
C2/0A00: 68           PLA           (bottom byte of A is now Slow/Normal/Haste Constant)
C2/0A01: 20 81 47     JSR $4781     (Let C be the Slow/Normal/Haste constant, equal to
                                     48, 96, or 126, respectively.
                                     for characters:
                                      A = (Speed + 20) * C
                                     for enemies:
                                      A = ( ((Speed + 20) * $3A90) DIV 256) * C  )
C2/0A04: C2 20        REP #$20
C2/0A06: 4A           LSR 
C2/0A07: 4A           LSR 
C2/0A08: 4A           LSR 
C2/0A09: 4A           LSR           (A = A / 16)
C2/0A0A: 9D C8 3A     STA $3AC8,X   (Save as amount by which to increase ATB timer.)
C2/0A0D: 28           PLP 
C2/0A0E: 60           RTS 

C2/0A0F unknow

C2/0A0F: 20 01 03     JSR $0301
C2/0A12: BD CC 32     LDA $32CC,X
C2/0A15: 10 F8        BPL $0A0F
C2/0A17: AC 64 3A     LDY $3A64
C2/0A1A: 8A           TXA 
C2/0A1B: D9 20 37     CMP $3720,Y
C2/0A1E: D0 05        BNE $0A25
C2/0A20: A9 FF        LDA #$FF
C2/0A22: 99 20 37     STA $3720,Y
C2/0A25: C8           INY 
C2/0A26: CC 65 3A     CPY $3A65
C2/0A29: 90 EF        BCC $0A1A
C2/0A2B: BD 19 32     LDA $3219,X
C2/0A2E: D0 08        BNE $0A38
C2/0A30: DE 19 32     DEC $3219,X
C2/0A33: A9 D3        LDA #$D3
C2/0A35: 20 92 07     JSR $0792
C2/0A38: E0 08        CPX #$08
C2/0A3A: B0 0D        BCS $0A49
C2/0A3C: A9 2C        LDA #$2C
C2/0A3E: 4C 91 4E     JMP $4E91

C2/0A41 unknow

C2/0A41: A9 FD        LDA #$FD
C2/0A43: 3D A1 3A     AND $3AA1,X
C2/0A46: 9D A1 3A     STA $3AA1,X
C2/0A49: 60           RTS 

C2/0A4A prepare equipment spell activations on low HP

C2/0A4A: BD A0 3A     LDA $3AA0,X
C2/0A4D: 89 10        BIT #$10
C2/0A4F: D0 3F        BNE $0A90    (Exit function)
C2/0A51: A9 02        LDA #$02
C2/0A53: 3C E5 3E     BIT $3EE5,X
C2/0A56: F0 38        BEQ $0A90    (Branch if not Near Fatal)
C2/0A58: 3C 05 32     BIT $3205,X  (is bit 1 set?)
C2/0A5B: F0 33        BEQ $0A90    (exit if not, meaning we've already activated
                                    a spell on low HP this battle)
C2/0A5D: 5D 05 32     EOR $3205,X
C2/0A60: 9D 05 32     STA $3205,X  (turn off bit 1)
                                   (TRB $3205,X could've replaced two instructions)
C2/0A63: BD 59 3C     LDA $3C59,X
C2/0A66: 4A           LSR 
C2/0A67: 90 0B        BCC $0A74   (Branch if not Shell when low HP)
C2/0A69: 48           PHA 
C2/0A6A: A9 25        LDA #$25
C2/0A6C: 85 B8        STA $B8     (Shell spell ID)
C2/0A6E: A9 26        LDA #$26
C2/0A70: 20 91 4E     JSR $4E91
C2/0A73: 68           PLA 
C2/0A74: 4A           LSR 
C2/0A75: 90 0B        BCC $0A82   (branch if not Safe when low HP)
C2/0A77: 48           PHA 
C2/0A78: A9 1C        LDA #$1C
C2/0A7A: 85 B8        STA $B8     (Safe spell ID)
C2/0A7C: A9 26        LDA #$26
C2/0A7E: 20 91 4E     JSR $4E91
C2/0A81: 68           PLA 
C2/0A82: 4A           LSR 
C2/0A83: 90 0B        BCC $0A90   (branch if not Reflect when low HP [no item
                                   in game has this feature, but it's possible])
C2/0A85: 48           PHA 
C2/0A86: A9 24        LDA #$24
C2/0A88: 85 B8        STA $B8     (Rflect spell ID)
C2/0A8A: A9 26        LDA #$26
C2/0A8C: 20 91 4E     JSR $4E91
C2/0A8F: 68           PLA 
C2/0A90: 60           RTS 

C2/0A91 unknow

C2/0A91: A2 06        LDX #$06
C2/0A93: BD 18 30     LDA $3018,X
C2/0A96: 2C 74 3A     BIT $3A74
C2/0A99: F0 08        BEQ $0AA3
C2/0A9B: 2C 2C 3F     BIT $3F2C
C2/0A9E: D0 03        BNE $0AA3
C2/0AA0: 20 0F 0A     JSR $0A0F
C2/0AA3: CA           DEX 
C2/0AA4: CA           DEX 
C2/0AA5: 10 EC        BPL $0A93
C2/0AA7: 60           RTS 

C2/0AA8 unknow

C2/0AA8: A5 B1        LDA $B1
C2/0AAA: 4A           LSR 
C2/0AAB: B0 0A        BCS $0AB7
C2/0AAD: BD 19 32     LDA $3219,X
C2/0AB0: D0 05        BNE $0AB7
C2/0AB2: A9 88        LDA #$88
C2/0AB4: 20 B4 11     JSR $11B4
C2/0AB7: DA           PHX 
C2/0AB8: BD F9 3E     LDA $3EF9,X
C2/0ABB: 49 08        EOR #$08    (Toggle Morph status)
C2/0ABD: 4A           LSR 
C2/0ABE: 4A           LSR 
C2/0ABF: 4A           LSR 
C2/0AC0: 4A           LSR 
C2/0AC1: 08           PHP         (save Carry flag, which is opposite of
                                   "currently Morphed")
C2/0AC2: 7B           TDC 
C2/0AC3: 69 03        ADC #$03
C2/0AC5: 85 EE        STA $EE      ($EE = 3 or 4, depending on carry flag)
C2/0AC7: 8A           TXA 
C2/0AC8: EB           XBA 
C2/0AC9: A9 06        LDA #$06
C2/0ACB: 20 81 47     JSR $4781
C2/0ACE: AA           TAX 
C2/0ACF: A0 04        LDY #$04
C2/0AD1: BD 2E 20     LDA $202E,X  (get contents of menu slot)
C2/0AD4: C5 EE        CMP $EE
C2/0AD6: D0 05        BNE $0ADD    (if Morphed and menu item isn't Morph(3), branch  -OR-
                                    if not Morphed and menu item isn't Revert(4), branch)
C2/0AD8: 49 07        EOR #$07   
C2/0ADA: 9D 2E 20     STA $202E,X  (toggle menu item between Morph(3) and Revert(4) )
C2/0ADD: E8           INX 
C2/0ADE: E8           INX 
C2/0ADF: E8           INX 
C2/0AE0: 88           DEY 
C2/0AE1: D0 EE        BNE $0AD1    (loop for all 4 menu items)
C2/0AE3: 28           PLP 
C2/0AE4: FA           PLX 
C2/0AE5: 90 1A        BCC $0B01    (Branch if currently Morphed)
C2/0AE7: 08           PHP 
C2/0AE8: 20 36 0B     JSR $0B36    (Establish new value for Morph supply based on its
                                    previous value and the current Morph timer)
C2/0AEB: A9 FF        LDA #$FF
C2/0AED: 8D E2 3E     STA $3EE2    (Store null as Morphed character)
C2/0AF0: 9E 04 3B     STZ $3B04,X  (Set the Morph gauge for this entity to 0)
C2/0AF3: E0 08        CPX #$08     (Compare target number to 8)
C2/0AF5: B0 03        BCS $0AFA    (Branch if it's greater (not a character))
C2/0AF7: 20 7D 52     JSR $527D    (Update availability of commands on character's
                                    main menu - grey out or enable)
C2/0AFA: C2 20        REP #$20
C2/0AFC: 9C 30 3F     STZ $3F30    (morph timer = 0)
C2/0AFF: 28           PLP 
C2/0B00: 60           RTS 

C2/0B01 unknow

C2/0B01: DA           PHX
C2/0B02: 08           PHP 
C2/0B03: AD E2 3E     LDA $3EE2   (Which target is Morphed)
C2/0B06: 10 2B        BPL $0B33   (Exit function if someone is already Morphed)
C2/0B08: AD BB 3E     LDA $3EBB
C2/0B0B: 4A           LSR 
C2/0B0C: 4A           LSR 
C2/0B0D: 6A           ROR 
C2/0B0E: B0 23        BCS $0B33   (Exit function if bit 2 of $3EBB is set..
                                   Set for just Phunbaba battle #4 [i.e. Terra's
                                   second Phunbaba encounter])
C2/0B10: 0A           ASL         (Put Bit 1 into Carry)
C2/0B11: 8E E2 3E     STX $3EE2
C2/0B14: 7B           TDC 
C2/0B15: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0B17: 3A           DEC 
C2/0B18: 8D 30 3F     STA $3F30   (Morph timer = 65535)
C2/0B1B: AE F6 1C     LDX $1CF6   (Morph supply)
C2/0B1E: 20 92 47     JSR $4792   (65535 / Morph supply)
C2/0B21: 90 01        BCC $0B24   (Branch if bit 1 of $3EBB not set.
                                   This bit is set in Terra's 2nd Phunbaba battle
                                   [i.e. Phunbaba #4], and lasts afterward.  So
                                   little Terra gains some resolve here? ^__^)
C2/0B23: 4A           LSR 
C2/0B24: 4A           LSR 
C2/0B25: 4A           LSR 
C2/0B26: 4A           LSR         (A = (65535 / Morph supply) / 8  [pre-Phunbaba]
                                   A = (65535 / Morph supply) / 16  [post-Phunbaba] )
C2/0B27: C9 00 08     CMP #$0800  
C2/0B2A: 90 03        BCC $0B2F
C2/0B2C: A9 FF 07     LDA #$07FF  (this will cap amount to decrement morph time
                                   counter at 2048)
C2/0B2F: 1A           INC
C2/0B30: 8D 32 3F     STA $3F32   (Amount to decrement morph time counter)
C2/0B33: 28           PLP 
C2/0B34: FA           PLX 
C2/0B35: 60           RTS 

C2/0B36 update or set value for morph supply

(Establish new value for Morph supply based on its previous value and
 the current Morph timer)
C2/0B36: AD E2 3E     LDA $3EE2   (Which target is Morphed)
C2/0B39: 30 0E        BMI $0B49   (Exit if no one is Morphed)
C2/0B3B: AD F6 1C     LDA $1CF6
C2/0B3E: EB           XBA
C2/0B3F: AD 31 3F     LDA $3F31
C2/0B42: 20 81 47     JSR $4781   (16-bit A = morph supply * (morph timer DIV 256) )
C2/0B45: EB           XBA 
C2/0B46: 8D F6 1C     STA $1CF6   (morph supply =
                                   (morph supply * (morph timer DIV 256)) DIV 256  )
C2/0B49: 60           RTS 

C2/0B4A unknow

C2/0B4A: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0B4C: BD 18 30     LDA $3018,X
C2/0B4F: 0C 2C 3F     TSB $3F2C   (flag entity as Jumping)
C2/0B52: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/0B54: BD A0 3A     LDA $3AA0,X
C2/0B57: 29 9B        AND #$9B
C2/0B59: 09 08        ORA #$08
C2/0B5B: 9D A0 3A     STA $3AA0,X
C2/0B5E: AC 66 3A     LDY $3A66    (get current action queue position?)
C2/0B61: 8A           TXA 
C2/0B62: D9 20 38     CMP $3820,Y  (does queue entry match our current entity?)
C2/0B65: D0 05        BNE $0B6C    (if not, branch and move to next entry)
C2/0B67: A9 FF        LDA #$FF     
C2/0B69: 99 20 38     STA $3820,Y  (if there was a match, null out this queue entry)
C2/0B6C: C8           INY          (move to next entry)
C2/0B6D: CC 67 3A     CPY $3A67
C2/0B70: 90 EF        BCC $0B61    (keep looping until position matches next available
                                    queue slot -- i.e., we've checked through the end of
                                    the queue)
C2/0B72: BD 05 32     LDA $3205,X
C2/0B75: 29 7F        AND #$7F
C2/0B77: 9D 05 32     STA $3205,X
C2/0B7A: 9E B5 3A     STZ $3AB5,X
C2/0B7D: A9 E0        LDA #$E0
C2/0B7F: 9D 2C 32     STA $322C,X  (save delay between inputting command and performing it.
                                    iow, how long you spend in the "ready stance."  E0h
                                    is the same delay as the Jump command, and its ready
                                    stance constitutes the character being airborne.)
C2/0B82: 60           RTS 

C2/0B83 damage modification

Modify Damage, Heal Undead, and Elemental modification
C2/0B83: 08           PHP
C2/0B84: E2 20        SEP #$20
C2/0B86: AD A6 11     LDA $11A6   (Battle Power)
C2/0B89: D0 03        BNE $0B8E   (Branch if not 0)
C2/0B8B: 4C 2B 0C     JMP $0C2B   (Exit function if 0)
C2/0B8E: AD A4 11     LDA $11A4   (Special Byte 2)
C2/0B91: 30 05        BMI $0B98   (Branch if power = factor of HP)
C2/0B93: 20 9E 0C     JSR $0C9E   (Damage modification)
C2/0B96: 80 03        BRA $0B9B
C2/0B98: 20 87 0D     JSR $0D87   (Figure HP based damage)
C2/0B9B: 64 F2        STZ $F2
C2/0B9D: B9 E4 3E     LDA $3EE4,Y (Status byte 1 of target)
C2/0BA0: 0A           ASL 
C2/0BA1: 30 57        BMI $0BFA   (Branch if target is Petrify, damage = 0)

C2/0BA3: AD A4 11     LDA $11A4
C2/0BA6: 85 F2        STA $F2     (Store special byte 2 in $F2.  what we're looking
                                   at is Bit 1, the Heal flag.)
C2/0BA8: AD A2 11     LDA $11A2
C2/0BAB: 89 08        BIT #$08
C2/0BAD: F0 24        BEQ $0BD3   (Branch if not Invert Damage on Undead)
C2/0BAF: B9 95 3C     LDA $3C95,Y
C2/0BB2: 10 0B        BPL $0BBF   (Branch if not undead)
C2/0BB4: AD AA 11     LDA $11AA
C2/0BB7: 89 82        BIT #$82    (Check if dead or zombie attack)
C2/0BB9: D0 70        BNE $0C2B   (Exit if ^)
C2/0BBB: 64 F2        STZ $F2     (Clear heal flag)
C2/0BBD: 80 07        BRA $0BC6
C2/0BBF: B9 E4 3E     LDA $3EE4,Y
C2/0BC2: 89 02        BIT #$02    (Check for Zombie status)
C2/0BC4: F0 0D        BEQ $0BD3   (Branch if not zombie)
C2/0BC6: AD A4 11     LDA $11A4
C2/0BC9: 89 02        BIT #$02
C2/0BCB: F0 06        BEQ $0BD3   (Branch if not redirection)
C2/0BCD: A5 F2        LDA $F2
C2/0BCF: 49 01        EOR #$01
C2/0BD1: 85 F2        STA $F2     (Toggle heal flag)

C2/0BD3: AD A1 11     LDA $11A1
C2/0BD6: F0 46        BEQ $0C1E   (Branch if non-elemental)
C2/0BD8: AD C8 3E     LDA $3EC8   (Forcefield nullified elements)
C2/0BDB: 49 FF        EOR #$FF
C2/0BDD: 2D A1 11     AND $11A1
C2/0BE0: F0 18        BEQ $0BFA   (Set damage to 0 if element nullified)
C2/0BE2: B9 CC 3B     LDA $3BCC,Y (Absorbed elements)
C2/0BE5: 2C A1 11     BIT $11A1
C2/0BE8: F0 08        BEQ $0BF2   (branch if none are used in attack)
C2/0BEA: A5 F2        LDA $F2
C2/0BEC: 49 01        EOR #$01
C2/0BEE: 85 F2        STA $F2     (toggle healing flag)
C2/0BF0: 80 2C        BRA $0C1E
C2/0BF2: B9 CD 3B     LDA $3BCD,Y (Nullified elements)
C2/0BF5: 2C A1 11     BIT $11A1
C2/0BF8: F0 06        BEQ $0C00   (branch if none are used in attack)
C2/0BFA: 64 F0        STZ $F0
C2/0BFC: 64 F1        STZ $F1     (Set damage to 0)
C2/0BFE: 80 1E        BRA $0C1E
C2/0C00: B9 E1 3B     LDA $3BE1,Y (Elements cut in half)
C2/0C03: 2C A1 11     BIT $11A1
C2/0C06: F0 06        BEQ $0C0E   (branch if none are used in attack)
C2/0C08: 46 F1        LSR $F1
C2/0C0A: 66 F0        ROR $F0     (Cut damage in half)
C2/0C0C: 80 10        BRA $0C1E
C2/0C0E: B9 E0 3B     LDA $3BE0,Y (Weak elements)
C2/0C11: 2C A1 11     BIT $11A1
C2/0C14: F0 08        BEQ $0C1E   (branch if none are used in attack)
C2/0C16: A5 F1        LDA $F1
C2/0C18: 30 04        BMI $0C1E   (Don't double damage if over 32768)
C2/0C1A: 06 F0        ASL $F0
C2/0C1C: 26 F1        ROL $F1     (Double damage)
C2/0C1E: AD A9 11     LDA $11A9   (get attack special effect)
C2/0C21: C9 04        CMP #$04
C2/0C23: D0 03        BNE $0C28   (Branch if not Atma Weapon)
C2/0C25: 20 39 0E     JSR $0E39   (Atma Weapon damage modification)
C2/0C28: 20 2D 0C     JSR $0C2D
C2/0C2B: 28           PLP 
C2/0C2C: 60           RTS 

C2/0C2D unknow

C2/0C2D: AD A2 11     LDA $11A2
C2/0C30: 4A           LSR 
C2/0C31: 90 2A        BCC $0C5D   (Branch if not physical damage)
C2/0C33: AD 82 3A     LDA $3A82
C2/0C36: 2D 83 3A     AND $3A83
C2/0C39: 10 22        BPL $0C5D   (Branch if blocked by Golem or dog)
C2/0C3B: BD E4 3E     LDA $3EE4,X
C2/0C3E: 89 02        BIT #$02    (Check for Zombie Status on attacker)
C2/0C40: F0 03        BEQ $0C45   (Branch if no zombie)
C2/0C42: 20 21 0E     JSR $0E21   (Poison / Dark status for zombies)
C2/0C45: AD AB 11     LDA $11AB   (Status set by attack 2)
C2/0C48: 49 A0        EOR #$A0    (Sleep & Muddled)
C2/0C4A: 29 A0        AND #$A0
C2/0C4C: 39 E5 3E     AND $3EE5,Y (Status byte 2)
C2/0C4F: 19 FD 3D     ORA $3DFD,Y
C2/0C52: 99 FD 3D     STA $3DFD,Y (mark Sleep & Muddled to be cleared from target,
                                   provided it already has the statuses, and
                                   the attack itself isn't trying to inflict or remove
                                   them)
C2/0C55: B9 B9 32     LDA $32B9,Y
C2/0C58: 09 80        ORA #$80
C2/0C5A: 99 B9 32     STA $32B9,Y (Flag target to be released from Control at end of
                                   turn)
C2/0C5D: AD A4 11     LDA $11A4
C2/0C60: 89 02        BIT #$02
C2/0C62: F0 11        BEQ $0C75   (Branch if not redirection)
C2/0C64: 20 ED 0D     JSR $0DED   (Cap damage/healing based on max HP/MP of drainer,
                                   and remaining HP/MP of drainee)
C2/0C67: DA           PHX         (save attacker index)
C2/0C68: 5A           PHY         (save target index)
C2/0C69: 5A           PHY 
C2/0C6A: 9B           TXY         (put old attacker index into target index)
C2/0C6B: FA           PLX         (put old target index into attacker index)
C2/0C6C: 20 2F 36     JSR $362F   (save target as attacker's attacker in a counterattack
                                   variable [provided attacker doesn't yet have another
                                   attacker].  reciprocity and all, man.
                                   however, the Carry Flag state passed to this function
                                   seems to be quite arbitrary, particularly if this
                                   is a physical attack [usually being set, but sometimes
                                   not if attacker is a Zombie].  it'll never be set for
                                   magical attacks, which seems suspect as well.)
C2/0C6F: 38           SEC         (enforce 9999 cap for redirection for attacker)
C2/0C70: 20 76 0C     JSR $0C76   
C2/0C73: 7A           PLY         (restore target index)
C2/0C74: FA           PLX         (restore attacker index)
C2/0C75: 18           CLC         (now enforce 9999 cap for target)
C2/0C76: 5A           PHY 
C2/0C77: 08           PHP 
C2/0C78: 2A           ROL 
C2/0C79: 45 F2        EOR $F2     (get Carry XOR attack's heal bit)
C2/0C7B: 4A           LSR 
C2/0C7C: 90 04        BCC $0C82   (branch if:
                                    - we're checking attacker and attack "reverse" drains
                                      [e.g. because target is undead or absorbs element]
                                    - we're checking target and attack damages [includes
                                      draining])
C2/0C7E: 98           TYA 
C2/0C7F: 69 13        ADC #$13
C2/0C81: A8           TAY         (point to Healing instead of Damage)
C2/0C82: C2 20        REP #$20
C2/0C84: B9 D0 33     LDA $33D0,Y (Damage Taken / Healing Done)
C2/0C87: 1A           INC 
C2/0C88: F0 01        BEQ $0C8B   (if no [i.e. FFFFh] damage, treat as zero)
C2/0C8A: 3A           DEC         (otherwise, keep as-is)
C2/0C8B: 18           CLC 
C2/0C8C: 65 F0        ADC $F0     (add Damage/Healing so far to $F0, which is the lowest of:
                                    - attack damage
                                    - HP of target [or attacker if reverse drain] )
                                    - Max HP - HP of attacker [or target if reverse drain] )
C2/0C8E: B0 05        BCS $0C95   (if total Damage/Healing to this target overflowed,
                                   branch and set it to 9999)
C2/0C90: C9 10 27     CMP #$2710  (If over 9999)
C2/0C93: 90 03        BCC $0C98
C2/0C95: A9 0F 27     LDA #$270F  (Truncate Damage to 9999)
C2/0C98: 99 D0 33     STA $33D0,Y (Damage Taken / Healing Done)
C2/0C9A: 28           PLP
C2/0C9C: 7A           PLY 
C2/0C9D: 60           RTS 

C2/0C9E damage modification

Damage modification (Randomness, Row, Self Damage, and more)
C2/0C9E: 08           PHP
C2/0C9F: C2 20        REP #$20
C2/0CA1: AD B0 11     LDA $11B0   (Maximum Damage)
C2/0CA4: 85 F0        STA $F0
C2/0CA6: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/0CA8: AD 14 34     LDA $3414
C2/0CAB: D0 03        BNE $0CB0
C2/0CAD: 4C 3B 0D     JMP $0D3B   (Exit if $3414 = 0)
C2/0CB0: 20 5A 4B     JSR $4B5A   (Random number 0 to 255)
C2/0CB3: 09 E0        ORA #$E0    (Set bits 7,6,5; bits 0,1,2,3,4 are random)
C2/0CB5: 85 E8        STA $E8     (Random number [224..255])
C2/0CB7: 20 3D 0D     JSR $0D3D   (Damage randomness)
C2/0CBA: 18           CLC 
C2/0CBB: AD A3 11     LDA $11A3
C2/0CBE: 30 04        BMI $0CC4   (Branch if Concern MP)
C2/0CC0: AD A2 11     LDA $11A2
C2/0CC3: 4A           LSR 
C2/0CC4: AD A2 11     LDA $11A2
C2/0CC7: 89 20        BIT #$20
C2/0CC9: D0 57        BNE $0D22   (Branch if ignores defense)
C2/0CCB: 08           PHP 
C2/0CCC: B9 B9 3B     LDA $3BB9,Y (Magic Defense)
C2/0CCF: 90 03        BCC $0CD4   (Branch if concern MP or Magical damage)
C2/0CD1: B9 B8 3B     LDA $3BB8,Y (Defense)
C2/0CD4: 1A           INC 
C2/0CD5: F0 10        BEQ $0CE7   (If = 255)
C2/0CD7: EB           XBA 
C2/0CD8: AD 82 3A     LDA $3A82
C2/0CDB: 2D 83 3A     AND $3A83
C2/0CDE: 30 03        BMI $0CE3   (If Blocked by Golem or Dog, defense = 192)
C2/0CE0: A9 C1        LDA #$C1
C2/0CE2: EB           XBA 
C2/0CE3: EB           XBA 
C2/0CE4: 3A           DEC 
C2/0CE5: 49 FF        EOR #$FF
C2/0CE7: 85 E8        STA $E8     (= 255 - Defense)
C2/0CE9: 20 3D 0D     JSR $0D3D   (Multiply damage by (255 - Defense) / 256 ,
                                   then add 1)
C2/0CEC: A3 01        LDA $01,S
C2/0CEE: 4A           LSR 
C2/0CEF: B9 F8 3E     LDA $3EF8,Y (Status byte 3)
C2/0CF2: B0 01        BCS $0CF5   (Branch if physical attack)
C2/0CF4: 0A           ASL 
C2/0CF5: 0A           ASL 
C2/0CF6: 10 07        BPL $0CFF   (Branch if no safe / shell)
C2/0CF8: A9 AA        LDA #$AA
C2/0CFA: 85 E8        STA $E8
C2/0CFC: 20 3D 0D     JSR $0D3D   (Multiply damage by 170 / 256 , then add 1)
C2/0CFF: 28           PLP 
C2/0D00: 90 15        BCC $0D17   (Skip row check if magical attack)
C2/0D02: B9 A1 3A     LDA $3AA1,Y
C2/0D05: 89 02        BIT #$02
C2/0D07: F0 04        BEQ $0D0D   (Branch if not defending)
C2/0D09: 46 F1        LSR $F1
C2/0D0B: 66 F0        ROR $F0     (Cut damage in half)
C2/0D0D: 89 20        BIT #$20    (Check row)
C2/0D0F: F0 11        BEQ $0D22   (Branch if target in front row)
C2/0D11: 46 F1        LSR $F1
C2/0D13: 66 F0        ROR $F0     (Cut damage in half)
C2/0D15: 80 0B        BRA $0D22   (Skip morph if physical attack)
C2/0D17: B9 F9 3E     LDA $3EF9,Y
C2/0D1A: 89 08        BIT #$08
C2/0D1C: F0 04        BEQ $0D22   (Branch if not morph)
C2/0D1E: 46 F1        LSR $F1
C2/0D20: 66 F0        ROR $F0     (Cut damage in half)
C2/0D22: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0D24: AD A4 11     LDA $11A4
C2/0D27: 4A           LSR 
C2/0D28: B0 0A        BCS $0D34   (Branch if heal, heal skips self damage theory)
C2/0D2A: C0 08        CPY #$08
C2/0D2C: B0 06        BCS $0D34   (Branch if target is a monster)
C2/0D2E: E0 08        CPX #$08
C2/0D30: B0 02        BCS $0D34   (Branch if attacker is monster)
C2/0D32: 46 F0        LSR $F0     (Cut damage in half if party attacks party)
C2/0D34: A5 F0        LDA $F0     
C2/0D36: 20 0B 37     JSR $370B   (Increment damage using $BC)
C2/0D39: 85 F0        STA $F0
C2/0D3B: 28           PLP 
C2/0D3C: 60           RTS 

C2/0D3D damage function

Multiplies damage by $E8 / 256 and adds 1
(Used by damage randomness etc.)

C2/0D3D: 08           PHP
C2/0D3E: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0D40: A5 F0        LDA $F0     (Load damage)
C2/0D42: 20 B7 47     JSR $47B7   (Multiply by randomness byte)
C2/0D45: 1A           INC         (Add 1 to damage)
C2/0D46: 85 F0        STA $F0
C2/0D48: 28           PLP 
C2/0D49: 60           RTS 

C2/0D4A atlas armlet and earring function

C2/0D4A: 08           PHP
C2/0D4B: AD A4 11     LDA $11A4   (Special Byte 2)
C2/0D4E: 4A           LSR         
C2/0D4F: B0 34        BCS $0D85   (Exits function if attack heals)
C2/0D51: AD A3 11     LDA $11A3   
C2/0D54: 30 04        BMI $0D5A   (Branch if concern MP) 
C2/0D56: AD A2 11     LDA $11A2   (Special Byte 1)
C2/0D59: 4A           LSR         (Check for physical / magic)
C2/0D5A: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0D5C: AD B0 11     LDA $11B0   (Max Damage)
C2/0D5F: 85 EE        STA $EE     (Stores damage at $EE)
C2/0D61: BD 44 3C     LDA $3C44,X (Relic effects)
C2/0D64: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/0D66: B0 06        BCS $0D6E   (Branch if physical damage unless concerns mp)
C2/0D68: 89 02        BIT #$02
C2/0D6A: D0 09        BNE $0D75   (Branch double earrings - add 50% damage)
C2/0D6C: EB           XBA 
C2/0D6D: 4A           LSR 
C2/0D6E: 4A           LSR 
C2/0D6F: 90 14        BCC $0D85   (Exits function if not Atlas Armlet / Earring)
C2/0D71: 46 EF        LSR $EF     (Halves damage)
C2/0D73: 66 EE        ROR $EE     
C2/0D75: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0D77: A5 EE        LDA $EE
C2/0D79: 4A           LSR         (Halves damage)
C2/0D7A: 18           CLC 
C2/0D7B: 6D B0 11     ADC $11B0   (Adds to damage)
C2/0D7E: 90 02        BCC $0D82   
C2/0D80: 7B           TDC         
C2/0D81: 3A           DEC         
C2/0D82: 8D B0 11     STA $11B0   (Stores result back in damage)
C2/0D85: 28           PLP 
C2/0D86: 60           RTS 

C2/0D87 calculate damage for HP based attacks

Backup XYP
C2/0D87 DA             PHX
C2/0D88 5A             PHY
C2/0D89 08             PHP
Save damage taken
C2/0D8A C2 20          REP #$20        set 16-bit A
C2/0D8C B9 D0 33       LDA $33D0,Y     damage taken
C2/0D8F 1A             INC
C2/0D90 F0 01          BEQ $0D93       If damage is #$FFFF, set it to #$0000
C2/0D92 3A             DEC             restore A (DEC nulls INC)
C2/0D93 85 EE          STA $EE         $EE = damage taken
Set MP based damage if it concerns MP
C2/0D95 E2 20          SEP #$20        set 8-bit A
C2/0D97 20 DD 0D       JSR $0DDD       use MP if concerns MP
Load spell power
C2/0D9A AD A6 11       LDA $11A6       spell power
C2/0D9D 85 E8          STA $E8
Check to use actual HP or max HP
C2/0D9F A5 B5          LDA $B5         actual command
C2/0DA1 C9 01          CMP #$01        Item command
C2/0DA3 F0 06          BEQ $0DAB       use max HP if item
C2/0DA5 AD A2 11       LDA $11A2
C2/0DA8 4A             LSR
C2/0DA9 4A             LSR
C2/0DAA 4A             LSR             check dead xor undead flag
C2/0DAB C2 20          REP #$20        set 16-bit A
C2/0DAD B0 0B          BCS $0DBA       use max HP if dead or undead
Cap actual HP if HP - damage < 0
C2/0DAF 38             SEC             
C2/0DB0 B9 F4 3B       LDA $3BF4,Y     actual HP
C2/0DB3 E5 EE          SBC $EE         subtract damage taken
C2/0DB5 B0 06          BCS $0DBD
C2/0DB7 7B             TDC             damage is zero
C2/0DB8 80 03          BRA $0DBD       
Calculate real damage
C2/0DBA B9 1C 3C       LDA $3C1C,Y     max HP
C2/0DBD 20 CB 0D       JSR $0DCB       A = (spell power * A / 16)
C2/0DC0 48             PHA
C2/0DC1 68             PLA
C2/0DC2 D0 01          BNE $0DC5       if damage isn't null
C2/0DC4 1A             INC             cap damage to 1 if damage is zero
C2/0DC5 85 F0          STA $F0
Restore PYX and exit
C2/0DC7 28             PLP 
C2/0DC8 7A             PLY 
C2/0DC9 FA             PLX 
C2/0DCA 60             RTS

C2/0DCB math: spell power * HP / 16

C2/0DCB: 20 B7 47     JSR $47B7
C2/0DCE: A9 03 00     LDA #$0003
C2/0DD1: DA           PHX
C2/0DD2: AA           TAX 
C2/0DD3: A5 E8        LDA $E8     (Spell Power * HP)
C2/0DD5: 46 EA        LSR $EA     (Cut in half)
C2/0DD7: 6A           ROR 
C2/0DD8: CA           DEX 
C2/0DD9: 10 FA        BPL $0DD5   (Do 4 times)
C2/0DDB: FA           PLX 
C2/0DDC: 60           RTS 

C2/0DDD make damage effects MP instead of HP

C2/0DDD: AD A3 11     LDA $11A3
C2/0DE0: 10 0A        BPL $0DEC   (Branch if not Concern MP)
C2/0DE2: 98           TYA 
C2/0DE3: 18           CLC 
C2/0DE4: 69 14        ADC #$14
C2/0DE6: A8           TAY 
C2/0DE7: 8A           TXA 
C2/0DE8: 18           CLC 
C2/0DE9: 69 14        ADC #$14
C2/0DEB: AA           TAX 
C2/0DEC: 60           RTS 

C2/0DED unknow

Set $F0 to lowest of ($F0, HP/MP of target, Max HP/MP - HP/MP of attacker)
If bit 0 of $F2 is set, switch attacker and target
If bit 7 of $B2 is not set, compare only $F0 and HP of target

C2/0DED: DA           PHX
C2/0DEE: 5A           PHY 
C2/0DEF: 08           PHP 
C2/0DF0: 20 DD 0D     JSR $0DDD   (Set to use MP if concern MP)
C2/0DF3: AD 14 34     LDA $3414
C2/0DF6: 10 25        BPL $0E1D   (Exit if bit 7 $3414 is 0)
C2/0DF8: C2 20        REP #$20
C2/0DFA: A5 F2        LDA $F2
C2/0DFC: 4A           LSR 
C2/0DFD: 90 03        BCC $0E02   (branch if not healing target)
C2/0DFF: DA           PHX 
C2/0E00: BB           TYX 
C2/0E01: 7A           PLY         (Switch target and attacker)
C2/0E02: B9 F4 3B     LDA $3BF4,Y (HP of target)
C2/0E05: C5 F0        CMP $F0
C2/0E07: B0 02        BCS $0E0B   (If HP >= $F0)
C2/0E09: 85 F0        STA $F0
C2/0E0B: A5 B1        LDA $B1
C2/0E0D: 10 0E        BPL $0E1D   (Branch if top bit of $B2 is clear; it's
                                   cleared by the Drain while Seized used by
                                   Tentacles)
C2/0E0F: 9B           TXY         (Make attacker the target)
C2/0E10: 38           SEC 
C2/0E11: B9 1C 3C     LDA $3C1C,Y (Max HP of target)
C2/0E14: F9 F4 3B     SBC $3BF4,Y (HP of target)
C2/0E17: C5 F0        CMP $F0
C2/0E19: B0 02        BCS $0E1D   (If >= $F0)
C2/0E1B: 85 F0        STA $F0
C2/0E1D: 28           PLP 
C2/0E1E: 7A           PLY 
C2/0E1F: FA           PLX 
C2/0E20: 60           RTS 

C2/0E21 zombie chances to inflict dark or poison

Called if Zombie
1 in 16 chance inflict Dark    -OR-
1 in 16 chance inflict Poison

C2/0E21: 20 5A 4B     JSR $4B5A   (Random number 0 to 255)
C2/0E24: C9 10        CMP #$10
C2/0E26: B0 04        BCS $0E2C   
C2/0E28: A9 04        LDA #$04    (will mark Poison status to be set)
C2/0E2A: 80 06        BRA $0E32
C2/0E2C: C9 20        CMP #$20    
C2/0E2E: B0 F0        BCS $0E20   (Exit function)
C2/0E30: A9 01        LDA #$01    (will mark Dark status to be set)
C2/0E32: 19 D4 3D     ORA $3DD4,Y (Status to set byte 1)
C2/0E35: 99 D4 3D     STA $3DD4,Y 
C2/0E38: 60           RTS 

C2/0E39 atma weapon damage

C2/0E39: 08           PHP
C2/0E3A: DA           PHX 
C2/0E3B: 5A           PHY 
C2/0E3C: 9B           TXY 
C2/0E3D: B9 F5 3B     LDA $3BF5,Y (HP / 256)
C2/0E40: 1A           INC 
C2/0E41: EB           XBA 
C2/0E42: B9 18 3B     LDA $3B18,Y (Level)
C2/0E45: 20 81 47     JSR $4781   (Level * ((HP / 256) + 1))
C2/0E48: BE 1D 3C     LDX $3C1D,Y (Max HP / 256)
C2/0E4B: E8           INX 
C2/0E4C: 20 92 47     JSR $4792   ((Level * ((HP / 256) + 1)) / ((Max HP / 256) + 1))
C2/0E4F: 85 E8        STA $E8
C2/0E51: C2 20        REP #$20
C2/0E53: A5 F0        LDA $F0     (load damage so far)
C2/0E55: 20 B7 47     JSR $47B7   (24-bit $E8 = $E8 * damage)
C2/0E58: A9 05 00     LDA #$0005
C2/0E5B: 20 D1 0D     JSR $0DD1   (Divide 24-bit Damage in $E8 by 64. [note that
                                   calculation operates on 4 bytes])
C2/0E5E: 1A           INC         (+1)
C2/0E5F: 85 F0        STA $F0     (save final damage)
                                  (note that we're assuming damage fit into 16 bits,
                                   which should be true provided Level wasn't hacked
                                   past 99.)
C2/0E61: C9 F5 01     CMP #$01F5  (501)
C2/0E64: 90 0D        BCC $0E73   (branch if < 501)
C2/0E66: A2 5B        LDX #$5B    (put index for alternate, bigger weapon
                                   graphic, into X)
C2/0E68: C9 E9 03     CMP #$03E9  (1001)
C2/0E6B: 90 01        BCC $0E6E   (branch if < 1001)
C2/0E6D: E8           INX         (make graphic bigger yet)
C2/0E6E: 86 B7        STX $B7     (save graphic index)
C2/0E70: 20 BB 35     JSR $35BB   (Change Atma Weapon length)
C2/0E73: 7A           PLY 
C2/0E74: FA           PLX 
C2/0E75: 28           PLP 
C2/0E76: 60           RTS 

C2/0E77 JSL: equipment check function

C2/0E77: DA           PHX
C2/0E78: 5A           PHY 
C2/0E79: 8B           PHB 
C2/0E7A: 08           PHP 
C2/0E7B: E2 30        SEP #$30    (Set 8-bit Accumulator, X and Y)
C2/0E7D: 48           PHA 
C2/0E7E: 29 0F        AND #$0F
C2/0E80: A9 7E        LDA #$7E
C2/0E82: 48           PHA 
C2/0E83: AB           PLB         (set Data Bank register to 7E)
C2/0E84: 68           PLA 
C2/0E85: A2 3E        LDX #$3E
C2/0E87: 9E A0 11     STZ $11A0,X
C2/0E8A: CA           DEX 
C2/0E8B: 10 FA        BPL $0E87    (zero out our temporary item bytes)
C2/0E8D: 1A           INC 
C2/0E8E: EB           XBA 
C2/0E8F: A9 25        LDA #$25     (37 bytes of info per character, see Tashibana's
                                    ff6zst.txt for details.  this block is documented as
                                    starting at $1600, but the INC above means X is boosted
                                    by 37 -- perhaps to avoid a negative X later -- so the
                                    base addy is 15DB)
C2/0E91: 20 81 47     JSR $4781
C2/0E94: C2 10        REP #$10       (Set 16-bit X and Y)
C2/0E96: AA           TAX 
C2/0E97: BD DB 15     LDA $15DB,X    (get sprite, which doubles as character index??)
C2/0E9A: EB           XBA 
C2/0E9B: A9 16        LDA #$16       (22 startup bytes per character)
C2/0E9D: 20 81 47     JSR $4781
C2/0EA0: DA           PHX 
C2/0EA1: AA           TAX            (X indexes character startup block)
C2/0EA2: BF AA 7C ED  LDA $ED7CAA,X  (get character Battle Power)
C2/0EA6: 8D AC 11     STA $11AC      
C2/0EA9: 8D AD 11     STA $11AD      (store it in both hands)
C2/0EAC: C2 20        REP #$20       (Set 16-bit Accumulator)
C2/0EAE: BF AB 7C ED  LDA $ED7CAB,X  (character Defense and Magic Defense)
C2/0EB2: 8D BA 11     STA $11BA
C2/0EB5: BF AD 7C ED  LDA $ED7CAD,X  (character Evade and MBlock)
C2/0EB9: E2 20        SEP #$20       (Set 8-bit Accumulator)
C2/0EBB: 8D A8 11     STA $11A8      (save Evade here)
C2/0EBE: EB           XBA 
C2/0EBF: 8D AA 11     STA $11AA      (save MBlock here)
C2/0EC2: BF B5 7C ED  LDA $ED7CB5,X  (character start level info)
C2/0EC6: 29 03        AND #$03
C2/0EC8: 49 03        EOR #$03
C2/0ECA: 1A           INC 
C2/0ECB: 1A           INC 
C2/0ECC: 8D DC 11     STA $11DC      (invert and add 2.  this gives you
                                      5 - (bottom two bits of Level byte) ,
                                      the amount to add to the character's
                                      "Run Success" variable.)
C2/0ECF: FA           PLX           (X indexes into character info block again)
C2/0ED0: A0 06 00     LDY #$0006    (point to Vigor item in character info)
C2/0ED3: BD F5 15     LDA $15F5,X
C2/0ED6: 99 A0 11     STA $11A0,Y   ($11A6 = Vigor, 11A4 = Speed, 11A2 = Stamina,
                                     11A0 = Mag Pwr)
C2/0ED9: E8           INX 
C2/0EDA: 88           DEY 
C2/0EDB: 88           DEY 
C2/0EDC: 10 F5        BPL $0ED3    (loop 4 times)
C2/0EDE: BD EB 15     LDA $15EB,X  (get character Status 1)
C2/0EE1: 85 FE        STA $FE      (save it, it'll be used for tests with Imp equip)
C2/0EE3: A0 05 00     LDY #$0005   (point to last relic slot?)
C2/0EE6: BD FB 15     LDA $15FB,X  
C2/0EE8: 99 C6 11     STA $11C6,Y  (save the item #)
C2/0EEC: 20 9A 0F     JSR $0F9A    (load item data for a slot)
C2/0EEF: CA           DEX 
C2/0EF0: 88           DEY 
C2/0EF1: 10 F3        BPL $0EE6    (loop for all 6 equipment+relic slots)
C2/0EF3: BD ED 15     LDA $15ED,X  (get top byte of Maximum MP)
C2/0EF6: 29 3F        AND #$3F     (zero out top 2 bits, so MP can't exceed 16383)
C2/0EF8: 85 FF        STA $FF      (store top byte of Max MP.
                                    Note: X would be -2 here had the extra 37 not been
                                    added earlier.  i don't think indexed addressing modes
                                    are signed or allow "wrapping", so that was a good
                                    precaution)

C2/0EFA: A9 40        LDA #$40     (first boost we will check is MP + 50%, then lower %)
C2/0EFC: 20 7D 0F     JSR $0F7D    (jump off to handle % MP boosts from equipment)
C2/0EFF: 05 FF        ORA $FF
C2/0F01: 9D ED 15     STA $15ED,X  (store boost in highest 2 bits of MP)
C2/0F04: BD E9 15     LDA $15E9,X  (get top byte of Maximum HP)
C2/0F07: 29 3F        AND #$3F     (zero out top 2 bits, so HP can't exceed 16383)
C2/0F09: 85 FF        STA $FF      (store top byte of Max HP)
C2/0F0B: A9 08        LDA #$08     
C2/0F0D: 20 7D 0F     JSR $0F7D    (go check HP + 50% boost, then lower %)
C2/0F10: 05 FF        ORA $FF
C2/0F12: 9D E9 15     STA $15E9,X  (store boost in highest 2 bits of HP)
C2/0F15: A2 0A 00     LDX #$000A
C2/0F18: BD A1 11     LDA $11A1,X  (did MBlock/Evade/Vigor/Speed/Stamina/MagPwr
                                    exceed 255 with equipment boosts?)
C2/0F1B: F0 09        BEQ $0F26    (if not, look at the next stat)
C2/0F1D: 0A           ASL          (if the topmost bit of the stat is set, it's negative
                                    thanks to horrid equipment.  so bring it up to Zero)
C2/0F1E: 7B           TDC 
C2/0F1F: B0 02        BCS $0F23    (if the topmost bit wasn't set, the stat is just big)
C2/0F21: A9 FF        LDA #$FF     (..  in which case we bring it down to 255)
C2/0F23: 9D A0 11     STA $11A0,X
C2/0F26: CA           DEX 
C2/0F27: CA           DEX 
C2/0F28: 10 EE        BPL $0F18    (loop for all aforementioned stats)
C2/0F2A: AE CE 11     LDX $11CE    (call a function pointer depending on what
                                    is in each hand)
C2/0F2D: FC 47 0F     JSR ($0F47,X)
C2/0F30: AD D7 11     LDA $11D7   
C2/0F33: 10 0D        BPL $0F42   (if Boost Vigor bit isn't set, exit function)
C2/0F35: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/0F37: AD A6 11     LDA $11A6
C2/0F3A: 4A           LSR 
C2/0F3B: 18           CLC 
C2/0F3C: 6D A6 11     ADC $11A6
C2/0F3F: 8D A6 11     STA $11A6   (if Boost Vigor was set, add 50% to Vigor)
C2/0F42: 28           PLP 
C2/0F43: AB           PLB 
C2/0F44: 7A           PLY 
C2/0F45: FA           PLX 
C2/0F46: 6B           RTL 

C2/0F47 pointers: related to weapon and shield equipment

C2/0F47: 67 0F (Do nothing) (shouldn't be called, as i can't get shields in both hands)
C2/0F49: 61 0F (2nd hand is occupied by weapon, 1st hand holds nonweapon)
               (so 2nd hand will strike.  i.e. it retains some Battle Power)
C2/0F4B: 68 0F (1st hand is occupied by weapon, 2nd hand holds nonweapon)
               (so 1st hand will strike)

C2/0F4D: 6F 0F (1st and 2nd hand are both occupied by weapon)

C2/0F4F: 61 0F (2nd hand is empty, 1st hand holds nonweapon)
               (so 2nd hand will strike)
C2/0F51: 67 0F (Do nothing)  (filler.. shouldn't be called, contradictory 2nd hand)
C2/0F53: 6B 0F (2nd hand is empty, 1st is occupied by weapon)
               (so 1st hand will strike, Gauntlet-ized if applicable)
C2/0F55: 67 0F (Do nothing)  (filler.. shouldn't be called, contradictory 2nd hand)
C2/0F57: 68 0F (1st hand is empty, 2nd hand holds nonweapon)
               (so 1st hand will strike)
C2/0F59: 64 0F (1st hand is empty, 2nd hand occupied by weapon)
               (so 2nd hand will strike, Gauntlet-ized if applicable)
C2/0F5B: 67 0F (Do nothing)  (filler.. shouldn't be called, contradictory 1st hand)
C2/0F5D: 67 0F (Do nothing)  (filler.. shouldn't be called, contradictory 1st hand)
C2/0F5F: 68 0F (1st and 2nd hand both empty)
               (so might as well strike with 1st hand)
(view C2/10B2 to see how the bits for each hand were set)

C2/0F61 unknow

C2/0F61: 20 74 0F     JSR $0F74  
C2/0F64: 9C AC 11     STZ $11AC   (clear Battle Power for 1st hand)
C2/0F67: 60           RTS 

C2/0F68 unknow

C2/0F68: 20 74 0F     JSR $0F74
C2/0F6B: 9C AD 11     STZ $11AD   (clear Battle Power for 2nd hand)
C2/0F6E: 60           RTS 

C2/0F6F related to genji glove effect

(NOTE: C2/0F6F is only called if you have weapons in both hands, which means that's
 the ONLY situation where the Genji Glove effect is cleared.  So you'll do full damage
 with each strike if you have two weapons, but have it reduced by 1/4 if you have zero
 or one weapon.  This is widely acknowledged as ass-backwards; common sense tells you that 
 1 weapon should hardly be more cumbersome than 2...  Nor should a magic glove make
 gripping one a tall feat.

 I suspect Square was thrown by their own byte $11CF, as "set effect to be cleared"
 sounds like an oxymoron.  They were probably trying to *enable* the genji effect below
 (after all, TSB usually _does_ _enable_ things).  At least that's what my forthcoming
 patch will assume... ^__^ )

C2/0F6F: A9 10        LDA #$10    (Genji Glove Effect)
C2/0F71: 0C CF 11     TSB $11CF   (Sets Genji Glove effect to be cleared)
C2/0F74: A9 40        LDA #$40
C2/0F76: 1C DA 11     TRB $11DA   (turn off Gauntlet effect for 1st hand)
C2/0F79: 1C DB 11     TRB $11DB   (turn off Gauntlet effect for 2nd hand)
C2/0F7C: 60           RTS 

C2/0F7D unknow

(11D5 = 
01: Raise Attack Damage         10: Raise HP by 12.5%
02: Raise Magic Damage          20: Raise MP by 25%
04: Raise HP by 25%             40: Raise MP by 50%
08: Raise HP by 50%             80: Raise MP by 12.5% .  from yousei's doc)

C2/0F7D: 2C D5 11     BIT $11D5  
C2/0F80: F0 03        BEQ $0F85  
C2/0F82: A9 80        LDA #$80   (if bit is set, store 50% boost)
C2/0F84: 60           RTS 
C2/0F85: 4A           LSR
C2/0F86: 2C D5 11     BIT $11D5
C2/0F89: F0 03        BEQ $0F8E
C2/0F8B: A9 40        LDA #$40   (if bit is set, store 25% boost)
C2/0F8D: 60           RTS 
C2/0F8E: 0A           ASL
C2/0F8F: 0A           ASL 
C2/0F90: 2C D5 11     BIT $11D5
C2/0F93: F0 03        BEQ $0F98
C2/0F95: A9 C0        LDA #$C0   (if bit is set, store 12.5% boost)
C2/0F97: 60           RTS 
C2/0F98: 7B           TDC        (if none of the bits were set, store 0% boost)
C2/0F99: 60           RTS 

C2/0F9A load item data into memory

C2/0F9A: DA           PHX
C2/0F9B: 5A           PHY      (Y = equip/relic slot, 0 to 5?)
C2/0F9C: EB           XBA 
C2/0F9D: A9 1E        LDA #$1E
C2/0F9F: 20 81 47     JSR $4781       (multiply index by size of item data block)
C2/0FA2: AA           TAX         
C2/0FA3: BF 05 50 D8  LDA $D85005,X   (field effects)
C2/0FA7: 0C DF 11     TSB $11DF
C2/0FAA: C2 20        REP #$20        (Set 16-bit accumulator)
C2/0FAC: BF 06 50 D8  LDA $D85006,X
C2/0FB0: 0C D2 11     TSB $11D2       (status bytes 1 and 2 protection)
C2/0FB3: BF 08 50 D8  LDA $D85008,X
C2/0FB7: 0C D4 11     TSB $11D4       (11D4 = equipment status byte 3,
                                       11D5 = raise attack damage, raise magic damage,
                                       and HP and MP % boosts)
C2/0FBA: BF 0A 50 D8  LDA $D8500A,X   

(battle effects 1 and "status effects 2".  latter is nothing to do with status ailments. 
11D6:
01: Increase Preemptive Atk chance  10: Sketch -> Control
02: Prevent Back/Pincer attacks     20: Slot -> GP Rain
    (this won't work for battles
     where back/pincer are forced)
04: Fight -> Jump                   40: Steal -> Capture
08: Magic -> X-Magic                80: Jump continuously

11D7:
01: Increase Steal Rate         10: 100% Hit Rate
02: --                          20: Halve MP Consumption
04: Increase Sketch Rate        40: Reduce MP Consumption to 1
08: Increase Control Rate       80: Raise Vigor               .  yousei's doc)

C2/0FBE: 0C D6 11     TSB $11D6
C2/0FC1: BF 0C 50 D8  LDA $D8500C,X  (battle effects 2 and 3)
C2/0FC5: 0C D8 11     TSB $11D8

(11D8:
01: Fight -> X-Fight                    10: Can equip a weapon in each hand
02: Randomly Counter Attacks            20: Wearer can equip heavy armor
04: Increases chance of evading attack  40: Wearer protects those with low HP
08: Attack with two hands               80:

11D9:
01: Casts Shell when HP is low          10: Doubles Gold received
02: Casts Safe when HP is low           20:
04: Casts Rflect when HP is low         40:
08: Doubles Experience received         80: Makes body cold

C2/0FC8: BF 10 50 D8  LDA $D85010,X   (Vigor+ / Speed+ / Stamina+ / MagPwr+ , by ascending address)
C2/0FCC: A0 06 00     LDY #$0006
C2/0FCF: 48           PHA
C2/0FD0: 29 0F 00     AND #$000F      (isolate bottom nibble)
C2/0FD3: 89 08 00     BIT #$0008      (if top bit of stat boost is set, adjustment will be negative)
C2/0FD6: F0 04        BEQ $0FDC       (if not, branch)
C2/0FD8: 49 F7 FF     EOR #$FFF7      (create a signed 16-bit negative value)
C2/0FDB: 1A           INC             
C2/0FDC: 18           CLC 
C2/0FDD: 79 A0 11     ADC $11A0,Y
C2/0FE0: 99 A0 11     STA $11A0,Y     (make adjustment to stat, ranging from -7 to +7)
                                      ($11A6 = Vigor, 11A4 = Speed, 11A2 = Stamina, 11A0 = Mag Pwr)
C2/0FE3: 68           PLA 
C2/0FE4: 4A           LSR 
C2/0FE5: 4A           LSR 
C2/0FE6: 4A           LSR 
C2/0FE7: 4A           LSR             (get next highest nibble)
C2/0FE8: 88           DEY 
C2/0FE9: 88           DEY 
C2/0FEA: 10 E3        BPL $0FCF       (loop for all 4 stats)
C2/0FEC: BF 1A 50 D8  LDA $D8501A,X   (Evade/MBlock byte)
C2/0FF0: DA           PHX 
C2/0FF1: 48           PHA 
C2/0FF2: 29 0F 00     AND #$000F      (isolate evade)
C2/0FF5: 0A           ASL
C2/0FF6: AA           TAX             (evade nibble * 2, turn into pointer)
C2/0FF7: BF 05 11 C2  LDA $C21105,X   (get actual evade boost/reduction of item)
C2/0FFB: 18           CLC 
C2/0FFC: 6D A8 11     ADC $11A8
C2/0FFF: 8D A8 11     STA $11A8       (add it to other evade boosts)
C2/1002: 68           PLA 
C2/1003: 29 F0 00     AND #$00F0      (isolate mblock)
C2/1006: 4A           LSR
C2/1007: 4A           LSR 
C2/1008: 4A           LSR 
C2/1009: AA           TAX             (mblock nibble * 2, turn into pointer) 
C2/100A: BF 05 11 C2  LDA $C21105,X   (get actual mblock boost/reduction of item)
C2/100E: 18           CLC 
C2/100F: 6D AA 11     ADC $11AA
C2/1012: 8D AA 11     STA $11AA       (add it to other mblock boosts)
C2/1015: FA           PLX 
C2/1016: E2 20        SEP #$20        (Set 8-bit Accumulator)
C2/1018: BF 14 50 D8  LDA $D85014,X   (get weapon battle power / armor defense power)
C2/101C: EB           XBA 
C2/101D: BF 02 50 D8  LDA $D85002,X   (get top byte of equippable chars?)
C2/1021: 0A           ASL 
C2/1022: 0A           ASL             (carry = Specs active when Imp?)
C2/1023: A5 FE        LDA $FE         (Character Status Byte 1)
C2/1025: B0 02        BCS $1029       (branch if imp-activated)
C2/1027: 49 20        EOR #$20        (flip Imp status)
C2/1029: 89 20        BIT #$20        (character has Imp status?)
C2/102B: D0 03        BNE $1030       
C2/102D: A9 01        LDA #$01        (if you're an Imp and specs aren't Imp-activated,
                                       defense/battle power = 1.  or if you're not an Imp
                                       and the specs are Imp-activated, battle/defense
                                       power = 1)
C2/102F: EB           XBA 
C2/1030: EB           XBA             (if imp-activation and imp status match, put the
                                       original Battle/Defense Power back in bottom of A)

(note that Item #255 has a Battle Power of 10, so bare hands will actually be
 stronger than Imp Halberd on a non-Imp)

C2/1031: 85 FD        STA $FD        
C2/1033: BF 00 50 D8  LDA $D85000,X  (item type)
C2/1037: 29 07        AND #$07       (isolate classification)
C2/1039: 3A           DEC 
C2/103A: F0 76        BEQ $10B2      (if it's a weapon, branch)
C2/103C: BF 19 50 D8  LDA $D85019,X
C2/1040: 0C BC 11     TSB $11BC      (equipment status byte 2)
C2/1043: BF 0F 50 D8  LDA $D8500F,X  (50% resist elements)
C2/1047: EB           XBA 
C2/1048: BF 18 50 D8  LDA $D85018,X  (weak to elements)
C2/104C: C2 20        REP #$20       (Set 16-bit Accumulator)
C2/104E: 0C B8 11     TSB $11B8      (bottom = weak elements, top = 50% resist elements)
C2/1051: BF 16 50 D8  LDA $D85016,X
C2/1055: 0C B6 11     TSB $11B6      (bottom = absorbed elements, top = nullified elements)
C2/1058: E2 20        SEP #$20       (Set 8-bit Accumulator)
C2/105A: 18           CLC 
C2/105B: A5 FD        LDA $FD        (get equipment Defense Power)
C2/105D: 6D BA 11     ADC $11BA      (add it into Defense so far)
C2/1060: 90 02        BCC $1064
C2/1062: A9 FF        LDA #$FF
C2/1064: 8D BA 11     STA $11BA      (if defense exceeds 255, make it 255)
C2/1067: 18           CLC 
C2/1068: BF 15 50 D8  LDA $D85015,X  (get equipment Magic Defense)
C2/106C: 6D BB 11     ADC $11BB      (add it into MagDef so far)
C2/106F: 90 02        BCC $1073
C2/1071: A9 FF        LDA #$FF
C2/1073: 8D BB 11     STA $11BB      (if magic defense exceeds 255, make it 255)
C2/1076: 7A           PLY 
C2/1077: A9 02        LDA #$02
C2/1079: 1C D5 11     TRB $11D5  (clear "raise magic damage" bit in Item Bonuses --
                                  raise fight, raise magic, HP + %, MP + %)
C2/107C: F0 08        BEQ $1086  
C2/107E: 0C D7 11     TSB $11D7  (if Earring effect is set in current equipment slot, set
                                  it in Item Special 2:
                                  boost steal, single Earring, boost sketch, boost control,
                                  sniper sight, gold hairpin, economizer, vigor + 50%)
C2/1081: F0 03        BEQ $1086
C2/1083: 0C D5 11     TSB $11D5  (if Earring effect had also been set by other equipment
                                  slots, set it again in item bonuses, where it will actually
                                  represent _double_ Earring, even though the initial data
                                  byte would have it set even for a lone Earring)

                                 (if all this crazy bit swapping seems convuluted, keep in
                                  mind that $11D5 isn't RELOADED for each equipment slot;
                                  it's ADDED to via the TSB at C2/0FB7.  thus, we must clear
                                  the Earring bit in $11D5 for each of the 6 equip slots if
                                  we wish to see whether the CURRENT slot gives us the
                                  Earring effect.)

C2/1086: 7B           TDC 
C2/1087: BF 1B 50 D8  LDA $D8501B,X  (item byte 1B, special action)
C2/108B: 99 BE 11     STA $11BE,Y
C2/108E: 89 0C        BIT #$0C    (shield animation for blocked physical/magic attacks
                                   or weapon parry?)
C2/1090: F0 1E        BEQ $10B0   (if none of above, branch)
C2/1092: 48           PHA         (save old Byte 1B)       
C2/1093: 29 03        AND #$03    (isolate bottom 2 bits.  for a given item:
                                   bit 0 = big weapon parry anim.
                                   bit 1 = "any" shield block, all except cursed shld.
                                   both = zephyr cape.  neither = small weapon parry

                                   bit 2 = physical block: shield, weapon parry, or zephyr cape)
                                   bit 3 = magical shield block.  shields only?  )

C2/1095: AA           TAX         (put Acc in X.  Following loop gives us 2^X)
C2/1096: 7B           TDC         (clear Acc)
C2/1097: 38           SEC         (set carry flag)
C2/1098: 2A           ROL         (rotate carry into lowest bit of Acc)
C2/1099: CA           DEX         (decrement X, which was 0-3)
C2/109A: 10 FC        BPL $1098   (loop if X>=0)
C2/109C: EB           XBA 
C2/109D: 68           PLA         (retrieve item byte 1B)    
C2/109E: 89 04        BIT #$04   
C2/10A0: F0 05        BEQ $10A7   (branch if physical block animation not set)
C2/10A2: EB           XBA 
C2/10A3: 0C D0 11     TSB $11D0   (if one of above was set, store our 2^X value)
C2/10A6: EB           XBA 
C2/10A7: 89 08        BIT #$08   
C2/10A9: F0 05        BEQ $10B0   (if no magic attack block for shield, branch)
C2/10AB: EB           XBA 
C2/10AC: 0C D1 11     TSB $11D1   (if there was, store our 2^X value)
C2/10AF: EB           XBA 
C2/10B0: FA           PLX 
C2/10B1: 60           RTS