| Sharp X68000 millisecond tick.
|
| Human68k already runs MFP Timer C as its ~100 Hz system tick, so rather than
| program a timer of our own we CHAIN its interrupt: bump a counter, then jump
| to whatever handler was there before. That keeps the OS clock working and
| costs one add per tick.
|
| Entered DIRECTLY from 68000 exception vector $45 (MFP channel 5 = Timer C,
| vector base $40 | 5), so this is a raw interrupt handler -- it must not
| disturb any register and must not return with RTS. It does neither: addq.l on
| an absolute address touches no register, and control leaves through a JMP to
| the previous handler, which owns the RTE.
|
| The JMP's operand is patched at install time by installTickIsr() in hal.c via
| the x68kTickChainAddr symbol below. Patching the operand rather than doing an
| indirect jump through a pointer is what keeps this register-free -- a 68000
| has no jmp ([abs]) addressing mode.
|
| GAS m68k syntax, ELF target -- symbols carry NO leading underscore.

                .text
                .even
                .globl  x68kTickIsr
                .globl  x68kTickChainAddr

x68kTickIsr:
                addq.l  #1,gX68kTicks
                .word   0x4EF9              | jmp <abs.l>
x68kTickChainAddr:
                .long   0                   | patched with the previous handler
