📄 sys32.inc
字号:
process_pid db 'Kernel : Process - Forced terminate PID: 00000000',13,10,0
process_eip db 'Kernel : Process - Forced terminate EIP: 00000000',13,10,0
write_error_to dd 0x0
show_error_parameters:
mov [write_error_to],process_pid+48
mov eax,[0x3000]
imul eax,0x20
mov eax,[0x3000+4+eax]
call writehex
mov [write_error_to],process_error+48
mov eax,[error_interrupt]
call writehex
mov eax,[0x3000]
imul eax,tss_step
mov eax,[eax+tss_data+l.eip-tss_sceleton]
mov [write_error_to],process_eip+48
call writehex
mov esi,process_error
call sys_msg_board_str
mov esi,process_pid
call sys_msg_board_str
mov esi,process_eip
call sys_msg_board_str
ret
keyboard_mode db 0
keyboard_data db 0
irq1:
call restore_caller
xor eax,eax
mov dx,0x60
in al,dx
mov [keyboard_data],al
movzx edi,word [0x3004] ; top window process
shl edi,1
add edi,0xc400
movzx edi,word [edi]
imul edi,256
add edi,0x800B4
mov edx,[edi]
mov [keyboard_mode],dl
cmp al,29 ; CTRL
jne noctrlon
mov [ctrl],byte 1
jmp nokey
noctrlon:
cmp al,29+128
jne noctrloff
mov [ctrl],byte 0
jmp nokey
noctrloff:
cmp al,56 ; ALT
jnz noalton1
mov [alt],byte 1
jmp nokey
noalton1:
cmp al,184
jnz noaltoff1
mov [alt],byte 0
jmp nokey
noaltoff1:
cmp al,42 ; SHIFT
jnz noshifton1
or byte [shift],byte 1
jmp nokey
noshifton1:
cmp al,54
jnz noshifton2
or byte [shift],byte 2
jmp nokey
noshifton2:
cmp al,42+128
jnz noshiftoff1
and byte [shift],byte 2
jmp nokey
noshiftoff1:
cmp al,54+128
jnz noshiftoff2
and byte [shift],byte 1
jmp nokey
noshiftoff2:
cmp al,byte 128
jb yeskey
jmp nokey
yeskey:
mov ecx,eax ; plain key
add ecx,keymap
mov bl,[ecx]
cmp [alt],1 ; ctrl alt del
jne noctrlaltdel
cmp [ctrl],1
jne noctrlaltdel
cmp bl,134+48
jne noctrlaltdel
mov [ctrl_alt_del],1
jmp nokey
ctrl_alt_del db 0
noctrlaltdel:
cmp [ctrl],byte 1 ; ctrl on ?
jne nco
sub bl,96
nco:
cmp [shift],byte 0 ; shift on ?
je nso
mov ecx,eax
add ecx,keymap_shift
mov bl,[ecx]
nso:
cmp [alt],byte 1 ; alt on ?
jz yao
jmp nao
yao:
mov ecx,eax
add ecx,keymap_alt
mov bl,[ecx]
; alt mouse ?
xor edx,edx
cmp bl,178
jnz noaltup
mov edx,5*65536
mov bl,255
noaltup:
cmp bl,177
jnz noaltdown
mov edx,251*65536
mov bl,255
noaltdown:
cmp bl,176
jnz noaltleft
mov edx,251*256
mov bl,255
noaltleft:
cmp bl,179
jnz noaltright
mov edx,5*256
mov bl,255
noaltright:
cmp bl,' '
jnz noaltmbd
mov bl,[altmouseb]
add bl,1
and bl,1
mov [altmouseb],bl
mov bl,255
noaltmbd:
cmp bl,255
jnz nao
mov [0xF604],byte 1 ; ps2 data
mov [0xfb00],byte 0 ; ps2 chunk count
mov [0x2E0000+4096*12],word 3 ; mouse data count
movzx ebx,byte [altmouseb]
or edx,ebx
mov [0x2E0000+4096*12+0x10],edx
mov bl,0
nao:
cmp [keyboard_mode],0 ; return from keymap
jne nokey
cmp bl,0
jz nokey
movzx edx,byte [0xf400]
cmp edx,120
jge nokey
inc edx
mov [0xf400],dl
mov [0xf400+edx],bl
nokey:
cmp [keyboard_mode],1 ; return scancode
jne no_scancode
movzx edx,byte [0xf400]
cmp edx,120
jge no_scancode
inc edx
mov [0xf400],dl
mov al,[keyboard_data]
mov [0xf400+edx],al
no_scancode:
mov [check_idle_semaphore],5
mov al,0x20 ; ready for next irq
mov dx,0x20
out dx,al
call return_to_caller
jmp irq1
shift db 0x0
ctrl db 0x0
alt db 0x0
altgr db 0x0
altmouseb db 0x0
irq5:
call restore_caller
mov dx,word [sb16]
add dx,0xe
in al,dx
; mov byte [SB16_Status],0
mov [check_idle_semaphore],5
mov al,0x20
out 0x20,al
call return_to_caller
jmp irq5
irqD:
call restore_caller
mov dx,0xf0
mov al,0
out dx,al
mov dx,0xa0
mov al,0x20
out dx,al
mov dx,0x20
out dx,al
mov ds,cx
mov es,cx
mov fs,cx
call return_to_caller
jmp irqD
p_irq2:
call restore_caller
mov edi,2 ; 1
call irqhandler ; 2/5
call return_to_caller
jmp p_irq2
p_irq3:
call restore_caller
mov edi,3
call irqhandler
call return_to_caller
jmp p_irq3
p_irq4:
call restore_caller
mov edi,4
call irqhandler
call return_to_caller
jmp p_irq4
p_irq5:
call restore_caller
mov edi,5
call irqhandler
call return_to_caller
jmp p_irq5
p_irq6:
call restore_caller
call fdc_irq
mov edi,6
call irqhandler
call return_to_caller
jmp p_irq6
p_irq7:
call restore_caller
mov edi,7
call irqhandler
call return_to_caller
jmp p_irq7
p_irq8:
call restore_caller
mov edi,8
call irqhandler
call return_to_caller
jmp p_irq8
p_irq9:
call restore_caller
mov edi,9
call irqhandler
call return_to_caller
jmp p_irq9
p_irq10:
call restore_caller
mov edi,10
call irqhandler
call return_to_caller
jmp p_irq10
p_irq11:
call restore_caller
mov edi,11
call irqhandler
call return_to_caller
jmp p_irq11
p_irq12:
call restore_caller
mov edi,12
call irqhandler
call return_to_caller
jmp p_irq12
p_irq13:
call restore_caller
mov edi,13
call irqhandler
call return_to_caller
jmp p_irq13
p_irq14:
call restore_caller
mov edi,14
call irqhandler
call return_to_caller
jmp p_irq14
p_irq15:
call restore_caller
mov edi,15
call irqhandler
call return_to_caller
jmp p_irq15
restore_caller:
mov edi,[0x3000]
imul edi,8
mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b
ret
return_to_caller:
mov ebx,[0x3000]
shl bx,3
add bx,tss0t
mov [tss_irq12],bx
db 0xea
dd 0
tss_irq12 dw tss0t
ret
irqh dd 0x0
irqhandler:
push edi
mov esi,edi ; 1
shl esi,6 ; 1
add esi,irq00read ; 1
shl edi,12 ; 1
add edi,0x2E0000
mov [check_idle_semaphore],5
irqnewread:
mov dx,[esi] ; 2+
cmp dx,0 ; 1
jz irqover
cmp [esi+3],byte 1 ; 2 ; byte read
jne noirqbyte ; 4-11
in al,dx
mov edx,[edi]
cmp edx,4000
je irqfull
mov ebx,edi
add ebx,0x10
add ebx,edx
mov [ebx],al
add edx,1
mov [edi],edx
add esi,4
jmp irqnewread
noirqbyte:
cmp [esi+3],byte 2 ; word read
jne noirqword
in ax,dx
mov edx,[edi]
cmp edx,4000
je irqfull
mov ebx,edi
add ebx,0x10
add ebx,edx
mov [ebx],ax
add edx,2
mov [edi],edx
add esi,4
jmp irqnewread
noirqword:
irqfull:
irqover:
mov al,0x20 ; ready for next irq
out 0x20,al
pop ebx
cmp ebx,7
jbe noa0
out 0xa0,al
noa0:
ret
i_unknown10:
push dword $
jmp i_u_errorhandle
i_unknown11:
push dword $
jmp i_u_errorhandle
i_unknown12:
push dword $
jmp i_u_errorhandle
i_unknown13:
push dword $
jmp i_u_errorhandle
i_unknown14:
push dword $
jmp i_u_errorhandle
i_unknown15:
push dword $
jmp i_u_errorhandle
i_unknown16:
push dword $
jmp i_u_errorhandle
i_unknown17:
push dword $
jmp i_u_errorhandle
i_unknown18:
push dword $
jmp i_u_errorhandle
i_unknown19:
push dword $
jmp i_u_errorhandle
i_unknown1a:
push dword $
jmp i_u_errorhandle
i_unknown1b:
push dword $
jmp i_u_errorhandle
i_unknown1c:
push dword $
jmp i_u_errorhandle
i_unknown1d:
push dword $
jmp i_u_errorhandle
i_unknown1e:
push dword $
jmp i_u_errorhandle
i_unknown1f:
push dword $
jmp i_u_errorhandle
i_unknown20:
push dword $
jmp i_u_errorhandle
i_unknown21:
push dword $
jmp i_u_errorhandle
i_unknown22:
push dword $
jmp i_u_errorhandle
i_unknown23:
push dword $
jmp i_u_errorhandle
i_unknown24:
push dword $
jmp i_u_errorhandle
i_unknown25:
push dword $
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -