{?×:m->͐ -- TSTWIN terminated -- $n2-cx><c_PR͏0͌U:-DU*-"-T"!қ>2E-úҬ>2E-úҺ>2E-*R"-ͧ ** No 1100 Winchester controller on the system, program aborted ** $ͧ ** Non-privileged user, program aborted ** $ͧ ** Unable to read Winchester, program aborted ** $:/-Error status bytes: $:/0!:/0!:/@ (Unit does not exist)$d  (Winchester not formatted)$dd (Winchester not ready)$dTrack 0, sector 0 missing proper format information$ $>2-k-:-Š P>ɯ!"H->2J-!n-"P-!"N-n.͚ZPROG ID: TSTWIN Revision 1.1\\IMS INTERNATIONAL\Winchester Disk Test Utility\$0!"H->2J-~.×!,>w#!!"!͏>2m-<2c-ͦ.*-[-:-=hG*g-:-_7?Rڃx }2-C-z/W{/_͚͝Z2->2- I M S W I N C H E S T E R D R I V E S T A T U S$Unit:$͍Track:$ͣ-Sector:$͵<Status:$PROG ID: TSTWIN$Test counter: $<REV. 1.1$ DMA Read Address:$m (DMA Write Address:$} Free memory: $![|<0!0! to $*.+|0!}0! (Number of tracks: $*!m!*!+m!Error counter:$(Firmware retries: $:m-&om!Type "?" for list of commands, "Q" to exit$:m-** ECC correction disabled **$Command: $͙ ,7 SECTOR S TRACK T UNIT U RECAL CDMAADR ERROR E READTEST 9 VERIFY DISPLAY 'DUMP ]D ]FILLBUF FILLMEM ENTER YREAD XR XWRITE W WRITERES _WRITETEST C INIT I HELP /? /QUIT Q TRKCYL _CYLTRK RETRIES TESTCOUNT !LInvalid command, type "?" for list of commands and their usage$:-ę2-4>2-ɯ2-  * Warning * A reserved sector will be re-written. Continue (Y/N)? $͙!$Y >2--S LOOP : TRACK LOOP C TRACK \ BYTES +  ͐͢}ʶ2,:-:,2-!"-T"N-2-i  ͐͢"N-i !"N-Ù 2J-͵! "N-Ù !"N-i 2J-͵! "N-:-| * -"P-v.Ï *-"P-ʌ ͐n.Endless disk $:- write$ read$![N-  track$  sector$ loop,$qi  *H-|" :J- >ɯ *!R*H-  2,2,-z ALL LOOP p LOOP u ALL h !L>2,z >2,>2,͐:,ʴ Read Test, Endless loop,$  All,$Read Test, Single pass,$:,Ī q:, ͋&͐2-S :, :R-<; 2R-͍*H-"g-:J-2i-͌ *g-"H-:i-2J-2-S  2R-͍ɯ2,2,-5 ALL LOOP + LOOP 0 ALL # SECTOR { !L WRITETEST SECTOR will DESTROY DATA on current sector, continue (Y/N)? $͙!$Y͐Write Test, Current sector, Endless loop,$q͋ >2,5 >2,>2,:,ʒ WRITETEST ALL will DESTROY DATA on all units on system, continue (Y/N)? $ WRITETEST will DESTROY DATA on current unit, continue (Y/N)? $͙!$Y͐Enter number of WRITE/READS per sector (1-9)? $͙!1% % 2,:,l Write Test, Endless loop,$Î  All,$Write Test, Single pass,$:,b q͏m}:, ͋&͐:,ľ è :R-< 2R-͍*H-"g-:J-2i-͌¾ *g-"H-:i-2J-þ 2R-͍>2R-:R-<2R-͍͌  ʊ:,2,* -:,Gp#{.>2-S *-i2-S *-:,G~a#{Zy:,=!* ->2-S :-<2-2-:-<2-ʸ2-:-<2-G:E-2-2-:-<2-:, < Test cycle complete >$>2-!--!"-2-2-2-2-2 --mNʏ:-?2-:-2-:-2-*:-Xi:-bi:-k>!-O G>ʇG~w:-2J-2,:-o: -g[!2-2-2 -7?R"H-͵ͣñ(:-0! $:-0! $:-0! $:-0!7?R ͐*-"P-2J-͵!"H-ͣ! "N-n.7S&!"N-n.y=! "N-2J-͵-ʒ D!}ڶ.͚ZSYSTEM MEMORY$͘Ì*-q2-Page $͈l&m!\\$|0!}0!: $> ͪ!~0!#} $ >.ͪ!\$}¾\$-*?:?:*@%͚Z7*!m!T:-o&m!p*-m!͐*-m!ͷ*-m!:-o&m!*-m!:r-o&m!7:q-o&m!PpHit any key to return to main screen$!×*-p#z-ʵD!}ڵ|µEx2,Beginning$6",Ending$6*,:,G*#p|)}) address? $͙,7ʵD!}ڵ-kD!}ڶ͚Z Type in new memory value or return to skip.\Type in "." to end entry.\$z0!{0!: $0! - $,7~.ʗD!}|}\$\Invalid hex value, re-type\$Type to abort or$X!ʗ J return to continue $ break on $Ù> ͑>ͪ!‘͐͢}2J-͵[!͐͢"H-ͣ~.͐͢}2R-͍C͌Read$"-mWrite$" -} buffer address in hex: $͙,7D!}ڵ<͞.V>ɯ2J-2-!"H-͍ͣ͵*- *-*- <* -*- :R-0ͪ!͈*H-m!*-5͈:J-o&m!:-G:/2-D:/0!:/0!|0!}0!͈:-o&m!:,-ON $4OFF$:,G ABORT $ $*H-#"H-[!:I-s:H-s>ͣ:J-<2J- ډ>͵![ o"-" -"P--"e-͏!}ڵ!LInvalid parameter$Winchester Unit $:R-0ͪ!Drive specifications$------------------------------$ Number of tracks: $ Number of heads: $ Number of cylinders: $ Low current start cylinder: $ Precomp start cylinder: $"On time" value: $"Off time" value: $Sector interleave value: $Offset value: $Sectors per track: 32$Bytes per sector: 256$ ** Insufficient memory to perform operation **$>2- (0 to $)$:,:-2,ɯ2,>2, y2-i&))) !!̓- ʗ:-ڗR͚ZExamining error number: $ i&m!\\Error occurred in: $~2, %+:#\At location:\\$Unit= $~0ͪ!#, Track= $^#V#m!Sg-j (Cylinder $*-m!, Head $:-o&m!), Sector= $n&m! (decimal)$#\\Drive status bytes at time of error: $~0!#~0! (hex)$#~#~#~#~\\Test counter at time of error: $~0! $#~0! $#~0! $#~0! (hex) \\$:,<Reading\$KWriting\$K:,????2,ʦ\"Soft error" - succeeded after $:,0! program retries\$\"Hard error" - failed all $>0! program retries\$Recalibrating drive\$Attempting to write to a reserved sector\$Seeking\$Writetest Buffer Verification\$-[!͐͢"g-j Track $*g-m! = Cylinder $*-m!, Head $:-o&m! (Hit any key to continue)$!-[-͐͢"j-:-_͐*e-~ #͢}2l-*j-"-T:l-_"g- Cylinder $*j-m!, Head $:l-&om!= Track $*g-m! (Hit any key to continue)$!-d͐͢}2m-<2c-ͦ.͝- CLEAR SET ×-k*P-[N-*-7?R>ۡ >ӠۡO >Ӡ۠۠>ۡO ۡG(͹!7:1 2,×*-PROGRAM BREAK, to abort or any key to continue $!ʗ͙*-> ͪ!>Oҟ> ͪ!*-͙>ú["-~#$*-\$:-ę> ͪ!&,}> .ͪ!"-~#$a{ ~ #-O ?N##!O! ʰʸ _! R h  ʙ ʴ K {wxڰ6~#ê!x+>ͪ!R {/_>ê!~##p#-x~6͸6 {! Ͱø~> ͪ!~6 < Wx< zͪ!#~r ~#~+4 wͰ& 6> ͪ!xW>ͪ!A h R ~6> ͪ!#~< W xv x͸m ~Ͱv ~ ʍ Ͱ Ͱ~ ʍ x͸~ ʙ x͸~ ¥ ð! x +~# ~ ! ! ~ G~# ## ~#fo+! !G~#$  ! ~!!^#V49!Ɛ'@'ê!! $0^! O)))) G! v! |m!{0ͪ!0 ?))) O Ó!_!!L> 8L> 8L>8L*(B*B@L*B@ÑK:p@ʕH:x@K>͟L*&A(Ax@L(Ax@ÑK|}Lƀ)`ioL> 8L> 8L> 8L:n@ʕH:@<ʯJM*(B|gL#"(B)Bw*B!@>cM =oL!(A>!x@oL:p@ʕH:x@J*&A|=̔L#"&A'Aw:@@=M!=L!> M_!w@ 5M 3M<3M~=w4{ JM> 8L~ ͰJ!MͱFJDISK FULLTSTW LIB %ND HL,?ADDR ENDIF CALL @DECIN ;;call the subroutine LD A,L ;;least significant half of # to A ENDM ; !M:>NN@ҲNw#2i@.yN!yNw#RN2i@.ʀN!gNÀN6 #yN:i@.ʍNw#NpMMʲN2M2M:M=NMMN!M"M>2M*M~N7N#"MP T)AP aBP e CP t DP JPEP  HP thLP  MQP`  SPO`  PSWP  iIP n RQU` rBCD`` D DEP`  HLW` HLAFuQh DavIXh dtuIYOp XONZp GCZp niNCp rePPp r POPp LDPE2P REVY@READS@WRITE V@SEEK@ARECAL)S@RETRYQ@ERRBYTsW@HELPMNUQ@CLEAR[S@SETXY@,ZENDaC,PACKET"QaP,UWORKlSaCURXYTaEOL2ga CHARIN]a!UPCASEfaj @DECOUTQaEOSmaKEYWORDySa4LNDITha+IBUFFYla+EOL?a CHAROUQaTYPERaTSTMNUSa NTRK@(r MATCHR@( LDKWORDR@(@esSCREEN@(`deSAVEiR@( PUSHB@(` LPUSHD@( ;PUSHH@( bPUSHPSWj@(urRESTORE@((RPOPB@(hiPOPD@( APOPH@( POPPSWR@(adHEXOUT@( oHEXINR@(@; DECOUT@(riDECINS!TSTBGN BDOSS!<INITW! TSTXIT]T!j,RETCNTEY FIRTRY!TSTXX}V!SETRETT CR#c LF#i WBOOT;T!kDETOS'a!,OSFLGV!`INICON!FTURBOnT!NONPRVU FLSBUF T!OTFLOPn PTDOS!CHK1100b!NWNERRUk!DETDMAT!-INIVARg!REDTR0T!RNFMERR!,WCODE!,NCYL"`! ,CYL[!QMLTCXHX!COMPAR!INIT1GZ!B,ENDCNT!INIEOT!INIT2 EOTPA!,EOTPAD_!PRTHDGm BEEPd!*BADID!- HEXPRNX!NFMER1!aNFMERX!NFMER2!,RETSAVX kRETBDS!FLGCPM!FLGTUR RETSER^!E,TRACK:V!G,SECTOR!k,TRACK0/W!M,DMA] SECSIZ4\!K,BYTCNTj!INITPW!UPSTAT$_!SETERR!+VAR VARLEN!4INIVOPe![[!bADDLOPQW! DM>Ͳ.ë.>Ͳ.ë.>.ë.>/ë.>2/ë.>R/ë.>2/ë.>B/͓/:/!F- !/w#~ w#~w#~w#~w#~ w#~ w#w#~w#~ w!F-!/w#~ w#~w#~w!F-!S-!/w#~ w#~w#~w#~ w#~ w#w#~w!F-!/w#~ w!S-!/w#~w!F-!S- !/w#~w#~w#~w#~w#~w#~w#~w#~ w#~ w#~ w!/4!"/!/ͱ/~y#/ xO xG( !/ͼ/xw#DRWRES^!@ ͚ZLIST OF COMMANDS\\Cyltrk Error Read Status Write\Display Fillbuf Readtest Track Writeres\Dmaadr Fillmem Recal Trkcyl Writetest\Dump Init Retries Unit \Enter Quit Sector Verify \$ Enter command for description or to return to main screen: $͙ @,7ʗB1 DISPLAY 3U 2UNIT 2T D5TRACK D5S 5SECTOR 5DMAADR S9STATUS 6E ;ERROR ;D =DUMP =READTEST >FILLMEM dAFILLBUF BR CREAD CW NFWRITE NFWRITERES 7IWRITETEST KENTER NVERIFY QQ PQUIT PI SINIT SRECAL STRKCYL VCYLTRK VRETRIES W  "U" "UNIT [x]" \UNIT is used to set the unit to be tested. [x] may be 0-2. $ô  "DISPLAY" \DISPLAY is used to display the physical drive \specifications of the current unit that were \set at format time by the FMTWIN utility. \ \The specifications for sectors per track and bytes per \sector are designed into the winchester controller firmware\and are always the same values. They cannot be changed at \format time by the FMTWIN utility. $ô  "T" "TRACK [x]" \TRACK is used to seek to a particular track on the \drive. [x] may be 0-$*!+m!.$ô  "S" "SECTOR [x]" \SECTOR is used to set the current sector for the next \read or write operation. [x] may be 0-31. $ô STATUS of the drive is displayed on the main screen. \ \VALUE DEFINITION \0000 No error from drive \A000 Sector not found \9000 Data address mark not found \8400 Hardware fault \8200 Data ECC error \8040 Unit does not exist \8020 Winchester not formatted \8010 Winchester not ready $ô  "DMAADR" \DMAADR changes the current DMA 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. $ô  "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. $ô  "D" "DUMP [x]" \The DUMP command displays system memory. \[x] may be any hexadecimal address. \If no parameters are entered, the DMA read buffer will be \displayed. \$ô  "READTEST [loop] [all] [all loop]" \READTEST performs a table-driven seek to each sector \on the drive and reads that sector. \ \READTEST [loop] will run until terminated by typing . \If [loop] is omitted, READTEST will read each sector once \and then stop. READTEST [all] will read all winchester \units on the system. \ \READTEST will automatically set firmware retries to zero. \$ô  "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. $ô  "FILLBUF [x]" \FILLBUF is used to fill the DMA read/write buffer with \the constant [x]. [x] may be any hexadecimal byte value. \The length of the fill is one sector (256 bytes). $ô  "R" "READ [x] [track] [loop] [track loop]" \READ is used to read the current sector from the drive \to the current DMA read buffer. \READ [x] causes [x] number of sectors to be read. \[x] may be a decimal value from 1-32. \If multiple sectors are read, they are read into RAM \sequentially beginning at the read buffer address. \READ [track] will read the entire current track. \READ [loop] repeatedly reads the current sector. \READ [track loop] repeatedly reads the current track. $ô  "W" "WRITE [x] [track] [loop] [track loop]" \WRITE is used to write the current sector to the drive \from the current DMA write buffer. \WRITE [x] causes [x] number of sectors to be written. \[x] may be a decimal value from 1-32. \If multiple sectors are written, they are written \sequentially beginning from the write buffer address. \WRITE [track] writes an entire track from the DMA buffer. \WRITE [loop] repeatedly writes the current sector. \WRITE [track loop] repeatedly writes the current track. \* NOTE * The first 5 sectors and last 8 tracks on the drive \are reserved areas. To alter them use the "WRITERES" command.$ô  "WRITERES [x] [track] [loop] [track loop]" \WRITERES is used to write to reserved data areas. Track 0, \sectors 0-4, and the last 8 tracks, of IMS winchester drives \are reserved data areas used by the winchester controller \firmware. The "WRITE" command will not allow writes to any \of these reserved areas. However, the "WRITERES" command \allows access to these reserved areas. Use of this command \is identical that of the "WRITE" command. \** WARNING ** Use this command with caution as it allows \alteration of critical drive specification and alternate \sector information. $ô  "WRITETEST [loop] [all] [all loop] [sector]" \WRITETEST performs a table-driven write/read/verify \of each sector on the drive. It is a DESTRUCTIVE test. \WRITETEST [loop] will run until terminated by typing . \WRITETEST [all] will test all winchester units on the system.\WRITETEST [sector] will continuously write/read/verify the \current sector only. \ \WRITETEST will automatically set firmware retries to zero. \ \Warning: WRITETEST will DESTROY ALL DATA on the disk(s). $ô  "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. $ô  "Q" "QUIT" \QUIT is used to exit the program and return to the \Operating System. It will automatically reset the firmware \retries value to the normal value of 5 before exiting. $ô  "VERIFY" \VERIFY will sequentially read each track on the \drive. If a track read fails, VERIFY will then read \each sector on the track that failed and record any \errors. $ô  "RECAL" \RECAL will recalibrate the current unit to track 0, sector 0.$ô  "I" "INIT" \INIT will initialize the program to the default \values used when the program was initially executed. \ \The program test counter will be reset to zeros, the error \counter will be reset to zero (which will eliminate any \error descriptions contained in the error display buffer), \the winchester controller firmware retries will be re-set \to the normal value of 5 retries, and the drive will seek \back to track 0, sector 0. $ô  "TRKCYL [ttt]" \TRKCYL will convert a track number [ttt] into cylinder and \and head numbers. \$ô  "CYLTRK [ccc hhh]" \CYLTRK will convert a cylinder number and head number \[ccc hhh] into track number. \$ô  "RETRIES [x]" \RETRIES is used to temporarily change the number of retries \done by the winchester controller firmware. The controller \firmware is initialized to do 5 retries on a read or write \request before it interprets an error. To use this command, \type "RETRIES [x]" where [x] is the desired number of \retries. [x] can be any decimal value from 0-100. \ \Changing the number of retries to less than 2 disables the \ECC error correction done by the controller firmware. \Changing the number of retries to zero will cause the program\to do program retries upon errors and record the results. $ô$=$> ͪ!> ͪ!=$> ͪ!> ͪ!