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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? simul101.asm

?? C語言高級實例解析的源代碼
?? ASM
字號:
;
; This function simulates the scan codes of the 101 keyboard on older 83/84 key
; keyboard systems that lack bios support for some often used 101 keyboard
; control key combinations.  I miss being able to use the Control+Up, which is
; one of the key combinations that the old BIOS does not support on my old
; machine at home.  Not all of the 101 keys are simulated.
;
; To see if control+up is pressed, we have to look at the keyboard status flags
; in the bios data area.  The flags at byte 0040:0017 are as follows:
;
;   Bit
;    7   Insert state  1 = active,  0 = inactive
;    6   Caps Lock     1 = active,  0 = inactive
;    5   Num Lock      1 = active,  0 = inactive
;    4   Scroll Lock   1 = active,  0 = inactive
;    3   Alt Shift     1 = active,  0 = inactive
;    2   Ctrl Shift    1 = active,  0 = inactive
;    1   Left Shift    1 = active,  0 = inactive
;    0   Right Shift   1 = active,  0 = inactive
;
; We are only concerned with bits 0-3, the shift status bits.  At label "k1"
; in this routine, the status byte is tested with 0x0f.  With simple tests,
; the status of the shift keys can be determined.  Then, it easy to use the
; tables to translate (XLAT) the raw key codes to extended scan codes.
;
; This function was designed to be linked with C object code.  The prototype
; for this function is far so it may be easily used with any memory model.
;
; For those of you (like me) who use keyboard speed up or other keyboard TSRs
; on XT's, you will find that those TSRs do not work with simulated scan codes
; generated by this utility.  This function grabs the raw keys before the TSR
; gets them and they don't get passed to the TSR.  This is the reason I mapped
; the "Keypad -" and "Keypad +" to the scroll up and scroll down functions -
; they aren't filtered by this function and get through to the typefast (TSR)
; utilities, so you can scroll really fast thru files.
;
; See:
;
;   Technical Reference for the Personal Computer AT, IBM Corporation,
;      Boca Raton, Florida, USA., 1984, First Edition (March 1984),
;      IBM part no. 1502243 and 1502494, pp. 1-31 thru 1-43,
;      pp. 4-1 thru 4-24, pp. 5-27 thru 5-32, pp. 5-115 thru 5-121, and
;      pp. 5-169 thru 5-170.
;
;   Microsoft Macro Assembler, Version 6.0, Reference, Microsoft Corporation,
;      Redmond, Washington, 1991, Document No. LN06557-0291, pp 194-195.
;
;   User's Guide and Reference for the MS-DOS Operating System, Version 5.0,
;      Microsoft Corporation, Redmond, Washington, 1991,
;      Document No. SY07661/20885-0391, pp. 623-637.
;
;
; Assembler flags:
;
;      QuickAssembler:   qcl /c simul101.asm
;            MASM 6.0:   ml /c /Cp /Zm simul101.asm
;
; Editor name:   TDE, the Thomson-Davis Editor.
; Author:        Frank Davis
; Date:          June 5, 1991, version 1.0
; Date:          July 29, 1991, version 1.1
; Date:          October 5, 1991, version 1.2
; Date:          January 20, 1992, version 1.3
; Date:          February 17, 1992, version 1.4
; Date:          April 1, 1992, version 1.5
; Date:          June 5, 1992, version 2.0
; Date:          October 31, 1992, version 2.1
;
; This code is released into the public domain, Frank Davis.  You may
; distribute it freely.

kb_data_port    EQU     60h
kb_cntl_port    EQU     61h

bios_data       SEGMENT AT 40h
                ORG     17h
kb_status       DB      ?
                ORG     1ah
buffer_head     DW      ?
buffer_tail     DW      ?
                ORG     80h
buffer_start    DW      ?
buffer_end      DW      ?
bios_data       ENDS


_TEXT   SEGMENT WORD PUBLIC 'CODE'
        ASSUME  cs:_TEXT, ds:NOTHING, es:bios_data
        public  _simulate_enh_kbd


