📄 keyboard.s
字号:
.globl keyboard_interrupt
.globl kb_wait
.globl key_buf,keybuf_head,keybuf_tail
.globl keybuf_num0,keybuf_num1,keybuf_num2,keybuf_flag,mode,ledsKEYBUF_SIZE = 1024
.align 4key_buf: .fill 512,2,0
keybuf_head: .long 0
keybuf_tail: .long 0
keybuf_num0: .word 0
keybuf_num1: .word 0
keybuf_num2: .word 0
keybuf_flag: .byte 0
mode: .byte 0 leds: .byte 2 e0: .byte 0
e1: .byte 0
temp_char: .byte 0
temp_al: .byte 0
temp_ah: .byte 0
temp_flag: .byte 0
.align 4
map_table:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
.long do_none ,do_self ,do_self ,do_self /* 00-03 0 esc !1 @2 */
.long do_self ,do_self ,do_self ,do_self /* 04-07 #3 $4 %5 ^6 */
.long do_self ,do_self ,do_self ,do_self /* 08-0B &7 *8 (9 )0 */
.long do_self ,do_self ,do_self ,do_self /* 0C-0F _- += erase tab */
.long do_self ,do_self ,do_self ,do_self /* 10-13 q w e r */
.long do_self ,do_self ,do_self ,do_self /* 14-17 t y u i */
.long do_self ,do_self ,do_self ,do_self /* 18-1B o p {[ }] */
.long do_enter,do_ctrl ,do_self ,do_self /* 1C-1F enter l_ctrl a s */
.long do_self ,do_self ,do_self ,do_self /* 20-23 d f g h */
.long do_self ,do_self ,do_self ,do_self /* 24-27 j k l :; */
.long do_self ,do_self ,do_shift ,do_self /* 28-2B "' ~` l_shift |\ */
.long do_self ,do_self ,do_self ,do_self /* 2C-2F z x c v */
.long do_self ,do_self ,do_self ,do_self /* 30-33 b n m <, */
.long do_self ,do_aaa ,do_self ,do_bbb /* 34-37 >. ?/ r_shift rrr_* */
.long do_alt ,do_self ,do_self ,do_self /* 38-3B l_alt space capslock f1 */
.long do_self ,do_self ,do_self ,do_self /* 3C-3F f2 f3 f4 f5 */
.long do_self ,do_self ,do_self ,do_self /* 40-43 f6 f7 f8 f9 */
.long do_self ,do_num ,do_scro ,do_add20 /* 44-47 f10 numlock scrolock rrr_7home */
.long do_add20,do_add20 ,do_self ,do_add20 /* 48-4B rrr_8up rrr_9pgup rrr_- rrr_4left */
.long do_self ,do_add20 ,do_self ,do_add20 /* 4C-4F rrr_5 rrr_6right rrr_+ rrr_1end */
.long do_add20,do_add20 ,do_add20 ,do_add20 /* 50-53 rrr_2down rrr_3pgdn rrr_0ins rrr_.del */
/* */
.long do_self ,do_none ,do_none ,do_self /* 54-57 sysrq ? ? f11 */
.long do_self ,do_none ,do_none ,do_self /* 58-5B f12 ? ? lwin */
.long do_self ,do_self ,do_none ,do_none /* 5C-5F rwin print ? ? */
.long do_none ,do_none ,do_none ,do_none /* 60-63 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 64-67 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 68-6B ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 6C-6F ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 70-73 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 74-77 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 78-7B ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 7C-7F ? ? ? ? */
/* */
.long do_none ,do_none ,do_none ,do_none /* 80-83 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 84-87 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 88-8B ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 8C-8F ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 90-93 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 94-97 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* 98-9B ? ? ? ? */
.long do_none ,do_unctrl,do_none ,do_none /* 9C-9F ? unctrl ? ? */
.long do_none ,do_none ,do_none ,do_none /* A0-A3 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* A4-A7 ? ? ? ? */
.long do_none ,do_none ,do_unlshift,do_none /* A8-AB ? ? unlshift ? */
.long do_none ,do_none ,do_none ,do_none /* AC-AF ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* B0-B3 ? ? ? ? */
.long do_none ,do_none ,do_unrshift,do_none /* B4-B7 ? ? unrshift ? */
.long do_unalt,do_none ,do_uncaps ,do_none /* B8-BB unalt ? uncapslock ? */
.long do_none ,do_none ,do_none ,do_none /* BC-BF ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* C0-C3 ? ? ? ? */
.long do_none ,do_unnum ,do_unscro ,do_none /* C4-C7 ? unnumlock unscrolock ? */
.long do_none ,do_none ,do_none ,do_none /* C8-CB ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* CC-CF ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* D0-D3 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* D4-D7 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* D8-DB ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* DC-DF ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* E0-E3 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* E4-E7 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* E8-EB ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* EC-EF ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* F0-F3 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* F4-F7 ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* F8-FB ? ? ? ? */
.long do_none ,do_none ,do_none ,do_none /* FC-FF ? ? ? ? */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
key_table:
.long put_key0 ,put_key1 ,put_key2 ,put_key2 /* 00-03 0 esc !1 @2 */
.long put_key2 ,put_key2 ,put_key2 ,put_key2 /* 04-07 #3 $4 %5 ^6 */
.long put_key2 ,put_key2 ,put_key2 ,put_key2 /* 08-0B &7 *8 (9 )0 */
.long put_key2 ,put_key2 ,put_key3 ,put_key4 /* 0C-0F _- += erase tab */
.long put_key5 ,put_key5 ,put_key5 ,put_key5 /* 10-13 q w e r */
.long put_key5 ,put_key5 ,put_key5 ,put_key5 /* 14-17 t y u i */
.long put_key5 ,put_key5 ,put_key6 ,put_key6 /* 18-1B o p {[ }] */
.long put_key7 ,put_queue6,put_key8 ,put_key8 /* 1C-1F enter l_ctrl a s */
.long put_key8 ,put_key8 ,put_key8 ,put_key8 /* 20-23 d f g h */
.long put_key8 ,put_key8 ,put_key8 ,put_key9 /* 24-27 j k l :; */
.long put_key9 ,put_key9 ,put_queue10,put_key10 /* 28-2B "' ~` l_shift |\ */
.long put_key11 ,put_key11 ,put_key11 ,put_key11 /* 2C-2F z x c v */
.long put_key11 ,put_key11 ,put_key11 ,put_key12 /* 30-33 b n m <, */
.long put_key12 ,put_key12 ,put_queue8 ,put_key13 /* 34-37 >. ?/ r_shift rrr_* */
.long put_queue2,put_key14 ,set_leds0 ,put_key15 /* 38-3B l_alt space capslock f1 */
.long put_key15 ,put_key15 ,put_key15 ,put_key15 /* 3C-3F f2 f3 f4 f5 */
.long put_key15 ,put_key15 ,put_key15 ,put_key15 /* 40-43 f6 f7 f8 f9 */
.long put_key15 ,set_leds2 ,set_leds4 ,put_key16 /* 44-47 f10 numlock scrolock rrr_7home */
.long put_key16 ,put_key16 ,put_key17 ,put_key18 /* 48-4B rrr_8up rrr_9pgup rrr_- rrr_4left */
.long put_key19 ,put_key20 ,put_key21 ,put_key22 /* 4C-4F rrr_5 rrr_6right rrr_+ rrr_1end */
.long put_key22 ,put_key22 ,put_key22 ,put_key23 /* 50-53 rrr_2down rrr_3pgdn rrr_0ins rrr_.del */
.long put_key24 ,put_key24 ,put_key25 ,put_key26 /* 54-57 prtscr pause ? f11 */
.long put_key26 ,put_key27 ,put_key27 ,put_key28 /* 58-5B f12 ? ? l_win */
.long put_key28 ,put_key28 ,put_key29 ,put_queue4 /* 5C-5F r_win print rrr_enter r_ctrl */
.long put_key30 ,put_queue0,put_key31 ,put_key31 /* 60-63 rrr_/ r_alt ? ? */
.long put_key31 ,put_key31 ,put_key31 ,put_key32 /* 64-67 ? ? ? rr_home */
.long put_key32 ,put_key32 ,put_key33 ,put_key34 /* 68-6B rr_up rr_pgup ? rr_left */
.long put_key35 ,put_key36 ,put_key37 ,put_key38 /* 6C-6F ? rr_right ? rr_end */
.long put_key38 ,put_key38 ,put_key38 ,put_key39 /* 70-73 rr_down rr_pgdn rr_ins rr_del */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 74-77 ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 78-7B ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 7C-7F ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 80-83 ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 84-87 ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 88-8B ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 8C-8F ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 90-93 ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 94-97 ? ? ? ? */
.long put_key40 ,put_key40 ,put_key40 ,put_key40 /* 98-9B ? ? ? ? */
.long put_key40 ,put_queue7,put_key41 ,put_key41 /* 9C-9F ? unlctrl ? ? */
.long put_key41 ,put_key41 ,put_key41 ,put_key41 /* A0-A3 ? ? ? ? */
.long put_key41 ,put_key41 ,put_key41 ,put_key41 /* A4-A7 ? ? ? ? */
.long put_key41 ,put_key41 ,put_queue11,put_key42 /* A8-AB ? ? unlshift ? */
.long put_key42 ,put_key42 ,put_key42 ,put_key42 /* AC-AF ? ? ? ? */
.long put_key42 ,put_key42 ,put_key42 ,put_key42 /* B0-B3 ? ? ? ? */
.long put_key42 ,put_key42 ,put_queue9 ,put_key43 /* B4-B7 ? ? unrshift ? */
.long put_queue3,put_key44 ,set_leds1 ,put_key45 /* B8-BB unlalt ? uncaps ? */
.long put_key45 ,put_key45 ,put_key45 ,put_key45 /* BC-BF ? ? ? ? */
.long put_key45 ,put_key45 ,put_key45 ,put_key45 /* C0-C3 ? ? ? ? */
.long put_key45 ,set_leds3 ,set_leds5 ,put_key46 /* C4-C7 ? unnum unscro ? */
.long put_key46 ,put_key46 ,put_key46 ,put_key46 /* C8-CB ? ? ? ? */
.long put_key46 ,put_key46 ,put_key46 ,put_key46 /* CC-CF ? ? ? ? */
.long put_key46 ,put_key46 ,put_key46 ,put_key46 /* D0-D3 ? ? ? ? */
.long put_key46 ,put_key46 ,put_key46 ,put_key46 /* D4-D7 ? ? ? ? */
.long put_key46 ,put_key46 ,put_key46 ,put_key46 /* D8-DB ? ? ? ? */
.long put_key46 ,put_key46 ,put_key46 ,put_queue5 /* DC-DF ? ? ? unrctrl */
.long put_key47 ,put_queue1,put_key48 ,put_key48 /* E0-E3 ? unralt ? ? */
.long put_key48 ,put_key48 ,put_key48 ,put_key48 /* E4-E7 ? ? ? ? */
.long put_key48 ,put_key48 ,put_key48 ,put_key48 /* E8-EB ? ? ? ? */
.long put_key48 ,put_key48 ,put_key48 ,put_key48 /* EC-EF ? ? ? ? */
.long put_key48 ,put_key48 ,put_key48 ,put_key48 /* F0-F3 ? ? ? ? */
.long put_key48 ,put_key48 ,put_key48 ,put_key48 /* F4-F7 ? ? ? ? */
.long put_key48 ,put_key48 ,put_key48 ,put_key48 /* F8-FB ? ? ? ? */
.long put_key48 ,put_key48 ,put_key48 ,put_key48 /* FC-FF ? ? ? ? */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
upkey_table:
.byte 0 ,0x1b ,'! ,'@ /* 00-03 0 esc !1 @2 */
.byte '# ,'$ ,'% ,'^ /* 04-07 #3 $4 %5 ^6 */
.byte '& ,'* ,'( ,') /* 08-0B &7 *8 (9 )0 */
.byte '_ ,'+ ,0x08 ,0 /* 0C-0F _- += erase tab */
.byte 'Q ,'W ,'E ,'R /* 10-13 q w e r */
.byte 'T ,'Y ,'U ,'I /* 14-17 t y u i */
.byte 'O ,'P ,'{ ,'} /* 18-1B o p {[ }] */
.byte 0x0d ,0 ,'A ,'S /* 1C-1F enter l_ctrl a s */
.byte 'D ,'F ,'G ,'H /* 20-23 d f g h */
.byte 'J ,'K ,'L ,': /* 24-27 j k l :; */
.byte 0x22 ,'~ ,0 ,'| /* 28-2B "' ~` l_shift |\ */
.byte 'Z ,'X ,'C ,'V /* 2C-2F z x c v */
.byte 'B ,'N ,'M ,'< /* 30-33 b n m <, */
.byte '> ,'? ,0 ,'* /* 34-37 >. ?/ r_shift rrr_* */
.byte 0 ,0x20 ,0 ,0 /* 38-3B l_alt space capslock f1 */
.byte 0 ,0 ,0 ,0 /* 3C-3F f2 f3 f4 f5 */
.byte 0 ,0 ,0 ,0 /* 40-43 f6 f7 f8 f9 */
.byte 0 ,0 ,0 ,'7 /* 44-47 f10 numlock scrolock rrr_7home */
.byte '8 ,'9 ,'- ,'4 /* 48-4B rrr_8up rrr_9pgup rrr_- rrr_4left */
.byte '5 ,'6 ,'+ ,'1 /* 4C-4F rrr_5 rrr_6right rrr_+ rrr_1end */
.byte '2 ,'3 ,'0 ,'. /* 50-53 rrr_2down rrr_3pgdn rrr_0ins rrr_.del */
.byte 0 ,0 ,0 ,0 /* 54-57 prtscr pause ? f11 */
.byte 0 ,0 ,0 ,0 /* 58-5B f12 ? ? l_win */
.byte 0 ,0 ,0x0d ,0 /* 5C-5F r_win print rrr_enter r_ctrl */
.byte '/ ,0 ,0 ,0 /* 60-63 rrr_/ r_alt ? ? */
.byte 0 ,0 ,0 ,0 /* 64-67 ? ? ? rr_home */
.byte 0 ,0 ,0 ,0 /* 68-6B rr_up rr_pgup ? rr_left */
.byte 0 ,0 ,0 ,0 /* 6C-6F ? rr_right ? rr_end */
.byte 0 ,0 ,0 ,0 /* 70-73 rr_down rr_pgdn rr_ins rr_del */
.byte 0 ,0 ,0 ,0 /* 74-77 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 78-7B ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 7C-7F ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 80-83 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 84-87 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 88-8B ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 8C-8F ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 90-93 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 94-97 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 98-9B ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 9C-9F ? unlctrl ? ? */
.byte 0 ,0 ,0 ,0 /* A0-A3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* A4-A7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* A8-AB ? ? unlshift ? */
.byte 0 ,0 ,0 ,0 /* AC-AF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* B0-B3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* B4-B7 ? ? unrshift ? */
.byte 0 ,0 ,0 ,0 /* B8-BB unlalt ? uncaps ? */
.byte 0 ,0 ,0 ,0 /* BC-BF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* C0-C3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* C4-C7 ? unnum unscro ? */
.byte 0 ,0 ,0 ,0 /* C8-CB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* CC-CF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* D0-D3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* D4-D7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* D8-DB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* DC-DF ? ? ? unrctrl */
.byte 0 ,0 ,0 ,0 /* E0-E3 ? unralt ? ? */
.byte 0 ,0 ,0 ,0 /* E4-E7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* E8-EB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* EC-EF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* F0-F3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* F4-F7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* F8-FB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* FC-FF ? ? ? ? */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
downkey_table:
.byte 0 ,0x1b ,'1 ,'2 /* 00-03 0 esc !1 @2 */
.byte '3 ,'4 ,'5 ,'6 /* 04-07 #3 $4 %5 ^6 */
.byte '7 ,'8 ,'9 ,'0 /* 08-0B &7 *8 (9 )0 */
.byte '- ,'= ,0x08 ,0x09 /* 0C-0F _- += erase tab */
.byte 'q ,'w ,'e ,'r /* 10-13 q w e r */
.byte 't ,'y ,'u ,'i /* 14-17 t y u i */
.byte 'o ,'p ,'[ ,'] /* 18-1B o p {[ }] */
.byte 0x0d ,0 ,'a ,'s /* 1C-1F enter l_ctrl a s */
.byte 'd ,'f ,'g ,'h /* 20-23 d f g h */
.byte 'j ,'k ,'l ,'; /* 24-27 j k l :; */
.byte 0x27 ,'` ,0 ,0x5c /* 28-2B "' ~` l_shift |\ */
.byte 'z ,'x ,'c ,'v /* 2C-2F z x c v */
.byte 'b ,'n ,'m ,', /* 30-33 b n m <, */
.byte '. ,'/ ,0 ,'* /* 34-37 >. ?/ r_shift rrr_* */
.byte 0 ,0x20 ,0 ,0 /* 38-3B l_alt space capslock f1 */
.byte 0 ,0 ,0 ,0 /* 3C-3F f2 f3 f4 f5 */
.byte 0 ,0 ,0 ,0 /* 40-43 f6 f7 f8 f9 */
.byte 0 ,0 ,0 ,0 /* 44-47 f10 numlock scrolock rrr_7home */
.byte 0 ,0 ,'- ,0 /* 48-4B rrr_8up rrr_9pgup rrr_- rrr_4left */
.byte 0 ,0 ,'+ ,0 /* 4C-4F rrr_5 rrr_6right rrr_+ rrr_1end */
.byte 0 ,0 ,0 ,0 /* 50-53 rrr_2down rrr_3pgdn rrr_0ins rrr_.del */
.byte 0 ,0 ,0 ,0 /* 54-57 prtscr pause ? f11 */
.byte 0 ,0 ,0 ,0 /* 58-5B f12 ? ? l_win */
.byte 0 ,0 ,0x0d ,0 /* 5C-5F r_win print rrr_enter r_ctrl */
.byte '/ ,0 ,0 ,0 /* 60-63 rrr_/ r_alt ? ? */
.byte 0 ,0 ,0 ,0 /* 64-67 ? ? ? rr_home */
.byte 0 ,0 ,0 ,0 /* 68-6B rr_up rr_pgup ? rr_left */
.byte 0 ,0 ,0 ,0 /* 6C-6F ? rr_right ? rr_end */
.byte 0 ,0 ,0 ,0 /* 70-73 rr_down rr_pgdn rr_ins rr_del */
.byte 0 ,0 ,0 ,0 /* 74-77 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 78-7B ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 7C-7F ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 80-83 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 84-87 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 88-8B ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 8C-8F ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 90-93 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 94-97 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 98-9B ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* 9C-9F ? unlctrl ? ? */
.byte 0 ,0 ,0 ,0 /* A0-A3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* A4-A7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* A8-AB ? ? unlshift ? */
.byte 0 ,0 ,0 ,0 /* AC-AF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* B0-B3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* B4-B7 ? ? unrshift ? */
.byte 0 ,0 ,0 ,0 /* B8-BB unlalt ? uncaps ? */
.byte 0 ,0 ,0 ,0 /* BC-BF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* C0-C3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* C4-C7 ? unnum unscro ? */
.byte 0 ,0 ,0 ,0 /* C8-CB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* CC-CF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* D0-D3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* D4-D7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* D8-DB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* DC-DF ? ? ? unrctrl */
.byte 0 ,0 ,0 ,0 /* E0-E3 ? unralt ? ? */
.byte 0 ,0 ,0 ,0 /* E4-E7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* E8-EB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* EC-EF ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* F0-F3 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* F4-F7 ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* F8-FB ? ? ? ? */
.byte 0 ,0 ,0 ,0 /* FC-FF ? ? ? ? */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
.align 4
keyboard_interrupt:
cld
pushl %eax
pushl %ebx
pushl %ecx
pushl %edx
pushl %esi
pushl %edi
pushl %ebp
push %ds
push %es
push %fs
push %gs
movl $0x10,%eax
mov %ax,%ds
mov %ax,%es
mov %ax,%fs
///////////////////////??????
call kb_wait
movb $0xad,%al
outb %al,$0x64
inb $0x60,%al
movb %al,temp_char
call kb_wait
movb $0xae,%al
outb %al,$0x64
///////////////////////??????
movb temp_char,%al
cmpb $0xe0,%al
jne key_int_0
movb $1,e0
movb $0,temp_char
jmp key_int_2
key_int_0:
cmpb $0xe1,%al
jne key_int_1
movb $1,e1
movb $0,temp_char
jmp key_int_2
key_int_1:
call *map_table(,%eax,4)
movb $0,e0
key_int_2:
cmpb $0,temp_char
je key_int_3
call do_key_interrupt
key_int_3:
movb $0x20,%al
outb %al,$0x20
///////////////////////??????
pop %gs
pop %fs
pop %es
pop %ds
popl %ebp
popl %edi
popl %esi
popl %edx
popl %ecx
popl %ebx
popl %eax
iret
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
do_none:
movb $0,temp_char
ret
do_self:
movb %al,temp_char
ret
do_enter:
cmpb $1,e0
jne do_enter_0
movb $0x5e,%al
do_enter_0:
movb %al,temp_char
ret
do_ctrl:
cmpb $1,e1
jne do_ctrl_0
movb $0,%al
jmp do_ctrl_1
do_ctrl_0:
cmpb $1,e0
jne do_ctrl_1
movb $0x5f,%al
do_ctrl_1:
movb %al,temp_char
ret
do_shift:
cmpb $1,e0
jne do_shift_0
movb $0,%al
do_shift_0:
movb %al,temp_char
ret
do_aaa:
cmpb $1,e0
jne do_aaa_0
movb $0x60,%al
do_aaa_0:
movb %al,temp_char
ret
do_bbb:
cmpb $1,e0
jne do_bbb_0
movb $0x54,%al
do_bbb_0:
movb %al,temp_char
ret
do_alt:
cmpb $1,e0
jne do_alt_0
movb $0x61,%al
do_alt_0:
movb %al,temp_char
ret
do_num:
cmpb $1,e1
jne do_num_0
movb $0x55,%al
movb $0,e1
do_num_0:
movb %al,temp_char
ret
do_scro:
cmpb $1,e0
jne do_scro_0
movb $0x55,%al
do_scro_0:
movb %al,temp_char
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -