| Presentation/preferences follow-ups. Native mapped SRAM only: even20FA20..2F,
| two complemented bytes per native/Full/Light/Mini context. No odd-bank writes.
| RAMF8D8 units0KMH/1MPH,F8DA glass0On/1Off,F8DC passbar,F8DE compactbar flags,
| F8E0/2 frozen away/home Momentum keys; remaining old64B reservation unused.
| Momentum tiles use192B of the original crowd bufferE900. No transfer overlap.
 .equ UNITS,0xFFFFF8D8
 .equ GLASS,0xFFFFF8DA
 .text
 .globl _start
_start:
 bra.w load
 bra.w put
 bra.w reset
 bra.w team_overall
 bra.w pass_power
 bra.w plus_minus
 bra.w line_pool
record:
 lea 0x20FA20,%a0
 tst.w 0xFFFFF06C
 beq.s record_ok
 move.w 0xFFFFF06A,%d0
 subq.w #1,%d0
 cmpi.w #2,%d0
 bhi.s record_bad
 addq.w #1,%d0
 lsl.w #2,%d0
 adda.w %d0,%a0
record_ok:
 moveq #0,%d0
 rts
record_bad:
 moveq #-1,%d0
 rts
load:
 move.w %sr,-(%sp)
 movem.l %d0-%d1/%a0,-(%sp)
 clr.l UNITS
 clr.l 0xFFFFF8DC
 bsr.s record
 bne.s loaded
 moveq #0,%d0
 move.b (%a0),%d0
 move.w %d0,%d1
 andi.w #0xFC,%d1
 cmpi.w #0xA4,%d1
 bne.s loaded
 not.b %d0
 cmp.b 2(%a0),%d0
 bne.s loaded
 not.b %d0
 move.w %d0,%d1
 andi.w #1,%d1
 move.w %d1,UNITS
 lsr.w #1,%d0
 andi.w #1,%d0
 move.w %d0,GLASS
loaded:
 move.w #1,0xFFFFF848
 move.w #1,0xFFFFF046
 movem.l (%sp)+,%d0-%d1/%a0
 move.w (%sp)+,%sr
 rts
put:
 move.w %sr,-(%sp)
 movem.l %d0-%d1/%a0,-(%sp)
 bsr.w record
 bne.s stored
 move.w UNITS,%d0
 move.w GLASS,%d1
 cmpi.w #1,%d0
 bhi.s stored
 cmpi.w #1,%d1
 bhi.s stored
 add.w %d1,%d1
 or.w %d1,%d0
 ori.w #0xA4,%d0
 move.b %d0,(%a0)
 not.b %d0
 move.b %d0,2(%a0)
stored:
 movem.l (%sp)+,%d0-%d1/%a0
 move.w (%sp)+,%sr
 rts
reset:
 move.w %sr,-(%sp)
 move.w 0xFFFFF06C,-(%sp)
 move.w #1,0xFFFFF06C
 clr.l UNITS
 clr.l 0xFFFFF8DC
 bsr.w put
 move.w (%sp)+,0xFFFFF06C
 move.w (%sp)+,%sr
 rts
| A2 native team block. Actual transfer UID base OVR average; -1 otherwise.
team_overall:
 move.w %sr,-(%sp)
 movem.l %d1-%d7/%a0-%a2,-(%sp)
 jsr 0x23600C
 beq.s no_overall
 cmpa.w #0xC6CE,%a2
 beq.s overall_team
 cmpa.w #0xCA32,%a2
 bne.s no_overall
overall_team:
 move.w 0x28(%a2),%d7
 jsr 0x9F9A
 move.w %d0,%d6
 beq.s no_overall
 cmpi.w #26,%d6
 bhi.s no_overall
 moveq #0,%d5
 moveq #0,%d4
overall_loop:
 move.w %d7,%d0
 move.w %d4,%d1
 jsr 0x236004
 tst.l %d0
 bmi.s no_overall
 lea 0x239EC0,%a0
 moveq #0,%d1
 move.b (%a0,%d0.w),%d1
 add.w %d1,%d5
 addq.w #1,%d4
 cmp.w %d6,%d4
 bcs.s overall_loop
 divu.w %d6,%d5
 moveq #0,%d0
 move.w %d5,%d0
 bra.s overall_done
no_overall:
 moveq #-1,%d0
overall_done:
 movem.l (%sp)+,%d1-%d7/%a0-%a2
 move.w (%sp)+,%sr
 tst.w %d0
 rts
| D0=raw shotbar-compatible19..31 for an actual held25..100% human pass,
| -1 otherwise. Reads four real charging records, owner and controlled actors.
pass_power:
 move.w %sr,-(%sp)
 movem.l %d1-%d4/%a0-%a2,-(%sp)
 cmpi.w #1,0xFFFFF008
 bne.w no_pass
 tst.w 0xFFFFD412
 bne.w no_pass
 btst #0,0xFFFFC2FA
 bne.w no_pass
 btst #2,0xFFFFC2F2
 bne.w no_pass
 btst #3,0xFFFFC2F6
 bne.w no_pass
 move.b 0xFFFFC2EA,%d0
 andi.b #0x11,%d0
 bne.w no_pass
 move.b 0xFFFFC2EC,%d0
 andi.b #0x81,%d0
 bne.w no_pass
 move.w 0xFFFFB7AA,%d1
 cmpi.w #11,%d1
 bhi.w no_pass
 move.w %d1,%d2
 lsl.w #7,%d2
 lea 0xFFFFB04A,%a2
 adda.w %d2,%a2
 btst #3,0x62(%a2)
 beq.w no_pass
 tst.w 0x34(%a2)
 bmi.w no_pass
 moveq #0,%d2
 lea 0xFFFFF110,%a0
