inthandle.inc内容如下:
_TestHandler:
TestHandler = _TestHandler - LABEL_SEG_CODE32
mov ah, 0ch
mov edi,130
mov al,'0'
mov [gs:edi],ax
jmp $
_DEHandler:
DEHandler = _DEHandler - LABEL_SEG_CODE32
mov ax,'DE'
call showerr
jmp $
_DBHandler:
DBHandler = _DBHandler - LABEL_SEG_CODE32
mov ax,'DB'
call showerr
jmp $
_BPHandler:
BPHandler = _BPHandler - LABEL_SEG_CODE32
mov ax,'BP'
call showerr
jmp $
_OFHandler:
OFHandler = _OFHandler - LABEL_SEG_CODE32
mov ax,'OF'
call showerr
jmp $
_BRHandler:
BRHandler = _BRHandler - LABEL_SEG_CODE32
mov ax,'BR'
call showerr
jmp $
_UDHandler:
UDHandler = _UDHandler - LABEL_SEG_CODE32
mov ax,'UD'
call showerr
jmp $
_NMHandler:
NMHandler = _NMHandler - LABEL_SEG_CODE32
mov ax,'NM'
call showerr
jmp $
_DFHandler:
DFHandler = _DFHandler - LABEL_SEG_CODE32
mov ax,'DF'
call showerr
jmp $
_TSHandler:
TSHandler = _TSHandler - LABEL_SEG_CODE32
mov ax,'TS'
call showerr
jmp $
_NPHandler:
NPHandler = _NPHandler - LABEL_SEG_CODE32
mov ax,'NP'
call showerr
jmp $
_SSHandler:
SSHandler = _SSHandler - LABEL_SEG_CODE32
mov ax,'SS'
call showerr
jmp $
_GPHandler:
GPHandler = _GPHandler - LABEL_SEG_CODE32
mov ax,'GP'
call showerr
jmp $
_PFHandler:
PFHandler = _PFHandler - LABEL_SEG_CODE32
mov ax,'PF'
call showerr
jmp $
_MFHandler:
MFHandler = _MFHandler - LABEL_SEG_CODE32
mov ax,'MF'
call showerr
jmp $
_ACHandler:
ACHandler = _ACHandler - LABEL_SEG_CODE32
mov ax,'AC'
call showerr
jmp $
_MCHandler:
MCHandler = _MCHandler - LABEL_SEG_CODE32
mov ax,'MC'
call showerr
jmp $
_XFHandler:
XFHandler = _XFHandler - LABEL_SEG_CODE32
mov ax,'XF'
call showerr
jmp $
showerr: push ax
mov ah,0ch
mov edi,130
mov [gs:edi],ax
pop ax
shr ax,8
mov ah,0ch
inc edi
inc edi
mov [gs:edi],ax
ret
_NAHandler :
NAHandler = _NAHandler - LABEL_SEG_CODE32
iretd
_KeyboardHandler:
KeyboardHandler = _KeyboardHandler - LABEL_SEG_CODE32
cli
save_site
mov ax,SelectorData0
mov ds,ax
xor eax,eax
mov dx,0x60
in al, dx
cmp al,0x46 ;SCROLL
jne dealnum
not byte [scroll]
and byte [scroll],0x01
call set_leds
jmp nextkey
dealnum: cmp al,0x45 ;NUM
jne dealcaps
not byte [numlock]
and byte [numlock],0x01
call set_leds
jmp nextkey
dealcaps: cmp al,0x3a ; CAPSLOCK
jne dealshift
not byte [capslock]
and byte [capslock],0x01
call set_leds
jmp nextkey
dealshift: cmp al,42 ; SHIFT
jnz noshifton1
mov byte [shift],1
jmp nextkey
noshifton1: cmp al,54
jnz noshifton2
mov byte [shift],1
jmp nextkey
noshifton2: cmp al,42+128
jnz noshiftoff1
mov byte [shift],0
jmp nextkey
noshiftoff1: cmp al,54+128
jnz noshiftoff2
mov byte [shift],0
jmp nextkey
noshiftoff2: cmp al,0x80
ja nextkey
cmp byte [numlock],1
jne knextstep
cmp al,0x52
jne num1
mov cl,'0'
jmp kdshow
num1: cmp al,0x4f
jne num2
mov cl,'1'
jmp kdshow
num2: cmp al,0x50
jne num3
mov cl,'2'
jmp kdshow
num3: cmp al,0x51
jne num4
mov cl,'3'
jmp kdshow
num4: cmp al,0x4b
jne num5
mov cl,'4'
jmp kdshow
num5: cmp al,0x4c
jne num6
mov cl,'5'
jmp kdshow
num6: cmp al,0x4d
jne num7
mov cl,'6'
jmp kdshow
num7: cmp al,0x47
jne num8
mov cl,'7'
jmp kdshow
num8: cmp al,0x48
jne num9
mov cl,'8'
jmp kdshow
num9: cmp al,0x49
jne knextstep
mov cl,'9'
jmp kdshow
knextstep:cmp byte [shift],1
je shifton
cmp byte [capslock],0
jne shiftoffcapson
shiftoff: add eax,keymap
jmp kshow
shiftoffcapson:add eax,keymapcaps
jmp kshow
shifton:cmp byte [capslock],0
jne shiftoncapson
add eax,keymap_shift
jmp kshow
shiftoncapson:add eax,keymap_shiftcaps
kshow: mov cl,[eax]
kdshow: mov al,cl
mov edi ,[kposition]
mov ah,0ch
mov [gs:edi],ax
inc dword [kposition]
inc dword [kposition]
nextkey: mov al,20h
out 20h,al
restore_site
sti
iretd
_kposition:
kposition = _kposition - LABEL_SEG_CODE32
dd 320
_shift:
shift = _shift - LABEL_SEG_CODE32
db 0
_capslock:
capslock = _capslock - LABEL_SEG_CODE32
db 0
_numlock:
numlock = _numlock - LABEL_SEG_CODE32
db 0
_scroll:
scroll = _scroll - LABEL_SEG_CODE32
db 0
_keymap:
keymap = _keymap - LABEL_SEG_CODE32
db '6',27
db '1234567890-=',8,9
db 'qwertyuiop[]',13
db '~asdfghjkl;',39,96,0,'\zxcvbnm,./',0,'45 '
db '@234567890123',180,178,184,'6',176,'7'
_keymapcaps:
keymapcaps = _keymapcaps - LABEL_SEG_CODE32
db '6',27
db '1234567890-=',8,9
db 'QWERTYUIOP[]',13
db '~ASDFGHJKL;',39,96,0,'\ZXCVBNM,./',0,'45 '
db '@234567890123',180,178,184,'6',176,'7'
_keymap_shift:
keymap_shift = _keymap_shift - LABEL_SEG_CODE32
db '6',27
db '!@#$%^&*()_+',8,9
db 'QWERTYUIOP{}',13
db '~ASDFGHJKL:"~',0,'|ZXCVBNM<>?',0,'45 '
db '@234567890123',180,178,184,'6',176,'7'
_keymap_shiftcaps:
keymap_shiftcaps = _keymap_shiftcaps - LABEL_SEG_CODE32
db '6',27
db '!@#$%^&*()_+',8,9
db 'qwertyuiop{}',13
db '~asdfghjkl:"~',0,'|zxcvbnm<>?',0,'45 '
db '@234567890123',180,178,184,'6',176,'7'
set_leds: mov dx,0x64
waitbufferempty: in al,dx
not al
and al,0x02
cmp al,0x02
jne waitbufferempty
mov al,0xed
mov dx,0x60
out dx,al
waitacknowledge: in al,dx
cmp al,0xfa
jne waitacknowledge
waitempty: mov dx,064
not al
and al,0x02
cmp al,0x02
jne waitempty
mov dx,0x60
mov al,[capslock]
shl al,2
mov bl,[numlock]
shl bl,1
or al,bl
mov cl,[scroll]
or al,cl
out dx,al
; int al,dx
; waitaction: cmp al,0xfa
; jne waitaction
ret
_ClockHandler:
ClockHandler = _ClockHandler - LABEL_SEG_CODE32
save_site
mov ebp,esp
inc byte [gs:140]
mov al,20h
out 20h,al
mov esp,StackOfTask
mov ax,SelectorData
mov ds,ax
call prochead
cmp dword [edx + 8],TopOfStack
jne switch
mov [edx + 4],ebp
switch: mov al,[currentnr]
inc al
cmp al,[totalnr]
jg begin
inc byte [currentnr]
jmp search
begin: mov byte [currentnr],1
search: call prochead
mov eax,[edx + 4]
cmp dword [edx + 8],TopOfStack
je stackhead
nextstep:lldt word [edx + 4]
mov eax,[edx + 8]
mov cx,SelectorTSSData
mov ds,cx
mov dword [4],eax
sub eax,68
stackhead: mov ebp,eax
continue: mov esp,ebp
restore_site
start: iretd
prochead: xor edx,edx
mov dl,[currentnr]
dec dl
shl dx,4
add edx,proctable
ret
评论