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

📄 usbkbd.asm

📁 AMI 主板的BIOS源码。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
ccbf_2:
	inc	bx
	cmp	bx,offset ch_buff_end
	jnz	ccbf_1		; if head pointer reached buffer end
	mov	bx,offset ch_buff_start; then initialize to buffer start
ccbf_1:
	cmp	bx,ch_buff_tail
	jz	ccbf_4		; yes, character buffer full
	dec	al
	jnz	ccbf_2		; continue
ccbf_4:
	xor	bx,ch_buff_tail	; (zf) = x
	pop	bx
	ret
;-------------------------------;
; PUT CHAR BUFFER		;
;-------------------------------;
; register used (none).		;
; input:			;
; (al) = character		;
; output:			;
; (zf) = 0:ok			;
; character buffer ptr updated	;
;-------------------------------;
put_char_buffer:
	push	bx
	mov	bx,ch_buff_head
	mov	[bx],al		; put character in buffer
	inc	bx		; advance buffer pointer
	cmp	bx,offset ch_buff_end
	jnz	pcb_1		; if buff end, back to buff start
	mov	bx,offset ch_buff_start
pcb_1:
	mov	ch_buff_head,bx	; advance head pointer
	call	EnablePeriodicInterrupt
	pop	bx
	or	sp,sp		; (zf) = 0
	ret
;-------------------------------;
; GET CHAR BUFFER		;
;-------------------------------;
; register used (none).		;
; input:			;
;	none.			;
; output:			;
;	(al) = character.	;
; character buffer ptr updated	;
;-------------------------------;
get_char_buffer:
	push	bx
	mov	bx,ch_buff_tail
	mov	al,[bx]		; get character from character buffer
	inc	bx		; advance buffer tail pointer
	cmp	bx,offset ch_buff_end
	jnz	gcb_1		; if buff end, back to buff start
	mov	bx,offset ch_buff_start
gcb_1:
	mov	ch_buff_tail,bx	; advance character buffer tail pointer
	pop	bx
	ret
;-------------------------------;
; Interrupt comes every 2 milisec
;-------------------------------;
trd_table:			; typematic rate delay 250/500/750/1000 milisec
%out periodic interrupt every 16 milisec
;;;;	dw	125,250,375,500
	dw	16,32,48,64
tr_table:			; typematic rate 2..30 characters/sec
%out repeat rate is always 30 char/sec
;;;;	dw	016,020,025,031,038,046,055,064,	072,080,088,096,104,112,120,128
;;;;	dw	136,144,152,160,168,176,184,192,	200,208,216,224,232,240,248,256
	dw	2,2,2,2,	2,2,2,2,	2,2,2,2,	2,2,2,2
	dw	2,2,2,2,	2,2,2,2,	2,2,2,2,	2,2,2,2
;-------------------------------;
key_pad_scan_2_table:
	db	endx, left, home, insr, del, down, rght, up, pgdn, pgup
key_pad_scan_2_table_end:
key_pad_scan_3_table:
	db	65h, 61h, 6eh, 67h, 64h, 60h, 6ah, 63h, 6dh, 6fh
key_pad_scan_3_table_end:
;-------------------------------;
extd_key_scan_2_table:
	db	ralt, rctl, renter, lmsft, rmsft, amsft
extd_key_scan_2_table_end:
extd_key_scan_3_table:
	db	39h, 58h, 79h, 8bh, 8ch, 8dh
extd_key_scan_3_table_end:
;-------------------------------;
extd_scan_3_data:
	db	84h,85h,86h,87h
	db	8bh,8ch,8dh
extd_scan_3_data_end:
extd_scan_3_new:
	db	0,1,2,3,4,5,6
extd_scan_3_new_end:
;-------------------------------;
modifier_key_table:
	db	0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h
;-------------------------------;
scan_3_table_data:
	db	000h,015h,000h,028h,094h,029h,0a4h,02ah
	db	0a8h,02ah,0a8h,02ah,0a8h,02ah,0a0h,02ah
	db	0a8h,02ah,0a8h,02ah,0a8h,00ah,0a4h,00ah
	db	08ah,022h,020h,000h,000h,000h,000h,002h
;-------------------------------;
t2223:
	db	2,2,2,3
t6800:
	db	6,8,0,0
t4500:
	db	4,5,0,0
t4545:
	db	4,5,4,5
t4446:
	db	4,4,4,6
t1112:
	db	1,1,1,2
