Listing of file='ALTHACK3' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'
# Sector 2542, program filename = 'ALTHACK3'
0010 REM "\A0\A0\A0\A0\A0\A0\A0\A0" QUANTUM UTILITY
0020 REM AUTHOR - Roger M. Kirk Jr. - 07/28/81
0030 REM REVISION - Roger M. Kirk Jr. - 07/29/81 - 10;30
0035 REM LAST REVISION - Max Blomme. - 01/22/82 - 1615
0040 REM
0050 REM *********************************************************************
0060 REM READS ALTERNATE SECTOR MAP AND DISPLAYS BAD SECTORS FOR QUANTUM CORP.
0070 REM EVALUATION
0080 REM *********************************************************************
0090 REM
0100 DIM A$3
: REM SELECT #1 VARIABLE
0110 DIM A1$2
: REM MATSEARCH LOCATOR VARIABLE
0120 DIM G$10
: REM $GIO ARG 2
0130 DIM K$1
: REM KEYIN VARIABLE
0140 DIM A$(86)3
: REM READ ARRAY FOR ALTERNATE MAP
0150 DIM A1$(86)2,A2$(86)2
: REM WORK AND LOCATOR ARRAY FOR SORTING A$()
0155 DIM E$(20)2
: REM STATUS AND ERROR INFO
0160 I=0
: REM POINTER FOR SORTED ARRAY
0170 J=0
: REM FOR/NEXT COUNTER VARIABLE
0180 L=0
: REM LINE COUNTER FOR SCREEN PRINT
0190 L1=15
: REM SIZE OF LIST IN LINES
0200 O=0
: REM OFFSET IF NUMBERING CYLINDERS AND HEADS SHOULD BESIRED TO START AT OT
HER THAN THE TRADITIONAL 0 (READ ZER0).
0210 O1=1
: REM OFFSET IF NUMBERING BYTES IN THE SECCTOR SHOULD BESIRED TO START AT O
THER THAN THE TRADITIONAL 1.
0220 O2=0
: REM PLATTER X 4 = # OF HEADS OFFSET FOR SECOND LOGICAL PLATTER.
0230 S=0
: REM BINARY SECTOR NUMBERS ARE CONVERTED TO NUMERIC IN THIS VARIABLE
0240 PRINT HEX(0D03);AT(2,0);"WINCHESTER ALTERNATE SECTOR MAP DISPLAY";AT(4,0)
;
0250 A$="D"
0260 LINPUT "DRIVE ADDRESS ",-A$
0270 MAT SEARCH "D11 D12 D21 D22 D31 D32 ",=STR(A$) TO A1$ STEP 4
0280 IF A1$<>HEX(0000) THEN 300
0290 PRINT HEX(07);"ILLEGAL DEVICE ADDRESS - TRY AGAIN"
: FOR J = 1 TO 6000
: NEXT J
: GOTO 240
0300 SELECT #1<A$>
0305 G$=ALL(01)
: IF STR(A$,3,1)="2"THEN STR(G$,,1)=HEX(21)
: ELSE STR(G$,,1)=HEX(20)
: $GIO GET NUMBER OF SECTORS AND CHECK IF LVP #1(4401 1020 70A0 4002 88D0 7
040 6A10 6816 4000 8705 1A00 C340,G$)G$;STR(E$(),,VAL(STR(G$,5,1)))
: IF STR(E$(),,2)<>"18"THEN STOP "NOT AN LVP"
: S=VAL(STR(E$(),7,2),2)+32
0310 $GIO ENABLE READING EXTRA SECTORS #1(4501 0600 0700 70A0 4002 88D0 7040 6
A10 6817 4000,G$)
0320 PRINT HEX(0D03);AT(0,23);BOX(1,32);AT(0,25);"ALTERNATE MAP FOR PLATTER ";
A$
0330 DATA LOAD BA T#1, (S) A$()
0340 PRINT AT(2,0);BOX(1,14);BOX(1,79);
0350 PRINTUSING 380
0360 PRINT AT(3,0);BOX(1,79);BOX(1,14);
0365 PRINT AT(3,0);BOX(0,-14)
0370 PRINTUSING 390,"#"
0380 % WANG WINCHESTER
0390 % SECTOR # CYLINDER HEAD SECTOR START BYTE END
BYTE
0400 % BYTE BYTE
0410 % ##### ### # ## ##### ##
###
0420 PRINT
0430 MAT SORT A$() TO A1$(),A2$()
0440 L=0
: REM INITIALIZE LINE COUNTER
0450 O2=(POS("12"=STR(A$,3,1))-1)*4
0460 FOR J = 1 TO 85
0470 I=VAL(A2$(J),2)
0480 IF STR(A$(I),1,1)=HEX(FF) THEN GOTO 570
0490 IF L<L1 THEN 520
0500 PRINT AT(23,25,54);"HIT ANY KEY FOR MORE OF THE LIST";
0510 KEYIN K$
: L=0
0520 IF L>0 THEN 540
0530 PRINT HEX(06);AT(5,0,L1*80);
0540 S=VAL(STR(A$(I),2,2),2)
0550 IF STR(E$(),7,2)=HEX(FF80)OR STR(E$(),7,2)=HEX(7F80)THEN PRINTUSING 410,S
,O+INT(S/128),O+O2+INT((MOD(S,128))/32),O+MOD(S,32),O1+((MOD(S,32))*318),
O1+((MOD(S,32))*318)+317
: IF STR(E$(),7,2)=HEX(3FC0)THEN PRINTUSING 410,S,O+INT(S/64),O+O2+INT((MOD
(S,64))/32),O+MOD(S,32),O1+((MOD(S,32))*318),O1+((MOD(S,32))*318)+317
0555 IF STR(E$(),7,2)=HEX(1FC0)THEN PRINTUSING 410,S,O+INT(S/32),O+O2+INT((MOD
(S,32))/32),O+MOD(S,32),O1+((MOD(S,32))*318),O1+((MOD(S,32))*318)+317
0560 L=L+1
0570 NEXT J
0580 PRINT AT(23,18,61);"END OF THE LIST - HIT ANY KEY TO RUN AGAIN";
0590 KEYIN K$
: GOTO 240