| Native Player Cards team summary and position caption. The old FA952 walker
| uses original-club ROM line indices, which no longer identify an owned slot.
| Preserve all displaced flags/registers; native font/photographs stay in charge.
card_starting_line:
    movea.l (%a0),%a0
    move.w 6(%a0),%d2
    ext.l %d2
    adda.l %d2,%a0
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s card_line_done
    lea 0xFFFFC6CE,%a0
    tst.w 0xFFFFD4F6
    beq.s card_line_side
    lea 0xFFFFCA32,%a0
card_line_side:
    adda.w #0x16A,%a0
    move.l %a0,32(%sp)
card_line_done:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    rts

| FAB7C..FAB86: the jersey is already printed, A2 selects the actual club,
| D0 is its roster slot. Original counts remain G/F/total, not caption policy:
| the inherited middle-category text says "Coach" despite native forward
| counts also controlling forward/defender line-editor encoding at88D8/8942.
| Only mapped season/Allstar identities get a natural-position caption here.
card_position:
    move.w %d0,-(%sp)          | Exactly the displaced native saved-slot word.
    move.w %sr,-(%sp)
    movem.l %d0-%d7/%a0-%a6,-(%sp)
    bsr.w enabled
    beq.s card_position_allstar
    move.w 2(%sp),%d1
    move.w 0x28(%a2),%d0
    bsr.w uid
    bra.s card_position_uid
card_position_allstar:
    cmpi.w #1,0xFFFFF850
    bne.w card_position_old
    cmpi.w #1,0xFFFFF84C
    bne.w card_position_old
    tst.w 0xFFFFF06C
    bne.w card_position_old
    moveq #0,%d0
    move.w 0x28(%a2),%d0
    cmpi.w #1,%d0
    bhi.w card_position_old
    moveq #0,%d1
    move.w 2(%sp),%d1
    cmpi.w #25,%d1
    bhi.w card_position_old
    mulu.w #26,%d0
    add.w %d1,%d0
    add.w %d0,%d0
    lea 0x22CD00,%a0
    moveq #0,%d1
    move.w (%a0,%d0.w),%d1
    move.l %d1,%d0
card_position_uid:
    cmpi.l #831,%d0
    bhi.w card_position_old
    lea 0x239B80,%a0
    moveq #0,%d1
    move.b (%a0,%d0.w),%d1
    cmpi.w #5,%d1
    bhi.s card_position_old
    add.w %d1,%d1
    lea card_position_strings(%pc),%a1
    move.w (%a1,%d1.w),%d0
    adda.w %d0,%a1
    jsr 0x11A48
    | The original terminal TST preserves X from its native classification:
    | G/F paths call9F40 (last nibble shift X1), D path only9F5C (add X0).
    | Preserve that contract for every incoming IRQ/CCR, too.
    jsr 0x9F5C
    cmp.w 2(%sp),%d0
    ble.s card_position_x0
    ori.w #0x10,60(%sp)
    bra.s card_position_return
card_position_x0:
    andi.w #0xFFEF,60(%sp)
card_position_return:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    jmp 0xFABD4                | Original TST.W saved slot, outer MOVEM/RTS.
card_position_old:
    movem.l (%sp)+,%d0-%d7/%a0-%a6
    move.w (%sp)+,%sr
    jsr 0x9F5C
    cmp.w (%sp),%d0
    jmp 0xFAB86
card_position_strings:
    .word card_role_g-card_position_strings
    .word card_role_lw-card_position_strings
    .word card_role_c-card_position_strings
    .word card_role_rw-card_position_strings
    .word card_role_f-card_position_strings
    .word card_role_d-card_position_strings
card_role_g:
    .word 10
    .ascii " Goalie "
card_role_lw:
    .word 6
    .ascii " LW "
card_role_c:
    .word 6
    .ascii " C  "
card_role_rw:
    .word 6
    .ascii " RW "
card_role_f:
    .word 6
    .ascii " F  "
card_role_d:
    .word 6
    .ascii " D  "
    .even
