{F@͂$n ood;+2=: >2=;+_+>_+:r@/o:<;+}2r@2=;+>2<;+2<;+>2<ͩ(2!=w#"$=:<ģ,+:=» *+=+3N,N=2=*+=~#"+=!, (—# '—O —'—# )—: :<:=Z,>=!B?G~¯w#f,pͶ, /—O Į,/—: #~¯~$w'+"=>2=!"=Ö&>2=:=O , ,~w#~d,~w,,͗,wͯ,~@@~w#w#w#wO ~Ի#~%-Ļ,"(=T-:=2=Ux©x 2=*(="$= x.h :>"(=~w|2=T-x©*(=,#~¯~@ w#s#r#*=s#r.zK:?\/:<č/!<4~=A.!B?~-!>~-!@#B?~# - -- - -!;?p#"$=ͣ'!N"@; (."$=~w#~@P/~.#^#Vͣ.*= ͣ *={ģn*+=h %!"="=}2=j!/!W?>|;T:=8j!=44!/!?>|;T͙/*<|ʭ.:@<2@?2@?ó.!1/͵/!4/͵/*<|.>,8L:@<>,İJ:@<2@?2@?!D/͵/͙/.}ͣ*>|/+.ͣ:q@(/8L>8L͝KKNo Fatal injuries Warning(s):=Gͣ.Ͳ/!k/͵/#Ù/REPT/IRP/IRPC/MACROUnterminated Ͳ/!/͵/#> T> T:@<> ͰJ> ðJ!/:@<ñFConditionalSymbols: Macros: !9*@͇ 3:?!"@" @*?0*@+<2?2?2?*@$͇ #0"?%4;0~<=W0:?<2?:?:?=2?<#~C0:?C0:?C07"?:?=2? &¶0*+=~ ʴ0 ʴ0O 0"+=´0>&2?#1&¶0:?»0>& :2?*?~0=0O+0 0x+~00:?*?~!1=1O+1 1x+~10<*+=O 0\1G~# A1 I1Ͷ051xͶ0G¨0&¨00 "+= u1 u10 {1Ͷ0b1ͫ P1Ê1ͫ P1Ͷ0Ä1 ;ʬ1Þ1ͫ:Ͷ0 ʃ: Þ1ͫ:ͫ: ʯ1 ʯ1:" @ʃ: ʃ:> :Ã::?1*@4.2*?~2G+2~/_1~+2=G+~+2ͽ32+<=(2+ 2~>.ͽ3ͽ3?*?O DEO g2=ʋ3%ʸ2,ʕ3 ʕ3 ʕ3;ʕ3!# ʲ3w+ y2"`3V3ͩ(:= 3:<32PX 2|2>:K3)073>)3073=23D#3E#3 >0K3x,3x0:73 K30O:K3>0K3y*`3w+"`30 *`3ò2Ow+ t3 ʷ3c3w+ c3y2ʇ3w+ò2ʲ23ð2°2{=*+=+~ 0 0 ʚ3Ú3!=͇ 3#6 +#1&3:#1!  3#1!3l ?Stack overflow, try more P switches ͩ(:= 44"?/H4> VC4O :O -0i4-= : ^4ɯ :̓:!*@*?!!44͇ º4:?£4xº4*?y9o02?*?W:4-=m:ͽ3 4*?*?*?"?"?"? bkÐ4:?2?5ů2?: û:?o5O :O O\ C5yK5y S5y@`5:?=2?:?<2?:?:<(:?#~>5)!ɷ/"?N2O:= ʕ5*?o0y6+,ė5# <ėw+:= ,6G5q2 )6>,65 <2? ë5 "6:?6,6 ;,6<6>6,666 w+5:?,66+0xė"?&i"?R6A4>y5C4* @>2?3-0ʖ6 ʛ1;ʐ1'ʆ6"ʆ6#1l6Gz0 ʛ1ʀ6Ç6" @ :̓:!*@*?*?!!64>2?"?͇ 6:?6x6*?##~#6+æ4W:7-=W:1:ͽ3 6*?4 bk6 ʗOͰJ# ;7ͰJ,7> ͰJ> ͰJ:= : ʗ2?O i7: Z7r7A4C4!-=:?O~ʊ7 #~7!ɷ #"?~(w/"?N2 ,ʨ7w+2?2?w#w͔9 :s#r:"@*@͋9s#r{_* @{̟9*@w{<:F:" @{_͔9zʟ9*@}g:}o~W:{|:F:{_͔9{ȯw#w*@s#ry9*@͋9q#p* @{:*@" @~{_͋9{_{:F:*@*?:?:*@%99i zi W{_*@*@99BK*@"@x*;+w ;"@4;ô9*&=*@99i zi W{_*@99BK*@*&="@ "@xz; w#m;2>2>O!^#V#͜;…;:>Tz^#V{¥;};++V+^{ʯ;w#w+++å; F#"$=~@#~Ĺ<~#^#VG<ͥ<_d<{j<{@u<{m<{_!`~8L_<###~#8L <>1<5R<:>wT!=4:=j*$=~@w> a<> 8L>*>M>C>U8L<*$=#{G#^#V#^#V"=}"$=#~ ģ>I8L!="=*=6!=~G#^#VͣE !:O4P2= END 7 ; lccylno (Quantum) is Series ) ******************************** :" =00009' WTBLS Winchester specification tables K !WTBLSk?NOOO'O3OrO?OKOOdO~OWO$PO4PRSQAQBQCQDQEQHQLQMbSPPSWbQR bBCbDEbHLbAFjIXDjIYdrNZqZrNCqPrPOrPE.SWTBLS RELhWTBLS PRNWTBLS MAC"gh" TBLS MACRELCRFPRNUUuD֤  @ Q@?@           _$ʨ1 2=:b‰- 7Ɛ'@'! ͒0\ O)))) E t |k{00 ?))) O Ñ*D>LPROGRAM BREAK, to abort or any key to continue $ >>*D> >O > >*D>:>(>Ao"D~#$YL*D\f$:F> &,}> ."D~#$YÇa{ ~ #ÛO ­N##! &4 <N_Nʏl"ʹ {lwx6~#x+>{/_>~F#<#p#Ûx~\\6&6 {&~> ~6 ʪWxҪz#~rz~#~+ʢwÔ6> xW>¯~6> #~ʪxx&~~ ~ x&~ x&~ ͏x8+~# 88l~ F͏8͏~ FG~#hd##T~#foʙ ʎG~#͒l k~!҈^#V^$:<2 X2:<2 J2:<2 ;2:<2:M >L< Test cycle complete >$>2?" !!"2222jKʌ:?2:2:2':Uf:_f:h>!O G>ʄ|G~w:!:2+2-:222:ÜÜ:G%>:.L $:.L $:.L $:.LType to abort or$b TL return to continue $L break on $> ͛>›*D >*`9*D 8>*^9*D>:%0>>:-0 >͒*&k*D5>͒:.o&k>:IG:('62ID>:(.|.}.> >:].>͒:Bo&k>:@}LON $ÄLOFF$:AʟL abort on error$L $ 5>͒:GLON$LOFF$>:Oy>:Oy> :Oy2W!)>&6#=l >2]!d"b!b"`!\ "Z !["YBʗn>L** WINCHESTER IS NOT SELECTED **\Type or turn drive power on $Bʗʀ ÀBn >L** DRIVE IS NOT READY **\Type or Start drive and wait $B n>U?I n>L** ERROR ATTEMPTING TO RESET DRIVE **\type$bk 2-2+n>2H2b>2G27!o o"`"^>26n2F2I>:0L" W I N C H E S T E R D R I V E S T A T U S$>LUnit:$ >LHead:$>LCylinder:$->LSector:$<>LStatus:$>LPROG ID: TSTW REVISION 1.5$>LTest Counter: $  >LRead address:$ͣ (>LWrite address:$ͳ >LFormat byte:$E (>LSeek verify:$ͳ >LFree memory: $!o|<..L to $*.+|.}. (>LDrive capacity: $::L megabytes$>LError counter:$R:#"(>LFast-seek interface card specified$>:7"L** DRIVE HAS NOT BEEN INITIALIZED **$">LCommand: $ >dͥ#"jSECTOR N(S N(CYLINDER g(C g(HEAD w(H w(U (UNIT (TESTECC g*RAMBUF (ERROR 1E 1SEEKTEST 6SEEKVER )FORMAT :VERIFY ;DUMP 2)D 2)FILLBUF .TESTBUF 0FILLMEM .ENTER K/READ 9R 9WRITE 9W 9DISKTEST 7INIT | I | HELP D? DEXIT B(IPL B(Q H(QUIT H(LDPATT ,!0$v$Invalid command, type "HELP" for command list$>:?2?^$͇>2?nLIMS International Test Winchester Utility for 820-series controller\PROG ID: TSTW Rev. 1.5$L\\** 5" Winchesters **\\For 5 megabyte Seagate drive, type: 1\For 6 megabyte Ampex drive, type: 2\For 7 megabyte Ampex drive, type: 3\For 10 megabyte Seagate drive, type: 4\For 11 megabyte Ampex drive, type: 5\For 12 megabyte Ampex drive, type: 6\For 15 megabyte Ampex drive, type: 7\For 20 megabyte Seagate drive, type: 8\For 24 megabyte Ampex drive, type: 9\\** 8" Winchesters **\\For 10 megabyte Quantum drive, type: 10\For 20 megabyte Quantum drive, type: 11\For 40 megabyte Quantum drive, type: 12\For 70 megabyte Quantum drive, type: 13$>L? $>dͥH(~0.'z/W{/_͍͛}.'p'.'}!$n =' w':(>LDoes 5" winchester controller have "fast-seek" interface card (Y/N)?$E>dͥʌ'~͒Y'N (Ì'>2# (>2:2w<<2m<<2i<͍͛})(!0(v$Invalid parameter$]@C]@:_z/W{/_(}2.2,[z/W{/_(Ô>:_z/W{/_(}2-2+n>(}2%n>U?>LRead$(("`ͣ>LWrite$("^óL buffer address in hex: $dͥB})(<͛*(jOFF #)ON *)*(2Gó>2Gó28͛ʄ)jBUF )PAGE Z)B}*(.c)(e.n>LSYSTEM MEMORY$)~)*`c)n>LCONTROLLER ON-BOARD BUFFER$>28:Oy:Oy!)|) >LPage $͒l&kL\\$|.}.L: $.> :8%*:Ox&*~.#}*L $.K* M*>.@*L\$})L\$72[͛ʂ*jLOOP *!0$v$>LMOVE SHUNT TO ALLOW ECC TEST\HIT TO CONTINUE WHEN READY OR TO ABORT$ * g*>2[Â*>L \ $>L --ECC TEST IN PROGRESS-- $>2b*)"Y:+2[:,2\Q,e-͓,]>9͚==B$-!"\ Q,x,͓,]>9͚==B/-xB"^x;-,*\#"\7?B+Q,e-͓,!͈<>ͨ<ͨ<]>9͚==B5-xB"^N-Â-!͈<> ͨ<2)>ͨ<2*>ͨ<2+>ͨ<2,e-*\ ͈<:\̐,ͨ<>!͈<>ͨ<>ͨ<>ͨ<><ͨLEnter 2-byte pattern: $dͥ)(B})(|ͨ<}ͨ<]>*\*^7?R>2T*\"U*^"W͢@>2T͢@$-,$-N,>2T:\2Y͢@,>2T:\2Z:]2Y͢@!ͨ<+}h-!>ͨ<+}v-:[°+>LType to exit TESTECC or to repeat test$ *-É->LMOVE SHUNT BACK TO ORIGINAL POSITION \HIT WHEN READY TO EXIT TESTECC MODE$ R.-!͈<*Y")|ͨ<}ͨ<:[2+ͨ<:\2,ͨ92b "FILLMEM [x]" .:Oy:Oy!x:Oy+}³.]>͛)(B})(|)(E.x29>LBeginning$(/";>LEnding$(/*;:9G/#p|/}/L address? $dͥ)(B})(͛]/B}*(n >LType in new memory value or return to skip.\Type in "." to end entry.\$z.{.L: $.L - $dͥ/~. B}/|/}L\$ò/L\Invalid hex value, re-type\$ò/2N!"9n >LTesting controller on-board Memory\Errors are printed when they occur\$:Oy:Oy:9G!x:Oy+}—0:Oy:Oy:9G!:Ox<1#|0!94{0:N1L\Test complete, buffer OK$L\Type$b L\Test complete, errors detected$1LAddress $|.}.L: expected-$x.L, observed-$.L\$>2N ͛”1:B2jCLEAR 1ON 1OFF 1ABORT 1:B/_(}*(M22B!d"b!b"`!\ "Z !["YRɯ2@R>2@R>2AR y2Ci&))) !d-2>7 :B 2n>LExamining error number: $ i&kL\\Error occurred in $~R14455b6~#Ҹ2LNo interrupt recieved from operation\$L\Requested:\$LUnit= $~0L, Head= $~#0L, Cylinder= $^#V#kL, Sector= $n&k#L\\Drive status port at time of error: $F~.L (hex)\\\$>‚3LDrive WRITE fault recieved\$>ʞ3LUnit is NOT READY\$>3LUnit cannot be selected\$#~3#~3#~3#~3L\\Test counter at time of error: $~.L $#~.L $#~.L $#~.L (hex) \\$LECC \$͉2:CO!b ~ʝ4{4W4LECC - Uncorrectable Hard Error\$LECC - Correctable Hard Error\$LECC - Soft Error\$LTESTECC \$:CO`i)) ![~45^5ʒ5LSyndrome check error\$LLocation error\Miscorrected location: $#~.#~.L\Location to be corrected: $#~.#~.L8-bit Pattern not corrected\Pattern = $#####~.L9-bit Pattern was corrected\Pattern = $#####~.#~.LRESETTING\$LHeader verification \$͉2:COi& )!\ L\Observed:\$L Head= $n&k#L, Cylinder= $^#V#kL, Sector= $n&k#LDISKTEST BUFFER VERIFICATION\$͉2L\Check individual sector\$ɯ2M͛ʿ6jLOOP 6!0$v$>LSeek Test, Single pass,$'>2M>LSeek Test, Endless loop,${͞#͍  7!"J2M2L͛d7jALL LOOP Z7LOOP _7ALL R7!0$v$>2Ld7>2L>2M:L7>L"Disktest all" will write data on all drives on system, continue (Y/N)? $8>L"Disktest" will write data on selected disk, continue (Y/N)? $͒Y>LEnter number of WRITE/READS per sector (1-9)? $1N8 N82=:Mʔ8>LDisk Test, Endless loop,$õ8L All,$>LDisk Test, Single pass,$:LĊ8{l ͣͳ:L%9͞#2G͍>2GN9:L88:%<92%u>B8*J"&*)͔>N982%n>>2%:%<J92%u>B*9U?*99:=2>*^:0Gp#{^9>©9>L>C=(=]>*`:0G~ʏ9#{ˆ9yĢ@ :>=Q9*)"Y:+2[:,2\:%%92%u>*Y"):[2+:\2,ɯ9>2/:b\:͛\:jLOOP r:(}*(29*`:/:*^";\:!95O:ͳL>C=(=]>>LEndless disk $:/ʜ:Lwrite$ä:Lread$L loop,${\: ñ:͛:jBYTE ::͛*(B}*(2]E>LFORMAT will erase Disk, continue (Y/N)? $͒Y#)2+2-2,2.!͔>>LFormatting Disk${>:Oy:Oy:]Gx:Oy{y;:Oy:Oy:Oy!">C=*~;2,2.#"î;!"<ʴ;*)"<2H*)͛"2H>LVerifying Disk${2+2-2,2.!͔>>:Hg<ͳ:]G!+u<}͢@|:Oy}:Oy:Ox:Oy::$*&#")[:*=:)=>2$*)͔>2$!͈<:O>yyyyy>H=>H=+B:[=:#o=:Ox:OyG!:.o|g~W:2:Oyj@ZC!͈<:O>yyyyy>+B:=:#=:Ox:OyG!:.o|g~W:2:Oyj@ ɯ:Oy:Oy!)~:Oy#!>>:Oy:Oy2>:O*^2>:O*`u>+B:-G:%G:2G:1:Oy͘Aj@ͫ>n>:G>ɯ2122*&[7?R>:>:#>*&[!7?R>*&[!7?R>>@21> 22(=:Oy:Oy!):Ox(?#?ɯ:Oy:OyY:OxB?â@:ʺ?!"&2X:Oy:Oy+B ʵ?:Ox:Oy:Oyj@B ʵ?͢@>?*:?)#"&+B ? @*&+"&??͢@>?ɯ2-2+2,2.2$2I!")"&n>ͫ>ɯ:Oy:Oy> :Oyj@! O!@"!>2 !O >2W> :Oy:W|@B> :OyB2W :@:6>:BLMax error count reached, type$b ")*&"J"&R8|:G )+>|/g}/o#:G )+> 2$+B:Oi:Oa:A:#B:Ox :Oy:Oa:Ox72(B:(>!͈<͟<cB͟>2aâ@!͈<͟C+ÿB:LCCzByB>2LC}BAJ><= ";BPY͈<͟<͈<ͨ<#͈<͟<͈<ͨG*;B>#T~#fo>2OCeC͚==B :OCȯ2a͢@!OC5(>2OC͚==BpCC!OC5~(+C͚==BpCC!PCUC~ # xBxC>2a͢@>2a͢@!UC͈<͟<C!UCPC*B6#6#6>!*Bn>LLIST OF COMMANDS\\Cylinder Fillmem Quit Status\Disktest Format Rambuf Testbuf\Dump Head Read Testecc\Enter Init Sector Unit\Error Ipl Seektest Verify\Fillbuf Ldpatt Seekver Write$ >LEnter command for description or to exit: $ 0>dͥ EjU FUNIT FH WGHEAD WGC HCYLINDER HS (ISECTOR (IRAMBUF MSTATUS ]JE NERROR ND mQDUMP mQSEEKTEST %SSEEKVER UFORMAT WFILLMEM MXFILLBUF YTESTBUF ZR A\READ A\W 6^WRITE 6^DISKTEST +`ENTER bVERIFY fQUIT eIPL eLDPATT hTESTECC jI lINIT l >L "U" "UNIT [x]" \UNIT is used to set the unit to be tested. [x] may be 0-3. $" >L "H" "HEAD [x]" \HEAD is used to set the current head on the Winchester \drive. [x] may be 0-$:0L. $" >L "C" "CYLINDER [x]" \CYLINDER is used to set the current cylinder position on the\Winchester drive. [x] may be 0-$*kL. A seek is performed \immediately. $" >L "S" "SECTOR [x]" \SECTOR is used to set the current sector for the next \read or write operation. Note that some test commands \manipulate the sector setting. \[x] may be 0-$:o&kL. $" >LSTATUS of the drive is displayed on \the screen. (There is no STATUS command). \* means the status is set by software \0 - DISK NOT READY \1 - DISK NOT SELECTED \2 - BUSY SEEKING \3 * \4 - NO WRITE FAULT \5 - NOT AT TRACK 00 \6 * \7 * ECC READ ERROR $" >L "RAMBUF" \RAMBUF changes the current address of the read/write \buffer in system memory. You will be prompted for \the read buffer address, then the write buffer address. \Both must be entered in hexadecimal. \A return with no entry will not alter the current \addresses. $" >L "E" "ERROR [x] [clear] [on] [off] [abort]" \When an error occurs, the error counter on the screen is \incremented. Use ERROR to examine the errors. \Error descriptions are stored in memory until cleared by \ERROR [clear] or INIT. \[x] is the error number to be examined. If [x] is not \entered, error one is assumed. Drive status at the time the \error occurred is displayed. Error logging is disabled by \ERROR [off] and restored by ERROR [on]. \ERROR [abort] causes testing to stop if an error occurs. \ERROR [abort] is reset by INIT. $" >L "D" "DUMP [x] [page y] [buf]" \The DUMP command displays system memory or the on-board \memory of the Winchester controller. [x] may be any \hexadecimal address. [page y] may be any decimal page \(256 bytes) from 0-255. [buf] will display the controller \memory. If no arguments are entered, DUMP will default to \the read/write buffer address. $" >L "SEEKTEST [loop]" \SEEKTEST will perform a table-driven seek to each sector \on the drive. \ \If SEEKTEST [loop] is entered, SEEKTEST will run until \terminated by pressing . \If [loop] is omitted, SEEKTEST will check each sector \once and then stop. \ \SEEKTEST will take several hours to complete one cycle. \$" >L "SEEKVER [on] [off]" \SEEKVER is used to enable/disable seek verification. \Verification is done by reading a sector after each seek. \The cylinder number in the header field is compared with \the desired cylinder. A seek verify error occurs when they \do not match. $" >L "FORMAT [byte x]" \FORMAT formats the entire disk. \[byte x] will set the sector fill byte to a new value. \[byte x] defaults to E5. After the disk is formatted, \verification is performed. $" >L "FILLMEM [x]" \FILLMEM is used to fill a section of system memory with \a constant [x]. [x] may be any hexadecimal byte value. After\entry of the command, you will be prompted for beginning and\ending memory addresses. Both addresses are included in the \fill. $" >L "FILLBUF [x]" \FILLBUF is used to fill the on-board controller memory with\the constant [x]. [x] may be any hexadecimal byte value. $" >L "TESTBUF" \TESTBUF begins a test of the on-board controller memory. \Memory verify errors are displayed on the console when \they occur. The relative memory address, the byte written, \and the byte read are displayed. \Control-S may be used to stop the display and examine the \error. TESTBUF takes about 15 seconds. $" >L "R" "READ [x] [loop]" \READ is used to read the current sector from the drive \to the current read buffer. If [x] is omitted, one sector \is read, else [x] number of sectors are read. \[x] may be a decimal value from 1-20. \If multiple sectors are read, they are read into RAM \sequentially beginning at the read buffer address. \READ [loop] repeatedly reads the current sector. $" >L "WRITE [x] [loop]" \WRITE is used to write the current sector from the current \write buffer to the drive. If [x] is omitted, one sector is \written, else [x] number of sectors are written. \[x] may be a decimal value from 1-20. \If multiple sectors are written, they are written from RAM \sequentially beginning at the write buffer address. \WRITE [loop] repeatedly writes the current sector. $" >L "DISKTEST [loop] [all] [all loop]" \DISKTEST performs a table-driven read/write/verify \of each sector on the drive. \DISKTEST [loop] will run until terminated by pressing .\If [loop] is omitted, DISKTEST will check each sector once \and then stop. DISKTEST [all] will test all Winchester units\on the system. \ \DISKTEST will take several hours to complete one cycle. \ \Warning: DISKTEST will destroy all data on the disk(s). $" >L "ENTER [x]" \ENTER is used to enter values directly into \system memory. [x] may be any hexadecimal address. \If [x] is omitted, ENTER defaults to address 0. \The current address is displayed first, then the \current value at that address. If a valid 8-bit hex \value is entered, a replacement is performed. \A return with no value will skip to the next address. \Enter a period to terminate ENTER. $" >L "QUIT" \QUIT is used to exit the program by executing a warm boot. \$" >L "IPL" \IPL is used to exit the program and return to the \operating system. It enables and executes the IPL \(Initial Program Loader). $" >L "VERIFY [header] [hdr] [byte x]" \VERIFY will read each sector on the currently \selected drive. Each sector header is checked, \and the data bytes are checked to be all E5. \ \"VERIFY [header]" or "VERIFY [hdr]" will verify \only the headers. \"VERIFY [byte x]" will check for data [byte x] \instead of E5. $" >L "LDPATT" \LDPATT loads the buffer with the "NEAL PATTERN" \and inserts a 16-bit pattern [BYTE][BYTE] in the middle. \A prompt is issued for the 16-bit pattern [BYTE][BYTE]. \Use this command ONLY for ECC testing. \ \Warning: LDPATT will destroy the header and data on \the currently selected sector. $" >L "TESTECC [loop]" \TESTECC executes a test of the error checking and \correction (ECC). It will read and write data on the \currently selected sector. \ \TESTECC [loop] will run the test until interrupted by \pressing . \ \Run time is approximately one minute for one cycle. $" >L "I" "INIT" \INIT will initialize the program to the default \values used when the program was initially executed. \Use this command if a new drive is attached to the \controller while this program is running. $" 5@ 6? 7`10111`12?15`20124?10204070KKL$L=$> > L=$> >