pass_scan:
 cmpi.w #1,6(%a0)
 bne.w next_pass
 cmp.l (%a0),%a2
 bne.w next_pass
 lea 0xFFFFC320,%a1
 move.w (%a1,%d2.w),%d3
 move.w 0xFFFFF0D4,%d4                | native temporary P3/P4 input banks
 cmpi.w #1,%d4
 bne.s bank_two
 tst.w %d2
 bne.s bank_one_p3
 move.w 0xFFFFF0D6,%d3
 bra.s control_ready
bank_one_p3:
 cmpi.w #4,%d2
 bne.s control_ready
 move.w 0xFFFFC320,%d3
 bra.s control_ready
bank_two:
 cmpi.w #2,%d4
 bne.s control_ready
 cmpi.w #2,%d2
 bne.s bank_two_p4
 move.w 0xFFFFF0D8,%d3
 bra.s control_ready
bank_two_p4:
 cmpi.w #6,%d2
 bne.s control_ready
 move.w 0xFFFFC322,%d3
control_ready:
 cmp.w %d3,%d1
 bne.w next_pass
 moveq #0,%d0
 move.w 4(%a0),%d0
 cmpi.w #30,%d0
 bls.s pass_capped
 moveq #30,%d0
pass_capped:
 mulu.w #3,%d0
 addi.w #30,%d0
 lsl.l #4,%d0
 divu.w #120,%d0
 addi.w #15,%d0
 bra.s pass_done
next_pass:
 addq.w #2,%d2
 addq.l #8,%a0
 cmpi.w #8,%d2
 bcs.w pass_scan
no_pass:
 moveq #-1,%d0
pass_done:
 movem.l (%sp)+,%d1-%d4/%a0-%a2
 move.w (%sp)+,%sr
 tst.w %d0
 rts

| Native11C38 displaced lookup+BTST, with identical non-token behavior.
| Scratch tile7E1 is menu-only here; the game uploads its normal charge art.
plus_minus:
 .if WITH_COSMETIC_UI
 cmpi.w #2*36,%d0
 bne.w ordinary_menu_token
 | Currency packets are owned only by the transfer modal. Keep the original
 | native copyright-like $ mapping for every other text/resource/caller.
 cmpa.l #0xFFFFF162,%a1
 bcs.w original_glyph
 cmpa.l #0xFFFFF187,%a1
 bcc.w original_glyph
 cmpa.l #0xAB81C,%a2
 beq.s currency_glyph
 cmpa.l #0xBEEB4,%a2
 bne.w original_glyph
currency_glyph:
 move.w %sr,-(%sp)
 movem.l %d1-%d3/%a0-%a2,-(%sp)
 ori.w #0x700,%sr
currency_dma_wait:
 move.w 0xC00004,%d1
 btst #1,%d1
 bne.s currency_dma_wait
 move.w #0x8F02,0xC00004
 move.l #0x7C400003,0xC00004
 lea 0x25A020,%a1
 moveq #7,%d1
currency_copy:
 move.l (%a1)+,0xC00000
 dbra %d1,currency_copy
 jsr 0x11952
 move.w #0x7E2,%d0
 btst #3,0xFFFFC2F8
 beq.s currency_large
 sub.w 0xFFFFBF52,%d0
 bra.s currency_done
currency_large:
 sub.w 0xFFFFB012,%d0
currency_done:
 movem.l (%sp)+,%d1-%d3/%a0-%a2
 move.w (%sp)+,%sr
 move.w %d0,%d0
 btst #3,0xFFFFC2F8
 rts
ordinary_menu_token:
 .endif
 cmpi.w #2*126,%d0
 bne.w original_glyph
 btst #3,0xFFFFC2F8
 beq.w original_glyph
 cmpa.l #0xBEEB4,%a2                 | exact native small-font character map only
 bne.w original_glyph
 move.w %sr,-(%sp)
 movem.l %d1-%d3/%a0-%a2,-(%sp)
 ori.w #0x700,%sr
font_dma_wait:
 move.w 0xC00004,%d1
 btst #1,%d1
 bne.s font_dma_wait
 move.w #0x8F02,0xC00004
 move.l #0x7C200003,0xC00004
 lea 0x25A000,%a1
 moveq #7,%d1
font_copy:
 move.l (%a1)+,0xC00000
 dbra %d1,font_copy
 jsr 0x11952                         | restore the native current text-cell VDP destination
 move.w #0x7E1,%d0
 sub.w 0xFFFFBF52,%d0
 movem.l (%sp)+,%d1-%d3/%a0-%a2
 move.w (%sp)+,%sr
 move.w %d0,%d0                      | lookup MOVE flags; keep original X
 btst #3,0xFFFFC2F8
 rts
original_glyph:
 move.w 4(%a2,%d0.w),%d0
 btst #3,0xFFFFC2F8
 rts

| The inherited any-position hack skips native MOVE.W D5B8,D2. Its stale D2
| selects the defender pool for a transferred RW. Reestablish the actual edited
| position ONLY for active transferred rosters, then exact displaced ANDI flags.
line_pool:
 move.w %sr,-(%sp)
 move.l %d0,-(%sp)
 jsr 0x23600C
 beq.s line_pool_original
 move.w 0xFFFFD5B8,%d2
line_pool_original:
 move.l (%sp)+,%d0
 move.w (%sp)+,%sr
 andi.w #7,%d2
 rts
