📄 keyboard.s
字号:
do_add20:
cmpb $1,e0
jne do_add20_0
addb $0x20,%al
do_add20_0:
movb %al,temp_char
ret
do_unctrl:
cmpb $1,e1
jne do_unctrl_0
movb $0,%al
jmp do_unctrl_1
do_unctrl_0:
cmpb $1,e0
jne do_unctrl_1
movb $0xdf,%al
do_unctrl_1:
movb %al,temp_char
ret
do_unlshift:
cmpb $1,e0
jne do_unlshift_0
movb $0,%al
do_unlshift_0:
movb %al,temp_char
ret
do_unrshift:
movb %al,temp_char
ret
do_unalt:
cmpb $1,e0
jne do_unalt_0
movb $0xe1,%al
do_unalt_0:
movb %al,temp_char
ret
do_uncaps:
movb %al,temp_char
ret
do_unnum:
cmpb $1,e1
jne do_unnum_0
movb $0,%al
movb $0,e1
do_unnum_0:
movb %al,temp_char
ret
do_unscro:
cmpb $1,e0
jne do_unscro_0
movb $0,%al
do_unscro_0:
movb %al,temp_char
ret
//////////////////////////////////////////////////////////////////////////
.align 4
do_key_interrupt:
movb temp_char,%al
movb %al,temp_ah
movb $0,temp_al
call *key_table(,%eax,4)
ret
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
set_leds0:
pushl %eax
testb $0x40,leds
jne set_leds0_0
orb $0x40,leds
xorb $0x04,leds
call kb_wait
movb $0xed,%al
outb %al,$0x60
call kb_wait
movb leds,%al
andb $0x07,%al
outb %al,$0x60
set_leds0_0:
popl %eax
ret
//////////////////////////////////////////////////////////////////////////
set_leds1:
andb $0xbf,leds
ret
//////////////////////////////////////////////////////////////////////////
set_leds2:
pushl %eax
testb $0x20,leds
jne set_leds2_0
orb $0x20,leds
xorb $0x02,leds
call kb_wait
movb $0xed,%al
outb %al,$0x60
call kb_wait
movb leds,%al
andb $0x07,%al
outb %al,$0x60
set_leds2_0:
popl %eax
ret
//////////////////////////////////////////////////////////////////////////
set_leds3:
andb $0xdf,leds
ret
//////////////////////////////////////////////////////////////////////////
set_leds4:
pushl %eax
testb $0x10,leds
jne set_leds4_0
orb $0x10,leds
xorb $0x01,leds
call kb_wait
movb $0xed,%al
outb %al,$0x60
call kb_wait
movb leds,%al
andb $0x07,%al
outb %al,$0x60
set_leds4_0:
popl %eax
ret
//////////////////////////////////////////////////////////////////////////
set_leds5:
andb $0xef,leds
ret
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
put_queue0:
pushl %ebx
pushl %eax
testb $0x20,mode
jne put_queue0_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE - 1,%ebx
movl %ebx,%eax
cmpl keybuf_tail,%eax
je put_queue0_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue0_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue0_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue0_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue0_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue0_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue0_0
movl %ebx,keybuf_head
orb $0x20,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue0_0:
popl %eax
popl %ebx
ret
//////////////////////////////////////////////////////////////////////////
put_queue1:
pushl %ebx
pushl %eax
testb $0x20,mode
je put_queue1_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE-1,%ebx
movl %ebx,keybuf_head
xorb $0x20,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue1_0:
popl %eax
popl %ebx
ret
//////////////////////////////////////////////////////////////////////////
put_queue2:
pushl %ebx
pushl %eax
testb $0x10,mode
jne put_queue2_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE - 1,%ebx
movl %ebx,%eax
cmpl keybuf_tail,%eax
je put_queue2_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue2_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue2_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue2_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue2_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue2_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue2_0
movl %ebx,keybuf_head
orb $0x10,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue2_0:
popl %eax
popl %ebx
ret
//////////////////////////////////////////////////////////////////////////
put_queue3:
pushl %ebx
pushl %eax
testb $0x10,mode
je put_queue3_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE-1,%ebx
movl %ebx,keybuf_head
xorb $0x10,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue3_0:
popl %eax
popl %ebx
ret
//////////////////////////////////////////////////////////////////////////
put_queue4:
pushl %ebx
pushl %eax
testb $0x08,mode
jne put_queue4_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE - 1,%ebx
movl %ebx,%eax
cmpl keybuf_tail,%eax
je put_queue4_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue4_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue4_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue4_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue4_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue4_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue4_0
movl %ebx,keybuf_head
orb $0x08,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue4_0:
popl %eax
popl %ebx
ret
//////////////////////////////////////////////////////////////////////////
put_queue5:
pushl %ebx
pushl %eax
testb $0x08,mode
je put_queue5_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE-1,%ebx
movl %ebx,keybuf_head
xorb $0x08,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue5_0:
popl %eax
popl %ebx
ret
//////////////////////////////////////////////////////////////////////////
put_queue6:
pushl %ebx
pushl %eax
testb $0x04,mode
jne put_queue6_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE - 1,%ebx
movl %ebx,%eax
cmpl keybuf_tail,%eax
je put_queue6_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue6_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue6_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue6_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue6_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue6_0
incl %eax
incl %eax
andl $KEYBUF_SIZE - 1,%eax
cmpl keybuf_tail,%eax
je put_queue6_0
movl %ebx,keybuf_head
orb $0x04,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue6_0:
popl %eax
popl %ebx
ret
//////////////////////////////////////////////////////////////////////////
put_queue7:
pushl %ebx
pushl %eax
testb $0x04,mode
je put_queue7_0
movl keybuf_head,%ebx
movw temp_al,%ax
movw %ax,key_buf(%ebx)
incl %ebx
incl %ebx
andl $KEYBUF_SIZE-1,%ebx
movl %ebx,keybuf_head
xorb $0x04,mode
incb keybuf_num0
orb $0x01,keybuf_flag
put_queue7_0:
popl %eax
popl %ebx
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -