亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ps2key.asm

?? Cypress 的(鼠標+鍵盤)復合設備匯編源程序
?? ASM
?? 第 1 頁 / 共 3 頁
字號:
; key 95 has a special consideration as well
; generation.
;
; Returns:
;   C = 1 if key was handled
;   C = 0 if not
;========================================================================


test_95:
    cmp     A,95
    jnz     .no                  ;key is 95

                                 ;test for shifting
    mov     A,[ksc_mod0]
    and     A,(LEFT_SHIFT_BIT+RIGHT_SHIFT_BIT)
    jz      .no_shift
    call    shift_case           ;there's shifting, use shift case
    jmp     .yes
.no_shift:
   call    extended_base_case    ;else use extended base case
.yes:
    SETC
    ret
.no:
    CLEARC
    ret



;========================================================================
; FUNCTION: test_124
;
; key 124 has a special consideration as well
;
; Returns:
;   C = 1 if key was handled
;   C = 0 if not
;========================================================================



test_124:
    cmp     a,124
    jnz     .no

                                ;test for ctrl,shift, or alt keys
                                ;in other words, any modifier key
                                ;except the gui keys

    mov     A,[ksc_mod0]
    and     A,~(LEFT_GUI_BIT+RIGHT_GUI_BIT)
    jnz           .special_case
                                ;no modifier keys are pressed. in this
                                ;case, use the "numlock" rule used for
                                ;keys 75 through 89
    call    numlock_case
    jmp     .yes
.special_case:                       ;some modifier keys are pressed.
    mov     A,[ksc_mod0]
    and     A,(LEFT_ALT_BIT+RIGHT_ALT_BIT)      ;if an alt key
    jz      .shiftctrl
    mov     X,AT101KB_ALT_124      ;  use special alt code for this key
    call    base_case              ;  and non-extended case
    jmp     .yes
 .shiftctrl:                            ;else
   call    extended_base_case        ;  use extended case for this key
.yes:
   SETC
    ret
.no:
   CLEARC
    ret

;========================================================================
; FUNCTION: extended base case
;
; sets extension flag so that scan code generation will prepend an 0xE0
; to the scan code
;
;========================================================================


extended_base_case:
    SETBIT PS2KEY_EXTENDED_FLAG,ps2key_flags


;========================================================================
; FUNCTION: base_case
;
; generates base-case scan code for character
; to the scan code
;
;========================================================================
base_case:
    CLRBIT  PS2KEY_MAKE_FLAG,ps2key_flags
    TSTMAKE
    jz     .base1
    SETBIT  PS2KEY_MAKE_FLAG,ps2key_flags
.base1:
    mov     A,X                                 ;get character in A
    call    put_code                            ;put scan code
    ret                                         ;and exit
;========================================================================
; FUNCTION: shift_case
;
; generates altered scan code for shifted character
;
;========================================================================

shift_case:
    SETBIT PS2KEY_EXTENDED_FLAG,ps2key_flags   ;set extended flag
    TSTMAKE                                 ;if make
    jz      .break
    mov     A,[ksc_mod0]                 ;and left-shift
    and     A,LEFT_SHIFT_BIT
    jz      .rightbreak

                                            ; we need to prepend a left-shift break code
    CLRBIT  PS2KEY_MAKE_FLAG,ps2key_flags   ; so set up a left-shift break
    mov           A,AT101KB_LEFTSHIFT
    call    put_code                        ; and put it
.rightbreak:
    mov     A,[ksc_mod0]                 ;now check for right shift
    and     A,RIGHT_SHIFT_BIT               ;if right-shift
    jz      .next
                                            ;prepend right-shift break code
    CLRBIT  PS2KEY_MAKE_FLAG,ps2key_flags
    mov           A,AT101KB_RIGHTSHIFT
    call    put_code
.next:
    SETBIT  PS2KEY_MAKE_FLAG,ps2key_flags   ;now generate a make scan code for the character
    mov     A,X
    call    put_code                        ;and return
    ret

.break:                                     ;key was a break situation
                                            ;we need to append shift-make codes
    CLRBIT  PS2KEY_MAKE_FLAG,ps2key_flags   ;put a break code for the character in question
    mov     A,X
    call    put_code
    mov     A,[ksc_mod0]
    and     A,LEFT_SHIFT_BIT                ;if a left shift
    jz      .rightmake
    SETBIT  PS2KEY_MAKE_FLAG,ps2key_flags   ;append a left-make code
    mov           A,AT101KB_LEFTSHIFT
    call    put_code
.rightmake:
    mov     A,[ksc_mod0]                 ;if a right shift
    and     A,RIGHT_SHIFT_BIT
    jz      .exit
    SETBIT  PS2KEY_MAKE_FLAG,ps2key_flags   ;prepend a right-make code
    mov           A,AT101KB_RIGHTSHIFT
    call    put_code
