Home » Archimedes archive » Acorn User » AU 1995-12 B.adf » Regulars » Comms/!SerTest/!RunImage

Comms/!SerTest/!RunImage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1995-12 B.adf » Regulars
Filename: Comms/!SerTest/!RunImage
Read OK:
File size: 1B56 bytes
Load address: 0000
Exec address: 0000
File contents
   10*|
   20*| Serial test application
   30*|
   40*| (c)1995 Hugo Fiennes of The Serial Port
   50*| v1.00 21/7/95
   60*|
   70
   80DIM driver 4096
   90DRIVER_PUTBYTE       =0
  100DRIVER_GETBYTE       =1
  110DRIVER_PUTBLOCK      =2
  120DRIVER_GETBLOCK      =3
  130DRIVER_CHECKTX       =4
  140DRIVER_CHECKRX       =5
  150DRIVER_FLUSHTX       =6
  160DRIVER_FLUSHRX       =7
  170DRIVER_CONTROLLINES  =8
  180DRIVER_MODEMCONTROL  =9
  190DRIVER_RXERRORS      =10
  200DRIVER_BREAK         =11
  210DRIVER_EXAMINE       =12
  220DRIVER_TXSPEED       =13
  230DRIVER_RXSPEED       =14
  240DRIVER_WORDFORMAT    =15
  250DRIVER_FLOWCONTROL   =16
  260DRIVER_INITIALISE    =17
  270DRIVER_CLOSEDOWN     =18
  280DRIVER_POLL          =19
  290
  300fifo%=FALSE
  310newhardware%=FALSE
  320pccable%=TRUE
  330
  340*| Startup
  350PRINT"The Serial Port: Serial tester"'"------------------------------"''
  360PRINT"Please ensure modem is powered up and connected to machine,"'"then press any key."''
  370A%=GET
  380
  390*| First, check what type of machine we're on
  400PRINT"Stage 1: Identifying OS/UART type"
  410SYS &20058,2 TO ,F%;V%
  420IF (V%AND1)<>0 THEN
  430  PRINT"         RISCOS 2 / 6551 UART"
  440ELSE
  450  IF F%=0 THEN
  460    PRINT"         RISCOS 3 / 6551 UART"
  470  ELSE
  480    newhardware%=TRUE
  490
  500    *| Check for FIFO
  510    SYS &20058,3 TO ,F%
  520
  530    IF (F%AND&F000)<>0 THEN
  540      PRINT"         RISCOS 3 / 16550 UART"
  550      fifo%=TRUE
  560    ELSE
  570      PRINT"         RISCOS 3 / 16450 UART"
  580    ENDIF
  590  ENDIF
  600ENDIF
  610
  620PRINT'"Stage 2: Checking cable type"
  630*| Depending on UART type, load correct driver
  640IF newhardware% THEN
  650  *| Load PC cable driver
  660  PROCloaddriver("InternalPC")
  670
  680  *| Look for CTS/DCD that wobble with DTR
  690  J%=FNd(DRIVER_CONTROLLINES,0,3,0)
  700  J%=FNd(DRIVER_MODEMCONTROL,0,0,0)
  710  IF (J%AND%1001)=%1001 THEN
  720    J%=FNd(DRIVER_CONTROLLINES,0,0,0)
  730    J%=FNd(DRIVER_MODEMCONTROL,0,0,0)
  740    IF (J%AND%1001)=0 THEN
  750      PRINT"         Acorn-style cable"
  760      pccable%=FALSE
  770    ENDIF
  780  ENDIF
  790  IF pccable% THEN PRINT"         PC-style cable"
  800ELSE
  810  *| We need an acorn cable here!
  820  pccable%=FALSE
  830
  840  *| Load PC cable driver to check this...
  850  PROCloaddriver("InternalPC")
  860
  870  *| Check DCD/CTS
  880  J%=FNd(DRIVER_CONTROLLINES,0,3,0)
  890  J%=FNd(DRIVER_MODEMCONTROL,0,0,0)
  900  IF (J%AND%1001)<>%1001 THEN
  910    PRINT"         Acorn-style cable required, but:"
  920    IF (J%AND%1000)=0 THEN PRINT"         Wiring fault: DCD (pin 1) is not high"
  930    IF (J%AND%0001)=0 THEN PRINT"         Wiring fault: CTS (pin 8) is not high"
  940    PRINT'"         Due to a bug in the silicon of most 6551's,"
  950    PRINT"         data cannot be transmitted if DCD is is not"
  960    PRINT"         high - hence on Acorn cables it is tied high"
  970    PRINT"         and RI is used as a substitute DCD. CTS can"
  980    PRINT"         also malfunction, hence DSR is used instead,"
  990    PRINT"         and CTS is wired high."'
 1000
 1010    IF (J%AND%1001)=%0001 THEN
 1020      PRINT"         It looks like you're using a PC cable, you"
 1030      PRINT"         need one wired the Acorn way."
 1040    ENDIF
 1050
 1060    PROCpause(50)
 1070  ELSE
 1080    PRINT"         Acorn-style cable"
 1090  ENDIF
 1100ENDIF
 1110
 1120PRINT'"         Configure system for a ";
 1130IF pccable% THEN PRINT"PC cable (InternalPC)" ELSE PRINT"Acorn cable (Internal)"
 1140
 1150*| Load correct driver for more tests
 1160IF pccable% PROCloaddriver("InternalPC") ELSE PROCloaddriver("Internal")
 1170
 1180PROCpause(10)
 1190
 1200PRINT'"Stage 3: Checking modem prescence"
 1210contact%=FALSE
 1220J%=FNd(DRIVER_TXSPEED,0,1200,0)
 1230J%=FNd(DRIVER_RXSPEED,0,1200,0)
 1240J%=FNd(DRIVER_WORDFORMAT,0,0,0)
 1250J%=FNd(DRIVER_FLUSHRX,0,0,0)
 1260J%=FNd(DRIVER_FLUSHTX,0,0,0)
 1270PROCsend("ATZ"+CHR$13)
 1280IF FNexpect("OK",3) THEN
 1290  PRINT"         Modem responded to an ATZ"
 1300  contact%=TRUE
 1310ELSE
 1320  PRINT"         No response from ATZ, trying AT&F...";
 1330  PROCsend("AT&F"+CHR$13)
 1340  IF FNexpect("OK",5) THEN
 1350    PRINT"OK"
 1360    contact%=TRUE
 1370  ELSE
 1380    PRINT"no luck."
 1390  ENDIF
 1400ENDIF
 1410
 1420IF contact%=FALSE THEN
 1430  PRINT'"Can't continue with test, modem connect failed."
 1440  END
 1450ENDIF
 1460
 1470PROCpause(10)
 1480
 1490PRINT'"Stage 4: Checking DCD line function"
 1500PROCsend("AT&C0"+CHR$13)
 1510PROCpause(5)
 1520IF FNexpect("OK",3) THEN
 1530  PRINT"         Modem accepted AT&C0 command..."
 1540  J%=FNd(DRIVER_MODEMCONTROL,0,0,0)
 1550  IF (J%AND%1000)=0 THEN
 1560    PRINT "         ERROR! DCD should be active, but isn't"
 1570    IF pccable% THEN
 1580      PRINT"         Check cabling (9w:pin 1 to 25w:pin 8)"
 1590    ELSE
 1600      PRINT"         Check cabling (9w:pin 9 to 25w:pin 8)"
 1610    ENDIF
 1620  ELSE
 1630    PRINT"         Good: DCD reading active."
 1640  ENDIF
 1650ELSE
 1660  PRINT"         ERROR! Modem didn't accept AT&C0 command"
 1670ENDIF
 1680
 1690PROCpause(5)
 1700
 1710PROCsend("AT&C1"+CHR$13)
 1720PROCpause(5)
 1730IF FNexpect("OK",3) THEN
 1740  PRINT"         Modem accepted AT&C1 command..."
 1750  J%=FNd(DRIVER_MODEMCONTROL,0,0,0)
 1760  IF (J%AND%1000)<>0 THEN
 1770    PRINT "         ERROR! DCD should be inactive, but isn't"
 1780    IF pccable% THEN
 1790      PRINT"         Check cabling (9w:pin 1 to 25w:pin 8)"
 1800    ELSE
 1810      PRINT"         Check cabling (9w:pin 9 to 25w:pin 8)"
 1820    ENDIF
 1830  ELSE
 1840    PRINT"         Good: DCD reading inactive."
 1850  ENDIF
 1860ELSE
 1870  PRINT"         ERROR! Modem didn't accept AT&C1 command"
 1880ENDIF
 1890
 1900PRINT'"Stage 5: Checking modem maximum DTE rate"
 1910LS%=1200
 1920REPEAT
 1930  READ S%
 1940  IF (S%<=19200 OR newhardware%=TRUE) AND S%<>0 THEN
 1950    PRINT"         Trying ";S%;"bps...";
 1960    J%=FNd(DRIVER_TXSPEED,0,S%,0)
 1970    J%=FNd(DRIVER_RXSPEED,0,S%,0)
 1980    PROCpause(3)
 1990    PROCsend("AT"+CHR$13)
 2000    IF FNexpect("OK",3) THEN
 2010      PRINT"Yes":LS%=S%
 2020    ELSE
 2030      PRINT"No"
 2040    ENDIF
 2050  ENDIF
 2060UNTILS%=0
 2070PRINT'"         Maximum DTE speed: ";LS%;"bps. For best performance,"
 2080PRINT"         set your dial store entries to this rate."
 2090
 2100IF LS%>57600 AND fifo%=FALSE THEN
 2110  PRINT"         Although your machine can be set to this rate,"
 2120  PRINT"         it does not have a FIFO like the RiscPC/A7000,"
 2130  PRINT"         and so you may have to drop the speed to 57600"
 2140  PRINT"         if you get transfer errors."
 2150ENDIF
 2160
 2170J%=FNd(DRIVER_TXSPEED,0,LS%,0)
 2180J%=FNd(DRIVER_RXSPEED,0,LS%,0)
 2190
 2200PRINT'"Stage 6: Terminal mode - you can type commands to the"
 2210PRINT"         modem here if you wish, or press Escape to exit"
 2220PRINT'"--- CONNECTED TO MODEM ---"'
 2230REPEAT
 2240  J%=FNd(DRIVER_POLL,0,0,0)
 2250  IF FNd(DRIVER_CHECKRX,0,0,0)>0 THEN
 2260    J%=FNd(DRIVER_GETBYTE,0,0,0)
 2270    IF J%>31 OR J%=10 OR J%=13 VDU J%
 2280  ENDIF
 2290  IF ADVAL(-1)>0 THEN
 2300    J%=FNd(DRIVER_PUTBYTE,0,GET,0)
 2310  ENDIF
 2320UNTIL 0
 2330
 2340
 2350END
 2360
 2370DATA 1200,2400,9600,19200,38400,57600,115200,0
 2380
 2390DEFPROCloaddriver(d$)
 2400  OSCLI("Load <SerTest$Dir>."+d$+" "+STR$~driver)
 2410  J%=FNd(DRIVER_INITIALISE,0,0,0)
 2420  IF J%<>0 THEN
 2430    err$=""
 2440    REPEAT
 2450      err$+=CHR$?J%
 2460      J%+=1
 2470    UNTIL ?J%=0
 2480    PRINT "Error when initialising driver: ";err$
 2490    END
 2500  ENDIF
 2510ENDPROC
 2520
 2530DEFPROCsend(d$)
 2540  FOR A%=1 TO LENd$
 2550    J%=FNd(DRIVER_PUTBYTE,0,ASCMID$(d$,A%,1),0)
 2560  NEXT
 2570ENDPROC
 2580
 2590DEFFNexpect(d$,T%)
 2600LOCAL M%,D%
 2610  M%=1
 2620  D%=FALSE
 2630  T%=((T%*100)+TIME)
 2640  REPEAT
 2650    J%=FNd(DRIVER_GETBYTE,0,0,0)
 2660    IF J%<>-1 THEN
 2670      IF J%=ASCMID$(d$,M%,1) THEN
 2680        M%+=1
 2690        IF M%>LENd$ THEN D%=TRUE
 2700      ELSE
 2710        IF J%=ASCLEFT$(d$,1) THEN M%=2 ELSE M%=1
 2720      ENDIF
 2730    ENDIF
 2740  UNTIL D% OR TIME>T%
 2750:=D%
 2760
 2770DEFPROCpause(T%)
 2780  T%=(T%*10)+TIME
 2790  REPEATUNTILTIME>T%
 2800ENDPROC
 2810
 2820END
 2830
 2840DEFFNd(A%,B%,C%,D%)
 2850:=USR(driver)
