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

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

?? ps2_io.asm

?? 該程序為USB HUB程序
?? ASM
字號:
;-------------------------------------------------------------------------
; For CKHub, While these routine is executed, interrupt should be disabled.
;-------------------------------------------------------------------------

;========================================================================
;   FILE: ps2_io.asm
;
;8/25/98 Added a 50 usec delay prior to sending commands. 
;Some PC's did not like it without this delay.
;
;
;========================================================================

;========================================================================
; FUNCTION: ps2_send
;
; Sends a byte 
;
;
; Returns: 
;   C= 0 if transmission was successful
;   C= 1 if not
;
;========================================================================
ps2_send:
	push	A					                ; save our data byte                    
	push	X					                ; save X register

	MOV     X, A					            ; save data byte momentarily in X               
	iord    PS2_PORT					        ; get clock/data pair
	and     A, (PS2_CONNECT+PS2_CLOCK_BIT+PS2_DATA_BIT)	; mask off other bits in port
	cmp     A, (PS2_CONNECT+PS2_CLOCK_BIT+PS2_DATA_BIT)	; if both are not high,
	jz      .l1            
	SETC
	JMP     .error      				        ; exit this routine with carry set

.l1:
	DELAY   50					                ; allow some spacing between bytes for
							                    ; some PC's.

	call    send_0					    ; clock out start bit
	jc      .error      				; if a problem, quit now
	MOV     A, 1
	MOV     [ps2_temp0], A				; keep track of parity
	MOV     A, X					    ; get back our data byte
	MOV     X, 8					    ; count 8 bits
.l2:
	asr	A					            ; shift bit to send into carry
	jc      .one					    ; if carry is zero
	call    send_0					    ; send a zero
	jc      .error      				; problem, quit now
	JMP     .next					    ;
.one:							        ; else
	call    send_1					    ; send a 1
	jc      .error      				; problem, quit now
	inc     [ps2_temp0]				    ; keep track of parity
.next:							        ;
	dec     X					        ; decrement counter
	jz      .parity					    ; if at zero do parity
	jnc     .l2					        ; if -1, exit

 .stopbit:
	call    send_1					    ; clock out stop bit  
	CLEARC
	JMP     .exit

.parity:
	MOV     A, [ps2_temp0]				; now send parity too
	JMP     .l2

.exit:
	MOV     A, [p3_shadow]
	OR      A, (PS2_CONNECT+PS2_CLOCK_BIT+PS2_DATA_BIT)	; make sure PS2 bus is left idle
	MOV     [p3_shadow], A
	iowr    PS2_PORT
	JMP     .return

.error:
	MOV     A, [p3_shadow]
	OR      A, (PS2_CONNECT+PS2_CLOCK_BIT+PS2_DATA_BIT)	; make sure PS2 bus is left idle
	MOV     [p3_shadow], A
	iowr    PS2_PORT
	SETC

.return:
	POP     X
	POP     A
	ret						;return


;========================================================================
; FUNCTION: send_0,send_1
;
; Sends bit out the ps2 port
;
;
; Returns: 
;   C= 0 if transmission was successful
;   C= 1 if not
;
;========================================================================
send_1:
	PUSH    A
	MOV     A, [p3_shadow]
	OR      A, (PS2_CONNECT+PS2_CLOCK_BIT+PS2_DATA_BIT)
	JMP     clock
send_0:
	PUSH    A
	MOV     A, [p3_shadow]
	OR      A, (PS2_CLOCK_BIT)
	and     A, ~(PS2_DATA_BIT)

clock:
	PUSH    A					; prior to sending a bit
	iord    PS2_PORT
	and     A, PS2_CLOCK_BIT	; check for clock inhibit
	POP     A					;
	jnz     .l1					; if there is an inhibit
	SETC						; quit right now
	POP     A
	ret
