Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102a/clib/xsignal.s
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

49 lines
1.5 KiB
ArmAsm

******************************************************************************
*
* Assembly language interface to signal processing in C.
*
* Majority of work is done by "signal.c". All we do is take the
* exception and call the proper C function. Registers, condition
* codes, etc. are all preserved. A return from the function causes
* resumption of normal processing.
*
******************************************************************************
.globl __illinst * Illegal instruction EPA
.globl __trace * Trace Trap EPA
.globl __trap * All trap instructions
.globl __buserr * BUSERR, addressing EPA
.globl __arith * Arithmetic traps EPA
.comm ___signal,64 * -> epa's of C functions
.bss * Ugh!
epa: .ds.l 1 * non-reentrant!!
.text
__illinst: *
move.l ___signal+16,epa * Set up epa
add.l #2,2(a7) * Bump PC to next inst
bra process * Process exception
__trace:
move.l ___signal+20,epa * Set up epa
bra process * process
__trap: *
move.l ___signal+24,epa * Select epa
bra process *
__buserr: * Here for buserr crap
cmpm.l (a7)+,(a7)+ * Prune junk
move.l ___signal+40,epa * move in epa
bra process * process exception
__arith: *
move.l ___signal+32,epa * move in epa
process: * Here to process exception
movem.l d0-d7/a0-a6,-(sp) * Save all registers
move.l epa,a0 * Load entry point
clr.l a6 * Clear out a6
jsr (a0) * Call processing routine
movem.l (sp)+,d0-d7/a0-a6 * restore registers
rtr * Resume processing