1 ' 2 ' I/O CONFIGURATION UTILITY 3 ' 4 ' COPYRIGHT (C) 1980 MICROSOFT (NK) 5 ' 6 ' REVISED 11/12/80' 7 ' 8 ' Vista A800 patch added by 9 ' Randy Ubillos 10 ' Byte Shop of Miami 11 ' 12 ' 13 HOME:VTAB 12:PRINT " Initializing.";:RESET:PRINT".";:GOSUB 172 14 TEXT:HOME:VTAB 4:PRINT TAB(4)"++ I/O CONFIGURATION PROGRAM ++" 15 PRINT:PRINT:PRINT" 1. Configure External Terminal":PRINT 16 PRINT" 2. Redefine Keyboard Characters":PRINT 17 PRINT" 3. Load User I/O Driver Software":PRINT 18 PRINT" 4. Read/Write I/O Configuration Block":PRINT 19 PRINT" Q. Quit Program":PRINT 20 PRINT:PRINT:PRINT"Select - "; 21 GOSUB 161: IF A$="Q" THEN HOME:END 22 Q=ASC(A$)-48:IF Q<1 OR Q>4 THEN 21 23 ON Q GOTO 67,24,99,123 24 CTRL=1:HOME:VTAB 3:PRINT" ++ Keyboard Character Redefinition ++":VTAB 6:GOSUB 63 25 VTAB 20:PRINT "Add/Delete/Quit (A/D/Q) - ";:HTAB POS(0)-1:GOSUB 161:PRINT A$ 26 IF A$="Q" THEN 14 27 IF A$="A" THEN 28 ELSE IF A$="D" THEN 34 ELSE 25 28 GOSUB 59:CH1=CH 29 PTR=NC*2:FOR I=0 TO NC*2-1 STEP 2:IF PEEK(&HF3AC+I)=CH1 THEN PTR=I 30 NEXT:IF PTR=12 THEN PRINT:PRINT:PRINT "No Room":GOTO 25 31 VTAB 13:HTAB 19:PRINT STRING$(8," ");:HTAB 16:INPUT"-> ",A$:GOSUB 163:IF CH=-1 THEN 31 32 POKE &HF3AC+PTR,CH1:POKE &HF3AD+PTR,CH 33 GOTO 24 34 IF NC=0 THEN VTAB 17:PRINT "None to Delete":GOTO 25 35 GOSUB 59:PTR=-1:FOR I=0 TO NC*2-1 STEP 2:IF CH=PEEK(&HF3AC+I) THEN PTR=I 36 NEXT:IF PTR=-1 THEN VTAB 17:PRINT"Not There":GOTO 25 37 IF PTR<10 THEN FOR I=PTR TO 9:POKE &HF3AC+I,PEEK(&HF3AE+I):NEXT 38 POKE &HF3AA+NC*2,255 39 GOTO 24 40 PRINT" Function Software Hardware":PRINT 41 CTRL=0 42 HLD=PEEK(&HF3A2):SLD=PEEK(&HF397) 43 FOR I=0 TO 8:PRINT FUN$(I);:HTAB 15:PRINT " : "; 44 CH1=PEEK(&HF398+I):IF CH1>127 THEN CH1=CH1-128:CH=SLD:GOSUB 154 45 CH=CH1:HTAB 22:GOSUB 154 46 HTAB 27:PRINT"--> "; 47 CH1=PEEK(&HF3A3+I):IF CH1>127 THEN CH1=CH1-128:CH=HLD:GOSUB 154 48 CH=CH1:HTAB 35:GOSUB 154 49 PRINT 50 IF I=6 THEN GOSUB 54 51 NEXT 52 PRINT 53 RETURN 54 PRINT "XY Coord Offst : "PEEK(&HF396) MOD 128;:HTAB 27:PRINT"--> "PEEK(&HF3A1) MOD 128 55 PRINT "XY Xmit Order : "; 56 IF PEEK(&HF396)<127 THEN PRINT "YX"; ELSE PRINT "XY"; 57 HTAB 27:PRINT"--> ";:IF PEEK(&HF3A1)<127 THEN PRINT "YX" ELSE PRINT "XY" 58 RETURN 59 VTAB 13:PRINT STRING$(15," "):VTAB 13:INPUT"Char: ",A$:GOSUB 163:IF CH=-1 THEN 59 60 RETURN 61 IF CH$="RUB" THEN CH=127:RETURN 62 FOR I=0 TO 32:IF CH$=MID$(CTRL$,I*3+1,3) THEN CH=I:NEXT 63 NC=0 64 CH=PEEK(&HF3AC+NC*2):IF CH>127 OR NC=6 THEN RETURN 65 PRINT" ";:GOSUB 154:PRINT TAB(15)" -> ";:CH=PEEK(&HF3AD+NC*2):GOSUB 154:PRINT 66 NC=NC+1:GOTO 64 67 CTRL=0:HOME:PRINT "+ Terminal Screen Function Definition +":PRINT 68 GOSUB 40 69 PRINT TAB(8)"1. Soroc IQ 120":PRINT TAB(8)"2. Hazeltine 1500":PRINT TAB(8)"3. Datamedia":PRINT TAB(8)"4. Other":PRINT TAB(8)"Q. Quit":PRINT 70 HTAB 6:PRINT"Select - "; 71 GOSUB 161:IF A$="Q" THEN GOTO 14 72 Q=ASC(A$)-48:IF Q<1 OR Q>4 THEN 70 73 IF Q=4 THEN 81 74 PRINT:Q=Q-1:VTAB 23:PRINT "Software or Hardware (S/H)? "; 75 GOSUB 161:IF A$<>"S" AND A$<>"H" THEN 75 76 OFF=0:IF A$="H" THEN OFF=11 77 FOR I=0 TO 10:POKE &HF396+OFF+I,SF(Q,I):NEXT 78 GOTO 67 79 ' 80 GOTO 67 81 HOME:PRINT TAB(4)"++ Screen Function Definition ++":VTAB 4 82 PRINT TAB(5)"1 - Lead-in char" 83 J=0:FOR I=0 TO 8:PRINT TAB(4)I+2;:PRINT TAB(8)"- "FUN$(I):NEXT 84 PRINT TAB(5)"Q - Quit" 85 PRINT:VTAB 17:INPUT "Select - ",A$:IF A$="Q" OR A$="q" THEN 67 ELSE Q=VAL(A$):IF Q<1 OR Q>10 THEN 85 86 VTAB 17:IF Q=1 THEN PRINT "Lead-in char :"; ELSE PRINT FUN$(Q-2)TAB(15)": "; 87 INPUT "",A$:GOSUB 163:IF CH=-1 THEN VTAB 17:PRINT STRING$(30," "):GOTO 86 88 IF Q=8 THEN GOSUB 96 89 IF Q=1 THEN 91 ELSE PRINT:VTAB 20:PRINT "Require Lead-in (Y/N)? ";:GOSUB 161:IF A$<>"Y" AND A$<>"N" THEN 89 90 PRINT A$:IF A$="Y" THEN CH=CH+128 91 VTAB 21:PRINT "Software or Hardware (S/H)? ";:GOSUB 161:IF A$<>"S" AND A$<>"H" THEN 91 ELSE SHNDX=0:IF A$="H" THEN SHNDX=11 92 POKE &HF397+Q-1+SHNDX,CH 93 IF Q=8 THEN POKE &HF396+SHNDX,OFFST+ORD 94 GOTO 81 95 END 96 VTAB 18:INPUT "XY Coord Offst : ",OFFST:IF OFFST<0 OR OFFST>127 THEN 96 97 VTAB 19:INPUT "XY Xmit Order : ",A$:GOSUB 159:IF A$<>"XY" AND A$<>"YX" THEN 97 ELSE ORD=0:IF A$="XY" THEN ORD=128 98 RETURN 99 HOME:PRINT TAB(6)"++ Load User I/O Driver Software ++" 100 VTAB 4:LINE INPUT "Source File Name? ",F$:IF LEN(F$)=0 THEN 14 ELSE G$=".COM":FOR I=1 TO LEN(F$):IF MID$(F$,I,1)="." THEN G$="" 101 NEXT:F$=F$+G$ 102 PRINT:PRINT:PRINT "Loading.";:OPEN "R",1,F$:FIELD 1,128 AS B$ 103 PTR=0:GET 1,1 104 RCRD=1:BASE=VARPTR(#1):PTR=BASE:NP=PEEK(PTR) 105 IF NP=0 THEN CLOSE:PRINT:PRINT "Bad file format":FOR I=0 TO 700:NEXT:GOTO 14 106 DEST=FNPEK(PTR+1):LN=FNPEK(PTR+3):PTR=PTR+5 107 FF=0:FOR I=1 TO NP:J=PEEK(PTR):IF J<1 OR J>2 THEN PRINT:PRINT:PRINT"Bad file format":FOR I=1 TO 600:NEXT:CLOSE:GOTO 14 108 IF J=1 AND PEEK(PTR+1)=1 THEN POKE LBYT,RETL:POKE HBYT,RETH:POKE PADR,&H80:K=USR3(0) 109 IF J=1 THEN 111 110 PTR=PTR+2:J=&HF37F+PEEK(PTR-1)*2:IF PEEK(J)>=&HF2 THEN FF=1 111 PTR=PTR+4:NEXT 112 IF FF=1 THEN PRINT:PRINT:PRINT "WARNING: A patch has already been made":PRINT"Continue anyway (Y/N)? ";:GOSUB 161:IF A$="Y" THEN 113 ELSE CLOSE:GOTO 14 113 FOR I=DEST TO DEST+LN-1 114 POKE I,PEEK(PTR):PTR=PTR+1:IF PTR-BASE>127 THEN PTR=BASE:RCRD=RCRD+1:GET 1,RCRD 115 IF PTR MOD 10=0 THEN PRINT "."; 116 NEXT:IF RCRD>1 THEN GET 1,1 117 PTR=BASE+5:FOR P=1 TO NP 118 IF PEEK(PTR)=1 THEN POKE PADR,PEEK(PTR+1)*2+126:POKE LBYT,PEEK(PTR+2):POKE HBYT,PEEK(PTR+3):J=USR3(0):PTR=PTR+4:GOTO 122 119 J=&HF37E+PEEK(PTR+1)*2:K=FNPEK(PTR+2) 120 POKE K,PEEK(J):POKE K+1,PEEK(J+1) 121 POKE LBYT,PEEK(PTR+4):POKE HBYT,PEEK(PTR+5):POKE PADR,J-&HF300:I=USR3(0):PTR=PTR+6 122 NEXT:PRINT:PRINT:PRINT"Operation complete":FOR I=0 TO 800:NEXT:CLOSE:GOTO 14 123 HOME:VTAB 2:PRINT"+ Read/Write I/O Configuration Block +" 124 VTAB 5:PRINT"Read or Write (R/W)? "; 125 GOSUB 161:IF A$<>"R" AND A$<>"W" THEN 14 126 PRINT A$ 127 B$=A$ 128 VTAB 7:IF B$="R" THEN PRINT "Source"; ELSE PRINT "Destination"; 129 PRINT" Drive (A:-F:)? ";:HTAB POS(0)-2 130 GOSUB 161:PRINT A$;:D$=A$:GOSUB 161:PRINT A$ 131 IF A$<>":" OR D$<"A" OR D$>"F" THEN 128 132 VTAB 10:PRINT"Is drive A an eight inch drive? ";:HTAB POS(0)-2:GET A$:PRINT A$:IF A$<>"Y" AND A$<>"N" THEN 132 133 IF A$="N" THEN IF D$<"C" THEN GOTO 144 ELSE D$=CHR$(ASC(D$)-2) 134 IF D$="E" OR D$="F" THEN D$=CHR$(ASC(D$)-4):GOTO 144 135 FOR A=0 TO 11:VL%(A)=PEEK(&HF3E0+A):NEXT 136 ROM=&HC5FA:POKE &HF3E0,0:POKE &HF3E1,21:POKE &HF3E4,ASC(D$)-ASC("A")+1 137 PRINT:PRINT:PRINT:PRINT"Insert disk and hit any key ";:A$=INPUT$(1):PRINT:PRINT:PRINT"Working..."; 138 POKE &HF3E6,5*16:POKE &HF3E8,0:POKE &HF3E9,&H2:IF B$="W" THEN POKE &HF3EB,2 ELSE POKE &HF3EB,1 139 POKE &HEFFF,0 140 CALL %ROM:IF PEEK(&HF3EA)<>0 THEN GOTO 141 ELSE POKE &HF3E1,20:POKE &HF3E9,&H3:CALL %ROM 141 POKE &HEFFF,0:ER=PEEK(&HF3EA) 142 FOR A=0 TO 11:POKE &HF3E0+A,VL%(A):NEXT 143 GOTO 150 144 DRV=ASC(D$)-65:POKE &HF3E4,(DRV+1) MOD 2:POKE &HF3E6,&H60-(DRV\2)*16 145 DS=USR0(DRV):IF DS=0 THEN PRINT:PRINT"Invalid drive":GOTO 128 146 IF USR0(0)<>USR0(DRV) THEN PRINT:PRINT"Can't read/write - RW13 in effect" 147 PRINT:PRINT"Insert disk and hit any key ";:A$=INPUT$(1):PRINT:PRINT:PRINT"Working..."; 148 IF B$="R" THEN ER=USR1(0) ELSE ER=USR2(0) 149 I=USR0(PEEK(4)) 150 PRINT:PRINT:IF ER=16 THEN PRINT "Disk write protected":GOTO 153 151 IF ER=0 THEN 14 152 PRINT"Disk I/O error" 153 FOR I=0 TO 500:NEXT:GOTO 14 154 IF CH<33 THEN IF CTRL THEN PRINT "Ctrl-"CHR$(CH+64);:RETURN ELSE PRINT MID$(CTRL$,CH*3+1,3);:RETURN 155 IF CH=126 THEN PRINT "7EH";:RETURN 156 IF CH=127 THEN PRINT"RUB";:RETURN 157 IF CH>96 AND LC=0 THEN PRINT "LC- " CHR$(CH-32);:RETURN 158 PRINT " "CHR$(CH);:RETURN 159 FOR I=1 TO LEN(A$):J=ASC(MID$(A$,I,1)):IF J>96 THEN MID$(A$,I,1)=CHR$(J-32) 160 NEXT:RETURN 161 A$=INPUT$(1):J=ASC(A$):IF J>96 THEN A$=CHR$(J-32) 162 RETURN 163 CH=-1:IF LEN(A$)=0 THEN RETURN 164 IF LEN(A$)=1 THEN CH=ASC(A$):RETURN 165 IF ASC(A$)=ASC("&") THEN CH=VAL(A$) MOD 128:RETURN 166 GOSUB 159 167 IF LEFT$(A$,5)="CTRL-" THEN CH=ASC(MID$(A$,6,1))-64:RETURN 168 LSET F$=A$:IF F$="RUB" THEN CH=127:RETURN 169 FOR I=0 TO 32:IF F$=MID$(CTRL$,I*3+1,3) THEN CH=I 170 NEXT 171 RETURN 172 DEFINT A-Z:CTRL$="NULSOHSTXETXET ENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US SP " 173 DEF FNPEK(X)=PEEK(X)+(PEEK(X+1)+(PEEK(X+1)>127)*256)*256 174 DIM FUN$(8):FOR I=0 TO 8:READ FUN$(I):NEXT 175 PRINT".";:FOR I=1 TO 29:READ J:SZ$=SZ$+CHR$(J):NEXT 176 MID$(SZ$,2)=CHR$(PEEK(&H103)):MID$(SZ$,3)=CHR$(PEEK(&H104)):MID$(SZ$,7)=CHR$(PEEK(&H107)) 177 PRINT".";:FOR I=1 TO 85:READ J:RD$=RD$+CHR$(J):NEXT:WR$=RD$ 178 OLDDRV=PEEK(&HF3E4)-1+(6-PEEK(&HF3E6)/16)*2 179 PRINT "."; 180 FOR I=0 TO 13:READ J:POKE 16+I,J:NEXT 181 PRINT".";:MID$(WR$,16)=CHR$(2) 182 FOR I=1 TO 7:READ J:DP$=DP$+CHR$(J):NEXT 183 RET$=CHR$(&HAF)+CHR$(&HC9) 184 I=FRE(""):DEF USR0=FNPEK(VARPTR(SZ$)+1) 185 DEF USR1=FNPEK(VARPTR(RD$)+1):POKE 20,PEEK(&HF3C7):POKE 25,PEEK(&HF3C8) 186 DEF USR2=FNPEK(VARPTR(WR$)+1) 187 DIM VL%(12) 188 I=FNPEK(VARPTR(DP$)+1):DEF USR3=I:LBYT=I+1:HBYT=I+2:PADR=I+4:F$=" " 189 RETL=PEEK(VARPTR(RET$)+1):RETH=PEEK(VARPTR(RET$)+2) 190 DIM SF(2,10):FOR I=0 TO 2:FOR J=0 TO 10:READ SF(I,J):NEXT:NEXT 191 LC=1:IF PEEK(&HF3DD)=32 AND PEEK(&HF3BB)=0 THEN LC=0 192 IF PEEK(&HF3BB)=0 THEN HOME:VTAB 4:PRINT"CAN YOUR APPLE DISPLAY LOWER CASE?":PRINT " Y/N- ";:GOSUB 161:PRINT A$:IF A$="Y" THEN LC=1:POKE &HF3DD,0 ELSE LC=0:POKE &HF3DD,32 193 RETURN 194 DATA Clear screen,Clr to EOS,Clr to EOL,Lo-Lite text,Hi-Lite text,Home Cursor,Address Cursor,Cursor Up,Cursor Forward 195 DATA 205,0,0,77,205,27,218,124,183,40,12,17,10,0,25,94,35,86,26,31 ,38,0,111,229,42,5,1,227,201 196 DATA 42,222,243,229,6,8,33,184,243,126,245,35,16,251,62,1 ,50,235,243,33,16,16,34,208,243,33 197 DATA 0,9,34,224,243,38,2,34,232,243,68,42,222,243,119,58,234,243,183,32,10 ,33,225,243,52,33,233,243,52,16 198 DATA 236,6,8,33,191,243,209,114,43,16,251,225,34,222,243,111,38 ,0,62,8,50,233,243,229,42,5 199 DATA 1,227,201,32,3,14,169,0,141,199,3,169,0,141,200,3,96 200 DATA 33,0,0,34,0,&HF3,201 201 DATA 32,27,170,217,212,169,168,30,189,11,12 202 DATA 128,126,156,152,143,153,159,146,145,140,16 203 DATA 160,0,12,11,29,14,15,25,30,31,28 ,217,212,169,168,30,189,11,12 202 DATA 128,126,156,152,143,153,159,146,145,140,16 203 DATA 1