home *** CD-ROM | disk | FTP | other *** search
- ON ESCAPE GOSUB Exit
- LEGEND " Modem diagnostic"
- ;*** TRACE ON
- ;
- ; ----- MdmDiag: Modem diagnostic routine for COM-AND.
- ;
- ; R.McG; 8/90, Chicago
- ; ----------------------------------------------------------------
- ; Usages:
- ; S0 carries the original port/speed when entered
- ; N99,N98 contain original cursor row, col
- ; ----------------------------------------------------------------
- ;
- ; Initialization..
- ;
- SAVE 0,0,"_SSIZE"-1,79 ; Save original screen
- CURSOR N99,N98
- CLEAR ; Clear screen
- COMPARMS S0 ; Get current settings
- S0 = S0(11:14) ; Make it easy
- ;
- ; Find the port to use, and take register values
- ;
- GOSUB TestPort ; Find which ports exist
- GOSUB GetPort ; Set port name we'll use (into S1)
- SET PORT S1 ; Switch to desired port
- COMBASE S1 N0 ; Get port base addr from str in s1
- GOSUB GetRegs ; Using N0, rtn N1-N7 values
- ;
- ; Display the port/base addr
- ;
- BOX 0,0,3,38 (default)
- ATSAY 1,2 (default) "Comm setting: "*"_PARM"
- STRFMT S2 "%x" N0
- ATSAY 2,2 (default) "Base address: "*S2
- COMVEC S1 N0
- ATSAY 2,25 (default) "IRQ: "*N0
- ;
- ; Display the LCR
- ;
- S1 = " Line Control Register "
- S2 = "DLB STB STP EPS PEN STB WS1 WS0"
- N8 = 40
- N9 = 0
- N0 = N1
- GOSUB DISPREG
- ;
- ; Display the LSR
- ;
- S1 = " Line Status Register "
- S2 = " TSE THE BI FE PE OE DR "
- N9 = 4
- N0 = N2
- GOSUB DISPREG
- ;
- ; Display the MCR
- ;
- S1 = " Modem Control Register "
- S2 = " LP OT2 OT1 RTS DTR"
- N9 = 8
- N0 = N3
- GOSUB DISPREG
- ;
- ; Display the MSR
- ;
- S1 = " Modem Status Register "
- S2 = "RLS RI DSR CTS DRD TER DDR DCS"
- N9 = 12
- N0 = N4
- GOSUB DISPREG
- ;
- ; Display the IIR
- ;
- S1 = " Interrupt ID Register "
- S2 = " ID2 ID1 ITP"
- N9 = 16
- N0 = N5
- GOSUB DISPREG
- ;
- ; Display the IER
- ;
- S1 = " Interrupt Enable Register "
- S2 = " ESI ELI ETI ERI"
- N9 = 20
- N0 = N6
- GOSUB DISPREG
- ;
- ; Display the IMR
- ;
- S1 = " Interrupt Mask Register "
- S2 = "IQ7 IQ6 IQ5 IQ4 IQ3 IQ2 IQ1 IQ0"
- N8 = 0
- N9 = 4
- N0 = N7
- GOSUB DISPREG
- ;
- ; Wait for a Keypress
- ;
- LEGEND " Modem Diagnostic - press any key to quit"
- KEYGET S1
- ;
- ; And we're done
- ;
- Exit:
- SET PORT S0 ; Restore original port
- DO ; There may be multiple saves outstanding
- RESTORE ; .. restore all
- UNTIL FAILURE
- LOCATE N99,N98
- EXIT
- ;
- ; ----- Display a register's value
- ; S1 passed -> Legend for Box
- ; S2 passed -> 1st line of box display (we'll draw 2nd)
- ; N0 passed -> Register value
- ; N9 passed -> Row number of top of box
- ; N8 passed -> Col number of topleft of box
- ;
- DISPREG:
- BOX N9,N8,N9+3,N8+38 (default)
- ATSAY N9+1,N8+2 (default) S2
- ATSAY N9,N8+2 (default) S1
- N10 = 128
- N11 = 1
- S3 = ""
- WHILE N10 GT 0
- IF 0 NE (N0 & N10) S3(N11:N11) = "1"
- N10 = N10/2
- N11 = N11+4
- ENDWHILE
- ATSAY N9+2,N8+2 (default) S3
- RETURN
- ;
- ; ----- Get register values
- ; N0 passed -> Base address for port
- ; N1-N7 returned: register values
- ;
- GetRegs:
- INPUT N1,N0+3 ; Line control reg
- INPUT N2,N0+5 ; Line status reg
- INPUT N3,N0+4 ; Modem control reg
- INPUT N4,N0+6 ; Modem status reg
- INPUT N5,N0+2 ; Interrupt ID reg
- INPUT N6,N0+1 ; Interrupt enable
- INPUT N7,0x21 ; Interrupt make register (8259)
- RETURN
- ;
- ; ----- Get Port name to use
- ; S0 passed default port name
- ; S1 returned: port name to be used
- ;
- GetPort:
- WOPEN 10,10,17,50 (default)
- ATSAY 10,12 (default) " Modem Diag Select "
- IF FLAG(0) ATSAY 11,12 (default) "1) Select COM1"
- IF FLAG(1) ATSAY 12,12 (default) "2) Select COM2"
- IF FLAG(2) ATSAY 13,12 (default) "3) Select COM3"
- IF FLAG(3) ATSAY 14,12 (default) "4) Select COM4"
- ATSAY 15,12 (default) "5) Use default (also c/r)"
- ATSAY 16,12 (default) "Select from above: "
- ATSAY 17,20 (default) " Press ESC to exit "
- LOCATE 16,32
- KEYGET S1
- SWITCH S1
- CASE "1"
- S1 = "COM1"
- ENDCASE
- CASE "2"
- S1 = "COM2"
- ENDCASE
- CASE "3"
- S1 = "COM3"
- ENDCASE
- CASE "4"
- S1 = "COM4"
- ENDCASE
- CASE "5" ; Default case
- S1 = S0 ; .. use it
- ENDCASE
- CASE "0D" ; Default case
- S1 = S0 ; .. use it
- ENDCASE
- DEFAULT
- SOUND 100,100
- WCLOSE ; We'll reopen above
- GOTO GetPort ; .. try again
- ENDCASE
- ENDSWITCH
- WCLOSE
- RETURN
- ;
- ; ----- Test existing ports...
- ; S0 passed is the default port
- ; FLAGS 0-3 are returned t/f according to the corresponding
- ; port's existance
- ;
- TestPort:
- SET FLAG(0) OFF
- SET FLAG(1) OFF
- SET FLAG(2) OFF
- SET FLAG(3) OFF
- SET PORT COM1
- IF "_UART" GE 0 SET FLAG(0) ON
- SET PORT COM2
- IF "_UART" GE 0 SET FLAG(1) ON
- SET PORT COM3
- IF "_UART" GE 0 SET FLAG(2) ON
- SET PORT COM4
- IF "_UART" GE 0 SET FLAG(3) ON
- SET PORT S0 ; Restore default
- RETURN
- ;
- ; ----- Subroutine: Fatal error. Open a window, and display a message
- ; S0 passes the error message(s)
- ;
- Error:
- WOPEN 10,10,12,70 (contrast) Err_Esc
- ATSAY 10,12 (contrast) " Modem Diag Error "
- ATSAY 11,12 (contrast) S0(0:55); Max msg width 55 chars
- ATSAY 12,26 (contrast) " Press any key to continue "
- ;
- ; Wait a keypress
- ;
- KEYGET S0 ; Wait for any key
- WCLOSE
- RETURN
- ;
- ; Escape during this screen
- ;
- Err_Esc:
- RETURN