| Season mode: "Scoring Leaders" screen (replaces "Record Holders" in the menus). Top 32 by points (goals break ties),
| 16 per page, Left/Right = page, Start = back. Names come straight from the team records (table at $30E).

        .equ    SRAM_OFF, 0x1000
        .equ    MAGIC,    0x5345534E
        .equ    SRAM_RD,  0x1A244
        .equ    PSTAT_OFF,0x1220
        .equ    ROWLEN,   100
        .equ    KEYS,     0xFFE400       | 800 words: (points*256 + goals) + 1, 0 = taken
        .equ    LORD,     0xFFEA40       | 32 x (team byte, slot byte, key word)
        .equ    PAGE,     0xFFEAC0
        .equ    HDRB,     0xFFEAD0       | 16-byte header copy
        .equ    STR,      0xFFEB00
        .equ    ROWBUF,   0xFFF100

        .text
        .globl  _start
_start:
        moveq   #10,%d0
        moveq   #26,%d1
        jsr     0x9BD8
        jsr     0x11B92
        .word   6
        .byte   0xBD,0x04,0x01,0x00
        moveq   #0x20,%d0
        moveq   #6,%d1
        jsr     0x119B8
        jsr     0x11DE2
        .word   24
        .byte   0xBD,0x06,0x04
        .ascii  "Scoring  Leaders"
        .byte   0xBD,0x07,0x01

        lea     HDRB,%a0                | season header: player block in format 2?
        move.l  #SRAM_OFF,%d0
        moveq   #16,%d1
        jsr     SRAM_RD
        bsr.w   keys
        bsr.w   rank
        clr.w   PAGE
        bsr.w   draw

loop:   moveq   #0,%d0
        jsr     0x80BA
        jsr     0xA41E
        jsr     0x11318
        btst    #7,%d3
        beq.s   4f
        cmpi.w  #0x4D41,0xFFE3BC        | opened from the main menu? go back there
        bne.s   88f
        movea.l 0xFFE3B8,%a0
        jmp     (%a0)
88:     jmp     0x9CD8
4:      btst    #3,%d1
        beq.s   5f
        tst.w   PAGE
        bne.w   loop
        move.w  #1,PAGE
        bsr.w   draw
        bra.w   loop
5:      btst    #2,%d1
        beq.w   loop
        tst.w   PAGE
        beq.w   loop
        clr.w   PAGE
        bsr.w   draw
        bra.w   loop

| keys: KEYS[t*25+k] = points*256 + goals + 1 for every player (all 1 if there are no stats yet)
keys:   lea     KEYS,%a2
        moveq   #0,%d4                  | team
1:      moveq   #0,%d0
        move.w  %d4,%d0
        mulu.w  #ROWLEN,%d0
        addi.l  #PSTAT_OFF,%d0
        lea     ROWBUF,%a0
        moveq   #ROWLEN,%d1
        jsr     SRAM_RD
        lea     ROWBUF,%a0
        moveq   #24,%d5
2:      moveq   #0,%d0
        moveq   #0,%d1
        cmpi.l  #MAGIC,HDRB
        bne.s   3f
        cmpi.w  #2,HDRB+14              | 2 or 3 (3 = with goalie stats)
        bcs.s   3f
        tst.w   HDRB+12                 | "New Season" chosen: empty
        bne.s   3f
        move.b  (%a0),%d0               | goals
        move.b  1(%a0),%d1              | assists
3:      add.w   %d0,%d1                 | points
        lsl.w   #8,%d1
        add.w   %d0,%d1
        addq.w  #1,%d1
        move.w  %d1,(%a2)+
        addq.l  #4,%a0
        dbra    %d5,2b
        addq.w  #1,%d4
        cmpi.w  #32,%d4
        blt.s   1b
        rts

| rank: pick the best 32 keys, one at a time (ties: the first found)
rank:   lea     LORD,%a2
        moveq   #31,%d7
1:      moveq   #0,%d4                  | best key
        moveq   #0,%d5                  | best index
        lea     KEYS,%a1
        moveq   #0,%d6
2:      move.w  (%a1,%d6.w),%d1
        cmp.w   %d4,%d1
        bls.s   3f
        move.w  %d1,%d4
        move.w  %d6,%d5
3:      addq.w  #2,%d6
        cmpi.w  #1600,%d6
        blt.s   2b
        clr.w   (%a1,%d5.w)             | taken
        moveq   #0,%d0
        move.w  %d5,%d0
        lsr.w   #1,%d0
        divu.w  #25,%d0                 | team, slot-1 in the high word
        move.b  %d0,(%a2)+
        swap    %d0
        addq.b  #1,%d0
        move.b  %d0,(%a2)+
        subq.w  #1,%d4
        move.w  %d4,(%a2)+              | points*256 + goals
        dbra    %d7,1b
        rts

draw:   lea     STR+2,%a0
        move.b  #0xF8,(%a0)+
        move.b  #0x06,(%a0)+
        move.b  #0x03,(%a0)+
        move.b  #0x01,(%a0)+
        move.b  #0x05,(%a0)+
        move.b  #0xF9,(%a0)+
        move.b  #0x01,(%a0)+
        lea     hdr,%a1
1:      move.b  (%a1)+,(%a0)+
        bne.s   1b
        subq.l  #1,%a0
        move.w  PAGE,%d7
        mulu.w  #16,%d7
        moveq   #0,%d4
2:      move.w  %d7,%d0
        add.w   %d4,%d0                 | rank-1
        move.b  #0xFC,(%a0)+
        move.w  %d4,%d1
        addq.w  #8,%d1
        move.b  %d1,(%a0)+
        moveq   #1,%d1
        bsr.w   col
        move.w  %d0,%d2
        addq.w  #1,%d2
        bsr.w   num3
        lea     LORD,%a2
        lsl.w   #2,%d0
        moveq   #0,%d5
        moveq   #0,%d6
        move.b  (%a2,%d0.w),%d5         | team
        move.b  1(%a2,%d0.w),%d6        | slot
        move.w  2(%a2,%d0.w),KEYS       | key (KEYS is free again after ranking)
        moveq   #5,%d1
        bsr.w   col
        bsr.w   name                    | name, max 16 characters
        moveq   #22,%d1
        bsr.w   col
        lea     abbr,%a2
        move.w  %d5,%d2
        mulu.w  #3,%d2
        move.b  (%a2,%d2.w),(%a0)+
        move.b  1(%a2,%d2.w),(%a0)+
        move.b  2(%a2,%d2.w),(%a0)+
        moveq   #0,%d3
        moveq   #0,%d0
        move.b  KEYS+1,%d3              | goals
        move.b  KEYS,%d0                | points
        sub.w   %d3,%d0                 | assists
        moveq   #27,%d1
        bsr.w   col
        move.w  %d3,%d2
        bsr.w   num3
        moveq   #31,%d1
        bsr.w   col
        move.w  %d0,%d2
        bsr.w   num3
        moveq   #35,%d1
        bsr.w   col
        move.w  %d3,%d2
        add.w   %d0,%d2
        bsr.w   num3
        addq.w  #1,%d4
        cmpi.w  #16,%d4
        blt.w   2b
        lea     foot,%a1
3:      move.b  (%a1)+,(%a0)+
        bne.s   3b
        subq.l  #1,%a0
        tst.w   PAGE
        bne.s   4f
        move.b  #0x20,-8(%a0)
        bra.s   5f
4:      move.b  #0x20,-1(%a0)
5:      move.l  %a0,%d0
        btst    #0,%d0
        beq.s   6f
        move.b  #0x20,(%a0)+
6:      move.b  #0xF9,(%a0)+
        move.b  #0x00,(%a0)+
        lea     STR,%a1
        move.l  %a0,%d0
        sub.l   %a1,%d0
        move.w  %d0,(%a1)
        jsr     0x11A48
        rts

| name: d5 = team, d6 = slot -> copy the player's name (max 16 chars, '_' -> ' ') to (a0)+
name:   movem.l %d0-%d2/%a1,-(%sp)
        move.w  %d5,%d0
        lsl.w   #2,%d0
        movea.l #0x30E,%a1              | team table at $30E
        movea.l (%a1,%d0.w),%a1         | team record
        move.w  (%a1),%d1               | offset to the players
        adda.w  %d1,%a1
        move.w  %d6,%d2
        bra.s   2f
1:      move.w  (%a1),%d1               | skip one player: length word + name, then 8 bytes
        adda.w  %d1,%a1
        addq.l  #8,%a1
2:      dbra    %d2,1b
        move.w  (%a1)+,%d1
        subq.w  #2,%d1                  | name length (may end in a 0 pad byte)
        cmpi.w  #16,%d1
        ble.s   3f
        moveq   #16,%d1
3:      subq.w  #1,%d1
        bmi.s   6f
4:      move.b  (%a1)+,%d0
        beq.s   6f
        cmpi.b  #0x5F,%d0
        bne.s   5f
        moveq   #0x20,%d0
5:      move.b  %d0,(%a0)+
        dbra    %d1,4b
6:      movem.l (%sp)+,%d0-%d2/%a1
        rts

col:    move.b  #0xFD,(%a0)+
        move.b  %d1,(%a0)+
        rts

num3:   movem.l %d0-%d3,-(%sp)
        andi.l  #0xFFFF,%d2
        divu.w  #100,%d2
        move.w  %d2,%d0
        swap    %d2
        andi.l  #0xFFFF,%d2
        divu.w  #10,%d2
        move.w  %d2,%d1
        swap    %d2
        moveq   #0x20,%d3
        tst.w   %d0
        beq.s   1f
        move.b  %d0,%d3
        addi.b  #0x30,%d3
1:      move.b  %d3,(%a0)+
        moveq   #0x20,%d3
        tst.w   %d0
        bne.s   2f
        tst.w   %d1
        beq.s   3f
2:      move.b  %d1,%d3
        addi.b  #0x30,%d3
3:      move.b  %d3,(%a0)+
        addi.b  #0x30,%d2
        move.b  %d2,(%a0)+
        movem.l (%sp)+,%d0-%d3
        rts

hdr:    .byte   0xFC,7,0xFD,1
        .ascii  "  #"
        .byte   0xFD,5
        .ascii  "Player"
        .byte   0xFD,22
        .ascii  "Team"
        .byte   0xFD,27
        .ascii  "  G"
        .byte   0xFD,31
        .ascii  "  A"
        .byte   0xFD,35
        .ascii  "PTS"
        .byte   0
foot:   .byte   0xFC,0x1A,0xFD,0x10
        .ascii  "[ More ]"
        .byte   0
abbr:   .ascii  "ANABOSBUFCGYCARCHICOLCBJDALDETEDMFLALAKMINMTLNSHNJDNYINYROTTPHIPITSJSSEASTLTBLTORUTAVANVGKWASWPG"
        .even
