;WLOUT1.FAI.147, 25-NOV-75 17:53:17, EDIT BY HELLIWELL SUBTTL 'TTY' PRINT ONE SIGNAL ON TTY! TLSTBP: TRO ISBACK OUTSTR[ASCIZ/ SIGNAL NAME?/] JRST TLIST1 TLISTA: OUTSTR[ASCIZ/ SIGNAL NAME?/] TRZ ISBACK TRO DOALLC JRST TLIST2 TLISTB: OUTSTR[ASCIZ/ SIGNAL NAME?/] TLIST: TRZ ISBACK TLIST1: TRZ DOALLC TLIST2: ROUTE,< TRZ DOROUT > MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR PUSHJ P,TTYSIG POPJ P, ;NULL STRING OR ALTMODE LDB T,[POINT 7,STRTAB,6];GET FIRST CHAR CAIE T,FORALL ;USE FOR ALL CHAR AS "BOTH" SIGS JRST TLISTX MOVEI T," " DPB T,[POINT 7,STRTAB,6] PUSHJ P,TLISTX MOVEI T,NOTCHR DPB T,[POINT 7,STRTAB,6] TLISTX: MOVE A,[POINT 7,STRTAB] ;POINTER TO BEGINNING OF STRING PUSHJ P,PERMUT MOVEI T,CMPWRD MOVEM T,SAVET MOVE T,[PUSHJ P,TTYOUT] ;THIS GUY WILL COUNT ALL THE RIGHT THINGS MOVEM T,PUTCHR SETOM TTYFLG ;FLAG TTY OUTPUT SETZM LCOUNT ;NORMALLY DONE BY OUTSET SETZM CDSKPC ;COUNT OF # SIGNALS SEEN MOVE L,DEFLST TRNE ISBACK JRST [ FETCH(W,L,BLST) JUMPE W,XBAK PUSHJ P,ISBP ;CALL SUBR SKIPG CDSKPC OUTSTR[ASCIZ/SIGNAL NOT FOUND! /] POPJ P,] TRNN DOALLC JRST DOONE FETCH(W,L,WIRL) SKIPN USEDWL FETCH(W,L,PCWL) JUMPE W,NXCARD DOALL: PUSHJ P,ISBP FETCH(W,W,NXTWL) JUMPN W,DOALL POPJ P, DOONE: PUSHJ P,LSTGET ;NOW GET RIGHT CARD POPJ P, PUSHJ P,ISBP SKIPG CDSKPC OUTSTR[ASCIZ/SIGNAL NOT FOUND! /] POPJ P, ;ISBP - PRINT SIGNAL ASKED FOR ;W = WIRELIST ;PERMTB = SIGNAL NAME ;(ALSO SAVBIT,VOLTAGE RELEVANT) ISBP: LDB TTT,[POINT 7,PERMTB,6];FIRST CHAR OF NAME CAIN TTT,GENCHR ;IS IT GENERATED? JRST REDGEN ;READ # FROM STRING NOTGEN: PUSHJ P,TXTFND ;FIND THIS SIGNAL NAME POPJ P, MOVE C,E ;EQUIVALENT, USE E ISGENP: AOS CDSKPC ;COUNT SIGS SEEN FETCH(T,C,WBIT) TRNN T,NAM2ND SKIPA G,C FETCH(G,C,WPIN) TRNN ISBACK TRNN DOALLC ;NEED CARD LOC? JRST TLISTT FETCH(T,W,FCRD) HRLZM T,SLICEL SKIPE SLICEL PUSHJ P,PSLICL CRLF TLISTT: SKIPA F,G ;ALL RIGHT, SO F CAN'T BE AC 0 TLISTS: CRLF PUTSIG ADDR(F,SPNT) FETCH(F,F,NNAM) JUMPN F,TLISTS TRNE ISBACK JRST BAKLOP JRST WIRLOP REDGEN: MOVEI T,CMPWRD MOVEM T,SAVET PUSHJ P,GENFND JRST NOTGEN ;NOT FOUND, TRY AS REGULAR SIGNAL MOVE C,E JRST ISGENP SUBTTL 'WL' 'BL' SETUP, CALL BODY LIST SUBR ;LIST BODIES CROSS-REFERENCE AND WIRE LISTS ROUTE,< ROUTIT: SKIPN ISWW JRST NXWW TRO DOROUT TRZ ISBACK SETZM TINCHS SETZM NWIRES SETZM NRUNS JRST LIST0 >;ROUTE BAKLST: TROA ISBACK LIST: TRZ ISBACK LIST0: MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR MOVE L,DEFLST TRNE ISBACK JRST [ FETCH(W,L,BLST) JUMPE W,[XBAK:OUTSTR[ASCIZ/NO BACK PANEL WIRELIST! /] POPJ P,] MOVSI T,'BL ' JRST BLSTNM] PUSHJ P,LSTGET ;NOW ASK FOR PARTICULAR CARD! POPJ P, ROUTE,< TRNN DOROUT JRST NROUT1 PUSHJ P,CLEARP ;CLEAR MARK BITS FOR ROUTER MOVSI T,'WLR' JRST ISROUT NROUT1: >;ROUTE MOVSI T,'WL ' ;WIRE LIST FILE EXTENSION ISROUT: BLSTNM: MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, PUSHJ P,FILLST PUTHDR ;ROUTINE TO CALL AFTER HEADER SETUP TRNE ISBACK SKIPA T,[[ASCIZ/SLOTS IN USE/]] MOVEI T,[ASCIZ/LOC DIPTYPE BODY FILE POS/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WLBMAR MOVEM T,MARGIN MOVEI H,RADDR(W,WBDY,NXTB) SETZM SAVET ;LAST LOC PRINTED TRNE ISBACK JRST SLTLST SETZM NBODS ;LAST BODY NAME PRINTED SETZM LSTDIP ;LAST DIP NAME PRINTED JRST BSTR1 BSTR: PUSHJ P,LSTLOP BSTR1: FETCH(H,H,NXTB) JUMPN H,BSTR JRST NOBODS ;PRINT "BODIES" FOR BACKPANEL LIST SLTLS1: SKIPL LINCNT PUSHJ P,PUTHDR FETCH(A,H,BLOC) PUSHJ P,SLTOUT MOVE T,LCOUNT CAIGE T,=64 ;MORE THAN 9 COLUMNS? JRST [ PUTBYT 11 ;NO, TAB NOT CRLF JRST SLTLST] CRLF SLTLST: FETCH(H,H,NXTB) JUMPN H,SLTLS1 JRST NOSLTS ; BODY LIST SUBR LSTLOP: FETCH(A,H,BLOC) CAMN A,SAVET ;DIFFERENT LOC FROM LAST? JRST [ JUMPN A,SAMLOC ;IF NOT ZERO GO ON SKIPGE LINCNT ;NEED A HEADER JRST SAMLOC ;NO PUSHJ P,PUTHDR ;YES JRST SAMLC1] ;CONTINUE MOVEM A,SAVET SKIPL LINCNT PUSHJ P,PUTHDR FETCH(T,H,BBIT) PUSHJ P,WLOCOUT ;PRINT LOC (IN A, BBIT IN T) SAMLC1: SETZM NBODS ;CLEAR LAST BODY NAME POINTER, SO WILL PRINT ON NEW PAGE SETZM LSTDIP ;ALSO DIP TYPE SAMLOC: PUTBYT 11 FETCH(T,H,BBIT) TRNE T,CBODY ;CON? SKIPA A,[-1] FETCH(A,H,DIPT) ;DIP POINTER SKIPN A MOVNI A,2 CAMN A,LSTDIP JRST SAMDIP MOVEM A,LSTDIP JUMPL A,[PUTSTR (A)2+[ASCIZ/NONE/ ASCIZ/CON/] JRST SAMDIP] FETCH(A,A,DNAM) ;NAME POINTER PUSHJ P,PRINT7 ;PRINT 7 CHARS OF NAME SAMDIP: PUTBYT 11 MOVEI T,ADDR(H,BNAM) EXCH T,NBODS JUMPE T,NSAMBD MOVE TT,NBODS PUSHJ P,SEQMAT JFCL CAIA JRST SAMBOD NSAMBD: PUTSTR ADDR(H,BNAM) SAMBOD: PUTBYT 11 FETCH(A,H,FILB) PUTSIX ADDR(A,FILN) ;FILENAME PUTBYT 11 FETCH(A,H,BBIT) PUSHJ P,BPPNT CRLF POPJ P, ;PBODY - PRINT " AT , DRAWING LOC " ;A = BODY PBODY: PUSH P,A PUTSTR [ASCIZ /BODY "/] PUTSTR ADDR(A,BNAM) PUTSTR [ASCIZ /"/] FETCH(A,A,BLOC) JUMPE A,PBODY1 PUTSTR [ASCIZ / AT /] PUSHJ P,LOCOUT PBODY1: MOVE A,(P) FETCH(A,A,BBIT) TRNN A,BANYPOS PUTSTR [ASCIZ /, DRAWING LOC /] PUSHJ P,BPPNT JRST POPAJ BPPNT: TRNN A,BANYPOS ;ANY POSITIONS? POPJ P, LDB T,[POINT BYPOSL,A,35-BYPOSB] PUTBYT @N2L+1(T) LDB T,[POINT BXPOSL,A,35-BXPOSB] ADDI T,1 JRST DECOUT ;PRINT CONNECTOR PIN APPROX X,Y CNPNT: TRNN A,CANYPOS ;ANY POSITIONS? POPJ P, LDB T,[POINT CYPOSL,A,35-CYPOSB] PUTBYT @N2L+1(T) LDB T,[POINT CXPOSL,A,35-CXPOSB] ADDI T,1 JRST DECOUT ; PRINT SIGNAL NAMES, CALL WIRE SUBR NOSLTS: MOVEI T,[ASCIZ/SIGNAL NAME INPUT OUTPUT SOURCE SLOT PIN Q TYPES LOW HI LOW HI FILE POS PRINT/] JRST GWHDR NOBODS: MOVEI T,[ASCIZ/SIGNAL NAME LOC(PIN#) TYPE LOW HI USE DIPTYPE BODY FILE POS/] ROUTE,< TRNE DOROUT MOVEI T,[ASCIZ/SIGNAL NAME LOC(PIN#) Z TYPE LOW HI INCHES USE DIPTYPE BODY FILE POS/] >;ROUTE GWHDR: MOVEM T,HEADER SETZM LINCNT ;FORCE NEW HEADER OUT (USE SAME MARGIN) MOVEI T,WLWMAR MOVEM T,MARGIN SETZM ISRAY ROUTE,< TRNN DOROUT ;ROUTING? JRST NOVGRN MOVE T,[RPGY,,FUCKUP] ;THIS IS ROUTINE TO CALL PUSHJ P,PGSPEC ;CALL SPECIAL ROUTINE TO DO PWR AND GND NOVGRN: >;ROUTE FETCH(H,W,WIRES) JUMPE H,NOSTRS STRLOP: MOVE G,H FETCH(A,H,WBIT) PUSHJ P,GWIRBT ;GET WIRE BITS IN LEFT HALF OF A ROUTE,< TRNN DOROUT ;IF ROUTING JRST ROUSIN TLNE A,SPWR!SGND ;DID PWR AND GND, SO JRST WIRNON ;SKIP IT NOW JRST ROUGEN ROUSIN: >;ROUTE TLC A,GENSIG!WSINGL ;SINGLE UNNAMED PIN? TLNN A,WNULL ;OR NULL RUN? TLCN A,GENSIG!WSINGL JRST WIRNON ;YES, DO IT LATER ROUGEN: PUSHJ P,DOSTRS ;CHECK AND MAYBE PRINT SIGNAL NAMES JRST WIRNON ;NO PRINT WIRE ISWIRE: MOVE G,H ;WIRE POINTER TRNE ISBACK JRST [ PUSHJ P,BAKLOP JRST WIRNON] WIRSOM: ROUTE,< TRNE DOROUTE JRST WIRROU ROUSIM: ;SIMPLE RUNS JUMP BACK HERE SETOM ZLEVN ;DISABLE Z LEVEL PRINT SETZM WIRELN ;CLEAR WIRE LENGTH CELL >;ROUTE PUSHJ P,WIRLOP WIRNON: FETCH(H,H,ALPH) JUMPN H,STRLOP ROUTE,< TRNE DOROUT JRST NOSTRS >;ROUTE MOVEI T,[ASCIZ/UNUSED PINS INPUT OUTPUT SLOT PIN TYPES LOW HI LOW HI FILE/] TRNN ISBACK MOVEI T,[ASCIZ/UNUSED PINS LOC(PIN#) TYPE LOW HI USE DIPTYPE BODY FILE POS/] MOVEM T,HEADER SETZM LINCNT FETCH(H,W,WIRES) GENSIN: FETCH(A,H,WBIT) MOVE G,H PUSHJ P,GWIRBT TLNE A,GENSIG!WNULL TLNN A,WSINGL!WNULL JRST NOGNSN PUSHJ P,DOSTRS JRST NOGNSN MOVE G,H TRNN ISBACK JRST WIRGSN PUSHJ P,BAKLOP JRST NOGNSN WIRGSN: PUSHJ P,WIRLOP NOGNSN: FETCH(H,H,ALPH) JUMPN H,GENSIN NOSTRS: ROUTE,< TRNN DOROUTE JRST NOWIRS SKIPL LINCNT PUSHJ P,PUTHDR CRLF CRLF PUSHJ P,PTOTS ;TOTALS TO FILE MOVE T,[OUTCHR TTT] MOVEM T,PUTCHR PUSHJ P,PTOTS ;AND TO TTY NOWIRS: >;ROUTE RELEASE LST, POPJ P, GWIRBT: TRNN A,NAM2ND ;IS IT HEADER BLOCK? JRST [ HRL A,A ;YES, JUST COPY BITS POPJ P,] FETCH(T,H,WPIN) FETCH(T,T,WBIT) HRL A,T POPJ P, DOSTRS: TRNE REFLAG ;DOING REFERENCE HACK? JRST STRLP0 ;YES, SKIP TEST TRNE A,NAM2ND ;SECOND NAME? POPJ P, ;YES, SKIP IT STRLP0: SKIPL LINCNT PUSHJ P,PUTHDR STANFO,< CAIA > ;SOME PEOPLE WANT TO WASTE SPACE STRLP1: CRLF PUTSIG ADDR(G,SPNT) FETCH(G,G,NNAM) ;NEXT ONE JUMPN G,STRLP1 FETCH(G,H,WBIT) TRNN G,NAM2ND ;DID WE START WITH FIRST? JRST CPOPJ1 ;YES, DONE FETCH(G,H,WPIN) ;NO, GET FIRST CRLF PUTSIG ADDR(G,SPNT) PUTSTR[ASCIZ/ ____ REFERENCE/] JRST STRLP3 STRLP2: CRLF PUTSIG ADDR(G,SPNT) STRLP3: FETCH(G,G,NNAM) ;NEXT CAIE G,(H) ;BACK TO OURSELVES YET? JUMPN G,STRLP2 CRLF CRLF ;MAKE SURE IT IS SEPARATED POPJ P, ROUTE,< WIRROU: FETCH(T,H,WBIT) ;WE KNOW NOW THAT THIS IS A HEADER BLOCK TRNE T,SPWR!SGND JRST WIRNON ;DONE ALREADY TRNE T,WNULL JRST [ ERRSTR 0,[ASCIZ/NULL RUN/] JRST ROUSIM] TRNE T,WSINGL JRST [ ERRSTR 0,[ASCIZ/ONE PIN RUN/] JRST ROUSIM] TRNE T,SNC JRST [ ERRSTR 0,[ASCIZ/NO-CONNECTION RUN/] JRST ROUSIM] PUSHJ P,ROUWR1 ;ROUTE AND PRINT JRST WIRNON PTOTS: MOVE T,NWIRES PUSHJ P,DECOUT PUTSTR[ASCIZ/ TOTAL WIRES /] MOVE T,NRUNS PUSHJ P,DECOUT PUTSTR[ASCIZ/ TOTAL RUNS /] MOVE T,TINCHS MOVEM T,WIRELN PUSHJ P,DOWLEN PUTSTR[ASCIZ/ INCHES OF WIRE /] POPJ P, >;ROUTE ; PRINT WIRE SUBR WIRLOP: MOVEM G,WIRTMP ;SAVE WIRE HEADER POINTER FETCH(G,G,WPIN) ;GET FIRST PIN JUMPN G,WIRLP1 ;IS THERE ONE? ERRSTR 0,[ASCIZ/NULL WIRE/] POPJ P, ;COME BACK HERE IF CAN'T ROUTE WIRLP1: PUSHJ P,WIRLP0 ;PRINT A PIN FETCH(G,G,NXTP) JUMPN G,WIRLP1 JRST WIRERR ;END ROUTINE WIRLP0: NODEC,< MOVE T,LCOUNT ;WELL, IF THE SIGNAL NAME IS ON THE CAIL T,8 ;SAME LINE AS A PIN, COBOL WILL LOSE!! >;NODEC DEC,< SKIPE LCOUNT > CRLF PUTBYT 11 FETCH(F,G,PBDY) ;F GETS BODY POINTER SETZM TCOUNT FETCH(A,F,BLOC) FETCH(T,G,PINN) HRLI A,(T) FETCH(T,F,BBIT) TRNN T,CBODY ;CONNECTOR PIN? JRST NCONPN ;NO ; Print "Pinloc Z\ PG CON" ; Zlevel info, default pinanme, invented flag PUSHJ P,LOCPNW FETCH(T,G,PBIT) PUSHJ P,PTAB SKIPN ISWW JRST NCGND FETCH(A,F,BLOC) ;ON W/W BOARDS, FLAG CONNECTORS THAT ARE PWR/GND FETCH(TT,G,PINN) HRL A,TT TLO A,MAPCON PUSHJ P,PINBIT TLNN TT,PWR JRST NCPWR PUTBYT PWRCHR NCPWR: TLNN TT,GND JRST NCGND PUTBYT GNDCHR NCGND: FETCH(T,G,PBIT) ;GET PIN BITS TRNN T,TRMBTS ;ANY TERMINATOR RULE? JRST NTRMRL ;NO PUTBYT "(" LDB T,[POINT TRMBSZ,T,TRMBPS+=18] PUSHJ P,DECOUT PUTBYT ")" NTRMRL: SETZ A, ;CLEAR PIN TYPE POINTER PUTSTR[ASCIZ/ CON /] JRST NOTNAM ;PRINT DIP PIN INFO ; " Pinloc Z\ *% type" NCONPN: FETCH(B,F,BPAK) PUSHJ P,LOCPNP FETCH(T,G,PBIT) PUSHJ P,PTAB FETCH(A,G,PTYP) JUMPN A,GOTPIN PUTSTR[ASCIZ/UN /] JRST WASNUL GOTPIN: FETCH(TT,A,DPBIT) TRNN TT,NULLD ;NULL LOAD? JRST NOTNUL PUTSTR[ASCIZ/NC /] JRST WASNUL NOTNUL: TRNE TT,INLD!GND!PWR!TERM!OUTLD ;DO WE RECOGNIZE THIS PIN? JRST WILPNT ;YES, WILL PRINT PUTSTR[ASCIZ/OOPS /] JRST WASNUL WILPNT: EXCH A,TT PUSHJ P,PNTYPE ;PRINT TYPE CHARACTERS EXCH A,TT PUTBYT 11 FETCH(B,G,PBIT) ;FOR DUP CHECK FETCH(T,A,LLOW) FETCH(TTT,A,LHI) HRL T,TTT TRNN TT,INLD JRST NINLD PUSH P,T FETCH(TTT,G,PBIT) TRNN TTT,PSHARE ;SHARED LOAD? JRST WASNEG PUTBYT "(" HRRE T,(P) PUSHJ P,LDOUT PUTSTR[ASCIZ/) /] POP P,T HLRZ T,T PUSHJ P,LDOUT JRST WASSHR NINLD: TRNE TT,GND JRST WASNUL ;NOTHING FOR GROUNDS TRNN TT,PWR JRST NTPWR HLRE TT,T HRRE T,T PUSH P,TT SKIPLE T PUTBYT "+" PUSHJ P,LDOUT PUTSTR[ASCIZ/V /] POP P,T PUSHJ P,LDOUT PUTSTR[ASCIZ/MA/] JRST WASSHR NTPWR: TRNN TT,TERM ;TERMINATOR? JRST NTTERM PUSH P,T JRST WASNEG ;HERE WE KNOW IT IS AN OUTPUT (THAT'S ALL THAT'S LEFT). NTTERM: TRNN TT,OPENC JRST NOPENC HRRE T,T TRNN B,DUP JRST WASLCL PUTBYT "(" PUSHJ P,LDOUT PUTBYT ")" JRST WASNUL NOPENC: PUSH P,T TRNE TT,PULL ;OUTPUT PULLUP? JRST WASPUL WASNEG: TRNE B,DUP PUTBYT "(" HRRE T,(P) PUSHJ P,LDOUT TRNE B,DUP PUTBYT ")" WASPUL: PUTBYT 11 TRNE B,DUP PUTBYT "(" POP P,T HLRE T,T PUSHJ P,LDOUT TRNE B,DUP PUTBYT ")" JRST WASSHR WASLCL: PUSHJ P,LDOUT WASNUL: PUTBYT 11 WASSHR: ROUTE,< TRNN DOROUT ;NEED INCHES COLUMN? JRST NOWLEN PUTBYT 11 SKIPN WIRELN JRST NOWLEN ;NO PUSHJ P,DOWLEN NOWLEN: >;ROUTE PUTBYT 11 JUMPE A,NOUSE1 ;ANY TYPE POINTER FETCH(A,A,DUSE) PUTSIX A NOUSE1: PUTBYT 11 FETCH(T,F,DIPT) ;DIP TYPE POINTER SETZM TCOUNT JUMPE T,WNONAM FETCH(A,T,DNAM) ;DIP NAME PUSHJ P,STROUT WNONAM: PUTBYT 11 PUTSTR ADDR(F,BNAM) NOTNAM: PUTBYT 11 FETCH(A,G,FILP) ;PIN FILE POINTER PUTSIX ADDR(A,FILN) PUTBYT 11 FETCH(A,F,BBIT) ;APPROX POS TRNN A,CBODY JRST BPPNT ;AND PRINT FETCH(A,G,PBIT) JRST CNPNT ;PTAB - PRINT ZLEVEL INFO AND FLAG INVENTED/DEFAULT PIN NAME ;T = PBIT ;ZLEVN = Z-LEVEL PTAB: MOVE TT,TCOUNT SUBI TT,=17 ;LOC NAMES CAN BE 16 LONG PUTBYT " " AOJL TT,.-1 ROUTE,< TRNN DOROUT ;ARE WE ROUTING? (NEED Z LEVEL) JRST NOZLEV MOVE TT,ZLEVN JUMPL TT,NOZLV1 PUSH P,T STANFO,< PUTSTR (TT)[ ASCIZ/ |/ ;0 MIDDLE OF RUN LEVEL 1 ASCIZ/ |/ ;1 " 2 ASCIZ/ \/ ;2 BEGIN RUN LEVEL 1 TO 2 ASCIZ/ ./ ;3 BEGIN RUN LEVEL 1 TO 1 ASCIZ/ |/ ];4 END RUN >;STANFO NOSTANFO,< PUTSTR (TT)[ ASCIZ/ !./ ;0 MIDDLE OF RUN LEVEL 1 ASCIZ/ .!/ ;1 " 2 ASCIZ/ \/ ;2 BEGIN RUN LEVEL 1 TO 2 ASCIZ/ ./ ;3 BEGIN RUN LEVEL 1 TO 1 ASCIZ/ !/ ];4 END RUN >;NOSTANFO TRNE TT,1 TDZA TT,TT MOVEI TT,1 MOVEM TT,ZLEVN POP P,T NOZLV1: NOZLEV: >;ROUTE PUTBYT 11 TRNE T,PIDPIN SKIPA TTT,["*"] MOVEI TTT," " TRNE T,INVENT MOVEI TTT,"%" XCT PUTCHR POPJ P, ; END WIRE SUBR, PRINT ERRORS ;WIRTMP = WIRE FINWIR: MOVEM G,WIRTMP WIRERR: MOVE G,WIRTMP FETCH(T,G,WBIT) TRNE T,SNC ;IS THIS AN NC WIRE? JRST BAKSNC ;YES, PRINT MESSAGE AND BE DONE TLZ BAKGAT ;NOT BACKPANEL TLO DOLC ;ACCUMULATE LOADING AND COUNTS PUSHJ P,LOPSET ;SETUP COUNTERS AND A PUSHJ P,GATHER PUSHJ P,LODMER ;CALC PROPER LOADING MOVE G,WIRTMP TLNN A,CABRUN JRST ISSIG PUSH P,A MOVEI A,8 CAMG A,LCOUNT CRLF PUSHJ P,FILL POP P,A PUTSTR[ASCIZ/ "CABLE RUN"/] ISSIG: TLNE A,WSINGL!WNULL ;THESE DON'T NEED LOADING SUMMARY JRST NOTLEN PUSH P,A MOVEI A,5*8 ;4TH TAB STOP ; CAMG A,LCOUNT CRLF PUSHJ P,FILL POP P,A SKIPE T,NPULL JRST [ CAME T,ANYOUT ;ALL OUTPUTS PULLUPS? JRST .+1 TLO TFLG PUTBYT "(" MOVE T,LINH PUSHJ P,LDOUT PUTBYT ")" PUTBYT "/" JRST PULNLY] TLZ TFLG ;ASSUME NOT PRINT HI SKIPN T,LINL JRST [ SKIPN NPWR JRST NOTPWR PUTSTR [ASCIZ/PWR/] JRST NOHIPN NOTPWR: SKIPN NGND JRST .+1 PUTSTR [ASCIZ/GND/] JRST NOHIPN] PUSHJ P,LDOUT SKIPN NTERM SKIPE NIN SKIPN ANYOUT JRST NOHIPN SKIPE LINH SKIPN LOUTH JRST NOHIPN SKIPE LINL SKIPN LOUTL JRST NOHIPN MOVE T,LINL ADD T,LOUTL JUMPE T,MUSTHI EQV T,LOUTL JUMPGE T,MUSTHI JRST MUSTHI ;BETTER PRINT HI HRLZ T,LINL IDIV T,LOUTL MOVM T,T HRLZ TT,LINH IDIV TT,LOUTH MOVM TT,TT CAMGE TT,T JRST NOHIPN MUSTHI: TLO TFLG PUTBYT "(" MOVE T,LINH PUSHJ P,LDOUT PUTBYT ")" NOHIPN: PUTBYT "/" MOVE T,LOUTL PUSHJ P,LDOUT TLNN TFLG JRST NOTOUT PULNLY: PUTBYT "(" MOVE T,LOUTH PUSHJ P,LDOUT PUTBYT ")" NOTOUT: ROUTE,< TRNN DOROUTE JRST NOTLEN SKIPE T,INCHES ;ANY TOTAL WIRE LENGTH? CAMN T,WIRELN ;ONLY PRINT IF DIFFERENT FROM LAST JRST NOTLEN MOVEM T,WIRELN PUSH P,A MOVEI A,=48 PUSHJ P,FILL POP P,A PUSHJ P,DOWLEN >;ROUTE NOTLEN: MOVSI F,-SUMLEN PUSHJ P,ERRLOP ERDONE: SKIPE LCOUNT ;AT LEFT? CRLF ;NO, GET THERE POPJ P, ; HEADER SUBRS PUTHDR: TLZN NOFF PUTSTR[BYTE(7)15,14] PUSH P,A MOVN TTT,PAGLEN ADD TTT,MARGIN MOVEM TTT,LINCNT FETCH(A,L,WLNM) ;NAME OF WIRE LIST SETZM TCOUNT PUSHJ P,STROUT PUSHJ P,PNTBRW ;PRINT BAY-RACK-SLOT POP P,A CRLF PUTSTR @HEADER PUTSTR[ASCIZ/ /] POPJ P, ;TITLE PARAMETERS FNPOS__=32 ;4 COLUMNS FOR WIRE LIST TITLE DTPOS__FNPOS+=24 ;SO THE LINE OVERFLOWS IF DEC HAS LARGEST NAME CLPOS__DTPOS+=24 PNTBRW: FETCH(A,W,FCRD) PNTBRS: PUSH P,A PUSHJ P,PNTFDT SKIPN (P) JRST [ POP P,(P) POPJ P,] MOVEI A,CLPOS PUSHJ P,FILL POP P,A JRST SLTOUT PNTFDT: SKIPE TTYFLG POPJ P, SKIPN PNTNAM JRST PNTDT MOVEI A,FNPOS PUSHJ P,FILL MOVEI A,PNTNAM PUSHJ P,FILPNT PNTDT: MOVEI A,DTPOS PUSHJ P,FILL DATE A, ;DATE HRLZ A,A MSTIME T, IDIVI T,=60*=1000 ;TIME IN MINUTES HRR A,T PRNTDT: HLRZ T,A IDIVI T,=31 HRLM T,(P) MOVEI T,1(TT) IDIVI T,=10 PUTBYT 60(T) PUTBYT 60(TT) PUTBYT "-" HLRZ T,(P) IDIVI T,=12 HRLM T,(P) PUTSTR DATES(TT) HLRZ T,(P) ADDI T,=64 IDIVI T,=10 PUTBYT 60(T) PUTBYT 60(TT) PUTSTR[ASCIZ/ /] HRRZ T,A IDIVI T,=60*=10 PUTBYT 60(T) MOVE T,TT IDIVI T,=60 PUTBYT 60(T) MOVE T,TT IDIVI T,=10 PUTBYT 60(T) PUTBYT 60(TT) POPJ P, DATES: ASCIZ/JAN-/ ASCIZ/FEB-/ ASCIZ/MAR-/ ASCIZ/APR-/ ASCIZ/MAY-/ ASCIZ/JUN-/ ASCIZ/JUL-/ ASCIZ/AUG-/ ASCIZ/SEP-/ ASCIZ/OCT-/ ASCIZ/NOV-/ ASCIZ/DEC-/ FILLST: SKIPE TTYFLG ;NOT TO TTY JRST CPOPJ1 TFILES: PUSH P,@(P) ;SAVE HEADER DISPATCH ON STACK PUSH P,B TRNN ISBACK FETCH(B,W,FILS) TRNE ISBACK FETCH(B,L,BKNM) JUMPE B,FILLS2 MOVEI T,[ASCIZ/FILNAM.EXT[P,PN] DATE TIME MODULE(DWG NUM) REV AUTHOR TITLE 1 PROJECT NOMENCLATURE TITLE 2 SHEET n OF m BOARD TYPE CARD LOC(VARIABLE SETTINGS) NEXT HIGHER ASSEMBLY/] MOVEM T,HEADER ITS,< SKIPE XGP PUSHJ P,XGPSTR ;PUT XGP INFO OUT >;ITS MOVEI T,FILMAR ;FILENAME LIST MARGIN MOVEM T,MARGIN SETZM LINCNT ;ALWAYS START NEW PAGE FILLS1: SKIPL LINCNT PUSHJ P,@-1(P) PUSHJ P,FBLKPN FETCH(B,B,FNXT) JUMPN B,FILLS1 FILLS2: POP P,B POP P,(P) JRST CPOPJ1 FBLKPN: PUSH P,A PUTSIX ADDR(B,FILN) PUTBYT "." FETCH(A,B,FEXT) HRLZ A,A PUTSIX A PUTBYT "[" SETZM TCOUNT FETCH(TT,B,FPPN) NOCMU,< HLLZ TT,TT PUSHJ P,LSIXOUT PUTBYT "," FETCH(TT,B,FPPN) HRLZ TT,TT PUSHJ P,LSIXOUT >;NOCMU CMU,< MOVE TTT,[TT,,PPNBUF] DECCMU TTT, JRST [ PUTSIX ADDR(B,FPPN) JRST .+2] PUTSTR PPNBUF >;CMU PUTBYT "]" MOVEI A,=24 PUSHJ P,FILL FETCH(A,B,FDAT) SKIPE A PUSHJ P,PRNTDT PUTBYT 11 FETCH(A,B,FMOD) PUSHJ P,STROUT FETCH(A,B,FVAR) JUMPE A,NPVAR PUTBYT "-" PUSHJ P,STROUT NPVAR: FETCH(A,B,FPRF) JUMPE A,NPPRF PUTBYT "-" PUSHJ P,STROUT NPPRF: MOVEI A,=56 PUSHJ P,FILL FETCH(A,B,FREV) PUSHJ P,STROUT FETCH(A,B,AUTHOR) PUTBYT 11 PUSHJ P,STROUT CRLF FETCH(A,B,TIT1) JUMPE A,NOTIT1 PUTBYT 11 PUSHJ P,STROUT NOTIT1: FETCH(A,B,FPROJ) JUMPE A,NOPROJ MOVEI A,=40 PUSHJ P,FILL FETCH(A,B,FPROJ) PUSHJ P,STROUT NOPROJ: FETCH(A,B,FNOM) JUMPE A,NONOM MOVEI A,=56 PUSHJ P,FILL FETCH(A,B,FNOM) PUSHJ P,STROUT NONOM: CRLF FETCH(A,B,TIT2) JUMPE A,NOTIT2 PUTBYT 11 PUSHJ P,STROUT NOTIT2: FETCH(A,B,FPAGE) JUMPN A,ISPAGE FETCH(A,B,FOF) JUMPE A,NOPAGE ISPAGE: MOVEI A,=40 PUSHJ P,FILL PUTSTR[ASCIZ/SHEET /] FETCH(A,B,FPAGE) JUMPE A,.+2 PUSHJ P,STROUT FETCH(A,B,FOF) JUMPE A,NOPAGE PUTSTR[ASCIZ/ OF /] PUSHJ P,STROUT NOPAGE: FETCH(A,B,FWWT) JUMPE A,NOWWT MOVEI A,=56 PUSHJ P,FILL FETCH(A,B,FWWT) PUSHJ P,STROUT NOWWT: CRLF FETCH(T,B,MCRD) HRLZM T,SLICEL FETCH(T,B,MVLS) MOVEM T,VARLST SKIPN SLICEL ;IS THERE A CARD LOC JUMPE T,NOTIT3 ;NO, JUMP IF NO VARIABLES EITHER FETCH(T,B,MUBN) MOVEM T,UPPER FETCH(T,B,MLBN) MOVEM T,LOWER PUSHJ P,PSLVAR NOTIT3: FETCH(A,B,FNXH) JUMPE A,NONXH MOVEI A,=40 PUSHJ P,FILL FETCH(A,B,FNXH) PUSHJ P,STROUT NONXH: CRLF POPAJ: POP P,A POPJ P, ITS,< ;PUT XGP INFO ON FIRST PAGE FOR ITS XGP SYSTEM XGPSTR: SETZM MARGIN ;FLUSH AGAINST THE LEFT MARGIN MOVNI T,STDPAG ;AVOID AN EXTRANEOUS FORM FEED MOVEM T,LINCNT PUTSTR [ASCIZ /;SKIP 1 ;TOPMAR 128 ;BOTMAR 0 ;VSP /] SKIPN T,XGPVSP MOVEI T,6 ;COUGH UP REASONABLE DEFAULT PUSHJ P,DECOUT PUTSTR [ASCIZ / ;KSET DSK:/] SKIPN T,XGPPPN MOVE T,[SIXBIT /FONTS/] PUTSIX T PUTBYT ";" SKIPN T,XGPFNT MOVE T,[SIXBIT /25FG/] PUTSIX T PUTBYT 40 SKIPN T,XGPEXT MOVE T,[SIXBIT /KST/] PUTSIX T PUTSTR [BYTE (7) 15,12] PUTBYT 14 ;THROW IN A FORM FEED POPJ P, >;ITS ; BACK PANEL LISTING SUBRS BAKLOP: SETOM CONFLG ;AOS THIS FLAG IF MORE THAN ONE CARD MOVEM G,WIRTMP ;WIRE HEADER FETCH(G,G,WPIN) ;THERE HAS TO BE AT LEAST ONE! JUMPE G,BAKLP0 MOVE T,LCOUNT CAIL T,8 BAKLP1: CRLF PUSHJ P,SLIT FETCH(G,G,NXTP) JUMPN G,BAKLP1 BAKLP0: MOVE G,WIRTMP TLO DOLC!BAKGAT PUSHJ P,LOPSET PUSHJ P,GATHER PUSHJ P,LODMER ;DO LOADING CALC MOVE G,WIRTMP FETCH(T,G,WRN) JUMPE T,NBAKWR PUSH P,A MOVEI A,=8 CAMG A,LCOUNT CRLF PUSHJ P,FILL PUTSTR[ASCIZ/WR = /] FETCH(T,G,WRN) PUSHJ P,DECOUT POP P,A NBAKWR: TLNE A,SNC ;NO CONNECTION? JRST BAKSNC ;YES SKIPG CONFLG ;MORE THAN 1 CARD? JRST NOSUMB ;NO, NO SUMMARY LINE PUSH P,A MOVEI A,=24 CAMG A,LCOUNT CRLF PUSHJ P,FILL POP P,A PUSHJ P,PNTYPE PUSHJ P,CLOADS NOSUMB: MOVE F,[-NBLEN,,SUMLEN] PUSHJ P,ERRLOP JRST ERDONE ;SLIT - PRINT BACKPANEL PIN (G) ;" B-R-S post Qletter type-load WD-file X,Y source-file" SLIT: FETCH(F,G,PBDY) PUTBYT 11 FETCH(A,F,BLOC) ;B-R-S TO A PUSHJ P,SLTOUT PUTBYT 11 FETCH(A,G,PINN) PUSHJ P,PRBCN ;PRINT LOC AS BACKPANEL POST, NOT CARD-LOC/PIN FETCH(T,G,PBIT) ANDI T,QBITS ;EXTRACT Q LETTER FROM BITS JUMPE T,NOBAKQ ;IS THERE ONE? MOVEI A,=22 SUB A,LCOUNT CAIA PUTBYT 40 SOJGE A,.-1 PUTBYT @QN2L(T) NOBAKQ: PUTBYT 11 FETCH(A,G,PBIT) TRNE A,DUP TDZA A,A FETCH(A,G,CBIT) ;CON/CARD BITS JUMPE A,[PUTSTR[ASCIZ/ /] JRST SLIT3] AOS CONFLG ;AOS THIS TO INDICATE ANOTHER CARD PUSHJ P,PNTYPE ;PRINT DIPPIN TYPE BITS, (I,O,N...) MOVE C,G PUSHJ P,LOADIT ;PRINT LOADING FOR PIN SLIT3: PUTBYT 11 FETCH(A,G,FILP) PUTSIX ADDR(A,FILN) ;FILENAME PUTBYT 11 FETCH(A,G,PBIT) PUSHJ P,CNPNT ;PRINT APPROX DRAWING X,Y FETCH(A,G,FILO) ;SOURCE FILE BLOCK POINTER JUMPE A,CPOPJ ;DONE IF NONE PUTBYT 11 PUTSIX ADDR(A,FILN) ;FILENAME POPJ P, ;LOADIT - PRINT LOADING FOR BACKPANEL PIN (C) ; (ACCUMULATE TOTAL LOADING) LOADIT: FETCH(T,C,LILD) ADDM T,LINL ;GATHER LOADING FOR BS FILE OUTPUT PUSHJ P,SLITLH FETCH(T,C,HILD) ADDM T,LINH PUSHJ P,SLITLH FETCH(T,C,LOLD) ADDM T,LOUTL PUSHJ P,SLITLH FETCH(T,C,HOLD) ADDM T,LOUTH JRST SLITLH CLOADS: MOVE T,LINL PUSHJ P,SLITLH MOVE T,LINH PUSHJ P,SLITLH MOVE T,LOUTL PUSHJ P,SLITLH MOVE T,LOUTH SLITLH: PUTBYT 11 PUSHJ P,LDOUT POPJ P, BAKSNC: PUSH P,A MOVEI A,=24 CAMG A,LCOUNT CRLF PUSHJ P,FILL POP P,A PUTSTR [ASCIZ /THIS RUN IS NOT TO BE WIRED/] JRST ERDONE SUBTTL 'WLS' 'BS' 'LES' SETUP, BODY SUMMARIES ;HERE WE GENERATE A WIRE LIST SUMMARY! ALLWLS: TRZA ISBACK ALLBS: TRO ISBACK TDZ [ASKHIM,,DOERRS] JRST SUMALL ERRSUM: TRZ ISBACK TRO DOERRS JRST ALLSUM BSSEL: TLOA ASKHIM BACSUM: TLZ ASKHIM TRO ISBACK JRST ALLSUM WLSSEL: TLOA ASKHIM SUMLST: TLZ ASKHIM TRZ ISBACK TRZ DOERRS ALLSUM: SETZM ALLNAM SETZM ALLCRD SUMALL: MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR MOVE L,DEFLST TRNE ISBACK JRST [ FETCH(W,L,BLST) JUMPE W,XBAK MOVSI T,'BS ' MOVEI TT,0 JRST DOBS] SKIPE T,ALLCRD JRST [ MOVEM T,SLICEL JRST GALCRD] PUSHJ P,LSTGET POPJ P, GALCRD: PUSHJ P,CLEARP TRNE DOERRS JRST [ MOVSI T,'LES' MOVEI TT,10 ;FULL WORD MODE JRST DOBS] MOVSI T,'WLS' ;WIRE LIST SUMMARY FILE EXTENSION MOVEI TT,0 ;DATA MODE DOBS: MOVSI TTT,'DSK' PUSHJ P,ALLSET POPJ P, MOVEI TTT,LESVER TRNE DOERRS PUSHJ P,WORDOUT ;WRITE VERSION # TRNE DOERRS JRST NOFLST PUSHJ P,FILLST PUTHDR NOFLST: ; CARD DIP SUMMARY TRNE ISBACK!DOERRS JRST NODIPS ;SKIP FIRST PART FOR BACK PANEL TLNN ASKHIM JRST DOBSUM SKIPE TTYFLG CLOSE LST, ;FORCE OUTPUT IF TTY ASK[ASCIZ\DIPTYPE/BODY SUMMARY?\] JRST WLSQT JRST NODIPS DOBSUM: MOVEI T,[ASCIZ/DIPTYPE BODY NAME # SECTION TOTAL DIPS #SPARE SECTIONS MA @V/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WSBMAR MOVEM T,MARGIN PUSHJ P,CLEARB ;CLEAR MARK BIT FOR BODIES PUSHJ P,DCLEAR ;CLEAR DIP COUNTS PUSHJ P,DCNTW ;COUNT ASSIGNED DIPS PUSHJ P,AMPRET ;RETURN CURRENT@VOLTAGE LIST SETZM TOTDIP ;ZERO TOTAL DIP COUNTER SETZM REALDV ;CLEAR REAL(.GE.14 PINS) DIP COUNT SETZM TMPCN1 ;ASSIGNED TOTDIP SETZM TMPCN2 ;ASSIGNED REALDV SKIPN H,DIPLST ;PREPARE TO RUN DOWN DIPLST JRST NODIPC ;NONE NODIP1: PUSHJ P,NXTDIP FETCH(H,H,NXTD) JUMPN H,NODIP1 SKIPN TOTDIP ;ANY DIPS AT ALL? SKIPE TMPCN1 CAIA JRST NTOTDP PUTSTR[ASCIZ/ GRAND TOTAL = /] MOVE T,TOTDIP PUSHJ P,DECOUT PUTBYT "(" MOVE T,REALDV PUSHJ P,DECOUT SKIPN T,TMPCN1 JRST NODIP2 PUTSTR[ASCIZ/) WITH LOCATION= /] MOVE T,TMPCN1 PUSHJ P,DECOUT PUTBYT "(" MOVE T,TMPCN2 PUSHJ P,DECOUT NODIP2: PUTSTR[ASCIZ/) NUMBER IN PARENS IS REAL (.GE.14 PINS) DIPS. /] NTOTDP: SKIPN G,AMPLST ;ANY CURRENTS? JRST NOCURN ;NO PUTSTR[ASCIZ/TOTAL CURRENTS: /] CURN1: FETCH(T,G,MAMP) SETZM TCOUNT PUSHJ P,LDOUT PUTSTR[ASCIZ/MA/] MOVE T,TCOUNT CAIGE T,8 PUTBYT 11 PUTSTR[ASCIZ/ @/] FETCH(T,G,VLTS) PUSHJ P,LDOUT PUTSTR[ASCIZ/V /] FETCH(G,G,NXTM) JUMPN G,CURN1 CRLF CRLF PUSHJ P,AMPRET ;NOW GIVE BACK LIST NOCURN: SETZ H, PUSHJ P,NXTDIP ;LIST ALL UNASSIGNED DIPS! NODIPC: MOVEI H,RADDR(W,WBDY,NXTB) TLZ TFLG SETZM NDIPS SETOM NBODS JRST DIPC1 DIPC2: FETCH(T,H,BBIT) TRNN T,CBODY JRST DIPC1 ;NOT CON TLON TFLG PUTSTR[ASCIZ/CONS PADDLE # PINS TOTAL PINS /] AOSE NBODS CRLF PUTSTR[ASCIZ/ "/] FETCH(A,H,BLOC) PUSHJ P,WLOCOUT PUTBYT 42 FETCH(G,H,BPIN) ;CON PIN LIST JUMPE G,DIPC1 PUTSTR[ASCIZ/ /] SETZ T, DIPC3: FETCH(TT,G,PBIT) TRNN TT,DUP ;DON'T COUNT DUPS ADDI T,1 ;COUNT THEM FETCH(G,G,NXBP) ;NEXT PIN OF CON JUMPN G,DIPC3 ADDM T,NDIPS ;ADD TO TOTAL PUSHJ P,DECOUT ;PRINT THESE DIPC1: FETCH(H,H,NXTB) ;NEXT BODY JUMPN H,DIPC2 TLNN TFLG JRST NODIPS PUTSTR[ASCIZ/ /] MOVE T,NDIPS PUSHJ P,DECOUT CRLF JRST NODIPS ;NXTDIP - SUMMARIZE NO. OF SECTIONS FOR DIP TYPE (H) NXTDIP: TLZ TFLG ;NOTE NONE FOUND YET! SETZM SAVET SETZM NBODS SETZM NDIPS SETZM RBODS JUMPE H,[SETO F, ;FLAG NO DIP DEF JRST BLANKD] DIPCHECK PUSHJ P,SECCAL ;CALC SEC/DIP BLANKD: MOVEM F,FACTR1 ;SAVE HERE MOVEI G,RADDR(W,WBDY,NXTB) JRST NXTDP1 ;Summarize for all body names that are really this DIPTYPE NXTDP2: FETCH(T,G,BBIT) ;LOC TRNE T,CBODY ;CON? JRST NXTDP1 ;YES, SKIP IT FETCH(T,G,DIPT) ;POINTER TO DIP TYPE CAME T,H ;SAME DIP? JRST NXTDP1 ;NO FETCH(T,G,BBIT) ;GET BODY BITS TROE T,BTMP1 ;MARK AND CHECK JRST NXTDP1 ;DONE ALREADY, FIND ANOTHER STORE(T,G,BBIT) TLOE TFLG ;PUT OUT DIP NAME YET? JRST NXTDP4 ;YES, SUMMARIZE LAST BODY SKIPL LINCNT PUSHJ P,PUTHDR JUMPE H,NXTDP5 FETCH(A,H,DNAM) PUSHJ P,PRINT7 ;NO, PRINT DIP NAME JRST NXTDP5 NXTDP4: MOVE T,TCOUNT CAIGE T,8 PUTBYT 11 PUTSTR[ASCIZ/ /] MOVE T,NBODS ADDM T,NDIPS PUSHJ P,DECOUT SETZM NBODS CRLF ;Summarize on one line the section usage for one body that is the current DIPTYPE NXTDP5: PUTBYT 11 MOVEI A,ADDR(G,BNAM) MOVEM A,SAVET ;REMEMBER THIS GUY SETZM TCOUNT PUTSTR ADDR(G,BNAM) ;BODY NAME (THAT IS OF THE CURRENT DIP TYPE) MOVE F,G ;NOW GO DOWN FROM HERE JRST NXTDP6 ;Find next instance of same body NXTDP7: FETCH(T,F,BBIT) TRNE T,CBODY ;CON? JRST NXTDP8 ;YES, SKIP IT FETCH(T,F,DIPT) CAME T,H JRST NXTDP8 MOVEI T,ADDR(F,BNAM) MOVE TT,SAVET PUSHJ P,SEQMAT ;SAME BODY? JRST NXTDP8 ;NOT EQUAL JRST NXTDP8 ; " FETCH(T,F,BBIT) TROE T,BTMP1 JRST NXTDP8 STORE(T,F,BBIT) NXTDP6: SKIPG T,FACTR1 ;1 SEC/DIP? (OR NONE?) JRST [ MOVEI T,1 ;COUNT 1 BODY JRST ONESEC] ;See how many sections this body uses MOVEI A,RADDR(F,BPIN,NXBP) SETZB T,FACTR2 ;ACCUMULATE BITS HERE JRST SECCL1 SECCL2: FETCH(TT,A,PTYP) JUMPE TT,SECCL1 ;ANY TYPE POINTER FETCH(TTT,TT,DPBIT) TRNN TTT,INLD!OUTLD!TERM ;INPUT OR OUTPUT PINS? JRST SECCL1 ;NO FETCH(TT,TT,SCTB) ;SECTION BITS MOVE TTT,TT ANDI TTT,-1(TT) ;FOR NOW, ONLY COUNT PINS THAT ARE WHOLLY JUMPN TTT,SECCL1 ; WITHIN ONE SECTION MOVS TT,TT JFFO TT,.+2 JRST SECCL1 MOVE TTT,SCTTAB(TTT) TDOE TTT,FACTR2 ;ANY IN THIS SEC YET? JRST SECCL1 ;YES MOVEM TTT,FACTR2 ADDI T,1 ;COUNT ANOTHER NEW SEC IN THIS BODY SECCL1: FETCH(A,A,NXBP) JUMPN A,SECCL2 ONESEC: ADDM T,NBODS ;ADD TO COUNT FETCH(TT,F,BLOC) JUMPE TT,NXTDP8 ADDM T,RBODS NXTDP8: FETCH(F,F,NXTB) JUMPN F,NXTDP7 NXTDP1: FETCH(G,G,NXTB) JUMPN G,NXTDP2 TLNN TFLG ;DID WE FIND ANY? POPJ P, ;NO MOVE T,TCOUNT CAIGE T,=8 PUTBYT 11 PUTSTR[ASCIZ/ /] MOVE T,NBODS ADDB T,NDIPS EXCH T,NBODS ;STORE TOTAL BODIES, GET CURRENT NUMBER PUSHJ P,DECOUT PUTSTR[ASCIZ/ /] MOVE T,NDIPS SKIPGE FACTR1 ;BODIES ONLY? JRST NODEF ADD T,FACTR1 ;ADD # OF SEC'S -1 AOS FACTR1 ;MAKE IT # OF SEC'S IDIV T,FACTR1 MOVEM T,NDIPS ;SAVE # OF DIPS ADDM T,TOTDIP ;ADD TOTAL DIPS JUMPE H,NTREAL FETCH(TTT,H,DPNN) CAIL TTT,=14 ;IS THIS REAL (.GE.14 PINS) ADDM T,REALDV ;YES, COUNT IT NTREAL: SUB TT,FACTR1 MOVN TT,TT HRLM TT,(P) PUSHJ P,DECOUT PUTSTR[ASCIZ/ /] HLRZ T,(P) SUBI T,1 PUSHJ P,DECOUT JUMPE H,NODEF0 MOVE T,NBODS CAME T,RBODS ;IF ALL BODIES HAVE LOCS, PRINT LATER PUSHJ P,AMPL ;THEN PRINT CURRENT AND ADD TO TOTAL SKIPN RBODS ;ANY REAL BODIES? JRST NODEF0 ;NO PUTSTR[ASCIZ/ WITH LOCATIONS /] MOVE T,RBODS PUSHJ P,DECOUT PUTSTR[ASCIZ/ /] FETCH(T,H,DTMP) PUSHJ P,DECOUT PUTSTR[ASCIZ/ /] FETCH(T,H,DTMP) IMUL T,FACTR1 SUB T,RBODS PUSHJ P,DECOUT FETCH(T,H,DTMP) MOVEM T,NDIPS ;SAVE HERE FOR AMPL ADDM T,TMPCN1 FETCH(TTT,H,DPNN) CAIL TTT,=14 ;IS THIS REAL(.GE.14 PINS) ADDM T,TMPCN2 ;YES JUMPE T,NODEF0 ;QUIT NOW IF NO REAL DIPS MOVE T,NBODS CAMN T,RBODS ;NO PRINT IF NOT ALL BODIES HAVE LOC PUSHJ P,AMPL ;LIST AMPS HERE, AND TOTAL JRST NODEF0 AMPL: PUTBYT 11 MOVEI G,RADDR(H,DPIN,DPNXT) JRST AMPL2 AMPL1: FETCH(T,G,DPBIT) TRNN T,PWR ;POWER PIN? JRST AMPL2 ;NO FETCH(T,G,LLOW) ;GET VOLTAGE MOVEI B,AMPLST-ADDR(0,NXTM) JRST AMPL3 AMPL4: FETCH(TT,B,VLTS) ;GET VOLTS FROM LIST CAMGE TT,T ;TO RIGHT ENTRY YET? JRST AMPL5 ;PASSED IT. CAMN TT,T ;PERHAPS THERE NOW? JRST AMPL6 ;YES AMPL3: MOVE A,B ;REMEMBER PREVIOUS FETCH(B,B,NXTM) ;GET NEXT JUMPN B,AMPL4 ;LOOP IF THERE IS ONE AMPL5: GETFS(TT,MABLK) ;NO ENTRY FOR THIS VOLTAGE, MAKE ONE STORE(B,TT,NXTM) ;SET NEXT MOVE B,TT STORE(B,A,NXTM) ;MAKE US NEXT OF LAST STORE(T,B,VLTS) ;STORE VOLTAGE CLEAR(B,MAMP) ;CLEAR CURRENT AMPL6: FETCH(T,G,LHI) ;PWR SUPPLY CURRENT IMUL T,NDIPS FETCH(TT,B,MAMP) ;GET CURRENT ADD TT,T ;ADD TO TOTAL STORE(TT,B,MAMP) ;STORE TOTAL BACK IN BLOCK PUSH P,T PUTBYT 11 ;SPACE OUT SOME POP P,T SETZM TCOUNT PUSHJ P,LDOUT ;PRINT CURRENT PUTSTR[ASCIZ/MA/] MOVE T,TCOUNT CAIGE T,8 PUTBYT 11 PUTSTR[ASCIZ/ @/] FETCH(T,G,LLOW) ;GET VOLTAGE AGAIN PUSHJ P,LDOUT PUTBYT "V" AMPL2: FETCH(G,G,NXTDP) ;NEXT DIP PIN JUMPN G,AMPL1 POPJ P, NODEF: PUSHJ P,DECOUT ;AND PRINT # OF DIPS PUTSTR[ASCIZ/ TOTAL BODIES (NOT DIPS)/] NODEF0: CRLF CRLF POPJ P, AMPRET: SKIPN T,AMPLST POPJ P, AMPRT1: FETCH(TT,T,NXTM) FSTRET(T,MABLK) MOVE T,TT JUMPN T,AMPRT1 SETZM AMPLST POPJ P, ;COUNT ASSIGNED DIPS DCNTW: SETZM LSLOT SETZM CDSKPC MOVEI H,RADDR(W,WBDY,NXTB) JRST DCNT3 DCNT4: FETCH(T,H,BLOC) JUMPE T,[AOS CDSKPC ;INC COUNT OF UNLOC'D DIPS JRST DCNT3] EXCH T,LSLOT CAMN T,LSLOT ;NEW SLOT? JRST DCNT3 FETCH(A,H,DIPT) ;DIP POINTER JUMPE A,DCNT3 ;ANY? FETCH(T,A,DTMP) ADDI T,1 ;INC COUNT STORE(T,A,DTMP) DCNT3: FETCH(H,H,NXTB) JUMPN H,DCNT4 POPJ P, NODIPS: ; VERIFICATION STUFF TRNE ISBACK!DOERRS JRST VERDON TLNN ASKHIM JRST VER0 SKIPE TTYFLG CLOSE LST, ;FORCE OUTPUT IF TTY ASK[ASCIZ\BODY/DIP SOCKET MATCHING ERRORS?\] JRST WLSQT JRST VERDON VER0: MOVEI T,[ASCIZ\ BODY/DIP SOCKET MATCHING ERRORS LOC DIP(S) BODY(S) FILE POS PIN\] MOVEM T,HEADER MOVEI T,WVMAR MOVEM T,MARGIN SETZM LINCNT ;FORCE NEW PAGE SETZM GOODW ;Go through all bodies in wirelist FETCH(H,W,WBDY) VER1: JUMPE H,VERDON ; Build list (GOODW) of bodies in same loc SKIPE B,GOODW PUSHJ P,TRET SETZM GOODW ;USE THIS AS LIST HEAD SETZM BADW ;CURRENT DIP POINTER SETZM SLICEL ;CURRENT LOC TLZ TFLG ;FLAG LOC NOT OUT YET VER2: FETCH(TT,H,BBIT) TRNE TT,CBODY ;CON? JRST[ SKIPE GOODW ;YES, ANY OTHER BODIES IN LIST YET? JRST VER5 ;YES, JUST DO THEM JRST VER3] FETCH(TT,H,BLOC) JUMPE TT,[SKIPL LINCNT PUSHJ P,PUTHDR MOVE E,H PUSHJ P,VERLIN ERRSTR 1,[ASCIZ/NO LOCATION SET/] MOVE F,H ;PUT BODY POINTER INTO F SETZM UPINS ;CLEAR USED PIN POINTERS MOVE T,[UPINS,,UPINS+1] BLT T,UPINS+MAXPINS-1 ;WHOLE TABLE PUSH P,SLICEL SETZM SLICEL PUSHJ P,VERP6 POP P,SLICEL JRST VER3] SKIPN SLICEL JRST VER4 CAME TT,SLICEL JRST VER5 ;WE HAVE LIST VER4: MOVEM TT,SLICEL PGETFS(TT,TBLK) STORE(H,TT,TRHT) ;STORE BODY IN RIGHT HALF MOVE T,GOODW STORE(T,TT,NXTT) MOVEM TT,GOODW VER3: FETCH(H,H,NXTB) JUMPN H,VER2 ; Now check all bodies for same DIPTYPE VER5: SKIPN G,GOODW JRST VERDON ;IF NOTHING IN LIST, ALL DONE! VER6: FETCH(TT,G,TRHT) ;GET DIP POINTER FETCH(TT,TT,DIPT) SKIPN BADW ;ANY YET? JRST VER7 CAME TT,BADW ;YES, SAME? JRST [ PUSHJ P,VERALL ERRSTR 3,[ASCIZ/MULTIPLE DIP TYPES/] JRST VERPCK] ;NOW CHECK FOR BAD PINS VER7: MOVEM TT,BADW FETCH(G,G,NXTT) JUMPN G,VER6 SKIPE BADW ;DID THEY HAVE A DIPTYPE? JRST VERPCK ; No DIPTYPE for body, complain bitterly NANYDP: PUSHJ P,VERLOC SKIPA G,GOODW NANYD1: CRLF FETCH(E,G,TRHT) PUTBYT 11 FETCH(A,E,DIPT) ;DIP TYPE POINTER JUMPE A,NANYD2 FETCH(A,A,DNAM) PUSHJ P,STROUT JRST NANYD3 NANYD2: FETCH(A,E,PRPX) ;LOOK IN EXTRA PROPERTY LIST FOR DIPTYPE JUMPE A,NANYD3 NANYD4: FETCH(T,A,TLFT) MOVEI TT,[ASCIZ/DIPTYPE/] PUSHJ P,ASCMAT JRST NANYD5 FETCH(A,A,TRHT) PUSHJ P,STROUT JRST NANYD3 NANYD5: FETCH(A,A,NXTT) JUMPN A,NANYD4 NANYD3: PUSHJ P,VERER3 FETCH(G,G,NXTT) JUMPN G,NANYD1 ERRSTR 3,[ASCIZ/MISSING OR UNKNOWN DIPTYPE/] JRST VERPCK ;Check pins on DIP for too big, incompletely used sections,... ;(GOODW has list of bodies in same loc) VERPCK: MOVE G,GOODW ;NOW CHECK EACH PIN OF DIP SETZM UPINS ;CLEAR USED PIN POINTERS MOVE T,[UPINS,,UPINS+1] BLT T,UPINS+MAXPINS-1 ;WHOLE TABLE VERP1: FETCH(F,G,TRHT) ;BODY POINTER PUSHJ P,VERP6 FETCH(G,G,NXTT) JUMPN G,VERP1 ;ANOTHER BODY JRST VER1 ;VERP6 - check pins on a single body ;f = body ;SLICEL = socket location of body VERP6: MOVEM F,SAVET MOVE A,F PUSHJ P,MAXDPN ;FIND HOW MANY PINS ON DIP CAILE T,MAXPIN JRST [ PUSHJ P,VERLNA PUSHJ P,DECOUT ERRSTR 3,[ASCIZ / TOO MANY PINS IN DIP DEFINITION!/] POPJ P,] MOVEM T,FACTR1 ;SIZE OF DIP TO CHECK PINS AGAINST MOVEI F,RADDR(F,BPIN,NXBP);PREPARE TO GO DOWN BODY PIN LIST JRST VERP3 VERP2: SKIPN SLICEL ;ONLY CHECK PIDPIN IF WE HAVE LOC JRST VERPOK FETCH(T,F,PBIT) TRNE T,PIDPIN ;REALLY JUST PID? JRST [ FETCH(T,F,PINN) PUSHJ P,VERLNA PUSHJ P,DECOUT ERRSTR 1,[ASCIZ/DEFAULT, NOT EXPLICIT PIN #/] JRST .+1] ;It would be nice to be able to check if the pin assignment ;is legal given the DIP definition, but we don't ;have the information in the WD file as to the default ;pin name of each body pin ;Check to see if any dedicated pwr/gnd pins on W/W boards conflict with DIPs MOVE B,SAVET ;Body FETCH(B,B,BPAK) MOVE A,SLICEL ;Slot location FETCH(T,F,PINN) HRL A,T PUSHJ P,MAPOST ;GET SOCKET ON BOARD WHERE THIS WILL BE JRST VERPOK ;CAN'T FIND BOARD PIN?? PUSHJ P,PINBIT TLNN TT,PWR!GND JRST VERPOK ;Board is committed to PWR,GND, see if that is exactly the signal called for FETCH(E,F,HPNT) ;Wire header FETCH(TTT,E,WBIT) TLNE TT,GND ;BOARD HAS GND HERE? JRST [ TRNE TTT,SGND ;And that's whats caled for? JRST VERGN1 MOVEI A,[ASCIZ /BOARD HAS GND ON THIS PIN/] JRST VERGN2] VERGN1: TLNN TT,PWR ;BOARD HAS PWR HERE? JRST VERPOK MOVEI A,[ASCIZ/BOARD HAS PWR ON THIS PIN/] TRNN TTT,SPWR ;Signal is name of a voltage? JRST VERGN2 FETCH(TTT,E,WVOL) ;POWER SUPPLY VOLTAGE HERE CAIN TTT,(TT) JRST VERPOK VERGN2: PUSH P,A PUSHJ P,VERLNA FETCH(T,F,PINN) PUSHJ P,DECOUT POP P,A ERRSTR 1,(A) ;Pin checked for conflicts with PWR/GND, now check pin#, type VERPOK: FETCH(T,F,PINN) MOVE TT,F CAMG T,FACTR1 ;LARGER PIN # THAN #PINS ON DIP? CAILE T,MAXPIN ;OVERFLOW TABLE? JRST [ PUSHJ P,VERLNA PUSHJ P,DECOUT ERRSTR 0,[ASCIZ/PIN # TOO BIG FOR DIP/] JRST VERP3] FETCH(A,F,PTYP) ;PIN TYPE BLOCK JUMPE A,VERP4 ;ANY? FETCH(TTT,A,DPBIT) TRNE TTT,NULLD JRST VERP4 TRNN TTT,INLD!OUTLD!TERM JRST VERP5 FETCH(TTT,A,SCTB) HRL TT,TTT ;PICKUP SECTION BITS VERP5: EXCH TT,UPINS-1(T) ;STORE BITS AND PIN POINTER JUMPN TT,[FETCH(A,TT,HPNT) ;GET HEADER FOR ONE PIN FETCH(E,F,HPNT) ;AND THE OTHER CAMN A,E ;SAME WIRE MEANS DUP JRST VERP3 PUSH P,TT ;SAVE FIRST PIN FOUND THERE PUSHJ P,VERLNA PUSHJ P,DECOUT CRLF POP P,E ;GET FIRST PIN POINTER FETCH(E,E,PBDY) ;BODY OF THIS PIN PUSHJ P,VERLIN ;DON'T REPEAT PIN # ERRSTR 2,[ASCIZ/PIN # USED MORE THAN ONCE/] JRST VERP3] VERP3: FETCH(F,F,NXBP) JUMPN F,VERP2 ; Now check to see if all pins of each used section are used MOVE F,SAVET FETCH(F,F,DIPT) JUMPE F,CPOPJ SETOM FACTR2 ;ASSUME ALL SECTIONS INCLUDED INITIALLY MOVEI F,RADDR(F,DPIN,DPNXT) JRST VERP8 VERP7: FETCH(T,F,DPNM) CAIG T,MAXPIN SKIPE UPINS-1(T) ;Previously setup, SCTB,,WHEAD of this pin if non-zero JRST VERP8 FETCH(TT,F,SCTB) ANDCAM TT,FACTR2 ;CAN'T BE ANY OF THESE SECTIONS VERP8: FETCH(F,F,DPNXT) JUMPN F,VERP7 MOVEI T,MAXPIN-1 VERP9: HLRZ TT,UPINS(T) JUMPE TT,VERP10 TDNN TT,FACTR2 ;THIS PIN IN ONE OF THE SECTIONS OF WHICH WE HAVE ALL? JRST VERP11 VERP10: HRRZS UPINS(T) ;DONE CHECKING IT, CLEAR BITS FOR NEXT GUY SOJGE T,VERP9 POPJ P, VERP11: HRRZS UPINS(T) ;CLEAR THE REST OF THE BITS FOR THIS BODY SOJGE T,VERP11 PUSHJ P,VERLNA ERRSTR 2,[ASCIZ/NOT ALL PINS OF SECTIONS USED/] POPJ P, VERP4: FETCH(TTT,G,TRHT) ;DIP POINTER FETCH(TTT,TTT,DIPT) JUMPE TTT,VERP5 ;DON'T COMPLAIN IF NO DIP PUSHJ P,VERLNA PUSH P,T PUSHJ P,DECOUT POP P,T ERRSTR 3,[ASCIZ/UN OR NC PIN/] JRST VERP5 VERLNA: HRLM T,(P) TLNN TFLG ;LOC OUT YET? PUSHJ P,VERLOC ;NO, PUT IT OUT MOVE E,SAVET PUSHJ P,VERLIN ;BODY LINE PUTBYT 11 HLRZ T,(P) POPJ P, VPKLIP: PUSHJ P,VPKLIN MOVE T,BADW JRST PRNPAK ;PRINT ERROR LINE, GO BACK AND PUT OUT ALL OTHERS IN THIS LOC IF ; WEREN'T PRINTED YET. VPKLIN: SKIPE NEEDER ;LINE IN ERROR YET? JRST VPKLN1 ; YES, JUST PRINT NEXT LINE SETOM NEEDER PUSHJ P,VERLOC ;OUTPUT LOC IF FIRST EXCH H,FSTBOD VPKLN2: CAMN H,FSTBOD ;OUTPUT ALL PREVIOUS BODS IN THIS LOC JRST VPKLN1 MOVE E,H PUSHJ P,VERLIN PUTBYT 11 FETCH(T,E,BPAK) PUSHJ P,PRNPAK CRLF FETCH(H,H,NXTB) JRST VPKLN2 VPKLN1: SETOM DIDERR MOVE E,SAVET ;BODY PUSHJ P,VERLIN PUTBYT 11 POPJ P, VERALL: PUSHJ P,VERLOC ;NO CHECK FOR LOC, WE ARE FIRST SKIPA G,GOODW ;SKIP FIRST CRLF VERERB: CRLF FETCH(E,G,TRHT) PUSHJ P,VERLIN FETCH(G,G,NXTT) JUMPN G,VERERB POPJ P, VERLOC: SKIPL LINCNT PUSHJ P,PUTHDR TLO TFLG ;FLAG LOC OUT SKIPN A,SLICEL POPJ P, SETZ T, ;THESE BODIES DON'T HAVE ANY INTERSTING BITS JRST WLOCOUT VERLIN: PUTBYT 11 FETCH(A,E,DIPT) ;DIP TYPE POINTER JUMPE A,VERER3 FETCH(A,A,DNAM) PUSHJ P,STROUT VERER3: PUTBYT 11 PUTSTR ADDR(E,BNAM) PUTBYT 11 FETCH(A,E,FILB) PUTSIX ADDR(A,FILN) PUTBYT 11 FETCH(A,E,BBIT) JRST BPPNT TRET1: MOVE B,T TRET: FETCH(T,B,NXTT) FSTRET(B,TBLK) JUMPN T,TRET1 POPJ P, VERDON: SKIPN ISWW JRST VPKDON ; Now check the package codes, and package overlaps on board MOVEI T,[ASCIZ \ Body/DIP Package Errors LOC DIP BODY FILE POS PACKAGE\] MOVEM T,HEADER SETZM LINCNT ;FORCE NEW PAGE SETZM SLICEL SETZM NEEDER FETCH(H,W,WBDY) VPK1: JUMPE H,VPKDON FETCH(TT,H,BBIT) TRNE TT,CBODY ;CONNECTORS ARE AT END OF BODIES JRST VPKDON MOVEM H,SAVET FETCH(TT,H,BLOC) SKIPE TT ;NO LOC, TREAT AS NEW BODY CAME TT,SLICEL JRST [ SETOM BADW ;NEW LOC, CAN HAVE NEW PACKAGE SETOM DOOVLP ;DO OVERLAP CHECK MOVEM H,FSTBOD SKIPE NEEDER ;WAS PREVIOUS PRINTED? CRLF ;SEPARATE BY BLANK LINE SETZM NEEDER ;SO FAR, THIS LOC ISN'T IN ERR JRST .+1] MOVEM TT,SLICEL SETZM DIDERR ;WE HAVEN'T PRINTED THIS ERR YET FETCH(G,H,BPAK) JUMPE G,[PUSHJ P,VPKLIN ERRSTR 1,[ASCIZ /NO PACKAGE CODE/] JRST VPK2] EXCH G,BADW JUMPL G,VPK1A CAMN G,BADW ;SAME AS OTHER BODIES IN THIS LOC? JRST VPK1A SETOM DOOVLP ;DIFFERENT PACKAGE TYPE, REPEAT OVERLAP CHECK PUSHJ P,VPKLIP ERRSTR 1,[ASCIZ /MULTIPLE PACKAGES IN SAME LOC/] VPK1A: MOVEM H,LSTBOD ;THE BODY IN THIS LOC FETCH(TT,H,BBIT) ; Check if D's idea of default package agrees with DIPTYPE FETCH(T,H,DIPT) ;YES, SEE IF IT AGREES JUMPE T,[TRNE TT,BPACKP ;IF EXPLICIT, DOESN'T NEED TO BE DIP JRST VPK3 PUSHJ P,VPKLIP ERRSTR 1,[ASCIZ /NO PACKAGE FOR DIPTYPE/] JRST VPK4] FETCH(T,T,DPAK) CAMN T,BADW ;IS D'S PACKAGE CODE UP TO DATE? JRST VPK3 PUSH P,T PUSHJ P,VPKLIP PUTBYT 11 POP P,T PUSHJ P,PRNPAK ERRSTR 1,[ASCIZ /PACKAGE DIFFERS FROM NDIPS.DIP/] JRST VPK3 ;Body has explicit PACKAGE property, check if code was compiled properly in D VPK3: FETCH(TT,H,BBIT) TRNN TT,BPACKP JRST VPK4 FETCH(F,H,PRPX) VPK3A: JUMPE F,[PUSHJ P,VPKLIP ERRSTR 1,[ASCIZ /PACKAGE NOT DEFAULT, OR PROP/] JRST VPK4] FETCH(T,F,TLFT) MOVEI TT,[ASCIZ /PACKAGE/] PUSHJ P,ASCMAT JRST [ FETCH(F,F,NXTT) JRST VPK3A] FETCH(T,F,TRHT) PUSHJ P,MATPAK JRST [ PUSHJ P,VPKLIP PUTBYT 11 FETCH(A,F,TRHT) PUSHJ P,STROUT ERRSTR 1,[ASCIZ /PACKAGE PROP NOT RECOGNIZED/] JRST VPK4] CAMN A,BADW JRST VPK4 PUSH P,A PUSHJ P,VPKLIP PUTBYT 11 POP P,T PUSHJ P,PRNPAK ERRSTR 1,[ASCIZ /INTERNAL PACKAGE WRONG IN .DRW??/] ; Check for DIP legal in location on board VPK4: SKIPN A,SLICEL JRST VPK2 MOVE B,BADW PUSHJ P,PAKSIZ JRST [ PUSHJ P,VPKLIN ERRSTR 1,[ASCIZ /PACKAGE IN ILLEGAL LOCATION/] JRST VPK2] AOSE DOOVLP JRST VPK2 ; Now check against all other bodies for overlaps HLREM T,MINX HLRE TTT,TT CAMGE TTT,MINX EXCH TTT,MINX MOVEM TTT,MAXX HRREM T,MINY HRRES TT CAMGE TT,MINY EXCH TT,MINY MOVEM TT,MAXY PUSH P,H VPK5: FETCH(H,H,NXTB) JUMPE H,VPK6 FETCH(A,H,BLOC) JUMPE A,VPK5 CAMN A,SLICEL ;BUT NOT OTHER BODIES IN SAME LOC JRST VPK5 FETCH(B,H,BPAK) JUMPE B,VPK5 PUSHJ P,PAKSIZ JRST VPK5 ;WILL CATCH THIS GUY LATER DEFINE FOO ' (HXXE,XY) < HXXE TTT,T HXXE TTTT,TT CAML TTT,MIN'XY ;SIDE OUTSIDE A TO LEFT? JRST [ CAMLE TTT,MAX'XY ;NO, SIDE A OUTSIDE TO RIGHT? CAMG TTTT,MAX'XY ; (AND SIDE B OUTSIDE ALSO) JRST VPK6'XY ;NO, IF IT OVERLAPS OTHER AXIS ALSO, LOSE JRST VPK5] ;IT'S OUTSIDE TO RIGHT CAMGE TTTT,MIN'XY ;STRADDLES MIN'XY JRST VPK5 ;IT'S OUTSIDE TO LEFT VPK6'XY: > FOO(HLRE,X) FOO(HRRE,Y) VPK6ER: EXCH H,(P) ;RESTORE H TEMPORARILY FOR VPKLIP PUSH P,B PUSHJ P,VPKLIP CRLF EXCH H,-1(P) ;GET H BACK MOVE E,H FETCH(A,E,BLOC) PUSHJ P,LOCOUT PUSHJ P,VERLIN PUTBYT 11 POP P,T PUSHJ P,PRNPAK ERRSTR 1,[ASCIZ /PACKAGES OVERLAP!!/] JRST VPK5 VPK6: POP P,H VPK2: SKIPE NEEDER SKIPE DIDERR JRST VPK2A PUSHJ P,VPKLIP CRLF VPK2A: FETCH(H,H,NXTB) JRST VPK1 MINX: 0 MAXX: 0 MINY: 0 MAXY: 0 PRNPAK: CAIL T,NPACK JRST PUTDEC PUTSTR @PACKNM(T) POPJ P, VPKDON: ; PART NUMBER ERRORS DEC,< ; Make it unanimous NOITS,< ;I AGREE, SCREW PART NUMBERS NOSTAN,< TRNE ISBACK!DOERRS JRST NPNERR TLNN ASKHIM JRST DOPNER SKIPE TTYFLG CLOSE LST, ASK[ASCIZ/PART NUMBER ERRORS?/] JRST WLSQT JRST NPNERR DOPNER: MOVEI T,[ASCIZ/ PART NUMBER ERRORS LOC BODY FILE POS DIPTYPE PROPERTIES/] MOVEM T,HEADER MOVEI T,PREMAR MOVEM T,MARGIN SETZM LINCNT MOVEI H,RADDR(W,WBDY,NXTB) JRST DOPN1 DOPN2: FETCH(T,H,BBIT) TRNE T,CBODY JRST DOPN1 FETCH(T,H,DIPT) JUMPE T,[FETCH(T,H,PRTN) ;IF NO DIPTYPE JUMPE T,DOPN1 FETCH(T,H,PRPX) ;AND HAS PART NUMBER JUMPE T,DOPN1 JRST DOPN3] ;AND EXTRA PROPERTIES, THEN ERROR FETCH(T,H,PRTN) JUMPE T,DOPN3 FETCH(T,H,PRPX) JUMPE T,DOPN1 DOPN3: SKIPL LINCNT PUSHJ P,PUTHDR FETCH(A,H,BLOC) FETCH(T,H,BBIT) PUSHJ P,WLOCOUT PUTBYT 11 PUTSTR ADDR(H,BNAM) PUTBYT 11 FETCH(A,H,FILB) PUTSIX ADDR(A,FILN) PUTBYT 11 FETCH(A,H,BBIT) PUSHJ P,BPPNT FETCH(A,H,DIPT) ;DIP TYPE POINTER JUMPE A,DOPN4 PUTBYT 11 FETCH(A,A,DNAM) PUSHJ P,STROUT DOPN4: FETCH(G,H,PRPX) JUMPE G,DOPN5 DOPN6: MOVE T,LWIDTH SUBI T,=24 ;MUST BE THIS MUCH SPACE LEFT CAMGE T,LCOUNT CRLF MOVEI A,=48 CAMLE A,LCOUNT PUSHJ P,FILL MOVE T,LCOUNT CAIE T,=48 PUTSTR[ASCIZ/, /] FETCH(A,G,TLFT) PUSHJ P,STROUT PUTBYT ":" FETCH(A,G,TRHT) PUSHJ P,STROUT FETCH(G,G,NXTT) JUMPN G,DOPN6 DOPN5: FETCH(T,H,PRTN) JUMPN T,DOPN7 FETCH(T,H,PRPX) JUMPE T,DOPN8 ERRSTR 2,[ASCIZ/NO PART NUMBER FOUND/] JRST DOPN1A DOPN8: ERRSTR 1,[ASCIZ/BODY HAS NO PROPERTIES, SO NO PART NUMBER/] DOPN1A: FETCH(T,H,DIPT) JUMPE T,DOPN1 FETCH(T,T,PRPN) SKIPN T ERRSTR 3,[ASCIZ/NO PROPERTIES IN DIP DEF/] JRST DOPN1 DOPN7: ERRSTR 2,[ASCIZ/EXTRA PROPERTIES/] DOPN1: FETCH(H,H,NXTB) JUMPN H,DOPN2 NPNERR: >;NOSTAN >;NOITS >;DEC ; REDUNDANT BACK PANEL PIN CHECK TRNE DOERRS JRST NREDUN TLNN ASKHIM JRST DOREDN SKIPE TTYFLG CLOSE LST, ;FORCE OUTPUT IF TTY ASK[ASCIZ/REDUNDANT CONNECTOR PIN CHECK?/] JRST WLSQT JRST NREDUN ;NO DOREDN: MOVEI T,[ASCIZ/ MULTIPLY USED CONNECTOR PINS LOC PIN FILES POS SIGNALS/] MOVEM T,HEADER MOVEI T,BVMAR MOVEM T,MARGIN SETZM LINCNT MOVEI H,RADDR(W,WBDY,NXTB) JRST BV1 BV2: TRNE ISBACK JRST BV6 FETCH(T,H,BBIT) ;BODY BITS TRNN T,CBODY ;CONNECTOR BODY? JRST BV1 ;NO, SKIP IT BV6: FETCH(G,H,BPIN) JUMPE G,BV1 ;SKIPE IF NO PINS??????? TLZ TFLG ;NOTE STARTING NEW LOC FETCH(F,G,PINN) ;PADDLE PIN SIDE JRST BV3 ;Print connector pins ;If backpanel wirelist, Connector-loc Connector-pin-number ;Else (within card format), connector-pin-number BV4: FETCH(TT,G,PBIT) TRNE TT,DUP JRST BV3 FETCH(TT,G,PINN) ;PADDLE PIN SIDE EXCH TT,F ;SET AS NEW ONE CAME TT,F ;SAME AS LAST?? JRST BV3 ;NO, DON'T PRINT SKIPL LINCNT ;TOP OF NEW PAGE? PUSHJ P,[TLZ TFLG ; YES, FORCE LOC OUT AGAIN JRST PUTHDR] TLOE TFLG ;LOC OUT YET? JRST BV5 FETCH(A,H,BLOC) TRNN ISBACK JRST [ FETCH(T,H,BBIT) PUSHJ P,WLOCOUT JRST BV5] PUSHJ P,SLTOUT ;BACK WIRELIST, OUT OUT DAMN SLOT BV5: PUTBYT 11 PUSH P,A TRNE ISBACK ;Backpanel wirelist? JRST [ MOVEI A,(F) ;Is 18-bit-CPIN BODY + PIN# PUSHJ P,PRBCN JRST BV5A] FETCH(A,H,BLOC) ;CONNECTOR BODY LOC MOVEI T,(F) ;PIN NUMBER PUSHJ P,PRCNPN ;Print conn pin (within card format) BV5A: POP P,A PUTBYT 11 FETCH(T,D,FILP) PUTSIX ADDR(T,FILN) ;FILE 1 PUTBYT 11 FETCH(A,D,PBIT) PUSHJ P,CNPNT PUTBYT 11 FETCH(T,D,HPNT) PUTSIG ADDR(T,SPNT) ;SIGNAL 1 CRLF PUTSTR[ASCIZ/ /] FETCH(T,G,FILP) PUTSIX ADDR(T,FILN) ;FILE 2 PUTBYT 11 FETCH(A,G,PBIT) PUSHJ P,CNPNT PUTBYT 11 FETCH(T,G,HPNT) PUTSIG ADDR(T,SPNT) ;SIGNAL 2 CRLF BV3: MOVE D,G FETCH(G,G,NXBP) ;NEXT PIN JUMPN G,BV4 BV1: FETCH(H,H,NXTB) ;ANOTHER SLOT PLEASE JUMPN H,BV2 NREDUN: ; EDGE PINS WITH NO TERMINTOR RULES DEC,< TRNE DOERRS JRST NTRCHK TLNN ASKHIM JRST DOTRCK SKIPE TTYFLG CLOSE LST, ;FORCE OUTPUT IF TTY ASK[ASCIZ/CONNECTOR PINS WITHOUT TERMINATOR RULES?/] JRST WLSQT JRST NTRCHK ;NO DOTRCK: MOVEI T,[ASCIZ/ CONNECTOR PINS WITHOUT TERMINATOR RULES LOC PIN FILE POS SIGNAL/] MOVEM T,HEADER MOVEI T,TRCMAR MOVEM T,MARGIN SETZM LINCNT MOVEI H,RADDR(W,WBDY,NXTB) JRST TRCK1 TRCK2: TRNE ISBACK JRST TRCK6 FETCH(T,H,BBIT) ;BODY BITS TRNN T,CBODY ;CONNECTOR BODY? JRST TRCK1 ;NO, SKIP IT TRCK6: TLZ TFLG ;NOTE STARTING NEW LOC MOVEI G,RADDR(H,BPIN,NXBP) JRST TRCK3 TRCK4: FETCH(T,G,PBIT) TRNE T,DUP JRST TRCK3 FETCH(TT,G,HPNT) FETCH(TT,TT,WBIT) TRNE TT,SNC!SPWR!SGND ;IGNORE POWER, GROUND, AND NC JRST TRCK3 MOVE F,G ;LOOK AT ALL COPIES TRCK7: TRNE T,TRMBTS ;ANY TERMINATOR RULE? JRST TRCK3 FETCH(F,F,NXBP) ;NEXT PIN JUMPE F,TRCK8 ;JUMP IF NO MORE PINS FETCH(T,F,PBIT) TRNE T,DUP ;STILL SAME PIN? JRST TRCK7 ;YES TRCK8: MOVE F,G SKIPL LINCNT PUSHJ P,[TLZ TFLG ;FORCE LOC OUT AGAIN JRST PUTHDR] TLOE TFLG ;LOC OUT YET? JRST TRCK5 FETCH(A,H,BLOC) TRNN ISBACK JRST [ FETCH(T,H,BBIT) PUSHJ P,WLOCOUT JRST TRCK5] PUSHJ P,SLTOUT ;OUT OUT DAMN SLOT TRCK5: PUTBYT 11 PUSH P,A FETCH(A,F,PINN) TRNN ISBACK PUSHJ P,PRCNPN TRNE ISBACK PUSHJ P,PRBCN POP P,A TRCK9: PUTBYT 11 FETCH(T,F,FILP) PUTSIX ADDR(T,FILN) ;FILE 1 PUTBYT 11 FETCH(A,F,PBIT) PUSHJ P,CNPNT PUTBYT 11 FETCH(T,F,HPNT) PUTSIG ADDR(T,SPNT) ;SIGNAL 1 CRLF FETCH(F,F,NXBP) JUMPE F,TRCK3 FETCH(T,F,PBIT) TRNN T,DUP JRST TRCK3 PUTBYT 11 JRST TRCK9 TRCK3: FETCH(G,G,NXBP) ;NEXT PIN JUMPN G,TRCK4 TRCK1: FETCH(H,H,NXTB) ;ANOTHER SLOT PLEASE JUMPN H,TRCK2 NTRCHK: ; COUNT OF POLARITY ERRORS FROM DWG PROG TRNE ISBACK!DOERRS JRST NPOLCK TLNN ASKHIM JRST DOPOL SKIPE TTYFLG CLOSE LST, ;FORCE OUTPUT IF TTY ASK[ASCIZ/POLARITY ERROR COUNTS?/] JRST WLSQT JRST NPOLCK DOPOL: MOVEI T,[ASCIZ/ POLARITY ERROR COUNTS BY DRAWING FILE EXT PPN MODULE COUNT OF ERRORS/] MOVEM T,HEADER MOVEI T,POLMAR MOVEM T,MARGIN SETZM LINCNT MOVEI H,RADDR(W,FILS,FNXT) JRST DOPOL1 DOPOL2: FETCH(T,H,FPOL) JUMPE T,DOPOL1 SKIPL LINCNT PUSHJ P,PUTHDR PUTSIX ADDR(H,FILN) PUTBYT 11 FETCH(TT,H,FEXT) HRLZ TT,TT PUTSIX TT PUTBYT 11 FETCH(TT,H,FPPN) HLLZ TT,TT PUSHJ P,LSIXOUT PUTBYT "," FETCH(TT,H,FPPN) HRLZ TT,TT PUSHJ P,LSIXOUT MOVEI A,=32 PUSHJ P,FILL FETCH(A,H,FMOD) PUSHJ P,STROUT PUTSTR[ASCIZ/ /] FETCH(T,H,FPOL) PUSHJ P,DECOUT CRLF DOPOL1: FETCH(H,H,FNXT) JUMPN H,DOPOL2 NPOLCK: >;DEC ; MAIN LOOP TRNE ISBACK SKIPA F,[-NBLEN,,SUMLEN] MOVSI F,-SUMLEN MOVEI T,WSWMAR MOVEM T,MARGIN WIRSM1: TLNN ASKHIM JRST WIRSMD SKIPE TTYFLG CLOSE LST, ;FORCE OUTPUT IF TTY OUTSTR @HDRTAB(F) ASK[ASCIZ/?/] JRST WLSQT JRST ASKNXT WIRSMD: MOVE T,HDRTAB(F) MOVEM T,HEADER SETZM LINCNT MOVEI H,RADDR(W,WIRES,ALPH) SETZM NBODS ;COLLECT # OF UNNAMED SIGS HERE JRST WIRSM3 WIRSM2: FETCH(A,H,WBIT) HRLZ A,A TLNN A,NAM2ND ;IS THIS A WIRE HEADER? TLNE A,SNC ;YES, IS IT NC WIRE? JRST WIRSM3 ;YES, SKIP IT MOVE G,H HLRZ TT,SUMTAB(F) ;GET CONTROL BITS JUMPE TT,[FETCH(TT,H,TBIT) HRR A,TT JRST WIRSMN] TRNN TT,NEEDLC TLZA DOLC TLO DOLC TRNN ISBACK ;ARE WE BACK PANELING? TLZA BAKGAT TLO BAKGAT ;INDICATE BACK PANEL PUSH P,G SETZ A, ;CLEAR BIT ACCUMULATORS TLNE DOLC ;DOING LOADING AND COUNTS? PUSHJ P,LOPSET PUSHJ P,GATHER ;GATHER REQUIRED INFO TLNE DOLC PUSHJ P,LODMER ;CALC PROPER LOADING POP P,G WIRSMN: PUSHJ P,@SUMTAB(F) JRST WIRSM3 TRNE DOERRS JRST ERRSPN PUSH P,T SKIPL LINCNT PUSHJ P,WLSHDR POP P,T PUTSIG ADDR(H,SPNT) TRNE ISBACK JRST BKSMLS MOVE T,LCOUNT CAIGE T,=24 ;3 TABS WORTH YET? JRST ISTHRE CRLF PUTSTR[ASCIZ/ /] JRST WASTHR ISTHRE: LSH T,-3 ;# OF TAB STOPS WE ALREADY HAVE SUBI T,3 PUTBYT 11 AOJL T,.-1 WASTHR: PUSH P,F PUSHJ P,ONECRD POP P,F WIRSM3: FETCH(H,H,ALPH) JUMPN H,WIRSM2 TRNN DOERRS JRST ASKNXT SKIPE LINCNT PUSHJ P,WRTZERO ;END THIS CATEGORY ASKNXT: AOBJN F,WIRSM1 TRNE DOERRS PUSHJ P,WRTZERO ;END ERROR SUMMARY WITH NULL HEADER WLSQT: RELEASE LST, POPJ P, BKSMLS: FETCH(E,G,WPIN) JUMPE E,BKSM5 ;YUCK FOR I IN(LINL,LINH,LOUTL,LOUTH) < SETZM I > SETOM SAVET MOVE T,LCOUNT CAIL T,=16 ;TWO TABS WORTH CRLF ;TO MUCH, CRLF MOVE T,LCOUNT CAIGE T,8 BKSM2: PUTBYT 11 PUTBYT 11 FETCH(T,E,CBIT) JUMPE T,BKSM3 FETCH(A,E,PBDY) FETCH(A,A,BLOC) PUSHJ P,SLTOUT BKSM3: PUTBYT 11 FETCH(A,E,PINN) PUSHJ P,PRBCN MOVE C,D PUSHJ P,BMSMLD ;LOADING OUT PUTBYT 11 FETCH(A,E,FILP) PUTSIX ADDR(A,FILN) CRLF FETCH(E,E,NXTP) JUMPN E,BKSM2 SKIPG SAVET ;MORE THAN ONE LOADING LINE? JRST WIRSM3 PUTSTR[ASCIZ/ /] PUSHJ P,CLOADS BKSM5: CRLF JRST WIRSM3 BMSMLD: FOR I IN(HILD,LILD,HOLD,LOLD) < FETCH(T,C,I) JUMPN T,BMSML1 > PUTSTR[ASCIZ/ /] POPJ P, BMSML1: AOS SAVET JRST LOADIT WLSHDR: TRNN ISBACK JRST WLSHD1 PUSHJ P,PUTHDR PUTSTR[ASCIZ/SIGNAL NAME CARD PIN LOW IN HI IN LOW OUT HI OUT FILE /] POPJ P, WLSHD1: PUSHJ P,PUTHDR PUTSTR[ASCIZ/SIGNAL NAME LOW IN HI IN LOW OUT HI OUT FILNAM #I,#O Z# C# /] POPJ P, ERRSPN: FETCH(A,G,WPIN) ;NOW PINS JUMPE A,WIRSM3 ;DON'T PRINT WIRES WITH NO PINS SKIPN LINCNT PUSHJ P,WRTWCD ;PUT OUT WIRE CODE AND HEADING MOVE B,G ERRSP1: BINSIG ADDR(B,SPNT) ;WRITE SIGNAL NAME FETCH(B,B,NNAM) JUMPN B,ERRSP1 PUSHJ P,WRTZERO ERRSP2: FETCH(TTT,A,PID) FETCH(TT,A,PBDY) FETCH(T,TT,BBIT) TRNE T,CBODY ;IF CONNECTOR THIS IS ALL OF PID JRST ERRSPC FETCH(TT,TT,BID) HRL TTT,TT ;ELSE THIS IS THE REST MOVS TTT,TTT ;BID IN RIGHT HALF ERRSPC: PUSHJ P,WORDOUT FETCH(TTT,A,FILP) FETCH(TTT,TTT,FILN) PUSHJ P,WORDOUT ;FILENAME FETCH(A,A,NXTP) JUMPN A,ERRSP2 PUSHJ P,WRTZERO JRST WIRSM3 WRTWCD: MOVEI TTT,LESWIR PUSHJ P,WORDOUT WRTHD: AOS LINCNT ;USE THIS TO NOTE HEADER OUT OUTSTR @HEADER ;TELL HIM A CATEGORY IS GOING OUT OUTSTR[ASCIZ/ /] BINSTR @HEADER POPJ P, ; TABLES FOR SUMMARY DEFINE NAMESW < SUMMAC NEEDT,NOOUTP,,1, SUMMAC NEEDLC,NOHID,,3, SUMMAC NEEDLC,NOLOD,,3, SUMMAC NEEDT!NEEDLC,OVRLOD,,2, SUMMAC NEEDT!NEEDLC,HEAVYL,,0, SUMMAC NEEDT,NOINP,,1, SUMMAC NEEDLC,EXTRAC,,0, SUMMAC NEEDT,INACTI,,0, SUMMAC NEEDT,EXOUT,,0, SUMMAC NEEDT!NEEDLC,MULTP,,2, SUMMAC NEEDT!NEEDLC,UNWIR,,0, SUMMAC NEEDT!NEEDLC,ILWORS,,1,<"WIRE-OR", ALL OUTPUTS ON SAME DIP> SUMMAC NEEDT!NEEDLC,ILWORD,,2,<"WIRE-OR", OUTPUTS ON DIFFERENT DIPS> SUMMAC NEEDT!NEEDLC,ILWORE,,3,<"WIRE-OR", SIGNAL GOES TO BACKPANEL> SUMMAC NEEDT,ILBPRC,,3, SUMMAC NEEDT!NEEDLC,MULTZ,,2, SUMMAC NEEDT,MLTMRL,,3, SUMMAC NEEDT!NEEDLC,NEEDZ,,2, SUMMAC NEEDT!NEEDLC,ILLZ,,2, SUMMAC NEEDT!NEEDLC,QUESTZ,,1, SUMMAC NEEDT!NEEDLC,ILFFI,,1, SUMMAC NEEDT,NILWIR,,3, SUMMAC NEEDT,OUTPWR,,3, SUMMAC NEEDT,ILGNDO,,3, SUMMAC NEEDT,ILLVG,,3, SUMMAC NEEDLC,ILLMIX,,3, SUMMAC NEEDT,ILLET,,3, > DEFINE NAMESB < SUMMAC ,NOOUTA,,1, SUMMAC NEEDLC,NOHIDB,,3, SUMMAC NEEDLC,NOLODB,,3, SUMMAC NEEDLC,OVRLOD,,2, SUMMAC NEEDT,ILBPRB,,3, SUMMAC ,OUTONE,,1, SUMMAC ,BPSING,,2, SUMMAC NEEDT!NEEDLC,MULTP,,2, SUMMAC NEEDLC,ILLWOR,,1,<"WIRE-OR" WARNING> SUMMAC NEEDT!NEEDLC,ILFFI,,3, SUMMAC NEEDT!NEEDLC,ILFFO,,2, SUMMAC ,MORONE,,1, SUMMAC NEEDT!NEEDLC,MULTZ,,1, SUMMAC NEEDT!NEEDLC,NEEDBZ,,1, SUMMAC NEEDT!NEEDLC,ILLBZ,,2, SUMMAC NEEDT!NEEDLC,QUESBZ,,1, SUMMAC ,NILWIR,,3, SUMMAC ,OUTPWR,,3, SUMMAC ,ILGNDO,,3, SUMMAC ,ILLVG,,3, SUMMAC NEEDLC,ILLMIX,,3, SUMMAC NEEDT,ILLET,,2, > DEFINE SUMMAC(A,B,C,D,E) < A,,B > ;BITS IN TABLE CANNOT EXTEND INTO INDIRECT OR INDEX FIELDS NEEDT__400000 ;NEED TYPE BITS FROM GATHER NEEDLC__200000 ;NEED LOADING BITS FROM GATHER SUMTAB: NAMESW SUMLEN__.-SUMTAB NAMESB NBLEN__.-SUMTAB-SUMLEN DEFINE SUMMAC(A,B,C,D,E) < [ASCIZ\C\] > HDRTAB: NAMESW NAMESB DEFINE SUMMAC(A,B,C,D,E) < ERRSTR D,[ASCIZ \E\] > ERRTAB: NAMESW NAMESB PURGE NAMESW,NAMESB ; SUMMARY ROUTINES NOOUTP: TLC A,WSINGL!GENSIG TLCN A,WSINGL!GENSIG TRNE A,DRVREQ ;IS SINGLE UNNAMED PIN, NEED DRIVE? CAIA ;YES POPJ P, ;SINGLE PIN WITH NO DRIVE REQUIRED TRNN A,ANYCON ;NON-EDGE RUNS WITH NO OUTPUTS PUSHJ P,NOOUTA POPJ P, PUSHJ P,EXTRAI ;IS THIS AN INACTIVE INPUT AOS (P) POPJ P, ;YES, NOT IN THIS CATEGORY NOOUTA: TDNN A,[SPWR!SGND,,OUTLD] ;RUNS WITH NO OUTPUTS TRNN A,INLD!PWR!GND POPJ P, JRST CPOPJ1 ;INACTIVE INPUTS INACTI: TLC A,WSINGL!GENSIG TLCN A,WSINGL!GENSIG TRNE A,DRVREQ ;IS SINGLE UNNAMED PIN, NEED DRIVE? CAIA POPJ P, ;SINGLE PIN WITH NO DRIVE REQUIRED TRNN A,ANYCON PUSHJ P,NOOUTA POPJ P, PUSHJ P,EXTRAI POPJ P, JRST CPOPJ1 MULTP: MOVE T,NPULL CAILE T,1 AOS (P) POPJ P, ;ECL FF OUTPUT DRIVING TOO MANY CARDS ILFFO: TRC A,ECL!FFOUT TRCE A,ECL!FFOUT POPJ P, ;NOT ECL FF OUTPUT MOVE TT,CONFLG CAILE TT,1 ;HOW MANY CARDS(STARTED AS -1)? AOS (P) ;TOO MANY POPJ P, ;ECL FF OUTPUT DRIVING ECL FF INPUTS OF OTHER DIPS ILFFI: TRC A,ECL!FFOUT TRCE A,ECL!FFOUT POPJ P, ;NOT ECL FF OUTPUT TRC A,ECL!FFIN TRCE A,ECL!FFIN ;MUST BE ECL FF INPUTS ALSO POPJ P, ;NOPE FETCH(TT,G,WPIN) ;FIRST PIN ILFFI1: FETCH(TTT,TT,PBIT) TRNE TTT,DUP JRST ILFFI2 TRNE ISBACK JRST [ FETCH(TTT,TT,CBIT) JRST ILFFI5] FETCH(TTT,TT,PTYP) JUMPE TTT,ILFFI2 FETCH(TTT,TTT,DPBIT) ILFFI5: TRC TTT,ECL!FFOUT TRCE TTT,ECL!FFOUT JRST ILFFI2 FETCH(TTT,TT,PBDY) MOVEM TTT,TMPCN2 FETCH(TTT,TTT,BLOC) MOVEM TTT,TMPCN1 ;SAVE LOC HERE MOVEM TT,SAVET ;AND PIN HERE FETCH(TT,G,WPIN) ;START AT FRONT AGAIN ILFFI3: FETCH(TTT,TT,PBIT) TRNE TTT,DUP JRST ILFFI4 TRNE ISBACK JRST [ FETCH(TTT,TT,CBIT) JRST ILFFI6] FETCH(TTT,TT,PTYP) JUMPE TTT,ILFFI4 FETCH(TTT,TTT,DPBIT) ILFFI6: TRC TTT,ECL!FFIN TRCE TTT,ECL!FFIN JRST ILFFI4 FETCH(TTT,TT,PBDY) CAMN TTT,TMPCN2 JRST ILFFI4 ;ON SAME BODY IS ALWAYS SAME DIP FETCH(TTT,TTT,BLOC) CAME TTT,TMPCN1 JRST CPOPJ1 ;FF OUTPUT DRIVES FF INPUT OF OTHER DIP JUMPE TTT,CPOPJ1 ;NO LOC IS NOT SAME DIP ILFFI4: FETCH(TT,TT,NXTP) JUMPN TT,ILFFI3 MOVE TT,SAVET ILFFI2: FETCH(TT,TT,NXTP) JUMPN TT,ILFFI1 POPJ P, ;RUN ON SINGLE CARD BPSING: FETCH(T,G,WPIN) JUMPE T,CPOPJ SETO TT, ;COUNT OF CARDS BPSNG1: FETCH(TTT,T,PBIT) TRNE TTT,DUP ;SKIP DUPS JRST BPSNG2 FETCH(TTT,T,CBIT) SKIPE TTT ;NOT 0 MEANS CARD OCCURENCE AOJG TT,CPOPJ ;COUNT UP AND QUIT IF .GT. 1 BPSNG2: FETCH(T,T,NXTP) JUMPN T,BPSNG1 JUMPE TT,CPOPJ1 ;SKIP IF EXACTLY 1 CARD POPJ P, ;UNUSED BACK PANEL RUNS OUTONE: TLNN A,SPWR!SGND ;SKIP THESE TRNN A,OUTLD ;MUST HAVE SOME OUTPUTS ON RUN POPJ P, TRNE A,INLD!PWR!GND ;IF NO INPUTS AT ALL, JRST CPOPJ1 ;THEN UNUSED SETZM TMPCN1 FETCH(TT,G,WPIN) ;FIRST PIN (AT LEAST ONE) OUTTWO: FETCH(TTT,TT,CBIT) ;GET CON/CARD BITS JUMPE TTT,OUTTHREE ;ANY? CAME TTT,TMPCN1 ;SAME CARD? SKIPN TMPCN1 ;NO, SEEN ONE YET? CAIA ;SAME OR FIRST POPJ P, ;MORE THAN ONE CARD OUTTHREE:FETCH(TT,TT,NXTP) JUMPN TT,OUTTWO JRST CPOPJ1 ;ONLY OUTPUTS! ;MORE THAN ONE PIN ON RUN ON CARD MORONE: TLNE A,SPWR!SGND!SHI!SNC ;THESE RUNS ARE OK POPJ P, MOVEI TT,RADDR(G,WPIN,NXTP) SETZM SAVET JRST MORON2 MORON1: FETCH(TTT,TT,PBIT) TRNE TTT,DUP JRST MORON2 FETCH(TTT,TT,PBDY) FETCH(TTT,TTT,BLOC) EXCH TTT,SAVET CAMN TTT,SAVET ;SAME CARD? JRST CPOPJ1 ;YES, BINGO MORON2: FETCH(TT,TT,NXTP) JUMPN TT,MORON1 POPJ P, ;MORE THAN ONE TERMINATION RULE ON RUN MLTMRL: TRNN A,ANYCON ;ANY CONNECTORS? POPJ P, ;NO, OK THEN MOVEI TT,RADDR(G,WPIN,NXTP) SETZM SAVET ;CLEAR LAST RULE SEEN JRST MLTRL2 MLTRL1: FETCH(TTT,TT,PBIT) TRNN TTT,TRMBTS ;ANY TERMINATOR RULE? JRST MLTRL2 ;NO, SKIP IT LDB TTT,[POINT TRMBSZ,TTT,TRMBPS+=18] EXCH TTT,SAVET ;SAVE NEW, GET OLD JUMPE TTT,MLTRL2 ;OK IF FIRST CAME TTT,SAVET ;SAME RULE? JRST CPOPJ1 ;NO, LOSE MLTRL2: FETCH(TT,TT,NXTP) JUMPN TT,MLTRL1 POPJ P, ;UNNAMED BACKPANEL RUNS (CARD) ILBPRC: TLNE A,GENSIG TRNN A,ANYCON POPJ P, JRST CPOPJ1 ;UNNAMED BACKPANEL RUNS (BP) ILBPRB: TLNE A,GENSIG AOS (P) POPJ P, ;NON-EDGE RUNS WITH NO INPUTS NOINP: TDNE A,[SPWR!SGND,,OUTLD] ;IS IT EVEN GENERATED? TRNE A,ANYCON!INLD!GND!PWR POPJ P, ;NO PUSHJ P,EXTRAO JRST CPOPJ1 POPJ P, EXTRAC: TLNE A,SPWR!SGND!SNC!SHI POPJ P, MOVE T,NCONS CAILE T,1 AOS (P) POPJ P, ;UNUSED EXTRA OUTPUTS EXOUT: TDNE A,[SPWR!SGND,,OUTLD] TRNE A,ANYCON!INLD!GND!PWR POPJ P, JRST EXTRAO ;RUNS WITH NOTHING NILWIR: TRC A,ANYCON!TERM TRCN A,ANYCON!TERM POPJ P, ;EDGE PIN TO TERM OK TRNN A,INLD!OUTLD!PWR!GND AOS (P) POPJ P, ;RUNS WITH UN OR NC UNWIR: TRNN A,NULLD ;ANY NULLS? SKIPE NULLS ;OR UN'S AOS (P) POPJ P, ;OUTPUTS AND PWR OUTPWR: TRNE A,PWR TDNN A,[SGND,,OUTLD!INLD] POPJ P, JRST CPOPJ1 ;OUTPUTS AND GND ILGNDO: TRNE A,GND TDNN A,[SPWR,,OUTLD] POPJ P, JRST CPOPJ1 ;GND AND PWR ILLVG: TRC A,PWR!GND TRCN A,PWR!GND AOS (P) POPJ P, ;MIXED VOLTAGES ILLMIX: SKIPE ILVOLT AOS (P) POPJ P, ;ECL CONNECTED TO TTL ILLET: TRC A,ECL!TTL TRCN A,ECL!TTL AOS (P) POPJ P, HEAVYL: TLNN A,SPWR!SGND!SHI TRNN A,ANYCON POPJ P, MOVM T,LINL CAIL T,=1000 AOS (P) POPJ P, NOHID: SKIPE NCONS ;NO CHECK FOR EDGE RUNS (ON CARD) POPJ P, NOHIDB: SKIPE ANYOUT SKIPN LINH ;HIGH SINKS? POPJ P, ;NO SKIPN LOUTH ;YES, HIGH SOURCE? AOS (P) ;NO, ERROR POPJ P, NOLOD: SKIPE NCONS POPJ P, NOLODB: SKIPE T,ANYOUT SKIPN LINL POPJ P, CAME T,NPULL ;NO CHECK IF ALL PULLUPS SKIPE LOUTL ;NOT ALL PULLUPS, ANY DRIVE? POPJ P, ;OK JRST CPOPJ1 ;LOSE ;OVERLOADS OVRLOD: TRNE A,INLD!TERM ;INPUTS AND SKIPN TT,ANYOUT ;OUTPUTS? POPJ P, ;NO CAMN TT,NPULL JRST CKHOVR SKIPN TT,LOUTL JRST CKHOVR PUSHJ P,LOLOAD JUMPGE T,ISOVR CKHOVR: PUSHJ P,HILOAD JUMPL T,CPOPJ ISOVR: AOS (P) POPJ P, ;ILLEGAL WIRE OR'S ILWORS: PUSHJ P,ILLWOR POPJ P, PUSHJ P,WORSAM ;CHECK IF ON SAME DIP POPJ P, JRST CPOPJ1 ;ON SAME DIP ILWORD: PUSHJ P,ILLWOR POPJ P, PUSHJ P,WORSAM JRST CPOPJ1 POPJ P, WORSAM: SETOM SAVET MOVEI TT,RADDR(G,WPIN,NXTP) JRST WORSM1 WORSM2: FETCH(TTT,TT,PTYP) JUMPE TTT,WORSM1 FETCH(TTT,TTT,DPBIT) TRNN TTT,OUTLD JRST WORSM1 FETCH(TTT,TT,PBDY) FETCH(TTT,TTT,BLOC) JUMPE TTT,CPOPJ ;ON DIFFERENT DIPS IF NO LOC SKIPGE SAVET MOVEM TTT,SAVET CAME TTT,SAVET ;DIFFERENT LOCS? POPJ P, ;YES, DIRECT RETURN WORSM1: FETCH(TT,TT,NXTP) JUMPN TT,WORSM2 JRST CPOPJ1 ;ALL ON SAME DIP ILWORE: PUSHJ P,ILLWOR POPJ P, TRNE A,ANYCON ;ANY EXTERNAL CONNECTIONS? AOS (P) ;YES, LEAVES BOARD POPJ P, ;WIRE OR ILLWOR: SKIPN TT,ANYOUT POPJ P, CAMN TT,NOUT ;ALL NORMAL OUTPUTS? JRST [ CAIE TT,1 AOS (P) POPJ P,] CAMN TT,NTRI POPJ P, SUB TT,NPULL CAME TT,NOC AOS (P) POPJ P, ;TERMINATION CHECKS NEEDZ: TRC A,INLD!OUTLD!ECL TRCN A,INLD!OUTLD!ECL TRNE A,ANYCON POPJ P, SKIPN NTERM AOS (P) POPJ P, ILLZ: TRNN A,ECL POPJ P, TRNE A,ANYCON TRNN A,OUTLD POPJ P, SKIPE NTERM AOS (P) POPJ P, QUESTZ: TRNN A,ECL POPJ P, TRNN A,ANYCON JRST QNCONZ TRNN A,OUTLD SKIPE NTERM POPJ P, TRNE A,INLD AOS (P) POPJ P, QNCONZ: TRNN A,INLD TRNN A,OUTLD POPJ P, SKIPE NTERM AOS (P) POPJ P, MULTZ: MOVE T,NTERM CAILE T,1 TRNN A,ECL POPJ P, JRST CPOPJ1 NEEDBZ: SKIPN NTERM TRNN A,ECL POPJ P, TRC A,INLD!OUTLD TRCN A,INLD!OUTLD AOS (P) POPJ P, ILLBZ: TRNE A,ECL SKIPN NTRMOUT POPJ P, JRST CPOPJ1 QUESBZ: SKIPE NTRMOUT POPJ P, ;CAUGHT BY ILLEGAL CASE TRNE A,ECL SKIPG T,NTERM POPJ P, CAMN T,NTRMIN CAIE T,1 AOS (P) POPJ P, ;MORE COMMON SUBRS FOR 'WL' AND 'WLS' ERRLOP: PUSHJ P,@SUMTAB(F) JRST ERRLP1 XCT ERRTAB(F) ERRLP1: AOBJN F,ERRLOP POPJ P, LOPSET: SETZB A,CNTTAB ;ZERO COUNTS AND LOADING MOVE T,[CNTTAB,,CNTTAB+1] BLT T,LODTAB+LODLEN-1 POPJ P, LOACAL: SKIPN TT,(TTT) JRST LOASTO JUMPG TT,LOACL1 ;TAKE MIN OF ALL DRIVES CAMGE TT,T ;NEG DRIVE LOASTO: MOVEM T,(TTT) POPJ P, LOACL1: CAMLE TT,T JRST LOASTO POPJ P, LODMER: PUSHJ P,LODMR1 MOVEM T,LOUTL MOVEM TT,LOUTH POPJ P, LODMR1: SKIPE T,LOUTL ;NORMAL OUTPUT? JRST LODMRH SKIPN T,LTRIL SKIPA T,LOCL SKIPN TT,LOCL JRST LODMRH JUMPG T,[CAMLE T,TT MOVE T,TT JRST LODMRH] CAMGE T,TT MOVE T,TT LODMRH: SKIPN TT,LOUTH MOVE TT,LTRIH ADD TT,LPULLH POPJ P, LOLOAD: MOVE T,LOUTL IMUL T,LOADMG ;LOAD MARGIN PUSH P,T MOVE T,LINL IMULI T,=100 ADDM T,(P) POP P,T SKIPN T SKIPA T,[-1] ;IF IT COMES OUT EXACT EQV T,LOUTL POPJ P, HILOAD: MOVE T,LOUTH IMUL T,LOADMG ;LOAD MARGIN PUSH P,T MOVE T,LINH IMULI T,=100 ADDM T,(P) POP P,T SKIPN T SKIPA T,[-1] EQV T,LOUTH POPJ P, EXTRAI: FETCH(T,G,WBIT) TRNE T,GENSIG ;MUST NOT HAVE NAME OF ITS OWN TRNN T,WSINGL ;MUST BE SINGLE PIN POPJ P, FETCH(TTT,G,WPIN) ;GET FIRST (AND ONLY) PIN FETCH(TT,TTT,PTYP) JUMPE TT,CPOPJ ;NO TYPE, NO SINGLE OUTPUT FETCH(T,TT,DPBIT) ;TYPE BITS TRNN T,SHARE ;ARE WE THE RIGHT GUY? POPJ P, ;NO FETCH(TT,TT,PSWP) JUMPE TT,CPOPJ ;IF NO SHARE #, NO POSSIBLE MATCH MOVEM TT,SHRNUM FETCH(T,TTT,PBDY) ;BODY POINTER FETCH(T,T,BPIN) ;AND FIRST PIN PUSH P,A EXTRI1: CAIN T,(TTT) ;DON'T LOOK AT US! JRST EXTRI2 FETCH(TT,T,PTYP) JUMPE TT,EXTRI2 FETCH(TT,TT,PSWP) ;WE KNOW THE # WON'T MATCH IF NOT INPUT CAME TT,SHRNUM ;SAME GROUP? JRST EXTRI2 ;NO PUSH P,T HRLM G,(P) FETCH(G,T,HPNT) TLZ DOLC!BAKGAT SETZ A, PUSHJ P,GATHER POP P,T HLRZ G,T TLNE A,SGND ;IS THIS RUN EVER CALLED "GND"? JRST [ POP P,A JRST CPOPJ1] ;YES, INACTIVE INPUT EXTRI2: FETCH(T,T,NXBP) JUMPN T,EXTRI1 POP P,A POPJ P, EXTRAO: FETCH(T,G,WBIT) TRNN T,WSINGL ;MUST BE SINGLE PIN POPJ P, FETCH(TTT,G,WPIN) ;GET FIRST (AND ONLY) PIN FETCH(TT,TTT,PTYP) JUMPE TT,CPOPJ ;NO TYPE, NO SINGLE OUTPUT FETCH(T,TT,DPBIT) ;TYPE BITS TRNN T,OUTLD ;ARE WE THE RIGHT GUY? POPJ P, ;NO FETCH(TT,TT,PSWP) JUMPE TT,CPOPJ ;IF NO SHARE #, NO POSSIBLE MATCH MOVEM TT,SHRNUM FETCH(T,TTT,PBDY) ;BODY POINTER FETCH(T,T,BPIN) ;AND FIRST PIN PUSH P,A EXTRO1: CAIN T,(TTT) ;DON'T LOOK AT US! JRST EXTRO2 FETCH(TT,T,PTYP) JUMPE TT,EXTRO2 FETCH(TT,TT,PSWP) ;WE KNOW THE # WON'T MATCH IF NOT OUTPUT CAME TT,SHRNUM ;SAME GROUP? JRST EXTRO2 ;NO PUSH P,T HRLM G,(P) FETCH(G,T,HPNT) TLZ DOLC!BAKGAT SETZ A, PUSHJ P,GATHER POP P,T HLRZ G,T TRNE A,ANYCON!INLD ;IS THIS OUTPUT USED, OR DOES IT GO TO BACK PANEL? JRST [ POP P,A JRST CPOPJ1] ;YES, EXTRA UNUSED OUTPUT EXTRO2: FETCH(T,T,NXBP) JUMPN T,EXTRO1 POP P,A POPJ P, ;MAXDPN - Find largest DipPinName ; Either # pins on package or largest pin # mentioned in dip def ;A = Body ;Returns: ;T = DIP size MAXDPN: MOVEI T,MAXPIN ;ASSUME MAX IF NO DIPTYPE FETCH(A,A,DIPT) JUMPE A,CPOPJ FETCH(T,A,DPAK) JUMPE T,MAXDP3 ;ANY PACKAGE MENTIONED? HRRZ T,PACKPN(T) ;YES, TAKE IT'S WORD FOR # PINS POPJ P, ;Look for biggest mention pin name in DipDef MAXDP3: FETCH(T,A,DPNN) ;INITIALIZE TO # DEFINED PINS AS MAX MOVEI A,RADDR(A,DPIN,DPNXT) JRST MAXDP1 MAXDP2: FETCH(TT,A,DPNM) ;PIN NAME IN DIP DEF CAMLE TT,T MOVE T,TT ;BIGGEST SO FAR MAXDP1: FETCH(A,A,DPNXT) JUMPN A,MAXDP2 POPJ P, ; GATHER LOADING AND TYPE BITS ;G = WIRE POINTER ;0 = GATHER CONTROL BITS IN LH AC 0 ;RETURNS ;A = ACCUMULATED BITS, LH=WBIT RH=TBIT ;WBIT - signal type bits (SPWR, SGND, ...) ;TBIT - summary pin type bits on this wire. (INLD, OUTLD, PWR, GND, etc.) ;LOADING AND COUNTS ARE KEPT IN STANDARD PLACES ;LINL,LINH,LOUTL,LOUTH,LOCL,LPULLH,LTRIL,LTRIH ;CLOBBERS T, TT, TTT GATHER: FETCH(T,G,WBIT) TLO A,(T) FETCH(TT,G,WVOL) TRNE T,SPWR MOVEM TT,PVOLTS ;FORCE ERRORS IF SIGNAL DISAGREES WITH DIP PIN FETCH(T,G,TBIT) TRO A,(T) FETCH(G,G,WPIN) JUMPE G,CPOPJ TLNE BAKGAT JRST GDOBAK FETCH(T,G,TBIT) TRNE T,ANYCON JRST GATHR1 TLNN DOLC POPJ P, GATHR1: FETCH(TT,G,PBIT) TRNE TT,DUP JRST GATHR5 FETCH(T,G,PBDY) FETCH(T,T,BBIT) TRNE T,CBODY JRST GATC TLNN DOLC JRST GATHR5 FETCH(T,G,PTYP) JUMPN T,GATHR4 AOS NULLS JRST GATHR5 ; A connector body GATC: SKIPE ISWW TLNE DOLC AOS NCONS SKIPN ISWW JRST GATHR5 PUSH P,A FETCH(A,G,PBDY) ;CHECK TO SEE IF CONNECTOR IS DEDICATED FETCH(A,A,BLOC) FETCH(TT,G,PINN) HRLI A,MAPCON(TT) PUSHJ P,PINBIT ;SEE IF PIN IS A DEDICATED PIN POP P,A JUMPE TT,GATHR5 HLRZS TT TRO A,(TT) TLNN DOLC JRST GATHR5 TRNE TT,PWR AOS NPWR TRNE TT,GND AOS NGND JRST GATHR5 GATHR4: SETZ TT, SKIPN ISWW JRST GATHR9 PUSH P,A PUSH P,T FETCH(A,G,PBDY) ;FIRST SEE IF BOARD IS DEDICATED FETCH(B,A,BPAK) FETCH(A,A,BLOC) FETCH(TT,G,PINN) HRL A,TT PUSHJ P,MAPOST TDZA TT,TT ;CAN'T FIND BOARD PIN? PUSHJ P,PINBIT ;SEE IF PIN IS A DEDICATED PIN POP P,T POP P,A HLRZS TT TRO A,(TT) ;MAKE PIN TYPE BITS INCLUDE FORCED PWR/GND GATHR9: FETCH(TTT,T,DPBIT) TRO TTT,(TT) FETCH(TT,T,LHI) FETCH(T,T,LLOW) TRNE TTT,NULLD JRST [ AOS NULLS JRST GATHR5] TRNE TTT,GND JRST [ AOS NGND JRST GATHR5] TRNE TTT,PWR JRST [ AOS NPWR ADDM TT,PMAMPS JUMPE T,GATHR5 EXCH T,PVOLTS JUMPE T,GATHR5 CAME T,PVOLTS SETOM ILVOLT JRST GATHR5] TRNE TTT,INLD JRST [ AOS NIN FETCH(TTT,G,PBIT) ADDM TT,LINH TRNN TTT,PSHARE ADDM T,LINL JRST GATHR5] TRNE TTT,TERM JRST [ AOS NTERM ADDM T,LINL TRNE TTT,ECL ADDM TT,LOUTH TRNN TTT,ECL ADDM TT,LINH JRST GATHR5] TRNN TTT,OUTLD JRST GATHR5 AOS ANYOUT TRNE TTT,OPENC JRST [ AOS NOC MOVEI TTT,LOCL ;TAKE MIN OF OC OUTPUTS PUSHJ P,LOACAL JRST GATHR5] TRNE TTT,TRI JRST [ AOS NTRI MOVEI TTT,LTRIL PUSH P,TT PUSHJ P,LOACAL POP P,T MOVEI TTT,LTRIH PUSHJ P,LOACAL JRST GATHR5] TRNE TTT,PULL JRST [ AOS NPULL ADDM TT,LPULLH JRST GATHR5] AOS NOUT ADDM TT,LOUTH ADDM T,LOUTL GATHR5: FETCH(G,G,NXTP) JUMPN G,GATHR1 POPJ P, GDOBAK: FETCH(T,G,PBIT) TRNE T,DUP JRST GATBKN FETCH(TTT,G,CBIT) ;CON/CARD BITS TRNN TTT,INLD!TERM ;ANY INPUTS? JRST GATBKO ;NO, CHECK OUT TRCE TTT,INLD AOS NIN TRCE TTT,TERM AOS NTERM TRCN TTT,TERM!INLD AOS NTRMIN FETCH(T,G,HILD) ADDM T,LINH FETCH(T,G,LILD) ADDM T,LINL GATBKO: FETCH(TT,G,HOLD) FETCH(T,G,LOLD) TRNN TTT,OUTLD ;ANY OUTPUTS? JRST GATBKX ;NO, LOOP AOS ANYOUT TRNE TTT,INLD AOS NINOUT TRNE TTT,TERM AOS NTRMOUT TRNE TTT,TRI JRST [ AOS NTRI MOVEI TTT,LTRIL PUSH P,TT PUSHJ P,LOACAL POP P,T MOVEI TTT,LTRIH PUSHJ P,LOACAL JRST GATBKN] TRNN TTT,OPENC!PULL JRST [ AOS NOUT JRST GATBKX] TRNN TTT,PULL JRST GATBKC AOS NPULL ADDM TT,LPULLH GATBKC: TRNN TTT,OPENC JRST GATBKN AOS NOC MOVEI TTT,LOCL PUSHJ P,LOACAL JRST GATBKN GATBKX: ADDM T,LOUTL ADDM TT,LOUTH GATBKN: FETCH(G,G,NXTP) JUMPN G,GDOBAK POPJ P,