Browse Source

Update ps2info.asm

- Updated PS2INFO to handle extraneous 0x00 byte after reset command.
pull/372/head v3.4.0-dev.16
Wayne Warthen 2 years ago
parent
commit
7e9191f3ef
  1. 102
      Source/Apps/Test/ps2info/ps2info.asm

102
Source/Apps/Test/ps2info/ps2info.asm

@ -195,6 +195,12 @@ test_kbd:
; ;
call ctlr_test call ctlr_test
jr nz,test_kbd_fail jr nz,test_kbd_fail
;
ld a,$20 ; kbd enabled, mse disabled, no ints
call ctlr_setup
jr nz,test_kbd_fail
;
call ctlr_flush
; ;
call test_kbd_basic call test_kbd_basic
jr nz,test_kbd_fail jr nz,test_kbd_fail
@ -242,9 +248,13 @@ test_mse:
ld a,$10 ; kbd disabled, mse enabled, no ints ld a,$10 ; kbd disabled, mse enabled, no ints
call ctlr_setup call ctlr_setup
jr nz,test_mse_fail jr nz,test_mse_fail
;
call ctlr_flush
; ;
call mse_reset call mse_reset
jr nz,test_mse_fail jr nz,test_mse_fail
;
call ctlr_flush
; ;
call mse_ident call mse_ident
jr nz,test_mse_fail jr nz,test_mse_fail
@ -276,15 +286,21 @@ test_kbdmse:
ld a,$00 ; kbd enabled, mse enabled, no ints ld a,$00 ; kbd enabled, mse enabled, no ints
call ctlr_setup call ctlr_setup
jr nz,test_kbdmse_fail jr nz,test_kbdmse_fail
;
call ctlr_flush
; ;
call kbd_reset call kbd_reset
jr nz,test_kbdmse_fail jr nz,test_kbdmse_fail
;
call ctlr_flush
; ;
ld a,2 ld a,2
call kbd_setsc call kbd_setsc
; ;
call mse_reset call mse_reset
jr nz,test_kbdmse_fail jr nz,test_kbdmse_fail
;
call ctlr_flush
; ;
call mse_stream call mse_stream
jr nz,test_kbdmse_fail jr nz,test_kbdmse_fail
@ -304,15 +320,13 @@ test_kbdmse_fail:
; inventory the supported scan code sets. ; inventory the supported scan code sets.
; ;
test_kbd_basic: test_kbd_basic:
ld a,$20 ; Xlat off for this checking
call ctlr_setup
ret nz
;
call kbd_reset call kbd_reset
ret nz ret nz
;
call ctlr_flush
; ;
call kbd_ident call kbd_ident
;ret nz
ret nz
; ;
ld b,3 ; Loop control, 3 scan code sets ld b,3 ; Loop control, 3 scan code sets
ld c,1 ; Current scan code number ld c,1 ; Current scan code number
@ -450,6 +464,19 @@ ctlr_setup:
xor a xor a
ret ret
; ;
; Flush incoming data buffer
;
ctlr_flush:
call crlf2
ld de,str_ctlr_flush
call prtstr
ctlr_flush1:
call delay ; small delay
call check_read ; data pending?
ret nz ; return if nothing there
call get_data_dbg ; get and discard byte
jr ctlr_flush1 ; loop
;
; Perform a keyboard reset ; Perform a keyboard reset
; ;
kbd_reset: kbd_reset:
@ -626,13 +653,17 @@ mse_reset:
call crlf2 call crlf2
ld de,str_mse_reset ld de,str_mse_reset
call prtstr call prtstr
ld a,$f2 ; Identify mouse command
ld a,$ff ; Identify mouse command
call put_data_mse_dbg call put_data_mse_dbg
jp c,err_ctlr_to ; handle controller error jp c,err_ctlr_to ; handle controller error
call get_data_dbg call get_data_dbg
jp c,err_ctlr_to ; handle controller error jp c,err_ctlr_to ; handle controller error
cp $fa ; Is it an ack as expected? cp $fa ; Is it an ack as expected?
jp nz,err_mse_reset jp nz,err_mse_reset
call get_data_dbg
jp c,err_ctlr_to ; handle controller error
cp $aa ; Success?
jp nz,err_mse_reset
call crlf call crlf
ld de,str_mse_reset_ok ld de,str_mse_reset_ok
call prtstr call prtstr
@ -648,18 +679,61 @@ mse_ident:
ld a,$f2 ; Identify mouse command ld a,$f2 ; Identify mouse command
call put_data_mse_dbg call put_data_mse_dbg
jp c,err_ctlr_to ; handle controller error jp c,err_ctlr_to ; handle controller error
mse_ident0:
call get_data_dbg call get_data_dbg
jp c,err_ctlr_to ; handle controller error jp c,err_ctlr_to ; handle controller error
;cp $00 ; extraneous?
;jr z,mse_ident0 ; ignore it, get another
cp $fa ; Is it an ack as expected? cp $fa ; Is it an ack as expected?
jp nz,err_mse_ident jp nz,err_mse_ident
call get_data_dbg
jp c,err_ctlr_to ; handle controller error
; Now we need to receive 0-2 bytes. There is no way to know
; how many are coming, so we receive bytes until there is a
; timeout error. Timeout is shortened here so that we don't
; have to wait seconds for the routine to complete normally.
; A short timeout is more than sufficient here.
ld ix,workbuf
ld a,(timeout) ; save current timeout
push af push af
ld a,stimout ; set a short timeout
ld (timeout),a
ld b,8 ; buf max
ld c,0 ; buf len
mse_ident1:
push bc
call get_data_dbg
pop bc
jr c,mse_ident2
ld (ix),a
inc ix
inc c
djnz mse_ident1
mse_ident2:
pop af ; restore original timeout
ld (timeout),a
call crlf call crlf
ld de,str_mse_ident_disp ld de,str_mse_ident_disp
call prtstr call prtstr
pop af
call prtdecb
ld a,'['
call prtchr
ld ix,workbuf
ld a,c ; bytes to print
or a ; check for zero
jr z,mse_ident4 ; handle zero
ld b,a ; setup loop counter
jr mse_ident3a
mse_ident3:
ld a,','
call prtchr
mse_ident3a:
ld a,(ix)
call prthex
inc ix
djnz mse_ident3
mse_ident4:
ld a,']'
call prtchr
xor a xor a
ret ret
; ;
@ -672,8 +746,13 @@ mse_stream:
ld a,$f4 ; Stream packets cmd ld a,$f4 ; Stream packets cmd
call put_data_mse_dbg call put_data_mse_dbg
jp c,err_ctlr_to ; handle controller error jp c,err_ctlr_to ; handle controller error
mse_stream0:
call get_data_dbg call get_data_dbg
jp c,err_ctlr_to ; handle controller error jp c,err_ctlr_to ; handle controller error
;cp $00 ; extraneous?
;jr z,mse_stream0 ; ignore it, get another
cp $FA ; Is it an ack as expected? cp $FA ; Is it an ack as expected?
jp nz,err_mse_stream jp nz,err_mse_stream
xor a xor a
@ -1358,7 +1437,7 @@ delay1:
; Constants ; Constants
;======================================================================= ;=======================================================================
; ;
str_banner .db "PS/2 Keyboard/Mouse Information v0.7, 19-Oct-2023",0
str_banner .db "PS/2 Keyboard/Mouse Information v0.8, 6-Nov-2023",0
str_hwmenu .db "PS/2 Controller Port Options:\r\n\r\n" str_hwmenu .db "PS/2 Controller Port Options:\r\n\r\n"
.db " 1 - Nhyodyne\r\n" .db " 1 - Nhyodyne\r\n"
.db " 2 - Rhyophyre\r\n" .db " 2 - Rhyophyre\r\n"
@ -1398,6 +1477,7 @@ str_trans_off .db "***** Testing Keyboard with Scan Code Translation DISABLED *
str_trans_on .db "***** Testing Keyboard with Scan Code Translation ENABLED *****",0 str_trans_on .db "***** Testing Keyboard with Scan Code Translation ENABLED *****",0
str_basic_mse .db "***** Basic Mouse Tests *****",0 str_basic_mse .db "***** Basic Mouse Tests *****",0
str_kbdmse .db "***** Test All Devices Combined *****",0 str_kbdmse .db "***** Test All Devices Combined *****",0
str_ctlr_flush .db "Flushing controller input buffer",0
str_kbd_reset .db "Attempting Keyboard Reset",0 str_kbd_reset .db "Attempting Keyboard Reset",0
str_kbd_reset_ok .db "Keyboard Reset OK",0 str_kbd_reset_ok .db "Keyboard Reset OK",0
str_err_kbd_reset .db "Keyboard Reset Failed",0 str_err_kbd_reset .db "Keyboard Reset Failed",0

Loading…
Cancel
Save