X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86%2Fdesctab.asm;h=f6cc14e1b7e3bfcf26f9a9ff5e7b068e116b0139;hb=01fbfb424865291e00242681662ed9b20c33a524;hp=b80c355cee26813935803c5bf7a94e918ebf41bf;hpb=83612bb37fbd8e84d90ecb9e6a7157aadd1e2175;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86/desctab.asm b/Kernel/arch/x86/desctab.asm index b80c355c..f6cc14e1 100644 --- a/Kernel/arch/x86/desctab.asm +++ b/Kernel/arch/x86/desctab.asm @@ -31,7 +31,8 @@ gGDTPtr: ALIGN 8 [global gIDT] gIDT: - times 256 dd 0x00080000,0x00000F00 + ; CS = 0x08, Type = 32-bit Interrupt (0xE = 1 110) + times 256 dd 0x00080000,0x00000E00 [global gIDTPtr] gIDTPtr: dw 256 * 16 - 1 ; Limit @@ -52,7 +53,9 @@ Desctab_Install: jmp 0x08:.pl0code .pl0code: - ; Set IDT + ; Set up IDT + ; Helper Macros + ; - Set an IDT entry to an ISR %macro SETISR 1 mov eax, Isr%1 mov WORD [gIDT + %1*8], ax @@ -63,25 +66,34 @@ Desctab_Install: or ax, 0x8000 mov WORD [gIDT + %1*8 + 4], ax %endmacro -%macro SETUSER 1 - mov ax, WORD [gIDT + %1*8 + 4] - or ax, 0x6000 - mov WORD [gIDT + %1*8 + 4], ax + ; Enable user calling of an ISR +%macro SET_USER 1 + or WORD [gIDT + %1*8 + 4], 0x6000 +%endmacro + ; Set an ISR as a trap (leaves interrupts enabled when invoked) +%macro SET_TRAP 1 + or WORD [gIDT + %1*8 + 4], 0x0100 %endmacro + + ; Error handlers %assign i 0 %rep 32 SETISR i %assign i i+1 %endrep + ; User Syscall SETISR 0xAC - SETUSER 0xAC + SET_USER 0xAC + SET_TRAP 0xAC ; Interruptable + ; MP ISRs %if USE_MP SETISR 0xEE ; 0xEE Timer SETISR 0xEF ; 0xEF Spurious Interrupt %endif - + + ; IRQs %assign i 0xF0 %rep 16 SETISR i @@ -129,14 +141,14 @@ Desctab_Install: %macro ISR_ERRNO 1 [global Isr%1] Isr%1: - xchg bx, bx + ;xchg bx, bx push %1 jmp ErrorCommon %endmacro %macro ISR_NOERR 1 [global Isr%1] Isr%1: - xchg bx, bx + ;xchg bx, bx push 0 push %1 jmp ErrorCommon