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