| Independent even-lane preseason preferences. No odd SRAM byte is changed.
| Four logical bytes per slot at even index7D00..7D0B: TF,value,~value.
| Pending first-game choices may change; a played season uses its saved record.
| +0 row load(all GPR/SR),+4 writer(native TST.W D2 flags).
    .equ TVALUE,0xFFFFF85C
    .equ VIEW,0xFFFFF06C
    .equ SLOT,0xFFFFF06A
    .equ MAP,0xA130F1
    .text
    .globl _start
_start:
    bra.w load
    bra.w writer
load:
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    clr.w TVALUE
    tst.w VIEW
    beq.w loaded
    tst.w 0xFFFFF84C
    bne.w loaded
    moveq #0,%d0
    move.w SLOT,%d0
    subq.w #1,%d0
    cmpi.w #2,%d0
    bhi.w loaded
    move.w #0x2700,%sr
    lsl.w #3,%d0
    lea 0x20FA00,%a0
    adda.w %d0,%a0
    bsr.w wait_dma
    move.b #1,MAP
    cmpi.b #0x54,(%a0)
    bne.s no_preference
    cmpi.b #0x46,2(%a0)
    bne.s no_preference
    moveq #0,%d0
    move.b 4(%a0),%d0
    cmpi.w #1,%d0
    bhi.s no_preference
    move.b 6(%a0),%d1
    not.b %d1
    cmp.b %d1,%d0
    bne.s no_preference
    move.w %d0,TVALUE
    move.b #0,MAP
    cmpi.l #0x5345534E,0xFFFFE3E0
    bne.s loaded
    tst.w 0xFFFFE3E8
    beq.s loaded
    bra.s authoritative
no_preference:
    move.b #0,MAP
authoritative:
    move.w SLOT,%d0
    jsr 0x234014
    tst.l %d0
    ble.s loaded
    movea.l %d0,%a0
    bsr.w wait_dma
    move.b #1,MAP
    moveq #0,%d0
    move.b 12(%a0),%d0
    move.w %d0,TVALUE
    move.b #0,MAP
loaded:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts
writer:
    cmpi.w #1,%d3
    bhi.w writer_flags
    tst.w VIEW
    beq.w writer_flags
    tst.w 0xFFFFF84C
    bne.w writer_flags
    cmpi.w #1,0xFFFFE3F0
    beq.w writer_flags
    cmpi.w #3,0xFFFFE3F0
    beq.w writer_flags
    cmpi.w #4,0xFFFFE3F0
    beq.w writer_flags
    move.w %sr,-(%sp)
    movem.l %d0-%d1/%a0,-(%sp)
    moveq #0,%d0
    move.w SLOT,%d0
    subq.w #1,%d0
    cmpi.w #2,%d0
    bhi.s written
    move.w #0x2700,%sr
    lsl.w #3,%d0
    lea 0x20FA00,%a0
    adda.w %d0,%a0
    bsr.s wait_dma
    move.b #1,MAP
    clr.b (%a0)
    move.b #0x46,2(%a0)
    move.b %d3,4(%a0)
    move.w %d3,%d0
    not.b %d0
    move.b %d0,6(%a0)
    move.b #0x54,(%a0)
    move.b #0,MAP
    move.w %d3,TVALUE
written:
    movem.l (%sp)+,%d0-%d1/%a0
    move.w (%sp)+,%sr
writer_flags:
    tst.w %d2
    rts
wait_dma:
    btst #1,0xC00005
    bne.s wait_dma
    rts
