ASMB,Q,C,Z IFZ HED DVR37, NO SRQ ALARM SERVICE NAM DVR37,0 59310-16002 REV.2026 800407 EQTX=18+7*D NSRQ XIF * IFN HED DVR37, WITH SRQ ALARM SERVICE NAM DVR37,0 59310-16003 REV.2026 800407 EQTX=18+7*D SRQ XIF * ENT I.37,C.37 EXT $LIST * ***************************************************** * (C) COPYRIGHT HEWLETT-PACKARD CO., 1975 * * ALL RIGHTS RESERVED * ***************************************************** * * DVR37 - RTE HP-IB DRIVER * * RELOC: 59310-16002 (NO SRQ SERVICE) * RELOC: 59310-16003 (WITH SRQ SERVICE) * SOURCE: 59310-18005 * ***************************************************** * R.FAJARDO, 760329 * * * ASSEMBLE WITH N OPTION FOR SRQ ALARM SERVICE * ASSEMBLE WITH Z OPTION TO EXCLUDE SRQ SERVICE * ******************************************************** * *1926 PCO * 1. OUCH1+1 CHANGED FROM JMP LOSE2 TO JMP L.RTN . * PROBLEM WAS FALSE IFC'S, PARTICULARLY WITH 2240. * SOLUTION IS TO IGNORE IFC COMMAND ON BUS. * 2. ADD SUPRESS LINE FEED NEXT OPERATION. (BIT 7 IN BEQT1) * PROBLEM WAS THAT THIS FUNCTION WAS NEEDED TO HAVE THE MINIMUM * SET OF FEATURES FOR LINE PRINTER SUPPORT WITH THE HPIB DRIVER. * SOLUTION WAS TO USE BIT 7 IN BEQT1 TO FLAG THE SUPPRESSION * AND THEN CHECK THIS BIT BEFORE TO CRLF IS SENT AT THE END OF * AND OUTPUT OPERATION (IN RESPONSE TO BIT 3 BEING SET IN EQT11). * BIT 7 IS SET BY CALL EXEC (3,ICNWD,0) WHERE BITS 10-6 OF ICNWD * = 11 AND BITS 5-0 =LU. * IF THE BIT 7 IS SET, THEN ONLY "CR" CAN BE APPENED TO NEXT WRITE * OPERATION, FUNCTION CODE = 2. BIT7 IS CLEARED AFTER THE DATA HAS * BEEN SENT FOR NEXT WRITE OPERATION. SET OR NOT. * * !!CAUTION!! NO CHECK IS MADE IN OUTPUT CONTINUATOR SECTION TO * DETERMINE IF APPENDED "LF" IS BEING SUPPRESSED FOR DATA MODE * OR COMMAND MODE. IF "LF" IS EVER APPENDED TO COMMAND MODE, * A CHECK WILL HAVE TO BE IMPLEMENTED. * ************************************************************************* SKP INTBA EQU 1654B FWA INTERRUPT TABLE DUMMY EQU 1737B PRIVILEDGED INTERRUPT I/O * EQT1 EQU 1660B DEVICE SUSPEND LIST POINTER EQT2 EQU 1661B DRIVER INITIATION SECTION ADDR EQT3 EQU 1662B DRIVER COMPLETION SECTION ADDR EQT4 EQU 1663B DRIVER I/O ASSIGNMENTS, EQT5 EQU 1664B DRIVER STATUS INFORMATION EQT6 EQU 1665B CURRENT I/O REQUEST, EQT7 EQU 1666B DATA BUFR ADDR/CONTROL PARM EQT8 EQU 1667B DATA BUFR LNG/CONTROL PARM EQT9 EQU 1670B CONTROL BUFR ADDR EQT10 EQU 1671B CONTROL BUFR LNG EQT11 EQU 1672B DRIVER CONTROL WORD, EQT12 EQU 1771B EQT ENTRY COUNT, EQT13 EQU 1772B EQT EXTENSION ADDR EQT14 EQU 1773B DEVICE TIME OUT VALUE EQT15 EQU 1774B DEVICE TIME OUT CLOCK * SUP SKP * * EQT ENTRY WORD FORMATS AS FOLLOW: * ******EQT4 - FORMAT: D BPS TUU UUU CCC CCC * D=DMA ASSIGNED, 1=YES * B=BUFFERING ON, 1=YES * P=PWR FAIL SERVICED BY DVR, 0=NO * S=TIME OUT SERVICED BY DVR, 1=YES * T=TIME OUT OCCURANCE, 1=YES * U=UNIT OR SUBCHAN, THIS REQUEST * C=I/O CHANNEL, THIS REQ. * ******EQT5 - FORMAT: A ATT TTT TSS SSS SSS * A=AVAILABILITY * T=DEVICE TYPE, 37 * S=STATUS BYTE * ******EQT6 - FORMAT: C C0Z 0FF FFF 000 0RR * C=REQUEST TYPE, 0/1/2/3:STANDARD/BUFFERED/SYSTEM/CLASS * F=SUBFUNCTION * R=I/O REQUEST, 1/2/3:READ/WRITE/CNTRL * Z=0/1 SINGLE/DOUBLE BUFR REQUEST * ******EQT11 - FORMAT: S A0E B00 HL0 00C MDI * S=SRQ SERVICE IN PROGRESS, 1=YES * A=I/O REQUEST ABORTED TO SERVICE SRQ, 1=YES * E=EXPECT/ISSUE EOR WITH I/O, 1=YES * B=EXPECT/ISSUE EOR WITH LAST DATA BYTE, 1=YES * H=ENABLE ASCII MODE I/O CARD LOGIC, 1=YES * L=SUPRESS LINE FEED. ONLY BIT 7 IN BEQT1 IS CHECKED. * C=ENABLE CRLF POST PROCESSING, 1=YES * M=DATA MODE, 1=ASCII, 0=BINARY * D=DMA ACTIVE ON PENDING REQUEST, 1=YES * I=I/O DIRECTION, 1=INPUT, 0=OUTPUT * ******EQT12 - FORMAT: S PAB BBB BEE EEE EEE * S=SRQ PENDING FLAG * P=ALARM PROG SCHEDULING ACTIVE * A=SRQ INTERRUPT ARMING FLAG * B=# ACTIVE BEQT ENTRIES, 0-31 * E=# EQT EXTENSION WORDS, 19-255 * ******EQT13 - FORMAT: I AAA AAA AAA AAA AAA * I=INITIATOR/CONTINUATOR FLAG * A=EQT EXTENSION ADDRESS * SKP * ******BEQT1 - FORMAT S RDI JOP EL0 0UU UUU * S=0=DISABLE PRIORITY RESPONSE TO SRQ INTERRUPT * R=0=DISABLE I/O RESTART ATTEMPT * D=0=DISABLE DMA USAGE * I=1=REQUIRE EOR FROM DEVICE. * J=1=EXPECT EOR WITH LAST DATA BYTE * O=1=ISSUE EOI TO DEVICE * P=1=ISUE EOI WITH LAST DATA BYTE * E=1=ALLOW OCCURENCE OF ERROR TO ABORT CURRENT PROGRAM * L=SUPRESS LF ON NEXT OUTPUT * U=UNIT NUMBER * ******BEQ2 = FORMAT SC111111 C2222222 * S=1=ALARM PROGRAM IS TO BE SCHEDULED. * C111111 =CHARACTER 1 OF ALARM PROGRAM NAME * C2222222=CHARACTER 2 OF ALARM PROGRAM NAME * BEQ3 - FORMAT C3333333 C4444444 * C3333333=CHARACTER 3 OF ALARM PROGRAM NAME * C4444444=CHARACTER 4 OF ALARM PROGRAM NAME * BEQ4 = FORMAT C5555555 00000000 * C5555555=CHARACTER 5 OF ALARM PROGRAM NAME * BEQT5- FORAMT 00000000 SSSSSSSS * SSSSSSSS=LAST READ SERIAL POLL STATUS * BEQT6- FORMAT V VVV VVV VVV VVV VVV * V=VALUE TO BE PASSED TO ALARM PROGRAM. * BETQ7- FORMAT F CCC CCC CPP PPP PPP * F=1 THEN P=ERROR STATUS OF LAST OPERATION. * F=0 THEN CP = TRANSMISSION LOG LAST OPERATION. * SKP * * I/O INITIATOR SECTION * I.37 NOP CLB NO CLC,C JSB SETUP CNFG I/O & BEQT ADDRS JSB MINE REGAIN HP-IB CONTROL JSB DMA? SZA HAVE WE DMA? JMP I37A LDA EQT6,I NO, DO WE NEED IT? AND B3 CPA B3 JMP I37A CONTROL REQUEST, NO. LDA BEQT1,I I/O REQUEST, RAL,RAL DMA REQUIRED? SSA,RSS JMP I37A LDA B5 YES, GO GET IT JMP I.37,I I37A EQU * * IFN **IF SRQ SERVICE***** CLA * * LDB EQT11,I *SRQ SERVICE BUSY? * SSB * * JMP I.37,I * YES, AWAIT COMPLETION XIF ********************* * LDA EQT13,I INDICATE IOR BIT15 INITIATOR STA EQT13,I SECTION LDA EQT4,I CLAIM IOR BIT12 TIME OUT STA EQT4,I PROCESSING * * RSTRT CLA,CCE CLEAR: STA EQT11,I DRIVER CNTRL WORD STA STSWD,I PENDING EQT STATUS WORD STA XLOG,I PENDING TRANSMISSION LOG LDB BEQT1 ADB B6 STA 1,I BEQT7 JSB STATS INTERRUPT FLAG FROM PREVIOUS OP. * LDA EQT6,I AND B3 GET REQUEST CPA B3 JMP I.CRQ CONTROL! SKP * * I/O REQUESTS HERE * I000 LDA EQT6,I LOAD I/O CTL WORD ALF SHIFT Z-BIT TO LSB AND B1 MASK STA ZBIT AND SAVE SZA,RSS Z=1? JMP *+4 NO. SKIP TEST OF CNTL BUFF LENGTH. * LDA EQT10,I LOAD CTL BUFR LNGTH SZA LENGTH=0? JMP I005 NO. GO SEND CNTRL BFFR. LDB UNIT YES,LOAD SUBCHANNEL SZB,RSS SUBCHANNEL=0? JMP I015 YES,CHECK FOR DATA LDA ZBIT NO,LOAD Z-BIT CPA B1 Z-BIT=1? NOTE: CNTRL BFFR LNGTH =0. JMP I015 YES,CHECK FOR DATA LDA EQT8,I NO,LOAD DATA BUFR LNGTH SZA LENGTH=0? JMP I010 NO,GENERATE AUTO ADDR CMNDS LDA EQT6,I YES,LOAD EQT WORD 6 AND B2103 MASK I/O REQ CODE CPA B2 REQUEST CODE=2(WRITE REQ)? X=M=0? JMP I010 YES,GENERATE AUTO ADDR CMNDS & CR-LF JMP L.XIT NO,EXIT * * ISSUE CONTROL BUFFER * I005 SSA CTL BUFR LGTH NEG(CHARS)? CMA,INA,RSS YES,MAKE POSITIVE & SKIP ALS NO,WORDS. CNVRT TO +CHARS LDB EQT9,I LOAD CMND BUFR ADDRESS JMP I012 AND OUTPUT * I010 LDA EQT6,I FETCH READ-WRITE FLAG. BIT0=1 IF READ. * LDB #ULBT FETCH UNL, BUS TALK SLA TEST IF COMPUTER READ. LDB #ULBL YES. CHANGE TO UNL, BUS LISTEN. * STB CMDBA,I STORE WORD IN COMMAND BUFFER. * LDB #DLSC FETCH DEV LISTEN, SEC SLA TEST IF COMPUTER READ. LDB #DTSC YES. CHANGE TO DEVICE TALK, SEC. * LDA UNIT FECTCH UNIT NUMBER. ALF,ALF POSITION TO UPPER BYTE. ADB 0 FORM DEVICE TALK OR LISTEN ADDRESS. * LDA EQT9,I FETCH SECONDARY AND B37 MASK UPPER BITS TO PREVENT DISASTER. ADB 0 COMPLETE FORMING DEV,SEC. * STB CMDBA+1,I STORE WORD IN COMMAND BUFFER. * LDB EQT9,I FETCH SECONDARY ADDRESS AGAIN. LDA B3 PREPARE TO SEND UNL,BUS,DEV SZB TEST IF THERE WAS A SECONDARY ADDRESS. INA YES. SET COUNT FOR UNL,BUS,DEV,SEC * LDB CMDBA FETCH THE BUFFER ADDRESS. I012 JSB DOIO DO OUTPUT OCT 60 * * SET UP DATA TRANSFER * I015 LDA EQT8,I SZA ANY DATA? JMP I020 YES, GIVE IT CPA UNIT DIRECT I/O REQ? JMP L.XIT YES,EXIT CPA ZBIT Z-BIT=0? JMP I020 YES,ISSUE DATA JMP L.XIT NO,EXIT I020 SSA CMA,INA,RSS MAKE +CHAR CNT ALS STA T1 LDA EQT6,I EXTRACT I/O REQ AND B3 & FORM CPU XOR B3 TLK/LSN CMND, ALF,RAR DATA MODE IOR B100 STA I028A LDA EQT6,I ERA,RAL (E)=I/O DIRECTION ASR 6 AND B21 EXTRACT SUB-FUNCTION STA 1 LDA BEQT1,I INIT DVR CNTRL WORD: AND BIT13 GET DMA REQUIREMENT ALF BIT 1: DMA ACTIVE, 1=YES RAR,ELA BIT 0: I/O DIRECTION, 1/0 SLB,RSS TRANSLATE M BIT IOR B4 BIT 2: ASCII/BINARY, 1/0 SLB,RSS ASCII OR BINARY? SLA,RSS A. OUTPUT OR INPUT? CPB B20 B. O. ASCII HONEST (TRANSPARENT) ? IOR BIT8 I. H. SET BIT 8 (ASCII CARD LOGIC ON) IF STA EQT11,I NH. ASCII INPUT OR ASCII HONEST OUTPUT. * SLA DETERMINE EOR REQUIREMENTS OUTPUT AND JMP I021 INPUT. CLA OUTPUT, CPB B1 BINARY RECORD WITH EOI? LDA BEQT1,I YES, USE CNFG WORD RAL,RAL NO, EOR NOT REQUIRED JMP I022 * I021 LDA B14K INPUT, SLB BINARY OR ASCII? LDA BEQT1,I BINARY, USE CNFG WORD * I022 AND B14K PUT CNFG BITS, IF ANY, IN EQT 11 IOR EQT11,I STA EQT11,I POST REQUIREMENTS * * CHECK FOR BACK ARROW. SUPRESS ARROW AND LF IF * ASCII NON HONEST (TRANSPARENT) MODE. * SZB ASCII RECORD? JMP I028 NO. SLA,RSS YES, DIRECTION? CPB T1 WRITE REQUEST! JMP I026 READ REQUEST! OR 0 LNG WRITE! CCA ADA T1 CHECK "_" CROCK ARS ADA EQT7,I FIND BUFR END LDA 0,I LDB T1 CMB,SLB,INB,RSS ODD CHAR? ALF,ALF YES, POSITION AND B377 & AXE CPA B137 "_" ? INB YES, DROP CNT CMB,INB STB T1 CPA B137 "_" ? JMP I028 YES, NO CRLF * I026 LDA EQT11,I FLAG CRLF IOR B10 POST-PROC. STA EQT11,I REQUIREMENT * I028 LDA T1 LDB EQT7,I DO I/O OP JSB DOIO I028A NOP (CNTRL WORD) IOR XLOG,I MAINTAIN ERR STATUS (IF ANY) STA XLOG,I POST XMIS LOG * LDA EQT11,I CLEAR "SUPRESS LF" IF OUTPUT REQUEST. SLA OUTPUT? (EQT6 WOULD BE BETTER CHECK.) * JMP L.XIT NO. MAKE EXIT. * LDA BIT7 YES. CMA FORM MASK TO CLEAR BIT 7. * AND BEQT1,I CLEAR THE SUPRESS LF FLAG. STA BEQT1,I * JMP L.XIT MAKE EXIT. * SKP * * DISPATCH CONTROL REQUESTS * I.CRQ LDA EQT6,I EXTRACT SUB-FUNCTION ASR 6 AND B37 STA 1 LDA UNIT GET DEVICE ADDR CLE,SZA,RSS UNIT 0? JMP IBCRQ YES, BUS CONTROL SZB,RSS NO, DEVICE CONTROL JMP ID00 DEVICE CLEAR CPB B1 JMP ID01 DEVICE EOR CPB B6 JMP ID06 DEVICE STATUS CPB B11 JMP ID11 DEVICE LINE/FORM FEED CPB B16 JMP IB16 REN TRUE IFN **IF SRQ SERVICE***** CPB B20 * * JMP ID20 *ARM ALARM PROG * CPB B21 * * JMP ID21 *CLEAR ALARM PROG * XIF ********************* CPB B25 JMP ID25 SET DEVICE CNFG.WORD CPB B27 JMP ID27 CLEAR DEVICE CNFG.WORD JMP L.XIT ELSE, IGNORE * IBCRQ SZB,RSS JMP IB00 BUS CLEAR CPB B1 JMP IB01 BUS EOR CPB B6 JMP IB06 BUS STATUS CPB B16 JMP IB16 REN TRUE CPB B17 JMP IB17 REN FALSE CPB B25 JMP ID25 CONFIGURE BUS CPB B27 JMP IB27 UNCONFIGURE BUS CPB B30 JMP IB30 PARALLEL POLL JMP L.XIT * SKP * * SELECTED DEVICE CLEAR * ID00 ALF,ALF FORM CMNDS: IOR #LSDC UNT,UNL,LSN,SDC STA CMDBA+1,I * LDA EQT6,I TEST FOR OF,PRGM,1 ELA CMA,SEZ,SSA BIT15(E)=0? OR BIT14(SIGN)=1? JMP L.XIT NO. REQUEST TYPE = 2 (SYSTEM). * LDA B4 YES. REQUEST TYPE #2. LDB CMDBA LOAD BYTE CNT. AND BUF. ADDR. ID00A JSB DOIO & ISSUE OCT 60 (CMND MODE) JMP L.XIT * * ISSUE DEVICE EOR * ID01 IOR #LSN FORM CMNDS: ALF,ALF STA CMDBA+1,I UNT,UNL,LSN LDA B3 LDB CMDBA JSB DOIO ISSUE NOW OCT 60 IB01 CLA,INA LDB .0A JSB DOIO GIVE EOR OCT 150 (DATA MODE) JMP L.XIT * * DEVICE STATUS * ID06 LDB BEQT2,I FIRST CHECK IF THERE IS ALARM PROGRAM SSB,RSS WAITING TO BE SCHEDULED. (BIT 15 SET)? JMP ID06A NO. GO READ NEW SERIAL POLL. * ELB,CLE,ERB YES. CLEAR THE FLAG AND THEN RETURN THE STB BEQT2,I SERIAL POLL STATUS READ IN RESPONSE LDB BEQT1 TO THE SRQ. ADB B4 LDA 1,I STA STSWD,I JMP L.XIT * ID06A IOR #TLK FORM CMNDS TO READ SERIAL POLL STATUS: IOR #SPE. STA CMDBA+1,I UNT,UNL,SPE,TLK LDA B4 LDB CMDBA JSB DOIO NOTIFY CNTRLR OCT 60 ISZ EQT11,I INDICATE INPUT CLA,INA & LDB STSWD JSB DOIO TAKE STATUS OCT 120 (DATA MODE, CPU LSN) LDA STSWD,I ALF,ALF POSITION STATUS BYTE STA STSWD,I CLA STA EQT11,I INDICATE OUTPUT LDA B2 LDB A#SPD JMP ID00A SERIAL POLL DISABLE SKP * * DEVICE LINE/FORM FEED * ID11 LDB EQT7,I LOAD CTL PARAMETER SZB,RSS PARAMETER=0? JMP ID11C YES, SET SUPRESS LF FOR NEXT WRITE. IOR #LSN NO,MERGE LSN CMND WITH SUBCH ALF,ALF SHIFT TO UPPER BYTE STA CMDBA+1,I AND SAVE IN CMND BUFR LDA B3 LOAD CMND BUFR LNGTH LDB CMDBA LOAD CMND BUFR ADDR JSB DOIO GO OUTPUT UNT,UNL,LSN CMNDS OCT 60 LDA EQT7,I LOAD CTL PARAMETER CMA,SSA,INA,RSS JMP ID11B GO ISSUE A FORM FEED * STA EQT7,I SAVE LF CTR(- # OF CRLF'S) ID11A LDA B14 LOAD DRIVER CTL WORD STA EQT11,I AND SAVE IN EQT11 CLA JSB DOIO GO OUTPUT CR/LF OCT 110 ISZ EQT7,I LAST CR/LF? JMP ID11A NO,OUTPUT ANOTHER JMP L.XIT YES,EXIT * ID11B CLA,INA SET BUFR LNGTH=1 LDB FORMA LOAD FORM FEED CMND ADDRESS JSB DOIO ISSUE FORM FEED CMND ONCE OCT 110 JMP L.XIT AND EXIT * ID11C LDA BEQT1,I SET BIT7 IN BEQT1 TO SUPRESS LINE FEED. IOR BIT7 STA BEQT1,I JMP L.XIT * SKP IFN **IF SRQ SERVICE***** * * ARM SRQ ALARM PROG (IF "ASMB,...,N") * ID20 LDB EQT7,I GET ALARM PROG BUFFER ADDRESS LDA T2A GET ADDRESS OF TEMPORARY BUFFER. JSB ID20M MOVE PROG NAME AND VALUE TO TEMP BUFFER. * JSB $LIST OCT 217 GET ID ADDRESS OF ALARM PROGRAM DEF T2 SZA ID ADDRESS FOUND? JMP LOSE4 NO, GO LOSE! NO SUCH PROGRAM * LDA BEQT2 YES, MOVE PROG NAME AND VALUE INTO BEQT. LDB T2A JSB ID20M * LDA EQT12,I LOAD EQT WORD 12,SET SRQ INTERRUPT IOR BIT13 ARMING FLAG BIT 13 STA EQT12,I AND STORE IN EQT WORD 12 * JMP L.XIT * ID20M NOP MOVE 4 WORDS FROM BUFF B TO BUFF A. STA T1 SAVE DESTINATION ADDRESS. STB T3 SAVE FROM ADDRESS. * LDB M4 GET DOWN COUNT VALUE. * ID20N LDA T3,I STA T1,I * ISZ T3 ISZ T1 * INB,SZB INCR DOWN COUNT AND TEST FOR END. JMP ID20N * STA T1,I STORE 4TH WORD IN 5TH LOCATION ALSO. * JMP ID20M,I ALL WORDS MOVED. * XIF * * CLEAR DEVICE EQT EXTENSION * ID27 CLA 0 CNFG WORD ENTRY STA BEQT1,I * * CLEAR ACTIVE SQR ALARM PROGRAM * ID21 CLA LDB BEQT2 LOAD ADDR OF ALARM PROG NAME BUFFER STA 1,I AND CLEAR 1ST PAIR OF CHARS INB INCREMENT TO ADDR OF 3RD WORD IN BEQT STB T1 AND STORE CLB DST T1,I CLEAR 2ND AND 3RD PAIR OF CHARS JMP L.XIT * * ESTABLISH DEVICE/BUS CNFG WORD * ID25 LDA EQT7,I GET CNFG WORD AND HI11 & IOR UNIT MERGE DEVICE ADDR STA BEQT1,I JMP L.XIT SKP * * GENERAL HP-IB CLEAR * IB00 LDB EQT6,I REQUEST FROM SYSTEM ELA CMA,SEZ,SSA BIT15(E)=0? OR BIT14(SIGN)=1? JMP L.XIT NO. REQUEST TYPE = 2 (SYSTEM). * CLA,INA YES. REQUEST TYPE # 2. ISSUE IFC. JSB CNTLR & LDA HI10 DELAY NO LESS INA,SZA THAN 100 USEC JMP *-1 JSB MINE REGAIN CNTRL LDB EQT7,I SZB IF OPT.PARM#0 JMP L.XIT DO IFC ONLY! CLA,INA LDB A#DCL ADD UNIVERSAL JMP ID00A DEVICE CLEAR * * DO PARALLEL POLL * IB30 LDA B70 ISSUE PPE CMND JSB CNTLR LDA B6 STROBE DIO LINES JSB CNTLR TO INPUT REG. IO5 LIA BUS & TAKE DATA BYTE JMP IB06A & POST IN EQT * * TAKE HP-IB STATUS * IB06 JSB STATS GET STATUS WORD, (E)=0 ASR 4 ISOLATE BUS SIGNAL LINE AND B377 & BUS FUNCTION STATUS IB06A STA STSWD,I & POST IN EQT JMP L.XIT * * REN TRUE/FALSE * IB16 LDA B3 REN TRUE RSS IB17 LDA B2 REN FALSE JSB CNTLR JMP L.XIT * * CLEAR BUS CONFIGURATION * IB27 LDA EQT12,I LOAD EQT WORD 12 AND B377 MASK # OF EQT EXTENSION WORDS STA EQT12,I AND RESTORE LDA DFCFG LOAD DEFAULT BUS CNFG WORD LDB EQT4,I LOAD EQT WORD 4 SSB DMA BIT 15=0? IOR BIT13 NO,SET DMA BIT IN DFLT WORD STA BCNFG,I AND SAVE IN BUS CNFG WORD JMP L.XIT * SKP * * I/O CONTINUATOR SECTION * C.37 NOP STA I.37 =INTERRUPT SOURCE CLB,INB ENABLE CLC,C JSB SETUP CNFG I/O & BEQT ADDRS JMP OUCH IFC DETECTED! IFN **IF SRQ SERVICE***** LDA T1 RETRIEVE STATUS * LDB EQT11,I * SSB SRQ SERVICE ACTIVE? * JMP C37C YES, RESUME OPERATIONS SSA SRQ INTERRUPT? * JMP C.SRQ YES, POSSIBLE ALARM* XIF ********************* * C37A LDA EQT1,I SZA I/O IN PROGRESS? JMP C37B YES. IFN **IF SRQ SERVICE***** LDA EQT12,I * RAL,SLA SRQ PENDING? * JMP C.SRQ YES, SERVICE NOW. * SSA ALARM PROG WAITING? * JSB C.SCH YES, SCHEDULE IT * XIF ********************* JMP C.OFF NO, LEAVE * C37B LDA T1 LDB EQT11,I RBR,SLB,RBL DMA I/O ACTIVE? JMP C.DMA YES, SPECIAL HANDLING * C37C RAL,RAL SLB,RSS INPUT REQUEST? JMP C37D SLA YES, EXPECT IRL FLAG JMP C.IRL INPUT READY. JMP C37E C37D SSA NO, EXPECT ORA FLAG JMP C.ORA OUTPUT ACCEPTED. * C37E LDA EQT4,I ALF TIME OUT? SSA,RSS JMP L.RTN NO, DISMISS IFN **IF SRQ SERVICE***** LDA BIT15 SSB SERIAL POLL HUNG? * JMP CONT. BAD, BAD, LEROY BUS... XIF ********************* SLB INPUT REQUEST? BLF,SLB EOR REQUIRED? JMP LOSE1 DEVICE QUIT. JMP C.IR3 ASSUME COMPLETE SKP * * INTERFACE CLEAR SERVICE * OUCH LDA EQT1,I I/O IN PROGRESS? SZA JMP OUCH1 YES. IFN **IF SRQ SERVICE***** LDB EQT11,I * SSB SRQ SERVICE ACTIVE? * JMP C.SR8 YES, NO LONGER... * XIF ********************* JMP C.OFF NO, IGNORE OUCH1 JSB MINE REGAIN CNTRL JMP L.RTN IGNORE IFC STATUS PER 1926 PCO SKP IFN **IF SRQ SERVICE** * * SERVICE REQUEST HANDLING (IF "ASMB,...,N") * C.SRQ LDA EQT1,I SZA,RSS I/O IN PROGRESS? JMP C.SR1 NO, GO POLL LDB BEQT1,I SRQ ALLOWED TO SSB KILL I/O OP? JMP C.SR0 LDA EQT12,I NO, DELAY SERVICE IOR BIT15 STA EQT12,I JMP C37A * C.SR0 LDA BIT14 YES, INDICATE SUCH C.SR1 IOR BIT11 (IN CASE OF EOR) STA EQT11,I LDA EQT12,I CLEAR PENDING ELA,CLE,ERA SRQ NOTIFICATION STA EQT12,I JSB SBEQT GET #BEQT ENTS & BEQT ADDR CMA,INA,SZA,RSS ANY? JMP CSR3A NO, DISABLE SRQ INTRPT STA BQCNT,I * C.SR2 STB BEQTA,I STORE DEVICE EQT EXT START ADDR INB INCREMENT TO 2ND WORD IN CURRENT EQT EXT LDA 1,I LOAD 2ND WORD SZA IS SRQ ALARM PROG SET UP FOR THIS DEVICE? JMP C.SR4 YES C.SR3 ADB B6 NO,GO TO 1ST WORD IN NEXT DEVICE EQT EXT ISZ BQCNT,I JMP C.SR2 LDA EQT11,I SSA SRQ SERIAL POLL ACTIVATED? JMP C.SR7 YES, GO CHECK FOR CLAMERS. CSR3A LDA EQT12,I NO. NOBODY WAS CONFIGURED IOR BIT13 WITH SRQ PROGRAM. XOR BIT13 DISABLE FUTURE SRQ STA EQT12,I INTERRUPTS FOR NOW. JMP C.SR8 * C.SR4 LDB BEQTA,I POSSIBLE SRQ SOURCE LDA 1,I LOAD DEVICE CONFIGURATION WORD AND B37 MASK DEVICE ADDRESS IOR #TLK LDB EQT11,I CCE,SSB SRQ SERVICE ACTIVATED YET? JMP C.SR5 RBL,ERB NO, ACTIVATE NOW STB EQT11,I IOR #SPE. FORM CMNDS: STA CMDBA+1,I UNT,UNL,SPE,TLK LDA B4 LDB CMDBA JMP C.SR6 * C.SR5 ALF,ALF YES, ADDR NXT TLKER STA STSWD,I CLA,INA LDB STSWD C.SR6 JSB DOIO DO SERIAL POLL OCT 60 SSA ERRORS ?? JMP DOWN YES, NO MERCY... ISZ EQT11,I INDICATE INPUT CLA,INA & LDB STSWD TAKE STATUS JSB DOIO OCT 120 (DATA MODE, CPU LSN) SSA TIME OUT? JMP LOSE7 YES, GO LOSE! LDA EQT11,I INDICATE OUTPUT ERA,CLE,ELA STA EQT11,I LDB BEQTA,I LOAD ADDRESS OF 1ST WORD IN CURRENT BEQT INB INCREMENT TO ADDR OF 2ND WORD LDA STSWD,I AND BIT14 SZA,RSS SRQ CLAIMED? JMP C.SR3 NO, TRY AGAIN * LDA 1,I YES IOR BIT15 SET SRQ PROGRAM SCHED ACTIVE BIT IN BEQT2 STA 1,I AND STORE ADB B3 INCREMENT TO BEQT WORD 5,SRQ STATUS BYTE LDA STSWD,I LOAD SRQ STATUS BYTE ALF,ALF SHIFT TO LOWER BYTE STA 1,I SAVE STATUS BYTE IN BEQT WORD 5 LDA EQT12,I LOAD EQT WORD 12 AND SET ALARM IOR BIT14 PROGRAM SCHEDULING ACTIVE BIT 14 STA EQT12,I AND STORE LDB BEQTA,I INB JMP C.SR3 TRY FOR MORE * C.SR7 LDA B2 LDB A#SPD ISSUE SERIAL POLL JSB DOIO DISABLE CMND OCT 60 SSA TIME-OUT? JMP DOWN YES, LOSE JSB C.SCH SKP * C.SR8 LDB EQT11,I RBL SSB,RSS I/O ABORTED? JMP CSR10 LDB BEQT1,I YES, ATTEMPT RESTART? RBL SSB JMP RSTRT YES, DO IT JMP LOSE3 NO, ABORT IT * CSR10 LDB EQT1,I SZB NO, BUSY NOW? JMP RSTRT YES, RESUME STB EQT11,I NO, CLEAR DVR CNTRL WORD JMP C37A * SKP * * ALARM PROGRAM SCHEDULING (IF "ASMB,...,N") * C.SCH NOP LDA EQT12,I LOAD EQT WORD 12,EQT ENTRY COUNT XOR BIT14 SET ALARM SCHEDULING ACTIVE BIT STA EQT12,I AND STORE JSB SBEQT GET #BEQT ENTRIES(A),ADDRESS OF 1ST BEQT(B) CMA,INA SET COUNTER TO -#BEQT ENTRIES STA BQCNT,I AND STORE * C.SC1 INB GO TO ADDR OF 2ND WORD IN CURRENT BEQT STB BEQTA,I AND STORE IN BEQTA LDA 1,I LOAD SECOND WORD OF CURRENT BEQT SSA SCHEDULING ACTIVE BIT 15 SET? JMP C.SC3 YES,TRY TO SCHEDULE PROGRAM IF IT EXISTS C.SC2 ADB B6 NO,GO TO 1ST WORD IN NEXT BEQT ISZ BQCNT,I INCREMENT BEQT COUNTER JMP C.SC1 JMP C.SCH,I DONE, SO LEAVE * C.SC3 ELA,CLE,ERA FOUND, CLEAR SCHEDULING ACTIVE BIT 15 STA 1,I AND STORE BACK INTO 2ND WORD IN BEQT STB C.SC4 STORE ADDR FOR SCHEDULING SRQ PROG ADB B3 INCR ADDR TO 5TH WORD IN BEQT,SRQ STATUS BYTE STB PARM1 AND STORE * INB INCREMENT TO PASSED VALUE (BEQT6) STB PARM4 * ADB M5 GO TO ADDR OF 1ST WORD IN CURRENT BEQT LDA 1,I LOAD DEVICE CONFIGURATION WORD AND B37 MASK DEVICE ADDRESS STA PARM2 AND STORE LDA EQT1 LOAD DEVICE EQT ADDRESS STA PARM3 AND STORE * JSB $LIST SCHEDULE ALARM PROGRAM OCT 701 BY NAME AND PASS IT DEF *+6 FOUR PARAMETERS C.SC4 NOP ALARM PROGRAM NAME BUFFER ADDRESS PARM1 NOP SRQ STATUS BYTE DEF PARM2 DEVICE ADDRESS DEF PARM3 EQT ADDRESS PARM4 NOP PASSED VALUE * SZA SUCCESSFUL SCHEDULE? JMP C.SC5 NO,CHECK ERROR CODE JMP C.SC6 YES,LOAD ADDR OF 2ND WRD IN CURRENT BEQT * C.SC5 CPB B5 IS PROGRAM THERE? JMP LOSE5 NO,GO LOSE! LDA EQT12,I YES, MAINTAIN ALARM PROGRAM IOR BIT14 SCHEDULING ATTEMPT BY SETTING STA EQT12,I SCHEDULING ACTIVE BIT IN EQT WORD 12 LDB BEQTA,I LOAD ADDR OF 2ND WORD IN CURRENT BEQT LDA 1,I LOAD 2ND WORD IN BEQT IOR BIT15 RESET SRQ PROG SCHED ACTIVE BIT STA 1,I AND STORE INTO 2ND WORD IN BEQT * C.SC6 LDB BEQTA,I LOAD ADDR OF 2ND WORD IN CURRENT BEQT JMP C.SC2 CONTINUE... XIF SKP * * DMA COMPLETION SERVICE * C.DMA BLF,ELB GET EOR CHARACTERISTICS RAL,RAL ELA A(15)=EOR FLAG, A(0)=W/BYTE STA T1 JSB DMA? GET DMA CHAN STA T2 & JSB CFGIO CNFG I/O INSTRUCTIONS DEF DMAT2 LDA DIO12 XOR B4 FORM LIB 2/3 STA DIO12 STA DIO13 DIO13 LIB 2 STB T3 LDA T2 LDB EQT11,I CPA I.37 DMA COMPLETION? JMP C.DMD YES. LDA T1 SSA EOR INDICATED? JMP C.DM1 YES. LDA EQT4,I ALF SSA,RSS TIME OUT? JMP L.RTN NO, DISMISS * C.DM1 SLB,RSS DMA HUNG! INPUT? JMP DIO10 NO, SKIP WIERD CRAP IO6 STC BUS DISABLE DMA'S CLF LDA B6 TO NOT CLEAR EOR FF JSB CNTLR FORCE DMA CYCLE TO GET LAST BYTE IO7 CLC BUS ENABLE LATER CLF INSTRUCTIONS DIO10 CLC 6 & DIO11 STF 6 STOP DMA SLB,RSS INPUT? JMP LOSE1 NO, DEVICE DOWN * C.DM2 LDB T1 SSB EOR SEEN? SLB EXPECTED AFTER LAST BYTE? C.DM3 CLA,RSS CCA YES, ADJUST CNT DIO12 LIB 2 TAKE DMA REMAINS CPB T3 SAME AS PREVIOUS CNT?? RSS YES, MUST HAVE BEEN EVEN CNT ADA M1 NO, ADJUST FOR ODD CNT BLS ADB 0 ADB IOCNT,I ADB IOLNG,I =XMITTED CHAR CNT LDA 1 ARS ADA IOADR,I STA IOADR,I =BUFR END ADDR LDA EQT11,I SLA CHECK I/O DIRECTION JMP C.DM4 * XOR B2 OUTPUT, CLEAR DMA STA EQT11,I ACTIVE STATUS AND BIT8 MAINTAIN ASCII LOGIC IOR REACT ARM SRQ,ORA,PACKING JSB CNTLR & JMP C.OR8 DUMP REMAINDER * C.DM4 STB IOCNT,I INPUT, POST APPROX.CNT AND B10 CRLF POST PROC? SZA,RSS JMP C.IR3 NO, ALLOW ODD CHAR.FILL LDB IOCNT,I YES, END ON CRLF ADB M2 CLE,SSB,RSS SZB,RSS CLB,CCE CCA,SEZ CLA ADA IOADR,I STA IOADR,I C.DM5 LDA IOADR,I GET CUR.WORD LDA 0,I SLB,RSS EVEN CNT? ALF,ALF YES, POSITION AND B377 EXTRACT CHAR CPA B15 CR? JMP C.DM6 OR CPA B12 LF? JMP C.DM6 OR CPB IOCNT,I EOB? JMP C.IR3 YES, DONE SLB,INB ODD CNT? ISZ IOADR,I YES, ADVANCE JMP C.DM5 & CONTINUE * C.DM6 STB IOCNT,I POST VALID CHAR CNT JMP C.IR3 * C.DMD SLB DMA COMPLETION FOR: JMP C.DM2 INPUT. JMP C.DM3 OUTPUT. SKP * * OUTPUT CONTINUATOR SERVICE * C.ORA LDA EQT11,I GET EOR CHARACTERISTICS ALF,CLE A(0)=EOR REQ., A(15)=W/BYTE. ALSO CLR E. LDB IOCNT,I SZB,RSS BUFR FLUSHED? JMP C.OR5 YES. (E)=0 CPB B1 WEIRD CRAP? LAST BYTE? JMP C.OR3 YES, (E)=0 INB,SZB,RSS ODD BYTE? JMP C.OR3 YES. (E)=1 INB,SZB,RSS LAST WORD? JMP C.OR2 YES. (E)=1 STB IOCNT,I NO. (E)=0 * C.OR1 LDA IOADR,I LDA 0,I GET DATA WORD SEZ NEXT OUTPUT UPPER BYTE ONLY? ALF,ALF YES, POSITION LDB IOCNT,I GET COUNT OF CHAR.S LEFT TO BE SENT. CCE,SSB WEIRD STUFF? ALSO SET E BIT. ISZ IOADR,I NO, ADVANCE BUFR IO1 OTA BUS ISSUE DATA C.OR8 JSB STATS GET STATUS RAL,RAL CHECK FOR QUICK RESPONSE SSA ?? JMP C.ORA YES, CONTINUE JMP L.RTN NO, AWAIT INTERRUPT * C.OR2 CLB,INB INDICATE ONE MORE BYTE STB IOCNT,I TO COME AFTER THIS ONE. CLB INDICATE NO EOR AND ALSO JMP C.OR4 DISABLE PACKING. (NO PACKING BIT 11=0) * C.OR3 CLB LAST BYTE! (E=0 LOWER) (E=1 UPPER) STB IOCNT,I SET COUNT TO ZERO TO FLAG SPECIAL CASE. SLA EOR REQUIRED? SSA,RSS W/LAST BYTE? JMP C.OR4 NO. LDB B50 YES, GIVE EOR (BITS 5-3=5) ALSO NO PACKING. XOR B1 CLEAR FUTURE REQ. C.OR4 ALF,ALF SEND COMMAND WORD TO I/O BOARD. ALF POSITION BIT 15 TO SIGN BIT. STA EQT11,I AND BIT8 MAINTAIN ASCII LOGIC IOR 1 IOR REARM ARM SQR,ORA INTRPT JSB CNTLR NOTIFY CNTRLER JMP C.OR1 * C.OR5 SLA,RSS ALL BYTES HAVE BEEN SENT. EOR REQUIRED? JMP C.OR6 NO, POSSIBLE CRLF IOR BIT15 YES, DO IT NOW LDB .0A STB IOADR,I JMP C.OR3 * C.OR6 ALF,ALF POSITION BIT 3 TO SIGN POSITION SSA,RSS CRLF REQUIRED? BIT 3 SET? JMP DOIOX NO. MAKE EXIT. * XOR BIT15 YES. CLEAR FUTURE REQUIREMENT. ALF,ALF POSITION BIT 11 TO SIGN POSITION. IOR BIT12 ENABLE ASCII LOGIC (BIT 8 OF EQT11). STA 1 SAVE EQT11 IN B REGISTER. * LDA CRLFA GET ADDRESS OF CRLF STA IOADR,I AND PUT IN POINTER TO I/O BUFFER. ISZ IOLNG,I INCR. COUNT FOR CR BUT NOT FOR LF YET. CCE SET FLAG TO SEND UPPER BYTE. * LDA EQT6,I CHECK IF OUTPUT MODE. AND B3 MASK TO GET FUNCTION CODE. CPA B2 WRITE? CODE=2? * JMP C.OR7 YES. * JMP C.OR9 NO. SEND LF. * C.OR7 LDA BEQT1,I CHECK IF LF IS TO BE SUPRESSED. AND BIT7 SUPPRESS IF BIT 7 IS SET. SZA SUPPRESS? * JMP C.ORB YES. * C.OR9 ISZ IOLNG,I NO. NOW INCREMENT COUNT FOR LF. LDA 1 RESTORE EQT11 TO A REGISTER. JMP C.OR2 GO SEND CRLF AS LAST TWO BYTES. * C.ORB LDA 1 RESTORE EQT11 TO A REGISTER. JMP C.OR3 GO SEND CR AS LAST BYTE. * * SKP * * INPUT CONTINUATOR SERVICE * C.IRL BLF,ELB GET EOR CHARACTERISTICS ELA & MERGE CUR EOR STATUS STA T1 A(15)=EOR, A(0)=W/BYTE REQ. SSA,RSS EOR? JMP C.IR1 NO, TAKE DATA SLA,RSS EXPECT W/BYTE? JMP C.IR3 NO, EOR ONLY * C.IR1 LDA IOADR,I STA T2 IO2 LIA BUS TAKE DATA BYTE BLF,BLF BIT 3, CRLF CHECK SLB,RSS JMP C.IR2 CPA B15 YES, IGNORE CR'S JMP CIR2A CPA B12 LF? JMP C.IR3 YES, END IT NOW * C.IR2 LDB IOCNT,I RETREIVE CNT SLB,RSS EVEN BYTE? ALF,ALF YES, POSITION SLB IOR T2,I NO, MERGE STA T2,I POST IN BUFR SLB,INB ODD BYTE? ISZ IOADR,I YES, ADVANCE BUFR STB IOCNT,I & CNT CHAR CPB IOLNG,I ALL DATA TAKEN? JMP C.IR3 YES, DONE CIR2A LDB T1 CCE,SSB EOR? JMP C.IR3 YES, END IT ALL * C.IR4 JSB STATS GET STATUS, CLEAR MAIN FLAG RAL,RAL SLA,RSS CHECK QUICK RESPONSE? JMP L.RTN NOT YET, AWAIT INTERRUPT LDB EQT11,I HAVE IT, CONTINUE... JMP C.IRL * C.IR3 CCE CLEAR PENDING IRL JSB STATS INTERRUPT CLA ADJUST FOR VALID STA IOLNG,I XMIS. LOG LDB IOCNT,I ODD CNT? SLB,RSS NO, DONE JMP DOIOX LDB EQT11,I RBR,RBR SLB,RSS DATA TYPE? CLB,RSS BINARY, 0 FILL LDB B40 ASCII, BLANK FILL STB T2 LDB IOADR,I LDA 1,I AND HI8 IOR T2 STA 1,I JMP DOIOX * SKP * * ERRORS * LOSE1 CLA,INA,RSS *I/O ERROR LOSE2 LDA B2 *I/O ABORTED BY IFC JMP LOSE * IFN ************IF SRQ SERVICE********** LOSE3 LDA B3 * I/O ABORTED BY SRQ * JMP LOSE * * LOSE4 LDA B4 * NO ALARM PROGRAM FOUND WITH NAME * JMP LOSE *SPECIFIED WHEN CTL REQ 20 WAS MADE* LOSE5 LDA B5 *ON SRQ INTERRUPT, DRIVER COULD NOT* JSB EQSTS *SCHEDULE ALARM PROGRAM SPECIFIED * JMP DOWN *IN DEVICE BEQT * LOSE7 LDA B7 *NO STATUS RETURNED BY DEVICE IN * JSB EQSTS *RESPONSE TO A SERIAL POLL PRIOR TO* JMP DOWN *TIMEOUT OCCURRING * XIF ************************************ * LOSE6 LDA EQT13,I *EQTX FULL IOR BIT15 STA EQT13,I INDICATE INITIATOR * CLA CLEAR BEQT1 ADDRESS SO BEQT7 STA BEQT1 WILL NOT BE POSTED * LDA B6 LOSE STA STSWD,I POST ERR STATUS LDA BIT15 STA XLOG,I GIVE ERR JMP L.XIT & QUIT * DOWN CCA *CRITICAL ERROR! STA CHAN LDB EQT13,I & DOWN BUS NOW SSB,RSS VIA CLA,INA,RSS CONTINUATOR LDA B3 INITIATOR JMP LXIT2 * * LOGICAL I/O CONTINUATOR EXITS * C.OFF LDA IDLE JSB CNTLR ARM SQR, SET DATA MODE IO8 CLC BUS,C & OFF 59310B CLA,CLE,RSS INDICATE CLOCK OFF L.RTN CLA,CCE INDICATE CLOCK ON STA T1 CLO INDICATE CONTINUATION ISZ C.37 JMP LXIT3 SKP * * LOGICAL I/O COMPLETION EXITS * L.XIT LDA STSWD,I POST EQT STATUS IN EQT5 & BEQT7 JSB EQSTS & LDA XLOG,I GIVE XMIS.LOG RAL,CLE,ERA PUT ERROR FLAG IN E REGISTER. LDB EQT8,I SSB WORDS REQUESTED? JMP LXIT1 NO, GIVE +CHARS INA YES, GIVE +WORDS ARS LXIT1 SEZ PUT THE ERROR BIT BACK IN IOR BIT15 IF IT WAS SET. STA XLOG,I SSA,RSS ANY ERRORS? JMP LXT1A NO LDA EQT6,I YES,LOAD EQT WORD 6 RAL,RAL ROTATE REQ TYPE TO LOWER BIT AND B3 AND MASK SZA REQ TYPE=0? JMP DOWN NO,BUFRD REQ,AL ERRORS FATAL! LDA BEQT1,I YES,UNBUFRD REQ,LOAD CNFG WORD ALF,ALF ROTATE E-BIT TO LSB SLA,RSS E-BIT=0? JMP DOWN YES,ALL ERRORS FATAL! * LXT1A LDB EQT13,I SSB INITIATOR? LDA B4 YES, IMMED.COMPLETE. (DON'T ABORT PROG) SSB,RSS LDA BIT15 NO, FREE DMA CHAN. LXIT2 STA T1 =RETURN CODE LDA IDLE JSB CNTLR ALLOW SQR, SET DATA MODE IO9 CLC BUS,C & KILL 59310B NOW CLA,CLE INDICATE CLOCK OFF STA EQT11,I CLEAR DVR CNTRL WORD STO INDICATE COMPLETION LXIT3 LDA EQT13,I SSA DETERMINE EXIT ROUTE LDB I.37 INITIATOR. SSA,RSS LDB C.37 CONTINUATOR STB T2 =RETURN ADDR LDA EQT13,I ELA,CLE,ERA CLEAR I/C INDICATOR STA EQT13,I LDA EQT4,I IOR BIT11 XOR BIT11 CLEAR TIME OUT FLAG STA EQT4,I SEZ,RSS CLOCK OFF? CLA,RSS YES, CLEAR IT LDA EQT14,I NO, RECOVER TIME VALUE * SKP * IFN **IF SRQ SERVICE***** SOC I/O COMPLETION? * JMP LXIT4 YES. * LDB EQT1,I * SZB I/O BUSY? * JMP LXIT5 YES. * LDB EQT11,I * SSB SRQ SERVICE BUSY? * JMP LXIT5 YES. * LXIT4 LDB EQT12,I * RBL,SLB SRQ PENDING? * CCA YES, HANDLE ON NXT INTRPT SSB PROG SCHEDULING DELAYED? LDA TIME YES, ACTIVATE TIME OUT XIF ********************* * LXIT5 STA EQT15,I IFN *******IF SRQ SERVICE********** LDA DTOUT *LOAD ADDRESS OF DUMMY TIMEOUT* SOC *IF COMPLETION EXIT * STA EQT15 *AVOID RTIOC CLOCK CLEAR * XIF ******************************* * LDB BEQT1 POST BEQT7 * SZB,RSS TEST IF BEQT IS SETUP (IE. NO ERR 6) JMP LXIT6 ERR 6. NO ROOM IN EQTX. * ADB B6 LDA XLOG,I FIRST STORE TRANSMISSION LOG. STA 1,I * SSA,RSS IF ERROR (BIT15 SET), THEN CHANGE THE JMP LXIT6 STORED VALUE TO THE STATUS VALUE FROM LDA EQT5,I EQT5. AND B377 IOR BIT15 STA 1,I * LXIT6 LDA T1 BEGIN FINAL EXIT FROM DRIVER. LDB XLOG,I ISZ CHAN CRITICAL ERR? IO4 STC BUS NO, ENABLE INTERRUPT JMP T2,I & LEAVE GRACEFULLY SKP * DO I/O OPERATION * * (A)=+CHAR CNT, (B)=BUFR ADDR * JSB DOIO * DEF * (A)=+CHAR CNT XMITTED * DOIO NOP STA IOLNG,I POST CHAR LNG STB IOADR,I POST BUFR ADDR LDB EQT11,I SLB CHECK I/O DIRECTION? CLA,RSS INPUT, INIT UP CNT CMA,INA OUTPUT, INIT DOWN CNT STA IOCNT,I * DOIO0 LDA EQT11,I CONSTRUCT HP-IB CNTRL WORD: AND BIT8 ALLOW ASCII MODE LOGIC IOR DOIO,I MERGE CMND/DATA MODE LDB EQT11,I SLB,RBR I/O DIRECTION? JMP DOIO1 * IOR BIT11 OUTPUT, PACKING ON SLB,RSS DMA? IOR BIT13 NO, ARM ORA INTRPT JMP DOIO2 * DOIO1 SLB,RSS INPUT, DMA? IOR B50K NO, ARM IRL,EOR INTRPT SLB IOR B16K YES, ARM EOR,PACKING,DMA STA T1 SAVE CONTROL WORD LDA ENABL LOAD CONTROL WORD TO SET NRFD FALSE JSB CNTLR GO ISSUE IT LDA T1 LOAD HP-IB CONTROL WORD * DOIO2 IOR ENABL ENABLE FUNNY FUNCTIONS JSB CNTLR ISSUE CONTROL WORD FOR ATN FALSE,ETC... LDA DOIO INA POST RESUME ADDR STA ZOOM,I RBL,SLB INPUT REQUEST? IIO1 LIA BUS,C YES, SET RFD FLOP RBR,SLB,RBL DMA REQUEST? JMP DOIO3 CCE,SLB NO, DIRECTION? JMP C.IR4 INPUT, AWAIT INTERRUPT JMP C.ORA OUTPUT, START CONTINUATOR * DOIO3 LDA IOLNG,I INIT DMA I/O OP INA ARS DETERMINE I/O LNG CMA,INA,SZA,RSS 0 LNG? JMP DOIO5 YES, CRLF ONLY! STA T1 SLB,BLF OUTPUT? JMP DOIO6 NO, IGNORE WHAT FOLLOWS! LDA IOLNG,I ERA ALLOW FOR EOR ACTIVITY CCA,SEZ ODD BYTE? JMP DOIO4 YES, ALLOW FOR IT CLA SLB,RSS EOR REQUIRED? JMP DOIO4 NO, NO ADJUSTMENT SSB EOR W/BYTE? LDA M2 YES, ALLOW FOR IT DOIO4 STA IOCNT,I POST ADJUSTMENT, IF ANY SZA ISZ T1 REDUCE DMA I/O LNG JMP DOIO6 DOIO5 LDA EQT11,I NOTHING LEFT, CLEAR XOR B2 DMA ACTIVE STATUS STA EQT11,I JMP DOIO0 & TRY AGAIN * DOIO6 JSB DMA? GET DMA CHAN JSB CFGIO CONFIGURE DMA I/O DEF DMAT1 INSTRUCTIONS LDA DIO1 AND B3 JSB CFGIO ALL OF THEM! DEF DMCT1 LDA CHAN GET HP-IB CHANNEL DIO1 OTA 6 & TELL DMA CIO1 CLC 2 LDB EQT11,I SLB INPUT REQ?? IIO2 STC BUS YES, $%&'&%$#$#&%$ ERB ESTABLISH I/O LDA IOADR,I DIRECTION RAL,ERA & CIO2 OTA 2 BUFR ADDR CIO3 STC 2 LDB T1 & CIO4 OTB 2 -WORD CNT CLF 0 INTERRUPTS OFF DIO2 STC 6,C START DMA CLA CPA DUMMY PRIVILEDGED INTRPTS? JMP L.RTN NO, AWAIT RESPONSE DIO3 CLC 6 YES, KILL DMA INTPRPT LDB INTBA LDA DIO1 & SLA INB LDA 1,I IOR BIT15 ALLOW RTE TO HANDLE STA 1,I STF 0 INTERRUPTS ON JMP L.RTN AWAIT DMA RESPONSE * DOIOX LDA IOLNG,I I/O OP COMPLETION HERE... ADA IOCNT,I (A)=XMIS LOG CONT. LDB ZOOM,I & JMP 1,I RESUME SKP * FIND DMA CHANNEL ASSIGNMENT * DMA? NOP DLD INTBA,I ELA,CLE,ERA FIND AVAILABLE CPA EQT1 DMA CHANNEL JMP DMA1 ELB,CLE,ERB CPB EQT1 JMP DMA2 CLA NONE! JMP DMA?,I DMA1 CLA,RSS DMA2 CLA,INA ADA B6 (A)=DMA CHAN JMP DMA?,I * * ISSUE HP-IB CONTROLLER CMND * CNTLR NOP IFN ** IF SRQ SERVICE ** STA DMA? * LDA EQT11,I IF DMA RUNNING SSA,RSS OR BUSY WITH SRQ RAR,SLA THEN KILL SRQ * TEST DMA BIT HERE. CLA,RSS INTERRUPT LDA EQT12,I GET SRQ INTERRUPT * RAL,RAL ARMING FLAG & * AND BIT15 ISSUE WITH CONTROL * IOR DMA? WORD * XIF ******************** CNTL1 STF BUS CNTL2 OTA BUS JMP CNTLR,I * * TAKE HP-IB CONTROLLER STATUS * (E)=1 TO ALSO CLEAR MAIN FLAG * STATS NOP STAT1 STF BUS ENABLE CARD CONTROL MODE SEZ (E)=1 TO CLEAR MAIN FLAG ONLY STAT2 CLC BUS,C WITH NO CHANGE TO EOR FF, ETC STAT3 LIA BUS DISABLE CONTROL MODE JMP STATS,I * * REGAIN HP-IB CONTROL * MINE NOP LDA B5 JSB CNTLR SET ACTIVE CNTRLR IO3 CLC BUS,C CLEAR IFC STATUS JMP MINE,I * SKP * * POST EQT STATUS BYTE * EQSTS NOP AND B377 STA MINE (A)=STATUS BYTE LDA EQT5,I AND HI8 IOR MINE STA EQT5,I JMP EQSTS,I * * CONFIGURE I/O INSTRUCTIONS * * (A)=I/O CHAN * JSB CFGIO * DEF * P+2: RETURN * CFGIO NOP STA MINE (A)=CHAN LDB CFGIO,I GET TAB ADDR LDA 1,I STA EQSTS GET # ENTRIES CFG1 CCE,INB SET INDIRECT BIT RBL,ERB ON TAB ENT ADDR LDA 1,I AND HI10 CNFG INSTRUCTION IOR MINE STA 1,I ISZ EQSTS JMP CFG1 ISZ CFGIO JMP CFGIO,I * * GET #BEQT ENTRIES, 1ST BEQT ENTRY ADDR * SBEQT NOP LDA EQT12,I ALF,ALF AND B37 LDB EQT13,I ELB,CLE,ERB ADB FIXSZ JMP SBEQT,I * * INITIALIZE BEQT WORDS. * VALUE OF CONFIGURATION WORD IN A REGISTER. * ADDRESS OF BEQT1 FOR UNIT IN B REGISTER. * CLRBE NOP STA 1,I SET CONFIG WORD IN BEQT1. STB T1 SAVE BEQT1 ADDRESS. * LDB M7 FETCH NEGATIVE LENGTH OF BEQT. CLA SET REMAINING BEQT WORDS TO 0'S. * CLRBF ISZ T1 INCREMENT ADDRESS. INB,SZB,RSS INCREMENT DOWN COUNT. TEST FOR END. JMP CLRBE,I END OF BEQT. * STA T1,I CLEAR BEQT WORD. JMP CLRBF GO BACK AND CLEAR NEXT WORD. * SKP * * CNFG I/O & SETUP BEQT * * (A)=I/O CHANNEL * (B)=0/1: DISABLE/ENABLE CLC,C * JSB SETUP * P+1: HP-IB CONTROL LOST * P+2: NORMAL RETURN * SETUP NOP STB T3 LDA EQT4,I INSURE WE HAVE AND B77 BUS CHANNEL STA CHAN JSB CFGIO CNFG I/O INSTRUCTIONS DEF IOTAB LDB FIXSZ CMB,INB STB T1 LDA EQT12,I INSURE AND B377 MINIMUM ADA 1 SIZE EQTX SSA JMP LOSE6 LOSE!! * LDA EQT13,I FETCH FIRST EQTX ADDRESS. LDB XEQTA FETCH 1ST ADDR. FOR STORING EQTX ADDR.S. SET1 STA 1,I POST FIXED INA EQTX ADDRS INB ISZ T1 JMP SET1 * LDA EQT12,I LOAD EQT WORD 12 AND MASK MASK # OF DEVICE ENTRIES SZA # OF DEVICE ENTRIES ZERO? JMP SET8 NO, SKIP AUTO ADDR BUFR INITIALIZATION DLD CMDBF YES,INITIALIZE AUTO ADDR CMND BUFR DST CMDBA,I FOR THIS HP-IB TO UNT,UNL,0,0 * SET8 LDA EQT4,I ASR 6 EXTRACT AND B37 SUB-CHANNEL STA UNIT * LDA EQT12,I LOAD EQT WORD 12. AND MASK MASK TO GET DEVICE COUNT. SZA HAS BUS BEEN CONFIGURED? JMP SET YES. BEEN THRU BEFORE. * LDA EQT12,I NO. GET EQT WORD 12 AGAIN. IOR BIT8 SET DEVICE COUNT TO ONE STA EQT12,I AND STORE * LDB EQT4,I LOAD EQT WORD 4 LDA DFCFG LOAD DEFAULT BUS CNFG WORD SSB DMA BIT 15=0? IOR BIT13 NO,SET DMA BIT IN DEFAULT WORD LDB BCNFG INITIALIZE BUS BEQT. JSB CLRBE * * SET LDA UNIT GET SUBCHANNEL (UNIT) NUMBER AGAIN. SZA SUBCHANNEL 0? JMP SET2 NO. * LDB BCNFG LOAD BUS CNFG WORD ADDRESS JMP SET6 * SET2 JSB SBEQT GET #BEQT ENTS & ADDR STA T2 SAVE # OF CNFG SUB CHANNELS * CMA,INA FORM NEG. NO. OF CNGF. SUBCHANNELS. STA T1 SAVE COUNT. * CLA STA BEQT1 * * SET3 ISZ T1 INCREMENT DOWN COUNT. JMP *+2 JMP SET4 EXIT LOOP WHEN COUNT GETS TO ZERO. * LDA 1,I FETCH BEQT1 SZA,RSS BEQT ENTRY EMPTY? STB BEQT1 YES, REMEMBER IT * AND B37 GET DEVICE ADDR CPA UNIT OF INTEREST? JMP SET6 YES, GOT IT * ADB B7 JMP SET3 NO, TRY NEXT BEQT. * SET4 LDA BEQT1 UNIT NOT FOUND SZA EMPTY ENTRY? JMP SET5 YES. * STB BEQT1 NO, NEED TO MAKE ONE ADB B6 CALCULATE LAST NEEDED ADDRESS. LDA EQT12,I INSURE ROOM EXISTS AND B377 GET EQTX LENGTH. ADA EQT13,I CALCULATE LAST AVAILABLE ADDRESS. ELA,CLE,ERA CLEAR THE I/C BIT. (IS THIS NECESSARY?) CMA,INA ADA 1 SUBTRACT AVAILABLE FROM NEEDED. SSA,RSS NEEDED GREATER THAN AVAILABLE? JMP LOSE6 YES, FULL! * LDA T2 RETRIEVE # OF CNFG SUB CHANNELS CPA B37 31 ENTRIES YET? JMP LOSE6 YES, FULL! * LDA EQT12,I ADA BIT8 OK, CNT ENTRY STA EQT12,I * SET5 LDB BEQT1 LOAD ADDRESS OF IST BEQT WORD LDA UNIT LOAD DEVICE ADDRESS IOR DFCFG MERGE DEFAULT DEVICE CONFIG WORD JSB CLRBE INITIALIZE NEW BEQT. LDB BEQT1 LOAD ADDRESS OF BEQT WORD 1 * SET6 STB BEQT1 SAVE ADDRESS OF 1ST WORD IN BEQT INB INCREMENT TO ADDRESS OF 2ND WORD IN BEQT STB BEQT2 STORE ADDRESS OF 2ND WORD IN BEQT * LDB T3 RETRIEVE CLC,C FLAG. ERB (E)=1 FOR CLC,C JSB STATS TAKE STATUS, CLEAR FLAG STA T1 AND B17 CPA B11 IFC DETECTED? JMP SETUP,I YES, LEAVE P+1 LDA T1 AND B20 CPA B20 ACTIVE CONTROLLER? ISZ SETUP YES, EXIT P+2 JMP SETUP,I SKP * * EQT EXTENSION FIXED AREA ASSIGNMENTS * FIXSZ DEF FIXND-*-2 EQTX MIN.SIZE REQ. XEQTA DEF *+1 *BEGIN FIXED EQTX AREA IOLNG BSS 1 1 CUR I/O CHAR LNG IOADR BSS 1 2 CUR I/O BUFR ADDR IOCNT BSS 1 3 CUR I/O CHAR CNT XLOG BSS 1 4 PENDING XMISSION LOG STSWD BSS 1 5 PENDING EQT STATUS BYTE BEQTA BSS 1 6 SRQ, PENDING BEQT ADDR BQCNT BSS 1 7 SRQ, PENDING BEQT CNT ZOOM BSS 1 10 I/O RESUME ADDR DTOUT BSS 1 11 DUMMY TIMEOUT CMDBA BSS 2 12 AUTO ADDRESSING COMMAND BUFFER BCNFG BSS 7 15 BUS CONFG WORD. (BEQT FOR UNIT 0) FIXND EQU * *END FIXED EQTX AREA * * EQT EXTENSION VARIABLE AREA ENTRY * ONE ASSIGNMENT PER UNIQUE SUBCHANNEL * BEQT1 BSS 1 DEVICE CNFG WORD ADDRESS. BEQT2 BSS 1 SRQ ALARM PROG ADDRESS. * * STORAGE, ETC * BUS EQU 20B NOMINAL HP-IB CHANN TIME DEC -100 SCHEDULE RETRY @ 10MSEC UNIT BSS 1 CHAN BSS 1 T1 BSS 1 T3 BSS 1 T2A DEF *+1 T2 BSS 5 CFGWA DEF *+1 BSS 1 ZBIT BSS 1 Z-BIT IN LSB PARM2 BSS 1 ALARM DEVICE ADDRESS PARM3 BSS 1 ALARM DEVICE EQT ADDRESS * .0A DEF .0 A#SPD DEF #SPD. A#DCL DEF #DCL. CRLFA DEF CRLF * .0 OCT 0 B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B10 OCT 10 B11 OCT 11 B12 OCT 12 B14 OCT 14 B15 OCT 15 B16 OCT 16 B17 OCT 17 B20 OCT 20 B21 OCT 21 B25 OCT 25 B27 OCT 27 B30 OCT 30 B37 OCT 37 B40 OCT 40 B50 OCT 50 B70 OCT 70 B77 OCT 77 B100 OCT 100 B137 OCT 137 B177 OCT 177 B377 OCT 377 B2103 OCT 2103 B6K OCT 6000 B14K OCT 14000 B16K OCT 16000 DFCFG OCT 17000 B50K OCT 50000 MASK OCT 17400 ENABL OCT 207 IDLE OCT 247 REACT OCT 24200 REARM OCT 20200 * BIT7 OCT 200 BIT8 OCT 400 BIT11 OCT 4000 BIT12 OCT 10000 BIT13 OCT 20000 BIT14 OCT 40000 BIT15 OCT 100000 HI8 OCT 177400 HI10 OCT 177700 HI11 OCT 177740 CRLF OCT 6412 FORMA DEF B6K M1 DEC -1 M2 DEC -2 M4 DEC -4 M5 DEC -5 M7 DEC -7 * * SKP CMDBF OCT 57477,40040 UNTALK,UNLISTEN,TLK,LSN #LSN EQU B40 LISTEN ADDR #TLK EQU B100 TALK ADDR #SPE. EQU B14K SERIAL POLL ENABLE #SPD. OCT 14537 SERIAL POLL DISABLE,UNTALK #LSDC OCT 20004 LSN ADDR 0, SDC #DCL. OCT 12000 UNIVERSAL DEVICE CLEAR #ULBT OCT 37500 UNL, BUS TALK #ULBL OCT 37440 UNL, BUS LISTEN #DLSC OCT 20140 DEVICE LISTEN, SECONDARY #DTSC OCT 40140 DEVICE TALK, SECONDARY * SKP IOTAB ABS *+1-IOTAE DEF IO1 DEF IO2 DEF IO3 DEF IO4 DEF IO5 DEF IO6 DEF IO7 DEF IO8 DEF IO9 DEF IIO1 DEF IIO2 DEF CNTL1 DEF CNTL2 DEF STAT1 DEF STAT2 DEF STAT3 IOTAE EQU * * DMAT1 ABS *+1-DMT1E DEF DIO1 DEF DIO2 DEF DIO3 DMT1E EQU * * DMCT1 ABS *+1-DMC1E DEF CIO1 DEF CIO2 DEF CIO3 DEF CIO4 DMC1E EQU * * DMAT2 ABS *+1-DMT2E DEF DIO10 DEF DIO11 DEF DIO12 DMT2E EQU * * * SIZE EQU * DRIVER SIZE CHECK END