;
; Prototype this function as far in the C header file so it may be used easily
; with any memory model.  See the last section in tdefunc.h for more info.
;
_simulate_enh_kbd       PROC    FAR
        jmp     initialize


; Map the keys starting at scan code 47h, which is the Home key.  This routine
; DOES NOT return most of these values from systems with a 101 enhanced keyboard
; connected, but the codes are included here for reference.  One should use the
; extended BIOS keyboard services with the 101 keyboard and not this function.
; Indeed, tde uses the extended BIOS if a 101 keyboard is detected.
;
; These tables are patterned after the ones in the IBM AT Technical Reference
; Manual, page 5-170 (the system bios listing), labels k8 thru k15.
;
;       Home   = 47h    Left   = 4bh    End   = 4fh    Del    = 53h   F11 = 57h
;       Up     = 48h    Center = 4ch    Down  = 50h    SysReq = 54h   F12 = 58h
;       PgUp   = 49h    Right  = 4dh    PgDn  = 51h    ---    = 55h
;       Grey - = 4ah    Grey + = 4eh    Ins   = 52h    ---    = 56h
;
;               47,  48,  49,  4a,  4b,  4c,  4d,  4e,  4f,  50,  51,  52,
;               53   54,  55,  56,  57,  58
ttable:
        DB      -1,  -1,  -1,  -1,  -1,  76,  -1,  -1,  -1,  -1,  -1,  -1
        DB      -1,  -1,  -1,  -1, 133, 134
shift_table:
        DB      -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1
        DB      -1,  -1,  -1,  -1, 135, 136
ctrl_table:
        DB      -1, 141,  -1, 142,  -1, 143,  -1, 144,  -1, 145,  -1, 146
        DB     147,  -1,  -1,  -1, 137, 138
alt_table:
        DB      -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1
        DB      -1,  -1,  -1,  -1, 139, 140

old_int_9       DW      ?,?     ; space for old interrupt

start:
        sti
        push    ax      ; push the registers we use
        push    bx
        push    dx
        push    ds
        push    es

        in      al, kb_data_port        ; let's look at the waiting key

        cmp     al, 0fh         ; is it equal to tab?
        je      special         ; yes, let's check for alt

        cmp     al, 1ah         ; is it less than "[{"?
        jb      pop_out_9       ; yes, let regular int handle it
        cmp     al, 1bh         ; is it less than "]}"?
        jbe     special         ; yes, let's check for alt

        cmp     al, 27h         ; is it less than ";:"?
        jb      pop_out_9       ; yes, let regular int handle it
        cmp     al, 29h         ; is it less than "`~"?
        jbe     special         ; yes, let's check for alt

        cmp     al, 33h         ; is it less than '<'?
        jb      pop_out_9       ; yes, let regular int handle it
        cmp     al, 35h         ; is it less than '?'?
        jbe     special         ; yes, let's check for alt

        cmp     al, 47h         ; is it less than home?
        jb      pop_out_9       ; yes, let regular int handle it
        cmp     al, 80h         ; is it less than a break code?
        jb      k1              ; yes, let's look at this key - a keypad key
        ALIGN   2
pop_out_9:
        jmp     regular_int_9   ; default - let regular int 9 handle break codes
                                ; and other stuff

k1:
        mov     dx, 0040h       ; segment of bios data area
        mov     es, dx          ; put it in es
        mov     dl, BYTE PTR es:kb_status  ; get shift status of alt & ctrl keys
        test    dl, 0fh         ; & it with 0x0f to see if any shift keys down
        jnz     k2              ; one of the shift keys is pressed - find it
        mov     bx, OFFSET ttable       ; get offset of table
        jmp     SHORT k5        ; no shift keys were down, translate normal keys
k2:
        test    dl, 03h                 ; are the left or right shift keys down?
        jz      k3                      ; not pressed, must be a ctrl or an alt
        mov     bx, OFFSET shift_table  ; get offset of shift table
        jmp     SHORT k5
