/DECNET/8 V1A DKC8A PSEUDO INTERRUPT SERVICE ROUTINE TASK IFDEF DDCMP / / / / / / / / / / / /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 /J. ROTH 12-OCT-76 / / DECNET/8 RELEASE VERSION 1 / DECNET/8 PATCH LEVEL A / APRIL 8,1977 / VERSION=01 PATCH="A / / IF ONLY ONE DKC8A 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= /DDCMP 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 / ISRIOT= /DKC8A DEVICE CODE /E.G. 57 FOR DKC8A DEFAULT IOT CODE / DKC8A= /TASK NUMBER TO ASSIGN TO DKC8A ISR / DKPER= /MAX PERIOD SPENT BY TASK SCANNING LOOP / /PERIOD IS APPROX 7*DKPER MEMORY CYCLES IFNDEF LINE IFNDEF BUFFLD IFNDEF BUFLOC IFNDEF BUFLEN IFNDEF ISRFLD IFNDEF ISRLOC IFNDEF ISRIOT IFNDEF DKPER /HISTOGRAM TESTS INDICATE THAT 60 CYCLES THRU LOOP IS A GOOD NUMBER IFNDEF NOMAP /DEFAULT IS TO MARK BUFFER IN BITMAP ISRTYP= 20 /DEFINE DKC8A PARALLEL TYPE /TASK DEFINES TASK= DKC8A INIWT= 0 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 THRVAL= 12 /INIT VAL OF THRESHOLD COUNTERS 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 MULTITUDE 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 DBST= ISRIOT^10+6000 /SKIP ON DATA ACCEPTED /CLEAR DATA ACCEPTED AND DATA AVAILABLE IF SKIP SUCCEEDS DBSK= ISRIOT^10+6001 /SKIP ON DATA READY FLAG (DOES NOT CLEAR IT) DBRD= ISRIOT^10+6002 /READ DATA IN TO AC0-11 DBCF= ISRIOT^10+6003 /CLEAR DATA READY FLAG AND ISSUE DATA ACCEPTED DBTD= ISRIOT^10+6004 /LOAD AC0-11 INTO BUFFER AND TRANSMIT DATA OUT DBSE= ISRIOT^10+6005 /ENABLE INTERRUPTS DBCE= ISRIOT^10+6006 /DISABLE INTERRUPTS DBSS= ISRIOT^10+6007 /ISSUE A STROBE PULSE (UNUSED BY DECNET) FIELD CUR%10 / DKC8A OPERATION / --------------- / / SOURCE DESTINATION / ------ ----------- / / TAD WORD / DBTD / DATA OUT---------------->DATA IN / DATA AVAILABLE---------->SET DATA READY (INTERRUPT) / DBSK / JMP NXTDEV / DBRD / DCA WORD / (INTERRUPT) DATA ACCEPTED IN<-------DATA ACCEPTED OUT DBCF / DBST / JMP NXTDEV / (DONE) / / TO TRANSFER DATA WE SCHEDULE A TASK TO AVOID / THE INTERRUPT SKIP CHAINS IN BOTH SYSTEMS LOCKING / EACH OTHER IN A TIGHTLY COMPUTE BOUND LOOP. / THIS PSEUDO SKIPCHAIN TASK DOES A SHORT TIMEOUT / TO GUARD AGAINST HANGING. IN MOST CASES / THE BACKGROUND TASK SHOULD BE ABLE TO SEND ALL DATA / WITH VERY LITTLE INTERFERENCE, ONCE STARTED. /OUTPUT INITIATOR /ENTRY DF = DDCFLD *ISRLOC STRTO, 0 TAD (TAD I OUTTBL DCA OUTMV /SET UP PARAMETER COPY LOOP TAD (DCA HDRBUF DCA HDRSTR TAD (HDRBUF-OUTCNT-1 DCA OUTHCT OUTMV, 0 /TAD I OUTTBL+N HDRSTR, 0 /DCA HDRBUF+N ISZ OUTMV /BUMP SOURCE PTR ISZ HDRSTR /BUMP TARGET PTR ISZ OUTHCT /BUMP COUNT JMP OUTMV /LOOP IF MORE TAD (-TSYNCS /PICK UP NUMBER OF LEADING SYNCS DCA OUTHCT /STORE IN COUNTER TAD (TSYNBG /INIT COROUTINE ENTRY POINT DCA PCH TAD (DEL /SEND THE FIRST CHARACTER DBTD /INTERRUPTS WILL PROPAGATE THE REST OUTXIT, CLA CLL /CLEAN UP CIF CDF DDCFLD /BACK TO DDCFLD JMP I STRTO /TRANSMITTER INTERRUPT LEVEL CODE TSYNL, TAD (DEL JMS PCH /SEND ANOTHER SYN TSYNBG, ISZ OUTHCT /BUMP COUNTER JMP TSYNL /LOOP IF MORE TAD (-10 /ELSE INIT HEADER COUNT DCA OUTHCT TAD TADHDR DCA HDRTAD /INIT PICKUP INSTR HDRTAD, 0 /TAD HDRBUF+N JMS PCH /SEND THE CHAR ISZ HDRTAD ISZ OUTHCT JMP HDRTAD TADHDR, TAD HDRBUF /SEE WHAT WE SENT TAD (-ENQ SNA CLA /SNA IF NOT ENQ JMP OPOST /ELSE WE'RE COMPLETE TAD OCDF DCA OUTCD /INIT BUFFER CHAINING CDF INSTR INLINE /CHAINED BUFFER TRANSMIT CODE OUTCD, 0 /SET TO CDF BUFFLD ISZ OUTPTR /PRE INCREMENT POINTER TAD I OUTPTR SMA /SMA IF CDF LINK JMP OUTGTC /ELSE GOT A CHAR DCA OUTCD /STORE INLINE ISZ OUTPTR TAD I OUTPTR /NOW GET THE NEW PTR ADDR DCA OUTPTR JMP OUTCD /ITERATE OUTGTC, CDF DDCFLD /GOT A CHAR, BACK TO DDCFLD JMS PCH /SEND IT OUT ISZ OUTCNT JMP OUTCD /LOOP IF MORE TAD DCRCL /NOW SEND BCC CHARS JMS PCH TAD DCRCH JMS PCH /FALL INTO OUTPUT POST CODE OPOST, CIF CUR /JR FIX RACE CONDITION -LOCK ACCESS TO ATNINP TAD I (ATNINP /STORE THIS LINE'S NUMBER IN THE Q DCA ATNPTR TAD (LINE DCA I ATNPTR TAD ATNPTR IAC AND (7767 /BUMP PTR MOD 10 DCA I (ATNINP /RESTORE IT JMP PCHDS /NOW POST AND DISMISS /TRANSMIT INTERRUPT COROUTINE PCH, PCHDS+1 AND (377 /PROTECTION DBTD /GATE NEXT CHARACTER OUT CLA CLL JMP I (DKWAIT /ENTER IDLE LOOP PCHDS, TAD (DDCEF CAL /WAKE DDCMP UP NOW POST CDF DDCFLD JMP I (DKWAIT /GO BACK TO IDLE LOOP ("DISMISS" THE INTERRUPT) PCHRTN, CDF DDCFLD /GET INTO DDCMP SPACE TAD I (LCB+4 /PICK UP LCB STATE WORD RTR /SHIFT STATE INTO L,SIGN SMA SNL CLA /SKP IF NOT IDLE JMP I (DKWAIT /ABORT TRANSMIT IF LINE IS NOW IDLE JMP I PCH /EXIT COROUTINE /INTERRUPT LEVEL DATA HDRBUF, 0 0 0 0 0 0 CRCL, 0 CRCH, 0 DCRCL, 0 DCRCH, 0 OCDF, 0 OUTPTR, 0 OUTCNT, 0 ATNPTR, 0 /TEMP PTR OUTHCT, 0 /TEMPORARY COUNTER /TABLE TO MAP OUTPUT MESSAGE TO HDRBUF OUTTBL, OHDR /OHDR OHDR+1 /OCNTL OHDR+2 /OCNTH OHDR+3 /ORES OHDR+4 /ONUM OHDR+5 /OA0 OCRCL /OCRCL OCRCL+1 /OCRCH ODCRCL /ODCRCL ODCRCL+1 /ODCRCH OUTCDF /OUTCDF OUTCDF+1 /OUTPTR OUTCDF+2 /OUTCNT PAGE /RECEIVER RESYNCH CODE /LOOKS FOR AT LEAST 1 DEL TO ACHIEVE FRAMING RES1, ION /RE ENABLE INTERRUPTS AFTER ACCESS TO "FREHD" JMS I (GCH /GET NEXT CHAR FROM SKIPCHAIN ROUTINE RES5, TAD (-DEL /SEE IF SYN SZA CLA JMP RES1 /NO, RESET SYNC COUNT TAD DDCPT /IN CHAR SYNC NOW, SEE IF NODE ASSIGNED SZA CLA JMP RES6 /YES, GET THE HEADER IOF /LOCK ACCESS TO FREHD TAD I (FREHD /NO, ASSIGN ONE NOW SNA /SKP IF ANYTHING TO ASSIGN JMP RES1 /ELSE STALL BY SYNCING AGAIN (**TEMP**) JMS SETBF /SET IT UP NOW, INTERRUPTS WILL BE REENABLED RES6, TAD DDCEP /MAKE SURE DDCPTR INITIALIZED IAC DCA DDCPTR /(IN CASE IF RESYNC CALL DURING DATA) RES3, JMS I (GCH /GET NEXT CHAR RES4, TAD (-DEL SNA /SNA IF NOT EXTRA SYN JMP RES3 /ELSE JUT TOSS IT TAD (DEL-ENQ /SEE IF ENQ SNA JMP GOTENQ /YES TAD (ENQ-SOH /CHECK IF SOH SNA JMP GOTSOH /YES TAD (SOH-DLE /CHECK IF DLE SNA CLA JMP GOTDLE /YES JMP RES1 /RESYNC NOW /LOW LEVEL HEADER CHECK CODE /ACQUIRES HEADER, PASSES TO DDCMP GOTENQ, TAD (ENQ /FIRST STORE ENQ JMS DDCPUT JMS I (GETHDR /NOW PICK UP HEADER PSTMSG, JMS LINKBF /LINK THIS NODE ON DDCMP'S INPUT Q TAD (DDCEF /NOW POST Q EF JMS I (GCH JMP RES4 /LOOP WITH ANOTHER CHAR GOTDLE, TAD (DLE-SOH /BIAS FOR BOOT MESSAGE GOTSOH, TAD (SOH /STORE SOH FIRST JMS DDCPUT JMS I (GETHDR /NOW GET REST OF HEADER AC0002 /OFFSET TO COUNT BYTES TAD DDCEP DCA DDCPTR TAD I DDCPTR /PICK UP LOW BYTE DCA T1 /STORE IN TEMP ISZ DDCPTR TAD I DDCPTR /LOOK AT NEXT AND (7774-QSYNC-SELECT /IGNORE CONTROL BITS SZA CLA JMP MS2LNG /FORMAT ERROR IF TOO BIG TAD I DDCPTR AND (7777-QSYNC-SELECT /GET REST OF COUNT CLL RTR RTR RAR TAD T1 /SHIFT AND PUT IN PLACE SNA JMP MS2LNG /ERROR IF ZERO CIA /MAKE NEGATIVE COUNT CDF CUR /FUDGE DF DCA I (INCNT /STORE IN DATA BUFF ROUTINE CDF DDCFLD JMS LINKBF /LINK ON THE Q TAD (DDCEF JMS I (GCH /POST DDCMP JMP I (STRTDT /ENTER BUF LOOP WITH FIRST CHAR IN AC MS2LNG, JMP RES1 /**DEBUG** T1, 0 /ROUTINE TO LINK NODE IN DDCMP INPUT Q /ENTRY AC = ERROR STATUS (IF ANY) LINKBF, 0 IOF /SYNCHRONIZE ACCESS TO COMMON LOCATIONS TAD (LINE /MULTIPLEX IN LINE NUMBER TO RH DCA I DDCEP /STORE ERROR STATUS DCA I DDCPT /CLEAR THREAD WORD TAD I (DDCTL /GET TAIL POINTER TO A TEMP DCA S1 TAD DDCPT /NOW STORE CURRENT PACKET VIA TAIL PTR DCA I S1 TAD DDCPT DCA I (DDCTL /UPDATE TAIL POINTER IN DDCFLD NOW TAD I (FREHD /SEE IF ANOTHER PACKET AVAILABLE SZA JMP GOT1 /OK IF ONE TO ASSIGN HLT /TEMP HLT** GOT1, JMS SETBF /SET BUFFER UP, AND REENABLE INTERRUPTS JMP I LINKBF /DONE /ROUTINE TO SETUP BUFFER POINTERS PRIOR TO USE /ENTRY AC = ADDRESS OF PACKET TO USE SETBF, 0 DCA DDCPT /STORE NODE ADDRESS TAD DDCPT IAC DCA DDCEP /STORE POINTER TO ERROR/LINE WORD DCA I DDCEP /INIT CLEAR IT TAD DDCEP IAC DCA DDCPTR /INIT WORK PTR TAD I DDCPT /UNLINK FROM FREELIST NOW DCA I (FREHD /BY UPDATING HEAD POINTER ION /DESYNCHRONIZE OURSELVES NOW JMP I SETBF /DONE /STORE AND INDEX ROUTINE DDCPUT, 0 DCA I DDCPTR ISZ DDCPTR JMP I DDCPUT /FAIR ENOUGH? DDCPT, 0 DDCEP, 0 DDCPTR, 0 S1, 0 PAGE /LOOP TO STORE USER DATA STRTDT, DCA CHAR /STORE CHAR PASSED IN AC TAD BUFCDF /NOW PUT BUFFER MARK IN THE NODE JMS I (DDCPUT TAD BUFPTR JMS I (DDCPUT TAD INCNT /ALSO PASS NEG COUNT JMS I (DDCPUT /DOING THIS NOW SPREADS INTERRUPT LEVEL /COMPUTATION OVER 2 CHARACTER TIMES... JMP BONHED /JUMP INTO THE LOOP DATALP, JMS GCH DCA CHAR /STORE NEXT CHAR BONHED, TAD I (LCB+20 DCA SVPT /SAVE POINTER TO LAST GOOD NSP DATA BUFCDF, CDF BUFFLD /ENTER BUFFER DF ISZ BUFPTR /PRE INCREMENT POINTER / NOP TAD I BUFPTR CMA /SEE IF EMPTY, CDF OR BUSY SNA JMP MTSLOT /-1 MEANS AVAIL LOC SPA SNA CLA JMP BUFOVR /NEGATIVE MEANS IN USE TAD I BUFPTR /ELSE IT'S A CDF LINK DCA BUFCDF /SO STORE IT ISZ BUFPTR /BUMP PTR / NOP TAD I BUFPTR /PICK UP NEW PTR DCA BUFPTR /STORE IT JMP BUFCDF /TRY AGAIN MTSLOT, TAD SVPT /NOW CHECK AGAINST END OF BUFFER CIA TAD BUFPTR SNA CLA JMP BUFOVR /JMP IF NO ROOM TAD CHAR /GET CHAR BACK DCA I BUFPTR /STORE IT CDF DDCFLD /BACK TO NET FIELD ISZ INCNT /CHECK COUNT JMP DATALP /LOOP IF MORE JMS GCH /NOW GET BLOCK CHECK CHARS JMS I (DDCPUT JMS GCH JMS I (DDCPUT TAD BUFCDF JMS I (DDCPUT /NOW STORE NEW BUFFER MARK TAD BUFPTR JMS I (DDCPUT JMP I (PSTMSG /POST MESSAGE COMPLETE BUFOVR, CDF DDCFLD /JR FIX BUFFER OVERFLOW BUG BY RESETTING FIELD STA /REALIGN POINTER TAD BUFPTR DCA BUFPTR TAD (BFOERR JMS I (LINKBF /LINK BAD PACKET ON INPUT QUEUE TAD (DDCEF /NOW WAKE DDCMP UP JMP IGNORE /AND IGNORE FURTHER INPUT /ABOVE FIXES STUCK BUFFER OVERFLOW BUG - JR BUFPTR, BUFLOC-1 CHAR, 0 INCNT, 0 SVPT, 0 /ROUTINE TO READ HEADER CHARS TO NODE GETHDR, 0 TAD (-7 /7 CHARACTERS DCA INCNT GETHLP, JMS GCH JMS I (DDCPUT /STORE IT ISZ INCNT JMP GETHLP /LOOP IF MORE JMP I GETHDR /DONE /RECEIVER INTERRUPT SERVICE INITIATOR /ENTRY AC = FUNCTION / -1: SKIPCHAIN AND BUFFER INIT / 0: ENTER RESYNC MODE / 1: ENTER INHIBIT MODE /ENTRY DF = DDCFLD STRTI, 0 SNA JMP RESFUN /RESYNC FUNCTION SMA CLA JMP INHFUN /INHIBIT FUNCTION /INIT FUNCTION JMS I (CLRBUF /CALL BUFFER CLEARING ROUTINE CAL /NOW INSERT THE SKIPS SKPINS NXTDEV CAL SKPINS NXTDV2 DBSE /NOW ENABLE INTERRUPTS STRTIX, CIF CDF DDCFLD /GET SET TO RETURN JMP I STRTI /RESYNC MODE FUNCTION RESFUN, TAD I (LCB+20 DCA BUFPTR TAD I (LCB+21 DCA BUFCDF TAD (RES5 DCA GCH JMP STRTIX /DONE /INHIBIT INPUT FUNCTION INHFUN, TAD (IGNORE+1 DCA GCH /SET INT RTN TO IGNORE ALL TAD BUFPTR DCA I (LCB+20 /PASS BUFFER POINTER IN LCB FOR 'PURGE' TAD BUFCDF DCA I (LCB+21 JMP STRTIX /DONE /RECEIVER PSEUDO SKIPCHAIN COROUTINE IGNORE, JMS GCH /INHIBIT LOOP SKP CLA /JUST TOSS IT GCH, RES5 /INIT IN SYNC MODE GCHDS, SNA /SKP IF EVENT FLAG TO POST JMP I (DKWAIT /ELSE "DISMISS" CAL POST CDF DDCFLD JMP I (DKWAIT /DONE GOTCH, DBRD /READ A WORD DBCF /CLEAR FLAG AND SAY WE ACCEPTED IT GCHRTN, AND (377 /PROTECTION CDF DDCFLD /ENTER DDCMP FIELD JMP I GCH /RETURN TO CALLER PAGE /DKC8A SCANNER LOOP DKWAIT, TAD OUTFLG /IS THE OUTPUT FLAG UP SZA CLA /SKP IF YES JMP CHKIN /ELSE CHECK INPUT FLAG ISZ OUTFLG /INDICATE WE SAW IT JMP I (PCHRTN /GO ENTER TRANSMIT ROUTINE CHKIN, TAD INFLG /NOW CHECK THE INPUT FLAG SZA CLA JMP DKSCAN /JMP IF NOT UP ISZ INFLG /ELSE INDICATE WE SAW IT TAD DKWORD /AND GET WORD WE SAW JMP I (GCHRTN /ENTER RECEIVER ROUTINE DKSCAN, TAD (-DKPER /SET THE IDLE PERIOD NOW DCA DKTIMR /TO AVOID A HANG UP XDBSK, DBSK /TEST RECEIVER FLAG SKP JMP I (GOTCH /GOT A CHAR XDBST, DBST /TEST TRANSMITTER FLAG SKP JMP I (PCHRTN /GET ANOTHER CHAR ISZ DKTIMR /TEST TIMER JMP XDBSK /LOOP FOR MORE CIF CUR /INHIBIT INTERRUPTS ISZ DKEF /SET EF PENDING NOW TAD XDBSK /PUT SKIPS BACK IN CHAIN DCA INFLG TAD XDBST DCA OUTFLG DBSE /REENABLE INTERRUPTS START, CAL /NOW STOP OURSELVES WAITE DKEF JMP DKWAIT /CYCLE THRU THE LOOP AGAIN DKEF, 1 /INITIALLY BUSY DKWORD, 0 DKTIMR, 0 /ACTUAL SKIPCHAIN CODE NXTDEV, 0;0 INFLG, DBSK /SKIP IOT DOUBLES AS FLAG JMP I NXTDEV /NOT US DBRD /OK, READ CHARACTER DCA DKWORD /PASS TO TASK IN THIS LOC DBCF /NOW CLEAR FLAG, READY FOR ANOTHER IAC DCA OUTFLG /DISABLE DETECTION OF TRANSMITTER DKPOST, DCA INFLG /DISABLE FURTHER DETECTION OF RECEIVER /AND INDICATE RECEIVER HAS CHARACTER TO TASK DBCE /CLEAR INTERRUPT ENABLE TAD (DKEF /WAKE DKC8A TASK CIF CDF CUR POSTDS /POST AND DISMISS NOW NXTDV2, 0;0 OUTFLG, DBST /SKIP AS ABOVE, ON TRANSMITTER JMP I NXTDV2 /NOT US DCA OUTFLG CIF CUR CLA IAC /SET TO DISABLE DETECTION OF RECEIVER JMP DKPOST /EXIT CLRBUF, 0 CLRCDF, CDF BUFFLD STA /FIRST STORE -1 IN ALL BUF LOCS DCA I CLR1 ISZ CLR1 / NOP ISZ CLR2 JMP CLRCDF /CLEAR ANOTHER TAD CLRCDF /NOW SET THE WRAP AROUND CDF DCA I CLR1 ISZ CLR1 TAD (BUFLOC-1 DCA I CLR1 /FINALLY THE ADDR-1 / CDF CUR JMP I CLRBUF CLR1, BUFLOC CLR2, -BUFLEN+2 ERRTAB, ISRTYP /LINE TYPE VERSION /DRIVER VERSION NUMBER PATCH /PATCH LEVEL /NEXT ARE 14. CUMULATIVE ERROR COUNTERS ZBLOCK 16 ZBLOCK 12 /PADDING FOR TIME ON-LINE, ETC FIELD DDCFLD%10 *LCB CDF CUR ERRTAB STRTI STRTO *LCB+20 BUFLOC-1 /INITIAL BUFFER PTR CDF BUFFLD IFZERO NOMAP+1 < FIELD BUFFLD%10 *BUFLOC ZBLOCK BUFLEN /MARK BUFFER IN BITMAP IF DESIRED >