File DP8ISR.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/DECNET/8 V1A FULL DUPLEX DP8E INTERRUPT SERVICE
	IFDEF DDCMP <XLIST>
/
/
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1976,1977 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
	IFDEF DDCMP <XLIST>

/J. ROTH 26-MAY-76 /JR 29-MAY-76 ADDED STRIPSYNC/IDLE CODE /JR 11-OCT-76 ADDED MCR EXIT RECOVERY CODE / / DECNET/8 RELEASE VERSION 1 / DECNET/8 PATCH LEVEL A / APRIL 8,1977 / VERSION=1 PATCH="A / / / IF ONLY ONE DP8E COMMUNICATION LINE IS PRESENT, / THEN THE FOLLOWING PARAMETERS CAN BE EDITED / DIRECTLY INTO THIS SOURCE, IN WHICH CASE, / NO LINE CONTROL FILE IS NECESSARY. / ALTERNATIVELY, A LINE CONTROL FILE CAN BE CREATED WHICH / HAS THESE EQUATES. / / LINE= /LINE NUMBER / BUFFLD= /FIELD OF BUFFER / BUFLOC= /LOCATION OF ISR BUFFER / BUFLEN= /LENGTH OF BUFFER IN WORDS / ISRFLD= /FIELD OF THIS ISR (TIMES 10) / ISRLOC= /STARING ADDRESS OF THIS ISR / ISRDEV= /DP8E IOT DEVICE CODE IFNDEF LINE <LINE=0> IFNDEF BUFFLD <BUFFLD=10> IFNDEF BUFLOC <BUFLOC=4000> IFNDEF BUFLEN <BUFLEN=176> IFNDEF ISRFLD <ISRFLD=10> IFNDEF ISRLOC <ISRLOC=200> IFNDEF ISRDEV <ISRDEV=40> IFNDEF ISRBRK <ISRBRK=7700> ISRIOT= ISRDEV^10+6000 ISRTYP= 4 /DEFINE TYPE FOR DP8E SYNCHRONOUS LINE CUR= ISRFLD LCB= LINE^LCBSIZ+LCBTAB /SYMBOLIC CHARACTER DEFINITIONS DEL= 377 SOH= 201 ENQ= 005 DLE= 220 SYN= 226 /FIL= 000 ACK= 001 NAK= 002 REP= 003 /RES= 004 /RESAK= 005 STRT= 006 STACK= 007 QSYNC= 100 SELECT= 200 /TIMER TICKS AND THRESHOLD COUNTS TSYNCS= 4 /NUMBER OF LEADING SYNCS TO SEND MAXREP= 12 /MAX OF 10 CONSEC REPS BEFORE FAILURE MAXSTR= 12 /MAX CONSEC STRTS BEFORE FAILURE ACKTKS= 12 /TIMER TICKS BFORE ANOTHER ACK REQUESTED QTMTKS= 144 /TIMER TICKS BETWEEN IDLING REPS CHRTKS= 2 /TICKS BETWEEN CHARACTERS /ERROR DEFINES BCCHDR= 01 /REASON FOR NAK: CRC ERROR ON HEADER BCCDTA= 02 /REASON FOR NAK: CRC ERROR ON DATA REPRSP= 03 /REASON FOR NAK: REP'D MESSAGE NOT RECEIVED NOSPAC= 10 /BUFFER UNAVL AT INTERRUPT LEVEL NAKFMT= 22 /HEADER FORMAT ERROR DETECTED (A MULTITUED OF THINGS) BFOERR= 1000 /INT SVC: BUFFER OVERFLOWED QELERR= 0100 /INT SVC: QUEUE ELEMENT UNAVALIABLE TMOERR= 0400 /INT SVC: INTER CHARACTER TIMEOUT BFMERR= 0200 /INT SVC: BAD FORMAT ERROR (MULTITUDES) /IOT DEFINES SSCD= ISRIOT /SKIP IF CHARACTER DETECTED+CLEAR FLAG SCSI= ISRIOT+1 /CLEAR AND INITIALIZE DP8E SSRO= ISRIOT+2 /SKIP IF RECEIVE WCO+CLEAR FLAG SSTO= ISRIOT+3 /SKIP IF TRANSMIT WCO+CLEAR FLAG SGRR= ISRIOT+4 /SET RECEIVER GO SGTT= ISRIOT+5 /SET TRANSMITTER GO SCSD= ISRIOT+6 /CLEAR SYNC DETECT SRTA= ISRIOT+7 /READ ACCESS ADDRESS SSRG= ISRIOT+10 /SKIP IF RING DETECT+CLEAR FLAG SSCA= ISRIOT+11 /SKIP IF CO/AGC FLIPPED AND CLEAR FLAG SLCC= ISRIOT+12 /LOAD CONTROL WORD SLFL= ISRIOT+13 /LOAD EMA REGISTER SRS2= ISRIOT+14 /READ STATUS REGISTER 2 SRS1= ISRIOT+15 /READ STATUS REGISTER 1 SSBE= ISRIOT+16 /SKIP IF BUS ERROR DETECTED SRCD= ISRIOT+17 /READ DETECTED CHARACTER INDEX /SLCC CONTROL BITS TRMRDY= 4000 /ASSERTS DATA TERMINAL READY IDLBIT= 2000 /ENABLE IDLE SYNC MODE (AFTER TRANS WCO) INTENA= 1000 /ENABLES DP8E PROGRAM INTERRUPTS SNDREQ= 400 /ASSERTS REQUEST TO SEND /DATA BREAK ACCESS LOCATIONS DP8CH1= ISRBRK /4 TEST CHARACTERS DP8CH2= ISRBRK+1 DP8CH3= ISRBRK+2 DP8CH4= ISRBRK+3 DP8RWC= ISRBRK+4 /RECEIVER WORD COUNT DP8RCA= ISRBRK+5 /RECEIVER CURRENT ADDRESS DP8TWC= ISRBRK+7 /TRANSMITTER WORD COUNT DP8TCA= ISRBRK+10 /TRANSMITTER CURRENT ADDRESS FIELD CUR%10 *ISRLOC
/RECEIVER INITIATOR /ENTRY DF = DDCFLD /ENTRY AC = FUNCTION STRTI, 0 SNA JMP RESFN /AC = 0 FOR RESYNC FUNCTION SMA CLA JMP INHFN /AC = +1 FOR INHIBIT FUNCTION /AC = -1 FOR INITIALIZE FUNCTION CLRBUF, CAL SKPINS NXTDEV /FIRST INSERT DP8E IN SKIP CHAIN SCSI /CLEAR DP8E TAD (CUR^110 SLFL /LOAD RCVR AND XMTR FIELDS TAD (-CUR^110+TRMRDY+IDLBIT+INTENA+SNDREQ SLCC /LOAD CONTROL REGISTER CLA /ABOVE 2 (ID)IOTS DON'T CLEAR AC SCSD /NOW CLEAR SYNC DETECT WINDOW CDF INILP, TAD I INIPTR /FIRST STORE RESIDENT WORD IN SAVE AREA INIDCA, DCA SAVTAB /DCA SAVTAB+N INITAD, TAD INITAB /TAD INITAB+N DCA I INIPTR /SETUP BREAK LOCATIONS NOW ISZ INITAD ISZ INIPTR ISZ INIDCA ISZ INICNT JMP INILP /ITERATE FOR ALL 9. WORDS IFDEF EXIT < CAL /NOW SEND 'EXIT' TASK ADDRESS OF OUR CLEAN UP ROUTINE SEND EXIT FIXUP> SGRR /ASSERT RCVR GO SGTT /AND ASSERT XMTR GO STRTIX, CIF CDF DDCFLD /RETURN TO DDCMP JMP I STRTI INIPTR, ISRBRK /STORE INTO DATA BREAK LOCATIONS INICNT, -11 /9. WORDS TO INITIALIZE INITAB, ENQ /TEST CHARACTER 1 SOH /TEST CHARACTER 2 DLE /TEST CHARACTER 3 4000+SYN /STRIPSYNC FOR FOURTH CHARACTER INITIALLY 7777 /IDLE WORD COUNT IDLBUF-1 /RCVR IDLE BUFFER LOCATION 0 /PADDING 7777 /IDLE WORD COUNT SYNBUF-1 /SYNCH PREAMBLE SAVTAB, ZBLOCK 11 /BACKUP STORE FOR RESIDENT CLOBBERED BY BREAK LOCS
/RESYNCH FUNCTION /CALLED WHEN BUFFERS HAVE BEEN RESTORED /PRIOR TO QUEUEING UP A NAK RESFN, TAD I (LCB+20 /PICK UP BUFFER RESUME POINT CDF CUR DCA I (BUFPTR /RESET OUR INTERRUPT LEVEL PTR DCA I (INHFLG /ALLOW DATA AGAIN JMP STRTIX /EXIT /INHIBIT FUNCTION /CALLED PRIOR TO CLEARING BUFFERS /WHEN AN ERROR HAS BEEN DETECTED /NECESSARY TO PREVENT ANY RACE CONDITIONS /WHILE RESTORING BUFFERS INHFN, CDF CUR IOF /INHIBIT INTERRUPT LEVEL CODE ISZ I (INHFLG /SET THE INHIBIT BIT TAD I (BFLAG /GATE THE BUFFER BUSY BIT TO SECOND FLAG DCA BFLAG2 DCA I (BFLAG /CLEAR BUFFER BUSY BIT TAD (RESET DCA I (RCVWT /RESET RECEIVER COROUTINE CDF STA /SETUP WC TO OVERFLOW ASAP DCA I (DP8RWC ION /SET TO REENABLE INTS CDF CUR TAD I (BUFPTR CDF DDCFLD DCA I (LCB+20 /COPY PRESENT RING BUFFER POINTER IN JMP STRTIX /AND RETURN BFLAG2, 0 FIXUP, ZBLOCK 3 /RTS/8 OVERHEAD FIXSUB, . /ENTRY POINT FOR CLEANUP ROUTINE /NON ZERO MEANS DECLARE EXIT ADDR... /LOC REUSED FOR SUBR RETURN RDF /GET DF OF EXIT TASK TAD (CIF CDF /BUILD CIF CDF EXFLD DCA FIXCID /STORE INLINE IOF /DISABLE INTERRUPTS FOR SAFETYS SAKE SCSI /CLEAR DP8E ISZ ZERO /WAIT FOR A FEW MSEC JMP .-1 CDF /POINT AT RESIDENT SPACE FIXTAD, TAD SAVTAB DCA I FIXPTR /RESTORE A WORD ISZ FIXTAD ISZ FIXPTR ISZ FIXCNT JMP FIXTAD /ITERATE ION /NOW RE ENABLE INTERRUPTS FIXCID, HLT /RESET FIELDS JMP I FIXSUB /RETURN FIXPTR, ISRBRK FIXCNT, -11 /RESTORE 9. WORDS ZERO, 0 /DELAY COUNTER PAGE
/TRANSMITTER INITIATOR /BECAUSE THE DP8E CANNOT CHAIN TRANSMITTED DATA ON THE FLY /WE MUST MOVE DATA TO A DEDICATED BUFFER FIRST STRTO, 0 TAD TADOUT DCA OGET /SETUP INDEXED MOVE TAD (OUTBUF DCA OPTR /INIT BUFFER POINTER TAD (-10 DCA OUTCNT /COPY THE HEADER FIRST OGET, 0 /TAD I OUTTBL+N CDF CUR DCA I OPTR CDF DDCFLD ISZ OPTR /BUMP THE TARGET POINTER ISZ OGET /BUMP THE TAD ISZ OUTCNT JMP OGET /ITERATE OVER HEADER TADOUT, TAD I OUTTBL /LOOK AT FIRST CHARACTER TAD (-ENQ /IS IT NUMBERED OR NOT? SNA CLA JMP OUTGO /START IT UP IF NO TAD I (OUTCDF DCA OUTCD /COPY DESCRIPTOR NOW TAD I (OUTCDF+1 DCA OUTPTR TAD I (OUTCDF+2 DCA OUTCNT OUTCD, 0 /GETS CDF TO USER DATA ISZ OUTPTR /PRE INCREMENT THE POINTER TAD I OUTPTR SMA JMP OUTGTC /JMP IF GOT A CHARACTER DCA OUTCD /ELSE ASSUME A LINK, STORE ITS CDF ISZ OUTPTR TAD I OUTPTR DCA OUTPTR /NEXT ITS ADDRESS-1 JMP OUTCD /TRY AGAIN OUTGTC, CDF CUR DCA I OPTR /STORE IN MOBY BUFFER ISZ OPTR ISZ OUTCNT /TEST COUNT JMP OUTCD /LOOP IF MORE CDF DDCFLD TAD I (ODCRCL CDF CUR DCA I OPTR /STORE FIRST DATA CRC CHAR ISZ OPTR CDF DDCFLD /TOGGLE BACK TO DDCFLD TAD I (ODCRCL+1 CDF CUR /TOGGLE BACK TO OUR FIELD DCA I OPTR /STORE SECOND DATA CRC CHAR ISZ OPTR /LEAVE POINTER JUST PAST LAST CHAR
/HERE TO FLAG DATA READY TO GO OUTGO, CDF CUR ISZ I (TREQ /SET TRANSMIT READY SEMAPHORE TAD (SYN /STORE A SYN TO IDLE LINE WITH DCA I OPTR TAD OPTR /NOW CALCULATE SIZE FOR TRANSMIT ROUTINE CMA TAD (SYNBUF CDF DCA I (DP8TWC /STORE NEG SIZE IN WC SGTT /FINALLY ASSERT T GO (CA SET AT WCO TIME) CIF CDF DDCFLD JMP I STRTO /DONE, DATA WILL BE CLOCKED OUT WHEN READY OPTR, 0 OUTPTR, 0 OUTCNT, 0 OUTTBL, OHDR /ENQ/SOH OHDR+1 /TYPE OHDR+2 /SUBTYPE OHDR+3 /RES OHDR+4 /NUM OHDR+5 /A0 OCRCL /CRCL OCRCL+1 /CRCH PAGE
/HANDLE DETECTION OF SPECIAL CHARACTERS GOTCHR, CDF CUR SRCD /READ CHARACTER INDEX TAD (CHRTBL DCA CHRPTR /CREATE A POINTER TO ITS COMPLEMENT TAD I (RCVWT /SEE IF IDLE MODE TAD (-IDLRTN SNA TAD INHFLG /AND NOT INHIBITED FROM RECEIVES SZA CLA JMP I (DISMIS /IGNORE INTERRUPT IF SO SSRO /OK, CLEAR WCO NOP CDF TAD I (DP8RCA DCA S1 /SEE IF CURRENT CHAR IS A MATCH CDF CUR TAD I S1 /(THIS WILL TEST INTERRUPT LATENCY...) TAD I CHRPTR SZA CLA HLT /HARDWARE BUG CDF DDCFLD TAD DDCPT /NOW GET A BUFFER (IF NOT HAVE ONE ALREADY) SZA CLA JMP GOTCH2 /ALREADY HAVE ONE TAD I (FREHD SNA JMP I (IDLE /IGNORE IF NO SMALL BUFFERS AT ALL JMS SETBF /ELSE SET BUFFER POINTERS UP GOTCH2, TAD (DLE /NOW DISABLE STRIPSYNC WITH PADDING CHAR CDF DCA I (DP8CH4 CDF DDCFLD TAD DDCEP /MAKE SURE DDCPTR IS INITIALIZED IAC DCA DDCPTR /IN CASE OF ERROR RESET TAD CHRPTR TAD (CHRJMP-CHRTBL DCA .+1 0 /DISPATCH TO HANDLER CHRJMP= JMP I . GOTENQ /RECEIVED AN ENQ (DDCMP UNNUMBERED MESSAGE) GOTSOH /RECEIVED AN SOH (NUMBERED MESSAGE) GOTDLE /RECEIVED A DLE (MAINTANANCE MESSAGE) GOTDLE /PADDING CHRTBL, -ENQ /INTERRUPT OVERRUN PROTECTION TABLE -SOH -DLE -DLE CHRPTR, 0 /GETS POINTER TO VERIFY SPECIAL CHAR
/ROUTINE TO GET 'HEADER' CHARACTERS /ENTRY AC = -NUMBER OF CHARACTERS TO GET /SETS UP WC,CA,EMA TO STORE IN NODE POOL PACKET /ENTRY DDCPTR = ADDR TO STORE IN GETHDR, 0 CDF DCA I (DP8RWC /FIRST STORE THE COUNT STA /PRE INCREMENT BIAS TAD DDCPTR DCA I (DP8RCA /STORE ADDRESS TAD (DDCFLD^10+CUR^10 SLFL /NOW SET THE EMA REGISTERS CLA /ABOVE IOT DOESN'T CLEAR AC SGRR /NOW ASSERT READ GO TAD I (DP8RWC CIA TAD DDCPTR /POINT PAST THESE CHARACTERS DCA DDCPTR CDF DDCFLD JMS I (RCVWT /NOW WAIT FOR COMPLETION JMP I GETHDR /RETURN /ROUTINE TO LINK CURRENT PACKET ON DDCMP INPUT QUEUE /ENTRY AC = ERROR CODE (IF ANY) /SETS FLAG TO WAKE DDCMP LINKBF, 0 TAD (LINE /ADD IN OUR LINK NUMBER DCA I DDCEP /STORE IN PACKET TAD I (DDCTL DCA S1 /GET TAIL POINTER TO ONPAGE TEMP TAD DDCPT DCA I S1 /LINK PACKET ON TAIL TAD DDCPT DCA I (DDCTL DCA I DDCPT /CLEAR THE THREAD WORD NOW TAD I (FREHD SNA HLT /TEMPORARY! JMS SETBF /GO SET BUFFER UP CDF CUR ISZ I (EFPTR /NOW INDICATE DDCMP TO BE POSTED CDF DDCFLD JMP I LINKBF /DONE
/ROUTINE TO SET ISR PACKET UP /ENTRY AC = PACKET ADDRESS SETBF, 0 DCA DDCPT /SET POINTER TO PACKET TAD DDCPT IAC DCA DDCEP /SET POINTER TO ERROR/LINE WORD TAD DDCEP IAC DCA DDCPTR /NOW SET TEMP POINTER UP TAD I DDCPT /PICK UP LINK TO NEXT NODE DCA I (FREHD /STORE IT IN FREELIST HEAD JMP I SETBF /DONE /ROUTINE TO STORE IN CURRENT PACKET DDCPUT, 0 DCA I DDCPTR /STORE THE WORD ISZ DDCPTR /THEN INCREMENT POINTER JMP I DDCPUT DDCPT, 0 DDCEP, 0 DDCPTR, 0 S1, 0 INHFLG, 0 PAGE
/HANDLE RECEIVED ENQ, SOH, DLE IN IDLE MODE GOTENQ, TAD (ENQ JMS I (DDCPUT /STORE THE ENQ IN THE PACKET TAD (-7 JMS I (GETHDR /NOW CALL THE PACKET READ ROUTINE JMS I (LINKBF /LINK PACKET ON THE Q JMP I (IDLE /POST DDCMP TO LET HIM KNOW GOTDLE, TAD (DLE-SOH GOTSOH, TAD (SOH JMS I (DDCPUT /STORE THE HEADER CHARACTER AC7775 /NOW GET THE COUNT CHARACTERS JMS I (GETHDR AC0002 CDF CUR /FUDGE DF TAD I (DDCEP CDF DDCFLD DCA T2 /STORE POINTER TO COUNT BYTES TAD I T2 DCA T1 /PICK UP LOW BYTE ISZ T2 TAD I T2 AND (7774-QSYNC-SELECT SZA CLA JMP MS2LNG /BOGUS HEADER IF EXCESSIVE COUNT TAD I T2 AND (3 CLL RTR /ELSE GET HIGH BITS RTR RAR TAD T1 /ADD TO LOW COUNT SNA JMP MS2LNG /BAD IF NULL DCA MSGSIZ /ELSE STORE POSITIVE SIZE
/NOW GET THE NEXT 4 CHARACTERS /THIS SPREADS INTERRUPT LEVEL COMPUTATION OVER 2 INTERVALS DATAGO, TAD (-4 JMS I (GETHDR /PICK UP NUM, A0, CRCL, AND CRCH OF HEADER JMS I (LINKBF /LINK ON QUEUE AND WAKE DDCMP TAD (CDF BUFFLD JMS I (DDCPUT /NOW STORE THE BUFFER DESCRIPTOR CDF TAD BUFPTR JMS I (DDCPUT /ADDRESS-1 TAD MSGSIZ CIA JMS I (DDCPUT /-SIZE ISZ BFLAG /INDICATE NOW IN RING BUFFER TAD MSGSIZ DATALP, CLL CIA TAD (SEGSIZ SZL CLA /TAKE MIN(MSGSIZ,SEGSIZ) TAD MSGSIZ DCA CURSIZ /HOLD AS CURRENT READ SIZE TAD BUFPTR TAD CURSIZ /OFFSET TO LAST USED LOC DCA BUFP1 CDF BUFFLD TAD I BUFP1 /SEE IF EMPTY CDF DDCFLD CMA SZA CLA /SKP IF WAS -1 JMP BUFOVR /ELSE MUST NAK 'NO SPACE' CDF TAD BUFPTR DCA I (DP8RCA /OK, SETUP WC,CA TAD CURSIZ CIA DCA I (DP8RWC TAD (BUFFLD^10+CUR^10 SLFL /NOW LOAD EMA REGISTER SGRR /SET READ GO CLA TAD BUFPTR TAD (SEGSIZ+2 /LOOK AT BUFFER THREAD WORD DCA BUFP1 CDF BUFFLD TAD I BUFP1 CDF DDCFLD DCA BUFPTR /UPDATE TO NEXT SEGMENT TAD CURSIZ CIA TAD MSGSIZ DCA MSGSIZ /REDUCE TO REMAINING SIZE JMS I (RCVWT /NOW WAIT FOR THIS SEGMENT TAD MSGSIZ /SEE IF ANY LEFT TO DO SZA JMP DATALP /GO AGAIN IF MORE DCA BFLAG /INDICATE NOT IN RING BUFFER NOW
AC7776 JMS I (GETHDR /NOW GET DATA CRC TAD (CDF BUFFLD JMS I (DDCPUT TAD BUFPTR JMS I (DDCPUT /STORE NEW BUFFER MARK DATXIT, JMS I (LINKBF /LINK DESCRIPTOR ON Q AND WAKE DDCMP JMP I (IDLE /POST COMPLETE MS2LNG, JMP I (RESYNC /JUST DISCARD NONSENSE COUNT BUFOVR, DCA BFLAG /FLAG NOT IN RING BUFFER TAD (BFOERR JMP DATXIT /PASS ERROR STATUS TO DDCMP BUFPTR, BUFLOC-1 BUFP1, 0 CURSIZ, 0 MSGSIZ, 0 T1, 0 T2, 0 BFLAG, 0 PAGE
/RECEIVER COMPLETION ROUTINE RCVWT, RESYNC TAD EFPTR /TEST+CLEAR THE RECEIVER SEMAPHORE CLL RAR /EFFECTIVE 'ASR EFPTR' DCA EFPTR /LEAVE REQUEST BIT IN LINK JMP DISMIS /DISMISS CURRENT INTERRUPT /SKIPCHAIN LINKAGE NXTDEV, 0 0 CIF CUR CDF DDCFLD SSCD /SKIP IF SPECIAL CHARACTER SEEN SKP JMP I (GOTCHR /HANDLE SPECIAL CHAR IF ONE SEEN SSRO /SKIP IF RECEIVER WC OVERFLOW SKP JMP I RCVWT /RETURN TO RECEIVER INTERRUPT CODE SSTO /SKIP IF TRANSMITTER WC OVERFLOW SKP JMP TRNINT /HANDLE TRANSMITTER WCO SSRG NOP /IGNORE THE RING SIGNAL SSBE /SKIP IF BUS ERROR DISCOVERED SKP ISZ BERCNT /BUMP THE BUS ERROR COUNTER SSCA NOP /IGNORE CARRIER DROPOUTS TAD NXTDEV+1 DCA .+1 /COPY CIF CDF TO NEXT DEVICE INLINE 0 JMP I NXTDEV /EXIT TO NEXT DEVICE BERCNT, 0
/OUTPUT SKIPCHAIN CODE TRNINT, CDF TAD (SYNBUF-1 /POINT BACK AT PREAMBLE DCA I (DP8TCA /WE WILL IDLE THERE UNTIL NEXT TRANS REQUEST CDF DDCFLD TAD TREQ /NOW CHECK IF TRANSMIT DONE CLL RAR DCA TREQ SNL JMP DISMIS /JMP IF NOT OPOST, TAD I (ATNINP DCA ATNPTR /COPY RING BUFFER PTR ONPAGE TAD (LINE /INSERT OUR LINE NUMBER IN THE QUEUE DCA I ATNPTR TAD ATNPTR STL IAC /SET LINK AND BUMP POINTER AND (7767 /MOD SIZE OF ATTENTION RING BUFFER DCA I (ATNINP /STORE UPDATED POINTER BACK DISMIS, SZL /LINK IS ON IF POST WAS CALLED FOR TAD (DDCEF /IN THAT CASE, WAKE DDCMP UP CDF DDCFLD CIF POSTDS /RETURN TO RTS-8 ATNPTR, 0 TREQ, 0 /HERE TO POST A PACKET IDLE, CDF TAD (4000+SYN /SET STRIPSYNC IF IN IDLE MODE DCA I (DP8CH4 STA DCA I (DP8RWC /SET WC TO IDLE TAD (IDLBUF-1 DCA I (DP8RCA /SET CA TO JUNK BUFFER TAD (CUR^110 SLFL /SET EMA FOR IDLE MODE SGRR /ASSERT RCV GO CLA JMS RCVWT /NOW WAIT FOR WCO IDLRTN, CDF CUR TAD (-SYN TAD I (IDLBUF /SEE IF IDLE CHAR IS SYN SZA CLA RESYNC, SCSD /IF NO AND SPECIAL CHAR NOT SEEN, RESYNC JMP IDLE
/HERE TO RESET AFTER BUFFER CLEARED AFTER ERROR RESET, CDF CUR TAD I (BFLAG2 /SEE IF WE WERE IN RING BUFFER SNA CLA JMP RESYNC /NO, JUST RESYNC DCA I (BFLAG2 /YES, CLEAR THE FLAG CDF TAD I (DP8RCA /POINT AT LAST CHAR STORED DCA R1 CDF BUFFLD STA DCA I R1 /CLEAR IT IN CASE OF ANY BELATED DMA CYCLES JMP RESYNC /NOW RESYNC R1, 0 EFPTR, 0 /RECEIVER SEMAPHORE = +1 TO WAKE DDCMP PAGE
/DP8E BUFFERS IDLBUF, ZBLOCK 4 /SMALL BUFFER FOR IDLE LINE /OUTPUT DMA BUFFER /NEEDED SINCE DP8E CAN'T CHAIN TRANSMITS SYN /LEADING SYN TO IDLE TRANSMITTER ON SYNBUF, SYN /PREAMBLE OF 4 SYN'S SYN SYN SYN OUTBUF, ZBLOCK BUFLEN-11 ERRTAB, ISRTYP /LINE TYPE VERSION /DRIVER VERSION NUMBER PATCH /PATCH LEVEL ZBLOCK 75 /MAKE SPACE FOR ERROR TABLE FIELD DDCFLD%10 *LCB CDF CUR ERRTAB STRTI STRTO *LCB+20 BUFLOC-1 /INITIAL BUFFER PTR CDF BUFFLD SEGSIZ= 16 /DATA BUFFER SEGMENT SIZE FIELD BUFFLD%10 *BUFLOC IFNZRO BUFLEN&400 < -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. > IFNZRO BUFLEN&200 < -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. > IFNZRO BUFLEN&100 < -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. > IFNZRO BUFLEN&40 < -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. > IFNZRO BUFLEN&20 < -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;CDF BUFFLD;. > *.-1 BUFLOC-1



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search