.TITLE FRDTST - FLOPPY READ-WRITE TEST ; FRDTST.MAC 17-NOV-78 DSD FLOPPY READ-WRITE TEST ABSOLUTE. .SBTTL OPERATIONAL DESCRIPTION .NLIST .NLIST SEQ ; 16-NOV-78 SET UNIT, HELP UPGRADES ; 12-OCT-78 MAPADR, HELP ADDITIONS ; 24-FEB-78-3 SINGLE INTERRUPT TESTING AND BIS #INTEN ; SEEK RANGE TEST ADDITIONS ; SET-TRACK MODS FOR DOUBLE SIDED OPERATION ; DUMPB WITH ASCII DUMP ALSO ; 16-OCT-77 DELETED DATA MODS. >8K REQUIRED. .SBTTL OPERATIONAL DESCRIPTION. .LIST ;********************************************************** ; OPERATIONAL DESCRIPTION ;********************************************************** ; FRDTST - LOADING AND STARTING. REQUIRES 8 K MEMORY ; FROM WITHIN RT-11 TYPE ; ."R FRDTST" ; FRDTST TYPES OUT "REMOVE DIAGNOSTIC DISKETTE" ; AND BRIEF OPERATIONAL DESCRIPTION. ; FROM PAPER TAPE LOAD USING ABSLDR, FRDTST WILL START ; AND TYPE OUT BRIEF OPERATIONAL DESCRIPTION ; FRDTST WILL ASK "MODE" AFTER IT IS CALLED IN OR AFTER ; IT HAS FINISHED THE PREVIOUS TEST OR A CNTRL R IS TYPED. ; RUNNING THE ACCEPTANCE TEST - EXERCISER ; TYPE "A" TO 'MODE:'. FRDTST WILL DO A ; GRADED SEQUENCE OF TESTS INCLUDING RANDOM ; READ-WRITE AND ENDING WITH A SEQUENTIAL READ ; PASS AND WILL TYPE OUT ANY ERRORS FOUND. ; EXAMPLE - QUOTED CHARACTERS ARE TYPED BY USER ; ."R FRDTST" ; REMOVE DIAGNOSTIC DISKETTE ; < ADDITIONAL DESCRIPTIVE TEXT > ; FRDTST V5B ; #MODE: "A"CCEPTANCE TEST ; FILL-EMPTY CRC CHECKED WRITING READING ; INTERRUPT ENABLED WRITING READING RANDOM R-W ; READING PASS FIN ; BAD/GOOD 0 / 47000(APPROX) ; < THE ABOVE REPEATS UNTIL STOPPED WITH CTRL R> ; WHERE FILL-EMP IS TYPED WHEN STARTING ; THE BUFFER FILL-EMPTY TEST ; "CRC CHECKED" BEFORE A CRC CHECK SCAN ; "WRITING" TYPED BEFORE WRITE SEQUENTIAL ; "READING" TYPED BEFORE READ SEQUENTIAL ; "INTERRUPT ENABLED" ENABLES INTERRUPT ; "WRITING" - ANOTHER WRITE THEN READ PASS ; "RANDOM-RW" RANDOMLY READ/WRITE UNTIL ; 1000(8) READS ; "READING" BEFORE A SEQUENTIAL READ-ONLY ; SCAN OVER THE RANDOMLY WRITTEN DATA. ; TYPE CONTROL R OR START AT 1104 TO RESTART FRDTST AT "MODE:" ; SPECIAL CHAR CODES AND RESULTS ; CTRL R RESTARTS AT "MODE" ; CTRL S HANG OUTPUT TO TERMINAL UNTIL ANOTHER CHAR TYPED ; CTRL O THROWS AWAY OUTPUT UNTIL ANOTHER CHAR ; IS TYPED OR UNTIL FLAG RESET. ; CTRL P INHIBITS ALL PRINTOUT EXCEPT FOR ERRORS. ; RESET BY ANY OTHER CHAR TYPED IN. ; CTRL C ASKS "EXIT TO RT-11?". TYPE "Y" TO EXIT. ; CTRL D ODT DISPATCH NOTE: ~C OR "1100G" RETURNS ; CTRL T ODT DISPATCH WITH STACK TRACE. ; FRDTST TYPES # WHEN STARTED THEN ATTEMPTS AN INIT. ; TYPES "MODE:" WHEN INIT IS SUCCESFUL. ; USER TYPES KEY CHARACTERS IN () TO SELECT DESIRED MODE. ;******************************************************** ; OPERATIONAL MODES: ;******************************************************** ; SPECIFY THE MODE BY TYPING THE CHARACTER STRING ENCLOSED ; IN PARENTHESIS IN RESPONSE TO "MODE:" ; * THE MOST USEFUL MODES ARE ASTERISKED ***** ; THE AVAILABLE MODES ARE ; * (H)ELP TYPES ALL COMMANDS AVAILABLE IN TEST ; * (A)CCEPTANCE DOES FILL-EMPTY BUFFER CHECK, THEN ; SEQUENTIAL WRITE-READ, THEN SETS INTER- ; -RUPT ENABLE AND DOES EVERYTHING AGAIN ; THEN DOES RANDOM READ WRITE ; FOLLOWED BY A READ ALL TO CHECK DATA. ; NOTE: THIS SEQUENCE SWITCHES THE DATA ; GENERATION ALGORITHM AFTER EACH PASS. ; (F)ILEMP FILLS AND EMPTIES SECTOR DATA BUFFER ; CHECKING FLAGS, COUNTS AND DATA. ; * (SEQW)R SEQUENTIALLY WRITES DATA ON ALL SELECTED ; DRIVES THEN READS ALL AND CHECKS DATA. ; PRINTS "WRITING" WHEN STARTING WRITE PASS ; PRINTS "READING" WHEN STARTING READ PASS ; NOTE: **** THE FOLLOWING 3 TESTS REQUIRE A SEQUENTIAL ; WRITE PASS BE DONE FIRST IN ORDER TO ; INITIALIZE THE DATA. (SEE DATA FORMAT) ; * (SEQR)D SEQUENTIALLY READ ONLY AND CHECK DATA ON ; ALL SELECTED DRIVES. ; PRINTS "READ PASS" AT END OF EACH PASS. ; (RN)D RW RANDOMLY GET A SECTOR ON SELECTED DRIVE ; THEN READ OR WRITE IT CHECKING DATA. ; * (RD) RANDOM READ RANDOMLY SELECTED SECTORS ON ; AND CHECK DATA READ ; * (SC)AN READ ALL SECTORS ON SELECTED DRIVES AND ; CHECK FOR CRC ERRORS. ; (RA)NDOM RANDOMLY SELECT AND READ SECTORS ON ; SELECTED DRIVES CHECKING STATUS ONLY. ; (SK) RANGE SEEKS REPETITIVELY THROUGH A RANGE ; COVERING ALL SELECTED TRACKS ; (SA) 125 RADIAL HEAD ALIGNMENT TEST USING SHUGART ; SA 125 TEST DISKETTE. MUST BE PROTECTED ; * (M)AP ADDRESS PRINTS OUT ALL ADDRESSES THAT RESPOND ; * (ST)ATUS TYPES CUMULATIVE TRANSFER AND ERROR ; STATUS. ; (RE)S STATUS TYPE CUMULATIVE STATUS AND CLEAR. ; (DUMPC) DUMP CIRCULAR BUFFER OF PREVIOUS PRINT-OUT ; AND ASK "RESET DUMP BUF?" (Y OR N) ; (SI)NGLE REPEATEDLY READ THE SPECIFIED SECTOR ; CHECKING STATUS. ; ASKS UNIT, TRACK, SECTOR TO BE CHECKED. ; (T)AP REPEATEDLY READS SPECIFIED SECTOR AS ; ABOVE BUT LIFTS HEAD AFTER EACH READ. ; MODE SETTING COMMANDS. ; * (SET )UNIT ASKS UNITS (LOGICAL DRIVE #'S) TO BE ; OPERATED ON. ASKS "UNIT:" EXPECTING A ; NUMBER <0-3> UNTIL A SPACE OR CR TYPED. ; ACCEPTS UNIT #'S TILL INVALID # TYPED. ; INITIALLY SET FOR UNITS 0 AND 1 ; (SET-)TRACK SET TRACK LIMITS FOR OPERATION ; (SEC)TIN SECTOR INCREMENT (PDP11=2, LSI-11=3) ; (I)NTRPT STT SET INTERRUPT STATUS ; 0 = DISABLE FLOPPY INTERRUPTS ; NOT 0 = ENABLE FLOPPY INTERRUPTS AND ; CHECK THAT AN INTERRUPT OCCOURS ; (SETD)EVICE ASKS DEVICE REGISTER TO BE CYCLED ; THROUGH FOR MULTI DEVICE OPERATION. ; STEPS TO NEXT FIELD IF SPACE. ; EXITS ON TO "RXCS :" ; (SH)ORT CHANGES ACCEPTANCE TEST LIMITS TO DO ; ONLY FIRST 8 TRACKS OF EACH DRIVE THEN ; STARTS THE ACCEPTANCE TEST ; * (V)ERIFY DOES SHORT ACCEPTANCE TEST THEN ; RESETS BACK TO USE ALL TRACKS AND ; SCANS ALL DISKETTES OVER ALL TRACKS. ; IT THEN DOES A CTRL P TO INHIBIT ALL ; BUT ERROR PRINTOUT AND GOES TO THE ; ACCEPT TEST. ; FORMAT INITIALIZATION MODE. ; * (X)FORMAT REALLY? MUST ANSWER WITH "Y TO PROCEEDE. ; ASKS "UNIT: " TO BE FORMATTED. ; ASKS "STANDARD FORMAT?" IF "N" ANSWER ; ASKS "INTERLEAVED FORMAT?" ; FORMATS SPECIFIED DISKETTE TO THE ; BLANK IBM FORMAT BY WRITING THE ; SOFT SECTOR SECTOR I.D. MARKS THEN ; WRITING THE IBM INITIAL DATA. ; 'Y' MUST BE TYPED TO "FORMAT REALLY" ; AND THE DRIVE MUST BE WRITE ENABLED ; FOR FORMATTING TO OCCUR ; SEE SHUGART IBM COMPATIBILITY REF MANUAL ; FOR FORMAT SPECIFICS ; DUMP - COPY UTILITY MODES ; (DUP)L DUPLICATES SOURCE UNIT ONTO DESTINATION ; UNIT. ASKS "SRCUNIT", "DSTUNIT" THEN ; DOES A SECTOR BY SECTOR READ SRC, ; WRITE DST, READ DST AND COMPARE. ; (C)OMPARE COMPARES 2 DISKETTES STARTING AT SPECI. ; ADDRESS. ASKS "SRCUNIT, TRACK, SECTOR, ; # SECTORS, DSTUNT:" ; SAME AS DUPL BUT WITHOUT WRITING. ; (DUMPO) OCTAL DUMP OF SPECIFIED SECTORS ; (DUMPB) BYTE DUMP OF SPECIFIED SECTORS ; (DUMPA) ASCII DUMP OF SPECIFIED SECTORS ;*********************************************************** ; ERROR PRINTOUT DESCRIPTION ;*********************************************************** ; ERROR FORMAT: (DEV UN TRK/SEC: / ; RXCS= RXDB= [INTERRUPT ERROR:] BAD= #GOOD= ; #DATA ERRORS: ERRREG: ; DEV PRINTED ONLY WHEN RUNNING MULTIPLE SYSTEMS ; XXX IS LAST 3 DIGITS OF RXCS VALUE FOR SYSTEM ; UN LOGICAL DRIVE # FOR WHICH PRINTOUT OCCURRED ; TRK/SEC: / TRACK AND SECTOR ADDRESS AT WHICH ; PRINTOUT OCCURRED. ; FUNCT CODE IDENTIFICATION OF THE TEST IN PROGRESS ; WHEN PRINTOUT OCCURRED. ; RXCS= RXCS IS THE FLOPPY COMMAND STATUS REG AND ; INCLUDES ERROR FLAG 100000 ; DONE FLAG 40 ; RXDB= DATA BUFFER REGISTER ; SHOULD BE 0 NORMALLY OR 214 AFTER INIT ; INTERRUPT ERROR: IF < 0 INDICATES AN EXPECTED INTERRUPT ; DIDN'T OCCOUR ; IF > 0 INDICATES MULTIPLE INTERRUPTS ; #BAD= #GOOD= CUMULATIVE SUMMARY OF # STATUS ERRORS ; DETECTED AND # SECTORS TRANSFERRED OK ; #DATA ERRORS: # OF BYTE OF DATA FOUND TO NOT COMPARE ; WITH EXPECTED VALUE ; ERREG: SPECIFIC ERROR CODE FOR ; ERROR TYPE AS DESCRIBED 2 PAGES HENCE ; FUNCTION CODE LIST AND DESCRIPTION ; TEST CODE MEANING ; FILL-EMPTY FB PROBLEM LOADING SECTOR BUFFER. ; E1,E2 SECTOR BUFFER DATA DIDN'T CHECK DURING ; EMPTY-BUFFER OPERATION. ; SEQ. WRITE SW PROBLEM LOADING SECTOR BUFFER. ; SEQRD CW,SR DATA READ BACK WRONG ; RANDOM RW,RC,RR RANDOM (WRITE,CHECK,READ) ; ANY READ XE EMPTY BUFFER CHECK BEFORE ; RETRY RETRYING THE READ ; DUP UTILITY IN ERROR READING SOURCE ; CW ERROR READING WHAT WAS JUST WRITTEN ; DELETED DATA DW, DR DELETED DATA FLAG FAILURE ; DATA FORMAT WRITTEN BY FRDTST IN ALL SECTORS. ; BYTE 0, 1 SECTOR #, TRACK # ; 2 - 7 6 BYTES OF ALL ONE'S ; 10 - 17 10 BYTES OF ALL ZEROES ; 20 - 21 SEED FOR RANDOM # GENERATOR ; 22 -177 RANDOM # SEQUENCE. ;*********************************************************** ; FLOPPY INTERFACE REGISTERS AND DEFS. ;*********************************************************** .SBTTL INTERFACE REGISTER DEFS RXCS=177170 ; COMMAND AND STATUS REGISTER. ; WRITE RO IN X X X X X X RO IE UT UN FN FN FN EX ; READ ERR WO X X X X X X TR IE DN WO WO WO WO WO ; RO = READ ONLY ; WO = WRITE ONLY ; ERR= ERROR DET. (CLEARED BY COMMAND INIT ; IN = CONTROLLER INIT. ; TR = TRANSFER REQUEST. ; IE = INTERRUPT ENABLED ON DONE. ; DN = DONE FLAG. ; UT = HIGH UNIT SELECT IF THREE OR MORE DRIVES. ; UN = UNIT SELECT. ; FN = FUNCTION SELECT. ; 0=FILL BUFFER 1=READ BUFFER ; 2=WRITE SECTOR 3=READ SECTOR ; 4=NOT USED 5=READ RXDB STATUS ; 6=WRT.DELETED DATA 7=READ ERROR-REG ; EX = EXECUTE. (SEE LIST ON NEXT PAGE) RXDB=177172 ; DATA BUFFER REGISTER. ; CONTEXT CONTROLLED BY COMMAND SEQUENCE. ; AFTER AN RXCS FUNCTION IS COMPLETE A STATUS ; IS AVAILABLE TO BE READ IN RXDB LOW BYTE. ; X X X X X X X X DR DD XX XX WP ID PA CRC ; DR = DRIVE READY - CURRENTLY SELECTED DRIVE HAS DISKETTE ; INSTALLED AND UP TO SPEED. ; DD = DELETED DATA WAS READ ON LAST SECTOR. ; WP = WRITE PROTECT ERROR. ; SETS RXCS ERR BIT. ; ID = INITIALIZE DONE. ; PA = PARITY ERROR DETECTED. ; SETS RXCS ERR ; CRC= CRC ERROR DETECTED IN DATA READ. ; SETS RXCS ERR ;********************************************************* ; MAPPING PHYSICAL DRIVES TO LOGICAL UNITS ;********************************************************* ; LOGICAL UNIT MAPPING USING SWITCHES ON FORMATTER/CONTROLLER ; PHYS DRIVE (OPEN = 0, CLOSED OR JUMPERED = 1) ; # LOCATION SWITCHES USED FOR MAPPING UNT<1> UNT<2> ; 0 RIGHT LEFT 2 SWITCHES ON LEFT DIP SW (0-0) (0-1) ; 1 MIDDLE RIGHT 2 SWITCHES ON LEFT DIP SW (1-0) (1-1) ; 2 LEFT MOST LEFT 2 SWITCHES ON RIGHT DIP SW (2-0) (2-1) ; LOGICAL DRIVE 3 IS USED TO SPECIFY A DRIVE AS NON-EXISTANT ;********************************************************** .SBTTL ERRREG ERROR CODES ;********************************************************** ; ERROR CODES GIVEN BY READ ERROR-REG STATUS FUNCT (FUNCT 7) ; PRINTED AS ERRREG: XX ON ERROR PRINTOUT ; CODE LIGHT # MEANING ; 10 2 DRIVE 0 FAILED TO HOME ON INIT, OR DIDN'T SELECT ; 20 2 DRIVE 1 FAILED TO HOME ON INIT, OR DIDN'T SELECT ; 30 2 FOUND HOME WHEN STEPPING OUT 10 TRACKS FOR INIT. ; 40 2 TRACK GREATER THAN 77. OR UNIT SELECT ERROR. ; 50 2 HOME BEFORE DESIRED TRACK FOUND. ; 70 2 DESIRED SECTOR COULD NOT BE FOUND AFTER 2 REVS. ; ; 100 3 WRITE PROTECT ERROR. - SETS RXES <10> ; 110 MORE THAN 48 USEC AND NO SEPERATED CLOCK FOUND. ; 120 0 NO PREAMBLE WAS FOUND (24 BITS OF 0'S) ; 130 0 PREAMBLE FOUND BUT NO ID ADDR MARK WITHIN WINDOW ; 140 CRC ERROR ON WHAT APPEARED TO BE HEADER. ; DOESEN'T SET ERROR FLAG WHEN ENCOUNTERED. ; 150 2 HEADER TRACK ADDRESS OF A GOOD HEADER DIDN'T ; MATCH DESIRED TRACK. ; 160 0 TOO MANY TRIES FOR AN I.D. ADDRESS MARK. ; 170 0 DATA ADDRESS MARK NOT FOUND IN ALLOTED TIME. ; 200 0 CRC ERROR ON READING SECTOR FROM DISK. ; RXES STATUS BIT OF VALUE 1 IS ALSO SET. ; 210 1 PARITY ERROR (INTERFACE <=> CONTROLLER) ; RXES STATUS BIT OF VALUE 2 IS ALSO SET. ; 220 2 DRIVE 2 FAILED TO HOME ON INIT. ; 230 2 DRIVE 3 FAILED TO HOME ON INIT. ; 240 SELECTED DRIVE NOT READY (110 ONLY) ; INDEX HOLE NOT ON TIME ; 250 0 EXPECTED HEADER NOT FOUND AFTER TRACK FORMAT. ; 260 0 INDEX MARK NOT FOUND IN EXPECTED RANGE. ; (FORMAT NOT BEGUN) ; 270 0 INDEX MARK NOT FOUND IN EXPECTED RANGE. ; (FORMAT HAS OCCOURED) ; 300 DATA LOST FROM WESTERN DIGITAL 1771 TO 8048. ; (110 CONTROLLER ONLY) ; SOFTWARE CONDITIONS REPORTED AS STATUS ERRORS ; 177 TIMEOUT ON DONE ; 176 TIMEOUT ON TRREQ ; 1 INTERRUPT ERROR ; FRONT PANEL ERROR LIGHT DESCRIPTION ; LIGHTS MEANING ; 0 FRONT DATA TYPE ERROR ; 1 FRONT PARITY ERROR BETWEEN CONTROLLER-INTERFACE. ; 2 FRONT SEEK TYPE ERRORS ; 3 FRONT SWITCH CONFLICT ERROR OR CONTROLLER ERROR. ; INCLUDES WRITE PROTECT OR FORMAT INHIBITED ; ERROR TYPES. ; BOARD LIGHTS (210 ONLY) ; UP-LEFT CONTROLLER WAITING FOR BUS INTERFACE READY. ; UP-RGHT INIT IN PROGRESS. ; LW-LEFT READ IN PROGRESS ; LW-RGHT WRITE IN PROGRESS. ; START-RESTART ADDRESSES. ; 1104 - NORMAL START -RESTART ADDRESS. ; CAN BE STOPPED AND RESTARTED HERE AT ANY TIME. ; 1110 - START ADDRESS FROM MONITOR CALL TO SAVE VECTORS ; 1100 - RETURN ADDRESS FROM ODT AFTER CTRL D DISPATCH. ; ALSO START ADDRESS FOR ODT. ; 1114 - EMERGENCY RETURN TO "MODE" WITHOUT DOING INIT. ; FRONT END MACRO DEFS. STRTAD=40 ; START ADDRESS FOR REENTER. JBSTW=44 ; JOB STATUS WD: B7=REENTER,B12=SPECIAL TTY ERRWD=52 MONLOW=54 ; ADDRESS OF BEGINNING OF RESIDENT MONITOR. TKS=177560 TKB=TKS+2 TPS=177564 TPB=TPS+2 .MCALL ..V2.., .REGDEF,.EXIT, .SRESET, .SETTOP ..V2.. .REGDEF ; DEFINE REGISTERS .ENABL AMA .MACRO SAVE ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 .IIF NB , MOV ARG1, -(SP) .IIF NB , MOV ARG2, -(SP) .IIF NB , MOV ARG3, -(SP) .IIF NB , MOV ARG4, -(SP) .IIF NB , MOV ARG5, -(SP) .IIF NB , MOV ARG6, -(SP) .ENDM .MACRO RESTR ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 .IIF NB , MOV (SP)+, ARG6 .IIF NB , MOV (SP)+, ARG5 .IIF NB , MOV (SP)+, ARG4 .IIF NB , MOV (SP)+, ARG3 .IIF NB , MOV (SP)+, ARG2 .IIF NB , MOV (SP)+, ARG1 .ENDM .MACRO PRINT ASCSTR ; PRINT THE ASCII STRING JSR R5, PRINT .ASCIZ "ASCSTR" .EVEN .ENDM .MACRO ASCIZ ASCSTR .ASCIZ "ASCSTR" .ENDM .MACRO TEXTL TEXT .ASCII "TEXT"<15><12> .ENDM .MACRO ASCIZE ASCSTR .ASCIZ "ASCSTR" .EVEN .ENDM .MACRO PCRLF JSR PC, PCRLF .ENDM .MACRO ASCII ASCSTR .ASCII "ASCSTR" .ENDM .MACRO PRNTIT LABEL, SOURC .IIF NB