k3:
        test    dl, 04h                 ; is the control shift key down?
        jz      k4                      ; not pressed, must be an alt
        mov     bx, OFFSET ctrl_table   ; get offset of control table
        jmp     SHORT k5
k4:
                                        ; the only shift key left is alt
        mov     bx, OFFSET alt_table    ; get offset of alt table
        ALIGN   2
k5:
        sub     al, 47h         ; normalize key to zero

        mov     dx, cs          ; put code segment in dx
        mov     ds, dx          ; now transfer code segment to ds

        xlat                    ; table look up
        cmp     al, -1          ; is it -1?
        je      regular_int_9   ; yes, let regular interrupt 9 handle it

        mov     ah, al          ; put copy of character in ah
        xor     al, al          ; zero out scan code - simulate extended key
        jmp     SHORT k7
        ALIGN   2
special:
        mov     dx, 0040h       ; segment of bios data area
        mov     es, dx          ; put it in es
        mov     dl, BYTE PTR es:kb_status  ; get shift status of alt & ctrl keys
        test    dl, 08h         ; & it with 0x08 to see if the alt key is down
        jnz     k6              ; alt key is down, let's do the special case
        jmp     SHORT regular_int_9     ; otherwise goto regular interrupt 9
        ALIGN   2
k6:
        mov     ah, al          ; put the scan code in ah
        xor     al, al          ; zero out al
        cmp     ah, 0fh         ; was Alt-Tab pressed?
        jne     k7              ; no, nothing else needs to be done
        mov     ah, 0a5h        ; extended code for tab is 0xa500
;
; We now have a key we want to emulate.  Put it in the keyboard buffer and
; end our interrupt.
;
k7:
        mov     bx, WORD PTR es:buffer_tail     ; get the end pointer to buffer
        mov     dx, bx                          ; save in dx
        inc     dx                              ; move to next word in list
        inc     dx
        cmp     dx, WORD PTR es:buffer_end      ; at end of buffer?
        jnz     ck_full_kbd                     ; if no, continue
        mov     dx, WORD PTR es:buffer_start    ; yes, reset to buffer start
        ALIGN   2

ck_full_kbd:
        cmp     dx, WORD PTR es:buffer_head     ; has the buffer wrapped?
        jz      end_int_9       ; yes, kbd full - enable keyboard for next key
        mov     WORD PTR es:[bx], ax    ; store simulated key into kbd buffer
        mov     WORD PTR es:buffer_tail, dx     ; move the tail up for next key
        ALIGN   2

end_int_9:
        cli                     ; no interrupts now
        mov     al, 20h         ; end of interrupt command
        out     20h, al         ; send command to interrupt control port
        sti                     ; enable interrupts - see IBM tech. ref. man.
        in      al, kb_cntl_port        ; get char from control port
        mov     ah, al                  ; save it in ah
        or      al, 80h                 ; set bit 7
        out     kb_cntl_port, al        ; output reset value
        mov     al, ah                  ; send original value
        jmp     SHORT $+2               ; take your time
        out     kb_cntl_port, al        ; send it to enable keyboard
        pop     es              ; restore registers
        pop     ds
        pop     dx
        pop     bx
        pop     ax
        iret                    ; return from interrupt
regular_int_9:
        pop     es              ; restore registers
        pop     ds
        pop     dx
        pop     bx
        pop     ax
        jmp     DWORD PTR old_int_9     ; no interrupt return - old one does it

; ***********************************************************************
; prototype for _simulate_enh_kbd is
;
;               void far simulate_enh_kbd( int )
;
; The formal parameter is available on the stack.  Use the bp register to
; access it.
;
; Passing any non-zero value will make this function grab interrupt 9.
; Pass a zero to this function to restore the old interrupt 9.
;
; If this function were really clever, it would have a "unique" signature.
; Before "installing", it would check to see if it was already installed.
; Similarly, before "uninstalling", this function would check to make sure
; it was installed so it wouldn't uninstall the regular interrupt 9
; handler by accident.  What the hell, live dangerously.
;
; ***********************************************************************

initialize:
        push    bp
        mov     bp, sp

        mov     dx, [bp+6]      ; put the parameter in dx

        push    ds
        ASSUME  es:_TEXT,ds:_TEXT
        mov     ax, cs          ; put cs in ds
        mov     es, ax
        mov     ds, ax

        cmp     dx, 0           ; 'NULL' character unhooks interrupt 9
        je      restore_9       ; any non NULL character grabs interrupt 9
grab_9:
        mov     ax, 3509h       ; get old interrupt 9 location
        int     21h             ; call MSDOS to get it
        mov     WORD PTR old_int_9, bx          ; save old int 9 offset
        mov     WORD PTR old_int_9+2, es        ; save old int 9 segment

        mov     dx, OFFSET start        ; get new offset of int 9
        mov     ax, 2509h               ; use function 25 so int 9 points
        int     21h                     ;  to my routine
        jmp     SHORT get_out           ; continue with editor

restore_9:
        mov     dx, WORD PTR old_int_9          ; get offset of old int 9
        mov     ax, WORD PTR old_int_9+2        ; get segment of old int 9
        mov     ds, ax                          ;  put segment in ds
        mov     ax, 2509h                       ; restore old int 9
        int     21h

get_out:
        pop     ds              ; clean up
        pop     bp
        retf
