登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

vesa3.0的博客

一个练习

 
 
 

日志

 
 

PS2键盘上的键(六):小键盘上的数字  

2011-04-07 15:43:51|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

改变的还在inthandle.inc中, 采用的还是最笨的方法.

inthandle.inc内容如下:

_TestHandler:
TestHandler        = _TestHandler - LABEL_SEG_CODE32
                   mov ah, 0ch
                   mov edi,130
                   mov al,'0'
                   mov [gs:edi],ax
                   jmp $

_DEHandler:
DEHandler        = _DEHandler - LABEL_SEG_CODE32
                   mov ax,'DE'
                   call showerr
                   jmp $

_DBHandler:
DBHandler        = _DBHandler - LABEL_SEG_CODE32
                   mov ax,'DB'
                   call showerr
                   jmp $

_BPHandler:
BPHandler        = _BPHandler - LABEL_SEG_CODE32
                   mov ax,'BP'
                   call showerr
                   jmp $

_OFHandler:
OFHandler        = _OFHandler - LABEL_SEG_CODE32
                   mov ax,'OF'
                   call showerr
                   jmp $

_BRHandler:
BRHandler        = _BRHandler - LABEL_SEG_CODE32
                   mov ax,'BR'
                   call showerr
                   jmp $

_UDHandler:
UDHandler        = _UDHandler - LABEL_SEG_CODE32
                   mov ax,'UD'
                   call showerr
                   jmp $

_NMHandler:
NMHandler        = _NMHandler - LABEL_SEG_CODE32
                   mov ax,'NM'
                   call showerr
                   jmp $

_DFHandler:
DFHandler        = _DFHandler - LABEL_SEG_CODE32
                   mov ax,'DF'
                   call showerr
                   jmp $

_TSHandler:
TSHandler        = _TSHandler - LABEL_SEG_CODE32
                   mov ax,'TS'
                   call showerr
                   jmp $

_NPHandler:
NPHandler        = _NPHandler - LABEL_SEG_CODE32
                   mov ax,'NP'
                   call showerr
                   jmp $

_SSHandler:
SSHandler        = _SSHandler - LABEL_SEG_CODE32
                   mov ax,'SS'
                   call showerr
                   jmp $

_GPHandler:
GPHandler        = _GPHandler - LABEL_SEG_CODE32
                   mov ax,'GP'
                   call showerr
                   jmp $

_PFHandler:
PFHandler        = _PFHandler - LABEL_SEG_CODE32
                   mov ax,'PF'
                   call showerr
                   jmp $

_MFHandler:
MFHandler        = _MFHandler - LABEL_SEG_CODE32
                   mov ax,'MF'
                   call showerr
                   jmp $

_ACHandler:
ACHandler        = _ACHandler - LABEL_SEG_CODE32
                   mov ax,'AC'
                   call showerr
                   jmp $

_MCHandler:
MCHandler        = _MCHandler - LABEL_SEG_CODE32
                   mov ax,'MC'
                   call showerr
                   jmp $

_XFHandler:
XFHandler        = _XFHandler - LABEL_SEG_CODE32
                   mov ax,'XF'
                   call showerr
                   jmp $

showerr:           push ax
                   mov ah,0ch
                   mov edi,130
                   mov [gs:edi],ax
                   pop ax
                   shr ax,8
                   mov ah,0ch
                   inc edi
                   inc edi
                   mov [gs:edi],ax
                   ret

_NAHandler :
NAHandler          = _NAHandler -   LABEL_SEG_CODE32
                   iretd


_KeyboardHandler:
KeyboardHandler    = _KeyboardHandler - LABEL_SEG_CODE32
                   cli
                   save_site
                   mov ax,SelectorData0
                   mov ds,ax

                   xor eax,eax
                   mov dx,0x60
                   in  al, dx

                   cmp al,0x46             ;SCROLL
                   jne dealnum
                   not byte [scroll]
                   and byte [scroll],0x01
                   call set_leds
                   jmp nextkey

         dealnum:  cmp al,0x45             ;NUM
                   jne dealcaps
                   not byte [numlock]
                   and byte [numlock],0x01
                   call set_leds
                   jmp nextkey

         dealcaps: cmp al,0x3a             ; CAPSLOCK
                   jne dealshift
                   not byte [capslock]
                   and byte [capslock],0x01
                   call set_leds
                   jmp  nextkey

       dealshift:  cmp   al,42             ; SHIFT
                   jnz   noshifton1
                   mov  byte [shift],1
                   jmp   nextkey
      noshifton1:  cmp   al,54
                   jnz   noshifton2
                   mov  byte [shift],1
                   jmp   nextkey
      noshifton2:  cmp   al,42+128
                   jnz   noshiftoff1
                   mov   byte [shift],0
                   jmp   nextkey
      noshiftoff1: cmp   al,54+128
                   jnz   noshiftoff2
                   mov   byte [shift],0
                   jmp   nextkey

      noshiftoff2: cmp al,0x80
                   ja nextkey

                   cmp byte [numlock],1
                   jne knextstep
                   cmp al,0x52
                   jne num1
                   mov cl,'0'
                   jmp kdshow

             num1: cmp al,0x4f
                   jne num2
                   mov cl,'1'
                   jmp kdshow

             num2: cmp al,0x50
                   jne num3
                   mov cl,'2'
                   jmp kdshow

             num3: cmp al,0x51
                   jne num4
                   mov cl,'3'
                   jmp kdshow

             num4: cmp al,0x4b
                   jne num5
                   mov cl,'4'
                   jmp kdshow

             num5: cmp al,0x4c
                   jne num6
                   mov cl,'5'
                   jmp kdshow

             num6: cmp al,0x4d
                   jne num7
                   mov cl,'6'
                   jmp kdshow

             num7: cmp al,0x47
                   jne num8
                   mov cl,'7'
                   jmp kdshow

             num8: cmp al,0x48
                   jne num9
                   mov cl,'8'
                   jmp kdshow

             num9: cmp al,0x49
                   jne knextstep
                   mov cl,'9'
                   jmp kdshow

         knextstep:cmp byte [shift],1
                   je  shifton
                   cmp byte [capslock],0
                   jne  shiftoffcapson
         shiftoff: add eax,keymap
                   jmp kshow
    shiftoffcapson:add eax,keymapcaps
                   jmp kshow
           shifton:cmp byte [capslock],0
                   jne shiftoncapson
                   add eax,keymap_shift
                   jmp kshow
     shiftoncapson:add eax,keymap_shiftcaps
           kshow:  mov cl,[eax]
           kdshow: mov al,cl
                   mov edi ,[kposition]
                   mov ah,0ch
                   mov [gs:edi],ax
                   inc dword [kposition]
                   inc dword [kposition]

        nextkey:   mov al,20h
                   out 20h,al
                   restore_site
                   sti
                   iretd

