Added a nicer trap handler
This commit is contained in:
parent
a951391408
commit
0928518b8d
3 changed files with 116 additions and 1 deletions
|
@ -55,3 +55,4 @@ write.c
|
|||
brksize.s
|
||||
sendrec.s
|
||||
catchsig.s
|
||||
trp.s
|
||||
|
|
|
@ -25,7 +25,7 @@ libsys.a: libsys_s.a
|
|||
march . libsys.a
|
||||
|
||||
libsys_o.a: libsys.a ../../../lib/i86/tail_em
|
||||
mkdir X; cd X; aal x ../libsys.a; aal x ../../../../lib/i86/tail_em; aal rv ../libsys_o.a *.o ; cd ..
|
||||
mkdir X; cd X; aal x ../../../../lib/i86/tail_em; aal x ../libsys.a; aal rv ../libsys_o.a *.o ; cd ..
|
||||
rm -rf X
|
||||
|
||||
clean:
|
||||
|
|
114
mach/minix/libsys/trp.s
Normal file
114
mach/minix/libsys/trp.s
Normal file
|
@ -0,0 +1,114 @@
|
|||
.sect .text ; .sect .rom; .sect .data; .sect .bss
|
||||
.define .trpdivz
|
||||
.define .trpilin
|
||||
.define .trpcase
|
||||
.define .trprang
|
||||
.define .trpset
|
||||
.define .trpnofp
|
||||
.define .trpheap
|
||||
.define .trp
|
||||
.define .stop
|
||||
|
||||
.sect .text
|
||||
.extern .trpdivz
|
||||
.extern .trpilin
|
||||
.extern .trpcase
|
||||
.extern .trprang
|
||||
.extern .trpset
|
||||
.extern .trpnofp
|
||||
.extern .trpheap
|
||||
.extern .trp
|
||||
|
||||
.trpdivz:
|
||||
mov ax,6
|
||||
mov dx,.Mdivz
|
||||
jmp .Trp
|
||||
.trpilin:
|
||||
mov ax,18
|
||||
mov dx,.Milin
|
||||
jmp .Trp
|
||||
.trpcase:
|
||||
mov ax,20
|
||||
mov dx,.Mcase
|
||||
jmp .Trp
|
||||
.trprang:
|
||||
mov ax,1
|
||||
mov dx,.Mrang
|
||||
jmp .Trp
|
||||
.trpset:
|
||||
mov ax,2
|
||||
mov dx,.Mset
|
||||
jmp .Trp
|
||||
.trpnofp:
|
||||
mov ax,18
|
||||
mov dx,.Mnofp
|
||||
jmp .Trp
|
||||
.trpheap:
|
||||
mov ax,17
|
||||
mov dx,.Mheap
|
||||
jmp .Trp
|
||||
|
||||
.Trp:
|
||||
xor bx,bx
|
||||
.extern .trppc
|
||||
xchg bx,(.trppc)
|
||||
test bx,bx
|
||||
jz 2f
|
||||
push ax
|
||||
call (bx)
|
||||
pop ax
|
||||
ret
|
||||
2:
|
||||
mov bx,22
|
||||
push bx
|
||||
push dx
|
||||
mov ax,2
|
||||
push ax
|
||||
call _write
|
||||
.stop:
|
||||
call _exit
|
||||
|
||||
.trp:
|
||||
mov dx,ax
|
||||
cmp dx,21
|
||||
jae 1f
|
||||
sal dx,1
|
||||
mov bx,.Mtable
|
||||
add bx,dx
|
||||
mov bx,(bx)
|
||||
test bx,bx
|
||||
jz 1f
|
||||
mov dx,bx
|
||||
jmp 2f
|
||||
1:
|
||||
mov bx,.Mtrp+14
|
||||
mov cx,6
|
||||
mov dx,ax
|
||||
1:
|
||||
and dx,7
|
||||
add dx,'0'
|
||||
movb (bx),dl
|
||||
dec bx
|
||||
sar dx,1
|
||||
sar dx,1
|
||||
sar dx,1
|
||||
loop 1b
|
||||
mov dx,.Mtrp
|
||||
2:
|
||||
jmp .Trp
|
||||
|
||||
.sect .rom
|
||||
.Mtable:
|
||||
.data2 0, .Mrang, .Mset, 0, 0, 0, .Mdivz, 0
|
||||
.data2 0, 0, 0, 0, 0, 0, 0, 0
|
||||
.data2 0, .Mheap, .Milin, .Milin, .Mcase
|
||||
|
||||
.Mdivz: .asciz "Error: Division by 0 \n"
|
||||
.Milin: .asciz "Illegal EM instruct'n\n"
|
||||
.Mcase: .asciz "Err in EM case instr \n"
|
||||
.Mrang: .asciz "Variable out of range\n"
|
||||
.Mset: .asciz "Err in EM set instr \n"
|
||||
.Mnofp: .asciz "Floating pt not impl.\n"
|
||||
.Mheap: .asciz "Heap overflow \n"
|
||||
|
||||
.Mtrp: .asciz "EM trap 0000000 octal\n"
|
Loading…
Reference in a new issue