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

📄 keyboard.s

📁 阿基米德操作系统的源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
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 + -