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

📄 keyboard.s

📁 阿基米德操作系统的源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
//////////////////////////////////////////////////////////////////////////
put_queue8:
	pushl	%ebx
	pushl	%eax

	testb	$0x02,mode
	jne		put_queue8_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_queue8_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue8_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue8_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue8_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue8_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue8_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue8_0

	movl	%ebx,keybuf_head
	orb		$0x02,mode
	incb	keybuf_num0
	orb		$0x01,keybuf_flag

put_queue8_0:
	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_queue9:
	pushl	%ebx
	pushl	%eax

	testb	$0x02,mode
	je		put_queue9_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	$0x02,mode
	incb	keybuf_num0
	orb		$0x01,keybuf_flag

put_queue9_0:
	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_queue10:
	pushl	%ebx
	pushl	%eax

	testb	$0x01,mode
	jne		put_queue10_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_queue10_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue10_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue10_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue10_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue10_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue10_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue10_0

	movl	%ebx,keybuf_head
	orb		$0x01,mode
	incb	keybuf_num0
	orb		$0x01,keybuf_flag

put_queue10_0:
	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_queue11:
	pushl	%ebx
	pushl	%eax

	testb	$0x01,mode
	je		put_queue11_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	$0x01,mode
	incb	keybuf_num0
	orb		$0x01,keybuf_flag

put_queue11_0:
	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_queue:
	pushl	%ebx
	pushl	%eax

	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_queue_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue_0
	incl	%eax
	incl	%eax
	andl	$KEYBUF_SIZE - 1,%eax
	cmpl	keybuf_tail,%eax
	je		put_queue_0

	movl	%ebx,keybuf_head
	
	incb	keybuf_num0
	orb		$0x01,keybuf_flag
	decb	temp_flag
	jz		put_queue_0
	
	incb	keybuf_num1
	orb		$0x02,keybuf_flag
	decb	temp_flag
	jz		put_queue_0
	
	incb	keybuf_num2
	orb		$0x04,keybuf_flag

put_queue_0:
	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_key0:

put_key25:
put_key27:
put_key31:
put_key33:
put_key35:
put_key37:
put_key40:
put_key41:
put_key42:
put_key43:
put_key44:
put_key45:
put_key46:
put_key47:
put_key48:

	ret
//////////////////////////////////////////////////////////////////////////
put_key1:

put_key3:
put_key7:
put_key29:

	pushl	%eax

	movb	downkey_table(%eax),%al
	movb	%al,temp_al
	movb	$0x02,temp_flag
	call	put_queue

	popl	%eax
	ret
//////////////////////////////////////////////////////////////////////////
put_key2:

put_key6:
put_key9:
put_key10:
put_key12:

	pushl	%ebx
	pushl	%eax

	movb	downkey_table(%eax),%bl
	testb	$0x03,mode
	je		put_key2_0
	movb	upkey_table(%eax),%bl
put_key2_0:
	movb	%bl,temp_al
	movb	$0x03,temp_flag
	call	put_queue
	
	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_key4:

	pushl	%ebx
	pushl	%eax

	movb	downkey_table(%eax),%bl
	movb	$0x02,temp_flag
	testb	$0x03,mode
	je		put_key4_0
	movb	upkey_table(%eax),%bl
	movb	$0x01,temp_flag
put_key4_0:
	movb	%bl,temp_al
	call	put_queue
	
	popl	%eax
	popl	%ebx
	
	ret
//////////////////////////////////////////////////////////////////////////
put_key5:

put_key8:
put_key11:
	
	pushl	%ebx
	pushl	%eax

	xorl	%ebx,%ebx
	testb	$0x03,mode
	je		put_key5_0
	xorb	$0x01,%bh
put_key5_0:
	testb	$0x04,leds
	je		put_key5_1
	xorb	$0x01,%bh
put_key5_1:
	movb	downkey_table(%eax),%bl
	testb	$0x01,%bh
	je		put_key5_2
	movb	upkey_table(%eax),%bl
put_key5_2:
	movb	%bl,temp_al
	movb	$0x03,temp_flag
	call	put_queue

	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_key13:

put_key14:
put_key17:
put_key21:
put_key30:

	pushl	%eax

	movb	downkey_table(%eax),%al
	movb	%al,temp_al
	movb	$0x03,temp_flag
	call	put_queue

	popl	%eax

	ret
//////////////////////////////////////////////////////////////////////////
put_key15:

put_key24:
put_key26:
put_key28:
put_key32:
put_key34:
put_key36:
put_key38:

	pushl	%eax

	movb	downkey_table(%eax),%al
	movb	%al,temp_al
	movb	$0x01,temp_flag
	call	put_queue

	popl	%eax

	ret
//////////////////////////////////////////////////////////////////////////
put_key16:

put_key18:
put_key19:
put_key20:
put_key22:

	pushl	%ebx
	pushl	%eax

	xorl	%ebx,%ebx
	testb	$0x03,mode
	je		put_key16_0
	xorb	$0x01,%bh
put_key16_0:
	testb	$0x02,leds
	je		put_key16_1
	xorb	$0x01,%bh
put_key16_1:
	movb	downkey_table(%eax),%bl
	movb	$0x01,temp_flag
	testb	$0x01,%bh
	je		put_key16_2
	movb	upkey_table(%eax),%bl
	movb	$0x03,temp_flag
put_key16_2:
	movb	%bl,temp_al
	call	put_queue

	popl	%eax
	popl	%ebx
	ret
//////////////////////////////////////////////////////////////////////////
put_key23:

	pushl	%eax

	testb	$0x30,mode
	je		put_key23_1
	testb	$0x0c,mode
	je		put_key23_1

	movw	$0x1234,0x472	
	call	kb_wait
	movb	$0xfc,%al		
	outb	%al,$0x64

put_key23_0:	
	jmp		put_key23_0

put_key23_1:
	call	put_key16
		
	popl	%eax

	ret
//////////////////////////////////////////////////////////////////////////
put_key39:

	pushl	%eax

	testb	$0x30,mode
	je		put_key39_1
	testb	$0x0c,mode
	je		put_key39_1

	movw	$0x1234,0x472	
	call	kb_wait
	movb	$0xfc,%al		
	outb	%al,$0x64

put_key39_0:	
	jmp		put_key39_0

put_key39_1:
	call	put_key15	

	popl	%eax

	ret
//////////////////////////////////////////////////////////////////////////
kb_wait:	pushl	%eaxkb_wait_0:	
	inb		$0x64,%al	testb	$0x02,%al	jne		kb_wait_0	popl	%eax	ret
//////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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