| Native C4B0/C4C0 multiply signed WORD operands. power*68 exceeds 32767
| above power481: a strong crit reverses X and invokes the native Y fallback.
| Enter with the unchanged native coordinate/saved-register stack and D2=power*68.
| Low powers retain the original instructions exactly. For high powers,
| multiply axis*power first, then x68 in LONGs. Clamp each signed velocity
| component to +/-32767, the puck object's actual signed-word storage limit.
    .text
    .globl _start
_start:
    cmpi.w #481,0xFFBEDE
    bhi.s wide
    jmp 0xC4B0
wide:
    move.w (%sp)+,%d2
    bsr.s axis
    move.w %d2,0xFFB772
    move.w (%sp)+,%d2
    bsr.s axis
    move.w %d2,0xFFB774
    jmp 0xC4C8
axis:
    movem.l %d0-%d1,-(%sp)
    move.w %d2,%d1
    bpl.s magnitude
    neg.w %d2
magnitude:
    mulu.w 0xFFBEDE,%d2
    move.l %d2,%d0
    lsl.l #6,%d2
    lsl.l #2,%d0
    add.l %d0,%d2
    divu.w %d3,%d2
    cmpi.w #32767,%d2
    bls.s sign
    move.w #32767,%d2
sign:
    tst.w %d1
    bpl.s done
    neg.w %d2
done:
    movem.l (%sp)+,%d0-%d1
    rts
