experimental/pass_height.s

Download file

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

1    .ifndef WITH_DIRECTIONAL2    .equ WITH_DIRECTIONAL,03    .endif4    .ifndef WITH_PASS_SPEED5    .equ WITH_PASS_SPEED,06    .endif7| Optional targeted B-pass lift. Normal keeps the native cap12; Low caps at6.8| Horizontal intercept arithmetic, A flips, C shots and blind passes are not hooked.9| Exports +0 lift, +4 mapped load, +8 mapped season store, +12 menu writer.10| F0DC: active enum0Normal/1Low. Tagged/complemented bytes50AF/51AE persist at11| logical1EEE..1EEF per season; native1EF6..1FFF remains untouched. Standalone12| r5 standalone preference uses Light shared gap4D20..21; r4 2E20 was outside13| the Full gap and overlapped goalie data. r4 layout is retained only for rollback.14    .equ VALUE,0xFFFFF0DC15    .equ SREC,0x203DDD16    .if WITH_PASS_SPEED17    .equ NREC,0x209A41                | logical4D20, Light-bank shared-profile gap excluded by slot copies18    .else19    .equ NREC,0x205C4120    .endif21    .equ VIEW,0xFFFFF06C22    .equ MAP,0xA130F123    .text24    .globl _start25_start:26    bra.w lift27    bra.w load28    bra.w season_store29    bra.w writer30    .if WITH_PASS_SPEED31    bra.w mapped_put                  | +16 writer for the shared lift/speed record, mapper already on32    .endif33lift:34    .if WITH_PASS_SPEED35    cmpi.w #1,0xFFFFF0E836    bne.s ordinary_lift37    move.l %d2,-(%sp)38    move.w 0xFFFFF0EA,%d2              | original native timing, before independent speed solve39    bsr.s lift_value40    move.l (%sp)+,%d241    jmp 0xBF7042ordinary_lift:43    bsr.s lift_value44    jmp 0xBF7045lift_value:46    .endif47    move.b %d2,0xFFFFB776             | exact original unbounded vertical assignment48    cmpi.w #1,VALUE49    beq.s low50    cmpi.w #12,%d251    blt.s lift_done52    move.b #12,0xFFFFB77653    bra.s lift_done54low:55    cmpi.w #6,%d256    blt.s lift_done57    move.b #6,0xFFFFB77658lift_done:59    .if WITH_PASS_SPEED60    rts61    .else62    jmp 0xBF70                       | native horizontal intercept/timing continues with D2 intact63    .endif6465record:66    lea SREC,%a067    tst.w VIEW68    bne.s record_ready69    lea NREC,%a070record_ready:71    rts72load:73    .if WITH_DIRECTIONAL74    jmp 0x2E681075    .else76    move.w %sr,-(%sp)77    movem.l %d0-%d1/%a0,-(%sp)78    bsr.s record79    clr.w VALUE                      | absent/corrupt/old preference always Normal80    .if WITH_PASS_SPEED81    clr.w 0xFFFFF0E882    .endif83    moveq #0,%d084    move.b (%a0),%d085    move.w %d0,%d186    .if WITH_PASS_SPEED87    andi.w #0xFC,%d188    .else89    andi.w #0xFE,%d190    .endif91    cmpi.w #0x50,%d192    bne.s loaded93    not.b %d094    cmp.b 2(%a0),%d095    bne.s loaded96    not.b %d097    .if WITH_PASS_SPEED98    move.w %d0,%d199    lsr.w #1,%d1100    andi.w #1,%d1101    move.w %d1,0xFFFFF0E8102    .endif103    andi.w #1,%d0104    move.w %d0,VALUE105loaded:106    movem.l (%sp)+,%d0-%d1/%a0107    move.w (%sp)+,%sr108    rts109    .endif110season_store:111    tst.w VIEW                       | called only within the existing active-bank checksum path112    beq.s season_done113    move.w %sr,-(%sp)114    movem.l %d0/%a0,-(%sp)115    lea SREC,%a0116    bsr.s put117    movem.l (%sp)+,%d0/%a0118    move.w (%sp)+,%sr119season_done:120    rts121    .if WITH_PASS_SPEED122mapped_put:123    bsr.w record124    .endif125put:126    .if WITH_DIRECTIONAL127    jmp 0x2E6814128    .else129    moveq #0x50,%d0130    cmpi.w #1,VALUE131    bne.s write_record132    addq.w #1,%d0133write_record:134    .if WITH_PASS_SPEED135    cmpi.w #1,0xFFFFF0E8136    bne.s record_encoded137    addq.w #2,%d0138record_encoded:139    .endif140    move.b %d0,(%a0)141    not.b %d0142    move.b %d0,2(%a0)143    rts144    .endif145writer:146    cmpi.w #1,%d3147    bhi.w flags148    tst.w VIEW149    beq.s writable150    tst.w 0xFFFFE3E8                  | completed-game index of the selected season header151    beq.s writable152    cmpi.w #1,0xFFFFE3F0153    beq.w flags154    cmpi.w #3,0xFFFFE3F0155    beq.w flags156    cmpi.w #4,0xFFFFE3F0157    beq.w flags158writable:159    cmp.w VALUE,%d3160    beq.w flags161    move.w %sr,-(%sp)162    movem.l %d0-%d1/%a0-%a1,-(%sp)163    ori.w #0x700,%sr164    move.w %d3,VALUE165    move.b #1,MAP166    bsr.w record167    bsr.s put168    lea 0x200001,%a0169    tst.w VIEW170    bne.s checksum171    .if WITH_PASS_SPEED172    lea 0x208001,%a0173    .else174    lea 0x204001,%a0175    .endif176checksum:177    moveq #0,%d0178    move.w #0x1FFE-1,%d1179sum:180    add.b (%a0),%d0181    addq.l #2,%a0182    dbra %d1,sum183    not.b %d0184    move.b %d0,(%a0)185    not.b %d0186    move.b %d0,2(%a0)187    move.b #0,MAP188    movem.l (%sp)+,%d0-%d1/%a0-%a1189    move.w (%sp)+,%sr190flags:191    tst.w %d2                        | native row writer return contract192    rts193