IF DATA REQUEST IS SET AND CLEAR IT IF IT IS RDSC= 6702 /SEND COMMAND TO CONTROLLER RDSD= 6703 /SKIP ON COMMAND DONE AND CLEAR IF SET RDTD= 6704 /TRANSFER DATA TO/FROM AC <0:11> CONTROLLED BY BIT SEVEN /OF RWDA INSTRUCTION. IF BIT7 IS A ONE THEN THE TRANSFER /IS FROM THE AC. IF IT IS A ZERO IT IS TO THE AC. RDWE= 6705 /WRITE INTERRUPT ENABLE FROM AC BIT11. ASSERT INTERRUPT /ENABLE IF A 1. CLEAR INTERRUPT ENABLE IF 0 RDSE= 6706 /SKIP IF ERROR AND CLEAR IF SET RDSP2= 6707 /SECOND SPARE. CLEARS THE AC. R3L= 7014 /ROTATE THREE LEFT. *20 ZBLOCK 10 /RESERVED FOR THE SYSTEM TEST PROGRAM *30 ERREG, 0 FSMODE, 0 ERRCOD, 0 MODE, 0 PATCNT, 0 PAT, 0 COUNT, 0 TEMP, 0 *177 REV, VER /REVISION LEVEL *200 START,/RD51 SYSTEM TEST MODULE REV 0.2 VER=2 /SHOULD BE CHANGED EACH EDIT /VERSION 2 /CORRECTED AN ERROR IN THE INTERFACE TESTING. NOW IF THE CONTROLLER FAILS /ITS INTERNAL SELFTEST BECAUSE OF AN UNFORMATTED DRIVE IT WILL STILL COMPLETE /THE TESTING OF THE INTERFACE AND NOT TEST THE DRIVE. /VERSION 1 /CHANGED THIS CODE TO INCLUDE THE RD50 5MEG DEVICE. THE PROGRAM NOW /GOES OFF AND DETERMINES THE DRIVE SIZE AND IF THE DRIVE HAS BEEN FORMATTED. /IN ADDITION IF AN ERROR OCCURS IN THE INTERFACE TEST NO TESTING IS DONE /ON THE DRIVE AS IT COULD POSSIBLY HANG THE PROGRAM. IF AN ERROR DOES OCCUR IN /THE CONTROLLER PORTION THE DRIVE IS SAID NOT TO BE FOUND. / /THIS IS A TEST OF THE RD51 WINCHESTER CONTROLLER AND DRIVE FOR THE /DECMATE II SYSTEM TEST FACILITY. THE TEST CONSISTS OF FILLING AND /EMPTYING THE SECTOR BUFFER IN 8 AND TWELVE BIT MODES AND BY DOING SOME /SELECTIVELY RANDOM BLOCKS ALL OVER THE DISK. / CALL= JMS 20 / /FLOPPY IOT DEFINTIONS / ACL=7701 LCD=6751 STR=6753 XDR=6752 SDN=6755 SER=6754 R3L=7014 / /WINCHESTER IOT DEFINITIONS / RDSP1= 6700 /SPARE IOT (CLEAR THE AC) RDSR= 6701 /SKIP/ERROR IN THE TRANSFER TAD (125 /NOW READ IT BACK JMS LOADCM INBUF /INTO THE INPUT BUFFER JMP RDERR1 /ERROR IN THE TRANSFER / /NOW COMPARE THE DATA TO VERIFY IT WAS TRANSFERRED TO AND FROM THE CONTROLLER. / TAD (OUTBUF-1 DCA 10 TAD (INBUF-1 DCA 11 /SET UP THE BUFFERS TAD (-1000 DCA COUNT EMPTY, TAD I 10 CIA TAD I 11 /DO THE COMPARISON SZA C JMS INISYS /DO THE PROPER SETUP RDTS2, CLL CLA CML RAR /SET TO REVERSE VIDEO JMS DISERR /DISPLAY INTERFACE IN REVERSE VIDEO. RDTST2, TAD (11 /INIT THE DRIVE JMS LOADCM /SEND IT TO THE WINCHESTER 0000 /NO ARGUMENTS FOR THIS. SKP /ERROR DETECTED JMP RDTS2A JMS CHKERR /ERROR IN TRANSFER - SEE IF HEADER ID ERROR. /THIS IS DUE TO THE FACT THAT THE DRIVE MAY NOT /BE FORMATTED. IT IS OK TO TEST THE REST OF THE /INTERFACE. JMP RDERR1 /A REAL ERROR OCCURRED IN THE TESTING. RDTS2A, TAD (7 /ENABLE SPECIAL MODE JMS LOADCM /SEND IT TO THE CONTROLLER 0000 /NO ARGUEMENTS FOR THIS EITHER JMP RDERR1 /ERROR IN TRANSFER / /FIRST START OFF BY FILLING AND EMPTYING THE SECTOR BUFFER IN EIGHT BIT MODE. /IT IS A TEST OF THE INTERFACE LOGIC TO MAKE SURE IT IS FUCNTIONING PROPERLY. /NOW CREATE THE SECTOR BUFFER IMAGE IN MEMORY FOR USE LATER. / DCA PATCNT /STARTING COUNT TAD (-1000 /NUMBER OF BYTES TO DO. DCA COUNT /SAVE THE COUNT TAD (OUTBUF-1 /OUTPUT BUFFER DCA 10 FILLER, TAD (PATTAB /GET THE PATTERN TO DO TAD PATCNT /CURRENT PATTERN NUMBER DCA PAT TAD I PAT /GET A PATTERN DCA I 10 /SAVE IT ISZ PATCNT TAD PATCNT /GET THE CURRENT PATTERN TAD (-5 /SEE IF DONE SMA SZA CLA /SKIP IF NOT DONE YET DCA PATCNT /PATTERN NUMBER TO ZERO AGAIN ISZ COUNT /NOW SEE IF ALL DONE WITH FILLING JMP FILLER /NOT YET. GO BACK AND DO THE NEXT BYTE. TAD (102 /FILL THE BUFFER JMS LOADCM /WITH THIS DATA OUTBUF /BUFFER LOCATION JMP RDERR1 LIST) JMP TSTEXT /TAKE THE NORMAL EXIT. TAD (-1 /GET BACK ACTUAL BLOCK DCA LOBLK /SAVE THE LOW ORDER TWELVE BITS OF BLOCK NUMBER TAD I 17 /PICK UP THE HIGH ORDER THREE BITS OF IT DCA HIBLK /SAVE THE HIGH BLOCK NUMBER CLL CLA IAC R3L /TALK TO UNIT 8 (MASTER VOLUME FOR DRIVE 0) TAD MODE /GET THE MODE OF OPERATION CALL /NOW DO THE READ DISK FUNCTION 21 /RELA /SKIP IF NO ERROR JMP RDERR1 ISZ COUNT /FOR 512 BYTES JMP EMPTY /NOT YET DONE. JMP RDERR3 / /NOW DO A READ TEST ON THE DRIVE /PERFORM A READ TEST ON THE WINCHESTER. IT IS MORE TO TEST THE ABILITY OF /IT TO SEEK RANDOMLY THAN A DATA TRASNFER TEST. BECAUSE NO WRITING CAN BE DONE /NO DATA VERIFICATION CAN BE DONE. ANY ERROR INCLUDING A BAD BLOCK IS MARKED /AS AN ERROR UNLESS THE BLOCK IS PUT IN THE BAD BLOCK LIST FOR THE CONTROLLER /TO BY PASS AND DO A SEPARATE SEEK OPERATION. IF AN ERROR OCCURRED IN THE /INTERFACE TEST THE TEST SEQUENCE IS ABORTED. / RDERR1, CLL CLA IAC /PROBLEM HERE MESSAGE RDERR3, DCA ERRCOD TAD ERRCOD TAD (4001 /+1 FOR ACTUAL ERROR CALL 13 /DISPLAY THE ERROR CLA /INCASE TAD ERRBLK /SEE IF AN ERROR OCCURRED DURING TESTING SZA CLA /IF FORMAT WAS OK THEN CHECK OUT NORMAL STUFF JMP RDERR4 /A FORMAT ERROR WAS DETECTED. TAD ERRCOD /SEE IF AN INTERFACE ERROR OCCURRED SNA CLA /SKIP IF YES JMP RDTS3 RDERR4, CLL CLA IAC /DISPLAY DRIVE NORMAL VIDEO JMS DISERR /DISPLAY THE ERROR CLL CLA CML RAR /AC=4000 (REVERSE VIDEO) JMP TSTEX2 /NOT FOUND EXIT RDTS3, TAD (4001 JMS DISERR /DISPLAY THE PROPER STUFF /BLOCK POINTER TABLE ADDRESS JMS SIZDRV /GO FIND OUT THE SIZE OF THE DRIVE AND SAVE THE JMP RDERR /ERROR EXIT DCA 17 /SAVE THE STARTING ADDRESS FOR THE BLOCK /NUMBER TO DO. DCA MODE /START WITH TWELVE BIT MODE RDT3A, TAD I 17 /SEE IF ALL DONE WITH THE TEST. IAC SNA /SKIP IF NOT DONE (-1 TERMINATES THE AD DISK FUNCTION INBUF /BUFFER IN FIELD 0 LOBLK, 0 HIBLK, 0 1 /READ 1 BLOCK IN THE DESIRED MODE SZA CLA /SKIP IF NO ERROR TAD MODE /COMPLEMENT THE MODE OF OPERATION SNA CLA /SKIP IF 8 BIT MODE CLL CLA IAC BSW /MAKE IT A 100 FOR 8 BIT MODE DCA MODE JMP RDT3A /AND TRY THE NEXT BLOCK NUMBER JMP TSTEXT /NO ERRORS IN TEST PAGE RDERR, CLL CLA IAC /AC=1 FOR PROBLEM HERE RDERR2, DCA ERRCOD /SET UP THE ERROR CODE. TSTEXT, CLL CLA CML RAR /AC=4000 (REVERSE VIDEO) TAD ERRCOD IAC TSTEX2, CALL 13 /DISPLAY THE PROPER ERROR CLA ISZ ERRCOD /ERROR CODE +1 STA TAD ERRCOD CALL 17 JMP RDTS2 /GO BACK AND DISPLAY THE TITLE FOR FS MODE. / /DISPLAY THE APPROPRIATE MESSAGE ON THE SCREEN. ENTER WITH THE AC = MESSAGE NUMBER /AND ATTRIBUTE VALUE. / DISERR, 0 CALL 16 RDBUF CLA JMP I DISERR /EXIT. / /ROUTINE TO SIZE THE DRIVE CONNECTED TO THE CONTROLLER. THE PROGRAM ONLY /SUPPORTS A 5MEG AND A 10 MEG DRIVE. / DECIMAL M153, -152 M306, -306 M615, -615 OCTAL MAXCYL, 0 SIZDRV, 0 TAD (10 /12 BIT MODE ON THE MASTER VOLUME CALL /NOW DO THE READ DISK FUNCTION 21 /READ DISK FUNCTION INBUF /BUFFER IN FIELD 0 0 /READ BLOCK ZERO TO DETERMINE IF DRIVE HAS BEEN /FORMATTED. 0 1 /READ 1 BLOCK IN THE DESIRED MODE SZA CLA /SKIP IF NO ERROR JMP I SIZDRV /ERROR READING BLOCK 0 TAD (DRVCMP-1 /COMPARISON TABLE TO DETERMINE IF DRIVE /HAS BEEN FORMATTED. DCA 17 /SAVE IT AWAY TAD (INBUF-1 /THE BUFFER FOR COMPARISON DCA 16 SIZLP, TAD I 17 /GET A CHARACTER SNA /SKIP IF NOT DONE. JMP SIZE2 /NOW GO DETERMINE THE SIZE OF THE DRIVE. TAD I 16 /A CHARACTER TO COMPARE IT AGAINST. SNA CLA /SKIP IF ERROR IN COMAPRE. DRIVE NO FORMATTED /PROPERLY JMP SIZLP /TRY AGAIN JMP I SIZDRV /ERROR CONDITION - INVALID FORMAT SIZE2, TAD (110 /8 BIT MODE ON THE MASTER VOLUME CALL /NOW DO THE READ DISK FUNCTION 21 /READ DISK FUNCTION INBUF /BUFFER IN FIELD 0 1 /READ BLOCK ONE TO DETERMINE THE DRIVE GEOMETRY 0 1 /READ 1 BLOCK IN THE DESIRED MODE SZA CLA /SKIP IF NO ERROR JMP I SIZDRV /ERROR READING BLOCK 0 TAD INBUF+41 /HIGH BYTE OF CYLINDER COUNT BSW /PUT INTO POSITION CLL RTL /INTO POSITION TAD INBUF+40 /AND THE LOW BYTE DCA MAXCYL /NUMBER OF CYLINDERS. / /NOW DETERMINE THE DRIVE TABLE TO USE / TAD MAXCYL / TAD M153 /MUST BE EITHER 153 OR 306 SZA CLA /SKIP IF A 5 MEG DRIVE JMP SIZE3 /NOW GO TEST FOR A 10 MEG DEVICE. TAD (MEG5-1 /BLOCK POINTER FOR 5 MEG JMP SIZE4 /AND EXIT ROUTINE SIZE3, TAD MAXCYL TAD M306 /THIS IS IT FOR THE 10 MEG SNA CLA /SKIP IF VALID JMP SIZE5 TAD MAXCYL TAD M615 / NOW TEST FOR THE RD31 SZA CLA JMP I SIZDRV /ERROR. NOT ONE OF THE REQUIRED DRIVE /TYPES. SIZE5, TAD (MEG10-1 SIZE4, ISZ SIZDRV /VALID EXIT. JMP I SIZDRV / /DETERMINE THE ERROR CODE GENERATED BY THE WINCHESTER. IF IT IS ERROR CODE /7 THEN THE DRIVE IS UNFORMATTED AND IT IS OK TO TEST THE INTERFACE. / CHKERR, 0 TAD (27 JMS LOADCM /SEND THE COMMAND TO THE DRIVE. ERRBLK /WHERE TO STORE THE ERROR CODE. JMP I CHKERR /ERROR IN COMMAND THIS MUST REALLY BE DEAD. TAD ERRBLK /NOW SEE WHAT THE ERROR WAS AND (377 /MASK OFF UNWANTED JUNK. TAD (-7 /THIS IS THE ERROR WE ARE LOOKING FOR SNA CLA ISZ CHKERR /UPDATE THE RETURN AS THE CODE WAS FORMAT ERROR JMP I CHKERR ERRBLK, 0 0 0 0 /SOME EXTRA JUST IN CASE. DRVCMP, -1 -"R+200 -"D+200 -"5+200 -"1+200 -2 0 PAGE RD51ER, FILENAME RD51.ER PATTAB, 0 252 125 063 017 377 DECIMAL MEG5, 3;0 81;0 1007;0 1980;0 3482;0 1683;1 3621;1 1599;2 0;0 3205;1 2627;0 3205;0 1166;1 19;0 402;2 1356;2 1599;2 0;0 OCTAL -1 MEG10, 3;HE DISK) 0;0 /AND BLOCK 0 AGAIN -1 /TERMINATOR PAGE /LOAD RD51 COMMAND REGISTER AND WAIT FOR SOMETHING TO HAPPEN / /ENTER WITH THE COMMAND IN THE AC AND CALL +1 POINTING TO COMMAND BUFFER. /DATA FIELD MUST BE SET TO THE COMMAND BUFFER ADDRESS UPON ENTRY. /EXIT CALL +2 IF ERROR DETECTED OR TIMEOUT SEEN. / LOADCM, 0 DCA COM1 /SAVE THE COMMAND RDF /GET BUFFER FIELD TAD (6201 /MAKE IT A CHANGE FIELD INSTRUCTION DCA LOAD1 /SAVE THE BUFFER FIELD CDF /HOME FIELD TAD I LOADCM /GET THE COMMAND BUFFER ADDRESS ISZ LOADCM /UPDATE THE RETURN DCA TEMP /SAVE THE BUFFER ADDRES TAD COM1 /NOW SEE IF IT IS A WRITE COMMAND /IN WHICH CASE WE DON'T HAVE TO SAVE THE DATA /AS ALL IOT'S EXCEPT 6700 CLEAR THE AC AND WE /DON'T WANT THE BUFFER TO BE CLEARED. AND K20 /MASK THE DIRECTION BIT. IF ZERO THEN IT /SAYS THE SUBSEQUENT TRANSFERS ARE GOING TO /THE WINCHESTER. IF A ONE THEN THE TRANSFERS /ARE COMING FROM THE WINCHESTER TO THE 6120. CLL /MAKE SURE THE LINK IS CLEAR SNA CLA /SKIP IF DOING A READ STL /ASSERT THE LINK TO MAKE SURE THE BUFFER IS /NO CLEARED WHEN GOING TO WINCHESTER. TAD COM1 /GET THE COMMNAD TO DO RDSC /SEND THE COMMAND RAL /GET THE LINK AND SAVE IT DCA COM1 CMDLUP, JMS WATRD /WAIT FOR A FLAG JMP I LOADCM /ERROR EXIT SKP /TRQ SEEN JMP LODDON /DONE WAS SEEN. UPDATE THE RETURN AND EXIT. TAD COM1 /RESTORE THE LINK CLL RAR LOAD1, HLT /CDF BUFFER FIELD TAD I TEMP /GET A CHARACTER RDTD 0 /BLOCK 3 20;0 /BLOCK 16 100;0 /BLOCK 64 362;0 /BLOCK 242 1547;0 /BLOCK 871 5751;0 /BLOCK 3049 4330;1 /BLOCK 10456 6533;3 /BLOCK 15707 0;0 /BLOCK 0 205;0 /BLOCK 133 7352;3 /BLOCK 16106 1320;4 /BLOCK 17104 6413;0 /BLOCK 3339 2154;0 /BLOCK 9324 4247;1 /BLOCK 6311 0635;3 /BLOCK 12701 6177;4 /BLOCK 19583(LAST BLOCK ON TEQUEST IS ASSERTED /RETURN CALL +3 IF COMMAND COMPLETE ASSERTED WITH NO ERRORS / WATRD, 0 TAD FORSEC /SET UP THE FOUR SECOND TIME OUT COUNTER DCA C2 DCA C1 /CLEAR SOME VALUES WATRD3, RDSR /SKIP IF DATA REQUEST SKP JMP WATRD1 /DATA REQUEST EXIT RDSD /SKIP IF COMMAND COMPLETE FLAG SKP JMP WATRD2 /GO TEST FOR THE ERROR FLAG ISZ C1 JMP WATRD3 /GO BACK AND TRY AGAIN ISZ C2 /ALL DONE JMP WATRD3 /NOT YET JMP I WATRD /TIME OUT ERROR WATRD2, RDSE /SKIP IF ERROR FLAG SET SKP JMP I WATRD /ERROR EXIT ISZ WATRD /DONE WAS SET WITHOUT ERRORS WATRD1, ISZ WATRD /DATA REQUEST FLAG IS ASSERTED JMP I WATRD / /TEST INITIALIZATION CODE. / INISYS, 0 DCA FSMODE /SAVE THE AC AS IT CONTAINS THE MODE. DCA ERRCOD IOF /MAKE SURE INTERRUPTS ARE OFF. STA 6707 /THIS WILL CLEAR THE AC IT WHINCESTER IS THERE SNA CLA /SKIP IF NO WINCHESTER JMP RDTS1 /DEVICE PRESENT IOERR, CALL 17 HLT /BETTER NOT GET BACK HERE / /READ IN THE ERROR DESCRIPTOR FILE. / RDTS1, CALL 7 /READ IN THE ERROR FILE RD51ER /RD51.ER IS THE FILE FOR THIS TEST. RDBUF /WHERE TO PUT IT SZA CLA /GO PROCESS THE ERROR AS THE FILE WAS NOT /FOUND OR AN ERROR OCCURRED. JMP IOERR /TO THE ERROR ROUTINE JMP I INISYS /EXIT ALL IS WELL TO THIS POINT C1, 0 C2, 0 FORSEC, -400 PAGE RDBUF, ZBLOCK 1000 INBUF, ZBLOCK 1000 OUTBUF, ZBLOCK 1000 $$$$$$$$$