.l1:
	iowr    PS2_PORT				; set up register
	DELAY	5 
	AND     A, ~(PS2_CLOCK_BIT)
	iowr    PS2_PORT				; write it out
	DELAY   35					; delay as per spec
	OR      A,(PS2_CLOCK_BIT)
	iowr    PS2_PORT
	DELAY   30					; wait as per spec
	CLEARC
	POP     A
	ret

;========================================================================
; FUNCTION: getbit
;
; Receives  a bit
;
;
; Returns: 
;   C = state of bit clocked in
;
;========================================================================
getbit:
	PUSH    A					; PUSH    A
	iord    PS2_PORT		    ; host inhibit, skip this nonsense
	and     A, PS2_CLOCK_BIT
	jz      .error
	MOV     A, [p3_shadow]
	OR      A, (PS2_DATA_BIT)
	AND     A, ~(PS2_CLOCK_BIT)	; start with clock low, data high
	iowr    PS2_PORT          
	DELAY   35					; wait 35 usec
	OR      A, (PS2_CLOCK_BIT)
	iowr    PS2_PORT		    ;

IFDEF   CombiKB
	DELAY	12					; JUK
	iord    PS2_PORT			; 
	DELAY	14					; 
ELSE
	DELAY	5					; wait 5 usec 
	iord    PS2_PORT			; read the data line
	DELAY	21					; wait 25 usec
