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

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

?? kbusb.asm

?? 該程序為USB HUB程序
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
;========================================================================
;   FILE: usbkey.asm
;
;   This file contains the code that implements the usb-specific
;   routines to handle key scans.
;========================================================================
;BTH v1.68
;
;major modifications to handle MM and power key reporting
;
;


USB_NO_REPORT:      equ 0
USB_REPORT_ERROR:   equ 1
USB_REPORT_KEY:     equ 2


;========================================================================
; Send_Keyboard2_Report sends a power or MM key report out on endpoint 2
;========================================================================
Send_Keyboard2_Report:
	mov		A, [usb_power_idle_period_ctr]          ; if idle_period is zero, then we only send
	cmp		A, 0									; reports on change
	jz		.mm										; so skip reset
    dec     A
    mov     [usb_power_idle_period_ctr],A			;  else decrement idle period
    jnz     .mm										;  if idle period  expired
    mov     A,[usb_power_idle_period]				;  reset idle period
    mov     [usb_power_idle_period_ctr],A
	mov		A,TX_POWER_MASK							;  set flag indicating transmission required
	or		[usb_tx_flags],A
.mm:
	mov		A, [usb_mm_idle_period_ctr]				; if idle_period is zero, then we only send
	cmp		A, 0									; reports on change
	jz		.xmit									; so skip rest
	dec     A
	mov     [usb_mm_idle_period_ctr],A				;  else decrement idle period
	jnz     .xmit									;  if idle period  expired
	mov     A,[usb_mm_idle_period]					;  reset idle period
	mov     [usb_mm_idle_period_ctr],A
	mov		A,TX_MM_MASK							;  set flag indicating transmit required
	or		[usb_tx_flags],A
.xmit:
    mov		A,[KB_PROTOCOL]
    cmp		A,BOOT_PROTOCOL
    jz		.exit									;don't report  in boot mode
    mov     A,[usb_current_state]					;don't report  if error situation
    cmp     A,USB_REPORT_ERROR
    jz      .exit
	iord	EP_A2_Mode								; are we currently transmitting a report?
	and		A, USB_MODE_MASK
	cmp		A, ACKIN
	jz		.exit									; yes, then exit 
	mov		A,[usb_tx_flags]						; if power, sleep, or wake keys
	AND		A,(TX_POWER_MASK | TX_MM_MASK)
	jz		.exit
	AND		A,TX_POWER_MASK
    jz		.mm1									;
 	mov		A,~TX_POWER_MASK
	and		[usb_tx_flags],A
	mov		A,EndpointA2
	call	Copy_power_buffer
	iord	EP_A2_Counter		
	and		A, DATATOGGLE							; keep data toggle setting
	or		A, POWER_REPORT_LEN						; packet size
	jmp		.send
.mm1:
 	mov		A,~TX_MM_MASK
	and		[usb_tx_flags],A
	mov		A,EndpointA2
	call	Copy_MM_buffer
	iord	EP_A2_Counter		
	and		A, DATATOGGLE						; keep data toggle setting
	or		A, MM_REPORT_LEN					; packet size
.send:
	iowr	EP_A2_Counter
	mov	A, ACKIN								; enable packet transmission 
	iowr	EP_A2_Mode
.exit:
	ret


;========================================================================
; Send keyboard report to host
;========================================================================
Send_Keyboard_Report:
    mov     A,[usb_tx_flags]
	AND		A,TX_KBD_MASK
	cmp		A,0								; if nothing to report 
    jz		.idle							; check idle status
    
    cmp		A,USB_REPORT_ERROR				; else if we've got to send an error report
    jnz		.send

    cmp		A,[last_key_report]				; and the last one sent was not an error
    jnz		.send							; we can send this one too

.idle:										; else check idle status 
	mov		A, [kbd_idle_period_ctr]		; if idle_period is zero, then we only send
	cmp		A, 0							; reports on change
	jz		.exit							; exit task

    dec     A
    mov     [kbd_idle_period_ctr],A			; decrement idle period

    jnz     .exit							; and exit if idle period not expired
      
    mov      A,[last_key_report]			; otherwize get type of last report


.send:										;ok, we're REALLY  going to send a new report
 	push	A

	iord	EP_A1_Mode						; are we currently transmitting a report?
	and		A, USB_MODE_MASK
	cmp		A, ACKIN
    pop		A								; pop current request into A
	jz		.out           					; yes, then exit (so we don't mess up
											; the current transmission)
											; 
    mov		[last_key_report],A
	mov		A,~TX_KBD_MASK
    and     [usb_tx_flags],A
	mov		A,KBBuffer
	call	Copy_report_buffer				; copy report buffer 
	call	Enable_EP1_Transmission			; enable EP1 transmission
.out: 
    mov		A,[kbd_idle_period]
    mov		[kbd_idle_period_ctr],A			;reset idle period
.exit:
	ret



;========================================================================
; Copy report_buffer copies key buffer to endpoint buffer pointed to by contents of A
;
; A points to either EP0 buffer (for getreport function)
;   or EP1 (for normal key reporting)
;========================================================================
Copy_report_buffer:
	push	X
	mov		X, 7                            ;count 8 of the darn things
	add		A,7								;advance base address
copy_report_buffer_loop:
	push	X								;save count
	push	A								;push buffer base address
    mov     A,[last_key_report]             
    cmp     A,USB_REPORT_ERROR
    jz      .error
 	mov		A, [X + usb_report_buffer]      ;assume we're sending a key stroke
    jmp     .next 
.error:                          
    mov     A,X
    index   key_error_buffer                ;else get error code byte
.next:
	pop		X								;pop buffer base into X
	mov		[X], A							;put key code into ep buffer
	mov		A,X								;put buffer base address back into A
	dec		A								;decrement buffer address
	pop		X								;get back index
	dec		X
	jnc		copy_report_buffer_loop         ;do next one

	pop		X

	ret
;========================================================================
; Copy_power_buffer copies  power buffer to endpoint buffer pointed to by contents of A
;
; A points to either EP0 buffer (for getreport function)
;   or EP1 (for normal key reporting)
;========================================================================
Copy_power_buffer:
	push	X									;save X
	mov		X,A									;get index to ep buffer
	mov		A,POWER_REPORT_ID					; set report ID 
	mov		[X],A
	mov		A,[usb_power_keys]					; get power keys
  	mov		[X+1],A
	pop		X									;restore X
	ret
;========================================================================
; Copy_MM_buffer copies  MM buffer to endpoint buffer pointed to by contents of A
;
; A points to either EP0 buffer (for getreport function)
;   or EP1 (for normal key reporting)
;========================================================================
Copy_MM_buffer:
	push	X
	mov		X,A
	mov		A,MM_REPORT_ID		 				; set report ID 
	mov		[X],A
	mov		A,[usb_mm_keys]						; get bit field
  	mov		[X+1],A
	mov		A,[usb_mm_keys+1]					; get bit field
  	mov		[X+2],A
	pop		X
	ret

XPAGEOFF	
key_error_buffer:
    db      00,00,01,01,01,01,01,01
XPAGEON	

;========================================================================
; Enable transmission from EP1 FIFO
;========================================================================
Enable_EP1_Transmission:
	push	A								; save accumulator on stack
	iord	EP_A1_Counter              
      and	A, DATATOGGLE					; keep data toggle setting
	or		A, 8h                           ; packet size
	iowr	EP_A1_Counter

	mov		A, ACKIN						; enable packet transmission 
	iowr	EP_A1_Mode

	pop		A                               ; restore accumulator
	ret										; return
	
;========================================================================
; FUNCTION:usb_scan_keys
;
;   This is the main entry point for the start of key scanning.
;   This function calls the key scanner, which will generate calls to
;   usbkey_putkey from the internal scanning loop of the key scanner.
;
;
;
;========================================================================
usbkey_scan_keys:
    call    ksc_scan_keys                           ; scan the keys
    jc      .send_error                             ; phantom situation,send error to host
    
	mov     A, [usb_key_count]                      ; are there more than 6 keys pressed?
	cmp     A, 7
	jnc    .send_error                              ; yes, then send error to host
	
    mov     A,0                                     ; no errors, clear the error byte
    mov     [usb_current_state],A                   ; and return
    jmp     .exit
                                                    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看日韩国产| 久久99热狠狠色一区二区| 亚洲免费观看高清在线观看| 午夜精品视频一区| 成人午夜在线视频| 欧美一区二区在线观看| 国产精品色在线观看| 亚洲va国产va欧美va观看| 国产精品 日产精品 欧美精品| 欧美一a一片一级一片| 国产亚洲一区二区三区在线观看 | 亚洲少妇30p| 激情亚洲综合在线| 欧美日韩日日摸| 日韩一区有码在线| 国产精品99久久久久久久女警| 欧美私人免费视频| 亚洲免费av网站| 成人免费毛片片v| 亚洲精品一区二区三区影院 | 久久欧美一区二区| 亚洲a一区二区| 欧美综合亚洲图片综合区| 中文字幕一区二区三区色视频| 韩国视频一区二区| 日韩久久久精品| 麻豆国产一区二区| 88在线观看91蜜桃国自产| 亚洲香蕉伊在人在线观| 色婷婷综合中文久久一本| 最新热久久免费视频| 丁香另类激情小说| 国产精品久久精品日日| 风间由美一区二区三区在线观看 | 欧美在线一二三四区| 亚洲人成影院在线观看| 成人性视频免费网站| 久久九九99视频| 国产乱码精品一区二区三区av| 精品免费国产二区三区 | 8v天堂国产在线一区二区| 婷婷综合久久一区二区三区| 欧美精品v国产精品v日韩精品| 亚洲综合色自拍一区| 在线亚洲高清视频| 天天av天天翘天天综合网| 91.com视频| 精品亚洲porn| 国产欧美日产一区| 成人av集中营| 亚洲一二三四在线观看| 制服丝袜中文字幕一区| 激情久久五月天| 国产精品免费视频观看| 色综合色综合色综合色综合色综合 | 91丨porny丨国产入口| 亚洲最色的网站| 日韩午夜在线播放| 丁香一区二区三区| 亚洲欧美日韩一区二区| 欧美日韩国产高清一区二区三区| 94色蜜桃网一区二区三区| 亚洲精品日韩综合观看成人91| 日本精品免费观看高清观看| 天天色综合成人网| 久久久国产精品麻豆| 91小视频免费观看| 日韩电影免费在线| 国产欧美日韩久久| 欧美日韩免费电影| 国产精品一区二区在线播放 | 久久久久久免费毛片精品| bt欧美亚洲午夜电影天堂| 亚洲国产欧美日韩另类综合| 欧美精品一区二区三区视频| 色悠悠亚洲一区二区| 精品亚洲成av人在线观看| 亚洲另类春色校园小说| 精品国产免费一区二区三区香蕉| a美女胸又www黄视频久久| 美女在线视频一区| 一区二区成人在线视频 | 韩国精品一区二区| 亚洲综合成人在线视频| 亚洲精品一区二区三区99| 欧亚洲嫩模精品一区三区| 极品少妇一区二区三区精品视频 | 国产网红主播福利一区二区| 欧美午夜电影一区| 成人小视频在线| 久久精品久久综合| 亚洲线精品一区二区三区八戒| 久久久三级国产网站| 欧美电影在线免费观看| 99久久国产综合精品色伊| 国内外成人在线视频| 婷婷久久综合九色国产成人| 亚洲色图第一区| 国产欧美综合在线观看第十页| 欧美一区二区福利在线| 欧美性感一区二区三区| 99re热这里只有精品视频| 国产成人亚洲精品狼色在线 | 国产成人自拍在线| 美女免费视频一区二区| 丝袜脚交一区二区| 亚洲综合清纯丝袜自拍| 亚洲欧美日韩国产综合在线| 国产欧美久久久精品影院| www亚洲一区| 日韩欧美一二三| 欧美大白屁股肥臀xxxxxx| 欧美日本国产视频| 五月天亚洲婷婷| 久久亚洲捆绑美女| 欧美一区二区福利视频| 欧美日韩在线播放| 欧美午夜精品免费| 欧美吻胸吃奶大尺度电影| 91传媒视频在线播放| 在线观看视频一区二区欧美日韩| 欧美va在线播放| 欧美一区欧美二区| 91精品国产高清一区二区三区蜜臀| 欧美日韩一级片网站| 欧美日韩情趣电影| 欧美一区二区在线视频| 欧美一级国产精品| 欧美精品一区在线观看| 国产片一区二区三区| 日韩一区在线免费观看| 亚洲男女毛片无遮挡| 亚洲一区在线视频| 日韩在线一区二区| 久久精品国产精品亚洲综合| 国产精品88888| aaa亚洲精品一二三区| 在线看日本不卡| 欧美一区二区啪啪| 国产精品综合av一区二区国产馆| 欧美经典一区二区| 久久久不卡网国产精品二区| 国产欧美精品国产国产专区| 国产精品欧美一级免费| 一区二区在线观看视频在线观看| 亚洲成人在线观看视频| 激情欧美一区二区三区在线观看| 精彩视频一区二区| 91一区二区在线观看| 678五月天丁香亚洲综合网| www精品美女久久久tv| 亚洲欧洲av色图| 日韩福利视频导航| 成人精品国产福利| 欧美婷婷六月丁香综合色| 日韩一级在线观看| 欧美国产一区在线| 视频一区视频二区在线观看| 国产精品一区二区果冻传媒| 欧美亚洲动漫另类| 欧美精品一区二区在线播放| 亚洲日本va午夜在线电影| 一区二区三区.www| 免费人成在线不卡| 成人av影视在线观看| 欧美日韩一区二区电影| 中文欧美字幕免费| 午夜电影久久久| 白白色 亚洲乱淫| 精品国产99国产精品| 亚洲综合在线观看视频| 国产精品中文字幕日韩精品 | 亚洲成人综合视频| 高清不卡一二三区| 欧美一级高清片在线观看| 国产精品国产精品国产专区不蜜| 日本一区中文字幕| 欧美性xxxxxxxx| 国产精品二三区| 国产二区国产一区在线观看| 欧美日韩精品福利| 一区二区三区毛片| av成人老司机| 日本一区二区在线不卡| 国产专区欧美精品| 日韩免费一区二区| 天天综合日日夜夜精品| 欧美在线观看一区二区| 亚洲欧洲制服丝袜| 99在线精品视频| 国产精品久久久久影院老司| 国产精品18久久久久久久久久久久 | 韩国v欧美v日本v亚洲v| 欧美一区二区三区的| 日韩高清一区在线| 欧美日韩精品一区视频| 亚洲国产cao| 555夜色666亚洲国产免| 午夜欧美在线一二页| 欧美性猛片xxxx免费看久爱|