亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲免费观看高清| 尤物视频一区二区| 欧美一区二区三区四区视频| 欧美午夜精品免费| 欧洲色大大久久| 一本色道久久综合精品竹菊| 91论坛在线播放| 91黄色免费版| 欧美亚洲国产一区二区三区va| 91在线视频观看| 欧美亚洲国产bt| 日韩欧美久久久| 国产亚洲精品资源在线26u| 国产日韩欧美一区二区三区综合| 久久精品免视看| 最新成人av在线| 亚洲国产一区视频| 美腿丝袜在线亚洲一区| 国产一区二区日韩精品| 成人av电影观看| 在线视频国产一区| 欧美大片一区二区三区| 国产精品天美传媒| 一区二区三区加勒比av| 麻豆精品一区二区| 成人永久免费视频| 欧美午夜电影在线播放| 日韩精品中文字幕在线一区| 国产精品久久精品日日| 五月婷婷激情综合| 国产老肥熟一区二区三区| 色综合 综合色| 日韩欧美在线123| 中文字幕在线不卡视频| 日韩精品一二区| 成人av片在线观看| 欧美一区二区视频免费观看| 国产精品美女久久福利网站| 五月婷婷色综合| 懂色av中文字幕一区二区三区| 欧美天堂亚洲电影院在线播放| 精品国产亚洲在线| 伊人婷婷欧美激情| 国产一区二区不卡| 911精品产国品一二三产区| 亚洲视频中文字幕| 久久99热这里只有精品| 欧美日韩国产乱码电影| 国产精品青草久久| 国产制服丝袜一区| 91麻豆精品91久久久久同性| 亚洲欧美另类久久久精品2019| 国产乱子轮精品视频| 91精品国产一区二区| 亚洲在线观看免费视频| jlzzjlzz亚洲日本少妇| 久久伊人中文字幕| 免费观看在线色综合| 欧美精品久久一区| 国产精品沙发午睡系列990531| 经典三级在线一区| 日韩视频一区二区三区| 五月激情综合婷婷| 欧美日韩精品三区| 一区二区三区在线影院| 色94色欧美sute亚洲线路一久| 国产精品对白交换视频| 不卡的av在线| 国产精品午夜免费| 懂色一区二区三区免费观看| 国产午夜精品一区二区三区四区 | 99久久久久免费精品国产| 精品国产sm最大网站免费看| 久久精品久久99精品久久| 欧美日韩精品免费观看视频| 日日夜夜免费精品| 91精品国产一区二区三区香蕉| 日韩精品视频网| 欧美一区二区美女| 久久99最新地址| 久久在线观看免费| 高清av一区二区| 综合av第一页| 欧美午夜精品久久久| 日韩黄色小视频| 2023国产精品视频| 粉嫩欧美一区二区三区高清影视| 国产精品久久久久久亚洲伦| 91色视频在线| 首页国产丝袜综合| 久久先锋影音av| 成人激情电影免费在线观看| 亚洲精品免费视频| 欧美一区二区免费| 国产激情一区二区三区桃花岛亚洲| 国产精品视频观看| 欧美日韩在线电影| 理论片日本一区| 中文字幕av不卡| 欧美影片第一页| 激情综合网天天干| 亚洲图片激情小说| 91精品一区二区三区久久久久久| 国产在线不卡一区| 亚洲永久精品国产| 精品久久人人做人人爽| 91美女精品福利| 国产在线国偷精品产拍免费yy | 欧美疯狂性受xxxxx喷水图片| 国产一区二区影院| 亚洲最色的网站| 日韩欧美久久久| 99久精品国产| 麻豆成人91精品二区三区| 日本一区二区三区视频视频| 欧美日韩精品一区二区天天拍小说| 国产一区二区三区免费播放| 亚洲国产中文字幕| 中文乱码免费一区二区| 日韩免费福利电影在线观看| 91蜜桃视频在线| 国产一区二区三区四区五区美女 | 亚洲精品v日韩精品| 欧美va亚洲va香蕉在线| 欧美日韩一级二级| 成人av在线资源网站| 精品亚洲成a人| 亚洲成人午夜电影| 亚洲精品写真福利| 久久精品夜色噜噜亚洲aⅴ| 欧美一区二区精美| 欧美日韩视频在线第一区 | 天堂在线一区二区| 亚洲色图另类专区| 国产日韩欧美一区二区三区乱码 | 最新日韩av在线| 2023国产精华国产精品| 91.成人天堂一区| 精品视频一区二区三区免费| 99久久精品免费看国产免费软件| 精品一区二区国语对白| 美女视频黄频大全不卡视频在线播放| 亚洲va国产va欧美va观看| 伊人开心综合网| 亚洲三级在线播放| 国产精品污www在线观看| 欧美韩国日本一区| 欧美激情一区二区三区在线| 国产女主播一区| 国产欧美一区二区精品婷婷| 国产亚洲精品aa| 欧美国产视频在线| 国产精品美女久久久久高潮| 中文字幕色av一区二区三区| 亚洲图片另类小说| 亚洲精品成人a在线观看| 亚洲精品水蜜桃| 亚洲成人av福利| 蜜桃免费网站一区二区三区| 久草中文综合在线| 国产在线播精品第三| 成人在线一区二区三区| av福利精品导航| 欧美日韩一区二区三区免费看 | 久久精品网站免费观看| 中文字幕精品三区| 亚洲美女在线一区| 视频一区视频二区在线观看| 久久精品国产一区二区| 国产成人精品一区二| 99精品热视频| 欧美无砖砖区免费| 精品欧美一区二区三区精品久久| 久久久久久久国产精品影院| 国产精品电影一区二区| 亚洲一区在线观看免费 | 日韩 欧美一区二区三区| 捆绑变态av一区二区三区 | 一区二区三区蜜桃| 蜜臀av一区二区在线免费观看| 国产精品一品视频| 欧美自拍偷拍午夜视频| 欧美大片在线观看一区| 亚洲乱码中文字幕| 麻豆精品精品国产自在97香蕉| 国产成人av一区二区三区在线| 欧美性色欧美a在线播放| 精品久久久久久亚洲综合网| 亚洲丝袜美腿综合| 青青草国产成人av片免费| aa级大片欧美| 欧美va亚洲va国产综合| 亚洲精品亚洲人成人网 | 亚洲高清久久久| 国产成人亚洲精品青草天美 | 青草国产精品久久久久久| 国产精品一区二区你懂的| 在线免费观看一区| 国产精品三级视频| 麻豆精品在线观看|