HED S1 - SECTION 1 * SECTION 1 * THIS SECTION TESTS MOST CONTROLLER FUNCTIONS USING SHORT * READS AND WRITES. * WRSP EQU GLOB1 LOCATION FOR PCI AND DCI BITS WRR EQU GLOB2 TIMER S1 EQU * CLB STB SFLAG STB SHTAS WHAT STATUS SHOULD BE STB DMRF NO DMA ERRORS AT START STB STRF NO INITIAL ERRORS STB CYL STB HEAD STB SECTR LDA BPTR STA BUFAD INITIALIZE BUFFER ADDRESS LDA BPTS LOAD READ BUFFER ADDRESS STA BUFAE SET POINTER * * STEP 1 * GET AND CHECK STATUS FOR 0 * LDA D1 JSB COPR LDA B35 INITIAL STATUS STA COPRN JSB STAT GET STATUS JSB WEND CHECK STATUS AND END STEP * * STEP 2 * SEEK TO CYLINDER 0 * LDA D2 JSB COPR JSB FSEEK SEEK JSB ENDST * * SKIP TO STEP 21 IF BIT 4 IS CLEAR * JSB SWR AND BIT4 SZA,RSS JMP STP21 * * STEP 3 * ASK OPERATOR TO SET OVERRIDE SWITCH * LDA D3 JSB COPR JSB TTYCK IS TTY AVAILABLE? JMP WHLTA NO LDA B66 YES JSB PRINT WHLTA LDA B66 SET OVERRIDE SWITCH PUSH RUN HLT 2 JSB ENDST * * STEP 4 * PLACE WRITE LOCKOUT BIT ON CYLINDER ZERO,READ CYLINDER ZERO * (CHECKING FOR FLAGGED CYLINDER INDICATION) AND CYCLIC CHECK * CYLINDER ZERO (CHECKING FOR FLAGGED CYLINDER INDICATION). * LDA D4 JSB COPR LDA WRILB LOAD WRITE LOCKOUT BIT JSB DGEN1 GENERATE BUFFER JSB WADR WRITE ADDRESSES ONTO DISK LDA FLBIT FLAGGED TRACK BIT STA SHTAS WHAT STATUS SHOULD BE LDA D128+SZREF READ ONE STA WCNT SECTOR JSB FSEEH READ JSB READ BACK JSB DCHK AND CHECK LDA D1 ONE SECTOR JSB FCYCK ISSUE CYCLIC CHECK JSB SEND * * STEP 5 * PLACE DEFECTIVE CYLINDER BIT ON CYLINDER ONE * ISZ CYL CYL = 1 LDA D5 JSB COPR JSB FSEEK SEEK IN S0 LDA DFTB LOAD DEFECTIVE TRACK INDICATOR JSB DGEN1 GENERATE BUFFER JSB WADR WRITE ONTO DISK JSB ENDST * * STEP 6 * ASK OPERATOR TO CLEAR OVERRIDE SWITCH * LDA D6 JSB COPR JSB TTYCK IS TTY AVAILABLE? JMP WHLTB NO LDA B67 YES JSB PRINT WHLTB LDA B67 CLEAR OVERRIDE SWITCH,PUSH RUN HLT 2 JSB ENDST * * STEP 7 * READ CYLINDER ONE (CHECKING FOR ADDRESS ERROR,FLAGGED CYLINDER * AND ANY ERROR INDICATIONS). * LDA D7 JSB COPR LDA D128+SZREF STA WCNT SET WORD COUNT FOR ONE SECTOR JSB FSEEH ADDRESS RECORD IN S0 JSB READ LDA B31 FLBIT+NFBIT+AEBIT 000031 STA SHTAS WHAT STATUS SHOULD BE JSB DMRFC OK IF TRANSFER IS INCOMPLETE JSB WEND CHECK STATUS AND END STEP * * STEP 8 * WRITE CYLINDER ZERO (CHECKING FOR FLAGGED CYLINDER AND ANY * ERROR INDICATIONS). * LDA D8 JSB COPR CLA STA CYL SET TO CYLINDER ZERO JSB FSEEK SEEK IN S0 JSB WRITE LDA B11 FLBIT+AEBIT 000011 STA SHTAS JSB DMRFC OK IF TRANSFER IS INCOMPLETE JSB WEND CHECK STATUS AND END STEP * * STEP 9 * WRITE ADDRESS ON CYLINDER ZERO (CHECKING FOR FLAGGED CYLINDER * AND ANY ERROR INDICATIONS). * LDA D9 JSB COPR JSB FSEEK SEEK CLA JSB DGEN1 GENERATE BUFFER LDA WPCYL =6144 STA WCNT JSB WADRI,I JSB DMRFC OK IF TRANSFER IS INCOMPLETE JSB WEND CHECK STATUS AND END STEP * * STEP 10 * ASK OPERATOR TO SET OVERRIDE SWITCH * LDA D10 JSB COPR CLA STA SHTAS WHAT STATUS SHOULD NORMALLY BE JSB TTYCK IS TTY AVAILABLE? JMP WHLTC NO LDA B66 YES JSB PRINT WHLTC LDA B66 SET OVERRIDE SWITCH,PUSH RUN HLT 2 JSB ENDST * * STEP 11 * INITIALIZE ENTIRE PACK * LDA D11 JSB COPR CLA WRCL EQU * STA CYL SET NEW CYLINDER NUMBER * * THE FOLLOWING OPERATION IS A SEEK THAT * CAUSES POSITIONER MOTION. * JSB SEEK CLA JSB DGEN1 GENERATE BUFFER JSB WAITS WAIT FOR SEEK COMPLETION JSB WADR WRITE AND READ ADDRESSES LDA D1024+SZREF READ BACK EIGHT SECTORS STA WCNT JSB FSEEH READ JSB READ BACK JSB DCHK AND CHECK CLA,INA INCREMENT CYLINDER ADA CYL COUNT UP TO NEXT CYLINDER CPA CYPP CHECK FOR END OF PACK RSS JMP WRCL NOT DONE, FINISH PACK JSB ENDST * * STEP 12 * ASK OPERATOR TO CLEAR OVERRIDE SWITCH * LDA D12 JSB COPR JSB TTYCK IS TTY AVAILABLE? JMP WHLTD NO LDA B67 YES JSB PRINT WHLTD LDA B67 CLEAR OVERRIDE SWITCH,PUSH RUN HLT 2 JSB ENDST * * STEP 13 * ASK OPERATOR TO UNLOCK DRIVE * LDA D13 JSB COPR LDA UNIT CONVERT ADA B2060 UNIT NUMBER STA P070A,I TO ASCII STA P040B,I JSB TTYCK IS TTY AVAILABLE? JMP WHLTE NO H70 LDA B70 YES JSB PRINT WHLTE LDA B70 UNLOCK UNIT X,PUSH RUN HLT 2 JSB ENDST * * STEP 14 * CHECK FOR NOT-READY AND ANY ERROR INDICATIONS. ISSUE A WRITE * COMMAND AND CHECK STATUS. ISSUE A SEEK TO CHECK THAT THE * CONTROLLER SETS THE COMMAND FLAG IMMEDIATELY IF THE DISC * DRIVE IS NOT READY. * THIS STEP REPORTS A SEEK CHECK ERROR WHEN LOOPED. * LDA D14 JSB COPR JSB STAT LDA B105 NRBIT+PBBIT+AEBIT 000105 STA SHTAS SET WHAT STATUS SHOULD BE JSB WCHK LDA D128+SZREF STA WCNT JSB WRITE JSB DMRFC OK IF TRANSFER IS INCOMPLETE JSB WCHK AND CHECK FOR ERRORS JSB SEEK SEEK JSB WAITS WAIT FOR SEEK TO COMPLETE JSB ENDST * * STEP 15 * ASK OPERATOR TO SET DATA PROTECT SWITCH AND READY DRIVE. TEST * ATTENTION BITS WHEN HEADS LOAD. * LDA D15 JSB COPR LDA HDON LDB UPD SZA IF HDON = 0, UPPER DISC LDB LRD OTHERWISE, LOWER DISC STB P040A,I PREPARE STB P041A,I MESSAGES NRCB EQU * LDA MM10 PRINT EVERY STA WRR 82 SECONDS JSB TTYCK JMP WHLTF H40 LDA B40 PROTECT X/D THEN READY UNIT X JSB PRINT WHLTF LDA M7936 STA LCNT SET MILLISECOND COUNTER CC13 CLC CC SET UP FOR CC14 STC CC,C FLAG ON HEAD-LOAD NRCF EQU * CC11 SFC CC SKIP IF NOT READY JMP CC12 FLAG IS SET CLA,INA JSB TMR,I DELAY 1 MSEC ISZ LCNT JMP NRCF ISZ WRR READY TO PRINT? JMP WHLTF NO JMP NRCB YES CC12 LIB CC ATTENTION BITS LDA B21 SZB,RSS JSB FPRNT MISSING ATTENTION BITS JSB ENDST * * STEP 16 * PERFORM A SEEK OPERATION AND TEST FOR FIRST SEEK BIT. * THIS STEP REPORTS A FIRST SEEK ERROR WHEN LOOPED. * LDA D16 JSB COPR CLA STA CYL JSB SEEK * * TEST FIRST SEEK BIT * LDA E2001 FSBIT+SPBIT+AEBIT 042001 STA SHTAS JSB WAITS JSB WEND CHECK STATUS AND END STEP * * STEP 17 * ATTEMPT TO WRITE DATA ON THE DISC AND THEN VERIFY THAT NO * DATA TRANSFER TOOK PLACE. CHECK STATUS. LDA D17 JSB COPR JSB SEEK JSB STAT JSB DMW INITIATE DMA LDB B45 SET UP CURRENT OPERATION LDA WRITC JSB COMMD WRITE ON PROTECTED SUBCHANNEL LDA M175 STA LCNT WATE EQU * CLA,INA JSB TMR,I DELAY 1 MSEC ISZ LCNT JMP WATE LOOP UNITL TIMEOUT JSB MC TURN OFF DMA DM2L LIA DMAC ADA WCNT AND B7777 CPA D1 SHOULD BE ONLY 1 TRANSFERRED JMP PSTAT IF SO, GO AHEAD AND CHECK STATUS LDB P013A IF NOT, BOMB JSB DCIN2 CLA,INA STA WCNT LDA BIT15 STA DMRF JSB PCOP JSB DMERQ JSB ADDOI,I PSTAT LDA B2011 SPBIT+FLBIT+AEBIT 002011 STA SHTAS JSB STAT JSB WCHK CHECK STATUS ON WRITE JSB SEND * * STEP 18 * ASK OPERATOR TO CLEAR DATA PROTECT SWITCH * LDA D18 JSB COPR JSB TTYCK JMP WHLTH LDA B41 H41 JSB PRINT H41 CLEAR X/D PROTECT,LOAD,RUN WHLTH LDA B41 HLT 2 JSB STAT CLEAR FIRST STATUS JSB ENDST * * STEP 19 * TEST POPIO LINE WITH PRESET SWITCH. * ISZ CYL LDA D19 JSB COPR CLA STA SHTAS JSB FSEES ADDRESS RECORD * * RAR NOW DIFFERS FROM POSITIONER. * A READ WILL SHOW A STATUS OF 21B. * JSB DMR SET UP DMA READ OPERATION LDB B46 SET UP CURRENT OPERATION LDA READC LOAD READ COMMAND JSB COMMD OUTPUT COMMAND JSB DMAT JSB TTYCK JMP WHLTG LDA B71 H71 JSB PRINT PRESS PRESET(S) THEN PRESS RUN WHLTG LDA B71 HLT 2 JSB STAT * * THE FOLLWOING TEST VERIFIES THE POPIO LINE * JSB WEND CHECK STATUS AND END STEP * * STEP 21 * SEEK TO CYLINDER 0,THEN SEEK TO CYLINDER 1 AND CHECK STATUS * FOR BUSY * STP21 EQU * LDA D21 JSB COPR CLA STA CYL JSB FSEEK SEEK IN S1 ISZ CYL * * THE FOLLOWING OPERATIONS ARE, * A SEEK THAT CAUSES POSITIONER MOTION * AND A STATUS OPERATION IMMEDIATELY * FOLLOWING WHICH SHOULD SEE A * POSITIONER BUSY STATUS. * JSB SEEK LDA D5 PBBIT+AEBIT 000005 STA SHTAS WHAT STATUS SHOULD BE JSB STAT GET STATUS WHILE BUSY JSB WCHK CHECK FOR ERRORS CLB FOR WAITS TIME COUNTER STB SHTAS WHAT STATUS NORMALLY IS JSB WAITS WAIT FOR SEEK TO FINISH JSB ENDST * * STEP 22 * SEEK TO CYLINDER 203 AND CHECK STATUS FOR SEEK-CHECK AND ANY * ERROR INDICATIONS. * LDA D22 JSB COPR LDA CYPP LOAD FIRST NON-EXISTANT CYLINDER NUMBER STA CYL JSB SEEK SEEK TO NON-EXISTANT CYLINDER JSB WAITS WAIT FOR SEEK LDA B401 SCBIT+AEBIT 000401 STA SHTAS JSB WEND CHECK STATUS AND END STEP * * STEP 23 * SEEK WHILE A SEEK IS IN PROGRESS,THEN CHECK STATUS FOR SEEK- * CHECK AND ANY ERROR INDICATIONS. * LDA D23 JSB COPR LDA FTR,I GET FIRST CYLINDER THAT STA CYL WE ARE ALLOWED TO WRITE ON. JSB SEEK JSB SEEK SEEK WITHIN A SEEK JSB WAITS ALLOW COMPLETION JSB WEND CHECK STATUS AND END STEP * * STEP 24 * SEEK TO FIRST CYLINDER IN CYLINDER TABLE AND WRITE ONE SECTOR * AT SECTOR ZERO * LDA D24 JSB COPR CLA STA SHTAS STATUS IS NORMALLY ZERO JSB FSEEK SEEK IN S1 LDA D384+SZREF STA WCNT SET WORD COUNT FOR THREE SECTORS JSB DGEN GENERATE NEW BUFFER * * THE FOLLOWING OPERATION DOES THE FIRST * WRITE ON THE DISK ON HEAD ZERO, SECTOR ZERO * LDA D128+SZREF STA WCNT SET WORD COUNT FOR ONE SECTOR JSB WRITE WRITE ON FIRST SECTOR JSB WEND CHECK STATUS AND END STEP * * STEP 25 * WRITE TWO SECTORS AT SECTOR 7. * LDA D25 JSB COPR LDA D7 STA SECTR OPERATION STARTS AT SECTOR 7 JSB SEES LDA BPTR1 = BPTR + 128 STA BUFAD LDA D256+SZREF STA WCNT TWO SECTOR WORD COUNT JSB WAIS WAIT FOR SECTOR SWITCHING JSB WRITE JSB WEND CHECK STATUS AND END STEP * * STEP 26 * READ ONE SECTOR AT SECTOR ZERO AND CHECK AGAINST DATA THAT * WAS WRITTEN * LDA D26 JSB COPR CLA STA SECTR NEXT OP STARTS AT SECTOR ZERO JSB SEES LDA D128+SZREF STA WCNT SET WORD COUNT FOR ONE SECTOR LDA BPTR STA BUFAD PUT BUFFER ADDRESS BACK JSB WAIS WAIT FOR SECTOR SWITCHING JSB DEND * * STEP 27 * READ TWO SECTORS AT SECTOR 7 AND CHECK AGAINST DATA THAT WAS * WRITTEN. * LDA D27 JSB COPR LDA D7 STA SECTR OPERATION STARTS AT SECTOR 7 JSB SEES LDA BPTR1 = BPTR + 128 STA BUFAD SET TO SECOND READ/WRITE ADDRESS LDA D256+SZREF TWO SECTOR STA WCNT SET WORD COUNT JSB WAIS WAIT FOR SECTOR SWITCHING JSB DEND * * STEP 28 * REFINE ONE SECTOR AT SECTOR SEVEN. READ AND VERIFY SECTOR 7. * LDA D28 JSB COPR JSB FSEES ADDRESS RECORD IN S1 JSB RFNE ISSUE REFINE COMMAND JSB WCHK CHECK STATUS JSB FSEES ADDRESS RECORD IN S1 JSB DEND * * STEP 29 * WRITE FOUR SECTORS AT SECTOR 21,CAUSING A TRACK CHANGE. * LDA D29 JSB COPR LDA SCPT-3 STA SECTR SET SECTOR NUMBER JSB SEES LDA D512+SZREF STA WCNT SET FOUR SECTOR WORD COUNT LDA BPTR STA BUFAD JSB DGEN GENERATE BUFFER JSB WAIS WAIT FOR SECTOR SWITCHING JSB WRITE JSB WEND CHECK STATUS AND END STEP * * STEP 30 * PERFORMS A CYCLIC CHECK ON GROUPS OF SECTORS STARTING AT HEAD * ZERO,SECTOR ZERO. (ONE SECTOR,THEN 2 SECTORS,THEN 4,8,16,32, * 48 AND 49 SECTORS.) THE LAST ONE RESULTS IN END OF CYLINDER * INDICATION. * LDA D30 JSB COPR CLA STA SECTR SET SECTOR ZERO LDA MM6 CYCLIC CHECK STA WRR 1,2,4,8,16 AND 32 SECTORS LDA D1 STP30 EQU * JSB FCYCK ISSUE CYCLIC CHECK LDA WCNT ALS ISZ WRR DONE? JMP STP30 NO LDA D48 48 SECTORS JSB FCYCK ISSUE CYCLIC CHECK LDA B41 END-OF-CYLINDER AND ANY-ERROR STA SHTAS LDA D49 49 SECTORS JSB FCYCK ISSUE CYCLIC CHECK JSB SEND * * STEP 31 * READ FOUR SECTORS AT SECTOR 21 AND VERIFY THE DATA AGAINST * THAT WHICH WAS WRITTEN. * LDA D31 JSB COPR LDA D512 STA WCNT WORD COUNT = FOUR SECTORS LDA SCPT-3 STA SECTR SET SECTOR JSB FSEES ADDRESS RECORD IN S1 JSB DEND * * STEP 32 * AT SECTOR SEVEN,LOWER TRACK FORCE OVERRUN FOLLOWING WRITE OF * TWO WORDS. * LDA D32 JSB COPR LDA TRPC-1 LOAD LAST TRACK NUMBER STA HEAD LDA D7 STA SECTR SET SECTR TO SEVEN JSB SEEH MOVE TO THE BOTTOM TRACK * * THIS OPERATION OUTPUTS A PAIR OF WORDS TO THE * DATA CHANNEL. ABOUT 50 MICROSECONDS AFTER THE SECOND * IS ACCEPTED, A THIRD WORD IS OUTPUT TO SET OVERRUN FLAG. * LDA BUFAD CLB STB A,I SET TWO WORDS OF ZERO INA STB A,I LDA D2 STA WCNT SET WORD COUNT LDA OVIJS JUMP TO SUBROUTINE STA DMSP SET DMA BREAK LOCATION JSB WAIH WAIT FOR HEAD SWITCHING JSB WRITE JSB ST32I,I * * STEP 33 * WRITE FOUR SECTORS AT SECTOR 21,LOWER TRACK. THE END-OF- * CYLINDER AND ANY ERROR CONDITIONS ARE EXPECTED. * LDA D33 JSB COPR CLA STA SHTAS LDA SCPT-3 STA SECTR SET SECTOR JSB SEEK LDA D512+SZREF STA WCNT SET WORD COUNT FOR FOUR SECTORS JSB DGEN GENERATE BUFFER JSB WAITS WAIT FOR SEEK TO COMPLETE JSB WRITE JSB DMRFC OK IF TRANSFER IS INCOMPLETE LDA B41 ECBIT+AEBIT 000041 STA SHTAS THIS IS WHAT STATUS SHOULD BE JSB WENDI,I * * STEP 34 * TEST COMMAND BIT 14 * IF MISSING CYCHK BECOMES READC AND END OF CYLINDER WON'T OCCUR * LDA D34 JSB COPR JSB FSEEK SEEK IN S1 LDA D128+SZREF STA WCNT JSB DMR SET UP DMA IN CASE IT IS READ LDB B22 SET UP CURRENT OPERATION LDA B62 CHECK IS FOR 50 JSB DADO SECTORS LDA CYCHK JSB COMMD OUTPUT COMMAND JSB DMAT JSB STAT GET STATUS JSB WENDI,I * * STEP 35 * AT SECTOR SEVEN,LOWER HEAD;READ THIRTY WORDS AND FORCE * OVERRUN. CHECK ZERO FILL AND VERIFY THAT THE WORD CAUSING * THE PREVIOUS OVERRUN WAS NOT WRITTEN ON THE DISC. * LDA D35 JSB COPR CLA STA SHTAS STATUS SHOULD NORMALLY BE ZERO LDA D7 STA SECTR SET SECTR TO SEVEN JSB SEEH RETURN TO BOTTOM TRACK LDA D30 STA WCNT SET WORD COUNT FOR ONE SECTOR LDA OVIJS STA DMSP SET TO INTERRUPT DMA TRANSFER JSB WAIH WAIT FOR HEAD SWITCHING JSB READ JSB ST35I,I * * STEP 36 * READ FOUR SECTORS AT SECTOR 21,LOWER TRACK. THE END-OF- * CYLINDER AND ANY ERROR INDICATIONS ARE EXPECTED. THE THREE * SECTORS READ ARE CHECKED AGAINST THOSE WRITTEN. * LDA D36 JSB COPR LDA SCPT-3 STA SECTR SET SECTOR JSB FSEES LDA D512+SZREF STA WCNT SET WORD COUNT FOR FOUR SECTORS JSB READ READ AND JSB DMRFC OK IF TRANSFER IS INCOMPLETE LDA D384+SZREF STA WCNT SET WORD COUNT FOR THREE SECTORS LDA B41 ECBIT+AEBIT 000041 STA SHTAS THIS IS WHAT STATUS SHOULD BE JSB DCHK CHECK FOR ERRORS AND COMPARE BUFFERS JSB ENDST * * STEP 37 * SEEK TO LAST CYLINDER. READ ONE SECTOR AT CYLINDER 0. ADDRESS * ERROR AND ANY ERROR ARE EXPECTED. FORCES WORST CASE * RECALIBRATE. * LDA D37 JSB COPR LDA D202 STA CYL JSB FSEEK SEEK TO CYL 202 CLA STA CYL JSB FSEES SET CYL TO 0 LDA D128+SZREF STA WCNT SET WORD COUNT FOR ONE SECTOR JSB READ LDA STAUS MASK OUT BITS 10 AND 13 AND N5777 =155777 STA STAUS LDA B21 NFBIT+AEBIT 000021 STA SHTAS WHAT STATUS SHOULD BE JSB WENDI,I * * STEP 38 * SEEK TO CYLINDER 202(OR 0 IF FIRST ENTRY IS 202)AND THEN SEEK * TO FIRST ENTRY IN CYLINDER TABLE. AT HEAD 1,SECTOR 21 READ * ONE SECTOR AND VERIFY CONTENTS. THE READ COMMAND IS ISSUED * BEFORE THE SEEK IS COMPLETE. * LDA D38 JSB COPR CLA STA SHTAS WHAT STATUS SHOULD NORMALLY BE LDB D202 LDA FTR,I IS FIRST ENTRY IN TABLE CPA D202 EQUAL TO 202 CLB YES STB CYL CYL = 202 (OR 0) JSB FSEEK PERFORM FULL SEEK LDA FTR,I STA CYL JSB SEEK JSB DENDI,I JMP SKIPI,I EXIT S1