_kposition:
kposition = _kposition -  LABEL_SEG_CODE32
                   dd  320
_shift:
shift     = _shift  -    LABEL_SEG_CODE32
                   db   0

_capslock:
capslock = _capslock -  LABEL_SEG_CODE32
         db   0

_numlock:
numlock  = _numlock -  LABEL_SEG_CODE32
         db  0

_scroll:
scroll   = _scroll  -  LABEL_SEG_CODE32
         db 0

_keymap:
keymap   = _keymap   -  LABEL_SEG_CODE32

     db   '6',27
     db   '1234567890-=',8,9
     db   'qwertyuiop[]',13
     db   '~asdfghjkl;',39,96,0,'\zxcvbnm,./',0,'45 '
     db   '@234567890123',180,178,184,'6',176,'7'

_keymapcaps:
keymapcaps   = _keymapcaps   -  LABEL_SEG_CODE32

     db   '6',27
     db   '1234567890-=',8,9
     db   'QWERTYUIOP[]',13
     db   '~ASDFGHJKL;',39,96,0,'\ZXCVBNM,./',0,'45 '
     db   '@234567890123',180,178,184,'6',176,'7'

_keymap_shift:
keymap_shift  = _keymap_shift - LABEL_SEG_CODE32

     db   '6',27
     db   '!@#$%^&*()_+',8,9
     db   'QWERTYUIOP{}',13
     db   '~ASDFGHJKL:"~',0,'|ZXCVBNM<>?',0,'45 '
     db   '@234567890123',180,178,184,'6',176,'7'

_keymap_shiftcaps:
keymap_shiftcaps  = _keymap_shiftcaps - LABEL_SEG_CODE32

     db   '6',27
     db   '!@#$%^&*()_+',8,9
     db   'qwertyuiop{}',13
     db   '~asdfghjkl:"~',0,'|zxcvbnm<>?',0,'45 '
     db   '@234567890123',180,178,184,'6',176,'7'

set_leds:          mov dx,0x64
waitbufferempty:   in  al,dx
                   not al
                   and al,0x02
                   cmp al,0x02
                   jne waitbufferempty

                   mov al,0xed
                   mov dx,0x60
                   out dx,al

waitacknowledge:   in  al,dx
                   cmp al,0xfa
                   jne waitacknowledge

   waitempty:      mov dx,064
                   not al
                   and al,0x02
                   cmp al,0x02
                   jne waitempty

                   mov dx,0x60
                   mov al,[capslock]
                   shl al,2
                   mov bl,[numlock]
                   shl bl,1
                   or  al,bl
                   mov cl,[scroll]
                   or  al,cl
                   out dx,al
;                   int al,dx
;  waitaction:      cmp al,0xfa
;                   jne waitaction
                   ret

_ClockHandler:
ClockHandler      = _ClockHandler - LABEL_SEG_CODE32
                   save_site
                   mov ebp,esp
                   inc byte [gs:140]
                   mov al,20h
                   out 20h,al
                   mov esp,StackOfTask

                   mov ax,SelectorData
                   mov ds,ax
                   call prochead
                   cmp dword [edx + 8],TopOfStack
                   jne switch
                   mov [edx + 4],ebp
          switch:  mov al,[currentnr]
                   inc al
                   cmp al,[totalnr]
                   jg begin
                   inc byte [currentnr]
                   jmp search
            begin: mov byte [currentnr],1
           search: call prochead
                   mov eax,[edx + 4]
                   cmp dword [edx + 8],TopOfStack
                   je stackhead
          nextstep:lldt word [edx + 4]
                   mov eax,[edx + 8]
                   mov cx,SelectorTSSData
                   mov ds,cx
                   mov dword [4],eax
                   sub eax,68
        stackhead: mov ebp,eax

        continue:  mov esp,ebp
                   restore_site

           start:  iretd

         prochead: xor edx,edx
                   mov dl,[currentnr]
                   dec dl
                   shl dx,4
                   add edx,proctable
                   ret

  评论这张
 
阅读(70)| 评论(2)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018