*|
*| Serial test application
*|
(.*| (c)1995 Hugo Fiennes of The Serial Port
2*| v1.00 21/7/95
<*|
F
P� driver 4096
ZDRIVER_PUTBYTE       =0
dDRIVER_GETBYTE       =1
nDRIVER_PUTBLOCK      =2
xDRIVER_GETBLOCK      =3
�DRIVER_CHECKTX       =4
�DRIVER_CHECKRX       =5
�DRIVER_FLUSHTX       =6
�DRIVER_FLUSHRX       =7
�DRIVER_CONTROLLINES  =8
�DRIVER_MODEMCONTROL  =9
�DRIVER_RXERRORS      =10
�DRIVER_BREAK         =11
�DRIVER_EXAMINE       =12
�DRIVER_TXSPEED       =13
�DRIVER_RXSPEED       =14
�DRIVER_WORDFORMAT    =15
�DRIVER_FLOWCONTROL   =16
DRIVER_INITIALISE    =17
DRIVER_CLOSEDOWN     =18
DRIVER_POLL          =19
"
,fifo%=�
6newhardware%=�
@pccable%=�
J
T*| Startup
^H�"The Serial Port: Serial tester"'"------------------------------"''
hZ�"Please ensure modem is powered up and connected to machine,"'"then press any key."''
rA%=�
|
�1*| First, check what type of machine we're on
�(�"Stage 1: Identifying OS/UART type"
�ș &20058,2 � ,F%;V%
�� (V%�1)<>0 �
�&  �"         RISCOS 2 / 6551 UART"
��
�  � F%=0 �
�(    �"         RISCOS 3 / 6551 UART"
�  �
�    newhardware%=�
�
�    *| Check for FIFO
�    ș &20058,3 � ,F%

    � (F%�&F000)<>0 �
+      �"         RISCOS 3 / 16550 UART"
&      fifo%=�
0	    �
:+      �"         RISCOS 3 / 16450 UART"
D	    �
N  �
X�
b
l$�'"Stage 2: Checking cable type"
v2*| Depending on UART type, load correct driver
�� newhardware% �
�  *| Load PC cable driver
�  �loaddriver("InternalPC")
�
�.  *| Look for CTS/DCD that wobble with DTR
�&  J%=�d(DRIVER_CONTROLLINES,0,3,0)
�&  J%=�d(DRIVER_MODEMCONTROL,0,0,0)
�  � (J%�%1001)=%1001 �
�(    J%=�d(DRIVER_CONTROLLINES,0,0,0)
�(    J%=�d(DRIVER_MODEMCONTROL,0,0,0)
�    � (J%�%1001)=0 �
�'      �"         Acorn-style cable"
�      pccable%=�
	    �
  �
-  � pccable% � �"         PC-style cable"
 �
*%  *| We need an acorn cable here!
4  pccable%=�
>
H.  *| Load PC cable driver to check this...
R  �loaddriver("InternalPC")
\
f  *| Check DCD/CTS
p&  J%=�d(DRIVER_CONTROLLINES,0,3,0)
z&  J%=�d(DRIVER_MODEMCONTROL,0,0,0)
�  � (J%�%1001)<>%1001 �
�4    �"         Acorn-style cable required, but:"
�J    � (J%�%1000)=0 � �"         Wiring fault: DCD (pin 1) is not high"
�J    � (J%�%0001)=0 � �"         Wiring fault: CTS (pin 8) is not high"
�@    �'"         Due to a bug in the silicon of most 6551's,"
�?    �"         data cannot be transmitted if DCD is is not"
�@    �"         high - hence on Acorn cables it is tied high"
�?    �"         and RI is used as a substitute DCD. CTS can"
�@    �"         also malfunction, hence DSR is used instead,"
�+    �"         and CTS is wired high."'
�
�    � (J%�%1001)=%0001 �
�@      �"         It looks like you're using a PC cable, you"
3      �"         need one wired the Acorn way."
	    �

$    �pause(50)
.  �
8%    �"         Acorn-style cable"
B  �
L�
V
`)�'"         Configure system for a ";
jE� pccable% � �"PC cable (InternalPC)" � �"Acorn cable (Internal)"
t
~)*| Load correct driver for more tests
�B� pccable% �loaddriver("InternalPC") � �loaddriver("Internal")
�
��pause(10)
�
�)�'"Stage 3: Checking modem prescence"
�contact%=�
�"J%=�d(DRIVER_TXSPEED,0,1200,0)
�"J%=�d(DRIVER_RXSPEED,0,1200,0)
�"J%=�d(DRIVER_WORDFORMAT,0,0,0)
�J%=�d(DRIVER_FLUSHRX,0,0,0)
�J%=�d(DRIVER_FLUSHTX,0,0,0)
��send("ATZ"+�13)
� �expect("OK",3) �

+  �"         Modem responded to an ATZ"
  contact%=�
�
(7  �"         No response from ATZ, trying AT&F...";
2  �send("AT&F"+�13)
<  � �expect("OK",5) �
F
    �"OK"
P    contact%=�
Z  �
d    �"no luck."
n  �
x�
�
�� contact%=� �
�9  �'"Can't continue with test, modem connect failed."
�  �
��
�
��pause(10)
�
�+�'"Stage 4: Checking DCD line function"
��send("AT&C0"+�13)
�
�pause(5)
�� �expect("OK",3) �
�1  �"         Modem accepted AT&C0 command..."
&  J%=�d(DRIVER_MODEMCONTROL,0,0,0)
  � (J%�%1000)=0 �
;    � "         ERROR! DCD should be active, but isn't"
"    � pccable% �
,;      �"         Check cabling (9w:pin 1 to 25w:pin 8)"
6	    �
@;      �"         Check cabling (9w:pin 9 to 25w:pin 8)"
J	    �
T  �
^-    �"         Good: DCD reading active."
h  �
r�
|:  �"         ERROR! Modem didn't accept AT&C0 command"
��
�
�
�pause(5)
�
��send("AT&C1"+�13)
�
�pause(5)
�� �expect("OK",3) �
�1  �"         Modem accepted AT&C1 command..."
�&  J%=�d(DRIVER_MODEMCONTROL,0,0,0)
�  � (J%�%1000)<>0 �
�=    � "         ERROR! DCD should be inactive, but isn't"
�    � pccable% �
�;      �"         Check cabling (9w:pin 1 to 25w:pin 8)"
	    �
;      �"         Check cabling (9w:pin 9 to 25w:pin 8)"
	    �
&  �
0/    �"         Good: DCD reading inactive."
:  �
D�
N:  �"         ERROR! Modem didn't accept AT&C1 command"
X�
b
l0�'"Stage 5: Checking modem maximum DTE rate"
vLS%=1200
��
�
  � S%
�.  � (S%<=19200 � newhardware%=�) � S%<>0 �
�(    �"         Trying ";S%;"bps...";
�$    J%=�d(DRIVER_TXSPEED,0,S%,0)
�$    J%=�d(DRIVER_RXSPEED,0,S%,0)
�    �pause(3)
�    �send("AT"+�13)
�    � �expect("OK",3) �
�      �"Yes":LS%=S%
�	    �
�      �"No"
�	    �
  �
	�S%=0
E�'"         Maximum DTE speed: ";LS%;"bps. For best performance,"
 9�"         set your dial store entries to this rate."
*
4� LS%>57600 � fifo%=� �
>@  �"         Although your machine can be set to this rate,"
H@  �"         it does not have a FIFO like the RiscPC/A7000,"
R@  �"         and so you may have to drop the speed to 57600"
\-  �"         if you get transfer errors."
f�
p
z!J%=�d(DRIVER_TXSPEED,0,LS%,0)
�!J%=�d(DRIVER_RXSPEED,0,LS%,0)
�
�=�'"Stage 6: Terminal mode - you can type commands to the"
�?�"         modem here if you wish, or press Escape to exit"
�#�'"--- CONNECTED TO MODEM ---"'
��
�  J%=�d(DRIVER_POLL,0,0,0)
�$  � �d(DRIVER_CHECKRX,0,0,0)>0 �
�#    J%=�d(DRIVER_GETBYTE,0,0,0)
�$    � J%>31 � J%=10 � J%=13 � J%
�  �
�  � �(-1)>0 �
�#    J%=�d(DRIVER_PUTBYTE,0,�,0)
	  �
	� 0
	
	$
	.�
	8
	B/� 1200,2400,9600,19200,38400,57600,115200,0
	L
	V��loaddriver(d$)
	`.  �("Load <SerTest$Dir>."+d$+" "+�~driver)
	j$  J%=�d(DRIVER_INITIALISE,0,0,0)
	t  � J%<>0 �
	~    err$=""
	�	    �
	�      err$+=�?J%
	�      J%+=1
	�    � ?J%=0
	�1    � "Error when initialising driver: ";err$
	�	    �
	�  �
	��
	�
	���send(d$)
	�  � A%=1 � �d$
	�,    J%=�d(DRIVER_PUTBYTE,0,��d$,A%,1),0)
  �

�

ݤexpect(d$,T%)
(� M%,D%
2
  M%=1
<
  D%=�
F  T%=((T%*100)+�)
P  �
Z#    J%=�d(DRIVER_GETBYTE,0,0,0)
d    � J%<>-1 �
n      � J%=��d$,M%,1) �
x        M%+=1
�        � M%>�d$ � D%=�
�      �
�&        � J%=��d$,1) � M%=2 � M%=1
�      �
�	    �
�  � D% � �>T%
�:=D%
�
���pause(T%)
�  T%=(T%*10)+�
�  ���>T%
��
�
�

ݤd(A%,B%,C%,D%)
":=�(driver)
�
00000000  0d 00 0a 06 2a 7c 0d 00  14 1e 2a 7c 20 53 65 72  |....*|....*| Ser|
00000010  69 61 6c 20 74 65 73 74  20 61 70 70 6c 69 63 61  |ial test applica|
00000020  74 69 6f 6e 0d 00 1e 06  2a 7c 0d 00 28 2e 2a 7c  |tion....*|..(.*||
00000030  20 28 63 29 31 39 39 35  20 48 75 67 6f 20 46 69  | (c)1995 Hugo Fi|
00000040  65 6e 6e 65 73 20 6f 66  20 54 68 65 20 53 65 72  |ennes of The Ser|
00000050  69 61 6c 20 50 6f 72 74  0d 00 32 14 2a 7c 20 76  |ial Port..2.*| v|
00000060  31 2e 30 30 20 32 31 2f  37 2f 39 35 0d 00 3c 06  |1.00 21/7/95..<.|
00000070  2a 7c 0d 00 46 04 0d 00  50 11 de 20 64 72 69 76  |*|..F...P.. driv|
00000080  65 72 20 34 30 39 36 0d  00 5a 1b 44 52 49 56 45  |er 4096..Z.DRIVE|
00000090  52 5f 50 55 54 42 59 54  45 20 20 20 20 20 20 20  |R_PUTBYTE       |
000000a0  3d 30 0d 00 64 1b 44 52  49 56 45 52 5f 47 45 54  |=0..d.DRIVER_GET|
000000b0  42 59 54 45 20 20 20 20  20 20 20 3d 31 0d 00 6e  |BYTE       =1..n|
000000c0  1b 44 52 49 56 45 52 5f  50 55 54 42 4c 4f 43 4b  |.DRIVER_PUTBLOCK|
000000d0  20 20 20 20 20 20 3d 32  0d 00 78 1b 44 52 49 56  |      =2..x.DRIV|
000000e0  45 52 5f 47 45 54 42 4c  4f 43 4b 20 20 20 20 20  |ER_GETBLOCK     |
000000f0  20 3d 33 0d 00 82 1b 44  52 49 56 45 52 5f 43 48  | =3....DRIVER_CH|
00000100  45 43 4b 54 58 20 20 20  20 20 20 20 3d 34 0d 00  |ECKTX       =4..|
00000110  8c 1b 44 52 49 56 45 52  5f 43 48 45 43 4b 52 58  |..DRIVER_CHECKRX|
00000120  20 20 20 20 20 20 20 3d  35 0d 00 96 1b 44 52 49  |       =5....DRI|
00000130  56 45 52 5f 46 4c 55 53  48 54 58 20 20 20 20 20  |VER_FLUSHTX     |
00000140  20 20 3d 36 0d 00 a0 1b  44 52 49 56 45 52 5f 46  |  =6....DRIVER_F|
00000150  4c 55 53 48 52 58 20 20  20 20 20 20 20 3d 37 0d  |LUSHRX       =7.|
00000160  00 aa 1b 44 52 49 56 45  52 5f 43 4f 4e 54 52 4f  |...DRIVER_CONTRO|
00000170  4c 4c 49 4e 45 53 20 20  3d 38 0d 00 b4 1b 44 52  |LLINES  =8....DR|
00000180  49 56 45 52 5f 4d 4f 44  45 4d 43 4f 4e 54 52 4f  |IVER_MODEMCONTRO|
00000190  4c 20 20 3d 39 0d 00 be  1c 44 52 49 56 45 52 5f  |L  =9....DRIVER_|
000001a0  52 58 45 52 52 4f 52 53  20 20 20 20 20 20 3d 31  |RXERRORS      =1|
000001b0  30 0d 00 c8 1c 44 52 49  56 45 52 5f 42 52 45 41  |0....DRIVER_BREA|
000001c0  4b 20 20 20 20 20 20 20  20 20 3d 31 31 0d 00 d2  |K         =11...|
000001d0  1c 44 52 49 56 45 52 5f  45 58 41 4d 49 4e 45 20  |.DRIVER_EXAMINE |
000001e0  20 20 20 20 20 20 3d 31  32 0d 00 dc 1c 44 52 49  |      =12....DRI|
000001f0  56 45 52 5f 54 58 53 50  45 45 44 20 20 20 20 20  |VER_TXSPEED     |
00000200  20 20 3d 31 33 0d 00 e6  1c 44 52 49 56 45 52 5f  |  =13....DRIVER_|
00000210  52 58 53 50 45 45 44 20  20 20 20 20 20 20 3d 31  |RXSPEED       =1|
00000220  34 0d 00 f0 1c 44 52 49  56 45 52 5f 57 4f 52 44  |4....DRIVER_WORD|
00000230  46 4f 52 4d 41 54 20 20  20 20 3d 31 35 0d 00 fa  |FORMAT    =15...|
00000240  1c 44 52 49 56 45 52 5f  46 4c 4f 57 43 4f 4e 54  |.DRIVER_FLOWCONT|
00000250  52 4f 4c 20 20 20 3d 31  36 0d 01 04 1c 44 52 49  |ROL   =16....DRI|
00000260  56 45 52 5f 49 4e 49 54  49 41 4c 49 53 45 20 20  |VER_INITIALISE  |
00000270  20 20 3d 31 37 0d 01 0e  1c 44 52 49 56 45 52 5f  |  =17....DRIVER_|
00000280  43 4c 4f 53 45 44 4f 57  4e 20 20 20 20 20 3d 31  |CLOSEDOWN     =1|
00000290  38 0d 01 18 1c 44 52 49  56 45 52 5f 50 4f 4c 4c  |8....DRIVER_POLL|
000002a0  20 20 20 20 20 20 20 20  20 20 3d 31 39 0d 01 22  |          =19.."|
000002b0  04 0d 01 2c 0b 66 69 66  6f 25 3d a3 0d 01 36 12  |...,.fifo%=...6.|
000002c0  6e 65 77 68 61 72 64 77  61 72 65 25 3d a3 0d 01  |newhardware%=...|
000002d0  40 0e 70 63 63 61 62 6c  65 25 3d b9 0d 01 4a 04  |@.pccable%=...J.|
000002e0  0d 01 54 0e 2a 7c 20 53  74 61 72 74 75 70 0d 01  |..T.*| Startup..|
000002f0  5e 48 f1 22 54 68 65 20  53 65 72 69 61 6c 20 50  |^H."The Serial P|
00000300  6f 72 74 3a 20 53 65 72  69 61 6c 20 74 65 73 74  |ort: Serial test|
00000310  65 72 22 27 22 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |er"'"-----------|
00000320  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000330  2d 2d 2d 22 27 27 0d 01  68 5a f1 22 50 6c 65 61  |---"''..hZ."Plea|
00000340  73 65 20 65 6e 73 75 72  65 20 6d 6f 64 65 6d 20  |se ensure modem |
00000350  69 73 20 70 6f 77 65 72  65 64 20 75 70 20 61 6e  |is powered up an|
00000360  64 20 63 6f 6e 6e 65 63  74 65 64 20 74 6f 20 6d  |d connected to m|
00000370  61 63 68 69 6e 65 2c 22  27 22 74 68 65 6e 20 70  |achine,"'"then p|
00000380  72 65 73 73 20 61 6e 79  20 6b 65 79 2e 22 27 27  |ress any key."''|
00000390  0d 01 72 08 41 25 3d a5  0d 01 7c 04 0d 01 86 31  |..r.A%=...|....1|
000003a0  2a 7c 20 46 69 72 73 74  2c 20 63 68 65 63 6b 20  |*| First, check |
000003b0  77 68 61 74 20 74 79 70  65 20 6f 66 20 6d 61 63  |what type of mac|
000003c0  68 69 6e 65 20 77 65 27  72 65 20 6f 6e 0d 01 90  |hine we're on...|
000003d0  28 f1 22 53 74 61 67 65  20 31 3a 20 49 64 65 6e  |(."Stage 1: Iden|
000003e0  74 69 66 79 69 6e 67 20  4f 53 2f 55 41 52 54 20  |tifying OS/UART |
000003f0  74 79 70 65 22 0d 01 9a  18 c8 99 20 26 32 30 30  |type"...... &200|
00000400  35 38 2c 32 20 b8 20 2c  46 25 3b 56 25 0d 01 a4  |58,2 . ,F%;V%...|
00000410  11 e7 20 28 56 25 80 31  29 3c 3e 30 20 8c 0d 01  |.. (V%.1)<>0 ...|
00000420  ae 26 20 20 f1 22 20 20  20 20 20 20 20 20 20 52  |.&  ."         R|
00000430  49 53 43 4f 53 20 32 20  2f 20 36 35 35 31 20 55  |ISCOS 2 / 6551 U|
00000440  41 52 54 22 0d 01 b8 05  cc 0d 01 c2 0e 20 20 e7  |ART".........  .|
00000450  20 46 25 3d 30 20 8c 0d  01 cc 28 20 20 20 20 f1  | F%=0 ....(    .|
00000460  22 20 20 20 20 20 20 20  20 20 52 49 53 43 4f 53  |"         RISCOS|
00000470  20 33 20 2f 20 36 35 35  31 20 55 41 52 54 22 0d  | 3 / 6551 UART".|
00000480  01 d6 07 20 20 cc 0d 01  e0 16 20 20 20 20 6e 65  |...  .....    ne|
00000490  77 68 61 72 64 77 61 72  65 25 3d b9 0d 01 ea 04  |whardware%=.....|
000004a0  0d 01 f4 19 20 20 20 20  2a 7c 20 43 68 65 63 6b  |....    *| Check|
000004b0  20 66 6f 72 20 46 49 46  4f 0d 01 fe 19 20 20 20  | for FIFO....   |
000004c0  20 c8 99 20 26 32 30 30  35 38 2c 33 20 b8 20 2c  | .. &20058,3 . ,|
000004d0  46 25 0d 02 08 04 0d 02  12 19 20 20 20 20 e7 20  |F%........    . |
000004e0  28 46 25 80 26 46 30 30  30 29 3c 3e 30 20 8c 0d  |(F%.&F000)<>0 ..|
000004f0  02 1c 2b 20 20 20 20 20  20 f1 22 20 20 20 20 20  |..+      ."     |
00000500  20 20 20 20 52 49 53 43  4f 53 20 33 20 2f 20 31  |    RISCOS 3 / 1|
00000510  36 35 35 30 20 55 41 52  54 22 0d 02 26 11 20 20  |6550 UART"..&.  |
00000520  20 20 20 20 66 69 66 6f  25 3d b9 0d 02 30 09 20  |    fifo%=...0. |
00000530  20 20 20 cc 0d 02 3a 2b  20 20 20 20 20 20 f1 22  |   ...:+      ."|
00000540  20 20 20 20 20 20 20 20  20 52 49 53 43 4f 53 20  |         RISCOS |
00000550  33 20 2f 20 31 36 34 35  30 20 55 41 52 54 22 0d  |3 / 16450 UART".|
00000560  02 44 09 20 20 20 20 cd  0d 02 4e 07 20 20 cd 0d  |.D.    ...N.  ..|
00000570  02 58 05 cd 0d 02 62 04  0d 02 6c 24 f1 27 22 53  |.X....b...l$.'"S|
00000580  74 61 67 65 20 32 3a 20  43 68 65 63 6b 69 6e 67  |tage 2: Checking|
00000590  20 63 61 62 6c 65 20 74  79 70 65 22 0d 02 76 32  | cable type"..v2|
000005a0  2a 7c 20 44 65 70 65 6e  64 69 6e 67 20 6f 6e 20  |*| Depending on |
000005b0  55 41 52 54 20 74 79 70  65 2c 20 6c 6f 61 64 20  |UART type, load |
000005c0  63 6f 72 72 65 63 74 20  64 72 69 76 65 72 0d 02  |correct driver..|
000005d0  80 14 e7 20 6e 65 77 68  61 72 64 77 61 72 65 25  |... newhardware%|
000005e0  20 8c 0d 02 8a 1d 20 20  2a 7c 20 4c 6f 61 64 20  | .....  *| Load |
000005f0  50 43 20 63 61 62 6c 65  20 64 72 69 76 65 72 0d  |PC cable driver.|
00000600  02 94 1f 20 20 f2 6c 6f  61 64 64 72 69 76 65 72  |...  .loaddriver|
00000610  28 22 49 6e 74 65 72 6e  61 6c 50 43 22 29 0d 02  |("InternalPC")..|
00000620  9e 04 0d 02 a8 2e 20 20  2a 7c 20 4c 6f 6f 6b 20  |......  *| Look |
00000630  66 6f 72 20 43 54 53 2f  44 43 44 20 74 68 61 74  |for CTS/DCD that|
00000640  20 77 6f 62 62 6c 65 20  77 69 74 68 20 44 54 52  | wobble with DTR|
00000650  0d 02 b2 26 20 20 4a 25  3d a4 64 28 44 52 49 56  |...&  J%=.d(DRIV|
00000660  45 52 5f 43 4f 4e 54 52  4f 4c 4c 49 4e 45 53 2c  |ER_CONTROLLINES,|
00000670  30 2c 33 2c 30 29 0d 02  bc 26 20 20 4a 25 3d a4  |0,3,0)...&  J%=.|
00000680  64 28 44 52 49 56 45 52  5f 4d 4f 44 45 4d 43 4f  |d(DRIVER_MODEMCO|
00000690  4e 54 52 4f 4c 2c 30 2c  30 2c 30 29 0d 02 c6 1a  |NTROL,0,0,0)....|
000006a0  20 20 e7 20 28 4a 25 80  25 31 30 30 31 29 3d 25  |  . (J%.%1001)=%|
000006b0  31 30 30 31 20 8c 0d 02  d0 28 20 20 20 20 4a 25  |1001 ....(    J%|
000006c0  3d a4 64 28 44 52 49 56  45 52 5f 43 4f 4e 54 52  |=.d(DRIVER_CONTR|
000006d0  4f 4c 4c 49 4e 45 53 2c  30 2c 30 2c 30 29 0d 02  |OLLINES,0,0,0)..|
000006e0  da 28 20 20 20 20 4a 25  3d a4 64 28 44 52 49 56  |.(    J%=.d(DRIV|
000006f0  45 52 5f 4d 4f 44 45 4d  43 4f 4e 54 52 4f 4c 2c  |ER_MODEMCONTROL,|
00000700  30 2c 30 2c 30 29 0d 02  e4 18 20 20 20 20 e7 20  |0,0,0)....    . |
00000710  28 4a 25 80 25 31 30 30  31 29 3d 30 20 8c 0d 02  |(J%.%1001)=0 ...|
00000720  ee 27 20 20 20 20 20 20  f1 22 20 20 20 20 20 20  |.'      ."      |
00000730  20 20 20 41 63 6f 72 6e  2d 73 74 79 6c 65 20 63  |   Acorn-style c|
00000740  61 62 6c 65 22 0d 02 f8  14 20 20 20 20 20 20 70  |able"....      p|
00000750  63 63 61 62 6c 65 25 3d  a3 0d 03 02 09 20 20 20  |ccable%=.....   |
00000760  20 cd 0d 03 0c 07 20 20  cd 0d 03 16 2d 20 20 e7  | .....  ....-  .|
00000770  20 70 63 63 61 62 6c 65  25 20 8c 20 f1 22 20 20  | pccable% . ."  |
00000780  20 20 20 20 20 20 20 50  43 2d 73 74 79 6c 65 20  |       PC-style |
00000790  63 61 62 6c 65 22 0d 03  20 05 cc 0d 03 2a 25 20  |cable".. ....*% |
000007a0  20 2a 7c 20 57 65 20 6e  65 65 64 20 61 6e 20 61  | *| We need an a|
000007b0  63 6f 72 6e 20 63 61 62  6c 65 20 68 65 72 65 21  |corn cable here!|
000007c0  0d 03 34 10 20 20 70 63  63 61 62 6c 65 25 3d a3  |..4.  pccable%=.|
000007d0  0d 03 3e 04 0d 03 48 2e  20 20 2a 7c 20 4c 6f 61  |..>...H.  *| Loa|
000007e0  64 20 50 43 20 63 61 62  6c 65 20 64 72 69 76 65  |d PC cable drive|
000007f0  72 20 74 6f 20 63 68 65  63 6b 20 74 68 69 73 2e  |r to check this.|
00000800  2e 2e 0d 03 52 1f 20 20  f2 6c 6f 61 64 64 72 69  |....R.  .loaddri|
00000810  76 65 72 28 22 49 6e 74  65 72 6e 61 6c 50 43 22  |ver("InternalPC"|
00000820  29 0d 03 5c 04 0d 03 66  16 20 20 2a 7c 20 43 68  |)..\...f.  *| Ch|
00000830  65 63 6b 20 44 43 44 2f  43 54 53 0d 03 70 26 20  |eck DCD/CTS..p& |
00000840  20 4a 25 3d a4 64 28 44  52 49 56 45 52 5f 43 4f  | J%=.d(DRIVER_CO|
00000850  4e 54 52 4f 4c 4c 49 4e  45 53 2c 30 2c 33 2c 30  |NTROLLINES,0,3,0|
00000860  29 0d 03 7a 26 20 20 4a  25 3d a4 64 28 44 52 49  |)..z&  J%=.d(DRI|
00000870  56 45 52 5f 4d 4f 44 45  4d 43 4f 4e 54 52 4f 4c  |VER_MODEMCONTROL|
00000880  2c 30 2c 30 2c 30 29 0d  03 84 1b 20 20 e7 20 28  |,0,0,0)....  . (|
00000890  4a 25 80 25 31 30 30 31  29 3c 3e 25 31 30 30 31  |J%.%1001)<>%1001|
000008a0  20 8c 0d 03 8e 34 20 20  20 20 f1 22 20 20 20 20  | ....4    ."    |
000008b0  20 20 20 20 20 41 63 6f  72 6e 2d 73 74 79 6c 65  |     Acorn-style|
000008c0  20 63 61 62 6c 65 20 72  65 71 75 69 72 65 64 2c  | cable required,|
000008d0  20 62 75 74 3a 22 0d 03  98 4a 20 20 20 20 e7 20  | but:"...J    . |
000008e0  28 4a 25 80 25 31 30 30  30 29 3d 30 20 8c 20 f1  |(J%.%1000)=0 . .|
000008f0  22 20 20 20 20 20 20 20  20 20 57 69 72 69 6e 67  |"         Wiring|
00000900  20 66 61 75 6c 74 3a 20  44 43 44 20 28 70 69 6e  | fault: DCD (pin|
00000910  20 31 29 20 69 73 20 6e  6f 74 20 68 69 67 68 22  | 1) is not high"|
00000920  0d 03 a2 4a 20 20 20 20  e7 20 28 4a 25 80 25 30  |...J    . (J%.%0|
00000930  30 30 31 29 3d 30 20 8c  20 f1 22 20 20 20 20 20  |001)=0 . ."     |
00000940  20 20 20 20 57 69 72 69  6e 67 20 66 61 75 6c 74  |    Wiring fault|
00000950  3a 20 43 54 53 20 28 70  69 6e 20 38 29 20 69 73  |: CTS (pin 8) is|
00000960  20 6e 6f 74 20 68 69 67  68 22 0d 03 ac 40 20 20  | not high"...@  |
00000970  20 20 f1 27 22 20 20 20  20 20 20 20 20 20 44 75  |  .'"         Du|
00000980  65 20 74 6f 20 61 20 62  75 67 20 69 6e 20 74 68  |e to a bug in th|
00000990  65 20 73 69 6c 69 63 6f  6e 20 6f 66 20 6d 6f 73  |e silicon of mos|
000009a0  74 20 36 35 35 31 27 73  2c 22 0d 03 b6 3f 20 20  |t 6551's,"...?  |
000009b0  20 20 f1 22 20 20 20 20  20 20 20 20 20 64 61 74  |  ."         dat|
000009c0  61 20 63 61 6e 6e 6f 74  20 62 65 20 74 72 61 6e  |a cannot be tran|
000009d0  73 6d 69 74 74 65 64 20  69 66 20 44 43 44 20 69  |smitted if DCD i|
000009e0  73 20 69 73 20 6e 6f 74  22 0d 03 c0 40 20 20 20  |s is not"...@   |
000009f0  20 f1 22 20 20 20 20 20  20 20 20 20 68 69 67 68  | ."         high|
00000a00  20 2d 20 68 65 6e 63 65  20 6f 6e 20 41 63 6f 72  | - hence on Acor|
00000a10  6e 20 63 61 62 6c 65 73  20 69 74 20 69 73 20 74  |n cables it is t|
00000a20  69 65 64 20 68 69 67 68  22 0d 03 ca 3f 20 20 20  |ied high"...?   |
00000a30  20 f1 22 20 20 20 20 20  20 20 20 20 61 6e 64 20  | ."         and |
00000a40  52 49 20 69 73 20 75 73  65 64 20 61 73 20 61 20  |RI is used as a |
00000a50  73 75 62 73 74 69 74 75  74 65 20 44 43 44 2e 20  |substitute DCD. |
00000a60  43 54 53 20 63 61 6e 22  0d 03 d4 40 20 20 20 20  |CTS can"...@    |
00000a70  f1 22 20 20 20 20 20 20  20 20 20 61 6c 73 6f 20  |."         also |
00000a80  6d 61 6c 66 75 6e 63 74  69 6f 6e 2c 20 68 65 6e  |malfunction, hen|
00000a90  63 65 20 44 53 52 20 69  73 20 75 73 65 64 20 69  |ce DSR is used i|
00000aa0  6e 73 74 65 61 64 2c 22  0d 03 de 2b 20 20 20 20  |nstead,"...+    |
00000ab0  f1 22 20 20 20 20 20 20  20 20 20 61 6e 64 20 43  |."         and C|
00000ac0  54 53 20 69 73 20 77 69  72 65 64 20 68 69 67 68  |TS is wired high|
00000ad0  2e 22 27 0d 03 e8 04 0d  03 f2 1c 20 20 20 20 e7  |."'........    .|
00000ae0  20 28 4a 25 80 25 31 30  30 31 29 3d 25 30 30 30  | (J%.%1001)=%000|
00000af0  31 20 8c 0d 03 fc 40 20  20 20 20 20 20 f1 22 20  |1 ....@      ." |
00000b00  20 20 20 20 20 20 20 20  49 74 20 6c 6f 6f 6b 73  |        It looks|
00000b10  20 6c 69 6b 65 20 79 6f  75 27 72 65 20 75 73 69  | like you're usi|
00000b20  6e 67 20 61 20 50 43 20  63 61 62 6c 65 2c 20 79  |ng a PC cable, y|
00000b30  6f 75 22 0d 04 06 33 20  20 20 20 20 20 f1 22 20  |ou"...3      ." |
00000b40  20 20 20 20 20 20 20 20  6e 65 65 64 20 6f 6e 65  |        need one|
00000b50  20 77 69 72 65 64 20 74  68 65 20 41 63 6f 72 6e  | wired the Acorn|
00000b60  20 77 61 79 2e 22 0d 04  10 09 20 20 20 20 cd 0d  | way."....    ..|
00000b70  04 1a 04 0d 04 24 12 20  20 20 20 f2 70 61 75 73  |.....$.    .paus|
00000b80  65 28 35 30 29 0d 04 2e  07 20 20 cc 0d 04 38 25  |e(50)....  ...8%|
00000b90  20 20 20 20 f1 22 20 20  20 20 20 20 20 20 20 41  |    ."         A|
00000ba0  63 6f 72 6e 2d 73 74 79  6c 65 20 63 61 62 6c 65  |corn-style cable|
00000bb0  22 0d 04 42 07 20 20 cd  0d 04 4c 05 cd 0d 04 56  |"..B.  ...L....V|
00000bc0  04 0d 04 60 29 f1 27 22  20 20 20 20 20 20 20 20  |...`).'"        |
00000bd0  20 43 6f 6e 66 69 67 75  72 65 20 73 79 73 74 65  | Configure syste|
00000be0  6d 20 66 6f 72 20 61 20  22 3b 0d 04 6a 45 e7 20  |m for a ";..jE. |
00000bf0  70 63 63 61 62 6c 65 25  20 8c 20 f1 22 50 43 20  |pccable% . ."PC |
00000c00  63 61 62 6c 65 20 28 49  6e 74 65 72 6e 61 6c 50  |cable (InternalP|
00000c10  43 29 22 20 8b 20 f1 22  41 63 6f 72 6e 20 63 61  |C)" . ."Acorn ca|
00000c20  62 6c 65 20 28 49 6e 74  65 72 6e 61 6c 29 22 0d  |ble (Internal)".|
00000c30  04 74 04 0d 04 7e 29 2a  7c 20 4c 6f 61 64 20 63  |.t...~)*| Load c|
00000c40  6f 72 72 65 63 74 20 64  72 69 76 65 72 20 66 6f  |orrect driver fo|
00000c50  72 20 6d 6f 72 65 20 74  65 73 74 73 0d 04 88 42  |r more tests...B|
00000c60  e7 20 70 63 63 61 62 6c  65 25 20 f2 6c 6f 61 64  |. pccable% .load|
00000c70  64 72 69 76 65 72 28 22  49 6e 74 65 72 6e 61 6c  |driver("Internal|
00000c80  50 43 22 29 20 8b 20 f2  6c 6f 61 64 64 72 69 76  |PC") . .loaddriv|
00000c90  65 72 28 22 49 6e 74 65  72 6e 61 6c 22 29 0d 04  |er("Internal")..|
00000ca0  92 04 0d 04 9c 0e f2 70  61 75 73 65 28 31 30 29  |.......pause(10)|
00000cb0  0d 04 a6 04 0d 04 b0 29  f1 27 22 53 74 61 67 65  |.......).'"Stage|
00000cc0  20 33 3a 20 43 68 65 63  6b 69 6e 67 20 6d 6f 64  | 3: Checking mod|
00000cd0  65 6d 20 70 72 65 73 63  65 6e 63 65 22 0d 04 ba  |em prescence"...|
00000ce0  0e 63 6f 6e 74 61 63 74  25 3d a3 0d 04 c4 22 4a  |.contact%=...."J|
00000cf0  25 3d a4 64 28 44 52 49  56 45 52 5f 54 58 53 50  |%=.d(DRIVER_TXSP|
00000d00  45 45 44 2c 30 2c 31 32  30 30 2c 30 29 0d 04 ce  |EED,0,1200,0)...|
00000d10  22 4a 25 3d a4 64 28 44  52 49 56 45 52 5f 52 58  |"J%=.d(DRIVER_RX|
00000d20  53 50 45 45 44 2c 30 2c  31 32 30 30 2c 30 29 0d  |SPEED,0,1200,0).|
00000d30  04 d8 22 4a 25 3d a4 64  28 44 52 49 56 45 52 5f  |.."J%=.d(DRIVER_|
00000d40  57 4f 52 44 46 4f 52 4d  41 54 2c 30 2c 30 2c 30  |WORDFORMAT,0,0,0|
00000d50  29 0d 04 e2 1f 4a 25 3d  a4 64 28 44 52 49 56 45  |)....J%=.d(DRIVE|
00000d60  52 5f 46 4c 55 53 48 52  58 2c 30 2c 30 2c 30 29  |R_FLUSHRX,0,0,0)|
00000d70  0d 04 ec 1f 4a 25 3d a4  64 28 44 52 49 56 45 52  |....J%=.d(DRIVER|
00000d80  5f 46 4c 55 53 48 54 58  2c 30 2c 30 2c 30 29 0d  |_FLUSHTX,0,0,0).|
00000d90  04 f6 14 f2 73 65 6e 64  28 22 41 54 5a 22 2b bd  |....send("ATZ"+.|
00000da0  31 33 29 0d 05 00 17 e7  20 a4 65 78 70 65 63 74  |13)..... .expect|
00000db0  28 22 4f 4b 22 2c 33 29  20 8c 0d 05 0a 2b 20 20  |("OK",3) ....+  |
00000dc0  f1 22 20 20 20 20 20 20  20 20 20 4d 6f 64 65 6d  |."         Modem|
00000dd0  20 72 65 73 70 6f 6e 64  65 64 20 74 6f 20 61 6e  | responded to an|
00000de0  20 41 54 5a 22 0d 05 14  10 20 20 63 6f 6e 74 61  | ATZ"....  conta|
00000df0  63 74 25 3d b9 0d 05 1e  05 cc 0d 05 28 37 20 20  |ct%=........(7  |
00000e00  f1 22 20 20 20 20 20 20  20 20 20 4e 6f 20 72 65  |."         No re|
00000e10  73 70 6f 6e 73 65 20 66  72 6f 6d 20 41 54 5a 2c  |sponse from ATZ,|
00000e20  20 74 72 79 69 6e 67 20  41 54 26 46 2e 2e 2e 22  | trying AT&F..."|
00000e30  3b 0d 05 32 17 20 20 f2  73 65 6e 64 28 22 41 54  |;..2.  .send("AT|
00000e40  26 46 22 2b bd 31 33 29  0d 05 3c 19 20 20 e7 20  |&F"+.13)..<.  . |
00000e50  a4 65 78 70 65 63 74 28  22 4f 4b 22 2c 35 29 20  |.expect("OK",5) |
00000e60  8c 0d 05 46 0d 20 20 20  20 f1 22 4f 4b 22 0d 05  |...F.    ."OK"..|
00000e70  50 12 20 20 20 20 63 6f  6e 74 61 63 74 25 3d b9  |P.    contact%=.|
00000e80  0d 05 5a 07 20 20 cc 0d  05 64 13 20 20 20 20 f1  |..Z.  ...d.    .|
00000e90  22 6e 6f 20 6c 75 63 6b  2e 22 0d 05 6e 07 20 20  |"no luck."..n.  |
00000ea0  cd 0d 05 78 05 cd 0d 05  82 04 0d 05 8c 12 e7 20  |...x........... |
00000eb0  63 6f 6e 74 61 63 74 25  3d a3 20 8c 0d 05 96 39  |contact%=. ....9|
00000ec0  20 20 f1 27 22 43 61 6e  27 74 20 63 6f 6e 74 69  |  .'"Can't conti|
00000ed0  6e 75 65 20 77 69 74 68  20 74 65 73 74 2c 20 6d  |nue with test, m|
00000ee0  6f 64 65 6d 20 63 6f 6e  6e 65 63 74 20 66 61 69  |odem connect fai|
00000ef0  6c 65 64 2e 22 0d 05 a0  07 20 20 e0 0d 05 aa 05  |led."....  .....|
00000f00  cd 0d 05 b4 04 0d 05 be  0e f2 70 61 75 73 65 28  |..........pause(|
00000f10  31 30 29 0d 05 c8 04 0d  05 d2 2b f1 27 22 53 74  |10).......+.'"St|
00000f20  61 67 65 20 34 3a 20 43  68 65 63 6b 69 6e 67 20  |age 4: Checking |
00000f30  44 43 44 20 6c 69 6e 65  20 66 75 6e 63 74 69 6f  |DCD line functio|
00000f40  6e 22 0d 05 dc 16 f2 73  65 6e 64 28 22 41 54 26  |n".....send("AT&|
00000f50  43 30 22 2b bd 31 33 29  0d 05 e6 0d f2 70 61 75  |C0"+.13).....pau|
00000f60  73 65 28 35 29 0d 05 f0  17 e7 20 a4 65 78 70 65  |se(5)..... .expe|
00000f70  63 74 28 22 4f 4b 22 2c  33 29 20 8c 0d 05 fa 31  |ct("OK",3) ....1|
00000f80  20 20 f1 22 20 20 20 20  20 20 20 20 20 4d 6f 64  |  ."         Mod|
00000f90  65 6d 20 61 63 63 65 70  74 65 64 20 41 54 26 43  |em accepted AT&C|
00000fa0  30 20 63 6f 6d 6d 61 6e  64 2e 2e 2e 22 0d 06 04  |0 command..."...|
00000fb0  26 20 20 4a 25 3d a4 64  28 44 52 49 56 45 52 5f  |&  J%=.d(DRIVER_|
00000fc0  4d 4f 44 45 4d 43 4f 4e  54 52 4f 4c 2c 30 2c 30  |MODEMCONTROL,0,0|
00000fd0  2c 30 29 0d 06 0e 16 20  20 e7 20 28 4a 25 80 25  |,0)....  . (J%.%|
00000fe0  31 30 30 30 29 3d 30 20  8c 0d 06 18 3b 20 20 20  |1000)=0 ....;   |
00000ff0  20 f1 20 22 20 20 20 20  20 20 20 20 20 45 52 52  | . "         ERR|
00001000  4f 52 21 20 44 43 44 20  73 68 6f 75 6c 64 20 62  |OR! DCD should b|
00001010  65 20 61 63 74 69 76 65  2c 20 62 75 74 20 69 73  |e active, but is|
00001020  6e 27 74 22 0d 06 22 14  20 20 20 20 e7 20 70 63  |n't"..".    . pc|
00001030  63 61 62 6c 65 25 20 8c  0d 06 2c 3b 20 20 20 20  |cable% ...,;    |
00001040  20 20 f1 22 20 20 20 20  20 20 20 20 20 43 68 65  |  ."         Che|
00001050  63 6b 20 63 61 62 6c 69  6e 67 20 28 39 77 3a 70  |ck cabling (9w:p|
00001060  69 6e 20 31 20 74 6f 20  32 35 77 3a 70 69 6e 20  |in 1 to 25w:pin |
00001070  38 29 22 0d 06 36 09 20  20 20 20 cc 0d 06 40 3b  |8)"..6.    ...@;|
00001080  20 20 20 20 20 20 f1 22  20 20 20 20 20 20 20 20  |      ."        |
00001090  20 43 68 65 63 6b 20 63  61 62 6c 69 6e 67 20 28  | Check cabling (|
000010a0  39 77 3a 70 69 6e 20 39  20 74 6f 20 32 35 77 3a  |9w:pin 9 to 25w:|
000010b0  70 69 6e 20 38 29 22 0d  06 4a 09 20 20 20 20 cd  |pin 8)"..J.    .|
000010c0  0d 06 54 07 20 20 cc 0d  06 5e 2d 20 20 20 20 f1  |..T.  ...^-    .|
000010d0  22 20 20 20 20 20 20 20  20 20 47 6f 6f 64 3a 20  |"         Good: |
000010e0  44 43 44 20 72 65 61 64  69 6e 67 20 61 63 74 69  |DCD reading acti|
000010f0  76 65 2e 22 0d 06 68 07  20 20 cd 0d 06 72 05 cc  |ve."..h.  ...r..|
00001100  0d 06 7c 3a 20 20 f1 22  20 20 20 20 20 20 20 20  |..|:  ."        |
00001110  20 45 52 52 4f 52 21 20  4d 6f 64 65 6d 20 64 69  | ERROR! Modem di|
00001120  64 6e 27 74 20 61 63 63  65 70 74 20 41 54 26 43  |dn't accept AT&C|
00001130  30 20 63 6f 6d 6d 61 6e  64 22 0d 06 86 05 cd 0d  |0 command"......|
00001140  06 90 04 0d 06 9a 0d f2  70 61 75 73 65 28 35 29  |........pause(5)|
00001150  0d 06 a4 04 0d 06 ae 16  f2 73 65 6e 64 28 22 41  |.........send("A|
00001160  54 26 43 31 22 2b bd 31  33 29 0d 06 b8 0d f2 70  |T&C1"+.13).....p|
00001170  61 75 73 65 28 35 29 0d  06 c2 17 e7 20 a4 65 78  |ause(5)..... .ex|
00001180  70 65 63 74 28 22 4f 4b  22 2c 33 29 20 8c 0d 06  |pect("OK",3) ...|
00001190  cc 31 20 20 f1 22 20 20  20 20 20 20 20 20 20 4d  |.1  ."         M|
000011a0  6f 64 65 6d 20 61 63 63  65 70 74 65 64 20 41 54  |odem accepted AT|
000011b0  26 43 31 20 63 6f 6d 6d  61 6e 64 2e 2e 2e 22 0d  |&C1 command...".|
000011c0  06 d6 26 20 20 4a 25 3d  a4 64 28 44 52 49 56 45  |..&  J%=.d(DRIVE|
000011d0  52 5f 4d 4f 44 45 4d 43  4f 4e 54 52 4f 4c 2c 30  |R_MODEMCONTROL,0|
000011e0  2c 30 2c 30 29 0d 06 e0  17 20 20 e7 20 28 4a 25  |,0,0)....  . (J%|
000011f0  80 25 31 30 30 30 29 3c  3e 30 20 8c 0d 06 ea 3d  |.%1000)<>0 ....=|
00001200  20 20 20 20 f1 20 22 20  20 20 20 20 20 20 20 20  |    . "         |
00001210  45 52 52 4f 52 21 20 44  43 44 20 73 68 6f 75 6c  |ERROR! DCD shoul|
00001220  64 20 62 65 20 69 6e 61  63 74 69 76 65 2c 20 62  |d be inactive, b|
00001230  75 74 20 69 73 6e 27 74  22 0d 06 f4 14 20 20 20  |ut isn't"....   |
00001240  20 e7 20 70 63 63 61 62  6c 65 25 20 8c 0d 06 fe  | . pccable% ....|
00001250  3b 20 20 20 20 20 20 f1  22 20 20 20 20 20 20 20  |;      ."       |
00001260  20 20 43 68 65 63 6b 20  63 61 62 6c 69 6e 67 20  |  Check cabling |
00001270  28 39 77 3a 70 69 6e 20  31 20 74 6f 20 32 35 77  |(9w:pin 1 to 25w|
00001280  3a 70 69 6e 20 38 29 22  0d 07 08 09 20 20 20 20  |:pin 8)"....    |
00001290  cc 0d 07 12 3b 20 20 20  20 20 20 f1 22 20 20 20  |....;      ."   |
000012a0  20 20 20 20 20 20 43 68  65 63 6b 20 63 61 62 6c  |      Check cabl|
000012b0  69 6e 67 20 28 39 77 3a  70 69 6e 20 39 20 74 6f  |ing (9w:pin 9 to|
000012c0  20 32 35 77 3a 70 69 6e  20 38 29 22 0d 07 1c 09  | 25w:pin 8)"....|
000012d0  20 20 20 20 cd 0d 07 26  07 20 20 cc 0d 07 30 2f  |    ...&.  ...0/|
000012e0  20 20 20 20 f1 22 20 20  20 20 20 20 20 20 20 47  |    ."         G|
000012f0  6f 6f 64 3a 20 44 43 44  20 72 65 61 64 69 6e 67  |ood: DCD reading|
00001300  20 69 6e 61 63 74 69 76  65 2e 22 0d 07 3a 07 20  | inactive."..:. |
00001310  20 cd 0d 07 44 05 cc 0d  07 4e 3a 20 20 f1 22 20  | ...D....N:  ." |
00001320  20 20 20 20 20 20 20 20  45 52 52 4f 52 21 20 4d  |        ERROR! M|
00001330  6f 64 65 6d 20 64 69 64  6e 27 74 20 61 63 63 65  |odem didn't acce|
00001340  70 74 20 41 54 26 43 31  20 63 6f 6d 6d 61 6e 64  |pt AT&C1 command|
00001350  22 0d 07 58 05 cd 0d 07  62 04 0d 07 6c 30 f1 27  |"..X....b...l0.'|
00001360  22 53 74 61 67 65 20 35  3a 20 43 68 65 63 6b 69  |"Stage 5: Checki|
00001370  6e 67 20 6d 6f 64 65 6d  20 6d 61 78 69 6d 75 6d  |ng modem maximum|
00001380  20 44 54 45 20 72 61 74  65 22 0d 07 76 0c 4c 53  | DTE rate"..v.LS|
00001390  25 3d 31 32 30 30 0d 07  80 05 f5 0d 07 8a 0a 20  |%=1200......... |
000013a0  20 f3 20 53 25 0d 07 94  2e 20 20 e7 20 28 53 25  | . S%....  . (S%|
000013b0  3c 3d 31 39 32 30 30 20  84 20 6e 65 77 68 61 72  |<=19200 . newhar|
000013c0  64 77 61 72 65 25 3d b9  29 20 80 20 53 25 3c 3e  |dware%=.) . S%<>|
000013d0  30 20 8c 0d 07 9e 28 20  20 20 20 f1 22 20 20 20  |0 ....(    ."   |
000013e0  20 20 20 20 20 20 54 72  79 69 6e 67 20 22 3b 53  |      Trying ";S|
000013f0  25 3b 22 62 70 73 2e 2e  2e 22 3b 0d 07 a8 24 20  |%;"bps...";...$ |
00001400  20 20 20 4a 25 3d a4 64  28 44 52 49 56 45 52 5f  |   J%=.d(DRIVER_|
00001410  54 58 53 50 45 45 44 2c  30 2c 53 25 2c 30 29 0d  |TXSPEED,0,S%,0).|
00001420  07 b2 24 20 20 20 20 4a  25 3d a4 64 28 44 52 49  |..$    J%=.d(DRI|
00001430  56 45 52 5f 52 58 53 50  45 45 44 2c 30 2c 53 25  |VER_RXSPEED,0,S%|
00001440  2c 30 29 0d 07 bc 11 20  20 20 20 f2 70 61 75 73  |,0)....    .paus|
00001450  65 28 33 29 0d 07 c6 17  20 20 20 20 f2 73 65 6e  |e(3)....    .sen|
00001460  64 28 22 41 54 22 2b bd  31 33 29 0d 07 d0 1b 20  |d("AT"+.13).... |
00001470  20 20 20 e7 20 a4 65 78  70 65 63 74 28 22 4f 4b  |   . .expect("OK|
00001480  22 2c 33 29 20 8c 0d 07  da 17 20 20 20 20 20 20  |",3) .....      |
00001490  f1 22 59 65 73 22 3a 4c  53 25 3d 53 25 0d 07 e4  |."Yes":LS%=S%...|
000014a0  09 20 20 20 20 cc 0d 07  ee 0f 20 20 20 20 20 20  |.    .....      |
000014b0  f1 22 4e 6f 22 0d 07 f8  09 20 20 20 20 cd 0d 08  |."No"....    ...|
000014c0  02 07 20 20 cd 0d 08 0c  09 fd 53 25 3d 30 0d 08  |..  ......S%=0..|
000014d0  16 45 f1 27 22 20 20 20  20 20 20 20 20 20 4d 61  |.E.'"         Ma|
000014e0  78 69 6d 75 6d 20 44 54  45 20 73 70 65 65 64 3a  |ximum DTE speed:|
000014f0  20 22 3b 4c 53 25 3b 22  62 70 73 2e 20 46 6f 72  | ";LS%;"bps. For|
00001500  20 62 65 73 74 20 70 65  72 66 6f 72 6d 61 6e 63  | best performanc|
00001510  65 2c 22 0d 08 20 39 f1  22 20 20 20 20 20 20 20  |e,".. 9."       |
00001520  20 20 73 65 74 20 79 6f  75 72 20 64 69 61 6c 20  |  set your dial |
00001530  73 74 6f 72 65 20 65 6e  74 72 69 65 73 20 74 6f  |store entries to|
00001540  20 74 68 69 73 20 72 61  74 65 2e 22 0d 08 2a 04  | this rate."..*.|
00001550  0d 08 34 1b e7 20 4c 53  25 3e 35 37 36 30 30 20  |..4.. LS%>57600 |
00001560  80 20 66 69 66 6f 25 3d  a3 20 8c 0d 08 3e 40 20  |. fifo%=. ...>@ |
00001570  20 f1 22 20 20 20 20 20  20 20 20 20 41 6c 74 68  | ."         Alth|
00001580  6f 75 67 68 20 79 6f 75  72 20 6d 61 63 68 69 6e  |ough your machin|
00001590  65 20 63 61 6e 20 62 65  20 73 65 74 20 74 6f 20  |e can be set to |
000015a0  74 68 69 73 20 72 61 74  65 2c 22 0d 08 48 40 20  |this rate,"..H@ |
000015b0  20 f1 22 20 20 20 20 20  20 20 20 20 69 74 20 64  | ."         it d|
000015c0  6f 65 73 20 6e 6f 74 20  68 61 76 65 20 61 20 46  |oes not have a F|
000015d0  49 46 4f 20 6c 69 6b 65  20 74 68 65 20 52 69 73  |IFO like the Ris|
000015e0  63 50 43 2f 41 37 30 30  30 2c 22 0d 08 52 40 20  |cPC/A7000,"..R@ |
000015f0  20 f1 22 20 20 20 20 20  20 20 20 20 61 6e 64 20  | ."         and |
00001600  73 6f 20 79 6f 75 20 6d  61 79 20 68 61 76 65 20  |so you may have |
00001610  74 6f 20 64 72 6f 70 20  74 68 65 20 73 70 65 65  |to drop the spee|
00001620  64 20 74 6f 20 35 37 36  30 30 22 0d 08 5c 2d 20  |d to 57600"..\- |
00001630  20 f1 22 20 20 20 20 20  20 20 20 20 69 66 20 79  | ."         if y|
00001640  6f 75 20 67 65 74 20 74  72 61 6e 73 66 65 72 20  |ou get transfer |
00001650  65 72 72 6f 72 73 2e 22  0d 08 66 05 cd 0d 08 70  |errors."..f....p|
00001660  04 0d 08 7a 21 4a 25 3d  a4 64 28 44 52 49 56 45  |...z!J%=.d(DRIVE|
00001670  52 5f 54 58 53 50 45 45  44 2c 30 2c 4c 53 25 2c  |R_TXSPEED,0,LS%,|
00001680  30 29 0d 08 84 21 4a 25  3d a4 64 28 44 52 49 56  |0)...!J%=.d(DRIV|
00001690  45 52 5f 52 58 53 50 45  45 44 2c 30 2c 4c 53 25  |ER_RXSPEED,0,LS%|
000016a0  2c 30 29 0d 08 8e 04 0d  08 98 3d f1 27 22 53 74  |,0).......=.'"St|
000016b0  61 67 65 20 36 3a 20 54  65 72 6d 69 6e 61 6c 20  |age 6: Terminal |
000016c0  6d 6f 64 65 20 2d 20 79  6f 75 20 63 61 6e 20 74  |mode - you can t|
000016d0  79 70 65 20 63 6f 6d 6d  61 6e 64 73 20 74 6f 20  |ype commands to |
000016e0  74 68 65 22 0d 08 a2 3f  f1 22 20 20 20 20 20 20  |the"...?."      |
000016f0  20 20 20 6d 6f 64 65 6d  20 68 65 72 65 20 69 66  |   modem here if|
00001700  20 79 6f 75 20 77 69 73  68 2c 20 6f 72 20 70 72  | you wish, or pr|
00001710  65 73 73 20 45 73 63 61  70 65 20 74 6f 20 65 78  |ess Escape to ex|
00001720  69 74 22 0d 08 ac 23 f1  27 22 2d 2d 2d 20 43 4f  |it"...#.'"--- CO|
00001730  4e 4e 45 43 54 45 44 20  54 4f 20 4d 4f 44 45 4d  |NNECTED TO MODEM|
00001740  20 2d 2d 2d 22 27 0d 08  b6 05 f5 0d 08 c0 1e 20  | ---"'......... |
00001750  20 4a 25 3d a4 64 28 44  52 49 56 45 52 5f 50 4f  | J%=.d(DRIVER_PO|
00001760  4c 4c 2c 30 2c 30 2c 30  29 0d 08 ca 24 20 20 e7  |LL,0,0,0)...$  .|
00001770  20 a4 64 28 44 52 49 56  45 52 5f 43 48 45 43 4b  | .d(DRIVER_CHECK|
00001780  52 58 2c 30 2c 30 2c 30  29 3e 30 20 8c 0d 08 d4  |RX,0,0,0)>0 ....|
00001790  23 20 20 20 20 4a 25 3d  a4 64 28 44 52 49 56 45  |#    J%=.d(DRIVE|
000017a0  52 5f 47 45 54 42 59 54  45 2c 30 2c 30 2c 30 29  |R_GETBYTE,0,0,0)|
000017b0  0d 08 de 24 20 20 20 20  e7 20 4a 25 3e 33 31 20  |...$    . J%>31 |
000017c0  84 20 4a 25 3d 31 30 20  84 20 4a 25 3d 31 33 20  |. J%=10 . J%=13 |
000017d0  ef 20 4a 25 0d 08 e8 07  20 20 cd 0d 08 f2 11 20  |. J%....  ..... |
000017e0  20 e7 20 96 28 2d 31 29  3e 30 20 8c 0d 08 fc 23  | . .(-1)>0 ....#|
000017f0  20 20 20 20 4a 25 3d a4  64 28 44 52 49 56 45 52  |    J%=.d(DRIVER|
00001800  5f 50 55 54 42 59 54 45  2c 30 2c a5 2c 30 29 0d  |_PUTBYTE,0,.,0).|
00001810  09 06 07 20 20 cd 0d 09  10 07 fd 20 30 0d 09 1a  |...  ...... 0...|
00001820  04 0d 09 24 04 0d 09 2e  05 e0 0d 09 38 04 0d 09  |...$........8...|
00001830  42 2f dc 20 31 32 30 30  2c 32 34 30 30 2c 39 36  |B/. 1200,2400,96|
00001840  30 30 2c 31 39 32 30 30  2c 33 38 34 30 30 2c 35  |00,19200,38400,5|
00001850  37 36 30 30 2c 31 31 35  32 30 30 2c 30 0d 09 4c  |7600,115200,0..L|
00001860  04 0d 09 56 14 dd f2 6c  6f 61 64 64 72 69 76 65  |...V...loaddrive|
00001870  72 28 64 24 29 0d 09 60  2e 20 20 ff 28 22 4c 6f  |r(d$)..`.  .("Lo|
00001880  61 64 20 3c 53 65 72 54  65 73 74 24 44 69 72 3e  |ad <SerTest$Dir>|
00001890  2e 22 2b 64 24 2b 22 20  22 2b c3 7e 64 72 69 76  |."+d$+" "+.~driv|
000018a0  65 72 29 0d 09 6a 24 20  20 4a 25 3d a4 64 28 44  |er)..j$  J%=.d(D|
000018b0  52 49 56 45 52 5f 49 4e  49 54 49 41 4c 49 53 45  |RIVER_INITIALISE|
000018c0  2c 30 2c 30 2c 30 29 0d  09 74 0f 20 20 e7 20 4a  |,0,0,0)..t.  . J|
000018d0  25 3c 3e 30 20 8c 0d 09  7e 0f 20 20 20 20 65 72  |%<>0 ...~.    er|
000018e0  72 24 3d 22 22 0d 09 88  09 20 20 20 20 f5 0d 09  |r$=""....    ...|
000018f0  92 14 20 20 20 20 20 20  65 72 72 24 2b 3d bd 3f  |..      err$+=.?|
00001900  4a 25 0d 09 9c 0f 20 20  20 20 20 20 4a 25 2b 3d  |J%....      J%+=|
00001910  31 0d 09 a6 0f 20 20 20  20 fd 20 3f 4a 25 3d 30  |1....    . ?J%=0|
00001920  0d 09 b0 31 20 20 20 20  f1 20 22 45 72 72 6f 72  |...1    . "Error|
00001930  20 77 68 65 6e 20 69 6e  69 74 69 61 6c 69 73 69  | when initialisi|
00001940  6e 67 20 64 72 69 76 65  72 3a 20 22 3b 65 72 72  |ng driver: ";err|
00001950  24 0d 09 ba 09 20 20 20  20 e0 0d 09 c4 07 20 20  |$....    .....  |
00001960  cd 0d 09 ce 05 e1 0d 09  d8 04 0d 09 e2 0e dd f2  |................|
00001970  73 65 6e 64 28 64 24 29  0d 09 ec 12 20 20 e3 20  |send(d$)....  . |
00001980  41 25 3d 31 20 b8 20 a9  64 24 0d 09 f6 2c 20 20  |A%=1 . .d$...,  |
00001990  20 20 4a 25 3d a4 64 28  44 52 49 56 45 52 5f 50  |  J%=.d(DRIVER_P|
000019a0  55 54 42 59 54 45 2c 30  2c 97 c1 64 24 2c 41 25  |UTBYTE,0,..d$,A%|
000019b0  2c 31 29 2c 30 29 0d 0a  00 07 20 20 ed 0d 0a 0a  |,1),0)....  ....|
000019c0  05 e1 0d 0a 14 04 0d 0a  1e 13 dd a4 65 78 70 65  |............expe|
000019d0  63 74 28 64 24 2c 54 25  29 0d 0a 28 0b ea 20 4d  |ct(d$,T%)..(.. M|
000019e0  25 2c 44 25 0d 0a 32 0a  20 20 4d 25 3d 31 0d 0a  |%,D%..2.  M%=1..|
000019f0  3c 0a 20 20 44 25 3d a3  0d 0a 46 15 20 20 54 25  |<.  D%=...F.  T%|
00001a00  3d 28 28 54 25 2a 31 30  30 29 2b 91 29 0d 0a 50  |=((T%*100)+.)..P|
00001a10  07 20 20 f5 0d 0a 5a 23  20 20 20 20 4a 25 3d a4  |.  ...Z#    J%=.|
00001a20  64 28 44 52 49 56 45 52  5f 47 45 54 42 59 54 45  |d(DRIVER_GETBYTE|
00001a30  2c 30 2c 30 2c 30 29 0d  0a 64 12 20 20 20 20 e7  |,0,0,0)..d.    .|
00001a40  20 4a 25 3c 3e 2d 31 20  8c 0d 0a 6e 1b 20 20 20  | J%<>-1 ...n.   |
00001a50  20 20 20 e7 20 4a 25 3d  97 c1 64 24 2c 4d 25 2c  |   . J%=..d$,M%,|
00001a60  31 29 20 8c 0d 0a 78 11  20 20 20 20 20 20 20 20  |1) ...x.        |
00001a70  4d 25 2b 3d 31 0d 0a 82  1b 20 20 20 20 20 20 20  |M%+=1....       |
00001a80  20 e7 20 4d 25 3e a9 64  24 20 8c 20 44 25 3d b9  | . M%>.d$ . D%=.|
00001a90  0d 0a 8c 0b 20 20 20 20  20 20 cc 0d 0a 96 26 20  |....      ....& |
00001aa0  20 20 20 20 20 20 20 e7  20 4a 25 3d 97 c0 64 24  |       . J%=..d$|
00001ab0  2c 31 29 20 8c 20 4d 25  3d 32 20 8b 20 4d 25 3d  |,1) . M%=2 . M%=|
00001ac0  31 0d 0a a0 0b 20 20 20  20 20 20 cd 0d 0a aa 09  |1....      .....|
00001ad0  20 20 20 20 cd 0d 0a b4  11 20 20 fd 20 44 25 20  |    .....  . D% |
00001ae0  84 20 91 3e 54 25 0d 0a  be 08 3a 3d 44 25 0d 0a  |. .>T%....:=D%..|
00001af0  c8 04 0d 0a d2 0f dd f2  70 61 75 73 65 28 54 25  |........pause(T%|
00001b00  29 0d 0a dc 12 20 20 54  25 3d 28 54 25 2a 31 30  |)....  T%=(T%*10|
00001b10  29 2b 91 0d 0a e6 0c 20  20 f5 fd 91 3e 54 25 0d  |)+.....  ...>T%.|
00001b20  0a f0 05 e1 0d 0a fa 04  0d 0b 04 05 e0 0d 0b 0e  |................|
00001b30  04 0d 0b 18 14 dd a4 64  28 41 25 2c 42 25 2c 43  |.......d(A%,B%,C|
00001b40  25 2c 44 25 29 0d 0b 22  0f 3a 3d ba 28 64 72 69  |%,D%)..".:=.(dri|
00001b50  76 65 72 29 0d ff                                 |ver)..|
00001b56