| Optional ordinary human B release: minimum six native skater interaction ticks.
| Native ABAA owns countdown; native14E54 owns contact admission. No frame,
| collision, puck movement, CPU pass, keeper save or RNG hook is added.
| Off=0, On=1 at F010. Four independent tagged records4D2A..4D31 (Light gap).
| +0 human release, +4 mapped load, +8 mapped store, +12 season-only reset.
    .equ VALUE,0xFFFFF010
    .equ MAP,0xA130F1
    .text
    .globl _start
_start:
    bra.w release
    bra.w load
    bra.w put
    bra.w reset

release:
    move.w %sr,-(%sp)
    movem.l %d0/%a0,-(%sp)
    cmpi.w #1,VALUE
    bne.w released
    btst #3,0x62(%a3)
    beq.w released
    tst.w 0x34(%a3)
    bmi.w released
    move.w 0x52(%a3),%d0
    cmpi.w #11,%d0
    bhi.w released
    cmp.w 0xFFFFB7AA,%d0
    bne.w released
    tst.w 0xFFFFD412
    bne.w released
    btst #0,0xFFFFC2FA
    bne.w released
    btst #2,0xFFFFC2F2
    bne.w released
    btst #3,0xFFFFC2F6
    bne.w released
    move.b 0xFFFFC2EA,%d0
    andi.b #0x11,%d0
    bne.w released
    move.b 0xFFFFC2EC,%d0
    andi.b #0x81,%d0
    bne.w released
    btst #0,0x63(%a3)
    bne.w released
    lea 0xFFFFB04A,%a0
    moveq #11,%d0
actors:
    tst.w 0x34(%a0)
    ble.s next                      | native keeper and inactive roles never change
    tst.b 0x5E(%a0)
    bmi.s next                      | preserve special/long signed native lock states
    cmpi.b #6,0x5E(%a0)
    bcc.s next                      | never shorten passer/injury/other native cooldown
    move.b #6,0x5E(%a0)
next:
    adda.w #128,%a0
    dbra %d0,actors
released:
    movem.l (%sp)+,%d0/%a0
    move.w (%sp)+,%sr
    rts

record:
    lea 0x209A55,%a0                | native, Full, Light, Mini; two logical bytes each
    tst.w 0xFFFFF06C
    beq.s record_done
    move.w 0xFFFFF06A,%d0
    subq.w #1,%d0
    cmpi.w #2,%d0
    bhi.s record_done
    addq.w #1,%d0
    lsl.w #2,%d0
    adda.w %d0,%a0
record_done:
    rts
load:
    move.w %sr,-(%sp)
    movem.l %d0-%d1/%a0,-(%sp)
    clr.w VALUE
    bsr.s record
    moveq #0,%d0
    move.b (%a0),%d0
    move.w %d0,%d1
    andi.w #0xFE,%d1
    cmpi.w #0x70,%d1
    bne.s loaded
    not.b %d0
    cmp.b 2(%a0),%d0
    bne.s loaded
    not.b %d0
    andi.w #1,%d0
    move.w %d0,VALUE
loaded:
    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
    moveq #0x70,%d0
    cmpi.w #1,VALUE
    bne.s write
    addq.w #1,%d0
write:
    move.b %d0,(%a0)
    not.b %d0
    move.b %d0,2(%a0)
    lea 0x208001,%a0
    moveq #0,%d0
    move.w #0x1FFD,%d1
sum:
    add.b (%a0),%d0
    addq.l #2,%a0
    dbra %d1,sum
    not.b %d0
    move.b %d0,(%a0)
    not.b %d0
    move.b %d0,2(%a0)
    movem.l (%sp)+,%d0-%d1/%a0
    move.w (%sp)+,%sr
    rts
reset:
    move.w 0xFFFFF06C,-(%sp)
    move.w #1,0xFFFFF06C             | native→fresh season never resets the native choice
    clr.w VALUE
    bsr.w put
    move.w (%sp)+,0xFFFFF06C
    rts
