ASMB,R * * NAME: ID.52 * SOURCE: 92071-18365 * RELOC: 92071-16365 * PGMR: C.H.W. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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 ID.52,0 92071-16365 REV.2041 800808 * * SKP * * ID.52 IS THE PARALLEL INTERFACE INTER-PROCESSOR COMMUNICATIONS * DRIVER. IT ALLOWS PROGRAMS ON CONNECTED PROCESSORS TO SEND * AND RECEIVE DATA. IT ALSO SCHEDULES PROGRAMS BY ASYNCHRONOUS * INTERRUPT FROM OTHER SIDE WHEN THE REMOTE PROCESSOR RECEIVES A * READ, WRITE, OR WRITE/READ REQUEST. * * ID.52 IS DESIGNED TO MAXIMIZE THROUGHPUT INCLUDING WAITING * WITH A "SFS" WHEN AN INITIATED TRANSFER WILL COMPLETE IN * APPROXIMATELY 1 MSEC OR LESS. * * ID.52 INCLUDES CAPABILITIES TO PROVIDE A REMOTE TERMINAL-LIKE * INTERFACE OVER THE COMM LINK SO THAT INTERACTIVE PROGRAMS * (SUCH AS FMGR) CAN BE CONTROLLED BY A REMOTE PROGRAM. * * IFT EXTENSION USAGE: * IFTX + 0,1,2 = NAME OF PROGRAM TO SCHED ON ASYNC INTERRUPT * IFTX + 3 = PARAMETER TO PASS SCHEDULED PROGRAM * IFTX + 4 = ADDR OF RESIDUE ON READ * IFTX + 5 = TEMP SAVE OF ORIGINAL DMA WORD COUNT * IFTX + 6-9 = AREA FOR 1ST QUAD * IFTX + 10-13 = AREA FOR 2ND QUAD * IFTX + 14-17 = AREA FOR 3RD QUAD * IFTX + 18-21 = AREA FOR 4TH QUAD * IFTX + 22-25 = AREA FOR 5TH QUAD * * * SUPPORTED EXEC CALLS ARE: * 1 CALL EXEC(1,LU,BUF,LEN) - READ DATA * 2 CALL EXEC(2,LU,BUF,LEN(,PRAM)) - WRITE DATA (WITH OPT PRAM) * 3 CALL EXEC(1,10000B+LU,BUF,LEN,CBUF,CLEN) - WRITE CTL INFO, READ DATA * 4 CALL EXEC(3,LU) - CLEAR * 5 CALL EXEC(3,100B+LU) - SEND EOF * 6 CALL EXEC(3,600B+LU) - GET STATUS * 7 CALL EXEC(3,2000B+LU,PN,AM,E,PRAM) - ENABLE ASYNC PGM SCHEDULE * 8 CALL EXEC(3,2100B+LU)[OR 2300B+LU] - DISABLE PGM SCHEDULE * 9 CALL EXEC(3,2200B+LU) - SET TIMEOUT * SKP GEN 10,EID.52,TX:26,IT:52B * ENT ID.52 * EXT $DMPR,$DVLU,$XQSB,.MVW,$DIOC EXT $DV6,$DV13 EXT $DV15,$DV16,$DV17,$DV18,$DV19 EXT $IF2,$IF5,$IF6,$IF7,$IFTX,$ATTN EXT $SELR,$IF1 * DMA EQU 20B 1ST SELECT CODE FOR DMA SELF-CONFIG CARD EQU 30B CARD S.C. W/ GLOBAL REG ENABLED AIE EQU 1 FORCE INTERRUPT BIT EDT EQU 2 EARLY DMA TERMINATOR CTL BIT RTR EQU 4 READY TO RECEIVE CTL BIT RTS EQU 10B READY TO SEND CTL BIT CCON EQU 2540B CARD CONTROL FOR DMA, SRM=1 PLV EQU 2000B PLV LBY EQU 1000B LBYEN TO ALLOW DMA TERM IRQ EQU 400B ENABLE INTERRUPT FROM ST0 SPC 4 * * ID.52 NOP CLB STB HOLDF INITIALIZE "HOLD" FLAG AND B7 ISOLATE ENTRY TYPE ADA JMPTB POINT TO ADDR OF PROCESSING JMP 0,I ROUTINE AND JUMP TO IT SKP * * THIS SECTION HANDLES A NEW REQUEST (LOGICAL INITIATION) * PI.00 LDA $DV6,I AND HIGH8 CLEAR STATUS BITS STA $DV6,I LDA $DV15,I GET REQUEST CONTROL WORD RAR CCE,SSA,SLA CONTROL REQUEST? JMP CN.00 YES AND MSKRQ =104001 (RQ+ZBIT) STA TEMP3 LDA $DV15 LDB $IF1 JSB $SELR GET RELOCATION REG STA MAPV SAVE FOR DMA CONWDS LDB TEMP3 RELOAD CONWD CPB READZ WRITE/READ REQUEST? * PI.05 INB SET WRITE BIT LDA $IFTX ADDR OF IFT EXTENSION ADA B4 STA TEMP3 ADDR FOR RESIDUE ADDR INA STA TEMP2 ADDR FOR WORD COUNT SAVE INA STA QUADA SAVE 1ST QUAD ADDRESS STA PNTX USE AS RUNNING POINTER FOR * SET UP DMA WORD COUNT PI.10 LDA $DV17,I GET REQUEST LENGTH SSB,SLB DOING WRITE OF WRITE/READ? LDA $DV19,I YES, USE Z-BUF LENGTH SSA,RSS GIVEN IN WORDS? CMA,INA,RSS YES, NEGATE ARS BYTES, DIV BY ROUND 2 & ROUND UP SZA,RSS ZERO LENGTH? JMP SETEX YES, DO IMMEDIATE COMPLETION STA TEMP2,I SAVE NEG WORD LEN IN IFTX WORD 4 SZB,RSS IS THIS A READ AFTER WRITE QUAD? JMP PI.40 YES, BUILD READ QUAD NOW CLE,INA SET E IF LENGTH = 1 LIA CARD+2 GET CARD STATUS AND RDWR TEST SEND/RCV FLAGS SZA ACTIVE ON OTHER END? JMP PI.30 YES, DON'T SEND INRUP SIGNAL * NO ACTIVE REQUEST ON OTHER END, SO SEND INTERRUPT LDA .RTRI READY TO RCV + INRUP SLB DOING A WRITE? LDA .RTSI YES, READY TO SEND + INRUP OTA CARD+1 SET CARD CONTROL ERA,CLE,ELA NOW CLEAR IT OTA CARD+1 LIA CARD+2 AND RDWR LINE STAT MAY HAVE JUST CHANGED * PI.30 SLB,RSS DOING READ? JMP READ YES CPA .RTS REMOTE ATTEMPTING TO SEND? JMP BZYER YES, IMMEDIATE COMPLETE BUSY LDA DMAW DMA WRITE CONWD SEZ IS IT A ONE WORD WRITE? JMP PI.60 YES, DO ONE QUAD WITH "EDT" IOR MAPV + MAP REG SELECT OR ZERO STA PNTX,I STORE IN QUAD LDA SND SET "READY TO SEND" + CCON JMP PI.50 * READ CPA .RTR REMOTE ATTEMPTING TO RECEIVE? JMP BZYER YES, IMMEDIATE COMPLETE BUSY PI.40 LDA DMAR DMA CONWD IOR MAPV + MAP REG SELECT OR ZERO STA PNTX,I STORE IN QUAD LDA RCV SET "READY TO RECEIVE" +CCON * BUILD QUADS FOR DATA TRANSFER PI.50 ISZ PNTX STA PNTX,I STORE CARD CONTROL WORD ISZ PNTX LDA $DV16,I GET BUFFER ADDRESS SSB,SLB DOING WRITE OF WRITE/READ? LDA $DV18,I YES, USE Z-BUF ADDRESS STA PNTX,I STORE IN IFT EXTENSION ISZ PNTX LDA TEMP2,I WD CNT FOR THIS QUAD SLB WRITE? INA YES, DO ONE LESS (LAST WD IN NXT QUAD) STA PNTX,I SLB,RSS READ? JMP READQ YES ISZ PNTX LDA DMAWA DMA CONWD WITH AUTO BIT * BUILD QUAD FOR LAST WORD OF WRITE DATA WITH "EDT" SET PI.60 IOR MAPV + MAP REG SELECT OR ZERO STA PNTX,I STORE DMA CONWD ISZ PNTX LDA SDEND SET "EDT" + "SND" STA PNTX,I STORE CARD CONWD LDA $DV16,I BUFFER ADDRESS SSB,SLB DOING Z BUFFER? LDA $DV18,I YES CMA,INA ADA TEMP2,I - (BUFFER ADDRESS + LENGTH) CMA BUFFER ADDRESS + LENGTH -1 PI.70 ISZ PNTX STA PNTX,I SET ADDR FOR 1 WORD WRITE ISZ PNTX CCA -1 STA PNTX,I SET WORD LEN = -1 ISZ PNTX SZB,RSS JUST FINISHED WRITE OF W/R? JMP PI.10 YES, NOW DO READ QUAD SSB,SLB,RSS DOING WRITE OF WRITE/READ? JMP LQUAD NO, BUILD FINAL QUAD LDA DMAWA YES, NOW SEND EXTRA HANDSHAKE STA PNTX,I TO COMPLETE THE REMOTE READER ISZ PNTX LDA SND LDB $DV19,I Z-BUFFER LENGTH SSB,SLB DOING ODD BYTES? IOR .EDT YES, SET EDT TO FLAG FOR REMOTE STA PNTX,I SET CARD CONWD FOR WR CLB INDICATE DONE WITH WRITE OF W/R LDA DEFZE USE A ZERO FOR HANDSHAKE JMP PI.70 GO COMPLETE QUAD * READQ LDA PNTX ADDR OF RESIDUE STA TEMP3,I SAVE IN IFTX+3 ISZ PNTX * BUILD FINAL QUAD TO CLEAR CARD CONWD & SEND PRAM LQUAD LDA DMAX =41400 SLB,RSS READ? IOR B200 YES, SET INPUT STA PNTX,I SET DMA CONWD ISZ PNTX LDA $DV17,I ORIGINAL REQUEST LEN CLE,SSA,SLA SKIP UNLESS ODD BYTES CCE LDA CCONV SEZ,SLB SKIP UNLESS WRITING ODD BYTES IOR .EDT SET EDT TO INDICATE ODD BYTES TO RCVR STA PNTX,I CLEAR CARD CONTROL BITS ISZ PNTX LDA $DV18 ADDR OF DVT WORD 18 SLB,RSS DOING READ? INA YES, RCV WORD IN DVT19 STA PNTX,I SAVE QUAD BUF ADDR ISZ PNTX CCA,CLE LEN=1 STA PNTX,I SET QUAD LEN LDA TEMP2,I GET TRANSFER LENGTH SZB LEAVE E=0 IF DOING WRITE/READ ADA .256 SET E IF LEN < 257 * * INITIATE DMA SELF-CONFIGURED OPERATION(S) LDA B3 NOW ENABLE INRUPS WITHOUT A DEVCOM OTA 2 SET DIAGNOSE MODE 3 STC CARD ENABLE CARD INTERRUPTS CLA TO PERMIT ABEND OF DMA OTA 2 TURNOFF DIAGNOSE MODE 3 DODMA LDB DMAWA DMA WRITE CONWD WITH AUTO ADB MAPV INCLUDE MAP SELECT LDA QUADA ADDRESS OF 1ST QUAD OTA DMA SET SELF-CONFIG ADDR *TIME CRITICAL SECTION - SET AUTO ON WRITE ONLY IF OTHER SIDE *IS DOING AN ACTIVE DMA READ LIA CARD+2 GET STATUS RIGHT NOW! AND B17 CPA .EDTR REMOTE DOING AN ACTIVE DMA READ? STB QUADA,I YES, DO WRITE WITH AUTO SET ON 1ST STC DMA,C DO SELF-CONFIGURATION & GO CLF CARD CLEAR CARD FLAG STA TEMP2 SAVE STAT LINES FROM PRECHECK CLB,SEZ,RSS SKIP IF LEN <=256 & NOT W/R JMP PCHEK OTHERWISE, WAIT FOR INTERRUPT * LOOP LIA DMA+3 GET DMA WORD COUNT CPA 1 DMA RUNNING? JMP *+3 NO LDB 0 JMP LOOP LOOP AS LONG AS DMA RUNS LIA CARD+2 GET STATUS SLA "AIE" SET FROM REMOTE? JMP ABEND YES, REQUEST TERMINATED SFC DMA+3 DMA COMPLETE? JMP DMEND YES! IMMEDIATE COMPLETION * DMA NOT RUNNING, GO OUT CONTINUE & WAIT, BUT FIRST * MAKE SURE WE'RE NOT LOCKED UP BECAUSE REMOTE RECEIVER * STARTED JUST BEFORE US BUT WE SET AUTO THINKING * SENDER (US) GOT THERE FIRST PCHEK LIA CARD+2 GET STATUS AND B17 CPA TEMP2 ANY CHANGE FROM PRECHECK? JMP PCONT NO - THIS IS THE NORMAL CASE CPA .EDTR IS REMOTE NOW DOING DMA READ? JMP RERUN YES, RESTART DMA IF NO DATA SENT YET * PCONT ISZ ID.52 GO OUT CONTINUE * SETTO CLA,INA REQUEST TIMEOUT ENABLE JMP ID.52,I SKP * * REQUEST TERMINATED FROM OTHER SIDE, DO RETRY ABEND LDB RETRY DO RETRY * CARDI LDA .AIE ACKNOWLEDGE WITH AN INTERRUPT OTA CARD+1 IF REMOTE HAS INTERRUPT ENABLED JMP RETRN SPC 2 * RERUN CLC DMA+1 SUSPEND DMA LIA DMA+2 GET DMA ADDRESS ELA,CLE,ERA CLEAR SIGN LDB QUADA ADDR OF 1ST QUAD ADB B2 POINT TO BUF ADDR CPA 1,I HAS DMA ADDRESS CHANGED? JMP RECON NO, RESTART REQUEST STC DMA+1 YES, JUST LET DMA CONTINUE JMP PCONT AND GET OUT * RECON CLC DMA+3,C ABORT DMA JMP DODMA & GO RESTART IT SKP * * THIS SECTION HANDLES CONTROL REQUESTS * CN.00 EQU * AND B3740 ISOLATE SUBFUNCTION CPA REQ1 SEND EOF? JMP CN.01 YES CPA REQ11 TOF? JMP CN.01 YES, SAME AS EOF CPA REQ20 SCHEDULE PROGRAM ON ASYNC INTERRUPT? JMP CN.20 YES CPA REQ21 DISABLE (PRIMARY) SCHED? JMP CN.23 YES CPA REQ22 SET TIMEOUT? JMP CN.22 YES CPA REQ23 DISABLE ALL SCHED? JMP CN.23 YES SZA CLEAR REQUEST? JMP STTUS NO OTA CARD+2 YES, CLEAR REG 32 CLC CARD,C JMP SETEX * CN.01 LDA $DV18 ADDR OF -1 STA $DV16,I SET AS BUF ADDR CCA STA $DV17,I LENGTH = 1 STA $DV18,I PRAM = -1 STB MAPV NO MAPPING JMP PI.05 NOW TREAT AS 1 WORD WRITE * CN.20 LDA $DV16 ADDR OF NAME IN DVT PRAMS LDB $IFTX SAVE NAME IN IFT EXT 1ST 3 WORDS JSB .MVW MOVE 4 DEF B4 NOP STTUS CLA JMP SETEX GO OUT PHYSICAL DONE * CN.22 LDA $DV16,I GET PARAMETER SZA,RSS IF ZERO, JMP *+3 SET FOR NO TIMEOUT CMA,SSA,RSS NEW TIMEOUT = -(PRAM+1) JMP REJ1 ILLEGAL REQUEST IF GIVEN AS NEGATIVE STA $DV13,I SET PHYSICAL TIMEOUT VALUE IN DVT JMP STTUS * CN.23 STB $IFTX,I DISABLE ASYNC PROGRAM SCHEDULING JMP STTUS SPC 2 REJ1 LDA RQERR RETURN REQUEST ERROR & FLUSH IT JMP SETEX SPC 3 SKP SPC 3 * * ENTER HERE ON INTERRUPTS FROM EITHER DMA OR CARD * PR.00 LDA $IF6,I GET IFT STATUS SSA,RSS BUSY? JMP ASYNC NO LIA CARD+2 GET STATUS AT TIME OF INRUP SLA PREMATURE TERMINATION FROM REMOTE? JMP ABEND YES SFS DMA+3 DMA COMPLETION? JMP ILLIN NO, WHAT THEN? * AN ACTIVE DMA TRANSFER HAS COMPLETED DMEND SFC DMA+2 PARITY? JMP $DMPR YES CLB NO ERROR * * ENTER HERE ALSO ON TIMEOUT, POWER-FAIL, ABORT, OR REMOTE * ABEND TO RETURN THE ACTUAL NUMBER OF WORDS(BYTES) TRANSFERRED * UP TO TIME WE CANNED IT IF A READ. ALWAYS RETURN ORIGNAL * REQUEST LENGTH IF A WRITE RETRN CLC DMA+1 SUSPEND DMA THEN CLC DMA+3,C CLEAR THE CARD'S DMA STB TEMP2 SAVE ERROR CODE CLA,INA LDB $IF5,I GET DVT ADDR JSB $DIOC ENSURE DVT ADDRS ARE SET LDB $DV15,I GET CONWD RBR,SLB DOING WRITE OR CONTROL? JMP SETEN YES, RTN ORIGINAL LENGTH LDB $IFTX IFT EXT ADDRESS ADB B4 LDA 1,I GET ADDR LDA 0,I GET RESIDUE CMA,INA INB POINT TO SAVE OF ORIGINAL LEN (NEQ WORDS) ADA 1,I A=NEG. XMISSION COUNT LIB CARD+2 GET LATCHED CARD STATUS RBR,ERB E=EDT (ODD BYTE INDICATOR) CPA N1 LENGTH=1? JMP EOFCK YES, POSSIBLE EOF DLOG2 LDB $DV17,I GET USER SPECIFIED LENGTH SSB GIVEN IN BYTES? ELA YES, WORD COUNT TO BYTE COUNT CMA,INA RETURN POSITIVE WORD/BYTE COUNT DOLOG STA $DV17,I RETURN XLOG SETEN LDA .PLV SAVE ONLY PLV OTA CARD+1 CLEAR RD/WR/SRM/IRQEN CLC CARD,C CLEAR CARD & FLAG LDA TEMP2 ERROR CODE SETEX STA $DV16,I POST EXIT CODE LIA CARD+2 READ CARD STATUS FOR DVT18 STA $DV18,I RETURN STAT IN PRAM 3 SKP * * EXIT WITH CARD INTERRUPTS ENABLED IF WE ARE AWAITING * AN ACKNOWLEDGEMENT TO ABNORMAL TERMINATION OR IF ASYNCHRONOUS * EXIT LDA HOLDF SZA ARE WE ALARMING REMOTE? JMP ENABL YES, ENABLE ACK INRUP, SET HOLD,TO CPA $IFTX,I ASYNC ENABLE? JMP ID.52,I NO * LIA CARD+2 SEE IF REMOTE HAS ACTIVE REQUEST AND RDWR SZA ANY REQUEST? JMP PSKD2 YES, SCHEDULE PROGRAM * ENABL LDB .ENAB SET IRQEN + PLV OTB CARD+1 IN CARD CONWD LDB B3 NOW ENABLE INRUP WITHOUT A DEVCOM OTB 2 SET DIAGNOSE MODE 3 STC CARD ENABLE INTERRUPT CLB OTB 2 TURNOFF DIAGNOSE MODE 3 JMP ID.52,I SPC 4 * POSSIBLE EOF HAS BEEN RECEIVED EOFCK CPA $DV19,I WAS EXTRA PARAM = -1? SEZ,RSS YES, WAS IT 1 BYTE? JMP DLOG2 NO * EOF HAS BEEN DETECTED LDA $DV6,I IOR B200 SET EOF FLAG IN STATUS STA $DV6,I RETURNED IN CALLERS A REG CLA RETURN XLOG OF ZERO JMP DOLOG SPC 3 * OTHER SIDE ALREADY IS CONTROLLING LINE, DONT AFFECT CURRENT STATE BZYER LDA BUSYF BUSY ERR, DON'T DOWN, FLUSH STA $DV16,I RETURN ERROR CODE LIA CARD+2 GET CARD STATUS STA $DV18,I RETURN IN PRAM3 LDA .PLV OTA CARD+1 CLEAR POSSIBLE RD/WR FLAG LDA $IF7,I GET SYSTEM FLAGS AND BIT11 ISOLATE PREVIOUS "T" SZA TIMEOUT ENABLED?(WHILE NOT BUSY) JMP PSKED YES, SEE IF PGM SCHED TO DO JMP ID.52,I GO OUT PHY DONE SKP * ENTER HERE ON CARD INTERRUPTS WHEN THE INTERFACE IS * NOT BUSY. THE NON-HARDWARE-FAILURE CAUSES OF A CARD * INTERRUPT ARE: * 1. THE CARD WAS ENABLED BECAUSE A PROGRAM IS TO BE * SCHEDULED ON ASYNC INTERRUPT AND THE REMOTE COMPUTER * SET THE ST0 LINE TO ALERT US TO A NEW REQUEST. * 2. THIS COMPUTER HAD ABNORMALLY TERMINATED A PREVIOUS * REQUEST DUE TO TIMEOUT, POWER-FAIL, OR ABORT AND * THIS INTERRUPT IS AN ACKNOWLEDGEMENT FROM REMOTE. * 3. REMOTE IS ALERTING US TO A REQUEST WHICH IT IS * ABNORMALLY TERMINATING BUT FOR WHICH WE ARE NOT * CURRENTLY BUSY. * NOTE THAT DUE TO INTERRUPT SERVICING DELAYS, THE "READY * TO SEND" / "READY TO RECEIVE" LINES MAY HAVE CHANGED * SINCE THE INTERRUPT WAS ORIGINALLY FORCED. FOR THIS * REASON, THIS CODE CHECKS THE CURRENT STATE OF THE RTS/RTR * LINES TO MAKE THE DECISIONS FOR PROGRAM SCHEDULING OR * CARD REENABLING/DISABLING. * ASYNC SFS CARD CARD INTERRUPT? JMP ILLIN NO, WHAT THEN? * * HERE ON ASYNCHRONOUS CARD INTERRUPT OR TIMEOUT WHEN NOT BUSY SCRET ISZ ID.52 BE SURE TO GO OUT CONTINUE LIA CARD+2 GET CARD STATUS AND RDWR CLC CARD,C DISABLE CARD, CLEAR FLAG SZA,RSS DOES OTHER SIDE HAVE A REQUEST? JMP EXIT NO, IGNORE INTERRUPT OR TIMEOUT SKP * * THE BELOW CODE IS ENTERED WHEN REMOTE HAS AN ACTIVE REQUEST PSKED LDA $IFTX,I SZA,RSS ANY PROG TO SCHEDULE? JMP ID.52,I NO, EXIT (CARD IS LEFT DISABLED) * * NOW ATTEMPT TO SCHEDULE THE INTERRUPT HANDLING PROGRAM * THE PROGRAM IS PASSED THE FOLLOWING PARAMETERS: * PARAM 1 = LU * PARAM 2 = PARAMETER PASSED IN EXEC(3,2000B+LU) REQUEST * PARAM 5 = CARD STATUS FROM REG 32 * PSKD2 LDB $IF5,I GET DVT ADDR JSB $DVLU COMPUTE LU STA WORK PASS LU IN FIRST PARAM STA TEMP3 & ALSO CONLU IN ID SEG LDB $IFTX ADB B3 LDA 1,I GET OPTIONAL PASSED PRAM STA WORK+1 PASS AS 2ND TO PGM LIA CARD+2 GET CARD STATUS STA WORK+4 PASS AS PARAM 5 * JSB $XQSB SCHEDULE PROGRAM DEF $IFTX,I DEF WORK TEMP3 NOP SZA,RSS SCHEDULE SUCCESSFUL? JMP ID.52,I YES, EXIT, NO T.O., CARD DISABLED SSA DOES PROGRAM EXIST? JMP NOPGM NO, CLEAR IFTX & GIVE ILLEGAL INRUP LDA $IFTX,I GET 1ST TWO CHARS OF NAME CPA ASCFM ="FM"? JMP ATTN YES, USE SYSTEM PROMPT AS ALTERNATE * WAIT UNTIL 100 MSECS UNTIL PROGRAM IS SCHEDULABLE OR * OTHER SIDE DUMPS REQUEST OR WE GET A NEW REQUEST LDA N10 STA $IF2,I 100 MSEC CLOCK JMP SETTO EXIT WITH TO ENABLED, CARD DISABLED * ATTN LDA TEMP3 GET LU STA $ATTN SET SYSTEM ATTENTION CLA JMP ID.52,I GO OUT CONTINUE, NO INTERRUPT * NOPGM CLA STA $IFTX,I CLEAR PGM TO SCHED INDICATOR JMP ILLIN+1 SKP * * ENTER HERE ON PHYSICAL TIMEOUT. TIMEOUT IS ENABLED IN 3 CASES: * 1. AN ACTIVE DMA REQUEST IS IN PROGRESS * 2. WE WERE UNABLE TO SUCCESSFULLY SCHEDULE A PROGRAM ON * AN ASYNC INTERRUPT AND ARE RETRYING EVERY 100 MSECS * 3. WE ABNORMALLY TERMINATED A REQUEST AND ARE AWAITING * ACKNOWLEDGEMENT FROM REMOTE WITH "HOLD" SET TO.00 LDA $IF6,I GET IFT STATUS SSA,RSS BUSY? JMP SCRET NO, SEE IF PGM TO SCHED LDB TMERR ERROR CODE 3, FLUSH, DON'T DOWN JMP ABREQ YES, TIMEOUT ERROR SPC 3 * * ENTER HERE ON A POWER-FAIL * PF.00 LDB RETRY SET TO RESTART ANY CURRENTLY * * HERE ALSO ON ABORT (B=0) ABREQ LDA .PLV OTA CARD+1 TURN-OFF "SRM" SO WE GET LIA CARD+2 CARD STATUS RIGHT NOW AND RDWR SZA,RSS OTHER SIDE HAVE A REQUEST? JMP RETRN NO, GO OUT DONE * * A POWER-FAIL, ABORT, OR TIMEOUT HAS OCCURRED WHILE REMOTE * COMPUTER HAS AN ACTIVE REQUEST. WE NOW CAUSE AN INTERRUPT * WHICH WILL PREMATURELY TERMINATE HIS DMA, PROVIDED THAT IT * IT IS CURRENTLY RUNNING. WE THEN COMPLETE THE CURRENT * REQUEST WITH THE APPROPRIATE ERROR CODE BUT EXIT WITH * HOLD AND TIMEOUT SET THEREBY PREVENTING INITIATION OF * FURTHER REQUESTS UNTIL WE RECEIVE AN INTERRUPT OR TIMEOUT. * WHEN THE REMOTE RECOGNIZES THE CARD INTERRUPT IT WILL IN TURN * INTERRUPT OUR CARD, WHICH RESULTS IN CLEARING THE HOLD * CONDITION AND ALLOWING ANY PENDING REQUESTS TO INITIATE. * LDA B3 HOLD & TIMEOUT STA HOLDF NO NEW REQUEST UNTIL WE RCV CMA,INA 21-30 MSEC TIMEOUT STA $IF2,I JMP CARDI AN INRUP ACK FROM REMOTE (OR T.O.) SPC 3 * ILLEGAL INTERRUPT ILLIN ISZ ID.52 GO OUT CONTINUE LDA B4 SET "I" BIT IN A REG JMP ID.52,I EXIT SKP * * DATA AREA * HOLDF NOP MAPV NOP WORK DEC 0,0,0,0,0 TEMP2 EQU WORK PNTX EQU WORK+1 QUADA EQU WORK+4 .256 DEC 256 B2 OCT 2 B3 OCT 3 B4 OCT 4 B7 OCT 7 B17 OCT 17 B200 OCT 200 REQ1 OCT 40 REQ11 OCT 440 REQ20 OCT 1000 SUBFUNCTION=20 REQ21 OCT 1040 SUBFUNCTION=21 REQ22 OCT 1100 SUBFUNCTION=22 REQ23 OCT 1140 SUBFUNCTION=23 B3740 OCT 3740 MASK FOR SUBFUNCTION FIELD BIT11 OCT 4000 MSKRQ OCT 104001 READZ OCT 104000 DMAR OCT 151200 DMA FOR READ: AUTO,INPUT,RESID DMAW OCT 141000 DMA FOR WRITE: CONT,NO AUTO DMAWA OCT 141400 DMA FOR WRITE: CONT, AUTO DMAX OCT 41400 DMA FOR FINAL QUAD: AUTO RETRY OCT 100077 RQERR OCT 140001 TMERR OCT 140003 BUSYF OCT 140024 DRIVER DEFINED ERROR: LINE BUSY HIGH8 OCT 177400 ASCFM ASC 1,FM N1 DEC -1 N10 DEC -10 DEFZE DEF ZERO * BELOW ARE THE VARIOUS CARD CONTROL PROGRAMMING VALUES RDWR ABS RTS+RTR SEND + RCV .AIE ABS AIE+PLV ASYNC ENABLED .EDT ABS EDT EARLY DMA TERM/ ODD BYTE .RTR ABS RTR READY TO RECEIVE .RTS ABS RTS READY TO SEND CCONV ABS CCON CARD CONTROL WITH 4 CONTROL LINES SND ABS RTS+CCON READY TO SEND + CCON RCV ABS RTR+CCON+LBY+EDT READY TO RCV SDEND ABS RTS+EDT+CCON READY TO SEND +EDT +CCON .EDTR ABS RTR+EDT .RTRI ABS RTR+AIE+PLV .RTSI ABS RTS+AIE+PLV .PLV ABS PLV .ENAB ABS PLV+IRQ ENABLE ST0 TO INTERRUPT * * BELOW IS JUMP TABLE BASED ON DRIVER ENTRY CODE JMPTB DEF *+1,I JUMP TABLE DEF ABREQ ABORT DEF PI.00 PHYSICAL INITIATE DEF PR.00 PHYSICAL RESUME DEF TO.00 PHYSICAL TIMEOUT DEF PF.00 POWER-FAIL * ZERO DEC 0 * END