;===============================;
USBKeyCode_to_Scan_2_table:
;------ USA ENGLISH keyboard -------; USBKeyCode to ScanCodeSet-2
	db    00h,00h,00h,00h,1ch,32h,21h,23h,	24h,2bh,34h,33h,43h,3bh,42h,4bh
	db    3ah,31h,44h,4dh,15h,2dh,1bh,2ch,	3ch,2ah,1dh,22h,35h,1ah,16h,1eh
	db    26h,25h,2eh,36h,3dh,3eh,46h,45h,	5ah,76h,66h,0dh,29h,4eh,55h,54h
	db    5bh,5dh,5dh,4ch,52h,0eh,41h,49h,	4ah,58h,05h,06h,04h,0ch,03h,0bh
	db  83h,0ah,01h,09h,78h,07h,prtsc,7eh,	pause,insr,home,pgup,del,endx,pgdn,rght
	db left,down,up,77h,slash,7ch,7bh,79h,	renter,69h,72h,7ah,6bh,73h,74h,6ch
	db  75h,7dh,70h,71h,61h,amsft,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h
	db    00h,00h,00h,00h,00h,00h,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h

	db    00h,00h,00h,00h,00h,00h,00h,51h,	13h,6ah,64h,67h,00h,00h,00h,00h
	db    00h,00h,00h,00h,00h,00h,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h
	db    00h,00h,00h,00h,00h,00h,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h
	db    00h,00h,00h,00h,00h,00h,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h
	db    00h,00h,00h,00h,00h,00h,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h
	db    00h,00h,00h,00h,00h,00h,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h
	db 14h,12h,11h,lmsft,rctl,59h,ralt,rmsft,	00h,00h,00h,00h,00h,00h,00h,00h
	db    00h,00h,00h,00h,00h,00h,00h,00h,	00h,00h,00h,00h,00h,00h,00h,00h
