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

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

?? mouse.asm

?? CY7C63231 mouse 源碼
?? ASM
?? 第 1 頁 / 共 4 頁
字號:
		mov		A, (interface_alternate_table - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read


	set_interface_idle:						; SET IDLE
		mov		A, [ep0_dmabuff + WVALUEHI]				; test if new idle time 
		cmp		A, 00h						; disables idle timer
		jz		idle_timer_disable

		mov		A, [idle_timer]				; test if less than 4ms left
		cmp		A, 01h
		jz		set_idle_last_not_expired

		mov		A, [ep0_dmabuff + WVALUEHI]				; test if time left less than
		sub		A, [idle_timer]				; new idle value
		jnc		set_idle_new_timer_less

		jmp		set_idle_normal

		idle_timer_disable:
			mov		[idle], A				; disable idle timer
			jmp		set_idle_done

		set_idle_last_not_expired:
			mov		A, EVENT_PENDING		; send report immediately
			mov		[event_machine], A
			mov		A, 00h					; reset idle prescaler
			mov		[idle_prescaler], A
			mov		A, [ep0_dmabuff + WVALUEHI]			; set new idle value
			mov		[idle_timer], A
			mov		[idle], A
			jmp		set_idle_done

		set_idle_new_timer_less:			
			mov		A, 00h
			mov		[idle_prescaler], A		; reset idle prescaler
			mov		A, [ep0_dmabuff + WVALUEHI]
			mov		[idle_timer], A			; update idle time value
			mov		[idle], A
			jmp		set_idle_done

		set_idle_normal:
			mov		A, 00h					; reset idle prescaler
			mov		[idle_prescaler], A
			mov		A, [ep0_dmabuff + WVALUEHI]			; update idle time value
			mov		[idle_timer], A
			mov		[idle], A

		set_idle_done:
			mov		A, NO_CHANGE_PENDING	; respond with no-data control
			mov		[ep0_in_flag], A		; transaction
			jmp		initialize_no_data_control


	set_interface_protocol:					; SET PROTOCOL
		mov		A, [ep0_dmabuff + WVALUELO]
		mov		[protocol], A				; set protocol value
		mov		A, NO_CHANGE_PENDING
		mov		[ep0_in_flag], A			; respond with no-data control
		jmp		initialize_no_data_control	; transaction


	get_interface_report:					; GET REPORT
		mov		A, DATA_TOGGLE				; set data toggle to DATA ONE
		mov		[ep0_data_toggle], A
		mov		A, NAK_IN_OUT				; clear setup bit to write to
		iowr	ep0_mode					; endpoint fifo

		mov		A, [ep1_dmabuff0]			; copy over button data
		mov		[ep0_dmabuff0], A

		mov		A, [ep1_dmabuff1]			; copy horizontal data
		mov		[ep0_dmabuff1], A

		mov		A, [ep1_dmabuff2]			; copy vertical data
		mov		[ep0_dmabuff2], A

		mov		A, TRANS_CONTROL_READ
		mov		[ep0_transtype], A
		mov		A, CONTROL_READ_DATA		; set state machine state
		mov		[ep0_in_machine], A			
		mov		X, 03h						; set number of byte to transfer to 3
		jmp		dmabuffer_load_done			; jump to finish transfer
		
	
	get_interface_idle:						; GET IDLE
		mov		A, DATA_TOGGLE				; set data toggle to DATA ONE
		mov		[ep0_data_toggle], A
		mov		A, NAK_IN_OUT				; clear setup bit to write to
		iowr	ep0_mode					; endpoint fifo

		mov		A, [idle]					; copy over idle time
		mov		[ep0_dmabuff0], A

		mov		A, TRANS_CONTROL_READ
		mov		[ep0_transtype], A
		mov		A, CONTROL_READ_DATA		; set state machine state
		mov		[ep0_in_machine], A			
		mov		X, 01h						; set number of byte to transfer to 3
		jmp		dmabuffer_load_done			; jump to finish transfer

	
	get_interface_protocol:					; GET PROTOCOL
		mov		A, INTERFACE_PROTOCOL_LENGTH
		mov		[maximum_data_count], A		; get offset of device descriptor table
		mov		A, [protocol]
		and		A, 01h
		jz		boot_protocol
		report_protocol:
			mov		A, (interface_report_protocol - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read	; get ready to send data
		boot_protocol:
			mov		A, (interface_boot_protocol - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read	; get ready to send data


	get_interface_hid:						; GET HID REPORT DESCRIPTOR
		mov		A, [ep0_dmabuff + WVALUEHI]
		cmp		A, 22h						; test if report request
		jz		get_hid_report_desc
		cmp		A, 21h						; test if class request
		jz		get_hid_desc
		jmp		request_not_supported

		get_hid_desc:
		mov		A, 00h
		index	hid_desc_table	
		mov		[maximum_data_count], A		; get offset of device descriptor table
		mov		A, (hid_desc_table - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read		; get ready to send data

		get_hid_report_desc:
		mov		A, 07h
		index	hid_desc_table		
		mov		[maximum_data_count], A		; get offset of device descriptor table
		mov		A, (hid_report_desc_table - control_read_table)
		mov		[data_start], A
		jmp		initialize_control_read		; get ready to send data


	;;************ ENDPOINT REQUESTS ************

	clear_endpoint_feature:					; CLEAR FEATURE
		mov		A, [ep0_dmabuff + WVALUELO]
		cmp		A, ENDPOINT_STALL
		jnz		request_not_supported		
		mov		A, 00h						; clear endpoint 1 stall
		mov		[ep1_stall], A
		mov		A, NO_CHANGE_PENDING		; respond with no-data control
		mov		[ep0_in_flag], A
		jmp		initialize_no_data_control

	set_endpoint_feature:					; SET FEATURE
		mov		A, [ep0_dmabuff + WVALUELO]
		cmp		A, ENDPOINT_STALL
		jnz		request_not_supported		
		mov		A, FFh						; stall endpoint 1
		mov		[ep1_stall], A
		mov		A, NO_CHANGE_PENDING		; respond with no-data control
		mov		[ep0_in_flag], A
		jmp		initialize_no_data_control

	get_endpoint_status:					; GET STATUS
		mov		A, ENDPOINT_STALL_LENGTH
		mov		[maximum_data_count], A
		mov		A, [ep1_stall]				; test if endpoint 1 stalled
		and		A, FFh
		jnz		endpoint_stalled
		endpoint_not_stalled:				; send no-stall status
			mov		A, (endpoint_nostall_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read
		endpoint_stalled:					; send stall status
			mov		A, (endpoint_stall_table - control_read_table)
			mov		[data_start], A
			jmp		initialize_control_read
		

;;***************** CONTROL READ TRANSACTION **************

	initialize_control_read:
		mov		A, TRANS_CONTROL_READ		; set transaction type to control read
		mov		[ep0_transtype], A

		mov		A, DATA_TOGGLE				; set data toggle to DATA ONE
		mov		[ep0_data_toggle], A

		; if wLengthhi == 0
		mov		A, [ep0_dmabuff + WLENGTHHI]				; find lesser of requested and maximum
		cmp		A, 00h
		jnz		initialize_control_read_done
		; and wLengthlo < maximum_data_count
		mov		A, [ep0_dmabuff + WLENGTHLO]				; find lesser of requested and maximum
		cmp		A, [maximum_data_count]		; response lengths
		jnc		initialize_control_read_done
		; then maximum_data_count >= wLengthlo
		mov		A, [ep0_dmabuff + WLENGTHLO]
		mov		[maximum_data_count], A
		initialize_control_read_done:
			jmp		control_read_data_stage	; send first packet


;;***************** CONTROL WRITE TRANSACTION *************

	initialize_control_write:
		mov		A, TRANS_CONTROL_WRITE		; set transaction type to control write
		mov		[ep0_transtype], A

		mov		A, DATA_TOGGLE				; set accepted data toggle
		mov		[ep0_data_toggle], A
		mov		A, ACK_OUT_NAK_IN			; set mode
		iowr	ep0_mode
		pop		A
		pop		X
		reti


;;***************** NO DATA CONTROL TRANSACTION ***********

	initialize_no_data_control:
		mov		A, TRANS_NO_DATA_CONTROL	; set transaction type to no data control
		mov		[ep0_transtype], A

		mov		A, STATUS_IN_ONLY			; set SIE for STATUS IN mode
		iowr	ep0_mode
		pop		A
		pop		X
		reti


;;***************** UNSUPPORTED TRANSACTION ***************

	request_not_supported:
		iord	ep0_mode
		mov		A, STALL_IN_OUT					; send a stall to indicate that the request
		iowr	ep0_mode					; is not supported
		pop		A
		pop		X
		reti


;**********************************************************

	;**********************************
	; IN - CONTROL READ DATA STAGE
	;	 - CONTROL WRITE STATUS STAGE
	;	 - NO DATA CONTROL STATUS STAGE

	ep0_in_received:
	mov		A, [ep0_transtype]
	jacc	ep0_in_jumptable


	;**********************************

	control_read_data_stage:
		mov		X, 00h

		mov		A, [maximum_data_count]
		cmp		A, 00h						; has all been sent
		jz		dmabuffer_load_done			

		dmabuffer_load:
			mov		A, X					; check if 8 byte ep0 dma
			cmp		A, 08h					; buffer is full
			jz		dmabuffer_load_done

			mov		A, [data_start]			; read data from desc. table
			index	control_read_table
			mov		[X + ep0_dmabuff0], A

			inc		X						; increment buffer offset
			inc		[data_start]			; increment descriptor table pointer
			dec		[maximum_data_count]	; decrement number of bytes requested
			jz		dmabuffer_load_done
			jmp		dmabuffer_load			; loop to load more data
			dmabuffer_load_done:
	
		iord	ep0_count					; unlock counter register
		mov		A, X						; find number of bytes loaded
		or		A, [ep0_data_toggle]		; or data toggle
		iowr	ep0_count					; write ep0 count register

		mov		A, ACK_IN_STATUS_OUT		; set endpoint mode to ack next IN
		iowr	ep0_mode					; or STATUS OUT
			
		mov		A, DATA_TOGGLE				; toggle data toggle
		xor		[ep0_data_toggle], A

		pop		A
		pop		X
		reti


	;**********************************

	control_write_status_stage:
		mov		A, STATUS_IN_ONLY
		iowr	ep0_mode

		mov		A, TRANS_NONE
		mov		[ep0_transtype], A

		pop		A
		pop		X
		reti


	;**********************************

	no_data_control_status_stage:
		mov		A, [ep0_in_flag]		; end of no-data control transaction 
		cmp		A, ADDRESS_CHANGE_PENDING
		jnz		no_data_status_done

		change_address:
			mov		A, [pending_data]	; change the device address if this
			or		A, ADDRESS_ENABLE	; data is pending
			iowr	usb_address

		no_data_status_done:			; otherwise set to stall in/out until
			mov		A, STALL_IN_OUT		; a new setup
			iowr	ep0_mode

			mov		A, TRANS_NONE
			mov		[ep0_transtype], A

			pop		A
			pop		X
			reti


;**********************************************************

	;**********************************
	; OUT - CONTROL READ STATUS STAGE
	;	  - CONTROL WRITE DATA STAGE
	;	  - ERROR DURING NO DATA CONTROL TRANSACTION

	ep0_out_received:
	mov		A, [ep0_transtype]
	jacc	ep0_out_jumptable

	
	;**********************************

	control_read_status_stage:
		mov		A, STATUS_OUT_ONLY
		iowr	ep0_mode

		mov		A, TRANS_NONE
		mov		[ep0_transtype], A

		pop		A
		pop		X
		reti	


	;**********************************

	control_write_data_stage:
		mov		A, ep0_count					; check that data is valid
		and		A, DATA_VALID
		jz		control_write_data_stage_done

		iord	ep0_count						; check for correct data toggle
		and		A, DATA_TOGGLE
		xor		A, [ep0_data_toggle]
		jnz		control_write_data_stage_done

		; get data and transfer it to a buffer here


		mov		A, DATA_TOGGLE
		xor		[ep0_data_toggle], A

		control_write_data_stage_done:
		pop		A
		pop		X
		reti

		
	;**********************************

	no_data_control_error:	
		mov		A, STALL_IN_OUT
		iowr	ep0_mode

		mov		A, TRANS_NONE
		mov		[ep0_transtype], A

		pop		A
		pop		X
		reti

	
;*******************************************************
;
;	Interrupt handler: Endpoint1
;	Purpose: This interrupt routine handles the specially
;		 reserved data endpoint 1 (for a mouse).  This
;		 interrupt happens every time a host sends an
;		 IN on endpoint 1.  The data to send (NAK or 3
;		 byte packet) is already loaded, so this routine
;		 just prepares the dma buffers for the next packet
;
;*******************************************************

Endpoint1:
	push	A

	iord	ep1_mode						; if the interrupt was caused by
	and	A, EP_ACK							; a NAK or STALL, then just set
	jz	endpoint1_set_response				; response and return

	;**********************************
	; change data toggle
	mov		A, 80h
	xor		[ep1_data_toggle], A

	;**********************************
	; clear endpoint variables
	mov		A, 00h							; clear x,y,z cursor change values
	mov		[ep1_dmabuff1], A
	mov		[ep1_dmabuff2], A
	mov		[ep1_dmabuff3], A

	;**********************************
	; set response
	endpoint1_set_response:
	mov		A, [ep1_stall]					; if endpoint is set to stall, then set
	cmp		A, FFh							; mode to stall
	jnz		endpoint1_nak
		mov		A, STALL_IN_OUT
		iowr	ep1_mode
		jmp	endpoint1_done
	endpoint1_nak:
		mov	A, NAK_IN						; clear the ACK and STALL bits
		iowr	ep1_mode

	endpoint1_done:
		pop		A
		reti


;*******************************************************
;
;	Interrupt: Wakeup
;	Purpose:   This interrupt happens during USB suspend
;			when the microcontroller wakes up due to the
;			internal wakeup timer.  The buttons and optics
;			are then polled for any change in state.  If
;			a change occurs then a wakeup/resume signal
;			is forced on the bus by this microcontroller.
;
;*******************************************************

Wakeup:
	push	A

	;**********************************
	; reset watchdog
	iowr	watchdog

	;**********************************
	; test if remote wakeup is enabled
	mov		A, [remote_wakeup]
	cmp		A, 00h
	jz		wakeup_done


	;**********************************
	; wait for a couple wakeup times to pass
	; some hosts mess up if we drive a remote wakeup after 100ms
	mov		A, 05h
	cmp		A, [wakeup_timer]
	jz		test_buttons		
	inc		[wakeup_timer]
	jmp		wakeup_done


	;**********************************
	; test for button status change
	test_buttons:
		mov		A, 00h
		mov		[int_temp], A
	wakeup_left_button_read:
		iord	LEFT_BUTTON_PORT
		and		A, LEFT_BUTTON
		jnz		wakeup_right_button_read
			mov		A, HID_LEFT_MOUSE_BUTTON
			or		[int_temp], A
	wakeup_right_button_read:
		iord	RIGHT_BUTTON_PORT
		and		A, RIGHT_BUTTON
		jnz		wakeup_middle_button_read
			mov		A, HID_RIGHT_MOUSE_BUTTON 
			or		[int_temp], A
	wakeup_middle_button_read:
		iord	MIDDLE_BUTTON_PORT
		and		A, MIDDLE_BUTTON
		jnz		wakeup_button_read_done
			mov		A, HID_MIDDLE_MOUSE_BUTTON
			or		[int_temp], A

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
六月婷婷色综合| 久久激五月天综合精品| 欧美精品日日鲁夜夜添| 黄色小说综合网站| 伊人色综合久久天天人手人婷| 99re视频精品| 国产一区二区三区免费| 亚洲免费观看高清在线观看| 欧美乱熟臀69xxxxxx| 国产精品一区二区久久不卡| 亚洲va国产va欧美va观看| 国产日韩精品一区| 日韩一区二区三区免费观看| 91美女片黄在线观看| 国产精品18久久久久久久网站| 亚洲综合av网| 亚洲一区二区精品久久av| 国产精品伦理一区二区| 久久综合九色综合久久久精品综合| 欧美中文字幕亚洲一区二区va在线| 久久精品国产第一区二区三区| 亚洲欧美日韩国产手机在线| 久久九九影视网| 国产拍欧美日韩视频二区| 欧美va亚洲va在线观看蝴蝶网| 欧美在线|欧美| 欧美精品亚洲二区| 这里只有精品视频在线观看| 色综合久久久久网| 欧美午夜视频网站| 91精品婷婷国产综合久久竹菊| 欧美视频在线观看一区二区| 7777精品伊人久久久大香线蕉完整版 | 欧美一a一片一级一片| 色综合久久99| 4438x成人网最大色成网站| 欧美日韩aaa| 日本一区二区三区dvd视频在线 | 精品国产一二三| 久久先锋资源网| 成人免费在线播放视频| 亚洲一区二区三区视频在线播放 | 丝袜美腿一区二区三区| 久久精品av麻豆的观看方式| 不卡视频一二三| 欧美三级日韩在线| 国产三级一区二区| 五月天久久比比资源色| 国产精品一区二区三区99| 91免费国产在线| 久久欧美一区二区| 五月天丁香久久| 色狠狠av一区二区三区| 欧美激情一区二区三区| 丝袜美腿亚洲一区二区图片| 色综合欧美在线| 国产精品久久久久久久裸模| 久久精品国产亚洲5555| 欧美日韩久久久久久| 夜夜精品浪潮av一区二区三区| 国产成人精品在线看| 精品国产乱码久久久久久蜜臀| 亚洲国产欧美日韩另类综合| 成人高清免费在线播放| 高清日韩电视剧大全免费| 欧美视频精品在线观看| 韩国一区二区视频| 欧美日韩一区二区在线观看视频 | 国产精品免费久久| 久久9热精品视频| 欧美综合在线视频| 亚洲欧美电影院| 国产成人综合自拍| 亚洲你懂的在线视频| 国内成+人亚洲+欧美+综合在线| 欧美日韩电影一区| 国产乱码精品一区二区三区忘忧草| 日韩欧美一区在线| 久久成人羞羞网站| 国产亲近乱来精品视频| 国产综合色视频| 亚洲人精品一区| 欧美一区二区三区四区在线观看| 日韩激情一二三区| 精品入口麻豆88视频| 91免费观看国产| 亚洲妇熟xx妇色黄| 色综合天天综合网天天看片| 国产一区二区0| 国产精品综合一区二区| 石原莉奈在线亚洲三区| 中文字幕欧美三区| 日韩欧美电影一二三| 丁香五精品蜜臀久久久久99网站| 亚洲小说欧美激情另类| 久久久久久久久久久久电影| 色狠狠一区二区三区香蕉| 国产美女视频91| 久久99国产精品麻豆| 日韩av电影一区| 一区二区三区成人在线视频| 国产欧美在线观看一区| 日韩天堂在线观看| 日韩一区二区三区视频在线观看| 成人av电影在线| 99视频精品在线| 懂色av一区二区在线播放| 精品一区二区三区av| 精品一区二区国语对白| 久久机这里只有精品| 国精产品一区一区三区mba视频| 国产自产视频一区二区三区| 麻豆精品国产传媒mv男同 | 丁香啪啪综合成人亚洲小说| 成人一级视频在线观看| 欧美系列在线观看| 欧美体内she精视频| 91.com在线观看| 精品国产网站在线观看| 2023国产精品自拍| 国产精品成人网| 午夜视黄欧洲亚洲| 国产精品乡下勾搭老头1| 国产成人精品免费在线| 93久久精品日日躁夜夜躁欧美| 色噜噜狠狠色综合中国 | 日韩欧美在线123| 日本一区二区三区dvd视频在线| 日韩美女精品在线| 日韩在线卡一卡二| 成人黄色小视频在线观看| 欧美日韩在线精品一区二区三区激情| 欧美一区二区福利视频| 日本一区二区三区久久久久久久久不 | 亚洲精品国产无天堂网2021| 久久国产福利国产秒拍| 色综合色综合色综合色综合色综合 | 亚洲国产精品精华液网站| 国产综合久久久久久鬼色| 欧美日本一区二区在线观看| 国产欧美日韩亚州综合 | 中文字幕一区二区三区色视频| 日韩vs国产vs欧美| 日本乱人伦aⅴ精品| 亚洲天堂网中文字| av中文字幕一区| 国产精品美女久久久久av爽李琼 | 国产欧美日韩精品在线| 韩国v欧美v日本v亚洲v| 91精品国产麻豆| 久久国内精品视频| 欧美一卡2卡3卡4卡| 秋霞电影一区二区| 91麻豆精品国产自产在线| 婷婷综合五月天| 欧美一区日本一区韩国一区| 天天亚洲美女在线视频| 日韩一级片网址| 国产乱码精品1区2区3区| 久久久久97国产精华液好用吗| 亚洲精品五月天| 日韩欧美精品三级| 成人毛片在线观看| 夜夜操天天操亚洲| 日韩欧美国产综合在线一区二区三区| 青娱乐精品在线视频| 国产日韩三级在线| 欧美性videosxxxxx| 激情五月婷婷综合| 亚洲人成影院在线观看| 日韩一级完整毛片| 波多野结衣91| 激情文学综合插| 亚洲一二三四久久| 国产欧美一区二区精品性| 欧洲一区在线电影| 99久久99久久久精品齐齐| 石原莉奈在线亚洲二区| 亚洲欧美日韩在线不卡| xnxx国产精品| 精品国产免费人成在线观看| 色婷婷亚洲综合| 成人国产电影网| 国产91精品久久久久久久网曝门| 亚洲va天堂va国产va久| 国产精品午夜在线| 国产精品美女一区二区| 久久天天做天天爱综合色| 99国产精品视频免费观看| 国产成人免费av在线| 麻豆精品视频在线观看视频| 日日夜夜免费精品视频| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲天堂a在线| 依依成人综合视频| 亚洲国产日韩精品| 亚洲电影在线免费观看| 午夜成人免费视频| 国产精品亚洲第一| 一道本成人在线|