ASMB * * NAME: DVR33 * PART NO. SOURCE: 92067-18467 * PART NO. RELOCATABLE: 92067-16467 * PRMR: B.B J.S.W *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * NAM DVR33 92067-16467 REV.1903 781027 * *.* IDENTIFICATION * * NAME: HP 12732A FLOPPY DISC RTE DRIVER * * MNEMONIC: DVR33 *.* PRODUCT USE * * * * DVR33 PROVIDES THE SOFTWARE INTERFACE BETWEEN THE RTE USER * * AND THE HP 12732A FLOPPY DISC SUBSYSTEM. THE SUBSYSTEM USES * * THE HP 9885M FLOPPY DISC. ACCESS TO THE DRIVER IS ACHIEVED * * THROUGH STANDARD EXEC CALLS USING THE DUAL CHANNEL PORT * * CONTROLLER (DCPC). UP TO FOUR DRIVES MAY BE CONNECTED TO ONE * * CONTROLLER. DVR33 SUPPORTS ONE CONTROLLER IN A SYSTEM. THE * * 12733A IS THE DRIVE (NO CONTROLLER) SUBSYSTEM AND CONSISTS * * OF A HP 9885S FLOPPY DISC DRIVE. *.* FUNCTIONAL SPECIFICATIONS *.* INPUT/OUTPUT INTERFACE * * DVR33 INTERFACES WITH THE HP 9885M FLOPPY DISC VIA TWO * * MODIFIED MICROCIRCUIT CARDS. THESE CARDS HAVE BEEN MODIFIED * * BY CHANGING THE PULL UP RESISTORS ON THE INPUT AND OUTPUT * * CIRCUITS TO MORE CLOSELY MATCH THE HP 9885M CONTROLLER INTERFA * * * * ONE CARD IS USED FOR DATA COMMUNICATION (12735-60002) WHILE * * THE OTHER IS THE CONTROL CARD (12735-60001). * * * * THE CARDS ARE ELECTRICALLY THE SAME EXCEPT FOR STRAPPING: * * * * STRAP POSITION (12735-60001) POSITION (12735-60002) * * W1 A A * * W2 B A * * W3 B B * * W4 B B * * W5 IN IN * * W6 IN IN * * W7 IN IN * * W8 OUT IN * * W9 B B * * * * THE TWO IO CARDS ARE CONNECTED TO THE HP 9855M VIA A 12735-600 * * INTERFACE CABLE. * * *.* READ/WRITE DATA * * * * CALLING SEQUENCE: * * * * JSB EXEC * * DEF RTRN * * DEF RCODE * * DEF CONWD * * DEF BUFFR * * DEF BUFFL * * DEF DTRAK * * DEF DSECT * * * * RTRN . (RETURN POINT) * * RCODE DEC1 OR 2 (REQUEST CODE 1=READ 2=WRITE) * * CONWD OCT CONWD (CONTROL WORD. SEE BELOW) * * BUFFR (BUFFER STARTING ADDRESS) * * BUFFL BSS N (WORDS IF +, CHAR. IF -) * * DTRAK DEC F (DECIMAL TRACK NO.) * * DSECT DEC G (DECIMAL SECTOR NO.) (0-58, EVEN SECTORS ONLY * * I.E., 0-2-4-6). * * * * THERE ARE 128 WORDS PER SECTOR, 30 SECTORS PER TRACK (0-58) * * (EVEN SECTORS ONLY), AND 67 TRACKS MAXIMUM (0-66). THE * * NUMBER OF TRACKS AVAILABLE WILL VARY FROM ONE DISKETTE TO * * ANOTHER DEPENDING ON HOW MANY BAD TRACKS WERE FOUND DURING * * FORMATTING WITH THE PROGRAM DSKET (SEE 5.0). THIS NUMBER IS * * WRITTEN IN WORD 1 OF TRACK 0, SECTOR 0 AND IS RETURNED * * IN THE B REG. WHEN A R/W REQUEST WITH TRACK>66 IS MADE. ONLY * * EVEN SECTORS ARE ALLOWED TO BE COMPATIBLE WITH THE RTE II * * FMGR. * * * * CONWD * * BITS 0-5 = LOGICAL UNIT NUMBER OF FLOPPY DRIVE * * BITS 6-10 * * 30 = READ WITH CLOSE TOLERANCE. THIS MODE MAY BE * * USED FOR READ AFTER WRITE (USER PROGRAMMED) * * WHERE THE FUTURE RECOVERY OF DATA IS VERY * * IMPORTANT. THIS MODE WILL CAUSE THE FLOPPY * * CONTROLLER TO PERFORM ADDITIONAL CHECKS IN * * THE READ FUNCTION. * * 23 = DSECT CONTAINS INFORMATION FOR FORMATTING DISC. * * THIS IS A "HOOK" PUT INTO THE DRIVER FOR USE BY * * A DISC FORMAT PROGRAM "DSKET". IT IS NOT * * --- * * INTENDED THE BELOW SPECIAL CALLS BE DOCUMENTED * * FOR USER OPERATION BECAUSE OF THE POSSIBILITY * * OF DAMAGING THE HARDWARE AND/OR ACCIDENTALLY * * "WIPING OUT" INFORMATION OF THE DISKETTE. * * DSECT FUNCTION * * 7630 STEP TRACK IN * * 7640 WRITE ALL ZEROS (FOR DEFECTIVE TRACK) * * * * * * 0 FORMAT TRACK CONTAINED IN DTRACK * * * * DVR33 IS INTIALLY ENTERED THROUGH I.33. THE RETURN CONDITION * * IS INDICATED BY THE A REGISTER: * * * * A=0=OPERAYTION INITIATED * * 1=ILLEGAL READ/WRITE * * * * AN A=1 EXIT WILL OCCUR IN THE BELOW CONDITIONS: * * * * 1. SPECIFY NEGATIVE TRACK NUMBER * * 2. SPECIFY ODD OR NEGATIVE SECTOR * * 3. SPECIFY SECTOR > 58 * * 4. SPECIFY NON-EXISTENT TRACK N(066 * * WILL RETURN THE NUMBER OF TRACKS IN THE B * * REGISTER. THEREFORE MAXIMUM TRACK NUMBER IS * * (B REGISTER-1). * * 5. WRITE TO TRACK 0, SECTOR 0. THIS ADDRESS IS * * RESERVED FOR USE BY DVR33. * * WORD 1 = NO. OF AVAILABLE TRACKS (1-67) * * WORD 2 = NO. OF REVOLUTIONS TO READ ONE TRACK. * * 6. ATTEMPT TO WRITE MORE SECTORS THAN ARE AVAILABLE ON THE * * DISKETTE. FOR EXAMPLE, IF THERE ARE ONLY 2 SECTORS LEFT * * ON THE LAST TRACK AND THE CURRENT REQUEST IN TO WRITE * * 512 WORDS (4 SECTORS). * * * * A=2=ILLEGAL CONTROL. ONLY VALID CONTROL REQUEST IS DYNAMIC STAT * * AND RESET (0) * * A=3=EQUIPMENT MALFUNCTION OR NOT READY. CHECK FOR POWER ON. * * * * SUBSEQUENT INTERRUPTS CAUSE AN ENTRY AT C.33. IF THE OPERATIO * * IS NOT COMPLETED EXIT IS THROUGH CONTINUATION P+2. THE * * REGISTERS ARE NOT SIGNIFICANT. IF THE OPERATION IS COMPLETED, * * EXIT IS THROUGH CONTINUATION P+1 WITH RETURN CONDITION IN THE * * A AND B REGISTERS. * * * * A=0=SUCCESSFUL COMPLETION * * 1=DEVICE MALFUNCTION. THIS EXIT IS FOR SPURIOUS INTERRUPTS * * (UNEXPECTED INTERRUPTS WITH NO REQUEST IN PROCESS). * * THIS EXIT IS ALSO USED FOR CONTROLLER/DRIVE ERRORS. * * SEE STATUS WORD FOR CAUSE. * * 3=TRANSMISSION ERROR. THIS EXIT IS FOR THE BELOW ERRORS: * * 1. RECORD NOT FOUND * * 2. TRACK NOT FOUND * * 3. DATA CHECKWORD ERROR * * 4. DATA OVERRUN * * 5. TRANSFER INCOMPLETE * * FOR NORMAL READS 10 TRIES ARE MADE BEFORE TRANSMISSION * * ERROR EXIT IS TAKEN. FOR READ WITH CLOSE TOLERANCE * * (CONWD=30) 1 TRY IS MADE. * * 4=TIME OUT. THIS EXIT IS TAKEN IF AN EXPECTED INTERRUPT * * DOES NOT OCCUR WITHIN 5 SECONDS. PRIOR TO TAKING THIS * * EXIT, DVR33 RESETS (HEADS GO TO TRACK 0) THE 9885M/9885S. * * B=# OF WORDS OR CHARACTERS TRANSMITTED (DEPENDING ON USER * * REQUEST) * * *.* STATUS REQUEST * * * * CALLING SEQUENCE: * * * * JSB EXEC * * DEF RTRN * * DEF RCODE * * DEF LUN * * DEF STAT1 * * DEF STAT2 * * * * RTRN . (RETURN POINT) * * . * * . * * RCODE DEC13 (REQUEST CODE FOR STATUS) * * LUN DEC N (DECIMAL LOGICAL UNIT # OF DISC) * * STAT1 BSS 1 (STORAGE FOR STATUS WORD EQT5) * * STAT2 BSS 1 (STORAGE FOR EQT WORD 4)(OPTIONAL) * * * * THIS CALL RETURNS THE LAST ACCESSED DRIVE'S STATUS WORD (WORD * * OF THE EQUIPMENT TABLE) IN STAT1. * * * * BITS 8-15 ARE AS DESCRIBED IN THE RTE MANUAL. BITS 0-7 CONTAI * * THE HARDWARE STATUS. SEE TABLE 1. * * * * WORD 4 OF THE EQT (AS DEFINED IN THE RTE MANUAL) IN STAT2 IF * * IT IS CODED. * * * * TABLE 1 * * I/O STATUS WORD BITS * * --------------------- * * * STATUS IS RETURNED PER BELOW: * * * * BITS 0-6 MEANING OCTAL VALUE * * 0000000 NO ERROR 0 * * 0000011 NO DRIVE POWER 3 * * 0000101 DOOR OPEN 5 * * 0000111 NO DISC 7 * * 0001011 RECORD NOT FOUND 13 * * 0001101 TRACK NOT FOUND 15 * * 0001111 DATA CHECKWORD ERROR 17 * * 0010001 DATA OVERRUN 21 * * 0010011 READ CLOSE TOL. ERROR 23 * * 0011111 TRANSFER INCOMPLETE 37 * * * * BITS 0-7 * * 00100000 END OF TRACK 40 * * 01000000 DISC CHANGE 100 * * 10000000 DISC WRITE PROTECTED 200 * RETURNS OF 3, 5, AND 7 CAUSE A NOT READY (A=1) EXIT. * * * 13, 15, 17, 21, 37 CAUSE A PARITY ERROR (A=3) EXIT AFTER 10 TR * TRACK NO. IS IN B REGISTER. * 13, 15, 17 INDICATE A MEDIA PROBLEM (I.E., SCRATCHED SURFACE), * POSSIBLE HARDWARE MALFUNCTION. ERRORS 21 AND 37 INDICATE A HARDWA * MALFUNCTION * * * 23 CAUSES A SUCCESSFUL EXIT (A=0) AFTER 1 TRY.. TRACK NO. IS * B REGISTER. THEREFORE WHEN USING A READ WITH CLOSE TOLERANCE, IT * IMPORTANT THE STATUS AFTER EACH READ BE CHECKED FOR 23 IN EQT 5. * IF THIS OCCURS, THE DATA MAY STILL BE RECOVERABLE WITH A STANDARD * READ REQUEST. * * * (OCTAL 40) IS SET WHEN AN ATTEMPT IS MADE TO READ/WRITE * A TRACK >66. THE NUMBER OF TRACKS IS RETURNED IN THE B * WITH A REG. = 0. * (OCTAL100) IS SET WHEN A NEW DISC HAS BEEN INSERTED OR * POWER TURNED ON SINCE THE LAST REQUEST OR RESET JUST PERFORMED. * * * (OCTAL 200) IS SET IF THE WRITE PROTECTED NOTCH ON THE * DISK IS NOT COVERED. * * *.* CONTROL REQUEST * * * * CALLING SEQUENCE: * * * * JSB EXEC * * DEF RTRN * * DEF RCODE * * DEF CONWD * * * * RTRN (RETURN POINT) * * RCODE DEC3 (REQUEST CODE FOR CONTROL) * * CONWD * * BITS 0-5=LOGICAL UNIT NUMBER OF FLOPPY DRIVE * * BITS 6-10 * * 0=RESET CONTROLLER. ALL DRIVES ARE RESET WITH * * HEADS MOVING TO TRACK 0. RESET IS ALSO DONE AT POWE * * 6=DYNAMIC STATUS. CURRENT STATUS OF SELECTED LU * * RETURNED IN EQT5. * * * * * * * * * * * * *.* OPERATING SPECIFICATIONS * * *.* HARDWARE * * * * MINIMUM RTE SYSTEM WITH DCPC * * HP 12732A FLOPPY DISC DRIVE SUBSYSTEM (MASTER) * * HP 12735-60001 MICROCIRCUIT CARD (CONTROL) INTERFACE 1 * * HP 12735-60002 MICROCIRCUIT CARD (DATA) INTERFACE 2 * * INTERFACE CABLE (DUAL HOOD, LENGTH 15') HP 12735-60003 * * * * OPTIONAL: * * * * HP 12733A FLOPPY DISC DRIVE SUBSYSTEM (SLAVE) * * (3 SLAVES MAY BE CONNECTED TO ONE MASTER) * * SLAVE CABLE IS 6'. * * *.* SOFTWARE INSTALLATION * * *.* PROGRAM INPUT PHASE * * * * DRIVER DVR33 MUST BE LOADED DURING THIS PHASE * * *.* TABLE GENERATION PHASE * * * * *EQUIPMENT TABLE ENTRY * * * * A. EQUIPMENT TABLE ENTRY (EQT) FOR THE FLOPPY DISC CONTROLLER * * SC1,DVR33,D, * * WHERE SC1 IS THE SELECT CODE OF THE CONTROL CARD (HIGHER * * PRIORITY), AND "D" INDICATES DMA REQUIRED. * * * * B. DEVICE TABLE ENTRY * * * * *DEVICE REFERENCE TABLE * * LU=EQT,M,SUB * * WHERE LU IS THE LOGICAL UNIT NUMBER OF DRIVE, M IS THE EQT * * NUMBER, AND SUB IS THE DRIVE SUBCHANNEL NUMBER (0-3). * * THIS SAME NUMBER IS SET AS THE DRIVE NUMBER ON THE REAR OF * * 9885M/S. * * * * C. INTERRUPT TABLE ENTRY FOR THE FLOPPY DISC * * * * *INTERRUPT TABLE * * * * SC1,EQT,M * * SC2,EQT,M * * * * WHERE SC2 IS THE SELECT CODE OF THE DATA CARD (LOWER PRIOR *.* REFERENCES * * * * RTE II SOFTWARE SYSTEM P.N. 92001-93001 * * ------ ---------------- * * * * HP 12732 FLOPPY DISKETTE SUBSYSTEM P.N. 12732-90003 * * * * *.* FLOPPY DISKETTE FORMAT PROGRAM DSKET * * * * PRIOR TO USING A NEW DISC, IT IS NECESSARY TO FORMAT IT BY * * WRITING TRACK AND SECTOR ADDRESSES ON THE DISC. THIS IS * * DONE BY THE PROGRAM DSKET. * * * * ANOTHER FUNCTION OF DSKET IS TO IDENTIFY BAD TRACKS AND * * "MARK" THEM AS SUCH. DSKET IS A RELOCATABLE PROGRAM WHICH * * USES DVR33 FOR DISC COMMUNICATION. * * * * TO RUN DSKET PROCEED PER BELOW: * * * * 1. LOAD DSKET * * * * 2. TYPE RU,DSKET,X * * WHERE X=LU OF TERMINAL DSKET IS CONTROLLED FROM * * 3. DSKET RESPONDS: * * ENTER DRIVE LU? * * TYPE IN THE DISKETTE DRIVE LU * * 4. DSKET RESPONDS: * * DO YOU REALLY WANT TO FORMAT THIS DISKETTE? * * * * THIS QUESTION IS ASKED TO PREVENT ACCIDENTAL ERASURE * * OF VALUABLE INFORMATION. FORMATTING A DISKETTE ERASES AL * * DATA. * * * * IF THE OPERATOR RESPONDS YES THEN DSKET CONTINUES. FOR * * ANY OTHER RESPONSE DSKET ENDS. * * * * AFTER RESPONDING WITH YES, DSKET ASKS: * * * * STANDARD FORMAT? * * * * THIS QUESTION REFERS TO THE NUMBER OF REVOLUTIONS IT * * WILL TAKE TO READ AN ENTIRE TRACK. IF YES THEN FIVE * * REVOLUTIONS (1 SEC) MINIMUM IS REQUIRED TO READ A TRACK. * * * * BETWEEN CONSECUTIVE SECTORS THERE ARE 4 "FILL" SECTORS. * * THE "FILL" SECTORS GIVE THE SYSTEM PROCESS TIME BEFORE * * THE NEXT REQUEST. THIS TIME IS NEEDED BECAUSE MOST * * REQUESTS ARE ON A SECTOR (128 WORD RECORD) BASIS. FOUR * * * * FOUR "FILL" SECTORS GIVE 4 X (1/6) X (1/30)=22 MSEC * * MAXIMUM AFTER THE LAST REQUEST IS COMPLETED AND THE * * NEXT ONE IS STARTED. IF THIS TIME IS EXCEEDED, THEN * * THE DISKETTE MUST ROTATE A COMPLETE REVOLUTION * * (167 MSEC) BEFORE THAT SECTOR CAN BE READ. * * * * THESE CALCULATIONS ASSUME: * * * * 6 REVOLUTIONS/SECOND * * 30 SECTORS/TRACK * * 4 FILL SECTORS * * * * TRACK 0 WOULD BE FORMATTED PER BELOW: * * SECTOR: 0,6,12,18,24,1,7,13,19,25,2,8 * * 14,20,26,3,9,15,21,27,4,10,16,22 * * 28,5,11,17,23,29 * * * * EACH SUCCEEDING TRACK WILL BE IN THE SAME ORDER AS * * ABOVE BUT THE STARTING TRACK CHOSEN TO ALLOW A TRACK * * SWITCHING TIME OF 4 "FILL" SECTORS. THAT IS * * TRACK 1 WILL PHYSICALLY START WITH SECTOR 11 SUCH THAT * * BY THE TIME THE HEAD IS SETTLED ON TRACK 1, SECTOR 0 * * WILL BE READY TO READ. * * * * IF THE OPERATOR ANSWERS NO TO THE STANDARD FORMAT? * * -------- ------- * * QUESTION THEN ALL TRACKS WILL BE FORMATTED WITH * * SERIAL SECTORS (0,1,2, ETC.) ALLOWING 4 "FILL" SECTORS * * BETWEEN TRACKS FOR TRACK SWITCHING SETTLING TIME. * * * * IT IS ANTICIPATED MOST DISKETTES WILL BE FORMATTED * * WITH THE "STANDARD FORMAT". THIS WILL OPTIMIZE * * THROUGHPUT USING SINGLE RECORD TRANSFERS. * * * * WE ARE ALLOWING THE SERIAL FORMAT FOR THE SITUATION * * WHERE THE USER HAS A LARGE BUFFER SPACE TO MAKE * * MULTIPLE SECTOR READ/WRITE REQUESTS AND THROUGHPUT * * IS IMPORTANT (I.E., STORAGE FOR HIGH SPEED ANALOG * * TO DIGITAL CONVERTER MEASUREMENTS). BOTH FORMATS * * ARE INTERECHANGEABLE FOR READING AND WRITING. THE * * ONLY NOTICEABLE DIFFERENCE WILL BE DATA THROUGHPUT * * SPEED. * * * * DATA FOR EACH READ/WRITE REQUEST IS TRANSFERRED VIA DMA * * AT 30 KHZ. * * IF NEITHER YES OR NO IS ENTERED TO THE QUESTION, * * STANDARD FORMAT?, THEN DSKET ENDS. * * -------- ------- * * * * IF YES OR NO WAS ENTERED THEN THE DISKETTE IS * * FORMATTED. UPON COMPLETION, THE NUMBER OF GOOD TRACKS * * IS WRITTEN IN SECTOR 0, TRACK 0, WORD 1 AND THE TYPE * * OF FORMAT (STANDARD = 5, SERIAL = 1) WRITTEN IN * * WORD 2. * * * * THE INFORMATION IN WORD 1 IS NEEDED TO TELL THE FILE * * MANAGER THE LAST TRACK AS WELL AS PREVENTING THE HEAD * * FROM BANGING AGAINST THE HEAD STOP ON MULTIPLE SECTOR * * READ/WRITE. THIS COULD OCCUR IF THE DRIVER DID NOT * * KNOW THE LAST LOGICAL TRACK. * * * * THE INFORMATION IN WORD 2 CAN BE USED TO READ THE * * FORMAT TYPE. * * * * COMPLETION OF FORMATTING IS INDICATED BY THE MESSAGE: * * * * THE NUMBER OF GOOD TRACKS IS N * * - * * WHERE N=NUMBER OF GOOD TRACKS (0-67). * * * * ALL TRACKS ARE NUMBERED SERIALLY AND THE USER NEED NOT * * CONCERN HIMSELF WITH BAD TRACKS OTHER THAN TO REALIZE * * THEIR EXISTENCE LIMITS THE STORAGE CAPACITY OF THE * * DISKETTE. * * STORAGE CAPACITY = NUMBER OF GOOD TRACKS X 3840 WORDS. * * REV. 1650 ORIGINAL * REV. 1723 FIXED PRIVELEGED PROBLEM * REV. 1805 FIXED MOUNT WITH NO DISK PROBLEM * AND PRIV. WITH DMA PROBLEM * * ENT I.33,C.33 * I.33 NOP STA COMAD SAVE SELECT CODE JSB SETIO CONFIGURE IO * CLA CLR COMMAND CHANNEL STA TEMP6 JSB OUTAC * * LDA B.12 SET RETRY COUNTER OF 10 FOR NORMAL READ STA EQT12,I * LDA EQT4,I IOR BN11 SET TO HANDLE TIMEOUT STA EQT4,I * * CLA SET FOR INITIATION ENTRY STA TEMP4 RESRT LDA EQT6,I GET CONTROL WORD AND B2303 IS THIS A REQUEST FOR A FORMAT CPA B2302 INITIALIZATION ROUTINES? JMP FIP YES! GO PROCESS * LDA EQT6,I RAR SSA,SLA IF A CONTROL REQUEST JMP CONTL THEN GO TO CONTL ** LDA EQT6,I CHECK FOR READ MAX TRACK AND B2303 CPA B2301 JMP RMXTK YES! READ MAX TRACK ** LDA EQT9,I INA,SZA,RSS JMP RMXTK * LDA EQT9,I GET TRACK NO. SSA IF NEG. THEN REJECT JMP IREJ1 REJECT WITH A =1 (ILL. R\W) ADA D.67 IF >66 THEN READ NO. OF TRACKS SSA,RSS JMP RMXTK * LDB EQT6,I REJECT IF WRITE TO TRACK 0,SECTOR 0. LDA EQT9,I THIS IS RESERVED: ADA EQT10,I WORD 1 = NO. OF TRACKS SZA,RSS WORD 2 = NO. OF REV. TO READ (FORMAT TYPE) SLB JMP ON1 JMP IREJ1 * ON1 LDA EQT10,I GET SECTOR NO. SLA IF ODD OR >58 JMP IREJ1 REJECT REQUEST (A=1 FOR ILL. R W) SSA IF NEG. THEN REJECT JMP IREJ1 ADA D.59 SSA,RSS JMP IREJ1 NEG. SECTOR LDA EQT9,I GET TRACK LDB NUTRK GET NO. OF TRACKS FOR DISKETTE CMB,INB "NUTRK" IS LAST TRACK +1 ADA B IS REQUEST WITHIN NO. OF SSA GOOD TRACKS? JMP ISTR1 IT IS OK! JMP IREJ1 OUT OF RANGE A=1 (ILLEGAL R W) * *^^^^^^^FIRST LINE OF SECOND TAPE^^^^^^^ * * D.XX IS MINUS DECIMAL XX * DXX IS PLUS DECIMAL XX * B.XX IS MINUS OCTAL XX * BXX IS PLUS OCTAL XX * BNXX IS SOME OCTAL NUMBER * B1 OCT 1 D30 DEC 30 D.59 DEC -59 D60 DEC 60 D.67 DEC -67 D128 DEC 128 D.5 DEC -5 B.12 OCT -12 B2302 OCT 2302 B2301 OCT 2301 B2303 OCT 2303 B2 OCT 2 BN13 OCT 177000 BN11 OCT 10000 RDCLS NOP =4000 IF READ WITH CLOSE TOL. TEMP6 NOP NUTRK NOP # OF TRACKS ON DISK MWORD NOP -# OF WORDS TO TRANSFER TEMP2 NOP SECTOR # DRIVE NOP DRIVE # SEEK OCT 140000 FIPCD NOP FORMAT COMMAND STORAGE DMAIN OCT 100000 DMAW1 NOP DMA WORD 1 COMAD NOP COMMAND CHANNEL DMACH NOP DMA CHANNEL * DATA DEC 67 STORE DEF DATA * * IF TRACK NO. > 66 RMXTK IS CALLED TO * READ MAXIMUM TRACK NO. STORED ON TRACK 0 SECTOR 0 * RMXTK LDA EQT6,I AND B2303 CPA B1 RSS JMP $CONT LDA D60 LDB EQT7,I STA B,I $CONT CLA STA EQT9,I SET FOR TRACK 0 STA EQT10,I AND SECTOR 0 INA STA EQT8,I READ ONE WORD LDA STORE "STORE" HAS ADDRESS OF DATA STA EQT7,I SET BUFFER ADD. TO "DATA" LDA EQT6,I SET FOR READ AND BN13 IOR B2301 SET SPECIAL CODE FOR RMXTK STA EQT6,I * * * * BEGIN R\W OPERATION * ISTR1 LDA EQT8,I GET BUFFER LENGTH SSA,RSS CONVERT TO -WORDS CMA,INA,RSS ARS STA MWORD CMA,INA STA B SW1 NOP FORMAT SWITCH =NOP JMP OVER2 IF FORMAT COMMAND THAN GOTO OVER2 * SZB,RSS IS ZERO LENGTH? JMP IREJ4 YES, IMMEDIATE COMPLETION CLB DIV D128 DIVIDE WORDS BY SECTOR SIZE SZB,RSS A=QUOTIENT B=REMAINDER JMP OVER8 WHOLE SECTOR READ ISZ TEMP6 SET TEMP6 FOR PARTIAL SECTOR INA OVER8 STA TEMP2 TEMP2 =NO. SECTORS * * BELOW CODE DETERMINES NO. OF SECTORS LEFT FROM * REQUEST ADDRESS TO END OF DISK. IT THEN COMPARES * THIS TO THE NO. SECTORS REQUIRED TO COMPLETE * THE REQUEST. IF THERE ARE NOT ENOUGH THE REQUEST * IS REJECTED. * THE ABOVE CHECK IS IMPORTANT IN THAT IT KEEPS * THE HEAD FROM FLYING REPEATEDLY INTO THE * CAST IRON STOP. * * LDA NUTRK GET NO. OF TRACKS LDB EQT9,I GET TRACK ADDRESS CMB,INB ADA B SUBTRACT FROM NO. OF TRACKS MPY D30 MULIPLY BY NO. OF SECTORS PER TRACK * LDB EQT10,I GET STARTING SECTOR BRS CHANGE TO PHYSICAL SECTOR CMB,INB ADA B SUBTRACT FROM SECTORS AVAILABLE * * A REG. NOW HAS NO. OF SECTORS AVAILABLE * LDB TEMP2 GET NUMBER OF SECTORS REQUIRED CMB,INB MAKE NEG. ADA B SUBTRACT FROM SECTORS AVAILABLE SSA IT SHOULD NOT BE NEG. JMP IREJ1 TOO MANY SECTORS REQUIRED. JSB PWORD SEND PASSWORD * LDA TEMP6 SZA,RSS CHECK FOR PARTIAL SECTOR READ JMP OVER9 LDA B2 SET FOR PARTIAL SECTOR JSB OUTAC OVER9 LDA EQT9,I GET STARTING TRACK ALF,RAL MOVE TO POSITION 5-11 LDB EQT10,I GET LOGICAL SECTOR BRS CHANGE TO PHYSICAL SECTOR BITS 0-4 IOR B ADD TRACK (BITS 5-11) IOR DRIVE ADD DRIVE (BITS 12-13) IOR SEEK COMPLETE SEEK COMMAND (14XXXX) * JSB OUTA SEND SEEK OVER2 JSB PWORD SEND PWORD FOR R\W * LDA EQT6,I GET CONTROL WORD RAR,CLE,ELA E=IN\OUT =1\0 * LDB EQT7,I GET STARTING ADDRESS SEZ SET DMA DIRECTION BIT ADB DMAIN IN/OUT = 1/0 LDA DMAW1 GET DMA WORD ONE OCT 1000SC DMASW NOP NOP/RSS= CHAN6/CHAN7 JMP CHAN6 OTA 7 SEND WORD 1 (CONTROL WORD) CLC 3 CONTROL IS 1000SC OTB 3 SEND WORD2(BUFFER ADDRESS) BIT 15 =1 FOR IN LDA MWORD GET MINUS NO. WORDS STC 3 OTA 3 SEND WORD3(WORD COUNT) * * DMA STARTS WITH FIRST FLAG. FOR READ DVR33 HAS SENT * FIRST STC. FOR WRITE NO STC IS SENT(DMA WILL SUPPLY) * JMP ON3 * * SAME AS ABOVE BUT FOR CHANNEL 6 * CHAN6 OTA 6 CLC 2 OTB 2 LDA MWORD STC 2 OTA 2 * ON3 LDA FIPCD GET "FORMAT" COMMAND ** CLF 0 DISABLE INTERRUPTS FOR PRIVELEGE TIMING PROBLEM ** SW2 NOP "FIP" SWITCH =NOP FOR "FORMAT" JMP OTA03 CLA,CME BITS 15-14 = R/W 00/10 ERA IOR DRIVE ADD DRIVE BITS 12-13 IOR RDCLS ADD READ CLOSE TOLERANCE IOR TEMP2 ADD RECORD COUNT BITS 0-11 SSA IF WRITE THEN SEND COMD. AT OTA03 JMP OTA03 OTA04 OTA DATCH SEND READ COMD. HERE STC04 STC DATCH CLA CLR. BI DIRECTIONAL BUS SFS02 SFS DATCH RACE CONDITION HERE BETWEEN STC04 JMP *-1 AND STC06 (12 USEC. MAX) OTA03 OTA DATCH R\W =0XXXXX\1XXXXX STC06 STC DATCH * * BELOW CODE NECESSARY TO ALLOW RTE TO * RECOGNIZE AND PROCESS THE DMA INTERRUPT * USED TO DETERMINE WHEN THE SECTOR HAS * BEEN TRANSMITTED. * STCDM STC CMDCH,C INITIATE DMA CLA CPA DUMMY BYPASS BELOW CODE IF NO PRIVILIGED JMP OUT INTERRUPT REQUIRED * CLCD1 CLC CMDCH INHIBIT DMA INTERRUPT LDB INTBA GET EQT ASSIGNED TO DMA CHANNEL LDA DMACH GET CURRENT DMA CHANNEL CPA B7 IS IT 7? INB YES LDA B,I SET BIT 15 OF ENTRY EQUAL IOR DMAIN TO 1 STA B,I STF 0 ENABLE INTERRUPT SYSTEM * OUT JSB EXIT1 JMP CLCD2 * * * EXIT1 NOP STC10 STC CMDCH ENABLE ERROR INTERRUPT LDA BN10 SET 5 SEC. TIMEOUT STA EQT15,I CLA SET FOR GOOD RETURN LDB TEMP4 FIND OUT WHICH EXIT WE SZB,RSS SHOULD JMP I.33,I TAKE. ISZ C.33 TEMP2=0/1 = I.33/C.33+2 JMP C.33,I * * IS CONTINUATION INTERRUPT * C.33 NOP STA TEMP1 ISZ TEMP4 SET FOR CONTINUATION ENTRY * LDB EQT4,I CHECK FOR TIME OUT ENTRY BLF SSB JMP TIMOT WE HAVE TIMED OUT LDA TEMP1 GET INTERRUPT S.C. CPA DMACH IS THIS A DMA INTERRUPT? JMP STATW YES? * CPA COMAD IS THIS AN ERROR INTERRUPT? RSS JMP ON2 NO ERROR INTERRUPT CLCD2 CLC CMDCH TURN OFF DMA INTERRUPT FOR ERROR STFDM STF CMDCH STOP DMA HANDSHAKE CLFDM CLF CMDCH CLEAR FLAG TO KILL INT. * JMP STATU * * B4 OCT 4 B3 OCT 3 B17 OCT 17 B11 OCT 11 B7 OCT 7 BN9 OCT 10017 BN10 OCT 177000 BN12 OCT 50017 BN8 OCT 177400 BN2 OCT 177600 BN7 OCT 40000 BN20 OCT 77777 * BREGX NOP AREGX NOP STATS NOP STATUS STORAGE TEMP4 NOP 0\1 = I.33\C.33 TEMP1 NOP TEMP STORAGE PASS OCT 127207 PASSWORD * * ON2 LDA EQT1,I GET QUE WORD SZA,RSS JMP CREJ1 SPURIOUS INTERRUPT * JMP EXIT1,I CONTINUE AT ADDRESS STORED HERE * * RESETS CONTROLLER AND TAKES TIMEOUT EXIT * TIMOT JSB PRESA RESET CONTROLLER JMP CREJ4 TIMEOUT EXIT * * * ** STATW CLA CPA DUMMY CHECK FOR PRIV. CARD JMP STATX LDB INTBA GET MY EQT LDA DMACH GET MY DMA CPA B7 MUST CLEAR SIGN BIT ON INTBA INB OR SYSTEM WILL ISSUE ANOTHER LDA B,I "STC" WHICH WILL CAUSE FLOPPY AND BN20 TO START HANDSHAKING AGAIN STA B,I AND CLEAR CORE ** STATX LDA EQT6,I IF DMA INT. AND WRITE THEN SLA,RSS CHECK DATA FLAG JSB SKPFG * * GETS CONTROLLER STATUS * STATU CLA JSB OUTA LIA02 LIA DATCH GET STATUS STC02 STC DATCH JSB SKPFG TELL CONTROLLER WE GOT STATUS ALF,ALF STA STATS * LDB EQT7,I IF "FPCON" REQUEST THEN GOTO CPB BN10 OVER5. DO NOT CHECK XFER COMPLETE. JMP OVER5 * AND BN12 CHECK XFER COMPLETE(BIT 14) AND NO ERROR. CPA BN7 BN12=50017,BN7=40000 . JMP ERR0 NO ERROR SZA,RSS IF ONLY XFER COMP. NOT SET (BIT 14) THEN STA TEMP1 TEMP1 =0. (NO OTHER ERRORS) LDA STATS JMP ERR1 * * * "STATS" LOOKS LIKE THIS * * BITS 0-3 MEANING * 0 NO ERROR * 1 NO POWER * 2 DOOR OPEN * * 3 NO DISK IN DRIVE * 4 INVALID CMD. * 5 RECORD NOT FOUND * 6 TRACK NOT FOUND * 7 DATA CHECKWORD ERROR * 10 DATA OVER RUN * 11 VERIFY ERROR * * BITS 8-9 DRIVE NO. * 10 DISK CHANGE (2000) * 11 WRITE PROTECT (4000) * 12 NOT READY (10000) * 13 SEEK COMPLETE (20000) * 14 XFER COMPLETE (40000) * OVER5 AND BN9 CHECK FOR NR AND BITS 0-3 SZA ANY ERROR JMP ERR1 YES! EXAMINE STATUS * ERR0 LDB EQT8,I CALCULATE NO. WORDS SSB OR CHAR. CMB,INB IF CHAR. MAKE POS. STB BREGX SET TRANSMISSION LOG OK1 CLA SET A REG FOR SUCCESSFUL STA AREGX COMPLETION JMP EOOP1 EXIT * ERR1 LDB EQT10,I IF STATUS REQUEST DO NOT DOWN. CPB B7740 JMP OK1 STATUS REQUEST. * AND B11 IF VERIFY ERROR DO NOT RETRY CPA B11 JMP ERR0 VERIFY ERROR THEREFORE EXIT LDA STATS AND B17 ADA D.5 IF GREATER THAN 4 WE SSA,RSS WILL RETRY FOR TRANS. JMP RETRY ERROR LDA TEMP1 CHECK FOR TRANS. INCOMPLETE SZA,RSS JMP RETRY CREJ1 CLA,INA SET FOR MALFUNCTION STA AREGX CLA STA BREGX JMP EOOP1 * * ADDRESS,CHECKWORD,OVER RUN AND VERIFY ERROR * MAY BE RECOVERABLE * * RETRY ISZ EQT12,I INCREMENT COUNTER JMP RESRT HAVE WE RETRIED 10 TIMES JMP CREJ3 YES! RECOVERY NO POSSIBLE * IREJ1 CLA,INA SET FOR ILLEGAL R/W RSS * IREJ2 LDA B2 SET FOR ILLEGAL CONTROL JMP I.33,I * IREJ3 LDB B3 SET FOR NOT READY LDA EQT5,I AND BN8 IOR B SET FOR NOT READY STA EQT5,I LDA B3 RSS RSS IREJ4 LDA B4 SET FOR IMMEDIATE COMPLETION JMP I.33,I * * TRANSMISSION ERROR EXIT * CREJ3 LDB EQT9,I GET TRACK IN B REG. STB BREGX LDA B3 STA AREGX JMP EOOP1 * * SENDS PASSWORD TO CONTROLLER * PWORD NOP JSB PSTS CHECK FOR POWER ON JSB FIRST CHECK FOR FIRST ENTRY LDB PASS GET PASSWORD 127207 OTB02 OTB DATCH STC03 STC DATCH,C SEND IT JSB SKPFG JMP PWORD,I RETURN * * CHECKS FOR POWER STATUS. IF OFF THEN * A "PRESET" IS DONE TO CLEAR CONTROLLER AND * IT IS CHECKED AGAIN. * PSTS NOP LIA01 LIA CMDCH SSA IF SIGN SET THEN OK JMP PSTS,I JSB PRESA RESET CONTROLLER LIA03 LIA CMDCH CHECK IT AGAIN SSA JMP PSTS,I IT IS OK NOW LDB TEMP4 CHECK FOR ENTRY SZB,RSS I.33\C.33 =0\1 JMP IREJ3 I.33 NOT READY EXIT CLB,INB STB AREGX SET FOR C.33 NOT READY LDB B3 JMP OVER6 FIRST NOP LDA EQT11,I SZA IF EQT11 =0 THEN FIRST ENTRY JMP FIRST,I ISZ EQT11,I JSB PREST RESET CONTROLLER JMP FIRST,I * * OUTPUTS CONTENTS OF A REG. TO DATA CH. AND WAITS * FOR FLAG * OUTA NOP OTA01 OTA DATCH,C STC01 STC DATCH,C JSB SKPFG WAIT FOR FLAG JMP OUTA,I * * GIVES TIMED INTERRUPT RESPONSE * SKPFG NOP STC09 STC CMDCH ENABLE INTERRUPT LDB BN2 SETUP TIMER FOR 200 USEC. ISZ B IF FLAG NOT SET EXIT JMP *-1 DRIVER AND CONTINUE TO SFS01 SFS DATCH WAIT FOR INTERRUPT. JSB EXIT1 CLF01 CLF DATCH JMP SKPFG,I * CNTL0 JSB PREST LDA B4 LDB TEMP4 CHECK FOR I.33\C.33 EXIT SZB,RSS JMP IREJ4 CLA JMP C.33,I * * CONTL LSR 5 GET CONTROL WORD IN LOWER BITS AND B37 SZA,RSS IF CODE 0 THEN ABORT AND RESET JMP CNTL0 CPA B6 ONLY VALID COMMAND IS 6 RSS JMP IREJ2 LDA B7740 LOAD STATUS COMD STA EQT10,I * * * DOES THE PROCESSING OF SPECIAL COMMANDS USED * IN THE FORMATTING OF A DISK. IT IS ONLY CALLED * IF BITS 6-10 OF CONWD=23. EQT10 (DSECT) CONTAINS * COMMAND TO BE PROCESSED. * * * DSECT COMMAND * 0 FORMAT * 7600 STEP TRACK IN * 7630 WRITE TRACK 0 AND SECTOR 0 * 7640 WRITE DEFECTIVE TRACK * 7740 STATUS * * FIP LDA EQT10,I GET COMMAND SZA,RSS JMP FMTRK FOR FORMAT TRACK CPA B7600 JMP FPCON STEP HEAD IN CPA B7630 JMP WRMAX FOR WRITING TRACK 0, SECTOR 0 CPA B7640 JMP FPCON WRITE DEFECTIVE TRACK CPA B7740 GET STATUS JMP FPCON JMP IREJ1 ILLEGAL R\W * * * USED FOR FORMATTING DISK * FMTRK LDA EQT9,I GET TRACK TO FORMAT ALF,ALS POSITION IN BITS 5-11 IOR DRIVE ADD DRIVE IN BITS 12-13 IOR FMTCD ADD FORMAT COMMAND (140036) STA FIPCD * * USED FOR "STEP TRACK","WRITE DEF. TRK." * AND "STATUS" * * JMP ISTR1 * * FPCON JSB PWORD SEND PASSWORD LDA EQT10,I GET COMMAND LDB BN10 SET FPCON FLAG STB EQT7,I IOR DRIVE ADD DRIVE IOR STPCD ADD OCT 140037 JSB OUTA JMP STATU * * WRMAX CLA SET FOR SECTOR 0 STA EQT10,I STA EQT9,I SET FOR TRACK 0 JMP ISTR1 * * * DOES NOT WAIT FOR FLAG ON RESET * THIS IS USED BY AND * PRESA NOP CLB JMP OVER1 * SETS 9885 TO POWER ON CONDITION * AND WAITS FOR FLAG * PREST NOP CLB,INB OVER1 CLA,INA DRIVE IS PRESET BY TOGGLING BIT 0 JSB OUTAC CLA JSB OUTAC SZB,RSS CHECK FOR PRESA ENTRY JMP PRESA,I JSB OUTA WAIT FOR CONTROLLER TO PROCESS PRESET JMP PREST,I * BN3 OCT 170001 BN6 OCT 103700 BN5 OCT 100077 BN4 OCT 102300 B5600 OCT 5600 B5000 OCT 5000 B4000 OCT 4000 B.1 OCT -1 B.4 OCT -4 B200 OCT 200 B1400 OCT 1400 B40 OCT 40 B300 OCT 300 B100 OCT 100 B6 OCT 6 B1000 OCT 1000 B37 OCT 37 B400 OCT 400 B7740 OCT 7740 B7600 OCT 7600 B7630 OCT 7630 B7640 OCT 7640 B2000 OCT 2000 * FMTCD OCT 140036 STPCD OCT 140037 * * IS TIMEOUT EXIT * CREJ4 LDA B4 STA AREGX * * IS PRIMARY DRIVER EXIT * * EOOP1 LDB B37 IF TRANSMISSION INCOMPLETE ERROR LDA TEMP1 ONLY,THE SET FOR ERROR 37 SZA,RSS JMP OVER6 * LDA STATS GET STATUS WORD ALS SHIFT 1 AND B37 ISOLATE BITS (0-4) SZA IF NO ERROR SKIP INA ERROR,SET BIT 0 STA B LDA STATS POSITION DISK CHANGE TO ALF,ALF BIT 6 AND WRITE PROTECT ALF TO BIT 7 AND B300 ISOLATE AND IOR B OR WITH ERROR BITS STA B AND STORE OVER6 LDA EQT5,I GET OLD STATUS AND BN8 IOR B MERGE NEW STATUS STA EQT5,I AND REPLACE ** LDA EQT6,I CHECK FOR RMXTK EXIT AND B2303 CPA B2301 JMP MXTEK THIS IS A MAX TRACK EXIT ** LDB BREGX GET TRANS. LOG JMP EOOP2 REQUEST COMPLETE * * STATUS IN EQT5 IS RETURNED PER BELOW: * BITS 0-6 MEANING * 0000000 NO ERROR * 0000011 NO DRIVE POWER * 0000101 DOOR OPEN * 0000111 NO DISK * 0001001 INVALID COMMAND * 0001011 RECORD NOT FOUND * 0001101 TRACK NOT FOUND * 0001111 DATA CHECKWORD ERROR * 0010011 READ CLOSE TOL. ERROR * 0011111 TRANSMISSION INCOMPLETE * 0100001 END OF TRACK. DATA BLOCK TOO LONG * 0010001 DATA OVER RUN * * * * BITS 0-7 * 00100000 END OF TRACK. ACCESS TRACK>66 * 01000000 DISK CHANGE * 10000000 DISK WRITE PROTECTED * * * USED FOR "FIP" EXITS * MXTEK LDB DATA GET NO. OF TRACKS ON DISK LDA DRIVE ALF GET DRIVE NO. ADA ADDR FIND STORAGE ADDRESS STB A,I STORE IT FOR FUTURE USE LDA AREGX SLA IF NO ERROR RETURN SET EOT BIT 5 JMP C.33,I LDA B40 IOR EQT5,I STA EQT5,I EOOP2 LDA AREGX CHECK FOR ERROR (A NOT 0) SLA,RSS JMP C.33,I CLA JSB OUTA ERROR, SO HANDSHAKE TO AVOID ANY EXTRA LDA AREGX INTERRUPTS ON DATA CHANNEL LDB BREGX JMP C.33,I RETURN * * * * SETIO NOP INA SET FOR CONFIG. DATA CHANNEL IOR BN4 STA SFS01 SFS IS 1023XX STA SFS02 IOR B1400 STC ID 1037XX STA STC01 STA STC02 STA STC03 STA STC04 STA STC06 ADA B.1 COFIG. COMMD. CHANNEL STA STC09 CMD CH. STA STC10 STA STC11 XOR B200 LIA IS 1025XX STA LIA01 CMD CH. STA LIA03 INA STA LIA02 DATA CH. STA LIA02 XOR B400 STA CLF01 * * LDA DMA STA DMACH * * LDA STC01 OTA IS 1026XX XOR B100 STA OTA01 STA OTA03 STA OTA04 ADA B.1 STA OTA05 CMD CH. XOR B4000 INA STA OTB02 DATA CH. AND BN5 STA DMAW1 CONFIGURE DMA WORD 1 LDA BN6 IOR DMACH STA STCDM STC,C DMACH * IOR B5000 STA CLCD1 CLC IS 1077XX STA CLCD2 * XOR B5600 STF IS 1021XX STA STFDM THIS IS STF ON DMA IOR B1000 STA CLFDM THIS IS A 1031XX(CLF) ON DMA * * LDA EQT4,I CONFIGURE DRIVE # FROM SUBCHANNEL ALF ALS,ALS AND BN3 DRIVE IN BITS 12-13 (0-3) STA DRIVE ALF ADA B.4 CHECK FOR LEGAL SUBCHANNEL SSA,RSS LEGAL IS 0-3 JMP IREJ3 NOT READY ADA B4 ADA ADDR FIND NO OF TRACKS FOR THIS DRIVE LDA A,I STA NUTRK STORE IT AT NUTRK * * CLB LDA EQT6,I IS THIS READ CLOSE TOLERANCE SLA,RSS JMP OVER4 NOT A READ AND B2000 CPA B2000 LDB BN7 OVER4 STB RDCLS 40000B LDA RSS LDB DMACH GET ASSIGNED DMA CH. SLB,RSS CH7\CH6 = RSS\0 FOR DMASW CLA STA DMASW * LDB RSS LDA EQT6,I GET CONWD AND B2302 IF "FIP" COMMAND CPA B2302 THEN SEE IF "FORMAT" RSS JMP OVER7 LDA EQT10,I SZA,RSS CLB OVER7 STB SW1 SET A "RSS" IN ALL SWITCHES FOR STB SW2 NON "FORMAT" COMMAND JMP SETIO,I * * * STORAGE FOR NO. OF TRACKS * INITIALIZED FOR 67 * MAX1 DEC 67 DEC 67 DEC 67 DEC 67 ADDR DEF MAX1 * EQU'S FOR VARIOUS ENTRIES * A EQU 0 B EQU 1 CMDCH EQU 20 DATCH EQU 21 * * SYSTEM BASE PAGE COMMUNICATION AREA * . EQU 1650B ESTABLISH ORIGIN OF EQT'S EQT1 EQU .+8 LIST POINTER EQT2 EQU .+9 I.33 ADDRESS EQT3 EQU .+10 C.33 ADDRESS EQT4 EQU .+11 SUBCHANNEL(6-10) EQT5 EQU .+12 STATUS(0-7) EQT6 EQU .+13 CONWD EQT7 EQU .+14 BUFFER ADD. EQT8 EQU .+15 BUFFER LENGTH EQT9 EQU .+16 TRACK NO. EQT10 EQU .+17 SECTOR NO.(EXCEPT IF CONWD=33) EQT11 EQU .+18 FIRST ENTRY FLAG EQT12 EQU .+81 RETRY COUNTER EQT13 EQU .+82 EXIT1 RETURN EQT14 EQU .+83 TIME OUT CLOCK EQT15 EQU .+84 TIME OUT VALUE * DMA EQU .+19 CURRENT DMA CHANNEL INTBA EQU .+4 FWA OF INTERRUPT TABLE DUMMY EQU .+55 ADDRESS OF PRIVILEGED IO CARD * * ORG * END