bond/misc/legacy_bootloader/kalib/_asm_KeIO32.asm

258 lines
3.5 KiB
NASM

global __asm_KeWritePort;VOID _asm_KeWritePort(ULONG16 Port,ULONG8 Value);
global __asm_KeReadPort;ULONG8 _asm_KeReadPort(ULONG16 Port);
global __asm_KeLoadIDT;VOID _asm_KeLoadIDT(VOID)
global __asm_KeWriteGDT; VOID _asm_KeWriteGDT(PGDT_DESCRIPTOR DescBase ,PWrite_GDT_DESCRIPTOR PDescriptor, ULONG32 index);
;IDT DESC
global __asm_KeDivideError
global __asm_KeSingleStepException
global __asm_KeNMI
global __asm_KeBreakpointException
global __asm_KeOverflow
global __asm_KeBoundsCheck
global __asm_KeInvalidOpcode
global __asm_KeCoprNotAvailable
global __asm_KeDoubleFault
global __asm_KeCoprSegmentOverrun
global __asm_KeInvalidTSS
global __asm_KeSegmentNotPresent
global __asm_KeStackException
global __asm_KeGeneralProtection
global __asm_KePageFault
global __asm_KeCoprError
;8259A Interrupts
global __asm_KeIrqInt00
global __asm_KeIrqInt01
global __asm_KeIrqInt02
global __asm_KeIrqInt03
global __asm_KeIrqInt04
global __asm_KeIrqInt05
global __asm_KeIrqInt06
global __asm_KeIrqInt07
global __asm_KeIrqInt08
global __asm_KeIrqInt09
global __asm_KeIrqInt10
global __asm_KeIrqInt11
global __asm_KeIrqInt12
global __asm_KeIrqInt13
global __asm_KeIrqInt14
global __asm_KeIrqInt15
global __asm_EIP2EAX
extern _KeIrqIntHandler
extern _KeIDTPtr
extern _KeExceptionHandler
SLCT_FLAT_C equ 16
__asm_EIP2EAX:
mov eax, [esp]
ret
__asm_KeReadPort:
mov edx, [esp + 4]
xor eax, eax
in al, dx
nop
nop
ret
;push ebp
;mov ebp,esp
;push edx
;mov edx,[ss:ebp+8]
;xor eax,eax
;in al,dx
;nop
;nop
;nop
;pop edx
;pop ebp
;ret
__asm_KeWritePort:
mov edx, [esp + 4]
mov al, [esp + 4 + 4]
out dx, al
nop
nop
ret
;push ebp
;mov ebp,esp
;push edx
;push eax
;mov edx,[ss:ebp+8]
;mov eax,[ss:ebp+12]
;out dx,al
;nop
;nop
;nop
;pop eax
;pop edx
;ret
__asm_KeLoadIDT:
lidt [_KeIDTPtr]
jmp SLCT_FLAT_C:.force
.force:
sti
ret
__asm_KeDivideError:
push 0xFFFFFFFF
push 0
jmp exception
__asm_KeSingleStepException:
push 0xFFFFFFFF
push 1
jmp exception
__asm_KeNMI:
push 0xFFFFFFFF
push 2
jmp exception
__asm_KeBreakpointException:
push 0xFFFFFFFF
push 3
jmp exception
__asm_KeOverflow:
push 0xFFFFFFFF
push 4
jmp exception
__asm_KeBoundsCheck:
push 0xFFFFFFFF
push 5
jmp exception
__asm_KeInvalidOpcode:
push 0xFFFFFFFF
push 6
jmp exception
__asm_KeCoprNotAvailable:
push 0xFFFFFFFF
push 7
jmp exception
__asm_KeDoubleFault:
push 0xFFFFFFFF
push 8
jmp exception
__asm_KeCoprSegmentOverrun:
push 0xFFFFFFFF
push 9
jmp exception
__asm_KeInvalidTSS:
push 0xFFFFFFFF
push 10
jmp exception
__asm_KeSegmentNotPresent:
push 0xFFFFFFFF
push 11
jmp exception
__asm_KeStackException:
push 0xFFFFFFFF
push 12
jmp exception
__asm_KeGeneralProtection:
push 0xFFFFFFFF
push 13
jmp exception
__asm_KePageFault:
push 0xFFFFFFFF
push 14
jmp exception
__asm_KeCoprError:
push 0xFFFFFFFF
push 15
jmp exception
exception:
call _KeExceptionHandler
add esp,8
hlt
__asm_KeIrqInt00:
push 0
jmp interrupt
__asm_KeIrqInt01:
push 1
jmp interrupt
__asm_KeIrqInt02:
push 2
jmp interrupt
__asm_KeIrqInt03:
push 3
jmp interrupt
__asm_KeIrqInt04:
push 4
jmp interrupt
__asm_KeIrqInt05:
push 5
jmp interrupt
__asm_KeIrqInt06:
push 6
jmp interrupt
__asm_KeIrqInt07:
push 7
jmp interrupt
__asm_KeIrqInt08:
push 8
jmp interrupt
__asm_KeIrqInt09:
push 9
jmp interrupt
__asm_KeIrqInt10:
push 10
jmp interrupt
__asm_KeIrqInt11:
push 11
jmp interrupt
__asm_KeIrqInt12:
push 12
jmp interrupt
__asm_KeIrqInt13:
push 13
jmp interrupt
__asm_KeIrqInt14:
push 14
jmp interrupt
__asm_KeIrqInt15:
push 15
jmp interrupt
interrupt:
call _KeIrqIntHandler
add esp,4
hlt