.exit:
    ret
;========================================================================
; FUNCTION: numlock_case
;
; generates altered scan code for numlock'ed character
;
;========================================================================

 numlock_case:
                                            ;numlock codes use extended byte
    SETBIT PS2KEY_EXTENDED_FLAG,ps2key_flags   ;so set flag
    TSTMAKE
    jz      .break
                                             ;key was a make
    SETBIT  PS2KEY_MAKE_FLAG,ps2key_flags   ;so prepend a left-shift make
    mov           A,AT101KB_LEFTSHIFT
    call    put_code
    mov     A,X
    call    put_code
    ret                                     ;and return

.break:                                     ;key was a break
    CLRBIT  PS2KEY_MAKE_FLAG,ps2key_flags   ;generate make code for the character
    mov     A,X
    call    put_code
    mov           A,AT101KB_LEFTSHIFT
    call    put_code
    ret
;========================================================================
; FUNCTION: put_code
;
; generates  scan code
;
; uses the value in the local variables extended_flag and make_flag
;
;========================================================================


put_code:
    push    X                                ;save X register
    mov     X,A                              ;save character in X
    TSTBIT PS2KEY_EXTENDED_FLAG,ps2key_flags
    jz     .next
    mov           A,0e0h                     ; prepend an 0xe0
    call     putch
.next:                                       ;check for make/break
    TSTBIT PS2KEY_MAKE_FLAG,ps2key_flags
    jz     .break
.make:                                       ;it is a make
    mov    A,[ps2key_scan_set]
    cmp    A,SCAN_SET_1                      ;if scan set 1,
    jnz     .makescan2
    mov    A,X
    index  scan_set_1_table                  ;    look up using set 1's table
    call   putch                             ;    put character, and exit
    jmp    .exit
.makescan2:
    cmp     A,SCAN_SET_2
    jnz    .makescan3                       ;if scan set 2,
    mov    A,X                              ;    look up using set 2's table
    index  scan_set_2_table
    call   putch                            ;    put character, and exit
    jmp    .exit
.makescan3:                                 ;scan set 3
    mov     A,X                             ;just do it
    index   scan_set_3_table
    call    putch
    jmp     .exit
.break:                                     ;it is a break
   mov     A,[ps2key_scan_set]
    cmp    A,SCAN_SET_1                     ;
    jnz    .breakscan2
    mov    A,X                              ;if scan set 1,
    index  scan_set_1_table                 ;    look up code and set bit 7
    or          A,080h
    call   putch                            ;    put code and exit
    jmp    .exit
.breakscan2:
    cmp     A,SCAN_SET_2
    jnz     .breakscan3
    mov    A,0f0h                           ;if scan set 2,
    call   putch                            ;    prepend an 0xf0 byte and exit
    mov    A,X
    index  scan_set_2_table
    call   putch
    jmp     .exit
.breakscan3:
    mov    A,0f0h                           ;if scan set 3,
    call   putch                            ;    prepend an 0xf0 byte and exit
    mov    A,X
    index  scan_set_3_table
    call   putch
.exit:
    pop     X
    ret

;========================================================================
; FUNCTION: ps2_getkey
;
; gets a character from ring buffer.
;
; Returns:
;    C = 1 if no characters are
;   available, otherwise, C = 0 and character returned in acc.
;
;========================================================================



ps2_getkey:

    mov     A,[ps2key_key_count]                 ;if key count is zero, return
    cmp           A,0
    jnz      .yes
    SETC
    ret
.yes:
    push     X
    dec     [ps2key_key_count]                   ;else decrement key count
    mov     X,[ps2key_outptr]                    ;get char pointed to
    mov     A,[X + 0]                            ;by out pointer
    mov     X,A                                  ;save it in X
    inc     [ps2key_outptr]                      ;increment out pointer
    mov     A,key_buffer_end                     ;check for wrap
    cmp     A,[ps2key_outptr]
    jnz     .loop
    mov     A,ps2key_key_buffer                  ;wrap, restore pointer to beginning
    mov     [ps2key_outptr],A
.loop:
    mov     A,X
    pop     X
    CLEARC                                       ;return with carry clear
    ret



;========================================================================
; FUNCTION: put_error
;
; inserts an overrun error code into the ring buffer
;
; Returns:
;
;
;========================================================================




put_error:
    mov     A,[ps2key_key_count]                ;get current buffer size
    cmp     A,BUFFER_LEN                        ;if == to max
    jnz     .put                                ;quit now
    ret                                         ;else
