/*
* boot first processor
*/
TEXT start(SB),$0
/* clear bss */
CALL main(SB)
/* never returns */
/*
* standard traps
*/
divtrap:
PUSHL $0
PUSHL $0
JMP alltrap
debtrap:
PUSHL $0
PUSHL $1
JMP alltrap
nmitrap:
PUSHL $0
PUSHL $2
JMP alltrap
bptrap:
PUSHL $0
PUSHL $3
JMP alltrap
oftrap:
PUSHL $0
PUSHL $4
JMP alltrap
boundtrap:
PUSHL $0
PUSHL $5
JMP alltrap
invtrap:
PUSHL $0
PUSHL $6
JMP alltrap
nocotrap:
PUSHL $0
PUSHL $7
JMP alltrap
dfault:
PUSHL $8
JMP alltrap
csotrap:
PUSHL $0
PUSHL $9
JMP alltrap
tsstrap:
PUSHL $0
PUSHL $10
JMP alltrap
segtrap:
PUSHL $11
JMP alltrap
stacktrap:
PUSHL $12
JMP alltrap
prottrap:
PUSHL $13
JMP alltrap
pagefault:
PUSHL $14
JMP alltrap
cetrap:
PUSHL $0
PUSHL $15
JMP alltrap
CALL noerrcode(SB) /* coprocessor error */
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
CALL noerrcode(SB)
TEXT noerrcode(SB),$0
PUSHL EAX
MOVL 4(ESP),EAX
/* JMP george /**/
TEXT errcode(SB),$0
XCHGL (ESP),EAX
/* fall through */
TEXT saveregs(SB),$0
george:
PUSHL EBX
MOVL $noerrcode(SB),EBX /* calculate trap number */
SUBL EAX,EBX /* ... */
SHRL $1,EBX /* ... */
PUSHL ECX
PUSHL EDX
PUSHL EBP
PUSHL ESI
PUSHL EDI
PUSHL EBX /* save trap number */
CALL trap(SB)
ADDL $4,ESP /* drop trap number */
POPL EDI
POPL ESI
POPL EBP
POPL EDX
POPL ECX
POPL EBX
POPL EAX
ADDL $4,ESP /* drop error code */
IRET
TEXT trap(SB),$0
RET
TEXT main(SB),$0
RET