;===============================;
;-------------------------------;
set_2_to_1:
;-------------------------------;
KEY0		db	000h	;
KEY1		db	0E5h	;
KEY2		db	0F5h	;
KEY3		db	006h	;
KEY4		db	016h	;
KEY5		db	026h	;
KEY6		db	01Eh	;
KEY7		db	03Dh	;
KEY8		db	0DCh	;
KEY9		db	0DDh	;
KEYA		db	0EDh	;
KEYB		db	0FDh	;
KEYC		db	00Eh	;
KEYD		db	087h	;
KEYE		db	0B6h	;
KEYF		db	035h	;
KEY10		db	0D4h	;
KEY11		db	03Eh	;
KEY12		db	0AEh	;
KEY13		db	07Ch	;
KEY14		db	017h	;
KEY15		db	07Fh	;
KEY16		db	0EFh	;
KEY17		db	02Dh	;
KEY18		db	0CCh	;
KEY19		db	074h	;
KEY1A		db	09Eh	;
KEY1B		db	007h	;
KEY1C		db	00Fh	;
KEY1D		db	077h	;
KEY1E		db	0E7h	;
KEY1F		db	025h	;
KEY20		db	0C4h	;
KEY21		db	08Eh	;
KEY22		db	096h	;
KEY23		db	0FEh	;
KEY24		db	06Fh	;
KEY25		db	0D7h	;
KEY26		db	0DFh	;
KEY27		db	01Dh	;
KEY28		db	0BCh	;
KEY29		db	036h	;
KEY2A		db	086h	;
KEY2B		db	0F6h	;
KEY2C		db	05Fh	;
KEY2D		db	067h	;
KEY2E		db	0CFh	;
KEY2F		db	015h	;
KEY30		db	0B4h	;
KEY31		db	076h	;
KEY32		db	07Eh	;
KEY33		db	0E6h	;
KEY34		db	0EEh	;
KEY35		db	057h	;
KEY36		db	0C7h	;
KEY37		db	00Dh	;
KEY38		db	0ACh	;
KEY39		db	06Ch	;
KEY3A		db	06Eh	;
KEY3B		db	0DEh	;
KEY3C		db	04Fh	;
KEY3D		db	0BFh	;
KEY3E		db	0B7h	;
KEY3F		db	005h	;
KEY40		db	0A4h	;
KEY41		db	066h	;
KEY42		db	0D6h	;
KEY43		db	047h	;
KEY44		db	03Fh	;
KEY45		db	0A7h	;
KEY46		db	0AFh	;
KEY47		db	0FCh	;
KEY48		db	09Ch	;
KEY49		db	05Eh	;
KEY4A		db	056h	;
KEY4B		db	0CEh	;
KEY4C		db	0C6h	;
KEY4D		db	037h	;
KEY4E		db	09Fh	;
KEY4F		db	0F4h	;
KEY50		db	094h	;
KEY51		db	064h	;
KEY52		db	0BEh	;
KEY53		db	05Ch	;
KEY54		db	02Fh	;
KEY55		db	097h	;
KEY56		db	0ECh	;
KEY57		db	08Ch	;
KEY58		db	02Eh	;
KEY59		db	04Eh	;
KEY5A		db	01Fh	;
KEY5B		db	027h	;
KEY5C		db	054h	;
KEY5D		db	0A6h	;
KEY5E		db	0E4h	;
KEY5F		db	04Ch	;
KEY60		db	055h	;
KEY61		db	04Dh	;
KEY62		db	044h	;
KEY63		db	03Ch	;
KEY64		db	034h	;
KEY65		db	02Ch	;
KEY66		db	08Fh	;
KEY67		db	024h	;
KEY68		db	01Ch	;
KEY69		db	085h	;
KEY6A		db	014h	;
KEY6B		db	0A5h	;
KEY6C		db	0C5h	;
KEY6D		db	00Ch	;
KEY6E		db	004h	;
KEY6F		db	084h	;
KEY70		db	06Dh	;
KEY71		db	065h	;
KEY72		db	07Dh	;
KEY73		db	09Dh	;
KEY74		db	095h	;
KEY75		db	0BDh	;
KEY76		db	0F7h	;
KEY77		db	0D5h	;
KEY78		db	045h	;
KEY79		db	08Dh	;
KEY7A		db	075h	;
KEY7B		db	0ADh	;
KEY7C		db	046h	;
KEY7D		db	0B5h	;
KEY7E		db	0CDh	;
KEY7F		db	05Dh	;
KEY80		db	0FBh	;
KEY81		db	0F3h	;
KEY82		db	0EBh	;
KEY83		db	0F5h	;
KEY84		db	05Dh	;
;-------------------------------;
set_2_to_3:
;-------------------------------;
YKEY0		db	000h	;
YKEY1		db	0C5h	;
YKEY2		db	046h	;
YKEY3		db	0C6h	;
YKEY4		db	047h	;
YKEY5		db	0C7h	;
YKEY6		db	087h	;
YKEY7		db	00Dh	;
YKEY8		db	0BFh	;
YKEY9		db	085h	;
YKEYA		db	006h	;
YKEYB		db	086h	;
YKEYC		db	007h	;
YKEYD		db	097h	;
YKEYE		db	08Fh	;
YKEYF		db	087h	;
YKEY10		db	07Fh	;
YKEY11		db	037h	;
YKEY12		db	06Fh	;
YKEY13		db	0C3h	;
YKEY14		db	077h	;
YKEY15		db	057h	;
YKEY16		db	04Fh	;
YKEY17		db	047h	;
YKEY18		db	03Fh	;
YKEY19		db	037h	;
YKEY1A		db	02Fh	;
YKEY1B		db	027h	;
YKEY1C		db	01Fh	;
YKEY1D		db	017h	;
YKEY1E		db	00Fh	;
YKEY1F		db	0A3h	;
YKEY20		db	0FEh	;
YKEY21		db	0F6h	;
YKEY22		db	0EEh	;
YKEY23		db	0E6h	;
YKEY24		db	0DEh	;
YKEY25		db	0D6h	;
YKEY26		db	0CEh	;
YKEY27		db	09Bh	;
YKEY28		db	0BEh	;
YKEY29		db	0B6h	;
YKEY2A		db	0AEh	;
YKEY2B		db	0A6h	;
YKEY2C		db	09Eh	;
YKEY2D		db	096h	;
YKEY2E		db	08Eh	;
YKEY2F		db	093h	;
YKEY30		db	07Eh	;
YKEY31		db	076h	;
YKEY32		db	06Eh	;
YKEY33		db	066h	;
YKEY34		db	05Eh	;
YKEY35		db	056h	;
YKEY36		db	04Eh	;
YKEY37		db	046h	;
YKEY38		db	03Eh	;
YKEY39		db	036h	;
YKEY3A		db	02Eh	;
YKEY3B		db	026h	;
YKEY3C		db	01Eh	;
YKEY3D		db	016h	;
YKEY3E		db	00Eh	;
YKEY3F		db	006h	;
YKEY40		db	0FDh	;
YKEY41		db	0F5h	;
YKEY42		db	0EDh	;
YKEY43		db	0E5h	;
YKEY44		db	0DDh	;
YKEY45		db	0D5h	;
YKEY46		db	0CDh	;
YKEY47		db	0C5h	;
YKEY48		db	0BDh	;
YKEY49		db	0B5h	;
YKEY4A		db	0ADh	;
YKEY4B		db	0A5h	;
YKEY4C		db	09Dh	;
YKEY4D		db	095h	;
YKEY4E		db	08Dh	;
YKEY4F		db	085h	;
YKEY50		db	07Dh	;
YKEY51		db	075h	;
YKEY52		db	06Dh	;
YKEY53		db	065h	;
YKEY54		db	05Dh	;
YKEY55		db	055h	;
YKEY56		db	04Dh	;
YKEY57		db	045h	;
YKEY58		db	05Fh	;
YKEY59		db	035h	;
YKEY5A		db	02Dh	;
YKEY5B		db	025h	;
YKEY5C		db	01Dh	;
YKEY5D		db	065h	;
YKEY5E		db	00Dh	;
YKEY5F		db	005h	;
YKEY60		db	0FCh	;
YKEY61		db	067h	;
YKEY62		db	0ECh	;
YKEY63		db	0E4h	;
YKEY64		db	0CBh	;
YKEY65		db	0D4h	;
YKEY66		db	0CCh	;
YKEY67		db	0D3h	;
YKEY68		db	0BCh	;
YKEY69		db	0B4h	;
YKEY6A		db	015h	;
YKEY6B		db	0A4h	;
YKEY6C		db	09Ch	;
YKEY6D		db	094h	;
YKEY6E		db	08Ch	;
YKEY6F		db	084h	;
YKEY70		db	07Ch	;
YKEY71		db	074h	;
YKEY72		db	06Ch	;
YKEY73		db	064h	;
YKEY74		db	05Ch	;
YKEY75		db	054h	;
YKEY76		db	0BFh	;
YKEY77		db	04Ch	;
YKEY78		db	04Dh	;
YKEY79		db	01Ch	;
YKEY7A		db	02Ch	;
YKEY7B		db	0DBh	;
YKEY7C		db	00Ch	;
YKEY7D		db	014h	;
YKEY7E		db	005h	;
YKEY7F		db	05Dh	;
YKEY80		db	0FBh	;
YKEY81		db	0F3h	;
YKEY82		db	0EBh	;
YKEY83		db	046h	;
YKEY84		db	045h	;
;===============================;
;*****************************************************************;
;*****************************************************************;
;**                                                             **;
;**      (C)Copyright 1985-1996, American Megatrends, Inc.      **;
;**                                                             **;
;**                     All Rights Reserved.                    **;
;**                                                             **;
;**           6145-F Northbelt Pkwy, Norcross, GA 30071         **;
;**                                                             **;
;**                     Phone (770)-246-8600                    **;
;**                                                             **;
;*****************************************************************;
;*****************************************************************;
;*****************************************************************;
;*****************************************************************;
;**                                                             **;
;**      (C)Copyright 1985-1996, American Megatrends, Inc.      **;
;**                                                             **;
;**                     All Rights Reserved.                    **;
;**                                                             **;
;**           6145-F Northbelt Pkwy, Norcross, GA 30071         **;
;**                                                             **;
;**                     Phone (770)-246-8600                    **;
;**                                                             **;
;*****************************************************************;
;*****************************************************************;
;-------------------------------;
;-------------------------------;
;===============================;
;-------------------------------;
; 00..1F	READ RAM	;
; 20..3F	READ RAM	;
; 40..5F	WRITE RAM	;
; 60..7F	WRITE RAM	;
; 80..9F	INVALID		;
; A0..FF	COMMAND		;
;-------------------------------;
out_64:
	or	flag_byte_1,80h	; 1=64/60 emulation active
	mov	flag_60,0000h	; clear flag
	or	al,al
	js	o64_0		; 80..FF
	cmp	al,40h
	jae	o64_1		; 40..7F write RAM
;===============================;
; WindowsNT gets timeout error	;
; since data is returned after	;
; 1 to 2 milisec inside periodic;
; interrupt. so send call to
; 8042 now, we will see later	;
; what can be done when 8042 is	;
; not there in the mother board.;
;===============================;
;;;;	and	al,1fh
;;;;	mov	bx,offset ccb
;;;;	xlat			; read RAM
;;;;	jmp	kb_sys		; output to system as keyboard data
;===============================;
	call	out_to_64	; send command to 8042
	ret			; exit
o64_1:
	call	out_to_64	; send command to 8042
	and	al,1fh
	mov	ram_address,al	; save RAM address
	mov	flag_60,offset cgroup:o64_2+orgbase
	ret			; exit
o

⌨️ 快捷键说明

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