.put:
    push    X                                   ;save X
    mov     X,0ffh                              ;if scan set 1, use 0xff for error code
    mov     A,[ps2key_scan_set]
    cmp     A,SCAN_SET_1
    jz     .l1
    mov      X,0                                 ;sets 2 and 3 use a 0 for overrun
.l1:
    mov     A,X
.l2:
    call     put                                ;put the character into the ring buffer
    pop     X                                   ;restore X
    ret

;========================================================================
; FUNCTION: putch
;
; putch inserts a character into the ring buffer. if the ring buffer
; is full or has only room for 1 byte, putch will set the overflow flag
; and return. In other words, putch always leaves room, if possible,
; in the key buffer for insertion of an error code if an overflow occurs.
;
; Returns:
;
;
;========================================================================




putch:
    push    A                                   ;save the character
    mov     A,[ps2key_key_count]                ;get current buffer length
    cmp     A,BUFFER_LEN-1                        ;if not full,
    pop     A                                   ;  retrieve the character
    jc      put                                 ;  and put it it buffer
    SETBIT  PS2KEY_OVERFLOW_FLAG,ps2key_flags   ;else

    ret                                         ;  quit now
put:
    push    X
    inc     [ps2key_key_count]                  ;increment the key count
    mov     X,[ps2key_inptr]                    ;get current in pointer
    mov     [X +0],A                            ;put character there
    pop     X
    inc     [ps2key_inptr]                      ;increment the pointer
    mov     A,key_buffer_end                    ;check for wraparound
    cmp     A,[ps2key_inptr]
    jnz     .l1
    mov     A,ps2key_key_buffer                 ;buffer wrap -- restore pointer to beginning
    mov     [ps2key_inptr],A
.l1:
    ret


;========================================================================
; FUNCTION: ps2key_disable_typematic_action
;
; Disables a typematic key function
;
;
; Returns: nada
;
;
;========================================================================




ps2key_disable_typematic_action:
    push    A                           ;save A
    mov     A,0                         ;clear out typematic key and delay
    mov     [ps2key_last_key_made],A
    mov     [ps2key_delay_ctr],A
    pop     A
    ret

;========================================================================
; FUNCTION: ps2key_enable_typematic_action
;
;
;   Stores the contents of A as the typematic key, and initializes
;   the delay counter to the initial typematic delay.
;
; Returns:
;
;
;========================================================================
 ps2key_enable_typematic_action:
    push    A                               ;save key code
    mov     [ps2key_last_key_made],A        ;store it
    mov     A,[ps2key_flags]
    mov     [ps2key_last_flags],A           ;save the flags associated with it
    mov     A,[ps2key_type_delay]           ;initialize delay counter
    mov     [ps2key_delay_ctr],A            ;to typematic delay
.exit:
    pop     A
    ret

