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