mirror of https://github.com/wwarthen/RomWBW.git
Browse Source
- Replaced kbdinfo with more comprehensive ps2info - Started process of clarifying licensingpull/283/head
19 changed files with 733 additions and 1022 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,5 +1,5 @@ |
|||||
OBJECTS = |
OBJECTS = |
||||
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest kbdinfo |
|
||||
|
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info |
||||
DEST = ../../../Binary/Apps/Test |
DEST = ../../../Binary/Apps/Test |
||||
TOOLS =../../../Tools |
TOOLS =../../../Tools |
||||
|
|
||||
|
|||||
@ -1,10 +0,0 @@ |
|||||
@echo off |
|
||||
setlocal |
|
||||
|
|
||||
set TOOLS=../../../../Tools |
|
||||
set PATH=%TOOLS%\tasm32;%PATH% |
|
||||
set TASMTABS=%TOOLS%\tasm32 |
|
||||
|
|
||||
tasm -t180 -g3 -fFF kbdinfo.asm kbdinfo.com kbdinfo.lst || exit /b |
|
||||
|
|
||||
copy /Y kbdinfo.com ..\..\..\..\Binary\Apps\Test\ || exit /b |
|
||||
@ -1,896 +0,0 @@ |
|||||
; |
|
||||
;======================================================================= |
|
||||
; Mouse Information Utility (MSEINFO) |
|
||||
;======================================================================= |
|
||||
; |
|
||||
; Simple utility that attempts to determine the status of the mouse you |
|
||||
; have attached to an 8242 keyboard controller. |
|
||||
; |
|
||||
; Based on Wayne Warthen's KBDINFO program, Thanks to his great work |
|
||||
; on RomWBW and support to the Retrobrewcomputers community at large |
|
||||
; |
|
||||
; Additional help from these websites |
|
||||
; https://isdaman.com/alsos/hardware/mouse/ps2interface.htm |
|
||||
; |
|
||||
; Second PS/2 write data port info from |
|
||||
; https://wiki.osdev.org/%228042%22_PS/2_Controller#Second_PS.2F2_Port |
|
||||
; |
|
||||
; PS/2 Mouse initialization code in C |
|
||||
; http://bos.asmhackers.net/docs/mouse/snippet_2/mouse.inc |
|
||||
; |
|
||||
;======================================================================= |
|
||||
; |
|
||||
; Mouse controller port addresses (adjust as needed) |
|
||||
; |
|
||||
iocmd .equ $E3 ; keyboard controller command port address |
|
||||
iodat .equ $E2 ; keyboard controller data port address |
|
||||
; |
|
||||
; General operational equates (should not requre adjustment) |
|
||||
; |
|
||||
stksiz .equ $40 ; Working stack size |
|
||||
; |
|
||||
timeout .equ $00 ; Controller timeout constant |
|
||||
; |
|
||||
restart .equ $0000 ; CP/M restart vector |
|
||||
bdos .equ $0005 ; BDOS invocation vector |
|
||||
; |
|
||||
;======================================================================= |
|
||||
; |
|
||||
.org $100 ; standard CP/M executable |
|
||||
; |
|
||||
; |
|
||||
; setup stack (save old value) |
|
||||
ld (stksav),sp ; save stack |
|
||||
ld sp,stack ; set new stack |
|
||||
; |
|
||||
call crlf |
|
||||
ld de,str_banner ; banner |
|
||||
call prtstr |
|
||||
; |
|
||||
call main ; do the real work |
|
||||
; |
|
||||
exit: |
|
||||
call crlf2 |
|
||||
ld de,str_exit |
|
||||
call prtstr |
|
||||
;call crlf |
|
||||
|
|
||||
; clean up and return to command processor |
|
||||
call crlf ; formatting |
|
||||
ld sp,(stksav) ; restore stack |
|
||||
jp restart ; return to CP/M via restart |
|
||||
; |
|
||||
; |
|
||||
;======================================================================= |
|
||||
; Main Program |
|
||||
;======================================================================= |
|
||||
; |
|
||||
main: |
|
||||
; |
|
||||
; Display active mouse controller port addresses |
|
||||
; |
|
||||
call crlf2 |
|
||||
ld de,str_cmdport |
|
||||
call prtstr |
|
||||
ld a,iocmd |
|
||||
call prthex |
|
||||
call crlf |
|
||||
ld de,str_dataport |
|
||||
call prtstr |
|
||||
ld a,iodat |
|
||||
call prthex |
|
||||
; |
|
||||
; Attempt self-test command on mouse controller |
|
||||
; |
|
||||
; Mouse controller should respond with an 0x55 on data port |
|
||||
; after being sent a 0xAA on the command port. |
|
||||
; |
|
||||
call crlf2 |
|
||||
ld de,str_ctrl_test |
|
||||
call prtstr |
|
||||
ld a,$aa ; self-test command |
|
||||
call put_cmd_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
call get_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $55 ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
; |
|
||||
; Send 0xA8 Mouse Enable command to 8242 controller |
|
||||
; |
|
||||
call crlf2 |
|
||||
ld de,str_enable_mouse |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$a8 ; Send Mouse Enable command to 8242 |
|
||||
call put_cmd_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for self-test status |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $AA ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $00 ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
|
|
||||
|
|
||||
; |
|
||||
; Disable translation on keyboard controller to get raw scan codes! Enable Mouse |
|
||||
; |
|
||||
; call crlf2 |
|
||||
; ld de,str_trans_off |
|
||||
; call prtstr |
|
||||
; ld a,$60 ; write to command register 0 |
|
||||
; call put_cmd_dbg |
|
||||
; jp c,err_ctlr_io ; handle controller error |
|
||||
; ld a,$00 ; xlat disabled, mouse enabled, no ints |
|
||||
; call put_cmd_dbg |
|
||||
; jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
; Attempt four reset commands on mouse controller |
|
||||
; |
|
||||
call crlf2 |
|
||||
ld de,str_mse_init |
|
||||
call prtstr |
|
||||
|
|
||||
; Reset Pass #1 |
|
||||
ld a,$ff ; Send Mouse Reset command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for self-test status |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $AA ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $00 ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
; Reset Pass #2 |
|
||||
ld a,$ff ; Send Mouse Reset command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for self-test status |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $AA ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $00 ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
; Reset Pass #3 |
|
||||
ld a,$ff ; Send Mouse Reset command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for self-test status |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $AA ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $00 ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
; Reset Pass #4 |
|
||||
ld a,$ff ; Send Mouse Reset command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for self-test status |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $AA ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $00 ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
; Begin setting mouse parameters, Request Microsoft Scrolling Mouse Mode |
|
||||
|
|
||||
ld a,$f3 ; Send Set Sample Rate command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$c8 ; Send Decimal 200 command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$f3 ; Send Set Sample Rate command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$64 ; Send Decimal 100 command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$f3 ; Send Set Sample Rate command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$50 ; Send Decimal 80 command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$f2 ; Send Read Device Type command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $03 ; detect MS Intellimouse/Microsoft Scrolling Mouse |
|
||||
jp z,Intellimouse |
|
||||
cp $00 ; expected value? ($00 if Regular PS/2 Mouse) |
|
||||
jp z,ReadMouseID |
|
||||
Intellimouse: |
|
||||
call crlf |
|
||||
ld de,str_intellimouse_ok |
|
||||
call prtstr |
|
||||
ReadMouseID: |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
ld a,$f3 ; Send Set Sample Rate command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$0a ; Send Decimal 10 command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$f2 ; Send Read Device Type command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $03 ; detect MS Intellimouse/Microsoft Scrolling Mouse |
|
||||
jp z,Intellimouse2 |
|
||||
cp $00 ; expected value? ($00 if Regular PS/2 Mouse) |
|
||||
jp z,ReadMouseID2 |
|
||||
Intellimouse2: |
|
||||
call crlf |
|
||||
ld de,str_intellimouse_ok |
|
||||
call prtstr |
|
||||
ReadMouseID2: |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
|
|
||||
ld a,$e8 ; Send Set Resolution command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$03 ; Send 8 Counts/mm command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$e6 ; Send Set Scaling 1:1 command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$f3 ; Send Set Sample Rate command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$28 ; Send Decimal 40 command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
ld a,$f4 ; Send Enable command |
|
||||
call put_data_dbg |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Acknowledge |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
cp $fa ; expected value? |
|
||||
jp nz,err_ctlr_test ; handle self-test error |
|
||||
call crlf |
|
||||
ld de,str_ctrl_test_ok |
|
||||
call prtstr |
|
||||
|
|
||||
; Initialization Complete |
|
||||
|
|
||||
ReadMousePackets: |
|
||||
|
|
||||
; call check_read |
|
||||
; jp nz, ReadMousePackets |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for self-test status |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
call crlf |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
call crlf |
|
||||
|
|
||||
call get_data_dbg ; Read Mouse for Mouse ID |
|
||||
jp c,err_ctlr_io ; handle controller error |
|
||||
call crlf |
|
||||
|
|
||||
call crlf |
|
||||
|
|
||||
jp ReadMousePackets |
|
||||
|
|
||||
; |
|
||||
done: |
|
||||
ret |
|
||||
|
|
||||
; |
|
||||
;======================================================================= |
|
||||
; Mouse Controller I/O Routines |
|
||||
;======================================================================= |
|
||||
; |
|
||||
wait_write: |
|
||||
; |
|
||||
; Wait for mouse controller to be ready for a write |
|
||||
; A=0 indicates success (ZF set) |
|
||||
; |
|
||||
ld b,timeout ; setup timeout constant |
|
||||
wait_write1: |
|
||||
in a,(iocmd) ; get status |
|
||||
ld c,a ; save status |
|
||||
and $02 ; isolate input buf status bit |
|
||||
ret z ; 0 means ready, all done |
|
||||
call delay ; wait a bit |
|
||||
djnz wait_write1 ; loop until counter exhausted |
|
||||
ld de,str_timeout_write ; write timeout message |
|
||||
call crlf |
|
||||
call prtstr |
|
||||
ld a,c ; recover last status value |
|
||||
call prthex |
|
||||
or $ff ; signal error |
|
||||
ret |
|
||||
; |
|
||||
wait_read: |
|
||||
; |
|
||||
; Wait for mouse controller to be ready to read a byte |
|
||||
; A=0 indicates success (ZF set) |
|
||||
; |
|
||||
ld b,timeout ; setup timeout constant |
|
||||
wait_read1: |
|
||||
in a,(iocmd) ; get status |
|
||||
ld c,a ; save status |
|
||||
and $01 ; isolate input buf status bit |
|
||||
xor $01 ; invert so 0 means ready |
|
||||
ret z ; if 0, all done |
|
||||
call delay ; wait a bit |
|
||||
djnz wait_read1 ; loop until counter exhausted |
|
||||
ld de,str_timeout_read ; write timeout message |
|
||||
call crlf |
|
||||
call prtstr |
|
||||
ld a,c ; recover last status value |
|
||||
call prthex |
|
||||
or $ff ; signal error |
|
||||
ret |
|
||||
; |
|
||||
check_read: |
|
||||
; |
|
||||
; Check for data ready to read |
|
||||
; A=0 indicates data available (ZF set) |
|
||||
; |
|
||||
in a,(iocmd) ; get status |
|
||||
and $01 ; isolate input buf status bit |
|
||||
xor $01 ; invert so 0 means ready |
|
||||
ret |
|
||||
; |
|
||||
put_cmd: |
|
||||
; |
|
||||
; Put a cmd byte from A to the mouse interface with timeout |
|
||||
; CF set indicates timeout error |
|
||||
; |
|
||||
ld e,a ; save incoming value |
|
||||
call wait_write ; wait for controller ready |
|
||||
jr z,put_cmd1 ; if ready, move on |
|
||||
scf ; else, signal timeout error |
|
||||
ret ; and bail out |
|
||||
put_cmd1: |
|
||||
ld a,e ; recover value to write |
|
||||
out (iocmd),a ; write it |
|
||||
or a ; clear CF for success |
|
||||
ret |
|
||||
; |
|
||||
put_cmd_dbg: |
|
||||
call put_cmd |
|
||||
ret c |
|
||||
push af |
|
||||
call crlf |
|
||||
ld de,str_put_cmd |
|
||||
call prtstr |
|
||||
call prthex |
|
||||
pop af |
|
||||
ret |
|
||||
; |
|
||||
put_data: |
|
||||
; |
|
||||
; Put a data byte from A to the mouse interface with timeout |
|
||||
; CF set indicates timeout error |
|
||||
; |
|
||||
; note: direct data to second PS/2 port, send $d4 to 8242 command register |
|
||||
; different than keyboard which uses first PS/2 port |
|
||||
|
|
||||
push af ; save contents of a |
|
||||
ld e,a ; save incoming value |
|
||||
call wait_write ; wait for controller ready |
|
||||
jr z,put_data0 ; if ready, move on |
|
||||
scf ; else, signal timeout error |
|
||||
ret ; and bail out |
|
||||
put_data0: |
|
||||
ld a,$d4 ; direct to second PS/2 port for mouse |
|
||||
out (iocmd),a ; send second port command to 8242 |
|
||||
pop af |
|
||||
|
|
||||
; rest of put_data is the same as for PS/2 keyboard |
|
||||
|
|
||||
ld e,a ; save incoming value |
|
||||
call wait_write ; wait for controller ready |
|
||||
jr z,put_data1 ; if ready, move on |
|
||||
scf ; else, signal timeout error |
|
||||
ret ; and bail out |
|
||||
put_data1: |
|
||||
ld a,e ; recover value to write |
|
||||
out (iodat),a ; write it |
|
||||
or a ; clear CF for success |
|
||||
ret |
|
||||
; |
|
||||
put_data_dbg: |
|
||||
call put_data |
|
||||
ret c |
|
||||
push af |
|
||||
call crlf |
|
||||
ld de,str_put_data |
|
||||
call prtstr |
|
||||
call prthex |
|
||||
pop af |
|
||||
ret |
|
||||
|
|
||||
; |
|
||||
; Get a data byte from the mouse interface to A with timeout |
|
||||
; CF set indicates timeout error |
|
||||
; |
|
||||
get_data: |
|
||||
; |
|
||||
call wait_read ; wait for byte to be ready |
|
||||
jr z,get_data1 ; if ready, move on |
|
||||
scf ; else signal timeout error |
|
||||
ret ; and bail out |
|
||||
get_data1: |
|
||||
in a,(iodat) ; get data byte |
|
||||
or a ; clear CF for success |
|
||||
ret |
|
||||
; |
|
||||
get_data_dbg: |
|
||||
call get_data |
|
||||
ret c |
|
||||
push af |
|
||||
call crlf |
|
||||
ld de,str_get_data |
|
||||
call prtstr |
|
||||
call prthex |
|
||||
pop af |
|
||||
ret |
|
||||
; |
|
||||
; Error Handlers |
|
||||
; |
|
||||
err_ctlr_io: |
|
||||
ld de,str_err_ctrl_io |
|
||||
jr err_ret |
|
||||
; |
|
||||
err_ctlr_test: |
|
||||
ld de,str_err_ctrl_test |
|
||||
jr err_ret |
|
||||
; |
|
||||
err_mse_reset: |
|
||||
ld de,str_err_mse_reset |
|
||||
jr err_ret |
|
||||
; |
|
||||
err_ret: |
|
||||
call crlf2 |
|
||||
call prtstr |
|
||||
or $ff ; signal error |
|
||||
ret |
|
||||
; |
|
||||
;======================================================================= |
|
||||
; Utility Routines |
|
||||
;======================================================================= |
|
||||
; |
|
||||
; |
|
||||
; Print character in A without destroying any registers |
|
||||
; |
|
||||
prtchr: |
|
||||
push bc ; save registers |
|
||||
push de |
|
||||
push hl |
|
||||
ld e,a ; character to print in E |
|
||||
ld c,$02 ; BDOS function to output a character |
|
||||
call bdos ; do it |
|
||||
pop hl ; restore registers |
|
||||
pop de |
|
||||
pop bc |
|
||||
ret |
|
||||
; |
|
||||
prtdot: |
|
||||
; |
|
||||
; shortcut to print a dot preserving all regs |
|
||||
push af ; save af |
|
||||
ld a,'.' ; load dot char |
|
||||
call prtchr ; print it |
|
||||
pop af ; restore af |
|
||||
ret ; done |
|
||||
; |
|
||||
; Print a zero terminated string at (de) without destroying any registers |
|
||||
; |
|
||||
prtstr: |
|
||||
push af |
|
||||
push de |
|
||||
; |
|
||||
prtstr1: |
|
||||
ld a,(de) ; get next char |
|
||||
or a |
|
||||
jr z,prtstr2 |
|
||||
call prtchr |
|
||||
inc de |
|
||||
jr prtstr1 |
|
||||
; |
|
||||
prtstr2: |
|
||||
pop de ; restore registers |
|
||||
pop af |
|
||||
ret |
|
||||
; |
|
||||
; Print the value in A in hex without destroying any registers |
|
||||
; |
|
||||
prthex: |
|
||||
push af ; save AF |
|
||||
push de ; save DE |
|
||||
call hexascii ; convert value in A to hex chars in DE |
|
||||
ld a,d ; get the high order hex char |
|
||||
call prtchr ; print it |
|
||||
ld a,e ; get the low order hex char |
|
||||
call prtchr ; print it |
|
||||
pop de ; restore DE |
|
||||
pop af ; restore AF |
|
||||
ret ; done |
|
||||
; |
|
||||
; print the hex word value in hl |
|
||||
; |
|
||||
prthexword: |
|
||||
push af |
|
||||
ld a,h |
|
||||
call prthex |
|
||||
ld a,l |
|
||||
call prthex |
|
||||
pop af |
|
||||
ret |
|
||||
; |
|
||||
; print the hex dword value in de:hl |
|
||||
; |
|
||||
prthex32: |
|
||||
push bc |
|
||||
push de |
|
||||
pop bc |
|
||||
call prthexword |
|
||||
push hl |
|
||||
pop bc |
|
||||
call prthexword |
|
||||
pop bc |
|
||||
ret |
|
||||
; |
|
||||
; Convert binary value in A to ascii hex characters in DE |
|
||||
; |
|
||||
hexascii: |
|
||||
ld d,a ; save A in D |
|
||||
call hexconv ; convert low nibble of A to hex |
|
||||
ld e,a ; save it in E |
|
||||
ld a,d ; get original value back |
|
||||
rlca ; rotate high order nibble to low bits |
|
||||
rlca |
|
||||
rlca |
|
||||
rlca |
|
||||
call hexconv ; convert nibble |
|
||||
ld d,a ; save it in D |
|
||||
ret ; done |
|
||||
; |
|
||||
; Convert low nibble of A to ascii hex |
|
||||
; |
|
||||
hexconv: |
|
||||
and $0F ; low nibble only |
|
||||
add a,$90 |
|
||||
daa |
|
||||
adc a,$40 |
|
||||
daa |
|
||||
ret |
|
||||
; |
|
||||
; Print value of A or HL in decimal with leading zero suppression |
|
||||
; Use prtdecb for A or prtdecw for HL |
|
||||
; |
|
||||
prtdecb: |
|
||||
push hl |
|
||||
ld h,0 |
|
||||
ld l,a |
|
||||
call prtdecw ; print it |
|
||||
pop hl |
|
||||
ret |
|
||||
; |
|
||||
prtdecw: |
|
||||
push af |
|
||||
push bc |
|
||||
push de |
|
||||
push hl |
|
||||
call prtdec0 |
|
||||
pop hl |
|
||||
pop de |
|
||||
pop bc |
|
||||
pop af |
|
||||
ret |
|
||||
; |
|
||||
prtdec0: |
|
||||
ld e,'0' |
|
||||
ld bc,-10000 |
|
||||
call prtdec1 |
|
||||
ld bc,-1000 |
|
||||
call prtdec1 |
|
||||
ld bc,-100 |
|
||||
call prtdec1 |
|
||||
ld c,-10 |
|
||||
call prtdec1 |
|
||||
ld e,0 |
|
||||
ld c,-1 |
|
||||
prtdec1: |
|
||||
ld a,'0' - 1 |
|
||||
prtdec2: |
|
||||
inc a |
|
||||
add hl,bc |
|
||||
jr c,prtdec2 |
|
||||
sbc hl,bc |
|
||||
cp e |
|
||||
ret z |
|
||||
ld e,0 |
|
||||
call prtchr |
|
||||
ret |
|
||||
; |
|
||||
; Start a new line |
|
||||
; |
|
||||
crlf2: |
|
||||
call crlf ; two of them |
|
||||
crlf: |
|
||||
push af ; preserve AF |
|
||||
ld a,13 ; <CR> |
|
||||
call prtchr ; print it |
|
||||
ld a,10 ; <LF> |
|
||||
call prtchr ; print it |
|
||||
pop af ; restore AF |
|
||||
ret |
|
||||
; |
|
||||
; Brief delay |
|
||||
; |
|
||||
delay: |
|
||||
push bc |
|
||||
ld b,0 |
|
||||
delay1: |
|
||||
ex (sp),hl |
|
||||
ex (sp),hl |
|
||||
ex (sp),hl |
|
||||
ex (sp),hl |
|
||||
ex (sp),hl |
|
||||
ex (sp),hl |
|
||||
ex (sp),hl |
|
||||
ex (sp),hl |
|
||||
djnz delay1 |
|
||||
pop bc |
|
||||
ret |
|
||||
; |
|
||||
;======================================================================= |
|
||||
; Constants |
|
||||
;======================================================================= |
|
||||
; |
|
||||
str_banner .db "Mouse Information, v0.1",0 |
|
||||
str_exit .db "Done, Thank you for using MSEINFO!",0 |
|
||||
str_cmdport .db "Mouse Controller Command Port: 0x",0 |
|
||||
str_dataport .db "Mouse Controller Data Port: 0x",0 |
|
||||
str_timeout_write .db "Mouse Controller Write Timeout, Status: 0x",0 |
|
||||
str_timeout_read .db "Mouse Controller Read Timeout, Status: 0x",0 |
|
||||
str_err_ctrl_io .db "Mouse Controller I/O Failure",0 |
|
||||
str_err_ctrl_test .db "Mouse Controller Self-Test Failed",0 |
|
||||
str_put_cmd .db "Sent Command 0x",0 |
|
||||
str_put_data .db "Sent Data 0x",0 |
|
||||
str_get_data .db "Got Data 0x",0 |
|
||||
str_ctrl_test .db "Attempting Controller Self-Test",0 |
|
||||
str_mse_init .db "Attempting Mouse Initialization",0 |
|
||||
str_enable_mouse .db "Enabling Mouse in 8242 Controller",0 |
|
||||
str_ctrl_test_ok .db "Controller Self-Test OK",0 |
|
||||
str_intellimouse_ok .db "MS Intellimouse OK",0 |
|
||||
str_trans_off .db "Disabling Controller Translation",0 |
|
||||
str_mse_reset .db "Attempting Mouse Reset",0 |
|
||||
str_mse_reset_ok .db "Mouse Reset OK",0 |
|
||||
str_err_mse_reset .db "Mouse Reset Failed",0 |
|
||||
; |
|
||||
;======================================================================= |
|
||||
; Working data |
|
||||
;======================================================================= |
|
||||
; |
|
||||
stksav .dw 0 ; stack pointer saved at start |
|
||||
.fill stksiz,0 ; stack |
|
||||
stack .equ $ ; stack top |
|
||||
; |
|
||||
workbuf .fill 8 |
|
||||
workbuf_len .db 0 |
|
||||
; |
|
||||
;======================================================================= |
|
||||
; |
|
||||
.end |
|
||||
|
|
||||
@ -0,0 +1,10 @@ |
|||||
|
@echo off |
||||
|
setlocal |
||||
|
|
||||
|
set TOOLS=../../../../Tools |
||||
|
set PATH=%TOOLS%\tasm32;%PATH% |
||||
|
set TASMTABS=%TOOLS%\tasm32 |
||||
|
|
||||
|
tasm -t180 -g3 -fFF ps2info.asm ps2info.com ps2info.lst || exit /b |
||||
|
|
||||
|
copy /Y ps2info.com ..\..\..\..\Binary\Apps\Test\ || exit /b |
||||
@ -1,4 +1,4 @@ |
|||||
OBJECTS = kbdinfo.com |
|
||||
|
OBJECTS = ps2info.com |
||||
DEST = ../../../../Binary/Apps/Test |
DEST = ../../../../Binary/Apps/Test |
||||
TOOLS =../../../../Tools |
TOOLS =../../../../Tools |
||||
|
|
||||
Binary file not shown.
Loading…
Reference in new issue