;========================================================================
; FUNCTION: ps2key_check_typematic
;
;
; Checks for expiration of the typematic delay counter and generates
; a key make for the typematic key, if the delay has expired.
;
; Returns:
;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品一区二区夜色| 国产精品三级视频| 美女视频黄免费的久久| 日韩高清不卡一区二区| 国产福利一区二区三区视频在线| 97国产一区二区| 国产美女一区二区| 日韩欧美区一区二| 美女视频黄 久久| 欧美系列亚洲系列| 亚洲精品va在线观看| av在线这里只有精品| 国产亚洲一区字幕| 国产suv精品一区二区6| 欧美一区二区三区不卡| 不卡高清视频专区| 国产91清纯白嫩初高中在线观看| 亚洲免费在线视频一区 二区| 26uuu亚洲综合色| 欧美蜜桃一区二区三区| 欧美日韩久久久| 国产福利一区二区三区视频 | 日韩福利电影在线观看| 亚洲人成人一区二区在线观看 | 99国产麻豆精品| 色噜噜偷拍精品综合在线| 奇米综合一区二区三区精品视频 | 成人av在线资源网站| 国产91精品入口| 欧美大片一区二区| 亚洲成人av一区| 精品在线免费观看| 日韩视频免费观看高清完整版在线观看 | 欧美日韩成人综合天天影院| 国产三级久久久| 天天做天天摸天天爽国产一区| 欧美熟乱第一页| 偷拍一区二区三区| 午夜精品久久久久久不卡8050| 亚洲视频精选在线| 免费成人你懂的| 成人激情开心网| 欧美精品丝袜久久久中文字幕| 成人av电影在线观看| 91精品国产综合久久久久久漫画 | 在线观看一区日韩| 91国偷自产一区二区使用方法| 日本一区二区三区在线观看| 精品国产网站在线观看| 欧美成人在线直播| 国产精品色婷婷久久58| 亚洲国产精品一区二区久久恐怖片| 精品一区免费av| 日韩欧美精品在线视频| 国产成人av一区二区| 中文字幕在线一区免费| 精品国产青草久久久久福利| 日韩欧美123| 国产欧美日韩不卡| 亚洲国产精品天堂| 国产成人免费视频一区| 欧美成人精品1314www| 亚洲国产精品久久久久婷婷884| 韩国成人精品a∨在线观看| 国产成人免费视频网站 | 精品成人a区在线观看| 麻豆成人免费电影| 最新不卡av在线| 欧美一区二区三区免费在线看 | 欧美三级在线视频| 国产美女av一区二区三区| 伊人性伊人情综合网| 国产精品免费久久久久| 欧美一区二区三区免费视频 | 麻豆一区二区三| 亚洲精品第1页| 精品国产乱码久久久久久影片| 欧美猛男男办公室激情| 97久久人人超碰| 成人免费视频视频| 久草在线在线精品观看| 亚洲一卡二卡三卡四卡无卡久久 | 久久精品国产77777蜜臀| 中文字幕在线一区二区三区| 5566中文字幕一区二区电影| 色婷婷国产精品久久包臀| 国产99一区视频免费| 国产伦精一区二区三区| 免费在线成人网| 亚洲小说春色综合另类电影| 亚洲欧美国产三级| 国产精品久久久久久久久免费丝袜| 久久精品一区四区| 精品国产髙清在线看国产毛片| 99精品视频在线免费观看| av在线不卡电影| 成人午夜视频福利| 99久久精品国产观看| 成人性生交大片免费看中文| 国产美女在线精品| 成人av在线播放网站| 成人app下载| 91麻豆成人久久精品二区三区| 成人做爰69片免费看网站| 国产成人精品三级| 99久久综合精品| 91年精品国产| 91麻豆福利精品推荐| 色婷婷av一区二区三区大白胸| 91久久精品网| 欧美亚洲免费在线一区| 在线观看亚洲精品视频| 91精品国产综合久久久久久| 在线不卡一区二区| 精品少妇一区二区| 国产人妖乱国产精品人妖| 久久影院午夜片一区| 国产欧美日韩在线| 91成人看片片| 日本最新不卡在线| 国产乱人伦精品一区二区在线观看| 寂寞少妇一区二区三区| 成人免费毛片嘿嘿连载视频| 91小视频在线| 欧洲国内综合视频| 精品日韩一区二区三区免费视频| 2021久久国产精品不只是精品| 亚洲欧美自拍偷拍| 午夜精品影院在线观看| 亚洲成人av中文| 免费在线看一区| www.欧美.com| 9191成人精品久久| 亚洲欧洲www| 亚洲成人你懂的| 国模套图日韩精品一区二区| eeuss鲁片一区二区三区在线观看| 一本大道av一区二区在线播放| 日韩欧美第一区| 国产精品看片你懂得| 日本中文在线一区| 成人v精品蜜桃久久一区| 精品视频一区 二区 三区| 久久久99精品免费观看不卡| 亚洲男帅同性gay1069| 精品在线亚洲视频| 欧洲色大大久久| 久久影院午夜论| 亚洲线精品一区二区三区| 美女免费视频一区二区| 看国产成人h片视频| 日韩av二区在线播放| 成人午夜电影久久影院| 丝袜亚洲另类丝袜在线| 欧美不卡在线视频| 亚洲国产高清在线观看视频| 国产.欧美.日韩| 91麻豆精品国产自产在线观看一区 | 欧美日韩在线三级| 日韩黄色免费电影| 一区二区理论电影在线观看| 麻豆精品国产91久久久久久| 欧美在线免费播放| 国产亚洲欧美一区在线观看| 日韩精品一区二区三区视频播放 | 欧美一区二区不卡视频| 国产精品色一区二区三区| 丁香婷婷深情五月亚洲| 中文字幕制服丝袜一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| av亚洲精华国产精华精华| 欧美一区二区三区喷汁尤物| 日韩在线播放一区二区| 亚洲h在线观看| 亚洲国产精品久久不卡毛片| 色噜噜夜夜夜综合网| 亚洲国产精品天堂| 欧美一区二区三区免费大片| 韩国av一区二区三区四区 | 国内精品第一页| 欧美日韩在线三级| 日韩av中文在线观看| 欧美一区二区精品| 色av成人天堂桃色av| 色综合激情五月| 精品噜噜噜噜久久久久久久久试看| 一区二区三区四区在线| 成人av小说网| 国产日韩精品视频一区| 美女视频黄a大片欧美| 欧美日本乱大交xxxxx| 亚洲欧美日韩久久| 国产在线不卡一区| 亚洲尤物视频在线| 日本欧洲一区二区| 顶级嫩模精品视频在线看| 久久综合久久综合亚洲| 久久不见久久见免费视频7| 国产欧美一区二区精品性色超碰 | 日韩欧美国产三级电影视频|