experimental/refinements.s

Download file

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

1| Presentation/preferences follow-ups. Native mapped SRAM only: even20FA20..2F,2| two complemented bytes per native/Full/Light/Mini context. No odd-bank writes.3| RAMF8D8 units0KMH/1MPH,F8DA glass0On/1Off,F8DC passbar,F8DE compactbar flags,4| F8E0/2 frozen away/home Momentum keys; remaining old64B reservation unused.5| Momentum tiles use192B of the original crowd bufferE900. No transfer overlap.6 .equ UNITS,0xFFFFF8D87 .equ GLASS,0xFFFFF8DA8 .text9 .globl _start10_start:11 bra.w load12 bra.w put13 bra.w reset14 bra.w team_overall15 bra.w pass_power16 bra.w plus_minus17 bra.w line_pool18record:19 lea 0x20FA20,%a020 tst.w 0xFFFFF06C21 beq.s record_ok22 move.w 0xFFFFF06A,%d023 subq.w #1,%d024 cmpi.w #2,%d025 bhi.s record_bad26 addq.w #1,%d027 lsl.w #2,%d028 adda.w %d0,%a029record_ok:30 moveq #0,%d031 rts32record_bad:33 moveq #-1,%d034 rts35load:36 move.w %sr,-(%sp)37 movem.l %d0-%d1/%a0,-(%sp)38 clr.l UNITS39 clr.l 0xFFFFF8DC40 bsr.s record41 bne.s loaded42 moveq #0,%d043 move.b (%a0),%d044 move.w %d0,%d145 andi.w #0xFC,%d146 cmpi.w #0xA4,%d147 bne.s loaded48 not.b %d049 cmp.b 2(%a0),%d050 bne.s loaded51 not.b %d052 move.w %d0,%d153 andi.w #1,%d154 move.w %d1,UNITS55 lsr.w #1,%d056 andi.w #1,%d057 move.w %d0,GLASS58loaded:59 move.w #1,0xFFFFF84860 move.w #1,0xFFFFF04661 movem.l (%sp)+,%d0-%d1/%a062 move.w (%sp)+,%sr63 rts64put:65 move.w %sr,-(%sp)66 movem.l %d0-%d1/%a0,-(%sp)67 bsr.w record68 bne.s stored69 move.w UNITS,%d070 move.w GLASS,%d171 cmpi.w #1,%d072 bhi.s stored73 cmpi.w #1,%d174 bhi.s stored75 add.w %d1,%d176 or.w %d1,%d077 ori.w #0xA4,%d078 move.b %d0,(%a0)79 not.b %d080 move.b %d0,2(%a0)81stored:82 movem.l (%sp)+,%d0-%d1/%a083 move.w (%sp)+,%sr84 rts85reset:86 move.w %sr,-(%sp)87 move.w 0xFFFFF06C,-(%sp)88 move.w #1,0xFFFFF06C89 clr.l UNITS90 clr.l 0xFFFFF8DC91 bsr.w put92 move.w (%sp)+,0xFFFFF06C93 move.w (%sp)+,%sr94 rts95| A2 native team block. Actual transfer UID base OVR average; -1 otherwise.96team_overall:97 move.w %sr,-(%sp)98 movem.l %d1-%d7/%a0-%a2,-(%sp)99 jsr 0x23600C100 beq.s no_overall101 cmpa.w #0xC6CE,%a2102 beq.s overall_team103 cmpa.w #0xCA32,%a2104 bne.s no_overall105overall_team:106 move.w 0x28(%a2),%d7107 jsr 0x9F9A108 move.w %d0,%d6109 beq.s no_overall110 cmpi.w #26,%d6111 bhi.s no_overall112 moveq #0,%d5113 moveq #0,%d4114overall_loop:115 move.w %d7,%d0116 move.w %d4,%d1117 jsr 0x236004118 tst.l %d0119 bmi.s no_overall120 lea 0x239EC0,%a0121 moveq #0,%d1122 move.b (%a0,%d0.w),%d1123 add.w %d1,%d5124 addq.w #1,%d4125 cmp.w %d6,%d4126 bcs.s overall_loop127 divu.w %d6,%d5128 moveq #0,%d0129 move.w %d5,%d0130 bra.s overall_done131no_overall:132 moveq #-1,%d0133overall_done:134 movem.l (%sp)+,%d1-%d7/%a0-%a2135 move.w (%sp)+,%sr136 tst.w %d0137 rts138| D0=raw shotbar-compatible19..31 for an actual held25..100% human pass,139| -1 otherwise. Reads four real charging records, owner and controlled actors.140pass_power:141 move.w %sr,-(%sp)142 movem.l %d1-%d4/%a0-%a2,-(%sp)143 cmpi.w #1,0xFFFFF008144 bne.w no_pass145 tst.w 0xFFFFD412146 bne.w no_pass147 btst #0,0xFFFFC2FA148 bne.w no_pass149 btst #2,0xFFFFC2F2150 bne.w no_pass151 btst #3,0xFFFFC2F6152 bne.w no_pass153 move.b 0xFFFFC2EA,%d0154 andi.b #0x11,%d0155 bne.w no_pass156 move.b 0xFFFFC2EC,%d0157 andi.b #0x81,%d0158 bne.w no_pass159 move.w 0xFFFFB7AA,%d1160 cmpi.w #11,%d1161 bhi.w no_pass162 move.w %d1,%d2163 lsl.w #7,%d2164 lea 0xFFFFB04A,%a2165 adda.w %d2,%a2166 btst #3,0x62(%a2)167 beq.w no_pass168 tst.w 0x34(%a2)169 bmi.w no_pass170 moveq #0,%d2171 lea 0xFFFFF110,%a0172pass_scan:173 cmpi.w #1,6(%a0)174 bne.w next_pass175 cmp.l (%a0),%a2176 bne.w next_pass177 lea 0xFFFFC320,%a1178 move.w (%a1,%d2.w),%d3179 move.w 0xFFFFF0D4,%d4                | native temporary P3/P4 input banks180 cmpi.w #1,%d4181 bne.s bank_two182 tst.w %d2183 bne.s bank_one_p3184 move.w 0xFFFFF0D6,%d3185 bra.s control_ready186bank_one_p3:187 cmpi.w #4,%d2188 bne.s control_ready189 move.w 0xFFFFC320,%d3190 bra.s control_ready191bank_two:192 cmpi.w #2,%d4193 bne.s control_ready194 cmpi.w #2,%d2195 bne.s bank_two_p4196 move.w 0xFFFFF0D8,%d3197 bra.s control_ready198bank_two_p4:199 cmpi.w #6,%d2200 bne.s control_ready201 move.w 0xFFFFC322,%d3202control_ready:203 cmp.w %d3,%d1204 bne.w next_pass205 moveq #0,%d0206 move.w 4(%a0),%d0207 cmpi.w #30,%d0208 bls.s pass_capped209 moveq #30,%d0210pass_capped:211 mulu.w #3,%d0212 addi.w #30,%d0213 lsl.l #4,%d0214 divu.w #120,%d0215 addi.w #15,%d0216 bra.s pass_done217next_pass:218 addq.w #2,%d2219 addq.l #8,%a0220 cmpi.w #8,%d2221 bcs.w pass_scan222no_pass:223 moveq #-1,%d0224pass_done:225 movem.l (%sp)+,%d1-%d4/%a0-%a2226 move.w (%sp)+,%sr227 tst.w %d0228 rts229230| Native11C38 displaced lookup+BTST, with identical non-token behavior.231| Scratch tile7E1 is menu-only here; the game uploads its normal charge art.232plus_minus:233 .if WITH_COSMETIC_UI234 cmpi.w #2*36,%d0235 bne.w ordinary_menu_token236 | Currency packets are owned only by the transfer modal. Keep the original237 | native copyright-like $ mapping for every other text/resource/caller.238 cmpa.l #0xFFFFF162,%a1239 bcs.w original_glyph240 cmpa.l #0xFFFFF187,%a1241 bcc.w original_glyph242 cmpa.l #0xAB81C,%a2243 beq.s currency_glyph244 cmpa.l #0xBEEB4,%a2245 bne.w original_glyph246currency_glyph:247 move.w %sr,-(%sp)248 movem.l %d1-%d3/%a0-%a2,-(%sp)249 ori.w #0x700,%sr250currency_dma_wait:251 move.w 0xC00004,%d1252 btst #1,%d1253 bne.s currency_dma_wait254 move.w #0x8F02,0xC00004255 move.l #0x7C400003,0xC00004256 lea 0x25A020,%a1257 moveq #7,%d1258currency_copy:259 move.l (%a1)+,0xC00000260 dbra %d1,currency_copy261 jsr 0x11952262 move.w #0x7E2,%d0263 btst #3,0xFFFFC2F8264 beq.s currency_large265 sub.w 0xFFFFBF52,%d0266 bra.s currency_done267currency_large:268 sub.w 0xFFFFB012,%d0269currency_done:270 movem.l (%sp)+,%d1-%d3/%a0-%a2271 move.w (%sp)+,%sr272 move.w %d0,%d0273 btst #3,0xFFFFC2F8274 rts275ordinary_menu_token:276 .endif277 cmpi.w #2*126,%d0278 bne.w original_glyph279 btst #3,0xFFFFC2F8280 beq.w original_glyph281 cmpa.l #0xBEEB4,%a2                 | exact native small-font character map only282 bne.w original_glyph283 move.w %sr,-(%sp)284 movem.l %d1-%d3/%a0-%a2,-(%sp)285 ori.w #0x700,%sr286font_dma_wait:287 move.w 0xC00004,%d1288 btst #1,%d1289 bne.s font_dma_wait290 move.w #0x8F02,0xC00004291 move.l #0x7C200003,0xC00004292 lea 0x25A000,%a1293 moveq #7,%d1294font_copy:295 move.l (%a1)+,0xC00000296 dbra %d1,font_copy297 jsr 0x11952                         | restore the native current text-cell VDP destination298 move.w #0x7E1,%d0299 sub.w 0xFFFFBF52,%d0300 movem.l (%sp)+,%d1-%d3/%a0-%a2301 move.w (%sp)+,%sr302 move.w %d0,%d0                      | lookup MOVE flags; keep original X303 btst #3,0xFFFFC2F8304 rts305original_glyph:306 move.w 4(%a2,%d0.w),%d0307 btst #3,0xFFFFC2F8308 rts309310| The inherited any-position hack skips native MOVE.W D5B8,D2. Its stale D2311| selects the defender pool for a transferred RW. Reestablish the actual edited312| position ONLY for active transferred rosters, then exact displaced ANDI flags.313line_pool:314 move.w %sr,-(%sp)315 move.l %d0,-(%sp)316 jsr 0x23600C317 beq.s line_pool_original318 move.w 0xFFFFD5B8,%d2319line_pool_original:320 move.l (%sp)+,%d0321 move.w (%sp)+,%sr322 andi.w #7,%d2323 rts324