53 lines
1.1 KiB
ArmAsm
53 lines
1.1 KiB
ArmAsm
# $Header$
|
|
.globl .trp
|
|
|
|
.trp:
|
|
pushl r0
|
|
movl 8(sp),r0
|
|
movl 4(sp),8(sp)
|
|
movl (sp)+,(sp)
|
|
cmpl r0,$16
|
|
bgequ L1 # a trapnumber >= 16 cannot be ignored
|
|
bbc r0,.trpim,L1
|
|
movl (sp)+,r0
|
|
rsb
|
|
L1:
|
|
pushr $017776 # save registers
|
|
pushl r0 # trapnumber on stack
|
|
movl .trppc,r0
|
|
beql L2 # is there a user defined traphandler?
|
|
clrl .trppc
|
|
calls $1,(r0) # if so, call it
|
|
popr $017776 # restore registers
|
|
movl (sp)+,r0
|
|
rsb
|
|
|
|
.set write,4
|
|
|
|
L2:
|
|
# Put the (octal) trapnumber in the zeroes in Lemes[].
|
|
|
|
movl $Lemesend-9,r1 # Addres after last '0'.
|
|
movl $5,r2 # Max number of digits.
|
|
movl (sp),r0 # Trap number in r0.
|
|
L3:
|
|
bicw3 $0177770,r0,r3 # Lower 3 bits form lower octal digit.
|
|
bisb2 r3,-(r1) # Put them in the '0'.
|
|
ashl $-3,r0,r0 # Shift the 3 bits off.
|
|
sobgtr r2,L3
|
|
movl ap,r2
|
|
movl $Lwr,ap
|
|
chmk $write
|
|
movl r2,ap
|
|
bpt
|
|
.data
|
|
Lemes:
|
|
.byte 'E,'M,' ,'t,'r,'a,'p,' ,'0,'0,'0,'0,'0,' ,'(,'o,'c,'t,'a,'l,'),0xa
|
|
Lemesend:
|
|
.align 2
|
|
Lwr:
|
|
.long 3 # 3 arguments.
|
|
.long 2 # File descriptor 2.
|
|
.long Lemes # Address of character buffer.
|
|
.long Lemesend - Lemes # Number of characters to write.
|