ENDIF	
								; (total time clock high should be
								; around 40 us per logitech.
								; actual clock high can be affected
								; by 1ms interrupt plus jitter
								; in this code and in  ps2_receive.
								; empirical calculation gives the minimum
								; delay time here as 25 us, which
								; still satisfies the minimum allowed
								; clock high time of 30 us. while
								; giving us an average time of around
								; 37-38 us.
	AND     A, PS2_DATA_BIT	    ; mask off all but data bit
	JZ      .low				; if data bit high,
	SETC						; set the carry
.low:                   	
	POP     A					; POP acc and rotate carry into msb
	rrc     A           	
	CLEARC						; clear carry indicating success
	ret							; return
.error:                 	
	POP     A           	
	SETC                	
	ret                 	
                        	

;========================================================================
; FUNCTION: ps2_receive
;
; Receives a byte 
;
;
; Returns: 
;   C= 0 if reception was successful
;   C= 1 if not
;
;========================================================================

ps2_receive:
	PUSH    X					; save X, we'll wipe it out

	MOV     X, 18				; do the following 18 times:
.wait:							;
	DELAY   7					; kill time for 7 us
	iord    PS2_PORT			; get port 3 data
	and     A, PS2_DATA_BIT		; make sure data bit low
	jnz     .exitearly			; out now if not
	dec     X					; wait again
	jnz     .wait				;
							    ; above loop consumes approx 180 us.

.start:
    

;	DELAY   5					; wait prior to anything
	MOV     X, 8				; count 9  bits (8 data, 1 parity)
	MOV     A, 0				; clear parity count
	MOV     [ps2_temp0], A

.l1:
	call    getbit
	jc      .inhibit				; if not inhibiting
	cmp     A, 80h					; see if msbit = 1
	jc      .next					; yup,
	inc     [ps2_temp0]				; increment parity count
.next:
	dec     X					    ; decrement counter
	jc      .done					; if at -1, done    
	jnz     .l1    
	PUSH    A					    ; else save partial result
	JMP     .l1

.inhibit:						    ; we were inhibited in
	dec     X					    ; the middle of getting stuff,
	jc      .done					; adjust stack appropriately
	PUSH    A
.done:
    
    ;arrive here with data byte on the stack and the received parity bit in the msb
    ;of the accumulator. the calculated parity bit is in the lsb of ps2_temp0.
    ;if we arrived here due to host inhibit, both parity and data byte are
    ;garbage but that's ok -- we'll abort out of this routine anyway.
	MOV     A, [ps2_temp0]			
	and     A, 1
	MOV     X, A
							        ; X should be 1 if ok

	call    getbit					; get stop bit
	jc     .error      				; if no problem getting it
	rlc     a                           
	jc     .ack					    ; if it's not a 1
	MOV     X, 0					; X= 0 indicates an error

.badstop:						    ;
	call    getbit					; keep looking for it
	jc      .error
	rlc     a
	jnc    .badstop

.ack:
							        ; arrive here with x = 0 if no errors
	call    send_0					; send a 0 to ack the transaction
	MOV     A, X
	cmp     A, 0
	jz     .error

.exit:
	MOV     A, [p3_shadow]
	OR      A, (PS2_CONNECT+PS2_CLOCK_BIT+PS2_DATA_BIT)	; make sure PS2 bus is left idle
	MOV     [p3_shadow], A
	iowr    PS2_PORT
	JMP     .return

.error:
	MOV     A, [p3_shadow]
	OR      A, (PS2_CONNECT+PS2_CLOCK_BIT+PS2_DATA_BIT)	; make sure PS2 bus is left idle
	MOV     [p3_shadow], A
	iowr    PS2_PORT
	SETC						; set carry indicating a problem
.return:
	POP     A					; POP     result into ACC  
	POP     X					; restore X
    ret

.exitearly:
	SETC
	POP     X
	ret




?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国内精品久久| 不卡的电影网站| 亚洲一区在线观看免费| 亚洲欧美在线视频| 亚洲欧洲精品天堂一级| 最新国产成人在线观看| 国产精品久久影院| 亚洲精品一二三| 亚洲已满18点击进入久久| 伊人夜夜躁av伊人久久| 亚洲www啪成人一区二区麻豆| 亚洲一区二区三区四区五区黄| 亚洲午夜成aⅴ人片| 亚洲v精品v日韩v欧美v专区| 奇米在线7777在线精品| 久久99精品一区二区三区| 国产一区二区三区在线观看免费视频 | 国产剧情一区二区| 国产成人无遮挡在线视频| 99久久精品情趣| 欧美精品国产精品| 久久亚洲一区二区三区四区| 国产精品欧美精品| 亚洲福利视频一区| 激情六月婷婷久久| 91蜜桃视频在线| 91精品婷婷国产综合久久竹菊| 26uuu国产电影一区二区| 国产亚洲自拍一区| 亚洲超碰精品一区二区| 国产做a爰片久久毛片| 91在线porny国产在线看| 欧美精品 日韩| 国产精品伦一区| 三级久久三级久久久| 成人久久视频在线观看| 欧美精品乱码久久久久久按摩 | www.激情成人| 欧美私模裸体表演在线观看| 337p日本欧洲亚洲大胆精品| 18欧美亚洲精品| 老司机精品视频线观看86| 91麻豆免费观看| 欧美tickling挠脚心丨vk| 一区二区三区四区在线播放| 色呦呦一区二区三区| 精品国产髙清在线看国产毛片| 中文字幕在线一区免费| 另类欧美日韩国产在线| 欧美色图激情小说| 国产精品视频一二三区 | 欧美一区二区三区在线观看视频| 国产日本亚洲高清| 日韩电影在线一区二区| 色婷婷av久久久久久久| 国产亚洲一区字幕| 蜜桃av一区二区三区电影| 欧洲生活片亚洲生活在线观看| 国产人久久人人人人爽| 精品亚洲成a人| 日韩丝袜美女视频| 一区二区三区精品久久久| 成人免费精品视频| 国产欧美日韩视频在线观看| 六月婷婷色综合| 日韩一区二区在线看片| 亚洲一区二区成人在线观看| 99热精品国产| 国产精品成人网| 大尺度一区二区| 欧美国产日产图区| 国产成人免费视频| 欧美激情中文字幕| 国产成人精品免费在线| 久久欧美一区二区| 国产成人欧美日韩在线电影| 久久久久亚洲蜜桃| 国产精品18久久久久久久久| 精品国产成人在线影院| 国产精品主播直播| 国产欧美一区二区精品久导航| 国产精品中文字幕一区二区三区| 精品电影一区二区| 豆国产96在线|亚洲| 亚洲国产精品传媒在线观看| 成人少妇影院yyyy| 亚洲精品久久嫩草网站秘色| 欧美午夜精品久久久久久超碰| 亚洲国产视频a| 欧美成人在线直播| 国产精品一区二区在线观看不卡| 欧美激情一区二区三区| 99国产精品久久久久久久久久| 一区二区在线观看av| 51精品视频一区二区三区| 精品一区二区免费在线观看| 欧美高清在线视频| 在线免费观看成人短视频| 日韩国产欧美视频| 国产亚洲婷婷免费| 一本高清dvd不卡在线观看 | 国产一区二区伦理| 一区二区中文视频| 555夜色666亚洲国产免| 国内精品伊人久久久久av影院 | 国产a久久麻豆| 一区二区三区成人| 欧美成人精品二区三区99精品| 国产成人免费网站| 无码av免费一区二区三区试看| 日韩免费一区二区三区在线播放| 成人污污视频在线观看| 亚洲第一福利一区| 欧美国产禁国产网站cc| 欧美日韩国产综合久久| 成人综合日日夜夜| 日本vs亚洲vs韩国一区三区| 国产精品久久久久一区| 337p亚洲精品色噜噜| aaa国产一区| 激情丁香综合五月| 午夜精品久久久久久久蜜桃app| 国产色综合久久| 555夜色666亚洲国产免| 91精品福利在线| 国产黄色91视频| 麻豆一区二区在线| 亚洲午夜一区二区| **性色生活片久久毛片| 久久久亚洲高清| 日韩视频在线观看一区二区| 欧美性色aⅴ视频一区日韩精品| 国产精品亚洲а∨天堂免在线| 日本不卡一区二区| 亚洲二区在线视频| 国产91精品入口| 久久国产精品无码网站| 午夜电影久久久| 一区二区三区加勒比av| 国产精品国产三级国产专播品爱网 | 欧美一区二区在线观看| 欧美性视频一区二区三区| 成人午夜免费av| 粉嫩绯色av一区二区在线观看| 久久国产精品99精品国产| 视频在线观看国产精品| 亚洲18色成人| 五月综合激情日本mⅴ| 亚洲影院久久精品| 亚洲亚洲人成综合网络| 亚洲午夜免费视频| 亚洲欧美日韩国产中文在线| 亚洲欧洲av色图| 国产精品成人一区二区艾草| 国产精品久线在线观看| 亚洲美女少妇撒尿| 亚洲国产欧美另类丝袜| 性做久久久久久免费观看| 性做久久久久久免费观看| 午夜免费欧美电影| 麻豆久久一区二区| 国内精品免费**视频| 国产精品一区二区你懂的| 国产成人精品1024| 99国产欧美另类久久久精品| 91香蕉视频在线| 欧美日韩一区二区三区四区| 欧美日韩国产a| 精品黑人一区二区三区久久| 精品国产青草久久久久福利| 国产欧美日韩视频一区二区 | 日韩精品视频网| 久久99久久99| 成人免费三级在线| 色婷婷国产精品| 欧美一级夜夜爽| 国产精品久久国产精麻豆99网站| 日韩毛片一二三区| 日韩av一区二区三区四区| 国产精品自在欧美一区| 色婷婷一区二区三区四区| 9191久久久久久久久久久| 国产亚洲婷婷免费| 一区二区国产盗摄色噜噜| 精品一区二区三区免费| 99久久久久久| 欧美刺激脚交jootjob| 中文字幕亚洲综合久久菠萝蜜| 亚洲成人一区二区| 国产成a人亚洲| 欧美私人免费视频| 亚洲国产成人一区二区三区| 成人av手机在线观看| 欧美日韩1区2区| 中文字幕一区二区三区视频 | 久久九九久久九九| 亚洲成人久久影院| 成人国产精品免费观看动漫| 欧美精品v国产精品v日韩精品| 国产欧美一区二区三区网站|