⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard_handler.asm

📁 jserv写的orz小内核 有详细的注释
💻 ASM
字号:
%include "orzmicro.inc"%include "keyboard_handler.inc"%include "keytabs/keycodes.inc"%define MAX_KBUF_LEN	32		db "ORZEXE.0"		; Executable file revision 0 id		dd 0x1000		; Stack size		dd _DATA_LEN		; Data size[ORG -0x10][BITS 32]		mov [DAT+currTable],DWORD (ktab+9)Start:		mov edi,DAT+msg		mov edx,msgE-msg		int i_GetMessage		jnz Process		xor ebx,ebx		xor ecx,ecx		xor edx,edx		mov eax,msg_GetScanCode		int i_SendMessageW		jc Start0		; jiao: no		call ScanToASCII		and ax,ax		jz Start0		movzx ecx,BYTE [DAT+bufLen]		cmp cl,MAX_KBUF_LEN		jnc Start0		mov edi,DAT+KBuf		add edi,ecx		add edi,ecx		stosw		inc cl		mov [DAT+bufLen],clStart0:		xor ebx,ebx		xor ecx,ecx		xor edx,edx		mov eax,msg_Sleep		int i_SendMessageW		jmp StartProcess:	cmp eax,kbd_GetASCII		jnz Process0		jmp MSG_GetASCIIProcess0:		mov eax,1		xor ecx,ecx		int i_ProcessMessage		jmp Start;-------------------------------------------------------------------------------MSG_GetASCII:	and ecx,ecx		jnz StdParamsErr		movzx ecx,BYTE [DAT+bufLen]		and cl,cl		jnz MSG_GetASCII0		jmp StdProcessMsgMSG_GetASCII0:	movzx eax,WORD [DAT+KBuf]		push eax		dec cl		mov [DAT+bufLen],cl		jecxz MSG_GetASCII1		mov edi,DAT+KBuf		mov esi,DAT+KBuf+2		rep movswMSG_GetASCII1:	pop eax		jmp StdProcessMsgEax;-------------------------------------------------------------------------------StdParamsErr:	mov eax,2		xor ecx,ecx		int i_ProcessMessage		jmp StartStdProcessMsg:	xor eax,eaxStdProcessMsgEax:		xor ecx,ecx		int i_ProcessMessage		jmp Start;-------------------------------------------------------------------------------ScanToASCII:	and ah,ah		jnz ScanToASCII0		xor cl,cl		jmp ScanToASCII2ScanToASCII0:	cmp ah,0xE0		jnz ScanToASCII1		mov cl,2		jmp ScanToASCII2ScanToASCII1:	mov cl,al		and al,0x7F		cmp ax,0xE145		jnz ScanToASCII5		xor ax,ax		mov al,cl		and al,0x80		xor cl,clScanToASCII2:	test al,0x80		jz ScanToASCII3		inc cl		and al,0x7FScanToASCII3:	movzx ecx,cl		movzx eax,al		shl eax,3		add eax,ecx		add eax,ecx		add eax,[DAT+currTable]		mov ax,[eax]		mov cl,ah		and cl,0xF0		cmp cl,0x70		jz ScanToASCII4		retScanToASCII4:	mov bl,ah		movzx eax,al		shl eax,(3+7)		add eax,ktab+9		mov [DAT+currTable],eax;		mov al,bl;		shl al,1;		and al,0110b;		shr bl,2;		and bl,0001b;		or bl,al;		mov al,0xED	;		out 0x60,al;		jmp short $+2;		mov al,ah;		out 0x60,alScanToASCII5:	xor ax,ax		ret;-------------------------------------------------------------------------------ktab:%include "keytabs/keytab1.inc";-------------------------------------------------------------------------------DAT:		struc _DATAcurrTable: 	resd 1bufLen:		resb 1KBuf:		resw MAX_KBUF_LENmsg:		resb 0x100msgE:_DATA_LEN:		endstruc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -