experimental/replaymenu.s

Download file

Release 2026-11-04-r2 · SHA256 491e608486b3535238da5c742039b0ed796efbd0b0d00229c812e4722cd6a9c2 · Click a line number for a direct link.

1    .ifndef WITH_REFINEMENTS2    .equ WITH_REFINEMENTS,03    .endif4    .ifndef WITH_TRANSFERS5    .equ WITH_TRANSFERS,06    .endif7    .equ TRANSFER_ROW_SHIFT,2*WITH_TRANSFERS8    .ifndef WITH_MOMENTUM9    .equ WITH_MOMENTUM,010    .endif11    .ifndef WITH_FACEOFF_DOTS12    .equ WITH_FACEOFF_DOTS,013    .endif14    .ifndef WITH_AI_SHOT_PLAN15    .equ WITH_AI_SHOT_PLAN,016    .endif17    .ifndef WITH_STRICT_SO18    .equ WITH_STRICT_SO,019    .endif20    .ifndef WITH_ALT_GOALIES21    .equ WITH_ALT_GOALIES,022    .endif23    .ifndef WITH_PICKUP_DELAY24    .equ WITH_PICKUP_DELAY,025    .endif26    .ifndef WITH_PASS_CHARGE27    .equ WITH_PASS_CHARGE,028    .endif29    .ifndef WITH_PENALTY_RATE30    .equ WITH_PENALTY_RATE,031    .endif32    .ifndef WITH_DIRECTIONAL33    .equ WITH_DIRECTIONAL,034    .endif35    .ifndef WITH_PASS_SPEED36    .equ WITH_PASS_SPEED,037    .endif38    .ifndef WITH_PASS_HEIGHT39    .equ WITH_PASS_HEIGHT,040    .endif41    .ifndef ICING_DEFAULT42    .equ ICING_DEFAULT,043    .endif44    .ifndef WITH_PREF_DEFAULTS45    .equ WITH_PREF_DEFAULTS,146    .endif47    .ifndef WITH_ICING_MENU48    .equ WITH_ICING_MENU,149    .endif50    .ifndef WITH_CRIT_OPTION51    .equ WITH_CRIT_OPTION,152    .endif53    .if WITH_CRIT_OPTION54| Global Auto Replays and Crit Shots preferences, independent tagged records.55| +0 row mapper, +4 boot/load, +8 main-menu writer. 0 On, 1 Off.56    .equ VALUE,0xFFFFF0DE57    .equ CVALUE,0xFFFFF0EC58    .equ RECORD,0x205C3159    .equ CRECORD,0x205C3960    .equ MAP,0xA130F161    .text62    .globl _start63_start:64    bra.w rowmap65    bra.w defaults66    bra.w writer67rowmap:68    .if WITH_REFINEMENTS69    cmpi.w #48,%d770    bne.s not_units71    move.w #0xF8D8-0xD048,%d172    rts73not_units:74    cmpi.w #50,%d775    bne.s not_glass76    move.w #0xF8DA-0xD048,%d177    rts78not_glass:79    .endif80    .if WITH_TRANSFERS81    cmpi.w #26,%d782    bne.s not_transfers83    jsr 0x25400084    move.w #0xF85C-0xD048,%d185    rts86not_transfers:87    .endif88    .if WITH_MOMENTUM89    cmpi.w #48+TRANSFER_ROW_SHIFT-4*WITH_REFINEMENTS,%d790    bne.s not_momentum91    move.w #0xF84A-0xD048,%d192    rts93not_momentum:94    .endif95    .if WITH_FACEOFF_DOTS && !WITH_REFINEMENTS96    cmpi.w #46+TRANSFER_ROW_SHIFT,%d797    bne.s not_faceoff_dots98    move.w #0xF848-0xD048,%d199    rts100not_faceoff_dots:101    .endif102    .if WITH_AI_SHOT_PLAN103    cmpi.w #44+TRANSFER_ROW_SHIFT-2*WITH_REFINEMENTS,%d7104    bne.s not_ai_shot_plan105    move.w #0xF810-0xD048,%d1106    rts107not_ai_shot_plan:108    .endif109    .if WITH_STRICT_SO && !WITH_REFINEMENTS110    cmpi.w #42+TRANSFER_ROW_SHIFT,%d7111    bne.s not_strict_so112    move.w #0xF046-0xD048,%d1113    rts114not_strict_so:115    .endif116    .if WITH_ALT_GOALIES117    cmpi.w #40+TRANSFER_ROW_SHIFT,%d7118    bne.s not_alt_goalies119    move.w #0xF012-0xD048,%d1120    rts121not_alt_goalies:122    .endif123    .if WITH_PICKUP_DELAY124    cmpi.w #38+TRANSFER_ROW_SHIFT,%d7125    bne.s not_pickup_delay126    move.w #0xF010-0xD048,%d1127    rts128not_pickup_delay:129    .endif130    .if WITH_PASS_CHARGE131    cmpi.w #36+TRANSFER_ROW_SHIFT,%d7132    bne.s not_charge133    move.w #0xF008-0xD048,%d1134    rts135not_charge:136    .endif137    .if WITH_PENALTY_RATE138    cmpi.w #34+TRANSFER_ROW_SHIFT,%d7139    bne.s not_rate140    move.w #0xF006-0xD048,%d1141    rts142not_rate:143    .endif144    .if WITH_DIRECTIONAL145    cmpi.w #30+TRANSFER_ROW_SHIFT,%d7146    bne.s not_mode147    move.w #0xF0FC-0xD048,%d1148    rts149not_mode:150    cmpi.w #32+TRANSFER_ROW_SHIFT,%d7151    bne.s not_cone152    move.w #0xF0FE-0xD048,%d1153    rts154not_cone:155    .endif156    .if WITH_PASS_SPEED157    cmpi.w #28+TRANSFER_ROW_SHIFT,%d7158    bne.s speed_mapped159    move.w #0xF0E8-0xD048,%d1160    rts161speed_mapped:162    .endif163    .if WITH_PASS_HEIGHT164    cmpi.w #26+TRANSFER_ROW_SHIFT,%d7165    bne.s height_mapped166    move.w #0xF0DC-0xD048,%d1167    rts168height_mapped:169    .endif170    .if WITH_ICING_MENU171    cmpi.w #24,%d7172    bne.s icingmapped173    move.w #0xF0EE-0xD048,%d1174    rts175icingmapped:176    .endif177    cmpi.w #22,%d7178    beq.s critmap179    cmpi.w #20,%d7180    bne.s oldmap181    move.w #0xF0DE-0xD048,%d1182    rts183critmap:184    move.w #0xF0EC-0xD048,%d1185    rts186oldmap:187    move.w %d7,%d1188    cmpi.w #12,%d1189    jmp 0x2FE226190191defaults:192    .if WITH_ICING_MENU193    .if WITH_PREF_DEFAULTS194    move.w #ICING_DEFAULT,0xFFFFF0EE  | fresh Icing On; legacy flag reproduces r6 Off195    .else196    clr.w 0xFFFFF0EE197    .endif198    .endif199    movem.l %d0-%d1/%a0-%a1,-(%sp)200    move.w %sr,-(%sp)201    ori.w #0x700,%sr202    move.b #1,MAP203    lea RECORD,%a0204    lea VALUE,%a1205    move.w #0x5250,%d1206    bsr.w loadrecord207    lea CRECORD,%a0208    lea CVALUE,%a1209    move.w #0x4354,%d1210    bsr.w loadrecord211    .if WITH_PASS_HEIGHT212    jsr 0x2DE404213    .endif214    move.b #0,MAP215    move.w (%sp)+,%sr216    movem.l (%sp)+,%d0-%d1/%a0-%a1217    rts218loadrecord:219    .if WITH_PREF_DEFAULTS220    move.w #1,(%a1)                   | absent/corrupt RP/CT defaults Off, tagged saved values still win221    .else222    clr.w (%a1)223    .endif224    moveq #0,%d0225    move.b (%a0),%d0226    lsl.w #8,%d0227    move.b 2(%a0),%d0228    cmp.w %d1,%d0229    bne.s loaded230    moveq #0,%d0231    move.b 4(%a0),%d0232    cmpi.b #1,%d0233    bhi.s loaded234    not.b %d0235    cmp.b 6(%a0),%d0236    bne.s loaded237    not.b %d0238    move.w %d0,(%a1)239loaded:240    rts241writer:242    cmpi.w #1,%d3243    bhi.w flags244    movem.l %d0-%d1/%a0-%a1,-(%sp)245    lea RECORD,%a0246    lea VALUE,%a1247    move.w #0x5250,%d1248    cmpi.w #22,%d7249    bne.s selected250    lea CRECORD,%a0251    lea CVALUE,%a1252    move.w #0x4354,%d1253selected:254    cmp.w (%a1),%d3255    beq.s unchanged256    move.w %sr,-(%sp)257    ori.w #0x700,%sr258    move.w %d3,(%a1)259    move.b #1,MAP260    move.w %d1,%d0261    lsr.w #8,%d0262    move.b %d0,(%a0)263    move.b %d1,2(%a0)264    move.b %d3,4(%a0)265    move.w %d3,%d0266    not.b %d0267    move.b %d0,6(%a0)268    lea 0x204001,%a0269    moveq #0,%d0270    move.w #0x1FFE-1,%d1271sum:272    add.b (%a0),%d0273    addq.l #2,%a0274    dbra %d1,sum275    not.b %d0276    move.b %d0,(%a0)277    not.b %d0278    move.b %d0,2(%a0)279    move.b #0,MAP280    move.w (%sp)+,%sr281unchanged:282    movem.l (%sp)+,%d0-%d1/%a0-%a1283flags:284    tst.w %d2285    rts286    .else287| Global Auto Replays preference, shared by league slots and native modes.288| +0 row mapper, +4 boot/load, +8 main-menu writer. 0 On, 1 Off.289| Full-bank logical2E18..2E1B is in the shared-profile gap excluded by slots.copybank.290| Tagged/complemented record, included in that bank's normal checksum.291    .equ VALUE,0xFFFFF0DE292    .equ RECORD,0x205C31293    .equ MAP,0xA130F1294    .text295    .globl _start296_start:297    bra.w rowmap298    bra.w defaults299    bra.w writer300rowmap:301    cmpi.w #20,%d7302    bne.s oldmap303    move.w #0xF0DE-0xD048,%d1304    rts305oldmap:306    move.w %d7,%d1307    cmpi.w #12,%d1308    jmp 0x2FE226                       | original map continues with its original CCR309310defaults:311    movem.l %d0/%a0,-(%sp)312    move.w %sr,-(%sp)313    ori.w #0x700,%sr314    move.b #1,MAP315    clr.w VALUE                        | absent/corrupt preference defaults to On316    lea RECORD,%a0317    cmpi.b #0x52,(%a0)318    bne.s loaded319    cmpi.b #0x50,2(%a0)320    bne.s loaded321    moveq #0,%d0322    move.b 4(%a0),%d0323    cmpi.b #1,%d0324    bhi.s loaded325    not.b %d0326    cmp.b 6(%a0),%d0327    bne.s loaded328    not.b %d0329    move.w %d0,VALUE330loaded:331    move.b #0,MAP332    move.w (%sp)+,%sr333    movem.l (%sp)+,%d0/%a0334    rts335writer:336    cmpi.w #1,%d3337    bhi.s flags338    cmp.w VALUE,%d3339    beq.s flags340    movem.l %d0-%d1/%a0,-(%sp)341    move.w %sr,-(%sp)342    ori.w #0x700,%sr343    move.w %d3,VALUE344    move.b #1,MAP345    lea RECORD,%a0346    move.b #0x52,(%a0)347    move.b #0x50,2(%a0)348    move.b %d3,4(%a0)349    move.w %d3,%d0350    not.b %d0351    move.b %d0,6(%a0)352    lea 0x204001,%a0353    moveq #0,%d0354    move.w #0x1FFE-1,%d1355sum:356    add.b (%a0),%d0357    addq.l #2,%a0358    dbra %d1,sum359    not.b %d0360    move.b %d0,(%a0)361    not.b %d0362    move.b %d0,2(%a0)363    move.b #0,MAP364    move.w (%sp)+,%sr365    movem.l (%sp)+,%d0-%d1/%a0366flags:367    tst.w %d2                          | native row-writer return contract368    rts369    .endif370