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

📄 keyboard.s

📁 linux0.11 version(301k)
💻 S
📖 第 1 页 / 共 4 页
字号:
<a name=L444 href="source/kernel/chr_drv/keyboard.S#L444">444</a>         .fill 10,1,0<a name=L445 href="source/kernel/chr_drv/keyboard.S#L445">445</a> <a name=L446 href="source/kernel/chr_drv/keyboard.S#L446">446</a> #else<a name=L447 href="source/kernel/chr_drv/keyboard.S#L447">447</a> #error "KBD-type not defined"<a name=L448 href="source/kernel/chr_drv/keyboard.S#L448">448</a> #endif<a name=L449 href="source/kernel/chr_drv/keyboard.S#L449">449</a> /*<a name=L450 href="source/kernel/chr_drv/keyboard.S#L450">450</a>  * do_self handles "normal" keys, ie keys that don't change meaning<a name=L451 href="source/kernel/chr_drv/keyboard.S#L451">451</a>  * and which have just one character returns.<a name=L452 href="source/kernel/chr_drv/keyboard.S#L452">452</a>  */<a name=L453 href="source/kernel/chr_drv/keyboard.S#L453">453</a> do_self:<a name=L454 href="source/kernel/chr_drv/keyboard.S#L454">454</a>         lea alt_map,%ebx<a name=L455 href="source/kernel/chr_drv/keyboard.S#L455">455</a>         testb $0x20,mode                /* alt-gr */<a name=L456 href="source/kernel/chr_drv/keyboard.S#L456">456</a>         jne 1f<a name=L457 href="source/kernel/chr_drv/keyboard.S#L457">457</a>         lea shift_map,%ebx<a name=L458 href="source/kernel/chr_drv/keyboard.S#L458">458</a>         testb $0x03,mode<a name=L459 href="source/kernel/chr_drv/keyboard.S#L459">459</a>         jne 1f<a name=L460 href="source/kernel/chr_drv/keyboard.S#L460">460</a>         lea key_map,%ebx<a name=L461 href="source/kernel/chr_drv/keyboard.S#L461">461</a> 1:      movb (%ebx,%eax),%al<a name=L462 href="source/kernel/chr_drv/keyboard.S#L462">462</a>         orb %al,%al<a name=L463 href="source/kernel/chr_drv/keyboard.S#L463">463</a>         je none<a name=L464 href="source/kernel/chr_drv/keyboard.S#L464">464</a>         testb $0x4c,mode                /* ctrl or caps */<a name=L465 href="source/kernel/chr_drv/keyboard.S#L465">465</a>         je 2f<a name=L466 href="source/kernel/chr_drv/keyboard.S#L466">466</a>         cmpb $'a,%al<a name=L467 href="source/kernel/chr_drv/keyboard.S#L467">467</a>         jb 2f<a name=L468 href="source/kernel/chr_drv/keyboard.S#L468">468</a>         cmpb $'},%al<a name=L469 href="source/kernel/chr_drv/keyboard.S#L469">469</a>         ja 2f<a name=L470 href="source/kernel/chr_drv/keyboard.S#L470">470</a>         subb $32,%al<a name=L471 href="source/kernel/chr_drv/keyboard.S#L471">471</a> 2:      testb $0x0c,mode                /* ctrl */<a name=L472 href="source/kernel/chr_drv/keyboard.S#L472">472</a>         je 3f<a name=L473 href="source/kernel/chr_drv/keyboard.S#L473">473</a>         cmpb $64,%al<a name=L474 href="source/kernel/chr_drv/keyboard.S#L474">474</a>         jb 3f<a name=L475 href="source/kernel/chr_drv/keyboard.S#L475">475</a>         cmpb $64+32,%al<a name=L476 href="source/kernel/chr_drv/keyboard.S#L476">476</a>         jae 3f<a name=L477 href="source/kernel/chr_drv/keyboard.S#L477">477</a>         subb $64,%al<a name=L478 href="source/kernel/chr_drv/keyboard.S#L478">478</a> 3:      testb $0x10,mode                /* left alt */<a name=L479 href="source/kernel/chr_drv/keyboard.S#L479">479</a>         je 4f<a name=L480 href="source/kernel/chr_drv/keyboard.S#L480">480</a>         orb $0x80,%al<a name=L481 href="source/kernel/chr_drv/keyboard.S#L481">481</a> 4:      andl $0xff,%eax<a name=L482 href="source/kernel/chr_drv/keyboard.S#L482">482</a>         xorl %ebx,%ebx<a name=L483 href="source/kernel/chr_drv/keyboard.S#L483">483</a>         call put_queue<a name=L484 href="source/kernel/chr_drv/keyboard.S#L484">484</a> none:   ret<a name=L485 href="source/kernel/chr_drv/keyboard.S#L485">485</a> <a name=L486 href="source/kernel/chr_drv/keyboard.S#L486">486</a> /*<a name=L487 href="source/kernel/chr_drv/keyboard.S#L487">487</a>  * minus has a routine of it's own, as a 'E0h' before<a name=L488 href="source/kernel/chr_drv/keyboard.S#L488">488</a>  * the scan code for minus means that the numeric keypad<a name=L489 href="source/kernel/chr_drv/keyboard.S#L489">489</a>  * slash was pushed.<a name=L490 href="source/kernel/chr_drv/keyboard.S#L490">490</a>  */<a name=L491 href="source/kernel/chr_drv/keyboard.S#L491">491</a> minus:  cmpb $1,e0<a name=L492 href="source/kernel/chr_drv/keyboard.S#L492">492</a>         jne do_self<a name=L493 href="source/kernel/chr_drv/keyboard.S#L493">493</a>         movl $'/,%eax<a name=L494 href="source/kernel/chr_drv/keyboard.S#L494">494</a>         xorl %ebx,%ebx<a name=L495 href="source/kernel/chr_drv/keyboard.S#L495">495</a>         jmp put_queue<a name=L496 href="source/kernel/chr_drv/keyboard.S#L496">496</a> <a name=L497 href="source/kernel/chr_drv/keyboard.S#L497">497</a> /*<a name=L498 href="source/kernel/chr_drv/keyboard.S#L498">498</a>  * This table decides which routine to call when a scan-code has been<a name=L499 href="source/kernel/chr_drv/keyboard.S#L499">499</a>  * gotten. Most routines just call do_self, or none, depending if<a name=L500 href="source/kernel/chr_drv/keyboard.S#L500">500</a>  * they are make or break.<a name=L501 href="source/kernel/chr_drv/keyboard.S#L501">501</a>  */<a name=L502 href="source/kernel/chr_drv/keyboard.S#L502">502</a> key_table:<a name=L503 href="source/kernel/chr_drv/keyboard.S#L503">503</a>         .long none,do_self,do_self,do_self      /* 00-03 s0 esc 1 2 */<a name=L504 href="source/kernel/chr_drv/keyboard.S#L504">504</a>         .long do_self,do_self,do_self,do_self   /* 04-07 3 4 5 6 */<a name=L505 href="source/kernel/chr_drv/keyboard.S#L505">505</a>         .long do_self,do_self,do_self,do_self   /* 08-0B 7 8 9 0 */<a name=L506 href="source/kernel/chr_drv/keyboard.S#L506">506</a>         .long do_self,do_self,do_self,do_self   /* 0C-0F + ' bs tab */<a name=L507 href="source/kernel/chr_drv/keyboard.S#L507">507</a>         .long do_self,do_self,do_self,do_self   /* 10-13 q w e r */<a name=L508 href="source/kernel/chr_drv/keyboard.S#L508">508</a>         .long do_self,do_self,do_self,do_self   /* 14-17 t y u i */<a name=L509 href="source/kernel/chr_drv/keyboard.S#L509">509</a>         .long do_self,do_self,do_self,do_self   /* 18-1B o p } ^ */<a name=L510 href="source/kernel/chr_drv/keyboard.S#L510">510</a>         .long do_self,ctrl,do_self,do_self      /* 1C-1F enter ctrl a s */<a name=L511 href="source/kernel/chr_drv/keyboard.S#L511">511</a>         .long do_self,do_self,do_self,do_self   /* 20-23 d f g h */<a name=L512 href="source/kernel/chr_drv/keyboard.S#L512">512</a>         .long do_self,do_self,do_self,do_self   /* 24-27 j k l | */<a name=L513 href="source/kernel/chr_drv/keyboard.S#L513">513</a>         .long do_self,do_self,lshift,do_self    /* 28-2B { para lshift , */<a name=L514 href="source/kernel/chr_drv/keyboard.S#L514">514</a>         .long do_self,do_self,do_self,do_self   /* 2C-2F z x c v */<a name=L515 href="source/kernel/chr_drv/keyboard.S#L515">515</a>         .long do_self,do_self,do_self,do_self   /* 30-33 b n m , */<a name=L516 href="source/kernel/chr_drv/keyboard.S#L516">516</a>         .long do_self,minus,rshift,do_self      /* 34-37 . - rshift * */<a name=L517 href="source/kernel/chr_drv/keyboard.S#L517">517</a>         .long alt,do_self,caps,func             /* 38-3B alt sp caps f1 */<a name=L518 href="source/kernel/chr_drv/keyboard.S#L518">518</a>         .long func,func,func,func               /* 3C-3F f2 f3 f4 f5 */<a name=L519 href="source/kernel/chr_drv/keyboard.S#L519">519</a>         .long func,func,func,func               /* 40-43 f6 f7 f8 f9 */<a name=L520 href="source/kernel/chr_drv/keyboard.S#L520">520</a>         .long func,num,scroll,cursor            /* 44-47 f10 num scr home */<a name=L521 href="source/kernel/chr_drv/keyboard.S#L521">521</a>         .long cursor,cursor,do_self,cursor      /* 48-4B up pgup - left */<a name=L522 href="source/kernel/chr_drv/keyboard.S#L522">522</a>         .long cursor,cursor,do_self,cursor      /* 4C-4F n5 right + end */<a name=L523 href="source/kernel/chr_drv/keyboard.S#L523">523</a>         .long cursor,cursor,cursor,cursor       /* 50-53 dn pgdn ins del */<a name=L524 href="source/kernel/chr_drv/keyboard.S#L524">524</a>         .long none,none,do_self,func            /* 54-57 sysreq ? &lt; f11 */<a name=L525 href="source/kernel/chr_drv/keyboard.S#L525">525</a>         .long func,none,none,none               /* 58-5B f12 ? ? ? */<a name=L526 href="source/kernel/chr_drv/keyboard.S#L526">526</a>         .long none,none,none,none               /* 5C-5F ? ? ? ? */<a name=L527 href="source/kernel/chr_drv/keyboard.S#L527">527</a>         .long none,none,none,none               /* 60-63 ? ? ? ? */<a name=L528 href="source/kernel/chr_drv/keyboard.S#L528">528</a>         .long none,none,none,none               /* 64-67 ? ? ? ? */<a name=L529 href="source/kernel/chr_drv/keyboard.S#L529">529</a>         .long none,none,none,none               /* 68-6B ? ? ? ? */<a name=L530 href="source/kernel/chr_drv/keyboard.S#L530">530</a>         .long none,none,none,none               /* 6C-6F ? ? ? ? */<a name=L531 href="source/kernel/chr_drv/keyboard.S#L531">531</a>         .long none,none,none,none               /* 70-73 ? ? ? ? */<a name=L532 href="source/kernel/chr_drv/keyboard.S#L532">532</a>         .long none,none,none,none               /* 74-77 ? ? ? ? */<a name=L533 href="source/kernel/chr_drv/keyboard.S#L533">533</a>         .long none,none,none,none               /* 78-7B ? ? ? ? */<a name=L534 href="source/kernel/chr_drv/keyboard.S#L534">534</a>         .long none,none,none,none               /* 7C-7F ? ? ? ? */<a name=L535 href="source/kernel/chr_drv/keyboard.S#L535">535</a>         .long none,none,none,none               /* 80-83 ? br br br */<a name=L536 href="source/kernel/chr_drv/keyboard.S#L536">536</a>         .long none,none,none,none               /* 84-87 br br br br */<a name=L537 href="source/kernel/chr_drv/keyboard.S#L537">537</a>         .long none,none,none,none               /* 88-8B br br br br */<a name=L538 href="source/kernel/chr_drv/keyboard.S#L538">538</a>         .long none,none,none,none               /* 8C-8F br br br br */<a name=L539 href="source/kernel/chr_drv/keyboard.S#L539">539</a>         .long none,none,none,none               /* 90-93 br br br br */<a name=L540 href="source/kernel/chr_drv/keyboard.S#L540">540</a>         .long none,none,none,none               /* 94-97 br br br br */<a name=L541 href="source/kernel/chr_drv/keyboard.S#L541">541</a>         .long none,none,none,none               /* 98-9B br br br br */<a name=L542 href="source/kernel/chr_drv/keyboard.S#L542">542</a>         .long none,unctrl,none,none             /* 9C-9F br unctrl br br */<a name=L543 href="source/kernel/chr_drv/keyboard.S#L543">543</a>         .long none,none,none,none               /* A0-A3 br br br br */<a name=L544 href="source/kernel/chr_drv/keyboard.S#L544">544</a>         .long none,none,none,none               /* A4-A7 br br br br */<a name=L545 href="source/kernel/chr_drv/keyboard.S#L545">545</a>         .long none,none,unlshift,none           /* A8-AB br br unlshift br */<a name=L546 href="source/kernel/chr_drv/keyboard.S#L546">546</a>         .long none,none,none,none               /* AC-AF br br br br */<a name=L547 href="source/kernel/chr_drv/keyboard.S#L547">547</a>         .long none,none,none,none               /* B0-B3 br br br br */<a name=L548 href="source/kernel/chr_drv/keyboard.S#L548">548</a>         .long none,none,unrshift,none           /* B4-B7 br br unrshift br */<a name=L549 href="source/kernel/chr_drv/keyboard.S#L549">549</a>         .long unalt,none,uncaps,none            /* B8-BB unalt br uncaps br */<a name=L550 href="source/kernel/chr_drv/keyboard.S#L550">550</a>         .long none,none,none,none               /* BC-BF br br br br */<a name=L551 href="source/kernel/chr_drv/keyboard.S#L551">551</a>         .long none,none,none,none               /* C0-C3 br br br br */<a name=L552 href="source/kernel/chr_drv/keyboard.S#L552">552</a>         .long none,none,none,none               /* C4-C7 br br br br */<a name=L553 href="source/kernel/chr_drv/keyboard.S#L553">553</a>         .long none,none,none,none               /* C8-CB br br br br */<a name=L554 href="source/kernel/chr_drv/keyboard.S#L554">554</a>         .long none,none,none,none               /* CC-CF br br br br */<a name=L555 href="source/kernel/chr_drv/keyboard.S#L555">555</a>         .long none,none,none,none               /* D0-D3 br br br br */<a name=L556 href="source/kernel/chr_drv/keyboard.S#L556">556</a>         .long none,none,none,none               /* D4-D7 br br br br */<a name=L557 href="source/kernel/chr_drv/keyboard.S#L557">557</a>         .long none,none,none,none               /* D8-DB br ? ? ? */<a name=L558 href="source/kernel/chr_drv/keyboard.S#L558">558</a>         .long none,none,none,none               /* DC-DF ? ? ? ? */<a name=L559 href="source/kernel/chr_drv/keyboard.S#L559">559</a>         .long none,none,none,none               /* E0-E3 e0 e1 ? ? */<a name=L560 href="source/kernel/chr_drv/keyboard.S#L560">560</a>         .long none,none,none,none               /* E4-E7 ? ? ? ? */<a name=L561 href="source/kernel/chr_drv/keyboard.S#L561">561</a>         .long none,none,none,none               /* E8-EB ? ? ? ? */<a name=L562 href="source/kernel/chr_drv/keyboard.S#L562">562</a>         .long none,none,none,none               /* EC-EF ? ? ? ? */<a name=L563 href="source/kernel/chr_drv/keyboard.S#L563">563</a>         .long none,none,none,none               /* F0-F3 ? ? ? ? */<a name=L564 href="source/kernel/chr_drv/keyboard.S#L564">564</a>         .long none,none,none,none               /* F4-F7 ? ? ? ? */<a name=L565 href="source/kernel/chr_drv/keyboard.S#L565">565</a>         .long none,none,none,none               /* F8-FB ? ? ? ? */<a name=L566 href="source/kernel/chr_drv/keyboard.S#L566">566</a>         .long none,none,none,none               /* FC-FF ? ? ? ? */<a name=L567 href="source/kernel/chr_drv/keyboard.S#L567">567</a> <a name=L568 href="source/kernel/chr_drv/keyboard.S#L568">568</a> /*<a name=L569 href="source/kernel/chr_drv/keyboard.S#L569">569</a>  * kb_wait waits for the keyboard controller buffer to empty.<a name=L570 href="source/kernel/chr_drv/keyboard.S#L570">570</a>  * there is no timeout - if the buffer doesn't empty, we hang.<a name=L571 href="source/kernel/chr_drv/keyboard.S#L571">571</a>  */<a name=L572 href="source/kernel/chr_drv/keyboard.S#L572">572</a> kb_wait:<a name=L573 href="source/kernel/chr_drv/keyboard.S#L573">573</a>         pushl %eax<a name=L574 href="source/kernel/chr_drv/keyboard.S#L574">574</a> 1:      inb $0x64,%al<a name=L575 href="source/kernel/chr_drv/keyboard.S#L575">575</a>         testb $0x02,%al<a name=L576 href="source/kernel/chr_drv/keyboard.S#L576">576</a>         jne 1b<a name=L577 href="source/kernel/chr_drv/keyboard.S#L577">577</a>         popl %eax<a name=L578 href="source/kernel/chr_drv/keyboard.S#L578">578</a>         ret<a name=L579 href="source/kernel/chr_drv/keyboard.S#L579">579</a> /*<a name=L580 href="source/kernel/chr_drv/keyboard.S#L580">580</a>  * This routine reboots the machine by asking the keyboard<a name=L581 href="source/kernel/chr_drv/keyboard.S#L581">581</a>  * controller to pulse the reset-line low.<a name=L582 href="source/kernel/chr_drv/keyboard.S#L582">582</a>  */<a name=L583 href="source/kernel/chr_drv/keyboard.S#L583">583</a> reboot:<a name=L584 href="source/kernel/chr_drv/keyboard.S#L584">584</a>         call kb_wait<a name=L585 href="source/kernel/chr_drv/keyboard.S#L585">585</a>         movw $0x1234,0x472      /* don't do memory check */<a name=L586 href="source/kernel/chr_drv/keyboard.S#L586">586</a>         movb $0xfc,%al          /* pulse reset and A20 low */<a name=L587 href="source/kernel/chr_drv/keyboard.S#L587">587</a>         outb %al,$0x64<a name=L588 href="source/kernel/chr_drv/keyboard.S#L588">588</a> die:    jmp die</pre><hr><div align=center>   [<b><i>源代码浏览</i></b>] [<a href="diff/kernel/chr_drv/keyboard.S">区别标定</a>] [<a href="ident">标识符搜索</a>] [<a href="search">文本搜索</a>] [<a href="find">文件搜索</a>] </div><hr>本网页由 <a href="http:blurb.html">LXR引擎</a> 自动生成.<br></html>

⌨️ 快捷键说明

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