ASMB,Q,C HED RTE UNIVERSAL INTERFACE DRIVER - 09580-16079 NAM DVM72,0 09580-16079 REV.2026 800318 * ******************************************************************** * * RELOC. 09580-16079 * SOURCE 09580-18079 * ERS A-09580-16079-1 * * C. LEATH 03/15/77 REV. A * T. KONDO 10/24/77 REV. B * D. LAMPMAN 3/18/80 REV.2026 * * HP 92425A TEST SYSTEM SOFTWARE IS THE PROPRIETARY * MATERIAL OF THE HEWLETT-PACKARD COMPANY. USE AND * DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. * ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM * MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED * TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR * WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * **-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* SPC 3 SPC 3 * I. IDENTIFICATION - UNIVERSAL INTERFACE DRIVER * ----------------- * * II. LANGUAGE - ASSEMBLY LANGUAGE, RELOCATABLE * ------------ * * III. TYPE - RTE EXEC CALLABLE DRIVER * --------- * * IV. LENGTH - 476 (DECIMAL) * ---------- * * V. SPECIAL HARDWARE REQUIRED - * * ---------------------------- * * 12556 -40 BIT I/O CARD OR * 12566 -MICROCIRCUIT CARD OR * 12604 -DATA SOURCE INTERFACE CARD OR * 12661 -DVS PROGRAMMER CARD * DMA -FOR SPECIAL APPLICATIONS(E.G.1010) * * * VII. ENTRY POINTS - IM72,CM72 * ----------------- * * VIII. EXTERNALS - $LIST * --------------- * SKP * * * XI. PROGRAM LISTING - * ------------------- * ENT IM72,CM72 EXT $LIST * * ******************************************************************** * THE FOLLOWING IS AN EXPLANATION OF SOME OF THE SALIENT * * FEATURES OF THE DRIVER. SOME MORE EXPLANATIONS WITH GREATER * * DETAIL ARE INCLUDED IN THE COMMENTS PRECEDING THE OPERATION. * * TO GAIN A LESS THAN MURKY UNDERSTANDING OF WHAT IS GOING ON IT * * WOULD BEHOOVE ONE TO UNDERSTAND HOW A DEVICE SUBROUTINE MAKES * * THE DRIVER UNDERSTAND WHAT IT WANTS DONE. THIS IS DONE WITH * THE CONTROL WORD (ICNWRD) SEEN IN ALL RTE MANUALS UNDER EXEC * * I/O CALLS.THIS CONTROL WORD IS FORMATTED IN THE DEVICE SUBROUTINE * AND WHEN AN EXEC I/O CALL IS MADE THIS WORD IS CHANGED BY THE * * EXEC TO REFLECT THE ICODE IN BITS 0-5 (ICODE:READ=1,WRITE=2,CON-* * TROL = 3). * THE CONWRD IS THEN STORED IN WORD 6 OF THE EQT TABLE. * * SINCE A PICTURE SPEAKS LOUDER THAN A BUNCH OF WORDS, THE * * ILLUSTRATION BELOW SHOWS THE CONTROL WORD BEFORE THE EXEC CALL * * AND AFTER. * * * * * * BEFORE: CONWRD FORMAT SENT FROM DEVICE SUBROUTINE VIA AN * * EXEC I/O CALL * * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * +BITS 6 TO 15 FUNCTION CODES++BITS 0 TO 5 LU NUMBER + * * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * * * AFTER: CONWRD FORMAT AFTER PASSING THRU RTIOC * * (NOTE: A REGISTER CONTAINS DEVICE SUBCHANNEL * * UPON ENTERRING DRIVER) * * +++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * +BITS 6-15 SAME AS BEFORE+++BITS 0-5 = ICODE + * * +++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * * * THE ROUTINE USES THE SELECT CODE TO FORMAT THE * * I/0 INSTRUCTIONS, AND THE ICODE TO DETERMINE I/O DIRECTION * * (READ OR WRITE). * * * * BITS 6 TO 10 ARE USED BY DVR72 TO DETERMINE MANY THINGS * * ABOUT WHAT TYPE OF I/O THE DEVICE SUBROUTINE WANTS TO DO. BIT * * 6 IS ALWAYS SET TO INDICATE BINARY MODE OF ICO DATA TRANSFER. * * IF BIT 6 IS NOT SET THE A REGISTER IS SET TO 2 TO INDICATE * * ILLEGAL REQUEST AND A RETURN IS MADE TO RTIOC. * * * BITS 7 AND 8 DESIGNATE FOUR DIFFERENT TYPES OF I/O SEQUEN- * * CES DEPENDING ON WHETHER THE I/O REQUEST IS READ OR WRITE. * * THE FOLLOWING TABLE DESCRIBES THE DIFFERENT TYPES OF I/O * * SEQUENCES OBTAINABLE WITH THE DIFFERENT SETTINGS OF BITS 7 AND * * 8. * * COLUMN 1 SHOWS THE SETTING OF BITS 6,7&8 OF THE CONWD, NOTE THAT * * IN PROGRAMMING THEY WOULD BE LOOKED AT IN THE OPPOSITE DIRECTION* * (I.E. 876). * * COLUMN 2 DESIGNATES THE MODE OF INTERRUPT (INTERRUPT OR * * NONINTERRUPT). THE INTERRUPT MODE WOULD * START THE I/O IN THE INITIATOR AND COMPLETE IT IN THE COMPLETION* * SECTION OF THE DRIVER. THE SET CONTROL FLIP FLOP IS SET IN THIS* * MODE AND RETURN TO RTIOC WITH THE A REGISTER = 0. * THE CONTINUATION OR COMPLETION SECTION IN THIS MODE CONTINUES * * THE I O TRANSFER,SETTING THE CONTROL FF EACH TIME. UPON COMPLE- * * TION THE CONTROL FLIP IS CLEARED (CLC) AND THE FLAG FF IS SET * (STF) * * THE NONINTERRUPT MODE DEPENDING ON BIT 8 COMPLETES ALL I/O EITHER* * IN THE INITIATOR (BIT 8 = 0) OR AFTER THE FIRST INTERRUPT * * (BIT 8 = 1).THE SETTING OF BIT 8 IMPLIES THAT AN INTERRUPT IS * * EXPECTED, HOWEVER ANY I/O TRANSFERS BEFORE OR AFTER THE SETTING * * OF THE CONTROL FF ARE DONE WITHOUT AN INTERRUPT. THERE IS A DIF-* * FERRENCE IN WHAT HAPPENS WITH A READ OR WRITE WHEN BIT 8 IS SET.* * FOR A "READ" THE CONTROL FF IS SET BEFORE ANY I/O TRANSFER, AND * * THE NONINTERRUPT TRANSFER TAKES PLACE IN THE CONTINUATOR OR * * COMPLETION SECTION. FOR A WRITE OPERATION ALL I/O TRANSFERS TAKE* * PLACE BEFORE SETTING THE CONTROL FF, AND TERMINATION OCCURS * * AFTER THE INTERRUPT. * * * COLUMN 3 IS THE DIRECTION OF TRANSFER, READ OR WRITE. * * * COLUMN 4 SHOWS THE I/O OPERATION IN THE INITIATOR . * * * COLUMN 5 SHOWS THE I/O OPERATIONS IN THE CONTINUATOR SECTION * (AKA COMPLETION SECTION). WHERE NO FURTHER I/O IS EXPECTED AS * * A RESULT OF SAY THE NONINTERRUPT MODE "N/A" APPEARS. * * * COLUMN 6 SHOWS WHAT HAPPENS WHEN ALL I/O TRANSFER IS DONE * EITHER IN THE INITIATOR OR CONTINUATOR. * * * THE SETTING OF BITS 9 AND 10 ARE FOR SPECIAL APPLICATIONS TO * * BE EXPLAINED LATER. SKP ******************************************************************** * * * * * * * *BITS 876 * MODE * I/O MODE * INIT. * CONTIN. * FINI * ******************************************************************** * 001 * INTERRUPT * READ * CLC,X * LIA,X *CLC,X * * * * * LIA,X * STC,C *STF,X * * * * * STC,C,X * FOR EACH* * * * * * * WORD. * * ****************************************************************** * * * * * * * * * 101 *INTERRUPT * READ * CLC,X * * CLC,X * * * * * STC,C * LIA,X * STF,X * * * * * * STC,C,X* * * * * * *FOR EACH* * * * * * *WORD * * ******************************************************************** * 011 *NON-INTERRUPT * READ * CLC,X * N/A * CLC,X * * * * * LIA,X * * STF,X * * * * * LIA,X * * RETURN * * * * * ETC.UNTIL* * TO RTIOC * * * * * FINISHED * * W/A=4 !! * ****************************************************************** * * * * * * * * * 111 *NON-INTERRUPT * READ * CLC,X * LIA,X * CLC,X * * * AFTER AN INI-* * STC,C * LIA,X * STF,X * * * TIAL INTER- * * * ETC. * * * * RUPT. * * *UNTIL * * * * * *FINISHED* * ******************************************************************** * 001 *INTERRUPT * WRITE * CLC,X * * CLC,X * * * * * OTA,X * OTA,X * STF,X * * * * * STC,C,X * STC,C,X* * * * * * *FOR EA. * * * * * * *WORD * * ******************************************************************** * 101 *INTERRUPT * WRITE * CLC,X * * * * * * * STC,C * OTA ,X * CLC,X * * * * * OTA,X * STC,C,X* STF,X * * * * * STC,C,X * FOR EA.* * * * * * * WORD. * * * * * * * * * ******************************************************************** * 011 *NON-INTERRUPT * WRITE * CLC,X * N/A * CLC,X * * * * * OTA,X * * STF,X * * * * * OTA,X * * RETURN * * * * * ETC.UNTIL* * W/A=4!! * * * * * FINISHED * * * ******************************************************************** * 111 *NON-INTERRUPT * WRITE * CLC,X * N A * CLC,X * * * * * OTA,X * * STF,X * * * * * OTA,X * * * * * * * ETC.UNTIL* * * * * * * FINISHED * * * * * * * THEN STC,* * * ********************************************************************* SKP SPC 2 * * * NOTE: THE CLC,X THATIS SHOWN IN THE INITIATION COLUMN IS * * EXECUTED ONCE UPON ENTRY INTO DRIVER AND NOT FOR EACH WORD * TRANSFERRED. * * * * WHERE N/A APPEARS IN THE CONTINUATION COLUMN - THIS INDI- * * CATES THAT NO MORE I/O TAKES PLACE AFTER ALL DATA IS * * TRANSFERRED. THE ONLY THING THAT HAPPENS IN THIS CASE * * EITHER AFTER AN INTERRUPT (BIT 7 = 0), OR AT THE EXPIRA- * * TION OF THE WORD COUNTER IN THE NON-INTERRUPT MODE (BIT 7=* * 1) IS THE SEQUENCE CLC,X - STF,X. * * * ! - THIS LAST STC,C ARMS THE CARD FOR AN INTERRUPT, AND THE * * PREVIOUS SET CONTROLS (STC) WERE USED FOR STROBING DATA * * INTO THE I/O DEVICE. * !! - RETURNING TO RTIOC WITH THE REGISTER =4,TELLS * * IT THAT I/O IS COMPLETE. * * THIS EXISTS IN CASES WHERE TERMINATION TAKES PLACE * * IN THE INITIATION SECTION OF THE DRIVER. * * RETURNS IN THE COMPLETION SECTION ARE OF TWO TYPES * * P+1 : COMPLETION WITH A=0 * P+2 : CONTINUATION (AN INTERRUPT IS EXPECTED TO COM- * * CONTINUE I/O OR TERMINATE). * * * * SKP SPC 3 * IN ADDITION TO THE SEQUENCES SPECIFIED BY BITS 7 AND 8, BITS 9 * * AND 10 HAVE BEEN UTILIZED TO EXPAND THE CONTROL AND I O SEQUENCE * * CAPABILITY OF THIS DRIVER. * * * * BIT 9 SET = 1, INDICATES THAT IN ADDITION TO THE CONTROL INFOR * * MATION SPECIFIED BY THE CONWD IN EQT6 THERE IS ADDITIONAL CON- * * TROL INFORMATION IN THE FIRST WORD OF THE I O BUFFER OF THE * * CALLING DEVICE SUBROUTINE. AT THIS TIME THE CODES THAT EXIST * * HAVE THE FOLLOWING MEANINGS: * * 9= DMA TRANSFER W/O STC,C TO START DEVICE * 10= " " WITH " " " " * 11= I/O SEQUENCE IN CNTRL BUFFER - COMPLETION IN INITIATOR * 12= " " " " " - " " " * WITH INTERRUPT EXPECTED * 13= " " " " " -WITH DATA FOLLOWING IN * DATA BUFFER W/O CLC,STF AT FINI * 14 " " " " " -WITH DATA FOLLOWING IN * DATA BUFFER WITH CLC,STF AT FINI * 15= LIA/LIB OR OTA/OTB STC,C THEN SFC,CLC FOR EACH TRANSFER * * SKP SPC 3 * SUMMARY OF SUBFUNCTION CODES AND BITS SETTINGS * IN THE CONWRD. ********************************************************** *SUBFUNC- ! 6 ! 7 ! 8 ! 9 ! 10 ! 12 ! BITS ! *TION ************************************************ * CODES * ************************************************ * 9 ! 1 ! 0 ! 0 ! 1 ! 0 ! 0 ! ************************************************ * 10 ! 1 ! 0 ! 0 ! 1 ! 0 ! 0 ! ************************************************ * 11 ! 1 ! DC ! DC ! 1 ! 0 ! 1 ! ************************************************ * 12 ! 1 ! DC ! DC ! 1 ! 1 ! 1 ! ************************************************ * 13 ! 1 ! X ! X ! 1 ! X ! 1 ! ************************************************ * 14 ! 1 ! X ! X ! 1 ! X ! 1 ! ************************************************ * 15 ! 1 ! X ! X ! 1 ! 0 ! 0 ! ************************************************ * * DC = DON'T CARE (IGNORED DURING PROCESSING) * X = 0 OR 1 ************************************************ SKP * * * THE EQT TABLE FOR DVM72 : * * * EQT1 - SUSPENDED LIST LINKAGE. LINKED TO THE ID SEGMENT OF THE * * CALLING PROGRAM. IF REIO IS USED IN THE CALL THE LINKAGE * * IS TO AN ID SEGMENT CREATED BY EXEC. * EQT2 - INITIATION SECTION ENTRY POINT * EQT3 - CONTINUATION SECTION ENTRY POINT. * * * ***** EQT 4 - FORMAT D BPS TUU UUU CCC CCC * * D = DMA ASSIGNED , 0=NO(ASSIGNED DYNAMICALLY) * B = BUFFERING ON YES = 1 OR NO =0 * P = POWER FAIL NO = 0 * S = TIME OUT SERVICED BY DVM YES=1 * T = TIME OUT OCCURANCE * U = UNIT OR SUBCHANNEL * C = I/O CHANNEL(SLOT) * ***** EQT 5 - FORMAT A ATT TTT TSS SSS SSS * * A = AVAILABILITY * T = DEVICE TYPE 72 * S = STATUS BYTE WHERE: 1 = ILLEGAL CONTROL CODE * 2 = TIME OUT 500USEC DELAY * 3 = TIME OUT BETWEEN * I/O TRANSFERS. * BIT10 OF EQT6 SET=1. * 4 = TIME OUT ERROR * BIT 10 OF EQT6 NOT SET * 5 = NON EXISTENT IDSEG * 6 = ILLEGAL CODE FOR I/O INST. * 7 = ILLEGAL CW1 FOR DMA * 8 = ALARM PROGRAM SCHEDULED * * * EQT6 - CONWRD * EQT7 - REQUEST BUFFER ADDRESS * EQT8 - REQUEST BUFFER LENGTH * EQT9 - TEMPORARY STORAGE . IF BIT 12 IS SET IN THE CONWRD THEN * * THIS WORD CONTAINS THE CONTROL BUFFER ADDRESS. * EQT10- WORD COUNTER FOR BOTH NORMAL I/O REQUESTS AND CONTROL * * REQUESTS. * * EQT11 - SPECIAL INTERRUPT FLAG. * EQT12 - STORAGE FOR SUBFUNCTION CODES. * EQT13 - STORAGE FOR ID SEGMENT ADDRESS FOR INTERRUPT PROCESSING * * ROUTINES. THIS LOCATIONS IS ZERO IF NO INTERRUPT PROGRAM * IS AVAILABLE AND A NEGATIVE IDSEGMENT ADDRESS IF THE * INTERRUPT PROGRAM HAS BEEN DISARMED. * EQT14 - TIME OUT VALUE. * EQT15 - TIME OUT COUNTER. * ******************************************************************** SKP * * * INITIATION SECTION /////////////////* IM72 NOP INITIATOR SECTION ENTRY POINT STA SCODE SAVE SELECT CODE JSB SETIO CLB CLEAR STATUS WORD JSB STEQ5 LDA EQT6,I GET AND AND .3 ISOLATE REQUEST CODE * CPA .1 IF REQUEST CODE = 1 OR 2, RSS GO PROCESS READ OR WRITE CPA .2 REQUEST JMP D04 CPA .3 SEE IF THIS IS A CONTROL REQUEST JMP CNTRL * * REQUEST ERROR - CAUSE REJECT RETURN TO I/O CONTROL * REJEC LDA .2 SET (A) = 2 FOR REQUEST REJECT JMP IM72,I -EXIT- REJ LDB .1 ILLEGAL SUBFUNCTION CODE JSB STEQ5 JMP REJEC SPC 3 * * PROCESS READ OR WRITE REQUEST * D04 JSB CKMOD GET CONTROL WORD AND NOP ROTATE MODE BIT TO MSB SSB,RSS IF NOT BINARY MODE (MSB = 1), JMP REJEC REJECT REQUEST CLA 0 EQT ENTRY FOR SUBFUNCTION CODE STA EQT12,I * CONT JSB TMCHK GO SET BIT12 OF EQT4 CONT1 RBR,RBR CHECK BIT 9 TO SEE IF SUBFUNCTION SLB,RSS IS IN THE FIRST WORD OF BUFFER JMP IO2 NO IT ISN'T SO CONTINUE LDB EQT7,I BUFFER ADDRESS ISZ EQT7,I BUMP ADDRESS POINTER LDA EQT8,I DECREMENT WORD COUNTER ADA N1 STA EQT8,I LDA B,I CONTENTS OF BUFFER STA EQT12,I TEMP STORAGE FOR SUBFUNCTION CODE ADA LCD CODE LEGALITY CHECKS LCD =LOWER NUMBER SSA LESS THAN LCD JMP REJ YES ERROR LDA EQT12,I SEE IF GREATER THAN UPPPER LIMIT ADA HCD1 SZA = 16 SSA,RSS >16 JMP REJ YES REJECT REQUEST JSB DMACK SEE IF THIS IS A DMA TRANSFER JMP DMA JMP VARIN GO PROCESS CONTROL BUFFER IO2 CLC 0 RESET I/O CARD CONT2 LDA EQT7,I STA EQT9,I SET AS CURRENT ADDRESS LDA EQT8,I GET BUFFER LENGTH SZA IF ZERO OR NEGATIVE BUFFER LENGTH, SSA REJECT REQUEST JMP REJEC CMA,INA MAKE NEGATIVE FOR COUNTER STA EQT10,I SET AS CURRENT COUNT LDA IEXIT SET UP RETURN STA CM72 TO INITIATOR SECTION CLA CLEAR TERMINAL INTERRUPT FLAG STA EQT11,I JSB CKMOD POSITION BITS NOP SEZ,RSS IS THIS A WRITE REQUEST JMP D10 YES GO OUTPUT FIRST WORD SLB,RSS INTERRUPT READ? JMP IO3 YES, SET FOR INTERRUPT RBR SLB NO, INITIAL INTERRUPT REQUESTED? JMP IO3 YES, SET FOR INITIAL INTERRUPT JMP IO4 GO INPUT WORD EXIT JMP IM72,I -EXIT- SKP *** CONTINUATOR SECTION ENTRY POINT (C.72) *** * CM72 NOP CONTINUATOR SECTION ENTRY POINT JSB SETIO CONFIGURE I/O INSTRUCTIONS * NODMA LDB EQT1,I SEE IF NORMAL I/O IS IN PROGRESS SZB JMP D8 REQUEST IS QUEUED SO GO SEE WHATS HAPPENING STB EQT15,I ZERO TIME OUT WORD CLB CPB EQT13,I DOES ALARM PROGRAM EXIST? JMP FINI NO THEN BAIL OUT P+2 JMP SCHED ATTEMPT TO SCHEDULE INTERRUPT ROUTINE D8 LDA EQT4,I TEST BIT 11 TO SEE IF TIME OUT ALF SSA WAS ENTRY DUE TO TIME OUT? JMP TMOUT YES THEN PROCESS TIME OUT TCONT JSB DMACK SEE IF DMA XFER WAS IN PROGRESS JMP C.DMA YES TAKE SPECIAL EXIT JSB CKMOD IS IT READ REQUEST NOP SEZ JMP D12 YES, GO INPUT WORD JMP D9 WRITE REQUEST * BIT 15 OF A REGISTER IS SET TO INDICATE TO * RTIOC TO RELEASE DMA CHANNEL ASSIGNED TO THIS * DRIVER. * C.DMA LDA CW2 SET A = BIT 15 SET TO 1-SO THAT DMA JMP IO6 CHANNEL WILL BE RETURNED TO SYSTEM * SPC 3 SKP * * CONTINUATOR OUTPUT SECTION * D9 CLA IF CURRENT BUFFER LENGTH = 0, CPA EQT10,I SEE IF FINISHED JMP D11 * D10 LDB EQT9,I GET CURRENT BUFFER ADDRESS ISZ EQT9,I INDEX BUFFER ADDRESS LDA B,I GET WORD FROM BUFFER ISZ EQT10,I INDEX WORD COUNTER NOP * IO1 OTA 0 OUTPUT WORD TO I/O CARD JSB CKMOD CHECK MODE. NON-INTERRUPT? JMP D9 YES, OUTPUT NEXT WORD IO3 STC 0,C NO, SET FOR INTERRUPT JSB DELAY SEE IF WE MUST SFC BEFORE LEAVING JMP D9 P+1 RETURN -TO SEE IF MORE DATA TO TRANSMIT * FINI CLA SET (A) = 0 FOR NO ERRORS ISZ CM72 SET RETURN TO P+2 JMP CM72,I -EXIT- * D11 RBR CHECK FOR TERMINAL INTERRUPT * THAT IS DO A STC,C BEFORE EXIT SLB,RSS TERMINAL INTERRUPT REQUESTED? JMP D15 NO, UPDATE STATUS AND EXIT CLA,INA HAS THE TERMINAL CPA EQT11,I INTERRUPT FLAG BEEN SET? JMP D15 YES, UPDATE STATUS AND EXIT ISZ EQT11,I NO, SET THE INTERRUPT FLAG JMP IO3 GO SET FOR INTERRUPT SPC 3 * * CONTINUATOR INPUT SECTION * D12 CLA CPA EQT10,I JMP D15 IO4 LIA 0 GET WORD FROM I/O CARD LDB EQT9,I GET BUFFER ADDRESS STA B,I SET WORD IN BUFFER ISZ EQT9,I INDEX BUFFER ADDRESS ISZ EQT10,I INDEX WORD COUNTER RSS JMP D15 NO MORE, EXIT JSB CKMOD CHECK MODE, NON-INTERRUPT? JMP IO4 YES, INPUT NEXT WORD JMP IO3 NO, SET FOR INTERRUPT SPC 3 SKP * * STATUS AND COMPLETION SECTION * D15 CLA SET (A) = 0 FOR NO ERRORS JSB CKMOD CHECK MODE, NON-INTERRUPT?(BIT7=1) LDA .4 YES, SET (A) = 4 FOR DONE RBR INITIAL OR TERMINAL SLB INTERRUPT REQUESTED? (BIT8=1) CLA YES, SET (A) = 0 FOR DONE SZA ANY INTERRUPTS IN THIS REQUEST? ISZ CM72 NO, SET RETURN TO INITIATOR LDB EQT12,I CPB .13 JMP COMEX AVOID CLC AND STF IF SUBFUNC=13 IO7 STF 0 RESET DEVICE FLAG IO6 CLC 0 DISABLE ANY INTERRUPTS COMEX LDB EQT8,I SET (B) = # WORDS JMP CM72,I -EXIT- SKP SPC 3 * * * THIS SUBROUTINE PROCESSES TIME OUTS. IF A TIME OUT IS DETECTED * BY DVR72 IT IS HANDLED IN EITHER OF THE FOLLOWING TWO MANNERS: * * * * 1. IF BIT 10 HAD BEEN SET IN THE CONWD (EQT6) THE DRIVER INTERPRETS* * THIS AS UTILIZATION OF THE I/O SUSPEND FEATURE OF RTE TO ENFORCE A* * DELAY BETWEEM EACH I/O TRANSFER. THIS TYPE OF TIME OUT IS NOT * * INTERPRETED AS AN ERROR. * * 2. IF BIT 10 HAD NOT BEEN SET THE TIME OUT WOULD BE FLAGGED AS AN * * ERROR AND BITS 0-7 OF EQT 5 IS SET TO 4. * IF DMA HAD BEEN IN PROGRESS THE DMA CHANNEL IS RETURNED TO THE * * SYSTEM. * * * * TMOUT LDA BIT11 CMA MAKE 4000B = 173777 AND EQT4,I RESET TIME OUT BIT 11 STA EQT4,I LDA BIT10 CHECK BIT 10 AND EQT6,I SZA,RSS IS A = 0 JMP TOERR YES - TIME OUT ERROR LDB .3 SET EQT5 JSB STEQ5 JMP TCONT CONTINUE I/O IF ANYMORE TOERR LDB .4 JSB STEQ5 JSB DMACK SEE IS DMA WAS IN PROGRESS JMP C.DMA IF SO - RETURN CHANNEL AND EXIT. CLA JMP IO7 EXIT P+1 * SPC 3 STEQ5 NOP LDA EQT5,I AND MSKUB IOR B STA EQT5,I JMP STEQ5,I SKP SPC 3 * SUBROUTINE TO CONFIGURE I/O INSTRUCTIONS * SETIO NOP IOR OTA COMBINE WITH I/O ADDRESS STA IO1 SET STA IO15 STA OTX * ADA .1100 CONSTRUCT INSTRUCTION STA IO3 STA STX STA IO22 XOR .1500 CONSTRUCT INSTRUCTION STA IO14 * XOR .700 CONTSRUCT INSTRUCTION STA IO4 STA LIX * XOR .400 CONSTRUCT INSTRUCTION STA IO7 STA SFX * IOR .4600 CONSTRUCT INSTRUCTION STA IO2 STA IO13 STA IO6 STA IO23 STA CLX * XOR .5600 STA CFX JMP SETIO,I * * * * SKP SPC 3 * * SUBROUTINE TO CHECK REQUEST TYPE * AND INTERRUPT MODE * THIS SUBROUTINE MAKES BIT6 OF EQT6 THE MSB, AND * BIT7 THE LSB. * THE RETURNS TO THE CALLING PROGRAM ARE AS FOLLOWS: * P+2 = BIT7 IS 0 (INTERRUPT MODE) * P+1 =BIT7 IS 1 (NON-INTERRUPT MODE) * * CKMOD NOP LDB EQT6,I GET CONTROL WORD CLE,ERB SET READ/WRITE FLAG BLF,BLF ROTATE MODE BIT TO MSB RBL,RBL SLB,RSS INTERRUPT OPERATION (LSB = 0)? ISZ CKMOD YES, SET RETURN TO P+2 JMP CKMOD,I NO, RETURN TO P+1 SPC 3 * * TMCHK IS RESPONSIBLE FOR: * * 1. SETTING BIT 12 OF EQT4 TO TELL RTE THAT WE WILL HANDLE * TIME OUT. * 2. IF EQT14 IS NE 0, MEANING A TIME OUT VALUE HAS BEEN * SPECIFIED THEN A T.O. VALUE OF .5SEC IS INSERTED * INTO EQT14 AND EQT15. * TMCHK NOP LDA EQT4,I IOR BIT12 STA EQT4,I LDA EQT14,I SZA JMP TMCHK,I LDA UNO STA EQT14,I STA EQT15,I JMP TMCHK,I SKP * * SCHEDULE INTERRUPT HANDLING ROUTINE FOR DEVICE FOR IMMEDIATE * EXECUTION UPON RETURN TO RTIOC. * 'SCHED' FIRST CHECKS TO SEE IF THE INTERRUPT ROUTINE IS * DORMANT, AND IF NOT IT RETURNS TO RTIOC AND IF SO IT PROCEEDS * TO SCHEDULE THE ROUTINE VIA $LIST. * * * SCHED LDB EQT13,I GET ID SEGMENT ADDRESS SSB IS THE ADDRESS NEGATIVE (INTERRUPT PROGRAM DISARMED) JMP FINI YES THEN IGNORE INTERRUPT.RETURN P+2. STB SCH ADB O12 SAVE EQT4 IN BREG SAVE WORD OF IDSEG LDA EQT4 STA B,I ADB .5 SEE IF ROUTINE IS DORMANT LDB B,I SZB JMP SCHW NOT DORMANT SO GET OUT JSB $LIST MAKE CALL TO SCHEDULE PROGRAM OCT 101 SCH NOP IO13 CLC 0 JMP FINI SCHW LDB .8 STATUS = INTERRUPT PROGRAM SCHEDULED JSB STEQ5 LDA DLY 50 MSEC DELAY STA EQT15,I TIME OUTS STA EQT14,I JMP IO13 CONTINUATION EXIT * SKP SPC 3 * * THIS PORTION OF DVR72 IS RESPONSIBLE FOR PROCESSING * SPECIAL I/O SEQUENCES. THE CODES DESIGNATING WHICH * I/O INSTRUCTION TO EXECUTE IS CONTAINED WITHIN THE * CONTROL BUFFER FROM THE CALLING SEQUENCE. THE CONTROL * CODES HAVE THE FOLLOWING MEANINGS: * * 1 = LIA * 2 = OTA * 3 = STC,C * 4 = CLC * 5 = CLF * 6 = STF * * THE CODES THAT GOT US DOWN HERE TO THIS PORTION * OF THE ROUTINE ARE EXPLAINED IN THE BEGINNING * COMMENTS. THE CALLING SEQUENCE FOR USING THE SPECIAL * I/O CONTROL FEATURES ARE AS FOLLOWS: * * IN FORTRAN: CALL EXEC(I/O,CONWD+LU,IDBUF,IDBL, * ICBUF,ICBL) * * WHERE: I/O = 1,2 OR 3 * CONWD+LU=CONTROL WORD AND LU(CONWD HAS BIT 9 SET) * IDBUF = DATA BUFFER (FIRST WORD IS THE COMMAND CODE, * 11,12,13 OR 14). THE REST OF THE BUFFER IF ANY * IS DATA. * IDBL = DATA BUFFER LENGTH (=0 FOR CONTROL I/O ONLY * (11 OR 12) * ICBUF = COMMAND BUFFER- CONTAINING A SEQUENCE OF THE * AFOREMENTIONED CODES. * ICBL = COMMAND BUFFER LENGTH * * SPC 3 VARIN LDA EQT12,I ADA HCD MAKE SURE THAT WE SHOULD SSA,RSS BE HERE, IF NOT JMP CONT2 LEAVE!! LDA EQT10,I CMA,INA STA EQT10,I LOOP LDB EQT9,I ADDRESS OF CONTROL BUFFER LDA B,I CONTENTS ADA ADVAR GET ADDR. POINTING TO 1ST I/O CMD LDA A,I C(ADVAR) + C(ICBUF(B)) STA IOINS LDA B,I SZA,RSS LEGALITY CHECKS - DON'T WANT TO BLOW SYSTEM JMP ERR6 CODE = 0 ERROR CMA,INA SSA,RSS SEE IF POSITIVE JMP ERR6 CODE IS A NEGATIVE NUMBER ADA .7 SZA SSA JMP ERR6 CODE > 6 CLA IOINS NOP VARIABLE I/O CMD. ISZ EQT9,I BUFFER ADDR ISZ EQT10,I COUNTER JMP LOOP CLA LDB .13 CMB,INB SEE WHETHER THIS IS 11,12,13 OR 14 ADB EQT12,I SSB,RSS JMP CONT2 CODE = 13 OR 14, DATA IN IDBUF CMB,INB CHECK FOR 11 OR 12 SLB JMP EXIT A=0 CODE = 12 (WAIT FOR INT) LDA .4 IMMEDIATE COMPLETION-TELL RTIOC JMP EXIT CODE = 11 SPC 3 ERR6 LDB .6 JSB STEQ5 JMP ERTN SKP SPC 3 * * INTERNAL SKIP FLAG - PRIMARILY FOR 6940 MULTI- * PROGRAMMER AND ALLOWS A 500USEC DELAY FOR INTERRUPTS * TO OCCUR. IF NO INTERRUPT OCCURS WITHIN THE ALLOTTED * TIME A TIME OUUT ERROR IS NOTED IN EQT5 (=1) * FOR THE 6940 THIS DELAY TAKES PLACE WHEN THE DEVICE IS * IN THE HANDSHAKE MODE. * (THIS MAY BE CHANGED LATER TO ALLOW A VARIABLE TIME OUT) * * DELAY NOP LDA EQT12,I SHOULD WE BE HERE CPA .15 JMP DLY1 ISZ DELAY EXIT P+2 JMP DELAY,I GO TO FINI DLY1 LDA M82 500 USEC IO14 SFC 0 JMP OK FLAG OCCURRED IN TIME INA,SZA INCREMENT COUNTER AND SKIP IF =0 JMP IO14 TIME LEFT JMP TMERR BAD NEWS TIME OUT OK CLA CPA EQT10,I SEE IF I/O XFER IS FINI JMP DEXIT YES GO HOME JMP DELAY,I CONTINUE I/O IF ANY MORE DEXIT LDA .4 EXIT WITH COMPLETION CODE =4 ISZ CM72 JMP IO6 EXIT * * TIME OUT * TMERR LDB .2 JSB STEQ5 SET STATUS INTO EQT5 JMP DEXIT * * SKP SPC 2 * SKP * * * * * * THIS SECTION HANDLES CONTROL REQUESTS (ICODE = 3 * THE FORMAT FOR A CONTROL REQUEST IS AS FOLLOWS: * * CALL EXEC(3,CONWD+LU,[IPRAM]) * * WHERE: 3 IS AN RTE CONTROL REQUEST CODE * CONWD = CONTROL CODE * IPRAM = OPTIONAL PARAMETER * * CONTROL REQUESTS IN EFFECT THUS FAR: * * * CODE = 1 RESET TIME OUT(TAKE THE CONTENTS OF IPRAM * AND TRANSFER IT TO EQT14. * CODE = 2 CLEAR BIT 12 (DRIVER WILL NO LONGER PROCESS * TIME OUT * * CODE = 3 INTERRUPT PROGRAM SETUP WITH IPRAM = ADDRESS * OF PROGRAM NAME. * * CODE = 4 DISARM INTERRUPT PROGRAM * * CODE = 5 ARM INTERRUPT PROGRAM. * * * SPC 3 CNTRL JSB CKMOD NOP RBL FORM 876 LDA B AND O37 MASK BITS 6-10 CPA .1 TIME OUT REQ? JMP T.O CPA .2 JMP TMCLR CPA .3 JMP IDSEG CPA .4 JMP CLARM CPA .5 ARM INTERRUPT PROGRAM? JMP CLARM COMPLEMENT CONTENTS OF EQT13 JMP ERTN CLARM LDA EQT13,I GET THE ID SEGMENT ADDRESS. CMA,INA COMPLEMENT AND PUT AWAY. STA EQT13,I JMP CEXIT T.O LDA EQT7,I GET NEW TIME OUT VALUE CMA,INA STA EQT14,I RESET JMP CEXIT TMCLR LDA BIT12 CLEAR TIME OUT BIT CMA AND EQT4,I STA EQT4,I CEXIT LDA .4 JMP EXIT ERTN LDA .2 ILLEGAL CONTROL REQUEST JMP EXIT * SKP SPC 3 * * THIS PORTION OF THE CONTROL REQUEST SECTION TAKES * THE PROGRAM NAME IN IPRAM AND SEARCHES THRU THE * ID SEGMENTS ATTACHED TO THE KEYWORD LIST FOR * THE ID SEGMENT FOR THE ASSOCIATED PROGRAM AND WHEN * FOUND PLACES THE ID SEGMENT ADDRESS INTO EQT13. * * IDSEG LDA KEYWD TOP OF KEYWORD LIST STA SCODE IDSG1 LDA EQT7,I PROGRAM NAME STA T2 LDB SCODE,I ID SEGMENT ADDRESS SZB,RSS END OF LIST? JMP IDSGE SET ERROR CODE ADB .14 INDEX DOWN TO FW OF PROGRAM NAME IN ID SEG. LDA B,I CPA T2,I FIRST TWO CHARACTERS MATCH? INB,RSS JMP IDSG2 NO ISZ T2 CHECK NEXT TWO CHARACTERS LDA B,I CPA T2,I INB,RSS JMP IDSG2 ISZ T2 LDA B,I LOOK AT 5TH CHARACTER AND MSKUB STA B LDA T2,I AND MSKUB CPA B JMP IDSG3 EUREKA!! IDSG2 ISZ SCODE JMP IDSG1 IDSG3 LDA SCODE,I ID SEGMENT ADDRESS STA EQT13,I JMP CEXIT IDSGE LDB .5 JSB STEQ5 JMP CEXIT SKP SPC 3 * * * THIS IS THE DMA PROCESSING PORTION OF DVR 72, IT IS * RESPONSIBLE FOR RETRIEVING A DMA CHANNEL FROM RTE, CON- * FIGURING DMA COMMAND WORDS, OUTPUTTING THESE WORDS TO THE * APPROPRIATE DMA CHANNEL, AND FINALLY INITIATETING THE DMA * TRANSFER. THE DETERMINATION OF WHAT TO DO IN RELATION TO * THE DMA IS DETERMINED BY THE CODE SUPPLIED IN THE EXTENDED * CONTROL WHICH HAS BEEN TRANSFERRED TO EQT12. * THE APPLICABLE CODES AND THEIR RELATED MEANINGS ARE * DEFINED AS FOLLOWS: * * CODE MEANING * 9 DMA TRANSFER WITHOUT STC TO START DEVICE * 10 " " WITH " " " " * * THE REASON FOR THESE TWO CODES IS THAT SOME I/O DEVICES * PARTICULARLY THOSE USED FOR INPUT REQUIRE AN STC,C TO * START AN I/O TRANSFER ( TO TURN THEM ON). * * THE EXEC CALL FORMAT AND THE REQUIRED BIT AND BUFFER FORMATS * ARE DEFINED AS FOLLOWS: * * EXEC CALL: JSB EXEC * DEF ICODE = 1 OR 2(READ OR WRITE) * DEF ICNWD = 11LU * WHERE BITS 6 AND 9 ARE SET AND * LU = LOGICAL UNIT NUMBER * BIT 6 = BINARY MODE * BIT 9 = INDICATES THAT THE CONTROL * WORD FOR THIS I/O TRANSFER * IS CONTAINED IN WORD 1 OF THE * OUTPUT BUFFER. * DEF IBUFR = OUTPUT BUFFER * WHERE WORD 1 = 9 OR10 EXPLAINED ABOVE * WORD 2 = CONTROL WORD 1 FOR DMA * CONTROL WORD 1 (CW1) = 100000B OR JUST PLAIN 0. WHERE IF BIT * 15 IS SET = 1, THIS INDICATES THAT THE DMA IS TO GIVE A STC,C TO * THE I/O CHANNEL AT THE END OF EACH DMA CYCLE (EXCEPT ON THE LAST * CYCLE IF MODE IS INPUT. IF CW1 =0 THIS INDICATES NO STC,C AT EACH * DMA TRANSFER,. * * THE REST OF THE WORDS IN IBUFR WOULD BE DATA. * * DEF IBUFL = BUFFER LENGTH, REPRESENTING THE ACTUAL * NUMBER OF DATA WORDS TO BE TRANSFERRED * INCLUDING THE FIRST TWO WORDS WHICH * CONTAIN CONTROL INFORMATION. SPC 3 SKP DMA DLD INTBA,I SEE WHICH DMA CHANNEL IF ANY IS ASSIGNED CPA EQT1 CHANNEL 6 ASSIGNED JMP CH6 CPB EQT1 CHANNEL 7 ASSIGNED? JMP CH7 LDA .5 REQUEST CODE FOR DMA CHANNEL JMP EXIT GO BACK TO RTIOC CH6 LDA .6 JMP CFDMA CONFIGURE DMA I/O INSTRUCTIONS CH7 LDA .7 * * CONFIGURE I/O INSTRUCTIONS * CFDMA JSB SETIO LDA IO15 CONFIGURE OTA FOR CHANNELS 2 OR 3 AND DLY MAKE BITS 0-5 = TO 2 OR 3 STA IO17 OTA 2 OR 3 STA IO21 " " ADA .100 FORM STC 2 OR 3 STA IO20 ADA BIT11 FORM CLC STA IO16 LDA IO24 STC,C TO START DEVICE IOR SCODE BITS 0-5 STA IO24 * * NOW FORM AND OUTPUT THE THREE CONTROL WORDS * FOR DMA TRANSFER. * * LDB EQT7,I BUFFER ADDRESS LDA B,I CONTENTS CW1 FOR DMA SZA CPA CW2 =100000 JMP DMCON JMP DMERR DMCON AND NOT13 CLEAR BIT 13 (NO CLC ON I.O CHANNEL AT END) ISZ EQT7,I BUMP BUFFER ADDRESS IOR SCODE MASK SELECT CODE INTO BITS 0-5 IO15 OTA 0 OUTPUT CW1 TO DMA CHANNEL 6 OR 7 IO16 CLC 0 PREPARE MEMORY ADDR. REG FOR CW2 JSB CKMOD NOP CLA SEZ,RSS READ OR WRITE REQUEST JMP DMA2 WRITE LDA CW2 BIT 15 = 1 TO INDICATE INPUT DMA2 IOR EQT7,I BUFFER ADDRESS IO17 OTA 0 OUTPUT CW2 TO CHANNEL 2 OR 3 IO20 STC 0 PREPARE WORD COUNTER FOR CW3 LDA EQT8,I # OF WORDS TO BE TRANSFERRED ADA N1 ADJUST FOR DMA CONTROL WORD STA EQT8,I CMA,INA TAKE TWOS COMPLEMENT IO21 OTA 0 LDA EQT12,I SEE IF STC,C REQUIRED BEFORE XFER CPA O12 IO24 STC 0,C YES IO22 STC 0,C TURN DMA CHANNEL IO23 CLC 0 CLEAR DMA CHANNEL CONTROL FLIP FLOP CLA JMP EXIT RETURN TO RTIOC * DMERR LDB .7 JSB STEQ5 LDA CW2 RELEASE DMA CHANNEL JMP EXIT SPC 6 * * DMA CONFIRMATION ROUTINE (P+1 RETURN =YES) * DMACK NOP LDA EQT12,I GET SUBFUNCTION CODE CPA .9 IS IT 9? JMP DMOUT YES RETURN P+1 CPA O12 NO IS IT 10? JMP DMOUT ISZ DMACK RETURN P+2 DMOUT JMP DMACK,I SKP * CONSTANTS AND STORAGE AREA * A EQU 0 DEFINE SYMBOLIC REFERENCE FOR B EQU 1 A AND B REGISTERS. * .1 OCT 1 UNO DEC -100 .2 OCT 2 .3 OCT 3 .4 OCT 4 .5 OCT 5 .6 OCT 6 .7 OCT 7 .8 DEC 8 .13 DEC 13 .14 OCT 14 .9 DEC 9 O37 OCT 37 .15 DEC 15 MSKUB OCT 177400 O12 DEC 10 LCD DEC -9 HCD1 DEC -16 HCD DEC -15 ADVAR DEF LIX-1 LIX LIA 0 OTX OTA 0 STX STC 0,C CLX CLC 0 CFX CLF 0 SFX STF 0 CW2 OCT 100000 .100 OCT 100 .400 OCT 400 .1100 OCT 1100 .1500 OCT 1500 .700 OCT 700 .4600 OCT 4600 BIT12 OCT 10000 BIT10 OCT 2000 NOT13 OCT 157777 M82 DEC -82 500USEC .5600 OCT 5600 BIT11 OCT 4000 DLY OCT -5 SCODE NOP T2 NOP N6 DEC -6 N1 DEC -1 * OTA OTA 0 IEXIT DEF EXIT-1 * SPC 3 * * SYSTEM BASE PAGE COMMUNICATION AREA * . EQU 1650B ESTABLISH ORIGIN OF AREA * INTBA EQU .+4 FWA OF INTERRUPT TABLE * * I/O MODULE COMMUNICATION * KEYWD EQU .+7 EQT1 EQU .+8 LIST LINKAGE WORD EQT4 EQU .+11 EQT5 EQU .+12 EQT6 EQU .+13 EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 * * * END