_simulate_enh_kbd       endp
_TEXT   ends
        end

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩系列| 91麻豆精品国产91久久久使用方法 | 国产精品传媒入口麻豆| 国模娜娜一区二区三区| 精品国产乱码久久久久久老虎| 蜜臀av国产精品久久久久| 日韩精品一区国产麻豆| 国产福利精品导航| 亚洲色欲色欲www在线观看| 一本色道久久综合亚洲aⅴ蜜桃 | 国产日韩欧美不卡在线| 成人av资源在线观看| 亚洲女同女同女同女同女同69| 91国偷自产一区二区开放时间 | 一区二区三区影院| 欧美日韩免费电影| 激情深爱一区二区| ...中文天堂在线一区| 欧美日韩综合一区| 经典三级在线一区| 亚洲人成亚洲人成在线观看图片| 欧美性三三影院| 免费成人美女在线观看.| 国产日韩av一区二区| 91麻豆6部合集magnet| 日韩av电影免费观看高清完整版| 日韩欧美精品三级| 欧美电影在哪看比较好| 久久精品72免费观看| 国产精品福利一区二区| 欧美体内she精视频| 国产主播一区二区三区| 亚洲曰韩产成在线| 国产亚洲污的网站| 欧美日韩大陆一区二区| 粉嫩av亚洲一区二区图片| 亚洲综合视频在线| 中文子幕无线码一区tr| 欧美群妇大交群的观看方式| 国产精品亚洲а∨天堂免在线| 亚洲国产乱码最新视频| 欧美极品aⅴ影院| 欧美日韩你懂得| 成人18视频日本| 美女国产一区二区三区| 一个色综合av| 国产精品网站导航| 欧美哺乳videos| 欧美综合在线视频| 91视频com| 国产精品亚洲专一区二区三区| 亚洲电影欧美电影有声小说| 国产精品久久久久久久久图文区| 91精品国产色综合久久不卡蜜臀 | 国产一区二区导航在线播放| 亚洲图片欧美色图| 日韩毛片精品高清免费| 久久久高清一区二区三区| 91精品国产色综合久久| 91麻豆自制传媒国产之光| 国产一区二区三区黄视频 | 国产精品福利一区| 国产欧美精品一区二区色综合朱莉| 欧美日韩大陆一区二区| 在线免费亚洲电影| 91在线观看成人| 成人三级伦理片| 国产成人免费在线视频| 国模娜娜一区二区三区| 久久99国产乱子伦精品免费| 日本欧美久久久久免费播放网| 一区二区三区在线播放| 夜夜夜精品看看| 亚洲一区av在线| 一区二区在线观看视频 | 欧美日韩一区三区| 欧美综合在线视频| 欧美少妇一区二区| 欧美区在线观看| 69精品人人人人| 欧美精品xxxxbbbb| 这里只有精品99re| 91精品国产黑色紧身裤美女| 制服丝袜亚洲精品中文字幕| 欧美精品一二三区| 日韩一二在线观看| www国产精品av| 国产婷婷色一区二区三区在线| 久久精品人人做人人爽人人| 中文字幕中文乱码欧美一区二区 | 国产乱对白刺激视频不卡| 国产真实乱对白精彩久久| 国产毛片精品国产一区二区三区| 国产福利一区二区三区| 91原创在线视频| 欧美午夜精品一区二区蜜桃| 717成人午夜免费福利电影| 日韩欧美在线影院| 久久久久久亚洲综合影院红桃| 欧美国产欧美综合| 亚洲欧美日韩精品久久久久| 亚洲成av人片在线观看无码| 蜜桃传媒麻豆第一区在线观看| 国产一区二区三区在线观看精品| 国产真实精品久久二三区| 不卡一区在线观看| 欧美美女一区二区在线观看| 欧美精品一区二区三区久久久| 国产精品私人影院| 亚洲国产欧美在线| 国产综合久久久久影院| 91天堂素人约啪| 欧美一区二区三区在线观看 | 国产精品久久久久三级| 亚洲一区二三区| 国内成人自拍视频| 在线免费一区三区| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品成人一区二区三区夜夜夜| 亚洲成人免费影院| 国产综合久久久久久久久久久久 | 欧美精品色一区二区三区| 久久尤物电影视频在线观看| 亚洲美女屁股眼交3| 寂寞少妇一区二区三区| 色综合天天天天做夜夜夜夜做| 日韩亚洲欧美一区| 成人免费一区二区三区在线观看| 午夜不卡av免费| 成人avav影音| 日韩免费性生活视频播放| 亚洲欧美成人一区二区三区| 毛片不卡一区二区| 91极品视觉盛宴| 久久久99精品免费观看| 午夜精品福利一区二区三区av | 欧美亚洲国产一区二区三区va | 欧美日韩免费观看一区二区三区| 久久久一区二区三区捆绑**| 亚洲电影在线免费观看| 成人久久视频在线观看| 337p亚洲精品色噜噜狠狠| 亚洲精品视频一区二区| 国产成人综合在线| 欧美电影免费观看高清完整版在线观看| 成人免费小视频| 高清shemale亚洲人妖| 欧美不卡一区二区三区| 亚洲已满18点击进入久久| av中文字幕亚洲| 国产片一区二区| 狠狠狠色丁香婷婷综合久久五月| 欧美日韩国产美女| 亚洲一区二区三区中文字幕在线| 成人av午夜影院| 欧美激情艳妇裸体舞| 国产美女一区二区| 日韩午夜中文字幕| 日韩国产精品大片| 欧美精品乱码久久久久久| 亚洲一区二区三区四区在线观看 | 日本成人中文字幕在线视频| 欧美亚洲国产怡红院影院| 亚洲精品国产成人久久av盗摄 | 国产日韩av一区| 国产成人免费网站| 久久久99久久| 日韩欧美高清在线| 日日骚欧美日韩| 51午夜精品国产| 日韩影院在线观看| 这里只有精品免费| 美女脱光内衣内裤视频久久影院| 欧美日本国产一区| 日韩avvvv在线播放| 日韩欧美中文一区二区| 激情欧美日韩一区二区| 精品成人私密视频| 国产传媒久久文化传媒| 国产精品亲子伦对白| 99r国产精品| 亚洲一区二三区| 日韩一级片在线观看| 精彩视频一区二区三区| 国产精品视频线看| 91美女在线看| 亚洲国产人成综合网站| 欧美一区二区三区视频在线观看| 麻豆免费精品视频| 久久精品免费在线观看| 成人黄色软件下载| 夜夜嗨av一区二区三区网页| 欧美欧美欧美欧美首页| 久久97超碰色| 国产精品成人免费| 正在播放一区二区| 国产91综合一区在线观看| 亚洲精品伦理在线| 欧美肥妇毛茸茸| 高清不卡在线观看|