#include "mem.h"
/*
* pointer to initial gdt (must be in first 64K of program)
*/
GLOBL gdtptr(SB),$6
DATA gdtptr+0(SB)/2, $(5*8)
DATA gdtptr+2(SB)/4, $gdt(SB)
/*
* pointer to idt (must be in first 64K of program)
*/
GLOBL idtptr(SB),$6
DATA idtptr+0(SB)/2, $(6*8)
DATA idtptr+2(SB)/4, $idt(SB)
/*
* boot processor
*/
TEXT start(SB),$0
CLI /* disable interrupts */
/* point CPU at the interrupt/trap table */
LEAL idtptr(SB),AX
/* MOVL (AX),IDTR /**/
/* point data segment at low memory */
XORL AX,AX
/* MOVW AX,DS /**/
/* point CPU at the interrupt/trap table */
LEAL gdtptr(SB),AX
/* MOVL (AX),GDTR /**/
CALL main(SB)
/* never returns */
/*
* first 16 ``standard'' traps
*/
TEXT trap0(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $0
JMP alltrap
TEXT trap1(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $1
JMP alltrap
TEXT trap2(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $2
JMP alltrap
TEXT trap3(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $3
JMP alltrap
TEXT trap4(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $4
JMP alltrap
TEXT trap5(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $5
JMP alltrap
TEXT trap6(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $6
JMP alltrap
TEXT trap7(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $7
JMP alltrap
TEXT trap8(SB),$0
PUSHL $8
JMP alltrap
TEXT trap9(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $9
JMP alltrap
TEXT trap10(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $10
JMP alltrap
TEXT trap11(SB),$0
PUSHL $11
JMP alltrap
TEXT trap12(SB),$0
PUSHL $12
JMP alltrap
TEXT trap13(SB),$0
PUSHL $13
JMP alltrap
TEXT trap14(SB),$0
PUSHL $14
JMP alltrap
TEXT trap15(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $15
JMP alltrap
/*
* invalid trap
*/
TEXT invtrap(SB),$0
PUSHL $0 /* put on an error code */
PUSHL $16
JMP alltrap
/*
* common trap code
*/
alltrap:
/* PUSHL DS /**/
PUSHAL
MOVL $KDSEL, AX
/* MOVW AX, DS /**/
CALL trap(SB)
POPAL
/* POPL DS /**/
ADDL $8,SP /* pop the trap and error codes */
IRETL