| Retain the real native interception, including its B24 animation. A genuine
| friendly pass must not lose its CPU one-timer request solely because that
| interception temporarily sets busy. No actor, puck, RNG or SRAM writes.
| +0 frame eligibility, +4 finishing geometry, +8 owned-catch opening guard.
 .text
 .globl _start
_start:
 bra.w frame_guard
 bra.w finish_ready
 bra.w owned_catch
frame_guard:
 move.w %sr,-(%sp)
 movem.l %d1-%d3,-(%sp)
 moveq #0,%d0
 cmpi.w #1,0xFFFFF07A
 bne.w guard_done
 btst #3,0x62(%a3)
 bne.w guard_done
 btst #2,0x63(%a3)
 bne.w guard_done
 tst.w 0x34(%a3)
 ble.w guard_done
 btst #0,0xFFFFC2EA
 bne.w guard_done
 btst #4,0xFFFFC2EA
 bne.w guard_done
 btst #7,0xFFFFC2EC
 bne.w guard_done
 btst #7,0xFFFFC2EE
 bne.w guard_done
 btst #2,0xFFFFC2F2
 bne.w guard_done
 move.b 0xFFFFC2FA,%d1
 andi.w #5,%d1
 bne.w guard_done
 btst #5,0x62(%a3)
 beq.w guard_yes                 | original ordinary guard semantics

 cmpi.w #0xB24,0x58(%a3)
 bne.w guard_done                | other busy actions remain excluded
 cmpi.w #0x5042,0xFFFFF086
 bne.w guard_done
 tst.w 0xFFFFF08A
 bmi.w guard_done                | zero is the original last valid frame tick
 move.w 0x52(%a3),%d1
 cmpi.w #11,%d1
 bhi.w guard_done
 move.w %d1,%d2
 addq.w #1,%d2
 cmp.w 0xFFFFF088,%d2
 bne.w guard_done
 cmp.w 0xFFFFBEE0,%d1
 beq.s target_valid
 cmp.w 0xFFFFB7AA,%d1
 bne.w guard_done
 move.w %d1,%d3
 ori.w #0xFF00,%d3
 cmp.w 0xFFFFBEE0,%d3
 bne.w guard_done                | native catch stamps FF|receiver as target
target_valid:
 move.w 0xFFFFBEDA,%d2
 cmpi.w #11,%d2
 bhi.w guard_done
 move.w %d1,%d3
 subi.w #6,%d3
 subi.w #6,%d2
 eor.w %d3,%d2
 bmi.w guard_done
 cmp.w 0xFFFFB7AA,%d1
 beq.s catch_context
 move.w 0xFFFFB7AA,%d2
 andi.w #0xFF00,%d2
 cmpi.w #0xFF00,%d2
 bne.w guard_done
 move.w 0xFFFFB7AA,%d2
 andi.w #255,%d2
 cmp.w 0xFFFFBEDA,%d2
 bne.w guard_done
catch_context:
 btst #0,0xFFFFC2EC
 bne.w guard_done
 move.w 0xFFFFF738,%d2
 subi.w #0xA502,%d2
 cmpi.w #5,%d2
 bcs.w guard_done
guard_yes:
 moveq #1,%d0
guard_done:
 movem.l (%sp)+,%d1-%d3
 move.w (%sp)+,%sr
 tst.w %d0
 rts

finish_ready:
 move.w %sr,-(%sp)
 movem.l %d1-%d2,-(%sp)
 bsr.w frame_guard
 tst.w %d0
 beq.s ready_done
 moveq #0,%d0
 move.w 0x14(%a3),%d1
 btst #7,0x62(%a3)
 bne.s ready_depth
 neg.w %d1
ready_depth:
 cmpi.w #160,%d1
 blt.s ready_done
 cmpi.w #252,%d1
 bgt.s ready_done
 move.w (%a3),%d2
 bpl.s ready_abs
 neg.w %d2
ready_abs:
 cmpi.w #92,%d2
 bgt.s ready_done
 jsr 0x2DD018                   | unchanged native playbook lane geometry
ready_done:
 movem.l (%sp)+,%d1-%d2
 move.w (%sp)+,%sr
 tst.w %d0
 rts

owned_catch:
 move.w %sr,-(%sp)
 move.w %d1,-(%sp)
 moveq #0,%d0
 cmpi.w #0xB24,0x58(%a3)
 bne.s owned_done
 move.w 0x52(%a3),%d1
 cmp.w 0xFFFFB7AA,%d1
 bne.s owned_done
 bsr.w frame_guard
owned_done:
 move.w (%sp)+,%d1
 move.w (%sp)+,%sr
 tst.w %d0
 rts
