;WLOUT2.FAI.346, 17-NOV-75 09:49:18, EDIT BY HELLIWELL SUBTTL U COPY DIP ASSIGNMENTS FROM D WIRE LIST TO PC WIRE LIST DTOPC: MOVE L,DEFLST FETCH(W,L,WIRL) PUSHJ P,LSTGT0 ;GET A CARD NAME POPJ P, HRRM W,GOODW FETCH(W,L,PCWL) ;GET POINTER TO FIRST CARD BLOCK JUMPE W,NXCRD1 ;IS THERE ONE? PUSHJ P,GETLOP ;LOOKUP SAME CARD JRST NXCRD1 HRRM W,BADW OUTSTR[ASCIZ/ /] FIXDIP: MOVE T,[OUTCHR TTT] MOVEM T,PUTCHR HRRZ H,GOODW MOVEI H,RADDR(H,WBDY,NXTB);POINT TO BODY LIST LINK SETZM LETTER SETZM SLICEL JRST DTOPC1 DTOPC2: FETCH(T,H,BLOC) JUMPE T,DTOPC1 ;ANY LOC? CAMN T,SLICEL ;DIFFERENT FROM LAST? JRST DTOPC1 ;NO, SKIP IT MOVEM T,SLICEL ;REMEMBER LAST FETCH(TT,H,DIPT) ;DIP TYPE POINTER JUMPE TT,DTOPC1 MOVEM T,LETTER MOVEM TT,DIPPNT HRRZ C,BADW MOVEI C,RADDR(C,WBDY,NXTB) PUSHJ P,BDLNXT ;FIND AND MAP ALL SUCH LOCS IN PC LIST! TRNE FLAG JRST DTOPC1 MOVE A,LETTER PUSHJ P,LOCOUT OUTSTR[ASCIZ/ NOT FOUND IN "OTHER" LIST! /] DTOPC1: FETCH(H,H,NXTB) JUMPN H,DTOPC2 POPJ P, NXCRD1: OUTSTR[ASCIZ/SAME CARD DOESN'T EXIST IN "OTHER" WIRE LIST! /] POPJ P, ;BDLNXT - LINK ALL BODIES IN SAME LOC TO SAME DIPTYPE ; (Also update PTYP links for all the body pins) ;C = BODY LIST ;DIPPNT = DIPTYPE ;FLAG = Body was found BDLNXT: PUSHJ P,FN2BOD ;FIND BODY BY LOC IN LETTER POPJ P, ;NO MORE TRO FLAG FETCH(T,C,DIPT) ;DIP TYPE POINTER JUMPN T,BDLNXT ;ALREADY LINKED? PUSHJ P,LNKDIP JRST BDLNXT FN2BOD: FETCH(C,C,NXTB) JUMPE C,CPOPJ FETCH(TT,C,BLOC) CAME TT,LETTER JRST FN2BOD JRST CPOPJ1 LNKDIP: MOVE A,DIPPNT STORE(A,C,DIPT) ;STORE DIP POINTER FETCH(E,C,BPIN) JUMPE E,CPOPJ ;SKIP THIS IF NO PINS PUSH P,C LNKDP1: FETCH(F,E,PBDY) ;SETUP BODY POINTER FETCH(G,E,HPNT) ;WIRE HEADER FETCH(T,E,PINN) ;PIN # MOVEM T,PINNUM PUSHJ P,PTLINK ;LINK UP PIN TO TYPE JUMPE T,LNKDP2 ;THIS IS 0 IF NO LINKUP PUSHJ P,LBCOPY ;DO LOADING AND SHARE CHECK LNKDP2: FETCH(E,E,NXBP) JUMPN E,LNKDP1 ;LOOP FOR THEM ALL POP P,C ;RESTORE BODY POINTER POPJ P, SUBTTL 'UML' REPLACE REAL PIN NAMES WITH "U" PIN NAMES DEC,< UMLOUT: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, MOVSI T,'UML' ;STUFFING EXT MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, PUSHJ P,UGINSET PUTSTR[ASCIZ/PINS /] FETCH(H,W,WBDY) ;NOW GO DOWN BODY LIST JUMPE H,UMLBNX ;JUMP IF NONE UMLO1: FETCH(T,H,BBIT) TRNN T,CBODY ;CONNECTOR? JRST UMLO2 ;NO FETCH(G,H,BPIN) ;YES, GET FIRST PIN UMLO3: FETCH(T,G,PBIT) TRNE T,DUP ;DON'T DO DUPLICATES JRST UMLO4 FETCH(A,G,HPNT) FETCH(A,A,TBIT) ;GET WIRE TYPE BITS PUSHJ P,UGIN JRST UMLO4 PUSH P,A FETCH(A,H,BLOC) FETCH(T,G,PINN) HRL A,T PUSHJ P,LOCPNC PUTBYT 11 POP P,A PUSHJ P,LOCPNC CRLF UMLO4: FETCH(G,G,NXBP) JUMPN G,UMLO3 UMLO2: FETCH(H,H,NXTB) JUMPN H,UMLO1 UMLBNX: PUTSTR[ASCIZ/END /] RELEASE LST, POPJ P, SUBTTL 'CPN' ADD CONNECTOR PIN DESIGNATION TO EACH SIGNAL NAME IN DRW FILE CPNOUT: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, MOVSI T,'CPN' ;CON PIN EXT MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, PUSHJ P,CLEARW ;CLEAR WIRE MARK BITS TLZ TFLG ;FLAG NOTHING TYPED YET MOVEI H,RADDR(W,WIRES,ALPH) JRST CPNC1 CPNC2: FETCH(T,H,WBIT) TRNE T,NAM2ND!WNULL!WSINGL ;SKIP FAKES, NULLS, AND SINGLES JRST CPNC1 SETO TT, MOVEI G,RADDR(H,WPIN,NXTP) JRST CPNC3 CPNC4: FETCH(T,G,PBIT) TRNE T,DUP JRST CPNC3 FETCH(T,G,PBDY) FETCH(T,T,BBIT) TRNE T,CBODY AOJG TT,CPNC5 ;JUMP IF SECOND PIN CPNC3: FETCH(G,G,NXTP) JUMPN G,CPNC4 JRST CPNC1 CPNC5: FETCH(T,H,WBIT) TRO T,WTMP1 STORE(T,H,WBIT) TRNE T,SPWR!SGND!SHI!SNC ;DON'T PRINT THESE JRST CPNC1 TLON TFLG ;HEADING PRINTED? OUTSTR[ASCIZ/THE FOLLOWING MULTI-EDGE-PIN RUNS WILL BE SKIPPED: /] MOVE G,H CPNC6: OUTSIG ADDR(G,SPNT) OUTSTR[ASCIZ/ /] FETCH(G,G,NNAM) JUMPN G,CPNC6 CPNC1: FETCH(H,H,ALPH) JUMPN H,CPNC2 FETCH(H,W,WBDY) ;NOW GO DOWN BODY LIST JUMPE H,CPNBNX ;JUMP IF NONE CPNO1: FETCH(T,H,BBIT) TRNN T,CBODY ;CONNECTOR? JRST CPNO2 ;NO FETCH(G,H,BPIN) ;YES, GET FIRST PIN CPNO3: FETCH(T,G,PBIT) TRNE T,DUP ;DON'T DO DUPLICATES JRST CPNO4 FETCH(F,G,HPNT) FETCH(T,F,WBIT) ;GET WIRE TYPE BITS TRNE T,SPWR!SGND!SNC!SHI!WTMP1 ;NOT FOR THESE JRST CPNO4 CPNO5: FETCH(A,H,BLOC) FETCH(T,G,PINN) HRL A,T PUSHJ P,LOCPNC PUTBYT 11 PUTSIG ADDR(F,SPNT) CRLF FETCH(F,F,NNAM) JUMPN F,CPNO5 CPNO4: FETCH(G,G,NXBP) JUMPN G,CPNO3 CPNO2: FETCH(H,H,NXTB) JUMPN H,CPNO1 CPNBNX: RELEASE LST, POPJ P, SUBTTL 'SPI' ADD CONNECTOR PIN DESIGNATION TO EACH SIGNAL NAME IN DRW FILE SPIOUT: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, MOVSI T,'SPI' ;CON PIN EXT MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, TLO SIMTAB ;SIMULATE TABS, THIS IS FOR COBOL PUSHJ P,CLEARW ;CLEAR WIRE MARK BITS FETCH(H,W,WBDY) ;NOW GO DOWN BODY LIST JUMPE H,SPIBNX ;JUMP IF NONE SPIO1: FETCH(T,H,BBIT) TRNN T,CBODY ;CONNECTOR? JRST SPIO2 ;NO FETCH(G,H,BPIN) ;YES, GET FIRST PIN SPIO3: FETCH(T,G,PBIT) TRNE T,DUP ;DON'T DO DUPLICATES JRST SPIO4 FETCH(F,G,HPNT) FETCH(T,F,WBIT) TRNE T,SPWR!SGND!SNC!SHI ;SKIP THESE JRST SPIO4 FETCH(A,H,BLOC) FETCH(T,G,PINN) HRL A,T PUSHJ P,LOCPNC PUTBYT 11 FETCH(T,F,WBIT) MOVEI E,"0" ;CODE 0 FOR FIRST SIGNAL LINE TROE T,WTMP1 ;MARK RUN OUT MOVEI E,"1" ;CODE 1 FOR REPEATED SIGNAL LINE STORE(T,F,WBIT) PUSHJ P,SPIO5 SPIO4: FETCH(G,G,NXBP) JUMPN G,SPIO3 SPIO2: FETCH(H,H,NXTB) JUMPN H,SPIO1 SPIBNX: FETCH(F,W,WIRES) JUMPE F,SPIWNX SPIW1: FETCH(T,F,WBIT) TRNE T,WTMP1!NAM2ND!WNULL!GENSIG!SPWR!SGND!SNC!SHI ;DON'T DO ANY OF THESE JRST SPIW2 MOVEI E,"3" ;CODE 3 FOR NON-EDGE SIGNAL PUSHJ P,SPIO5 SPIW2: FETCH(F,F,ALPH) JUMPN F,SPIW1 SPIWNX: RELEASE LST, POPJ P, SPIO5: PUSH P,F SPIO5A: MOVEI A,=8 PUSHJ P,SPFILL FETCH(D,F,WPIN) SETZ C, SPIO6: FETCH(T,D,PTYP) JUMPE T,SPIO7 FETCH(T,T,DPBIT) TRNN T,OUTLD JRST SPIO7 JUMPN C,SPIO8 MOVE C,D SPIO7: FETCH(D,D,NXTP) JUMPN D,SPIO6 JUMPE C,SPIO8 FETCH(A,C,FILP) FETCH(A,A,FPRF) PUSHJ P,PRINT4 ;ONLY 4 CHARS SPIO8: MOVEI A,=16 PUSHJ P,SPFILL PUTBYT (E) MOVEI E,"2" ;CODE 2 FOR MULTIPLE SIGNAL NAMES PUTBYT " " MOVEI T,ADDR(F,SPNT) MOVE TT,[=64,,=64] PUSHJ P,SMPPUT ;64 CHARS SIGNAL NAME, ASSERTION/POLARITY SKIPE OVRFLW ;OVERFLOW? PUTSTR[ASCIZ/ */] ;YES, FLAG IT CRLF FETCH(F,F,NNAM) JUMPN F,SPIO5A POP P,F POPJ P, >;DEC SUBTTL 'STF' AND 'PRT' DIP STUFFING AND PARTS LISTS PRTLST: TROA DOPRTL STFLST: TRZ DOPRTL SETZM ALLNAM SETZM ALLCRD ALLSTF: MOVE L,DEFLST SKIPE T,ALLCRD JRST [ MOVEM T,SLICEL JRST GALSTF] PUSHJ P,LSTGET POPJ P, GALSTF: FETCH(H,W,WBDY) JUMPE H,[OUTSTR[ASCIZ/NO BODIES AT ALL! /] POPJ P,] ;SKIP IF NO BODIES TRNE DOPRTL SKIPA T,['PRT '] MOVSI T,'STF' ;STUFFING EXT MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,ALLSET POPJ P, PUSHJ P,FILLST PUTHDR TRNE DOPRTL JRST PRT1 MOVEI T,[ASCIZ/PART NUMBER DIPTYPE LOC BODY FILE POS/] MOVEM T,HEADER MOVEI T,STFMAR MOVEM T,MARGIN SETZM LINCNT PUSHJ P,CLEARB SETZM CDSKPC ;COUNT OF NUMBER OF BODIES WITHOUT DIPS MOVEI H,RADDR(W,WBDY,NXTB);GO MARK ALL BODIES WITHOUT LOCS JRST STFC2 STFC1: FETCH(T,H,BLOC) JUMPN T,STFC2 AOS CDSKPC FETCH(T,H,BBIT) TRO T,BTMP1 STORE(T,H,BBIT) STFC2: FETCH(H,H,NXTB) JUMPN H,STFC1 MOVEI T,PARTLIST-ADDR(0,NXPL) MOVEM T,LSTPART ;SET PARTLIST AS LAST PART STFA0: SKIPN T,LSTPART JRST STFDON JRST STFA1 STFA2: FETCH(TT,T,PLPT) FETCH(TT,TT,PRBT) TRNE TT,PNUSED JRST STFA3 STFA1: FETCH(T,T,NXPL) JUMPN T,STFA2 STFA3: MOVEM T,LSTPART PUSHJ P,STFADO JRST STFA0 STFADO: TRZ FLAG ;FLAG PART NUMBER NOT PRINTED YET MOVEI H,RADDR(W,WBDY,NXTB);GOING DOWN BODY LIST CAIA ;SKIP CRLF INITIALLY STF1: CRLF SETZM LSLOT ;FORGET LAST SLOT SETOM LSTDIP ;AND DIP TYPE STF3: FETCH(H,H,NXTB) ;NEXT BODY JUMPE H,CPOPJ FETCH(TTT,H,BBIT) TRNE TTT,CBODY!BTMP1 ;CONNECTOR BODY? JRST STF3 ;YES, SKIP FETCH(T,H,PRTN) PUSHJ P,PNCHK ;CORRECT PART NUMBER? JRST STF3 ;NO FETCH(TTT,H,BBIT) TRO TTT,BTMP1 STORE(TTT,H,BBIT) FETCH(T,H,DIPT) ;GET DIP TYPE MOVEM T,LSTDIP FETCH(TT,H,BLOC) MOVEM TT,LSLOT SKIPL LINCNT PUSHJ P,PUTHDR TROE FLAG JRST STF8 SKIPN A,LSTPART JRST STF8B FETCH(A,A,PLPT) FETCH(A,A,PRVS) PUSHJ P,STROUT JRST STF8 STF8B: PUTSTR[ASCIZ\N/A\] STF8: MOVEI A,=16 PUSHJ P,FILL SKIPN A,LSTDIP JRST [ PUTSTR[ASCIZ\N/A\] JRST STF8A] FETCH(A,A,DNAM) PUSHJ P,STROUT ;DIP NAME STF8A: MOVE G,H ;START WITH CURRENT BODY STF4: MOVEI A,=32 PUSHJ P,FILL FETCH(A,G,BLOC) FETCH(T,G,BBIT) PUSHJ P,WLOCOUT PUTSTR[ASCIZ/( )/] STF5: MOVEI A,=40 PUSHJ P,FILL PUTSTR ADDR(G,BNAM) PUTBYT 11 FETCH(A,G,FILB) PUTSIX ADDR(A,FILN) PUTBYT 11 FETCH(A,G,BBIT) PUSHJ P,BPPNT CRLF STF7: FETCH(G,G,NXTB) JUMPE G,STF1 ;TRY ANOTHER DIP YET? FETCH(T,G,DIPT) CAME T,LSTDIP JRST STF7 FETCH(T,G,PRTN) PUSHJ P,PNCHK JRST STF7 FETCH(T,G,BBIT) TRO T,BTMP1 STORE(T,G,BBIT) FETCH(T,G,BLOC) CAMN T,LSLOT JRST STF5 MOVEM T,LSLOT JRST STF4 STFDON: SKIPN T,CDSKPC JRST STFDN1 CRLF PUTSTR[ASCIZ/NUMBER OF BODIES WITH NO LOCATION SET = /] PUSHJ P,DECOUT CRLF STFDN1: RELEASE LST, POPJ P, PNCHK: SKIPN TT,LSTPART JRST [ JUMPN T,CPOPJ ;NOT NOW JRST CPOPJ1] PNCHK2: FETCH(TTT,TT,PLPT) CAMN TTT,T JRST CPOPJ1 FETCH(TT,TT,NXPL) JUMPE TT,CPOPJ FETCH(TTT,TT,PLBT) TRNE TTT,PL2ND JRST PNCHK2 POPJ P, PRT1: MOVEI T,[ASCIZ/ PART NUMBER DIPTYPE COUNT DESCRIPTION LOCATIONS/] MOVEM T,HEADER MOVEI T,PRTMAR MOVEM T,MARGIN SETZM LINCNT PUSHJ P,CLEARB SETOM NBODS MOVEI T,PARTLIST-ADDR(0,NXPL) MOVEM T,LSTPART ;SET PARTLIST AS LAST PART PRTA0: SKIPN T,LSTPART JRST STFDN1 ;DONE, DON'T DUMP TOTALS FOR N/A JRST PRTA1 PRTA2: FETCH(TT,T,PLPT) FETCH(TT,TT,PRBT) TRNE TT,PNUSED JRST PRTA3 PRTA1: FETCH(T,T,NXPL) JUMPN T,PRTA2 PRTA3: PUSH P,T SKIPLE NBODS PUSHJ P,PRTDMP ;DUMP OUT TOTALS OF LAST PART NUMBER TRZ FLAG SETOM NBODS SETZM TMPCN1 SETZM TMPCN2 POP P,T PRTA6: MOVEM T,LSTPART PUSHJ P,PRTADO TRNN FLAG ;DID WE PRINT ANY YET? JRST PRTA0 ;NO, JUST LOOP BACK SKIPN T,LSTPART JRST STFDN1 PRTA4: FETCH(T,T,NXPL) JUMPE T,PRTA3 FETCH(TT,T,PLBT) TRNN TT,PL2ND JRST PRTA2 ;JUMP INTO NORMAL LOOP IF NOT SAME NUMBER FETCH(TT,T,PLPT) FETCH(TT,TT,PRBT) TRNN TT,PNUSED JRST PRTA4 JRST PRTA6 PRTADO: MOVEI H,RADDR(W,WBDY,NXTB) JRST PRT2 PRT3: FETCH(TTT,H,BBIT) TRNE TTT,CBODY!BTMP1 ;SKIP CONS JRST PRT2 FETCH(T,H,PRTN) SKIPE TT,LSTPART FETCH(TT,TT,PLPT) CAME TT,T JRST PRT2 HRLZM T,LSTDIP FETCH(T,H,BBIT) TRO T,BTMP1 STORE(T,H,BBIT) FETCH(T,H,DIPT) HRRM T,LSTDIP FETCH(T,H,PRPX) MOVEM T,LPRPX SETZM LSLOT ;NO LOC COUNTED YET SKIPL LINCNT PUSHJ P,PUTHDR SETZM NDIPS SETZM TOTDIP MOVE G,H ;START WITH THIS BODY PRT4: FETCH(TTT,G,BBIT) TRNE TTT,CBODY JRST PRT6 FETCH(T,G,DIPT) FETCH(TT,G,PRTN) HRL T,TT CAME T,LSTDIP JRST PRT6 FETCH(T,G,PRPX) CAME T,LPRPX JRST PRT6 TRO TTT,BTMP1 STORE(TTT,G,BBIT) FETCH(T,G,BLOC) JUMPN T,PRT5 MOVSI T,1 ADDM T,TOTDIP JRST PRT6 PRT5: AOS TOTDIP CAME T,LSLOT AOS NDIPS MOVEM T,LSLOT PRT6: FETCH(G,G,NXTB) JUMPN G,PRT4 AOS NBODS ;COUNT ANOTHER LINE PRINTED TROE FLAG JRST PRT9 SKIPN A,LSTPART JRST PRT9B FETCH(A,A,PLPT) FETCH(A,A,PRVS) PUSHJ P,STROUT JRST PRT9 PRT9B: PUTSTR[ASCIZ\N/A\] PRT9: MOVEI A,=16 PUSHJ P,FILL HRRZ G,LSTDIP JUMPE G,[PUTSTR[ASCIZ\N/A\] JRST PRT9A] FETCH(A,G,DNAM) PUSHJ P,STROUT PRT9A: MOVEI A,=32 PUSHJ P,FILL MOVE T,NDIPS ADDM T,TMPCN1 PUSHJ P,DECOUT MOVE T,TOTDIP ADDM T,TMPCN2 SKIPN T,LSTPART JRST PRT8 FETCH(T,T,PLPT) FETCH(T,T,PRPP) ;SKIP PART NUMBER PRT8: MOVEM T,PRPPTR MOVE T,LPRPX MOVEM T,PRXPTR MOVE G,H SETZM FSLOT SETZM LSLOT PRT7: PUSHJ P,PRPLIN ;ONE LINE OF PROPERTIES JRST PRT7A ;NO MORE PROPERTIES PUSHJ P,LOCLIN JFCL CRLF JRST PRT7 PRT7A: PUSHJ P,LOCLIN JRST PRT7B CRLF JRST PRT7A ;LOOP TILL DONE PRT7B: SKIPE LCOUNT CRLF PRT2: FETCH(H,H,NXTB) JUMPN H,PRT3 POPJ P, PRPLIN: SKIPN B,PRPPTR JRST PRPLX1 PRPL0: FETCH(T,B,PRBT) TRNN T,NULVAL JRST PRPL0A FETCH(B,B,PRPP) JUMPN B,PRPL0 MOVEM B,PRPPTR JRST PRPLX1 PRPL0A: MOVEI A,=40 PUSHJ P,FILL PRPL1: MOVE T,LCOUNT CAIG T,=40 JRST PRPL2 SUBI T,=78+2 ;COUNT DELIMITERS HERE MOVEM T,TCOUNT PUSH P,PUTCHR MOVE T,[PUSHJ P,TAOS] MOVEM T,PUTCHR FETCH(A,B,PRVS) PUSHJ P,STROUT POP P,PUTCHR SKIPLE TCOUNT JRST CPOPJ1 ;END THIS LINE PUTSTR[ASCIZ/, /] PRPL2: FETCH(A,B,PRVS) PUSHJ P,STROUT PRPL3: FETCH(B,B,PRPP) MOVEM B,PRPPTR JUMPE B,CPOPJ1 FETCH(T,B,PRBT) TRNE T,NULVAL JRST PRPL3 JRST PRPL1 PRPLX1: SKIPN B,PRXPTR POPJ P, MOVEI A,=40 PUSHJ P,FILL PRPLX2: MOVE T,LCOUNT CAIG T,=40 JRST PRPLX3 SUBI T,=78-3 ;COUNT DELIMITERS HERE MOVEM T,TCOUNT PUSH P,PUTCHR MOVE T,[PUSHJ P,TAOS] MOVEM T,PUTCHR FETCH(A,B,TLFT) PUSHJ P,STROUT FETCH(A,B,TRHT) PUSHJ P,STROUT POP P,PUTCHR SKIPLE TCOUNT JRST CPOPJ1 ;END THIS LINE PUTSTR[ASCIZ/, /] PRPLX3: FETCH(A,B,TLFT) PUSHJ P,STROUT PUTBYT ":" FETCH(A,B,TRHT) PUSHJ P,STROUT FETCH(B,B,NXTT) MOVEM B,PRXPTR JUMPN B,PRPLX2 JRST CPOPJ1 LOCLIN: HLRZ T,TOTDIP JUMPN T,LOCLN0 JUMPE G,LOCLN7 LOCLN1: FETCH(T,G,BBIT) TRNE T,CBODY JRST LOCLN2 FETCH(T,G,DIPT) FETCH(TT,G,PRTN) HRL T,TT CAME T,LSTDIP JRST LOCLN2 FETCH(T,G,PRPX) CAME T,LPRPX JRST LOCLN2 FETCH(A,G,BLOC) JUMPE A,LOCLN2 CAMN A,LSLOT JRST LOCLN2 SKIPN FSLOT JRST [ MOVEM A,FSLOT MOVEM A,LSLOT JRST LOCLN2] MOVE T,LSLOT MOVE TT,A PUSHJ P,SEQLOC CAIA JRST [ MOVEM A,LSLOT JRST LOCLN2] LOCLN8: PUSHJ P,LOCLPN JRST CPOPJ1 MOVE T,FSLOT CAMN T,LSLOT JRST LOCLN6 MOVE TT,LSLOT PUSHJ P,SEQLOC JRST LOCLN6 MOVE T,LSLOT MOVEM T,FSLOT PUSHJ P,LOCLPN JRST CPOPJ1 LOCLN6: JUMPE G,[SETZM FSLOT POPJ P,] FETCH(A,G,BLOC) MOVEM A,FSLOT MOVEM A,LSLOT LOCLN2: FETCH(G,G,NXTB) JUMPN G,LOCLN1 LOCLN7: SKIPE FSLOT JRST LOCLN8 POPJ P, LOCLPN: TLZ TFLG MOVE T,FSLOT CAMN T,LSLOT JRST LOCLN4 MOVE TT,LSLOT PUSHJ P,SEQLOC TLO TFLG LOCLN4: MOVE T,LCOUNT CAIGE T,=80 JRST [ MOVEI A,=80 PUSHJ P,FILL JRST LOCLN3] SUB T,LWIDTH ADDI T,2 ;COUNT DELIMITERS HERE MOVEM T,TCOUNT PUSH P,PUTCHR MOVE T,[PUSHJ P,TAOS] MOVEM T,PUTCHR MOVE A,FSLOT FETCH(T,G,BBIT) PUSHJ P,WLOCOUT TLNN TFLG JRST LOCLN5 AOS TCOUNT ;ONE CHARACTER FOR DASH BETWEEN LOCS MOVE A,LSLOT FETCH(T,G,BBIT) PUSHJ P,WLOCOUT LOCLN5: POP P,PUTCHR SKIPLE TCOUNT POPJ P, PUTSTR[ASCIZ/, /] LOCLN3: AOS (P) ;WILL PRINT, SKIP MOVE A,FSLOT FETCH(T,G,BBIT) PUSHJ P,WLOCOUT TLNN TFLG POPJ P, PUTBYT "-" MOVE A,LSLOT FETCH(T,G,BBIT) JRST WLOCOUT LOCLN0: MOVEI A,=80 PUSHJ P,FILL PUTSTR[ASCIZ/NO. OF GATES WITH NO REF. DES. = /] HLRZ T,TOTDIP PUSHJ P,DECOUT HRRZS TOTDIP JRST CPOPJ1 PRTDMP: MOVEI A,=24 PUSHJ P,FILL PUTSTR[ASCIZ/TOTAL = /] MOVE T,TMPCN1 PUSHJ P,DECOUT HLRZ T,TMPCN2 JUMPE T,PRTDM1 PUTSTR[ASCIZ/ NO. OF GATES WITH NO REF. DES. = /] HLRZ T,TMPCN2 PUSHJ P,DECOUT PRTDM1: CRLF POPJ P, TAOS: SKIPE TTT AOS TCOUNT POPJ P, SUBTTL 'OTS' OUTPUT TERMINATION SUMMARY OUTSUM: SKIPN DIPLST JRST [ OUTSTR[ASCIZ/SORRY, NO DIPS. /] POPJ P,] MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, FETCH(H,W,WBDY) JUMPE H,[OUTSTR[ASCIZ/NO BODIES AT ALL! /] POPJ P,] ;SKIP IF NO BODIES MOVSI T,'OTS' ;OUTPUT TERMINATION SUMMARY EXT MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, PUSHJ P,FILLST PUTHDR MOVEI T,[ASCIZ/DIPTYPE PIN # OFF ON TOTAL BOARD/] MOVEM T,HEADER MOVEI T,OTSMAR MOVEM T,MARGIN SETZM LINCNT PUSHJ P,DCLEAR ;CLEAR DIP TEMP CELL SETZM CDSKPC MOVEI H,RADDR(W,WBDY,NXTB);GOING DOWN BODY LIST OTS1: SETZM LSLOT ;FORGET LAST SLOT SETZM LSTDIP ;AND DIP TYPE OTS2: FETCH(H,H,NXTB) ;NEXT BODY JUMPE H,OTSDON FETCH(TTT,H,BBIT) TRNE TTT,CBODY ;CONNECTOR BODY? JRST OTS2 ;YES, SKIP FETCH(G,H,DIPT) ;GET DIP TYPE JUMPE G,[AOS CDSKPC JRST OTS2] FETCH(TTT,G,DTMP) TROE TTT,1 ;THIS DIP DONE YET? JRST OTS2 ;YES STORE(TTT,G,DTMP) ;NO, STORE BIT ON MOVEM G,LSTDIP TLZ TFLG ;FLAG DIPTYPE NOT PRINTED YET MOVEI G,RADDR(G,DPIN,DPNXT) JRST OTS4 OTS3: FETCH(E,G,DPNM) FETCH(T,G,DPBIT) ;GET PIN TYPE BITS TRNN T,OUTLD ;OUTPUT? JRST OTS4 ;NO, TRY NEXT ONE MOVE F,H ;GOT ONE, START WITH FIRST BODY SETZ D, ;CLEAR COUNTS JRST OTS5 OTS6: FETCH(T,F,DIPT) ;GET DIP TYPE CAMN T,LSTDIP ;SAME DIP? JRST OTS5 ;YES OTS7: FETCH(F,F,NXTB) ;LOOK FOR ANOTHER BODY OF THIS DIP TYPE JUMPN F,OTS6 JUMPE D,OTS4 ;IF NO COUNT, GO STRAIGHT TO NEXT PIN TLOE TFLG ;DIP NAME OUT YET? JRST OTS10 ;YES SKIPL LINCNT PUSHJ P,PUTHDR MOVE A,LSTDIP FETCH(A,A,DNAM) PUSHJ P,STROUT ;PRINT DIP NAME MOVE T,LCOUNT CAIGE T,8 PUTBYT 11 CAIA OTS10: PUTBYT 11 PUTBYT 11 MOVE T,E PUSHJ P,DECOUT ;PIN # PUTBYT 11 HLRZ T,D PUSHJ P,DECOUT ;# OFF BOARD PUTBYT 11 HRRZ T,D PUSHJ P,DECOUT ;# ON BOARD PUTBYT 11 HLRZ T,D ADDI T,(D) PUSHJ P,DECOUT ;TOTAL CRLF JRST OTS4 ;TRY ANOTHER DIP PIN OTS5: FETCH(C,F,BPIN) ;GET BODY PIN LIST JUMPE C,OTS7 ;IF NONE, LOOP BACK FOR ANOTHER BODY OTS8: FETCH(T,C,PBIT) TRNE T,DUP ;SKIP DUP'S JRST OTS9 FETCH(T,C,PINN) ;GET PIN # CAME T,E ;SAME AS ONE WE ARE DOING? JRST OTS9 FETCH(TT,C,HPNT) ;GET WIRE HEADER POINTER FETCH(T,TT,WBIT) ;WIRE TYPE BITS TRNE T,WNULL!WSINGL ;IGNORE THESE PINS JRST OTS9 FETCH(T,TT,TBIT) ;GET ACCUMULATED TYPE BITS TRNN T,ANYCON ;IS THERE A TERMINATOR ON THIS RUN? AOJA D,OTS9 ;NO, COUNT UNTERMINATED ADD D,[1,,0] ;YES, COUNT AS TERMINATED OTS9: FETCH(C,C,NXBP) ;NEXT BODY PIN JUMPN C,OTS8 JRST OTS7 ;GET ANOTHER BODY OTS4: FETCH(G,G,DPNXT) ;NEXT DIP PIN JUMPN G,OTS3 JRST OTS1 ;TRY FOR ANOTHER DIP OTSDON: SKIPN T,CDSKPC JRST OTSDN1 CRLF PUTSTR[ASCIZ/NUMBER OF BODIES WITH NO DIP TYPE = /] PUSHJ P,DECOUT CRLF OTSDN1: RELEASE LST, POPJ P, SUBTTL 'OTL' OUTPUT TERMINATION LISTING TRMLST: SKIPN DIPLST JRST [ OUTSTR[ASCIZ/SORRY, NO DIPS. /] POPJ P,] MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, FETCH(H,W,WBDY) JUMPE H,[OUTSTR[ASCIZ/NO BODIES AT ALL! /] POPJ P,] ;SKIP IF NO BODIES MOVSI T,'OTL' ;OUTPUT TERMINATION LIST EXT MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, PUSHJ P,FILLST PUTHDR PUSHJ P,CLEARP ;CLEAR PIN MARK BITS MOVEI H,RADDR(W,WIRES,ALPH) JRST TRML1 TRML2: FETCH(T,H,WBIT) TRNE T,NAM2ND!WNULL!WSINGL!SNC!SHI!SPWR!SGND ;INTERESTING RUN? JRST TRML1 ;NO, SKIP IT FETCH(G,H,WPIN) SETZB F,E ;NO CON FOUND YET TRML3: FETCH(T,G,PTYP) JUMPE T,TRML6 FETCH(T,T,DPBIT) TRNE T,OUTLD ;FOUND OUTPUT? JRST TRML5 ;YES, WIN IMMEDIATELY JUMPN F,TRML4 ;LOOK NO FURTHER IF WE HAVE CON TRML6: FETCH(T,G,PBDY) FETCH(T,T,BBIT) TRNE T,CBODY JRST [ MOVE F,G ;REMEMBER CON JRST TRML4] JUMPN E,TRML4 FETCH(T,G,PTYP) JUMPE T,TRML4 FETCH(T,T,DPBIT) TRNN T,TERM ;DON'T REMEMBER TERM MOVE E,G TRML4: FETCH(G,G,NXTP) JUMPN G,TRML3 SKIPE G,F JRST TRML5 ;WE HAVE CON SKIPN G,E ;NO CON, DO WE HAVE NON TERM? FETCH(G,H,WPIN) ;NO, USE FIRST PIN OF RUN TRML5: FETCH(T,G,PBIT) TRO T,PTMP1 STORE(T,G,PBIT) TRML1: FETCH(H,H,ALPH) JUMPN H,TRML2 TRZ CONLY TRMLB0: TRNE CONLY SKIPA T,[[ASCIZ/UNTERMINATED RUNS TEST PIN DIPTYPE SIGNAL/]] MOVEI T,[ASCIZ/TERMINATED RUNS TEST PIN DIPTYPE TERM PIN VALUE SIGNAL/] MOVEM T,HEADER MOVEI T,OTLMAR MOVEM T,MARGIN SETZM LINCNT MOVEI H,RADDR(W,WBDY,NXTB) JRST TRMLB1 TRMLB2: FETCH(G,H,BPIN) TRMLB4: FETCH(T,G,PBIT) TRNN T,PTMP1 JRST TRMLB3 FETCH(T,G,HPNT) FETCH(T,T,TBIT) TRNE CONLY TRC T,TERM ;INVERT TEST ON SECOND PASS TRNN T,TERM JRST TRMLB3 SKIPL LINCNT PUSHJ P,PUTHDR FETCH(A,H,BLOC) FETCH(T,G,PINN) HRL A,T FETCH(T,H,BBIT) TRNN T,CBODY JRST TRMLB5 PUSHJ P,LOCPNW JRST TRMLB6 TRMLB5: FETCH(B,H,BPAK) PUSHJ P,LOCPNP TRMLB6: MOVEI A,=16 PUSHJ P,FILL FETCH(T,H,BBIT) TRNN T,CBODY JRST TRMLB7 PUTSTR[ASCIZ/CON/] JRST TRMLB8 TRMLB7: FETCH(A,H,DIPT) JUMPE A,TRMLB8 FETCH(A,A,DNAM) PUSHJ P,STROUT TRMLB8: FETCH(F,G,HPNT) TRNE CONLY JRST TRMLC1 FETCH(E,F,WPIN) PUSHJ P,TRMPNT JFCL MOVEI A,=64 PUSHJ P,FILL FETCH(F,G,HPNT) PUTSIG ADDR(F,SPNT) CRLF TRMLB9: PUSHJ P,TRMPNT JRST TRMLB3 CRLF JRST TRMLB9 TRMLC1: MOVEI A,=32 PUSHJ P,FILL PUTSIG ADDR(F,SPNT) CRLF TRMLB3: FETCH(G,G,NXBP) JUMPN G,TRMLB4 TRMLB1: FETCH(H,H,NXTB) JUMPN H,TRMLB2 TRON CONLY ;SECOND PASS YET? JRST TRMLB0 ;NO, DO IT RELEASE LST, POPJ P, TRMPN1: FETCH(T,E,PTYP) JUMPE T,TRMPN2 FETCH(T,T,DPBIT) TRNE T,TERM JRST TRMPN3 TRMPN2: FETCH(E,E,NXTP) TRMPNT: JUMPN E,TRMPN1 POPJ P, TRMPN3: MOVEI A,=32 PUSHJ P,FILL PUSH P,F FETCH(F,E,PBDY) FETCH(T,F,BBIT) FETCH(A,F,BLOC) FETCH(TT,E,PINN) HRL A,TT FETCH(B,F,BPAK) PUSHJ P,LOCPNP MOVEI A,=48 PUSHJ P,FILL PUSH P,E PUSHJ P,VALPNT ;PRINT VALUE OF TERM POP P,E POP P,F FETCH(E,E,NXTP) JRST CPOPJ1 SUBTTL 'RES' FILE FOR RESISTOR DRAWING DEC,< RESFIL: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, MOVSI T,'RES' ;RESISTOR FILE MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, TLO SIMTAB ;ALWAYS SIMULATE TABS MOVEI H,RADDR(W,WIRES,ALPH) JRST RESFL1 RESFL2: FETCH(T,H,WBIT) TRNE T,NAM2ND JRST RESFL1 ;ONLY LOOK AT REAL WIRES FETCH(T,H,TBIT) TRC T,ECL!TERM TRCE T,ECL!TERM ;ANY ECL TERMS ON THIS WIRE? JRST RESFL1 MOVEI G,RADDR(H,WPIN,NXTP) JRST RESFL3 RESFL4: FETCH(T,G,PTYP) JUMPE T,RESFL3 FETCH(T,T,DPBIT) TRC T,ECL!TERM TRCE T,ECL!TERM JRST RESFL3 FETCH(T,G,PBIT) FETCH(F,G,PBDY) TRNE T,DUP ;DON'T REPEAT LOC IF DUP JRST RESFL5 FETCH(A,F,BLOC) FETCH(T,G,PINN) HRL A,T FETCH(B,F,BPAK) PUSHJ P,LOCPNP ;PUT OUT LOC RESFL5: MOVEI A,=16 PUSHJ P,FILL FETCH(A,G,FILP) PUTSIX ADDR(A,FILN) PUTBYT 11 FETCH(A,F,BBIT) PUSHJ P,BPPNT ;DWG POS PUTBYT 11 PUSHJ P,VALPNT MOVEI A,=48 PUSHJ P,FILL FETCH(A,G,HPNT) PUTSIG ADDR(A,SPNT) CRLF RESFL3: FETCH(G,G,NXTP) JUMPN G,RESFL4 RESFL1: FETCH(H,H,ALPH) JUMPN H,RESFL2 RELEASE LST, POPJ P, >;DEC ;VALPNT -PRINT "VALUE" PROPERTY OF RESISTOR ;CALL WITH F:POINTER TO BODY ;CLOBBERS E, A, T, TT, TTT VALPNT: FETCH(E,F,PRTN) JUMPE E,RESFL6 RESFL7: FETCH(T,E,PRNB) FETCH(T,T,PRNS) MOVEI TT,[ASCIZ/VALUE/] PUSHJ P,ASCPAR ;IS THIS VALUE PROPERTY? JRST RESFL8 JRST RESFL8 FETCH(A,E,PRVS) JRST STROUT RESFL8: FETCH(E,E,PRPP) JUMPN E,RESFL7 RESFL6: PUTSTR[ASCIZ\N/A\] POPJ P, SUBTTL 'MPL' MASTER PARTS LIST - READ COUNTS MPART: SKIPN H,MODLST JRST [ OUTSTR[ASCIZ/NO MODULES. /] POPJ P,] CLMCNT: CLEAR(H,MNUM) FETCH(H,H,MNXT) JUMPN H,CLMCNT MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR MOVE T,[PUSHJ P,TTYOUT] MOVEM T,PUTCHR MOVSI T,'MCF' MOVEM T,DEFEXT TLZ ASKHIM ;ASSUME WILL NOT READ FILE PUSHJ P,SETFIL JRST NOMODC TLO ASKHIM ;WE ARE READING FILE PUSHJ P,IN0 ;READ IN TEXT MODE POPJ P, ;FOO LOOKUP DAT,FILNAM JRST [ OUTSTR[ASCIZ/LOOKUP FAILED, CODE= /] HRRZ T,FILEXT PUSHJ P,DECOUT OUTSTR[ASCIZ/ /] POPJ P,] OUTSTR[ASCIZ/ /] MOVE T,[PUSHJ P,BYTIN] MOVEM T,GETCHR SKIPE B,MPLTIT PUSHJ P,PUTFS SETZM MPLTIT PUSHJ P,ISTR JRST IMCFE JFCL ;ALTMODE FROM FILE, IGNORE IT SETZ B, ;NULL, STORE NULL MOVEM B,MPLTIT CAIN TTT,12 JRST IMCF1 PUTSTR[ASCIZ/ILLEGAL TAB OR ALTMODE IN TITLE LINE: /] SKIPE A,MPLTIT PUSHJ P,STROUT PUTBYT 11 JRST ILLLN3 IMCF1: PUSHJ P,ISTR JRST IMCFE ;END OF FILE HERE OK JRST ILLLIN ;ALTMODE ILLEGAL JRST ILLLIN ;ILLEGAL LINE, SKIP IT MOVEM B,STRING SETZ B, CAIE TTT,11 JRST IMCF2 PUSHJ P,DECIN JRST MCFEOB MOVE B,A IMCF2: CAIE TTT,12 JRST ILLLN1 ;ILLEGAL FORMAT LINE MOVE A,MODLST IMCF3: FETCH(T,A,MNAM) MOVE TT,STRING PUSHJ P,TXTMAT JRST IMCF4 JRST IMCF5 FETCH(T,A,MNUM) JUMPE T,IMCFOK PUTSTR[ASCIZ/COUNT FOR MODULE APPEARS MORE THAN ONCE: /] PUSH P,A FETCH(A,A,MNAM) PUSHJ P,STROUT POP P,A PUTBYT 11 FETCH(T,A,MNUM) PUSHJ P,DECOUT PUTSTR[ASCIZ/ OLD /] MOVE T,B PUSHJ P,DECOUT PUTSTR[ASCIZ/ NEW /] IMCFOK: STORE(B,A,MNUM) MOVE B,STRING PUSHJ P,PUTFS JRST IMCF1 IMCF4: FETCH(A,A,MNXT) JUMPN A,IMCF3 IMCF5: PUTSTR[ASCIZ/MODULE NOT FOUND: /] MOVE A,STRING PUSHJ P,STROUT PUTSTR[ASCIZ/ /] MOVE B,STRING PUSHJ P,PUTFS JRST IMCF1 ILLLN1: PUTSTR[ASCIZ/FORMAT ERROR IN LINE STARTING: /] MOVE A,STRING PUSHJ P,STROUT PUTSTR[ASCIZ/ /] MOVE B,STRING PUSHJ P,PUTFS ILLLN2: XCT GETCHR JRST MCFEOF CAIE TTT,12 JRST ILLLN2 JRST IMCF1 ILLLIN: CAIN TTT,12 JRST IMCF1 ;JUST SKIP BLANK LINES PUTSTR[ASCIZ/NULL MODULE NAME ON LINE: /] ILLLN3: XCT GETCHR JRST [ PUTSTR[ASCIZ/ /] JRST MCFEOF] CAIN TTT,12 JRST [ PUTSTR[ASCIZ/ /] JRST IMCF1] PUTBYT (TTT) JRST ILLLN3 MCFEOB: MOVE B,STRING PUSHJ P,PUTFS MCFEOF: PUTSTR[ASCIZ/END OF FILE IN MID-LINE. /] IMCFE: RELEASE DAT, NOMODS: OUTSTR[ASCIZ/% SPARES? /] MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR PUSHJ P,DECIN JFCL CAIE TTT,12 JRST [ PUSHJ P,IERR OUTSTR[ASCIZ/INPUT ERROR. /] JRST NOMODS] MOVEM A,FACTR1 ; MASTER PARTS LIST - LISTING NOMODC: MOVSI T,'MPL' ;MASTER PARTS LIST EXT MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, PUSHJ P,FILLST MHDRA MOVEI T,MPMMAR MOVEM T,MARGIN SETZM LINCNT MOVEI T,[ASCIZ/MODULE COUNT/] MOVEM T,HEADER MOVE H,MODLST MODPN1: SKIPL LINCNT PUSHJ P,MHDRA FETCH(A,H,MNAM) PUSHJ P,STROUT PUTBYT 11 FETCH(T,H,MNUM) PUSHJ P,DECOUT CRLF FETCH(H,H,MNXT) JUMPN H,MODPN1 MOVEI T,MPLMAR MOVEM T,MARGIN SETZM LINCNT SKIPN H,PARTLIST JRST MPART2 MPART1: FETCH(G,H,MDCN) SKIPE G PUSHJ P,MPRTDO FETCH(H,H,NXPL) JUMPN H,MPART1 MPART2: SKIPE G,NULPART PUSHJ P,MPRTDO JRST MPARTE MPRTDO: ;CLEAR SUBTOTAL COUNTS HERE MPRTD1: FETCH(F,G,MXPT) MPRTD2: FETCH(E,F,MCPT) SETZM LSTDIP SETZM NDIPS SETZM CONFLG TLZ TFLG MPRTD3: FETCH(D,E,MODC) FETCH(T,D,MNUM) TLNE ASKHIM JUMPE T,MPRTD4 TLOE TFLG JRST MPRTD5 SKIPL LINCNT PUSHJ P,MHDR JUMPE H,MPRTE0 FETCH(A,H,PLPT) FETCH(A,A,PRVS) PUSHJ P,STROUT JRST MPRTE1 MPRTE0: PUTSTR[ASCIZ\N/A\] MPRTE1: MOVEI A,=16 PUSHJ P,FILL FETCH(A,G,MDIP) JUMPE A,[PUTSTR[ASCIZ\N/A\] JRST MPRTE2] FETCH(A,A,DNAM) PUSHJ P,STROUT MPRTE2: JUMPE H,MPRTE3 FETCH(C,H,PLPT) JRST MPRTE4 MPRTE5: FETCH(T,C,PRBT) TRNE T,NULVAL JRST MPRTE4 MOVE T,LWIDTH SUB T,LCOUNT CAIGE T,=16 ;AT LEAST 2 TABS STOPS LEFT? CRLF ;NO, NEW LINE MOVEI A,=32 CAML A,LCOUNT JRST [ PUSHJ P,FILL JRST MPRTE6] PUTSTR[ASCIZ/, /] MPRTE6: FETCH(A,C,PRVS) PUSHJ P,STROUT MPRTE4: FETCH(C,C,PRPP) JUMPN C,MPRTE5 CRLF MPRTE3: FETCH(C,F,MPRX) JUMPE C,MPRTF1 MPRTF2: MOVE T,LWIDTH SUB T,LCOUNT CAIGE T,=24 CRLF MOVEI A,=32 CAML A,LCOUNT JRST [ PUSHJ P,FILL JRST MPRTF3] PUTSTR[ASCIZ/, /] MPRTF3: FETCH(A,C,TLFT) PUSHJ P,STROUT PUTBYT ":" FETCH(A,C,TRHT) PUSHJ P,STROUT FETCH(C,C,NXTT) JUMPN C,MPRTF2 MPRTF1: SKIPE LCOUNT CRLF MPRTD5: HRRZS CONFLG ;HAVEN'T USED APPROX COUNT ON THIS MODULE YET PUTBYT 11 FETCH(A,D,MNAM) PUSHJ P,STROUT PUTBYT 11 FETCH(A,D,MNUM) SKIPE T,A PUSHJ P,DECOU5 PUTBYT 11 FETCH(T,E,MAPP) JUMPN T,[SETOM CONFLG JRST MPRTD6] FETCH(T,E,MREA) MPRTD6: IMUL A,T ADDM T,LSTDIP ADDM A,NDIPS PUSHJ P,DECOU5 SKIPGE CONFLG ;IS THIS APPROX NUMBER? PUTBYT "A" ;YES TLNN ASKHIM ;DO WE HAVE MODULE COUNT? JRST MPRTD7 ;NO, SO NO TOTAL FOR MODULE TYPE PUTBYT 11 MOVE T,A PUSHJ P,DECOU5 SKIPGE CONFLG PUTBYT "A" MPRTD7: CRLF MPRTD4: FETCH(E,E,MCNX) JUMPN E,MPRTD3 TLNE ASKHIM ;SKIP SUMMARY IF MODULE COUNTS ONLY SKIPN H ;SKIP ALSO IF NO PART NUMBER JRST MPRTD9 MOVEI A,=24 PUSHJ P,FILL MOVE T,LSTDIP PUSHJ P,DECOU5 SKIPE CONFLG PUTBYT "A" SKIPN T,NDIPS JRST MPRTD8 PUTBYT 11 PUSHJ P,DECOU5 SKIPE CONFLG PUTBYT "A" PUTBYT 11 MOVE A,NDIPS IMUL A,FACTR1 IDIVI A,=100 CAIL B,=50 ADDI A,1 SKIPN A MOVEI A,1 MOVE T,A PUSHJ P,DECOU5 SKIPE CONFLG PUTBYT "A" PUTBYT 11 ADD A,NDIPS MOVE T,A PUSHJ P,DECOU5 SKIPE CONFLG PUTBYT "A" MPRTD8: CRLF MPRTD9: FETCH(F,F,MXNX) JUMPN F,MPRTD2 FETCH(G,G,MDNX) JUMPN G,MPRTD1 ;SUBTOTALS HERE? POPJ P, MPARTE: SKIPE B,MPLTIT PUSHJ P,PUTFS SETZM MPLTIT RELEASE LST, POPJ P, MHDR0: TLZN NOFF PUTSTR[BYTE(7)15,14] PUSH P,A MOVN TTT,PAGLEN ADD TTT,MARGIN MOVEM TTT,LINCNT SETZM TCOUNT SKIPE A,MPLTIT PUSHJ P,STROUT PUSHJ P,PNTFDT CRLF POP P,A POPJ P, MHDRA: PUSHJ P,MHDR0 PUTSTR @HEADER PUTSTR[ASCIZ/ /] POPJ P, MHDR: PUSHJ P,MHDR0 PUTSTR [ASCIZ/PART NUMBER DIPTYPE DESCRIPTION MODULE # OF # OF # OF /] MOVE T,FACTR1 PUSHJ P,DECOUT PUTSTR[ASCIZ\ % TOTAL NAME MODULES PARTS/ PARTS SPARE # OF MODULE * # OF PARTS PARTS MODULES \] POPJ P, SUBTTL 'TTY' PIN/SIGNAL/BODY FOR ONE LOC TTYUSE: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, OUTSTR[ASCIZ/DIP(/] OUTSTR @WBDCUE OUTSTR[ASCIZ/) OR CONNECTOR(/] OUTSTR @CBCUE OUTSTR[ASCIZ/) LOCATION?/] PUSHJ P,GETLOC JRST ERRET CAIE TTT,12 JRST ERRET HRRZM TT,LETTER HRRZM TT,SAVET HLLZM TT,NUMBER ;SAVE MAPCON BIT MOVEI H,RADDR(W,WBDY,NXTB) TTYULP: PUSHJ P,SERLOC ;Find loc in LETTER JRST [ OUTSTR[ASCIZ/NO SUCH LOC! /] POPJ P,] MOVEM H,FSTBOD MOVE T,[PUSHJ P,TTYOUT] MOVEM T,PUTCHR SETOM TTYFLG SETZM LCOUNT FETCH(T,H,BBIT) TRNE T,CBODY JRST TTYCUS ;YES SKIPGE NUMBER ;DOUBLE CHECK THAT WE WEREN'T LOOKING FOR CONN JRST TTYULP OUTSTR[ASCIZ/LOC DIPTYPE BODY POS FILE PIN # TYPE HI LOW USE SIGNAL NAME /] TTYUS2: PUSHJ P,USEP3 ;PRINT LINE FOR THIS BODY PUSHJ P,SERLOC CAIA JRST TTYUS2 ;Print any others in same loc (LETTER) SKIPN ISWW POPJ P, PUTBYT 11 PUTSTR [ASCIZ /AT X,Y= /] MOVE A,FSTBOD FETCH(B,A,BPAK) FETCH(A,A,BLOC) PUSHJ P,PAKSIZ JFCL PUSH P,T ;MIN X,,Y PUSH P,TT HLRE T,T ;MIN X PUSHJ P,DECOUT PUTBYT "/" HLRE T,(P) PUSHJ P,DECOUT PUTSTR [ASCIZ /, /] HRRE T,-1(P) PUSHJ P,DECOUT PUTBYT "/" HRRE T,(P) PUSHJ P,DECOUT CRLF SUB P,[2,,2] POPJ P, TTYCUS: SKIPL NUMBER ;WE WERE REALLY LOOKING FOR A BODY JRST TTYULP OUTSTR[ASCIZ/CONNECTORS PIN FILE POS TYPES SIGNAL NAME /] MOVNI T,10000 ;SUPPRESS NEW PAGE MOVEM T,LINCNT JRST USEC3A ;PRINT CONNECTOR LINES ;SERLOC - Search for a body (or connector body) in location (LETTER) ; ignore any DIP location within-socket-offset ;H - locative to body list ; skip if found SERLOC: FETCH(H,H,NXTB) JUMPE H,CPOPJ FETCH(A,H,BLOC) SKIPE ISWW PUSHJ P,MAPOST ;remove any DIP offset CAI HRRZS A CAME A,LETTER JRST SERLOC JRST CPOPJ1 SUBTTL 'WLU' BODY/PIN/SIGNAL USEPIN: SETZM ALLNAM SETZM ALLCRD ALLUSE: MOVE L,DEFLST SKIPE T,ALLCRD JRST [ MOVEM T,SLICEL JRST GALCD1] PUSHJ P,LSTGET POPJ P, GALCD1: FETCH(H,W,WBDY) JUMPE H,[OUTSTR[ASCIZ/NO BODIES AT ALL! /] POPJ P,] ;SKIP IF NO BODIES MOVSI T,'WLU' ;WIRE LIST VERIFY FILE EXTENSION MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,ALLSET POPJ P, PUSHJ P,FILLST PUTHDR MOVEI T,[ASCIZ/LOC DIPTYPE BODY POS FILE PIN # TYPE HI LOW USE SIGNAL NAME/] MOVEM T,HEADER MOVEI T,WUPMAR MOVEM T,MARGIN SETZM LINCNT SETOM SAVET USEP2: FETCH(T,H,BBIT) TRNE T,CBODY ;CON? JRST USEC1 ;YES, DO IT DIFFERENTLY FETCH(T,H,BLOC) JUMPE T,USENLC CAMN T,SAVET JRST USEP3X USENLC: MOVEM T,SAVET SKIPL LINCNT ;NEED A HEADER? PUSHJ P,PUTHDR ;WE ALWAYS GET A HEADER HERE USEP3X: PUSHJ P,USEP3 ;POOT OUT THIS BODY FETCH(H,H,NXTB) JUMPN H,USEP2 USE0: RELEASE LST, POPJ P, USEP3: FETCH(A,H,BLOC) FETCH(T,H,BBIT) PUSHJ P,WLOCOUT ;OUT OUT DAMN LOC PUTBYT 11 FETCH(A,H,DIPT) JUMPE A,[PUTSTR[ASCIZ/NONE/] JRST USEP4] FETCH(A,A,DNAM) PUSHJ P,STROUT ;DIPTYPE USEP4: PUTBYT 11 SKIPN ADDR(H,BNAM) PUTSTR[ASCIZ/NONE/] PUTSTR ADDR(H,BNAM) PUTBYT 11 FETCH(A,H,BBIT) PUSHJ P,BPPNT PUTBYT 11 FETCH(A,H,FILB) PUTSIX ADDR(A,FILN) ;FILENAME FETCH(F,H,BPIN) JUMPN F,USEP8A PUTSTR[ASCIZ/ NO PINS/] CRLF POPJ P, ;JUST GET ANOTHER BODY USEP8A: CRLF USEP8: PUTSTR[ASCIZ/ /] FETCH(T,F,PINN) SETZM TCOUNT PUSHJ P,DECOUT ;PIN # FETCH(T,F,PBIT) TRNN T,PIDPIN JRST USEP80 MOVE TT,TCOUNT SUBI TT,7 PUTBYT " " AOJL TT,.-1 PUTBYT "*" JRST USEP81 USEP80: PUTBYT 11 USEP81: FETCH(G,F,PTYP) JUMPN G,USEP82 PUTSTR[ASCIZ/UN /] JRST USEP83 USEP82: PUSHJ P,PNTTYP PUTBYT 11 PUSHJ P,PNTLOD ;THERE'S A TAB IN HERE PUTBYT 11 FETCH(A,G,DUSE) PUTSIX A USEP83: FETCH(B,F,HPNT) ;Print signal on pin, and all its synonyms USEP9: PUTBYT 11 FETCH(TT,B,WBIT) TRNE TT,SPWR!SGND ;Print GND as simple name JRST [ MOVE A,B PUSHJ P,GCANON PUTSIG ADDR(A,SPNT) CRLF JRST USEP10] PUTSIG ADDR(B,SPNT) CRLF FETCH(B,B,NNAM) JUMPE B,USEP10 PUTSTR[ASCIZ/ /] JRST USEP9 USEP10: FETCH(F,F,NXBP) ;NEXT PIN OF BODY JUMPN F,USEP8 POPJ P, USEC1: SETZM LINCNT MOVEI T,WUCMAR MOVEM T,MARGIN MOVEI T,[ASCIZ/CONNECTORS PIN FILE POS TYPES SIGNAL NAME/] MOVEM T,HEADER SETZM SAVET USEC2: FETCH(T,H,BLOC) CAMN T,SAVET ;NEW LOC? JRST USEC3X MOVEM T,SAVET PUSHJ P,PUTHDR ;YES, NEW PAGE USEC3X: PUSHJ P,USEC3A FETCH(H,H,NXTB) JUMPN H,USEC2 JRST USE0 USEC3A: FETCH(G,H,BPIN) USEC3: SKIPL LINCNT PUSHJ P,PUTHDR ;NEW HEADER MOVE A,SAVET FETCH(T,G,PINN) HRLI A,(T) FETCH(T,H,BBIT) PUSHJ P,LOCPNW PUTBYT 11 FETCH(A,G,FILP) SETZM TCOUNT PUTSIX ADDR(A,FILN) ;FILENAME PUTBYT 11 FETCH(A,G,PBIT) PUSHJ P,CNPNT MOVEI A,=20 PUSHJ P,SPFILL ;FILL WITH SPACES TO TYPE BITS FETCH(B,G,HPNT) FETCH(A,B,TBIT) ;WIRE TYPE BITS PUSHJ P,PNTYPE FETCH(T,G,PBIT) ;GET PIN BITS TRNN T,TRMBTS ;ANY TERMINATOR RULE? JRST USEC4 ;NO PUTBYT "(" LDB T,[POINT TRMBSZ,T,TRMBPS+=18] PUSHJ P,DECOUT PUTBYT ")" USEC4: MOVEI A,=32 PUSHJ P,FILL ;FILL WITH TABS PUTSIG ADDR(B,SPNT) CRLF FETCH(B,B,NNAM) JUMPE B,USEC5 JRST USEC4 USEC5: FETCH(G,G,NXBP) ;NEXT PIN JUMPN G,USEC3 POPJ P, SUBTTL 'UML' UTILIZATION FILE - DIPS DIPBOX__=12 ;WIDTH OF BOX FOR 1 DIP UMLINE: BYTE(7)UBAR,UBAR,UBAR,UBAR,UBAR,UBAR,UBAR,UBAR,UBAR,UBAR,UBAR,UBAR,0 ;Yes Virginia, there are 12. of them MTDIP: [ASCIZ /| |/] ;8 SPACES + 2BARS MTDIP1: [ASCIZ /|--------|/] ;8 SPACES + 2BARS PNTUML: SKIPN ISWW JRST NXWW MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR MOVE L,DEFLST PUSHJ P,LSTGET JRST [ OUTSTR[ASCIZ/YOU GET A BLANK UML! /] SETZ W, JRST .+1] MOVSI T,'UML' ;WIRE LIST UML FILE EXTENSION MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, NOITS,< JUMPE W,PNTUM1 > ITS,< JUMPE W,[SKIPE XGP ;BETTER NOT CALL FILLST OR CONFUSION WILL REIGN PUSHJ P,XGPSTR JRST PNTUM1] >;ITS PUSHJ P,FILLST PUTHDR PNTUM1: MOVEI T,[ASCIZ/ ******* DIP MAP *******/] MOVEM T,HEADER MOVEI T,UMLMAR MOVEM T,MARGIN SETZM LINCNT ;FORCE HEADER FIRST TIME MOVE T,NCOLS MOVEM T,MCOL ;The board type specifies how many rows/cols of DIP boxes ; make the UML map. ;This stuff decides if that map overflows a page horiz. or ; verticaly, and if so breaks it up into more than one page UML3: SKIPLE TT,NCLPRG ;NO COLS TO PRINT ON PAGE CAILE TT,=8 ;DEFAULT IS 8 MOVEI TT,=8 ;Number of columns is MIN(8, cols-to-go) MOVE T,MCOL SUB T,TT JUMPGE T,UML3A ;ALL COLS FIT ON THIS PAGE? ADD TT,T ;YES SETZ T, UML3A: ADDI T,1 MOVEM T,MCOL MOVNS TT HRLZS TT ;AOBJN POINTER MOVEM TT,COLLOP ;-#COLS TO PRINT,, MOVE T,NROWS ;NUMBER OF ROWS FROM CARD DEF MOVEM T,MROW MOVEI G,1 ;START WITH UML ROW 1 SETZM MROWPP ;NO ROWS YET, (FOR TOP TESTED LOOP) UML4: MOVN T,MROWPP ;REDUCE COUNT BY # ROWS PRINTED ADDB T,MROW JUMPLE T,UML16 ;DONE WITH THIS SET OF UMLCOLS SKIPL LINCNT ;PREVIOUS PAGE PRINTED? PUSHJ P,PUTHDR MOVM T,LINCNT ;# LINES LEFT TO PRINT ADDI T,UMLMAR ;(PUTHDR SUBS OFF MARGIN) IDIVI T,UMLMAR ;HOW MANY UML ROWS MAX PER PAGE? SKIPLE TT,NRWPRP ;SPECIFIED NUMBER OF ROWS PER PAGE? CAML TT,T ;MIN CAIA MOVE T,TT CAMLE T,MROW ;MORE THAN ARE LEFT? MOVE T,MROW MOVEM T,MROWPP ;# ROWS OF DIPS TO PRINT ON NEXT PAGE MOVNS T HRL G,T MOVEM G,GSAVE PUSHJ P,ANYUML ;ANY UML ON THIS PAGE? AOBJN G,.-1 JUMPGE G,UML4 ;NO DIPS, SKIP THIS PAGE SETZM LINCNT ;WE'LL PRINT THIS PAGE, FORCE NEW HEADER NEXT TIME MOVE G,GSAVE UML4A: PUSHJ P,UMBORD ;DO THE TOP LINE OF DIP BOXES CRLF PUSHJ P,UMLDIP ;DO DIP NAMES CRLF PUSHJ P,UMLFIL ;Drawing file name that uses this slot ; PUSHJ P,UMLBLK ;BLANK LINE CRLF PUSHJ P,UMSECS ;SECTION USAGE PUTBYT 15 ;CARRIAGE RETURN ONLY PUSHJ P,UMBORD CRLF PUSHJ P,UMLOCS ;UML DIP LOCATIONS CRLF AOBJP G,UML4 ;NO CR AT END OF LOOP CRLF JRST UML4A UML16: SOSLE MCOL ;COLS LEFT OVER THAT DIDN'T FIT ON PAGE? JRST UML3 JRST UMLEDG ;DO THE EDGE CONNECTORS NOW ;G = -#,,ROW ANYUML: MOVE E,COLLOP ;WILL ANY DIPS BE FOUND ON THIS ROW? ANYUM1: PUSHJ P,LOCFND CAIA JRST CPOPJ1 AOBJN E,ANYUM1 POPJ P, ;HERE TO PRINT DIP TYPES FOR A ROW OF UML UMLDIP: MOVE E,COLLOP ;ITERATION COUNT UML7: SETZM TCOUNT PUTSTR[ASCIZ/|/] PUSHJ P,LOCFND JRST [ PUTSTR @MTDIP1 JRST UML8A] PUTBYT 40 FETCH(A,H,DIPT) ;DIP POINTER JUMPE A,[PUTSTR[ASCIZ/?NONE?/] JRST UML8] FETCH(A,A,DNAM) ;DIP NAME PUSHJ P,PRINT8 UML8: MOVEI A,DIPBOX-1 PUSHJ P,TFILL UML8A: PUTBYT "|" AOBJP E,CPOPJ ;THATS ALL FOR DIP NAMES PUTSTR SPACING JRST UML7 ;HERE TO PRINT DIP LOCS FOR A ROW OF UML UMLOCS: MOVE E,COLLOP UML10: SETZM TCOUNT PUTSTR[ASCIZ/ /] PUSHJ P,MAPRCU JRST UML10B MOVE A,T PUSHJ P,LOCOUT UML10B: MOVEI A,DIPBOX PUSHJ P,TFILL AOBJP E,CPOPJ ;THATS ALL FOR UML DIP LOCS PUTSTR SPACING JRST UML10 UMBORD: MOVE E,COLLOP ;DO THE UML TOP OR BOTTOM LINE UMBOR0: PUTSTR UMLINE AOBJP E,CPOPJ PUTSTR SPACING JRST UMBOR0 UMLFIL: UMLBLK: MOVE E,COLLOP ;ITERATION COUNT UMBLK0: SETZM TCOUNT PUTBYT "|" PUSHJ P,LOCFND JRST [ PUTSTR @MTDIP ;NO DIP IN THIS SLOT, CAUSE DOUBLE BOX JRST UMBLK2] ;Draw attention to this slot, DIP type not defined MOVEI B,"|" FETCH(A,H,DIPT) ;DIP POINTER JUMPE A,UMBLK1 ;Print file name of user FETCH(A,H,FILB) ;GET FILE BLOCK PUTSIX ADDR(A,FILN) MOVEI B,40 UMBLK1: MOVE A,TCOUNT SUBI A,DIPBOX-1 PUTBYT (B) AOJL A,.-1 UMBLK2: PUTBYT "|" AOBJP E,CPOPJ ;THATS ALL FOR DIP NAMES PUTSTR SPACING JRST UMBLK0 ;HERE FOR A ROW OF SECTION USAGE IN UML UMSECS: MOVE E,COLLOP UML12: SETZM TCOUNT PUTBYT "|" PUSHJ P,LOCFND ;FIND LOC - sets DIP location into PINLOC JRST [ PUTSTR @MTDIP1 ;NO LOC NO NOTHING JRST UML20] PUTBYT 40 FETCH(A,H,DIPT) ;DIP TYPE JUMPE A,[MOVEI A,1 ;IF NO DIP TYPE, INDICATE 1 SECTION MOVEM A,FACTR1 ;LOOK LIKE 1 SECT DIP SETOM FACTR2 ;SEC USED JRST UML27] ;Count # sections in DIPtype SETZM FACTR1 ;INIT BIGGEST SECT # FETCH(A,A,DPIN) ;FIRST PIN OF DIP DEF UML21: FETCH(T,A,DPBIT) ;PIN TYPE BITS TRNN T,INLD!OUTLD!TERM JRST UML22 FETCH(T,A,SCTB) ;SECTION BITS MOVS T,T JFFO T,.+2 JRST UML22 AOS TT CAMLE TT,FACTR1 MOVEM TT,FACTR1 UML22: FETCH(A,A,DPNXT) JUMPN A,UML21 ;Now flag which sections used SETZM FACTR2 ;INIT SECT USE BITS UML26: MOVEI A,RADDR(H,BPIN,NXBP) ;NOW CALC SECTION USAGE JRST UML23 UML24: FETCH(TTT,A,PTYP) JUMPE TTT,UML23 FETCH(T,TTT,DPBIT) ;PIN TYPE BITS TRNN T,INLD!OUTLD!TERM JRST UML23 FETCH(T,TTT,SCTB) ;SECTION BITS MOVS T,T JFFO T,.+1 MOVE TT,SCTTAB(TT) ;PICKUP CORRESPONDING BIT IORM TT,FACTR2 ;MARK BIT FOR SECTION UML23: FETCH(A,A,NXBP) JUMPN A,UML24 ;Continue with other bodies in same DIP location FETCH(H,H,NXTB) ;NEXT BODY FETCH(A,H,BLOC) ;LOC PUSHJ P,MAPOST ;Strip away any socket offset SETZ A, HRRZS A FETCH(TT,H,BBIT) TRNN TT,CBODY ;YES, IS THIS CONN THO? CAME A,PINLOC ;IS THIS IT? CAIA JRST UML26 ;YES, LOOP BACK ;Print section usage - ooxo UML27: MOVEI A,DIPBOX-1 SUB A,TCOUNT ;ROOM LEFT FOR SECTION BITS CAMGE A,FACTR1 MOVEM A,FACTR1 SUB A,FACTR1 CAIA PUTBYT " " SOJGE A,.-1 MOVSI A,400000 UML25: TDNN A,FACTR2 JRST [ PUTBYT "o" JRST .+2] PUTBYT "x" LSH A,-1 SOSLE FACTR1 JRST UML25 UML20: PUTBYT "|" AOBJP E,CPOPJ ;THAT ALL FOR SECTION USAGE PUTSTR SPACING JRST UML12 ; UTILIZATION FILE - PADDLES CONBOX__=29 ;SIZE OF COLUMN FOR ONE CONN UMLEDG: SETZM UMLEHT ;UML EDGE HEIGHT, HACK TO FIT MORE THAT ONE PER PAGE SETOM UMLPGF ;MAKE THE FIRST PAGE HAPPEN MOVEI T,[ASCIZ/ ******* EDGE CONNECTIONS Flags: (# Output, @ Terminator, ---- Dedicated ground, ++++ Dedicated power) *******/] MOVEM T,HEADER MOVN G,NPADS HRLZ G,G UMLC0: MOVEM G,MROW HLLZ G,G III,< CAMG G,[-3,,0] ;IF MORE THAN 4 TO GO MOVSI G,-3 ;ONLY DO 4 NOW >;III NOIII,< CAMG G,[-4,,0] ;IF MORE THAN 4 TO GO MOVSI G,-4 ;ONLY DO 4 NOW >;NOIII HRR G,MROW MOVEM G,MCOL UMLC1: PUSHJ P,LOCFNC ;Is there a paddle[i] ? TDZA H,H ;None, make a 0 FETCH(H,H,BPIN) ;PIN LIST MOVEM H,PADDLE(G) AOBJN G,UMLC1 AOSN UMLPGF ;UML PAGE FLAG PUSHJ P,PUTHDR MOVE T,LINCNT SKIPN UMLEHT ;DO WE WANT TO KNOW THE # LINES IN THE HEADER? MOVEM T,UMLEHT ;YES, NEGATIVE MEANS WE ARE DOING FIRST GROUP ;Label the 4 columns with the paddle name MOVE G,MCOL UMLL1: SETZM TCOUNT MOVEI A,CONBOX/2-3 ;APPROX CENTERED PUSHJ P,TFILL MOVEI T,1(G) HRRZ TT,PADLET ;FIRST PIN HRRZ TTT,PADPIN PUSHJ P,MAPPAD MOVE A,T SKIPE A ;NO PADDLE THERE PUSHJ P,PADPRT MOVEI A,CONBOX PUSHJ P,TFILL AOBJN G,UMLL1 CRLF ;Now print the connector "groups", fitting them onto the same page if possible. MOVE F,MCOL PUSHJ P,UMLCP MOVE G,MROW NOIII,< ADD G,[4,,4] > ;ADVANCE BY 4 III,< ADD G,[3,,3] > ;ADVANCE BY 3 SKIPL T,UMLEHT ;SKIP IF THIS IS FIRST GROUP JRST UMLL2 ; NOT FIRST, DECIDE IF MORE WILL FIT ON THE PAGE SUB T,LINCNT SUBI T,1 ;ONE BLANK LINE BETWEEN GROUPS MOVNM T,UMLEHT MOVNS T UMLL2: ADD T,LINCNT ;WILL NEXT GROUP OVERFLOW PAGE? JUMPG T,[SETOM UMLPGF ; NO, CAUSE A CALL TO PUTHDR JRST UMLL3] CRLF ;PUT IN BLANK LINE BETWEEN GROUPS UMLL3: JUMPL G,UMLC0 ;ANY MORE? RELEASE LST, POPJ P, ;PRINT CONNECTOR TABLES UMLCP: MOVEM F,COLLOP ;-COL#,,PADDLE# MOVE G,PADLET ;-#PADDLE-LETTERS,,FIRST LETTER# ;"____________________" on first line. UMLC2: HLRE A,COLLOP IMULI A,CONBOX ;PAGE WIDTH PUTBYT UBAR AOJLE A,.-1 ;Now print row for all pins with this same leading letter. UMLC2A: MOVE E,PADPIN ;-#PINS-WITHIN-LETTER,,FIRST PIN# UMLC2B: PUSHJ P,UMLCS AOBJN E,.-1 ITS,< SKIPE XGP JRST [ PUTXGP [BYTE(7)177,1,47,1] ;STOP UNDERBAR AOBJN G,UMLC2A JRST UMLC2C] >;ITS PUTBYT 15 AOBJN G,UMLC2 HLRE A,COLLOP IMULI A,CONBOX PUTBYT UBAR AOJLE A,.-1 UMLC2C: PUTSTR[ASCIZ/ /] POPJ P, ;Print one line of connector info UMLCS: PUTSTR[ASCIZ/ |/] ;FINISH THE PREVIOUS ROW ;(On XGP, use underline featrure on last row of box) HLRE T,E AOJN T,UMLC3A ;LAST LINE OF GROUP? ITS,< SKIPN XGP ;AND ON XGP JRST UMLC3A PUTXGP [BYTE(7)177,1,46] ;START UNDERBAR >;ITS UMLC3A: MOVE F,COLLOP UMLC3: SETZM TCOUNT MOVEI A,40 ;FLAG CHAR HRLM A,(P) MOVEI T,1(F) ;PADDLE# MOVEI TT,(G) ;LETTER# MOVEI TTT,(E) ;PIN# PUSHJ P,MAPPAD JUMPE T,UMLC6A ;NO SUCH PIN MOVEM T,LSTPIN MOVE A,T PUSHJ P,PRNPIN LDB T,[%%PINN,,A] ;JUST THE PIN # PUTBYT 40 SKIPN TT,PADDLE(F) ;PIN LIST FOR THIS PADDLE JRST UMLC6 UMLC4: FETCH(TTT,TT,PINN) CAME TTT,T JRST [ FETCH(TT,TT,NXBP) ;NEXT PIN ON CONNECTOR JUMPN TT,UMLC4 JRST UMLC6] FETCH(A,TT,HPNT) FETCH(T,A,TBIT) MOVEI TT,"@" TRNE T,TERM HRLM TT,(P) MOVEI TT,"#" TRNE T,OUTLD HRLM TT,(P) MOVEI A,ADDR(A,SPNT) PUSHJ P,PRNTCS UMLC6: MOVE A,LSTPIN PUSHJ P,PINBIT ;CHECK FOR PWR OR GND MOVEI A," " TLNE TT,PWR MOVEI A,"+" TLNE TT,GND MOVEI A,"-" UMLC6A: MOVE T,TCOUNT SUBI T,CONBOX-3 ;SPACE, FLAG, AND V-BAR SKIPGE T PUTBYT (A) AOJL T,.-1 PUTBYT " " HLRZ A,(P) PUTBYT (A) PUTBYT "|" AOBJN F,UMLC3 POPJ P, ; UTILIZATION FILE - SUBRS ;Print signal name within space allowed. PRNTCS: ADD A,[POINT 7,0] MOVEI T,CONBOX-3 SUB T,TCOUNT PRNTCT: ILDB TTT,A JUMPE TTT,CPOPJ CAIN TTT,11 ;Flush tabs that appear because of H,L hack MOVEI TTT,40 XCT PUTCHR SOJG T,PRNTCT POPJ P, MAPRCU: HRRZ T,E ADD T,MCOL ;UML COL HRL T,G ;UML ROW PUSHJ P,MAPRC ;T = UML ROW,,UML COL POPJ P, JRST CPOPJ1 LOCFNC: HRRZ TT,PADLET ;First pin on this paddle, from board definition HRRZ TTT,PADPIN MOVEI T,1(G) ;PADDLE# PUSHJ P,MAPPAD HRRZM T,PINLOC ;The paddle "body" location JUMPE W,CPOPJ MOVEI H,RADDR(W,WBDY,NXTB) JRST LOCFCA LOCFC1: FETCH(A,H,BLOC) CAME A,PINLOC JRST LOCFCA FETCH(TT,H,BBIT) TRNE TT,CBODY JRST CPOPJ1 LOCFCA: FETCH(H,H,NXTB) JUMPN H,LOCFC1 POPJ P, ;FIND FIRST BODY IN LOC ; G = -#,,ROW ; E = -#,,column-within-page (add MCOL) ;Return pointer to Body in H LOCFND: PUSHJ P,MAPRCU POPJ P, HRRZM T,PINLOC ;LOC TO FIND JUMPE W,CPOPJ SETZM BESLOC ;Best body found in this location SETZM BESPIN ;DIP size for that body MOVEI H,RADDR(W,WBDY,NXTB) JRST LOCFNA LOCFN1: FETCH(A,H,BLOC) ;LOC PUSHJ P,MAPOST ;Strip away any socket offset SETZ A, HRRZS A CAME A,PINLOC ;IS THIS IT? JRST LOCFNA ;NO FETCH(TT,H,BBIT) TRNE TT,CBODY ;YES, IS THIS CONN THO? JRST LOCFNA FETCH(TT,H,BPAK) ;How many pins on package? HRRZ TT,PACKPN(TT) CAMG TT,BESPIN ;Only find the biggest package in this slot JRST LOCFNA MOVEM TT,BESPIN MOVEM H,BESLOC LOCFNA: FETCH(H,H,NXTB) JUMPN H,LOCFN1 SKIPE H,BESLOC ;Any body found? AOS (P) POPJ P, SPACING:ASCIZ/ / ;3 SPACES FOR NOW UMLBRS: PUSHJ P,PNTBRW PUTSTR[ASCIZ/ /] POPJ P, PRINT4: JUMPE A,CPOPJ MOVEI T,4 JRST PRINTN PRINT8: JUMPE A,CPOPJ MOVEI T,8 JRST PRINTN PRINT5: JUMPE A,CPOPJ SKIPA T,[5] PRINT7: MOVEI T,7 PRINTN: ADD A,[POINT 7,1] PRINTQ: TLNE A,760000 JRST PRINTZ HRR A,-1(A) TRNN A,-1 POPJ P, PRINTZ: ILDB TTT,A JUMPE TTT,CPOPJ XCT PUTCHR SOJG T,PRINTQ POPJ P, SUBTTL 'TST' BINARY WIRE LIST TO SIMULATOR ;THIS OUTPUT IS COURRENTLY INTENDED FOR RUBIN'S SIMULATOR TSTWRT: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, MOVSI T,'TST' ;CARD TESTER FILE EXTENSION MOVEI TT,10 ;FULL WORDS MOVSI TTT,'DSK' PUSHJ P,OUTSET ;SETUP OUTPUT STUFF POPJ P, ;LET HIM OUT HERE MOVEI A,RADDR(W,WBDY,NXTB) JRST TSTB1 TSTB2: FETCH(T,A,DIPT) ;DIP TYPE JUMPE T,[PUSH P,A FETCH(T,A,BBIT) TRNE T,CBODY JRST ISCON SKIPN ADDR(A,BNAM) OUTSTR[ASCIZ/UNNAMED BODY/] OUTSTR ADDR(A,BNAM) OUTSTR[ASCIZ/ HAS NO DIP TYPE! /] ISCON: POP P,A JRST TSTB1] FETCH(T,T,DNAM) ;DIP NAME PUSHJ P,WSTR MOVE TTT,A PUSHJ P,WORDOUT FETCH(TTT,A,BLOC) PUSHJ P,WORDOUT TSTB1: FETCH(A,A,NXTB) JUMPN A,TSTB2 PUSHJ P,WRTZERO ;TERMINATE NAMES MOVEI A,RADDR(W,WIRES,ALPH) JRST TSTP1 TSTP2: FETCH(B,A,WBIT) TRNE B,NAM2ND JRST TSTP1 ;ONLY REAL WIRES SETZ C, TRNE B,SPWR AOSA C ;CODE = 3 TRNE B,SHI AOSA C ;CODE = 2 TRNE B,SGND AOJA C,TSTTX4 ;CODE = 1 ; TRNE B,WSINGL ;DON'T SEND NON-SPECIAL SINGLE PIN RUNS ; JRST TSTP1 TSTTX4: MOVE B,A ;START WITH THIS ONE TSTTX0: BINSIG ADDR(B,SPNT) ;PUT OUT SIGNAL NAME FETCH(B,B,NNAM) ;NEXT NAME BLOCK JUMPN B,TSTTX0 MOVE TTT,C PUSHJ P,WORDOUT ;SEND CODE FOR STRING FETCH(B,A,WPIN) ;GET FIRST PIN JUMPE B,TSTPZ ;ANY PINS AT ALL? TSTP3: FETCH(TT,B,PBIT) TRNE TT,DUP JRST TSTP5 FETCH(TTT,B,PINN) ;PIN # FETCH(T,B,PBDY) FETCH(TT,T,BBIT) TRNE TT,CBODY JRST [ FETCH(T,T,BLOC) MOVE TT,TTT PUSHJ P,CPNMER MOVE TTT,T JRST TSTP4] HRL TTT,T ;USE BODY CORE LOC AS UNIQUE # TSTP4: PUSHJ P,WORDOUT TSTP5: FETCH(B,B,NXTP) JUMPN B,TSTP3 TSTPZ: PUSHJ P,WRTZERO TSTP1: FETCH(A,A,ALPH) JUMPN A,TSTP2 PUSHJ P,WRTZERO RELEASE LST, POPJ P, WASCIZ: MOVE TTT,(T) PUSHJ P,WORDOUT TRNE TTT,376 AOJA T,WASCIZ POPJ P, WSTR1: MOVE TTT,1(T) PUSHJ P,WORDOUT TRNN TTT,376 ;END? POPJ P, ;YES HRRZ T,(T) WSTR: JUMPN T,WSTR1 WRTZERO:TDZA TTT,TTT WRTMARK:MOVEI TTT,400000 WORDOUT:SOSG LSTHD+2 OUT LST, CAIA OUTSTR[ASCIZ/OUTPUT ERROR! /] IDPB TTT,LSTHD+1 POPJ P, SUBTTL 'TP8' OUTPUT TO TAPR-8 WIRE WRAP SYSTEM DEC,< TP8WRT: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, MOVSI T,'TP8' ;TAPR-8 EXTENSION MOVEI TT,0 ;TEXT FILE MOVSI TTT,'DSK' PUSHJ P,OUTSET ;SETUP OUTPUT STUFF POPJ P, ;LET HIM OUT HERE SETZM CDSKPC SETZM NDIPS SETZM NBODS MOVEI H,RADDR(W,WIRES,ALPH) JRST TP8R1 TP8R2: FETCH(T,H,WBIT) TRNE T,NAM2ND!WNULL!WSINGL!SNC JRST TP8R1 MOVEI G,RADDR(H,WPIN,NXTP) TRZ FLAG ;FLAG NO PINS OUT YET SETZ F, ;HOLDS FIRST PIN JRST TP8R3 TP8R4: FETCH(T,G,PBIT) TRNE T,DUP JRST TP8R3 ;SKIP DUPLICATES FETCH(B,G,PBDY) FETCH(T,B,BLOC) JUMPE T,[AOS NBODS JRST TP8R3] FETCH(T,B,BBIT) TRNE T,CBODY JRST TP8R5 FETCH(T,B,DIPT) JUMPE T,[AOS NDIPS ;COUNT PIN WITHOUT DIPTYPE JRST TP8R5] FETCH(T,T,DPNN) CAIE T,=14 CAIN T,=16 JRST TP8R5 CAIE T,=24 AOS CDSKPC TP8R5: JUMPE F,[MOVE F,G JRST TP8R3] TROE FLAG JRST TP8R6 PUTSTR ADDR(H,SPNT) CRLF EXCH F,G PUSHJ P,TP8PIN EXCH F,G TP8R6: PUSHJ P,TP8PIN TP8R3: FETCH(G,G,NXTP) JUMPN G,TP8R4 TRNE FLAG ;ANY PINS PUT OUT? CRLF TP8R1: FETCH(H,H,ALPH) JUMPN H,TP8R2 CRLF RELEASE LST, SKIPN T,NDIPS JRST TP8E1 PUSHJ P,TTYDEC OUTSTR[ASCIZ/ PINS OUTPUT WITH NO DIP TYPE. /] TP8E1: SKIPN T,NBODS JRST TP8E2 PUSHJ P,TTYDEC OUTSTR[ASCIZ/ PINS SKIPPED DUE TO NO BODY LOC. /] TP8E2: SKIPN T,CDSKPC POPJ P, PUSHJ P,TTYDEC OUTSTR[ASCIZ/ PINS OUTPUT WHICH WEREN'T 14, 16, OR 24 PIN DIPS. /] POPJ P, TP8PIN: FETCH(A,G,PINN) FETCH(B,G,PBDY) FETCH(T,B,BLOC) HRL A,T FETCH(TT,B,BBIT) FETCH(T,B,DIPT) SKIPE T FETCH(T,T,DPNN) PUSHJ P,TP8LOC CRLF POPJ P, >;DEC SUBTTL 'SMP' BACK PANEL OUTPUT TO DEC SYSTEM ;DEC WIRE LIST OUTPUT ;SELECT MODE SSIMPLE:TRZ DOGIN!DOPWR!CONLY ;ASSUME ALL OFF SETZM OFFSET ;IN CASE NO OFFSET ASK [ASCIZ /INVENT NAMES FOR "U" PINS?/] POPJ P, CAIA TRO DOGIN ASK [ASCIZ /OUTPUT POWER PINS?/] POPJ P, JRST SSIMP1 TRO DOPWR ASK [ASCIZ /OUTPUT ONLY POWER PINS?/] POPJ P, JRST SSIMP1 TRO CONLY SSIMP1: ASK [ASCIZ /OFFSET SLOTS?/] POPJ P, JRST OSIMP1 CAIA OSIMPLE:TRZ DOGIN!DOPWR!CONLY OUTSTR[ASCIZ/TYPE OFFSET FOR SLOTS (N OR -N)? /] MOVE TTT,[PUSHJ P,TTYIN] MOVEM TTT,GETCHR PUSHJ P,SDECIN JFCL CAIE TTT,12 JRST ERRET MOVEM A,OFFSET ;SAVE OFFSET JRST OSIMP1 BSIMPLE:TRZ DOGIN!CONLY TRO DOPWR JRST BSIMP1 PSIMPLE:TRO DOPWR!CONLY TRZ DOGIN JRST BSIMP1 ASIMPLE:TROA DOGIN WIRWRT: TRZ DOGIN TRZ DOPWR!CONLY BSIMP1: SETZM OFFSET ;NO OFFSET NORMALLY OSIMP1: MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR MOVE L,DEFLST FETCH(W,L,BLST) JUMPE W,XBAK ;ANY BACK PANEL STUFF? MOVSI T,'SMP' ;IT'S SIMPLE! MOVEI TT,0 ;MODE 0 MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, SKIPN ISWW JRST SMPVG5 MOVEI H,RADDR(W,WBDY,NXTB) ;GO DOWN BODY LIST (CARDS) JRST SMPVG1 SMPVG2: FETCH(G,H,BLOC) ;GET CARD LOC MOVEM G,SLICEL ;SAVE CARD HERE FOR PRINT OUT MOVN G,NPADS MOVS G,G HRRI G,1 ;START WITH PADDLE 1 SMPVG3: MOVE F,PADLET SMPVG4: MOVE E,PADPIN SMPVG6: MOVEI T,(G) MOVEI TT,(F) MOVEI TTT,(E) PUSHJ P,MAPPAD MOVE A,T PUSHJ P,SMPVG ;SIDE 2 ALSO AOBJN E,SMPVG6 AOBJN F,SMPVG4 AOBJN G,SMPVG3 SMPVG1: FETCH(H,H,NXTB) JUMPN H,SMPVG2 SMPVG5: MOVEI B,RADDR(W,WBDY,NXTB) ;GO DOWN BODY LIST SETZM FACTR1 ;CLEAR COUNT OF NX PINS SKIPPED SETZM FACTR2 ;****** TEMPRORARY FIX ******* CLEAR COUNT OF POWER PINS SKIPPED SETOM CDSKPC JRST WIRW1 WIRW2: AOS T,CDSKPC CAILE T,7 JRST [ OUTSTR[ASCIZ/ /] SETZM CDSKPC JRST WIRPN1] SKIPE CDSKPC OUTCHR[11] WIRPN1: FETCH(A,B,BLOC) PUSH P,PUTCHR MOVE T,[OUTCHR TTT] MOVEM T,PUTCHR PUSHJ P,SLTOUT POP P,PUTCHR SETZM GINPIN ;START INVENTED PINS OVER MOVEI D,RADDR(B,BPIN,NXBP) ;NOW DO EACH PIN OF SLOT PUSH P,B JRST WIRW3 WIRW4: FETCH(E,D,PINN) ;PADDLE PIN SIDE FETCH(B,D,HPNT) FETCH(F,B,WBIT) FETCH(TTT,D,PBIT) TRNE TTT,DUP JRST WIRW3 TRNN F,SPWR ;IS IT A POWER PIN JRST CKCNLY TRNN DOPWR ;DON'T SEND POWER PINS UNLESS SPECIAL MODE JRST SKPVLT JRST SNDPIN CKCNLY: TRNE CONLY JRST WIRW3 ;SKIP REGULAR PINS FOR PSIMPLE SNDPIN: FETCH(TTT,D,PBDY) FETCH(TTT,TTT,BBIT) TRNE TTT,BWILD ;SKIP "U" PINS JRST CHKGIN GOTGIN: SETZM LOUTL SETZM LOUTH TRNE F,SGND ;AVOID SETTING LOADING FOR GROUND JRST PIKSMP ;PICK GROUND SIGNAL NAME TO PRINT FETCH(TTT,D,CBIT) JUMPE TTT,NOLOAD ;REAL ONE? FETCH(T,D,HOLD) MOVM T,T MOVNM T,LOUTH FETCH(T,D,LOLD) MOVM T,T MOVNM T,LOUTL FETCH(T,D,HILD) MOVM T,T ADDM T,LOUTH FETCH(T,D,LILD) MOVM T,T ADDM T,LOUTL NOLOAD: TRNE F,SHI ;HI RUN? JRST [ FETCH(T,B,TBIT) TRNE T,ECL JRST .+1 FETCH(T,B,WRN) ;GET WIRE RULE NUMBER CAIE T,=19 CAIN T,=20 JRST .+1 ;NO +3 IF ECL CAIN T,=21 JRST .+1 PUTSTR[ASCIZ/+3 /] JRST WASHIR] TRNN F,SNC JRST PIKSMP PUTSTR[ASCIZ/NC /] FETCH(C,D,PBDY) FETCH(C,C,BLOC) MOVE A,E HRL A,C MOVE T,OFFSET PUSHJ P,BPNPIN ;MAKE NC RUN UNIQUE BY ADDING PIN NAME MOVEI A,=24 PUSHJ P,FILL PUTSTR[ASCIZ/ /];NO ASSERTION POLARITY JRST WASHIR PIKSMP: PUSHJ P,SMPSIG ;WIRE HEAD IN B, PICK RIGHT SIGNAL WASHIR: PUTBYT " " FETCH(C,D,PBDY) FETCH(C,C,BLOC) MOVE A,E HRL A,C MOVE T,OFFSET PUSHJ P,BPNPIN MOVEI A,=40 PUSHJ P,FILL FETCH(T,D,FILO) ;GET SOURCE FILE BLOCK POINTER SKIPN T ;USE IT IF THERE FETCH(T,D,FILP) FETCH(A,T,FPRF) ;GET PREFIX STRING PUSHJ P,PRINT4 ;ONLY 4 CHARS ALLOWED MOVEI A,=48 PUSHJ P,FILL FETCH(A,D,FILP) FETCH(A,A,FMOD) PUSHJ P,PRINT5 ;MODULE NAME (ONLY 5 CHARS) FETCH(A,D,PBIT) ANDI A,QBITS JUMPE A,NOQBIT MOVE A,QN2L(A) JRST GOTQ NOQBIT: FETCH(T,D,CBIT) TRNE T,TERM JRST [ MOVEI A,"T" JRST GOTQ] TRNN T,OUTLD ;OUTPUTS? JRST NSMPO FETCH(A,B,TBIT) TRNE A,ECL JRST NOTSHI FETCH(A,B,WRN) CAIE A,=19 CAIN A,=20 JRST NOTSHI ;NOT +3 IF ECL CAIN A,=21 JRST NOTSHI TRNE F,SHI SKIPA A,["+"] NOTSHI: NODEC,< MOVEI A,"S" > DEC,< MOVEI A,"O" > GOTQ: PUTBYT " " PUTBYT @A CAIN A,"C" ;CABLE? TLOA TFLG ;YES NSMPO: TLZ TFLG ;NO MOVEI A,=56 PUSHJ P,FILL MOVE T,LOUTH PUSHJ P,DECOUT PUTBYT "," MOVE T,LOUTL IDIVI T,=10 ;DIFFERENT UNITS PUSHJ P,DECOUT FETCH(TT,B,TBIT) ;WIRE TYPE BITS SETZ TTT, ;ZERO WIRE RULE NUMBER FETCH(T,B,WBIT) TRNN T,SPWR!SGND!SHI!SNC;DON'T CHECK FOR CLK ON THESE RUNS TRNN TT,CLK ;CLOCK LINE? TLNE TFLG ;IS IT CABLE? MOVEI TTT,5 ;YES, FORCE TWISTED PAIR TRNN TT,ECL ;ECL ON WIRE? JRST NSMPO1 MOVEI TTT,=19 ;WIRE RULE 19 FETCH(TT,D,CBIT) ;GET BITS FOR THIS PIN TRNE TT,FFOUT ;UNLESS FF OUTPUT MOVEI TTT,=21 ;THEN ITS 21 NSMPO1: FETCH(T,B,WRN) IDIVI T,=100 SKIPN TT ;IS THERE A NUMBER PART FROM DRAWING? MOVE TT,TTT ;NO, USE POSSIBLE GENERATED ONE FETCH(TTT,B,WBIT) ;GET WIRE TYPE BITS TRNE TTT,SNC ;IS IT AN NC (NO CONNECTION) TRO T,4 ;YES, TURN ON WIRE TYPE 400 TO SIMPLE FILE IMULI T,=100 ADD T,TT JUMPE T,NOWRN ;DON'T PRINT 0 PUSH P,T PUTSTR[ASCIZ/ */] POP P,T PUSHJ P,DECOUT NOWRN: CRLF WIRW3: FETCH(D,D,NXBP) JUMPN D,WIRW4 POP P,B WIRW1: FETCH(B,B,NXTB) ;DO EACH SLOT JUMPN B,WIRW2 OUTSTR[ASCIZ/ /] RELEASE LST, SKIPN T,FACTR2 JRST CKNX PUSHJ P,TTYDEC OUTSTR[ASCIZ/ POWER PINS SKIPPED. /] CKNX: SKIPN T,FACTR1 POPJ P, PUSHJ P,TTYDEC OUTSTR[ASCIZ/ WILD PINS SKIPPED. /] POPJ P, SKPNX: AOS FACTR1 JRST WIRW3 SKPVLT: AOS FACTR2 JRST WIRW3 CHKGIN: SKIPL GINPIN ;DID WE RUN OUT OF NAMES? TRNN DOGIN ;NO, ARE WE INVENTING THEM? JRST SKPNX ;NO, SKIP PIN NEWGIN: MOVE A,GINPIN FETCH(T,D,PBDY) FETCH(T,T,BLOC) HRL A,T ;NEEDS CARD LOC FOR EXTENT PUSHJ P,CONGIN ;INVENT NEXT NAME JRST [ SETOM GINPIN OUTSTR[ASCIZ/ RAN OUT OF REAL PIN NAMES TO REPLACE "U" PIN NAMES. /] JRST SKPNX] HRRZM A,GINPIN MOVE A,(P) ;GET POINTER TO CARD BODY HEADER FETCH(A,A,BPIN) ;START LOOKING AT PINS NEWGN1: FETCH(T,A,PINN) CAMN T,GINPIN ;THIS PIN IN USE ALREADY? JRST NEWGIN ;YES, INVENT ANOTHER FETCH(A,A,NXBP) ;LOOK AT NEXT CAMG T,GINPIN ;HAVE WE PASSED THIS PIN'S PLACE? JUMPN A,NEWGN1 ;NO, KEEP LOOKING NEWGN2: MOVE E,GINPIN ;USE NEW NAME JRST GOTGIN SMPSIG: SETZ C, MOVE A,B SMPSG1: FETCH(T,A,WBIT) TRNN T,GLB2 JRST SMPSG2 JUMPE C,SMPSG3 OUTSTR[ASCIZ/ MULTIPLE SIGNALS REQUESTED TO GO TO SIMPLE FILE: /] OUTSIG ADDR(C,SPNT) OUTSTR[ASCIZ/ /] OUTSIG ADDR(A,SPNT) OUTSTR[ASCIZ/ /] SMPSG3: MOVE C,A SMPSG2: FETCH(A,A,NNAM) JUMPN A,SMPSG1 SKIPN A,C MOVE A,B MOVEI T,ADDR(A,SPNT) MOVE TT,[=22,,=24] ;22 CHARS IN NAME, USING 24 COLUMNS TRNE F,SGND ;GROUND IS SPECIAL JRST GNDPUT JRST SMPPUT ;PLUS ASSERTION/POLARITY DIG3: SKIPGE T PUTBYT "-" MOVM T,T MOVEI TT,3 MOVEM TT,NDIG JRST NDECOUT SMPVG: PUSH P,A PUSHJ P,PINBIT ;MAP IT TLNN TT,GND ;GROUND PIN? JRST SMPVGE ;NO PUTSTR[ASCIZ/ G /] MOVE A,(P) PUSHJ P,MAKCPN ;CONVERT TO 18 BIT FORMAT HRL A,SLICEL MOVE T,OFFSET PUSHJ P,BPNPIN MOVEI A,=40 PUSHJ P,FILL PUTSTR[ASCIZ/ G /] SMPVGE: POP P,A POPJ P, SUBTTL 'WDR' 'BAC' WIRE LIST BACK TO PC PROG ;WRITE ROUTER WIRE LIST FILE FOR INPUT TO PC PROG BAKOUT: TROA ISBACK PUTOUT: TRZ ISBACK MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR MOVE L,DEFLST TRNE ISBACK JRST [ FETCH(W,L,WIRL) ;ALL LISTS FOR BACKOUT JUMPE W,[OUTSTR[ASCIZ/NO CARDS AT ALL! /] POPJ P,] MOVSI T,'BAC' JRST SETWNM] PUSHJ P,LSTGET POPJ P, MOVSI T,'WDR' ;EXTENSION FOR ROUTER WIRE LIST SETWNM: MOVEI TT,10 ;FULL WORDS MOVSI TTT,'DSK' PUSHJ P,OUTSET ;SETUP OUTPUT STUFF POPJ P, ;LET HIM OUT HERE TRNE ISBACK JRST BAKOU0 MOVEI TTT,WDRVER ;FIRST IDENTIFY US PUSHJ P,WORDOUT PUSHJ P,WLOUT PUSHJ P,WRTZERO ;MARK END OF IT ALL PUSHJ P,WRTZERO ;ONE MORE FOR GOOD MEASURE RELEASE LST, POPJ P, BAKOU0: MOVEI TTT,BACVER PUSHJ P,WORDOUT BAKFO1: FETCH(TTT,W,FCRD) PUSHJ P,WORDOUT FETCH(T,W,FCRD) ;CARD LOC JUMPE T,[OUTSTR[ASCIZ/NONE/] JRST BAKOUZ] PUSHJ P,BRS1W BAKOUZ: MOVEI H,RADDR(W,FILS,FNXT) JRST BAKFO2 BAKFO3: FETCH(TTT,H,FILN) PUSHJ P,WORDOUT FETCH(TTT,H,FEXT) HRLZ TTT,TTT PUSHJ P,WORDOUT FOR I IN(FPPN,FDAT) < FETCH(TTT,H,I) PUSHJ P,WORDOUT > FOR I IN(FREV,FMOD,FVAR,FPRF,AUTHOR,TIT1,TIT2,FPROJ,FPAGE,FOF,FNXH) < FETCH(T,H,I) PUSHJ P,WSTR > FETCH(T,H,FNOM) PUSHJ P,WSTR ;WRITE NOMENCLATURE TYPE FETCH(T,H,FWWT) PUSHJ P,WSTR ;WRITE BOARD TYPE BAKFO2: FETCH(H,H,FNXT) JUMPN H,BAKFO3 PUSHJ P,WRTZERO ;END NAME BLOCKS PUSHJ P,WLOUT PUSHJ P,WRTZERO ;END OF RUNS PUSHJ P,DPRINT ;COUNT PARTS AND OUTPUT COUNTS SKIPN T,CDSKPC JRST ALLDOK OUTSTR[ASCIZ/, /] PUSHJ P,TTYDEC OUTSTR[ASCIZ/ BODIES WITH NO LOCS./] ALLDOK: OUTSTR[ASCIZ/ /] FETCH(W,W,NXTWL) JUMPN W,BAKFO1 MOVSI TTT,400000 PUSHJ P,WORDOUT RELEASE LST, POPJ P, WLOUT: MOVEI H,RADDR(W,WIRES,ALPH) JRST WLOUT1 WLOUT2: FETCH(TT,H,WBIT) TRNE TT,NAM2ND JRST WLOUT1 ;SKIP FAKE WIRES TRNN ISBACK JRST WLOUTB FETCH(TT,H,TBIT) TRNN TT,ANYCON ;GET TO BACK PANEL? JRST WLOUT1 ;SKIP RUNS WHICH DON'T MAKE IT TO BACK PANEL TLO DOLC TLZ BAKGAT MOVE G,H SETZB A,CNTTAB MOVE T,[CNTTAB,,CNTTAB+1] BLT T,LODTAB+LODLEN-1 PUSHJ P,GATHER ;ACCUMULATE LOADING PUSHJ P,LODMER ;CALC PROPER LOADING MOVE TTT,A ;WRITE WBIT, TBIT PUSHJ P,WORDOUT MOVE TTT,LINL HRL TTT,LINH PUSHJ P,WORDOUT ;INPUT LOADING MOVE TTT,LOUTL HRL TTT,LOUTH PUSHJ P,WORDOUT ;OUTPUT LOADING FETCH(G,H,WPIN) ;GET FIRST PIN JUMPE G,BACO1 ;SKIP IF NO PINS FETCH(T,H,TBIT) ;TYPE BITS TRNN T,OUTLD ;ANY OUTPUTS? JRST BACO1 ;NO BACO3: FETCH(T,G,PTYP) ;GET TYPE POINTER JUMPE T,BACO4 FETCH(T,T,DPBIT) ;GET TYPE BITS TRNE T,OUTLD ;IS THIS AN OUTPUT JRST [ FETCH(TT,G,FILP) ;YES, OUTPUT SOURCE PRINT FETCH(TTT,TT,FILN) PUSHJ P,WORDOUT ;FILENAME FETCH(TTT,TT,FEXT) HRLZ TTT,TTT PUSHJ P,WORDOUT FETCH(TTT,TT,FPPN) PUSHJ P,WORDOUT ;PPN JRST BACO2] BACO4: FETCH(G,G,NXTP) JUMPN G,BACO3 BACO1: PUSHJ P,WRTZERO ;NO OUTPUTS, OUTPUT 0 BACO2: TLZ TFLG ;NO GLOBALS OUT YET MOVE G,H FETCH(T,H,WBIT) TRNE T,GENSIG ;IS THIS EDGE RUN UNNAMED (I.E. GENERATED NAME) JRST WLOUTZ ;YES, WRITE NO SIGNAL NAME SO IT ;WILL BE REGENERATED LATER WITH CARD LOC IN IT WLOUTG: FETCH(T,G,WBIT) TRNN T,GLB1 ;GLOBAL NAME? JRST WLOUTH TLO TFLG PUSHJ P,BACSTR WLOUTH: FETCH(G,G,NNAM) JUMPN G,WLOUTG TLNE TFLG JRST WLOUTZ ;GLOBALS OUT! JRST WLOUTC ;NO GLOBALS, OUT ALL. WLOUTB: FETCH(G,H,WPIN) JUMPE G,WLOUT1 ;FLUSH NULL WIRES! WLOUTC: MOVE G,H WLOUT3: PUSHJ P,BACSTR FETCH(G,G,NNAM) JUMPN G,WLOUT3 WLOUTZ: PUSHJ P,WRTZERO FETCH(G,H,WPIN) ;FIRST PIN WLOUT5: FETCH(A,G,PBDY) ;BODY POINTER FETCH(B,A,BLOC) ;BODY LOC FETCH(T,A,BBIT) TRNN ISBACK JRST WLOUTW TRNN T,CBODY JRST WLOUT6 MOVE T,B FETCH(TT,G,PINN) PUSHJ P,CPNMER FETCH(TTT,G,PID) ;CPIN ID HRL TTT,T PUSHJ P,WORDOUT ;PPS,,CPID FETCH(TT,G,PBIT) LDB TTT,[POINT CXPOSL,TT,35-CXPOSB] LDB TT,[POINT CYPOSL,TT,35-CYPOSB] DPB TT,[POINT 9,TTT,35-9] ADDI TTT,1001 PUSHJ P,WORDOUT FETCH(TT,G,FILP) FETCH(TTT,TT,FILN) PUSHJ P,WORDOUT ;FILENAME FETCH(TTT,TT,FEXT) HRLZ TTT,TTT PUSHJ P,WORDOUT FETCH(TTT,TT,FPPN) PUSHJ P,WORDOUT ;PPN JRST WLOUT6 WLOUTW: TRNN T,CBODY ;CONNECTOR? JRST WLOUTV ;NO MOVE T,B FETCH(TT,G,PINN) PUSHJ P,CPNMER FETCH(TTT,W,FCRD) HRL TTT,T PUSHJ P,WORDOUT ;WRITE IT JRST WLOUT6 WLOUTV: FETCH(TTT,A,BID) PUSHJ P,WORDOUT ;WRITE BODY ID FETCH(TTT,G,PINN) ;PIN # NIL,< ;IS THIS REALLY RIGHT?? **BUG** PUSH P,A PUSH P,B FETCH(B,A,BPAK) ;MAP TO REAL PIN# FETCH(A,A,BLOC) HRL A,TTT ;PIN#,,LOC PUSHJ P,MAPOST JFCL LDB TTT,[%%PINN,,A] POP P,B POP P,A >;NIL FETCH(TT,G,PTYP) ;TYPE POINTER WLOUTX: JUMPE TT,.+3 ;WAS THERE A TYPE POINTER? FETCH(TT,TT,DPBIT) ;TYPE BITS HRL TTT,TT PUSHJ P,WORDOUT ;WRITE IT MOVE TTT,B PUSHJ P,WORDOUT ;NLNLN WLOUT6: FETCH(G,G,NXTP) JUMPN G,WLOUT5 WLOUT4: PUSHJ P,WRTZERO ;MARK END OF WIRE WLOUT1: FETCH(H,H,ALPH) ;FOLLOW LIST JUMPN H,WLOUT2 POPJ P, BACSTR: FETCH(T,G,WBIT) TRNN T,GLB2 ;NEED UP ARROW IN BAC FILE? JRST [ BINSIG ADDR(G,SPNT) ;NO POPJ P,] BINSGU ADDR(G,SPNT) POPJ P, ;OUTPUT PART COUNTS TO BAC FILE DPRINT: PUSHJ P,CLEARB SETZM CDSKPC MOVEI H,RADDR(W,WBDY,NXTB) JRST DPRNT1 DPRNT2: FETCH(T,H,BBIT) TRNN T,CBODY ;DON'T DO CONNECTORS TROE T,BTMP1 JRST DPRNT1 MOVEM H,NBODS STORE(T,H,BBIT) FETCH(T,H,DIPT) MOVEM T,LSTDIP TRZ FLAG ;FLAG DIPTYPE NOT OUT YET DPRNT3: MOVEM H,RBODS FETCH(T,H,PRTN) MOVEM T,LSTPART FETCH(T,H,PRPX) MOVEM T,LPRPX SETZM TMPCN1 SETZM TMPCN2 SETZM LSLOT TLZ TFLG ;FLAG NO 0 LOCS YET DPRNT4: PUSHJ P,ACOUNT DPRNT7: FETCH(H,H,NXTB) JUMPE H,DPRNT6 FETCH(T,H,BBIT) TRNN T,CBODY TROE T,BTMP1 JRST DPRNT7 FETCH(TT,H,DIPT) CAME TT,LSTDIP JRST DPRNT7 FETCH(TT,H,PRTN) CAME TT,LSTPART JRST DPRNT7 FETCH(TT,H,PRPX) CAME TT,LPRPX JRST DPRNT7 STORE(T,H,BBIT) JRST DPRNT4 DPRNT6: PUSHJ P,ACNT7 ;FIX SECTION COUNT TO APPROX DIP COUNT TROE FLAG JRST DPRNP1 SKIPN T,LSTDIP JRST [ MOVEI T,[0 ASCIZ\N/A\] JRST .+2] FETCH(T,T,DNAM) PUSHJ P,WSTR ;WRITE STRING DPRNP1: TLNN TFLG TDZA TTT,TTT MOVE TTT,TMPCN2 PUSHJ P,WORDOUT MOVE TTT,TMPCN1 PUSHJ P,WORDOUT SKIPN H,LSTPART JRST DPRNP3 ;NOTE, HERE WE WRITE ACTUAL PART NUMBER SO ERROR WILL OCCUR IF CHANGED DPRNP2: FETCH(T,H,PRNB) FETCH(T,T,PRNS) PUSHJ P,WSTR FETCH(T,H,PRVS) PUSHJ P,WSTR FETCH(H,H,PRPP) JUMPN H,DPRNP2 DPRNP3: SKIPN H,LPRPX JRST DPRNP5 DPRNP4: FETCH(T,H,TLFT) PUSHJ P,WSTR FETCH(T,H,TRHT) PUSHJ P,WSTR FETCH(H,H,NXTT) JUMPN H,DPRNP4 DPRNP5: PUSHJ P,WRTZERO MOVE H,RBODS DPRNT8: FETCH(H,H,NXTB) JUMPE H,DPRNT5 FETCH(T,H,BBIT) TRNN T,CBODY TROE T,BTMP1 JRST DPRNT8 FETCH(TT,H,DIPT) CAME TT,LSTDIP JRST DPRNT8 STORE(T,H,BBIT) JRST DPRNT3 DPRNT5: MOVNI TTT,1 TRNE FLAG PUSHJ P,WORDOUT ;MARK END OF DIPTYPE MOVE H,NBODS DPRNT1: FETCH(H,H,NXTB) JUMPN H,DPRNT2 JRST WRTZERO ACOUNT: FETCH(T,H,BLOC) JUMPE T,[TLO TFLG ;FLAG NO LOC FOR SOME BODIES AOS CDSKPC ;AND COUNT EACH ONE JRST ACNT1] CAME T,LSLOT AOS TMPCN1 ;COUNT EACH LOC ONCE MOVEM T,LSLOT ACNT1: SETZB F,FACTR1 ;ACCUMULATE COUNT AND SECT BITS HERE MOVEI G,RADDR(H,BPIN,NXBP) JRST ACNT5 ACNT6: FETCH(TT,G,PTYP) ;TYPE POINTER JUMPE TT,ACNT5 FETCH(TTT,TT,DPBIT) ;BITS TRNN TTT,INLD!OUTLD!TERM ;ONLY INPUTS OR OUTPUTS JRST ACNT5 FETCH(TT,TT,SCTB) ;SECTION BITS MOVS TT,TT ;TO LEFT HALF JFFO TT,.+2 ;(1 SEC/DIP WORKS RIGHT) JRST ACNT5 MOVE TTT,SCTTAB(TTT) ;GET THE BIT TDOE TTT,FACTR1 ;TURN ON NEW BIT AND TEST JRST ACNT5 ;ALREADY ON, DON'T COUNT AGAIN MOVEM TTT,FACTR1 ADDI F,1 ;INC COUNT ACNT5: FETCH(G,G,NXBP) JUMPN G,ACNT6 ADDM F,TMPCN2 POPJ P, ACNT7: SKIPE A,TMPCN2 SKIPN H,LSTDIP POPJ P, PUSHJ P,SECCAL ;CALC SEC/DIP (RETURNS IN F) ADDI A,(F) IDIVI A,1(F) ;CALC DIPS MOVEM A,TMPCN2 POPJ P, SUBTTL 'WSS' 'WCS' REFERENCE LISTINGS SIGCOM: TROA CONLY DOREF: TRZ CONLY TRZ ISBACK MOVE T,[PUSHJ P,TTYIN] MOVEM T,GETCHR MOVE L,DEFLST FETCH(E,L,WIRL) JUMPE E,[NCRDS:OUTSTR[ASCIZ/NO CARDS, YOU DUMMY! /] POPJ P,] TRNE CONLY JRST [CRDS1:FETCH(T,E,NXTWL) JUMPE T,[OUTSTR[ASCIZ/HOW MANY INTERCONNECTIONS DO YOU EXPECT BETWEEN ONE CARD? /] POPJ P,] MOVSI T,'WCS' ;CONNECTOR NEEDED LISTING JRST .+2] MOVSI T,'WSS' ;REFERENCE LISTING MOVEI TT,0 ;DATA MODE 0 MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, MOVEI T,WSSMAR MOVEM T,MARGIN SETZM REFLST HRROS REFLST DOREF1: FETCH(F,E,HASHTB) ;GENLAST FETCH(F,F,ALPH) ;FIRST REAL NAME (NOTE WE ASSUME FIRST NAME IN LIST HAS SIG1 ON) JUMPE F,DOREF0 GETFS(G,TBLK) STORE(F,G,TRHT) ;STORE SIGNAL NAME BLOCK POINTER HERE FETCH(T,E,FCRD) ;CARD LOC STORE(T,G,TLFT) PUSHJ P,SORTIN JFCL JFCL DOREF0: FETCH(E,E,NXTWL) ;NEXT CARD JUMPN E,DOREF1 ;SORT THEM ALL IN DOREF2: HRRZ H,REFLST ;FIRST NAME JUMPE H,DOREFE ;DONE? HLLZS REFLST ;CLEAR LIST TRNN CONLY ;ONLY SOME SIGNALS? JRST NCONLY MOVE G,H SETZ TT, ;CLEAR BIT HOLDERS CSET1: FETCH(T,G,TVAL) ;ORDER # JUMPN T,CSET3 ;NO CONNECTIONS FOUND YET, I GIVE UP FETCH(TTT,G,TRHT) ;WIRE HEAD POINTER FETCH(T,TTT,WBIT) ;WIRE BITS TRNE T,NAM2ND FETCH(TTT,TTT,WPIN) FETCH(T,TTT,TBIT) TRNN T,ANYCON ;DOES IT GET TO BACK PANEL JRST [ TRNN T,OUTLD JRST [ TRNN T,INLD JRST CSET2 ;NO IN, OUT, OR CONS TLNN TT,OUTLD ;ANY OUTPUTS ON OTHER CARDS? TRNE TT,OUTLD ;OR BACK PANEL JRST NCONLY ;YES, DO IT TLO TT,INLD ;INPUT ONLY ON CARD JRST CSET2] TLNE TT,INLD JRST NCONLY TLO TT,OUTLD ;HAVE OUTPUT ON CARD JRST CSET2] TRNN T,OUTLD JRST [ TRNE T,INLD TRO TT,INLD ;INPUT ON BACKPANEL JRST CSET2] TRO TT,OUTLD TLNE TT,INLD ;INPUT ON CARD? JRST NCONLY ;YES, PRINT CSET2: FETCH(G,G,NXTT) JUMPN G,CSET1 CSET3: TRNE TT,INLD ;INPUT ON BACKPANEL? TRNE TT,OUTLD ;AND NO OUTPUT JRST CRFSKP ;NO TLNN TT,OUTLD ;AND OUTPUT ON CARD? JRST CRFSKP ;NO NCONLY: SKIPL LINCNT PUSHJ P,RHDR FETCH(A,H,TRHT) ;SIGNAL NAME BLOCK SETZM TCOUNT PUTSIG ADDR(A,SPNT) ;PRINT SIGNAL NAME MOVE G,H JRST DOREFW ;DO REST OF EQUIVALENTS FOR THIS WIRE, THEN REST OF CARDS DOREFY: FETCH(T,G,TVAL) ;ORDER # JUMPN T,DOREF3 FETCH(A,G,TRHT) ;SIGNAL NAME BLOCK DOREFZ: PUTCOM ADDR(A,SPNT) ;PUT OUT COMMENT AT END OF NAME DOREFW: FETCH(A,A,NNAM) JUMPE A,DOREFX ;QUIT IF END THIS WIRE FETCH(T,A,WBIT) TRNN T,SIG1 ;ALSO IF WE GET TO NEW FIRST NAME (CAN'T BE EQUIVALENT) JRST DOREFZ DOREFX: FETCH(G,G,NXTT) JUMPN G,DOREFY DOREF3: MOVE T,TCOUNT CAIL T,=16 JRST [ CRLF PUTSTR[ASCIZ/ /] JRST WASSIG] PUTBYT 11 CAIGE T,8 PUTBYT 11 WASSIG: FETCH(T,H,TLFT) ;BAY-RACK-SLOT HRLZM T,SLICEL SKIPE SLICEL PUSHJ P,PSLICL PUTBYT 11 FETCH(G,H,TRHT) ;SIGNAL NAME BLOCK SETZM TCOUNT PUSHJ P,ONECRD ;PUT OUT LINE(S) FOR ONE CARD SETZM TCOUNT ;FLAG AT LEFT MARGIN PUSHJ P,REFRET JUMPE H,DOREF2 ;ALL GONE, GO AGAIN FETCH(T,H,TVAL) JUMPE T,DOREF3 DOREF6: MOVEI B,REFLST ;ALL 0'S GONE, RE-SORT THE REST HRRZ C,REFLST DOREF5: MOVE G,H FETCH(H,H,NXTT) PUSHJ P,MERGIN ;MERGE INTO LIST JRST CPYRST ;WENT AT END, COPY THE REST JRST MERNUM ;EQV, DO REST CRFSKP: PUSHJ P,REFRET JUMPE H,DOREF2 FETCH(T,H,TVAL) JUMPE T,CRFSKP JRST DOREF6 DOREFE: RELEASE LST, POPJ P, ONECRD: FETCH(E,G,WBIT) TRNE E,NAM2ND FETCH(G,G,WPIN) FETCH(E,G,TBIT) SETZB A,LODTAB MOVE T,[LODTAB,,LODTAB+1] BLT T,LODTAB+LODLEN-1 TLO DOLC TLZ BAKGAT PUSH P,G PUSHJ P,GATHER PUSHJ P,LODMER ;CALC PROPER LOADING POP P,G MOVE T,LINL PUSHJ P,LDOUT PUTBYT 11 MOVE T,LINH PUSHJ P,LDOUT PUTBYT 11 SKIPN NOUT JRST [ TRNE E,GND JRST [ PUTSTR[ASCIZ/GND /] JRST NTOUT] TRNN E,PWR JRST .+1 SKIPLE T,PVOLTS PUTBYT "+" PUSHJ P,LDOUT PUTSTR[ASCIZ/ VOLTS/] JRST NTOUT] MOVE T,LOUTL PUSHJ P,LDOUT PUTBYT 11 MOVE T,LOUTH PUSHJ P,LDOUT NTOUT: FETCH(G,G,WPIN) ;FIRST PIN JUMPE G,[PUTSTR[ASCIZ/ NO PINS/] JRST NTPINS] SETZ F, ;CLEAR FILE LIST FSET1: FETCH(D,G,PBDY) FETCH(D,D,BBIT) ;BODY BITS FETCH(T,G,FILP) ;FILE NAME POINTER MOVEI B,F+ADDR(0,NXTC) JRST FSET2 FSET3: FETCH(TTT,B,CFIL) FETCH(TTT,TTT,FILN) CAMG TTT,ADDR(T,FILN) JRST [ CAME TTT,ADDR(T,FILN) JRST FSET4 MOVE C,B JRST FSET5] FSET2: MOVE A,B FETCH(B,B,NXTC) JUMPN B,FSET3 FSET4: GETFS(C,CBLK) BCLEAR(TT,C,CBLK) STORE(C,A,NXTC) STORE(B,C,NXTC) STORE(T,C,CFIL) FSET5: TRNN ISBACK ;BACK PANEL? JRST FSET7 ;NO FETCH(TT,C,ICNT) ADDI TT,1 ;COUNT A PIN STORE(TT,C,ICNT) JRST FSETE FSET7: TRNN D,CBODY ;CON? JRST FSET6 FETCH(TT,C,CCNT) ADDI TT,1 TRNN D,BWILD ;FRONT? TROA TT,400000 ;YES TRO TT,200000 ;NO STORE(TT,C,CCNT) JRST FSETE FSET6: FETCH(T,G,PTYP) JUMPE T,FSETE FETCH(T,T,DPBIT) TRNE T,OUTLD JRST [ FETCH(T,C,OCNT) ADDI T,1 STORE(T,C,OCNT) JRST FSETE] TRNE T,TERM JRST [ FETCH(TT,C,ZCNT) ADDI TT,1 STORE(TT,C,ZCNT) JRST FSETE] FETCH(T,C,ICNT) ADDI T,1 STORE(T,C,ICNT) FSETE: FETCH(G,G,NXTP) ;NEXT PIN OF WIRE JUMPN G,FSET1 SETOM FACTR1 MOVE G,F TRNE ISBACK JRST NTABB NTABA: FETCH(T,G,OCNT) SKIPE T ;FIRST PRINT DRAWING NAMES WITH OUTPUTS PUSHJ P,NTAB FETCH(G,G,NXTC) JUMPN G,NTABA NTABB: MOVE G,F NTABC: FETCH(T,G,OCNT) TRNN ISBACK ;THIS IS ONLY LOOP FOR BACK PANEL SKIPN T ;FOR CARDS NOW WE DO ONES WITHOUT OUTPUTS PUSHJ P,NTAB MOVE A,G FETCH(G,G,NXTC) FSTRET(A,CBLK) JUMPN G,NTABC NTPINS: CRLF POPJ P, NTAB: AOS T,FACTR1 CAIGE T,4 JRST NTAB1 SETZM FACTR1 CRLF PUTSTR[ASCIZ/ /] NTAB1: PUTBYT 11 FETCH(A,G,CFIL) SETZM TCOUNT PUTSIX ADDR(A,FILN) TRNN ISBACK JRST NTAB2 PUTBYT 11 FETCH(T,G,ICNT) JRST DECOUT NTAB2: MOVE T,TCOUNT SUBI T,6 PUTBYT " " AOJLE T,.-1 FETCH(T,G,ICNT) PUSHJ P,DECOUT PUTBYT "," FETCH(T,G,OCNT) PUSHJ P,DECOUT FETCH(T,G,ZCNT) JUMPE T,NOZPNT PUTBYT "Z" CAIE T,1 PUSHJ P,DECOUT NOZPNT: FETCH(T,G,CCNT) TRZE T,200000 ;WILD? JRST [ TRZE T,400000 JRST [ PUTBYT BWAROW CAILE T,2 JRST DECOUT POPJ P,] PUTBYT WLDCHR JRST ISBCON] TRZN T,400000 ;FRONT? POPJ P, PUTBYT "_" ISBCON: CAIE T,1 ;DON'T PRINT IN THIS CASE JRST DECOUT POPJ P, REFRET: MOVE G,H FETCH(H,H,NXTT) FETCH(T,G,TRHT) ;SIGNAL BLOCK POINTER REFRT1: FETCH(T,T,ALPH) JUMPE T,[FSTRET(G,TBLK) ;END OF LIST, GIVE BACK BLOCK POPJ P,] FETCH(TT,T,WBIT) TRNN TT,SIG1 ;FIRST EQUIVALENT SIGNAL? JRST REFRT1 ;NO, TRY ANOTHER STORE(T,G,TRHT) PUSHJ P,SORTIN ;SORT NEXT STRING INTO NEW LIST JFCL POPJ P, ; SORT SUBRS MERNM1: FETCH(T,H,TVAL) CAME T,FACTR1 ;STILL SAME OLD ORDER #? JRST DOREF5 MOVE T,FACTR2 STORE(T,H,TVAL) MOVE G,H FETCH(H,H,NXTT) FETCH(TTT,G,TLFT) MERNM2: JUMPE C,MERNM3 FETCH(T,C,TVAL) ;ORDER # CAME T,FACTR2 ;ONE OF THIS GROUP? JRST MERNM3 ;NO FETCH(T,C,TLFT) CAML T,TTT JRST MERNM3 MOVE B,C FETCH(C,C,NXTT) JUMPN C,MERNM2 MERNM3: STORE(C,G,NXTT) STORE(G,B,NXTT) MOVE B,G MERNUM: JUMPN H,MERNM1 JRST DOREF2 CPYRST: STORE(H,G,NXTT) ;LINK REST ONTO END JUMPE H,DOREF2 DOREF7: FETCH(T,H,TVAL) ;NOW SET NEW ORDER #'S CAMN T,FACTR1 JRST DOREF8 MOVEM T,FACTR1 AOSA T,FACTR2 DOREF8: MOVE T,FACTR2 STORE(T,H,TVAL) FETCH(H,H,NXTT) JUMPN H,DOREF7 JRST DOREF2 MERGIN: FETCH(T,G,TVAL) MOVEM T,FACTR1 JRST SORTN2 SORTIN: MOVEI C,REFLST FETCH(T,G,TVAL) MOVEM T,FACTR1 SORTN1: MOVE B,C FETCH(C,C,NXTT) SORTN2: JUMPE C,PUTHER FETCH(TT,C,TRHT) MOVEI TT,ADDR(TT,SCMP) FETCH(T,G,TRHT) MOVEI T,ADDR(T,SCMP) PUSHJ P,ALPHA JRST PUTHER JRST SORTN1 ;NOT THERE YET JFCL ;EQUIVALENT JFCL ;EQUIVALENT FETCH(T,C,TVAL) ;EQUAL MOVEM T,FACTR2 STORE(T,G,TVAL) FETCH(TTT,G,TLFT) JRST SORTN9 SORTN3: MOVE B,C FETCH(C,C,NXTT) SORTN9: JUMPE C,SORTN8 FETCH(TT,C,TVAL) CAME TT,T JRST SORTN8 FETCH(TT,C,TLFT) CAMGE TT,TTT JRST SORTN3 STORE(G,B,NXTT) STORE(C,G,NXTT) MOVE B,G JRST CPOPJ1 SORTN8: STORE(G,B,NXTT) STORE(C,G,NXTT) MOVE B,G SKIPN C ;IF THIS IS 0 POPJ P, ;THEN WE ARE AT REAL END JRST CPOPJ1 PUTHER: FETCH(T,B,TVAL) ADDI T,1 MOVEM T,FACTR2 STORE(T,G,TVAL) STORE(G,B,NXTT) STORE(C,G,NXTT) MOVE B,G JUMPE C,CPOPJ ;AT END MOVE A,C SORTN5: FETCH(T,A,TVAL) ADDI T,1 STORE(T,A,TVAL) FETCH(A,A,NXTT) JUMPN A,SORTN5 JRST CPOPJ1 RHDR: TLZN NOFF PUTSTR[BYTE(7)15,14] MOVN TTT,PAGLEN ADD TTT,MARGIN MOVEM TTT,LINCNT TRNE CONLY JRST RHDR3 PUTSTR[ASCIZ/REF LISTING/] JRST RHDR2 RHDR3: PUTSTR[ASCIZ/CONNECTORS NEEDED/] RHDR2: FETCH(A,L,WLNM) JUMPE A,RHDR1 PUTSTR[ASCIZ/ FOR /] PUSHJ P,STROUT ;PRINT WIRE LIST NAME RHDR1: PUSHJ P,PNTFDT PUTSTR[ASCIZ/ SIGNAL NAME CARD LOW IN HI IN LOW OUT HI OUT FILNAM #I,#O Z# C# /] POPJ P, SUBTTL 'WLC' COMPARE 2 WIRE LISTS WDECO: TRZ PCNOTD OUTSTR[ASCIZ/ID OF "OLD" WIRELIST?/] PUSHJ P,FNDID POPJ P, JRST NOID HRLZM L,GOODW OUTSTR[ASCIZ/ID OF "NEW" WIRELIST?/] PUSHJ P,FNDID POPJ P, JRST NOID HRLZM L,BADW MOVE L,BADW CAME L,GOODW JRST WDECOA OUTSTR [ASCIZ /SORRY, CAN'T COMPARE A WIRELIST TO ITSELF. /] POPJ P, WIRCOM: TRO PCNOTD MOVE L,DEFLST HRLZM L,GOODW HRLZM L,BADW WDECOA: HLRZ L,GOODW FETCH(W,L,WIRL) PUSHJ P,LSTGT0 POPJ P, HRRM W,GOODW HLRZ L,BADW FETCH(W,L,WIRL) TRNE PCNOTD FETCH(W,L,PCWL) JUMPE W,NXCRD1 HRLM W,(P) PUSHJ P,GETLOP ;TRY TO FIND SAME CARD IN OTHER WIRELIST CAIA JRST WDECOK OUTSTR[ASCIZ/SAME CARD NOT FOUND IN /] TRNE PCNOTD OUTSTR[ASCIZ/PC/] FETCH(A,L,WLID) TRNN PCNOTD JRST [ OUTCHR [42] PUSHJ P,STRTTY OUTCHR[42] JRST .+1] OUTSTR[ASCIZ/ WIRELIST. /] HLRZ W,(P) PUSHJ P,LSTGT0 JRST NXCRD1 WDECOK: HRRM W,BADW TRNN PCNOTD JRST [ MOVSI T,'WDC' JRST WDECO1] PUSHJ P,FIXDIP ;TRY TO COPY DIP TYPES ACROSS MOVSI T,'WLC' ;ERROR LISTING FOR WIRE LIST COMPARISON WDECO1: MOVEI TT,0 ;DATA MODE 0 MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, TRNN PCNOTD ;FOR PC CARDS JRST WDECO2 HRRZ W,GOODW PUSHJ P,FILLST ;PUT OUT DRAWING FILE HEADER CHDR PUSHJ P,DOWLD ;PUT A WLD IN THE FRONT OF THIS FILE JRST WDECO3 WDECO2: HRRZ W,GOODW ;FOR D, PUT OUT BOTH FILE HEADERS PUSHJ P,FILLST CHDRO HRRZ W,BADW PUSHJ P,FILLST CHDRN WDECO3: HRRZ W,GOODW PUSHJ P,CLEARW HRRZ W,BADW PUSHJ P,CLEARW TRNN PCNOTD SKIPA T,[[ASCIZ/ RUNS WITH CHANGES SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS ADD DELETE/]] MOVEI T,[ASCIZ/ WIRES WITH SHORTS OR OPENS SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS SHORT OPEN/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WCIMAR MOVEM T,MARGIN HRRZ W,GOODW MOVEI W,RADDR(W,WIRES,ALPH);WIRES JRST WIRCM2 WIRCM3: FETCH(T,W,WBIT) TRNE T,NAM2ND!WNULL ;WNULL WILL BE HONEST IF NAM2ND IS OFF JRST WIRCM2 ;SKIP FAKE WIRES SETZM MSINGL ;CLEAR 1 PIN RUN MATCH FETCH(T,W,TBIT) FETCH(H,W,WPIN) TRNN T,OUTLD ;ANY OUTPUTS JRST CONFN0 OUTFN2: FETCH(T,H,PBIT) TRNE T,DUP JRST OUTFN1 FETCH(T,H,PTYP) JUMPE T,OUTFN1 FETCH(T,T,DPBIT) TRNE T,OUTLD ;OUTPUT PIN? PUSHJ P,PINFNH ;TRY TO FIND IN BADW JRST OUTFN1 ;LOSE JRST ISLINK ;THIS IS IT OUTFN1: FETCH(H,H,NXTP) JUMPN H,OUTFN2 FETCH(H,W,WPIN) FETCH(T,W,TBIT) CONFN0: TRNN T,ANYCON JRST INFN0 FNCON2: FETCH(T,H,PBIT) TRNE T,DUP JRST FNCON1 FETCH(T,H,PBDY) FETCH(T,T,BBIT) TRNN T,BWILD TRNN T,CBODY JRST FNCON1 PUSHJ P,PINFNH JRST FNCON1 JRST ISLINK FNCON1: FETCH(H,H,NXTP) JUMPN H,FNCON2 FETCH(H,W,WPIN) FETCH(T,W,TBIT) INFN0: TRNN T,INLD JRST UNFN2 INFN2: FETCH(T,H,PBIT) TRNE T,DUP JRST INFN1 FETCH(T,H,PTYP) JUMPE T,INFN1 FETCH(T,T,DPBIT) TRNE T,INLD PUSHJ P,PINFNH JRST INFN1 JRST ISLINK INFN1: FETCH(H,H,NXTP) JUMPN H,INFN2 FETCH(H,W,WPIN) UNFN2: FETCH(T,H,PBIT) TRNE T,DUP JRST UNFN1 PUSHJ P,PINFNH JRST UNFN1 JRST ISLINK UNFN1: FETCH(H,H,NXTP) JUMPN H,UNFN2 TRNE PCNOTD ;IF COMPARING PC TO DRW, JRST WIRCM2 ;THEN ONLY SEE WIRES SKIPE MSINGL ;DID WE FIND SINGLE PIN MATCH? JRST ISLNKS ;YES, GO USE IT WIRCM2: FETCH(W,W,ALPH) JUMPN W,WIRCM3 HRRZ W,GOODW MOVEI G,RADDR(W,WIRES,ALPH) TRNN PCNOTD SKIPA T,[[ASCIZ/ DELETED RUNS SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS/]] MOVEI T,[ASCIZ/ MISSING WIRES SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WCWMAR MOVEM T,MARGIN JRST WIRCM6 WIRCM4: FETCH(F,G,WBIT) TRNE F,NAM2ND!WNULL!WSINGL JRST WIRCM6 ;ALWAYS SKIP FAKE HEADERS, NULLS, AND SINGLES TROE F,WTMP1 ;RUN COMPARED YET? JRST WIRCM6 ;YES STORE(F,G,WBIT) ;STORE WITH BIT SET PUSHJ P,CCHK PUTSIG ADDR(G,SPNT) FETCH(E,G,WPIN) WIRCM8: PUSHJ P,PINPNT CRLF FETCH(E,E,NXTP) JUMPN E,WIRCM8 WIRCM6: FETCH(G,G,ALPH) JUMPN G,WIRCM4 HRRZ W,BADW MOVEI G,RADDR(W,WIRES,ALPH) TRNN PCNOTD SKIPA T,[[ASCIZ/ ADDED RUNS SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS/]] MOVEI T,[ASCIZ/ EXTRA WIRES SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WCWMAR MOVEM T,MARGIN JRST WIRCN6 WIRX2: TLO TFLG ;NAME NOT OUT YET PUSHJ P,ISLNKX JRST WIRCN6 WIRCN4: FETCH(A,G,WBIT) TRNE A,NAM2ND!WNULL!WSINGL JRST WIRCN6 ;ALWAYS SKIP FAKE HEADERS, NULLS, AND SINGLES TRNN PCNOTD JRST WIRCN7 ;SKIP TESTS IF BOTH WD FILES TRNE A,SPWR!SGND JRST WIRX2 ;IS GND OR PWR WIRCN7: TROE A,WTMP1 ;MATCHED ALREADY? JRST WIRCN6 ;YES STORE(A,G,WBIT) pushj p,cchk PUTSIG ADDR(G,SPNT) FETCH(E,G,WPIN) WIRCN8: PUSHJ P,PINPNT CRLF FETCH(E,E,NXTP) JUMPN E,WIRCN8 WIRCN6: FETCH(G,G,ALPH) JUMPN G,WIRCN4 HRRZ W,GOODW MOVEI G,RADDR(W,WIRES,ALPH) TRNN PCNOTD SKIPA T,[[ASCIZ/ DELETED PINS SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS/]] MOVEI T,[ASCIZ/ LONESOME PINS FROM LOGIC DRAWING SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WCLMAR MOVEM T,MARGIN JRST WIRCO6 WIRCO4: FETCH(F,G,WBIT) TRNE F,WSINGL TRNE F,NAM2ND!WNULL JRST WIRCO6 ;SKIP FAKE WIRES AND NULLS AND NON SINGLES TROE F,WTMP1 JRST WIRCO6 ;DONE ALREADY STORE(F,G,WBIT) pushj p,cchk PUTSIG ADDR(G,SPNT) FETCH(E,G,WPIN) PUSHJ P,PINPNT CRLF WIRCO6: FETCH(G,G,ALPH) JUMPN G,WIRCO4 TRNE PCNOTD JRST WDECON HRRZ W,BADW MOVEI G,RADDR(W,WIRES,ALPH) MOVEI T,[ASCIZ/ ADDED PINS SIGNAL NAME LOC(PIN#) TYPE USE DIPTYPE BODY FILE POS/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WCLMAR MOVEM T,MARGIN JRST WIRCP6 WIRCP4: FETCH(F,G,WBIT) TRNE F,WSINGL TRNE F,NAM2ND!WNULL JRST WIRCP6 ;SKIP FAKE WIRES AND NULLS AND NON SINGLES TROE F,WTMP1 JRST WIRCP6 ;DONE ALREADY STORE(F,G,WBIT) pushj p,cchk PUTSIG ADDR(G,SPNT) FETCH(E,G,WPIN) PUSHJ P,PINPNT CRLF WIRCP6: FETCH(G,G,ALPH) JUMPN G,WIRCP4 JRST WDECOE WDECON: MOVEI T,[ASCIZ/PWR OR GND PINS NOT WIRED TO PWR OR GND ON PC CARD LOC(PIN#) TYPE USE DIPTYPE FILE SIGNAL/] MOVEM T,HEADER SETZM LINCNT MOVEI T,WCLMAR MOVEM T,MARGIN HRRZ W,BADW MOVEI W,RADDR(W,WBDY,NXTB) JRST WIRVG1 WIRVG2: FETCH(T,W,DIPT) JUMPE T,WIRVGA ;ANY DIP TYPE? MOVEI E,RADDR(W,BPIN,NXBP) JRST WIRVG3 WIRVG4: FETCH(A,E,PTYP) JUMPE A,WIRVG3 FETCH(TT,A,DPBIT) TRNE TT,PWR!GND JRST WIRVGC WIRVG3: FETCH(E,E,NXBP) JUMPN E,WIRVG4 JRST WIRVG1 WIRVGE: PUSHJ P,PINVG JRST WIRVG3 PINVG: PUSHJ P,CCHK PUSHJ P,PINVGP PINVGC: PUTBYT 11 FETCH(A,E,HPNT) PUTSIG ADDR(A,SPNT) CRLF POPJ P, WIRVGC: FETCH(T,E,HPNT) FETCH(T,T,WBIT) TRNN T,SPWR!SGND JRST WIRVGE TRNN TT,PWR JRST WIRVGD TRNN T,SPWR JRST WIRVGE JRST WIRVG3 WIRVGD: TRNN T,SGND JRST WIRVGE JRST WIRVG3 WIRVGA: SKIPN ISWW JRST WIRVG1 FETCH(T,W,BBIT) TRNN T,BWILD TRNN T,CBODY JRST WIRVG1 ;NO FETCH(F,W,BLOC) TLO F,MAPCON MOVEI E,RADDR(W,BPIN,NXBP) JRST WIRVGX WIRVGY: MOVE A,F FETCH(TT,E,PINN) HRLI A,MAPCON(TT) PUSHJ P,PINBIT TLNN TT,PWR!GND JRST WIRVGX FETCH(T,E,HPNT) FETCH(T,T,WBIT) TRNN T,SPWR JRST WIRVGW TLNE TT,PWR JRST WIRVGX JRST WIRVGZ WIRVGW: TRNE T,SGND TLNE TT,GND JRST WIRVGX WIRVGZ: HLLM TT,(P) PUSHJ P,CCHK PUSHJ P,PINPNF HLRZ TT,(P) TRNE TT,PWR PUTBYT PWRCHR TRNE TT,GND PUTBYT GNDCHR PUSHJ P,WASCON PUSHJ P,PINVGC WIRVGX: FETCH(E,E,NXBP) JUMPN E,WIRVGY WIRVG1: FETCH(W,W,NXTB) JUMPN W,WIRVG2 WDECOE: RELEASE LST, POPJ P, ISLNKS: HLRZ H,MSINGL ;GET PIN WE MATCHED HRRZ F,MSINGL ;GET ITS MATCH FETCH(G,F,HPNT) ;GET ITS WIRE HEADER ISLINK: FETCH(T,W,WBIT) TRO T,WTMP1 ;MARK RUN MATCHED STORE(T,W,WBIT) TRC T,WSINGL!GENSIG TRCE T,WSINGL!GENSIG ;BUT DON'T MARK NEW RUN IF OLD IS SINGLE GENSIG JRST ISLNK6 FETCH(TT,G,WBIT) TRNN TT,WSINGL ;GO AHEAD WITH SINGLES JRST WIRCM2 ;MULTIPLE PIN RUNS WILL MATCH OTHER RUNS, OR BE ADDS LATER ISLNK6: TLO TFLG ;NO SIGNAL NAME OUT YET MOVE A,W PUSHJ P,CLEARA ;CLEAR PRINT BITS MOVE A,G PUSHJ P,CLEARA ;ON BOTH WIRES MOVE TT,H PUSHJ P,PTSETA ;MARK AS MATCHED, BUT NOT PRINTED MOVE TT,F PUSHJ P,PTSETB ;MARK AS PRINTED AND MATCHED ALREADY TRNE PCNOTD JRST ISLNK0 FETCH(T,W,WBIT) TRNE T,GENSIG JRST [ FETCH(T,G,WBIT) TRNN T,GENSIG JRST .+1 JRST ISLNK0] ;DON'T COMPARE SIGNAL NAMES IF BOTH GENERATED MOVE H,W MOVE F,G ECOSIG: JUMPE H,[JUMPE F,ECOSG1 JRST CKADD] JUMPE F,CKDEL MOVEI T,ADDR(H,SCMP) MOVEI TT,ADDR(F,SCMP) PUSHJ P,ALPHA JRST CKDEL JRST CKADD JRST CKDEL JRST CKADD FETCH(T,H,WBIT) TRO T,WTMP1 STORE(T,H,WBIT) FETCH(H,H,NNAM) FETCH(T,F,WBIT) TRO T,WTMP1 STORE(T,F,WBIT) FETCH(F,F,NNAM) JRST ECOSIG CKADD: FETCH(T,F,WBIT) TRZ T,WTMP1 ;CLEAR BIT IN CASE WE HAVE BEEN THROUGH HERE BEFORE STORE(T,F,WBIT) FETCH(F,F,NNAM) JRST ECOSIG CKDEL: TLZN TFLG JRST CKDEL1 pushj p,cchk CKDEL1: PUTSIG ADDR(H,SPNT) MOVEI A,=72 PUSHJ P,FILL PUTSTR[ASCIZ/ D/] CRLF FETCH(T,H,WBIT) TRO T,WTMP1 STORE(T,H,WBIT) FETCH(H,H,NNAM) JRST ECOSIG ECOSG1: MOVE F,G ECOSG2: FETCH(T,F,WBIT) TROE T,WTMP1 JRST ECOSG3 STORE(T,F,WBIT) TLZN TFLG JRST ECOSG4 pushj p,cchk ECOSG4: PUTSIG ADDR(F,SPNT) MOVEI A,=64 PUSHJ P,FILL PUTSTR[ASCIZ/ A/] CRLF ECOSG3: FETCH(F,F,NNAM) JUMPN F,ECOSG2 ISLNK0: FETCH(T,W,WBIT) TRO T,WTMP1 STORE(T,W,WBIT) FETCH(T,G,WBIT) TRO T,WTMP1 STORE(T,G,WBIT) MOVEI H,RADDR(W,WPIN,NXTP) JRST ISLNK1 ISLNK2: FETCH(T,H,PBIT) TRNE T,PTMP2 ;MATCHED ALREADY? JRST ISLNK1 PUSHJ P,PINFNG ;NO, FIND MATCH JRST MISING ;DELETED MOVE TT,H PUSHJ P,PTSETA ;MARK AS MATCHED, BUT NOT PRINTED MOVE TT,F PUSHJ P,PTSETB ;MARK AS MATCHED AND PRINTED ISLNK1: FETCH(H,H,NXTP) JUMPN H,ISLNK2 PUSHJ P,ISLNKX ;NOW DO ADDED PINS TLNE TFLG ;ANYTHING PRINTED JRST WIRCM2 ;NO MOVEI H,RADDR(W,WPIN,NXTP) ;YES, PRINTED MATCHED PINS ALSO JRST MDUMP1 MDUMP2: FETCH(T,H,PBIT) TRNE T,PTMP1 ;PRINTED YET? JRST MDUMP1 ;YES MOVE E,H PUSH P,W HRRZ W,GOODW PUSHJ P,PINPNT CRLF POP P,W MDUMP1: FETCH(H,H,NXTP) JUMPN H,MDUMP2 JRST WIRCM2 ISLNKX: MOVEI F,RADDR(G,WPIN,NXTP) JRST ISLNK3 ISLNK4: FETCH(T,F,PBIT) TRNE T,PTMP1 ;PRINTED YET? JRST ISLNK3 ;YES MOVE TT,F PUSHJ P,PTSET FETCH(A,G,WBIT) TRNN A,SPWR!SGND JRST ISNTPG FETCH(T,F,PBDY) FETCH(T,T,BBIT) TRNN T,CBODY ;CONNECTOR? JRST ISNTC ;NO SKIPN ISWW JRST ISNTPG TRNE T,BWILD ;ONLY REAL ONES JRST ISNTPG FETCH(TT,F,PINN) FETCH(T,F,PBDY) FETCH(T,T,BLOC) PUSHJ P,CPNMER MOVE A,T TLO A,MAPCON PUSHJ P,PINBIT JUMPE TT,ISNTPG MOVS TT,TT FETCH(A,G,WBIT) JRST VPCHK0 ISNTC: FETCH(TT,F,PTYP) JUMPE TT,ISNTPG FETCH(TT,TT,DPBIT) VPCHK0: TRNN TT,PWR JRST ISNTP TRNN A,SPWR JRST ISNTPG JRST ISLNK3 ;IS PWR ON PWR, SKIP IT ISNTP: TRNN TT,GND JRST ISNTPG TRNE A,SGND JRST ISLNK3 JRST ISNTPG ISNTPG: TLZN TFLG ;SIGNAL NAME OUT YET? JRST ISLNK5 ;YES pushj p,cchk PUTSIG ADDR(W,SPNT) TRNN PCNOTD JRST ISLNK5 CRLF PUTSIG ADDR(G,SPNT) ISLNK5: MOVE E,F PUSH P,W HRRZ W,BADW PUSHJ P,PINPNT POP P,W MOVEI A,=64 PUSHJ P,FILL TRNN PCNOTD PUTSTR[ASCIZ/ A/] TRNE PCNOTD PUTSTR[ASCIZ/ S/] CRLF ISLNK3: FETCH(F,F,NXTP) JUMPN F,ISLNK4 POPJ P, MISING: MOVE TT,H PUSHJ P,PTSET TLZN TFLG ;NAME OUT YET? JRST MISNG1 pushj p,cchk PUTSIG ADDR(W,SPNT) TRNN PCNOTD JRST MISNG1 CRLF PUTSIG ADDR(G,SPNT) MISNG1: MOVE E,H PUSH P,W HRRZ W,GOODW PUSHJ P,PINPNT MOVEI A,=72 PUSHJ P,FILL TRNN PCNOTD PUTSTR[ASCIZ/ D/] TRNE PCNOTD PUTSTR[ASCIZ/ O/] CRLF POP P,W JRST ISLNK1 ; SUBRS FOR WIRCOM PTSETB: PUSH P,[PTMP1!PTMP2] JRST PTSET0 PTSETA: PUSH P,[PTMP2] JRST PTSET0 PTSET: PUSH P,[PTMP1] PTSET0: FETCH(T,TT,PBIT) PTSET1: IOR T,(P) STORE(T,TT,PBIT) FETCH(TT,TT,NXTP) JUMPE TT,PTSET2 FETCH(T,TT,PBIT) TRNE T,DUP JRST PTSET1 PTSET2: POP P,(P) POPJ P, CLEARP: HLRZ A,1(W) MOVEI A,RADDR(W,WIRES,ALPH) JRST CLEAR1 CLEAR2: PUSHJ P,CLEARA CLEAR1: FETCH(A,A,ALPH) JUMPN A,CLEAR2 POPJ P, CLEARA: FETCH(B,A,WBIT) TRNE B,NAM2ND POPJ P, ;SKIP FAKE WIRES MOVEI B,RADDR(A,WPIN,NXTP) JRST CLEAR3 CLEAR4: FETCH(T,B,PBIT) TRZ T,PTMP1!PTMP2 STORE(T,B,PBIT) CLEAR3: FETCH(B,B,NXTP) JUMPN B,CLEAR4 POPJ P, ;HERE TO PUT OUT HEADER FOR OLD FILE ONLY CHDRO: PUSHJ P,CHDR PUTSTR[ASCIZ/"OLD" WIRE LIST: /] POPJ P, ;HERE TO PUT OUT HEADER FOR NEW FILE ONLY CHDRN: PUSHJ P,CHDR PUTSTR[ASCIZ/"NEW" WIRE LIST: /] POPJ P, CCHK: SKIPGE LINCNT JRST [ CRLF POPJ P,] CHDR: TLZN NOFF PUTSTR[BYTE(7)15,14] PUSH P,A MOVN A,PAGLEN ;INIT COUNT TO TOP OF PAGE ADD A,MARGIN MOVEM A,LINCNT HLRZ A,GOODW FETCH(A,A,WLNM) JUMPE A,[HLRZ A,BADW FETCH(A,A,WLNM) JUMPE A,BTHBNK PUTSTR[ASCIZ/Unnamed wire list/] JRST .+2] PUSHJ P,STROUT PUTSTR[ASCIZ/ - vs - /] HLRZ A,BADW FETCH(A,A,WLNM) JUMPE A,[PUTSTR[ASCIZ/Unnamed wire list/] JRST ONEBNK] PUSHJ P,STROUT ONEBNK: CRLF BTHBNK: HRRZ A,GOODW FETCH(A,A,FCRD) PUSHJ P,PNTBRS CRLF PUTSTR @HEADER PUTSTR[ASCIZ/ /] POP P,A POPJ P, PINPNX: FETCH(D,E,PBDY) JRST PINPNY PINPNT: MOVE T,LCOUNT CAIL T,8 ;PUT ON SAME LINE IF ROOM CRLF PUTBYT 11 PINVGP: PUSHJ P,PINPNF WASCON: PUTBYT 11 JUMPE B,WASNCN FETCH(A,B,DUSE) PUTSIX A WASNCN: PUTBYT 11 FETCH(T,D,DIPT) ;DIP POINTER SETZM TCOUNT JUMPE T,[FETCH(T,D,BBIT) TRNE T,CBODY PUTSTR[ASCIZ/CON/] JRST WNONM1] FETCH(A,T,DNAM) PUSHJ P,STROUT WNONM1: PUTBYT 11 PUTSTR ADDR(D,BNAM) PUTBYT 11 FETCH(A,E,FILP) PUTSIX ADDR(A,FILN) PUTBYT 11 FETCH(A,D,BBIT) TRNN A,CBODY JRST BPPNT FETCH(A,E,PBIT) JRST CNPNT PINPNF: FETCH(D,E,PBDY) FETCH(A,D,BLOC) SETZM TCOUNT FETCH(T,E,PINN) HRL A,T FETCH(T,D,BBIT) TRNN T,CBODY JRST PNNC PUSHJ P,LOCPNW FETCH(T,E,PBIT) PUSHJ P,PTAB SETZ B, ;FLAG TO WASCON NOT TO PRINT USE POPJ P, PNNC: FETCH(B,D,BPAK) PUSHJ P,LOCPNP FETCH(T,E,PBIT) PUSHJ P,PTAB PINPNY: FETCH(B,E,PTYP) JUMPE B,[PUTSTR[ASCIZ/UN/] POPJ P,] FETCH(A,B,DPBIT) PUSHJ P,PNTYPE POPJ P, ;ENTER WITH LOGIC PIN TO FIND IN H PINFNH: FETCH(A,H,PBDY) ;BODY POINTER FETCH(A,A,BLOC) ;LOC OF BODY JUMPE A,CPOPJ ;CAN'T FIND IF NO LOC!!!!!! FETCH(B,H,PINN) ;PIN # HRRZ G,BADW MOVEI G,RADDR(G,WBDY,NXTB) JRST BDFNH1 BDFNH2: FETCH(C,G,BLOC) ;LOC CAMN A,C ;SAME LOC? JRST BDFNH3 BDFNH1: FETCH(G,G,NXTB) JUMPN G,BDFNH2 POPJ P, ;LOSE BDFNH3: MOVEI F,RADDR(G,BPIN,NXBP) JRST PNFNH1 PNFNH2: FETCH(T,F,PBIT) TRNE T,DUP JRST PNFNH1 FETCH(T,F,PINN) CAME T,B ;PIN # JRST PNFNH1 FETCH(C,F,HPNT) ;WIRE POINTER FETCH(T,C,WBIT) TRNE T,WTMP1 ;DON'T FIND PREVIOUSLY MATCHED PINS JRST PNFNH1 ;BUT KEEP TRYING TRNN T,WSINGL ;DON'T FIND SINGLES JRST [ MOVE G,C ;RETURN WIRE HEADER IN G JRST CPOPJ1] SKIPE MSINGL ;ALREADY GOT BEST SINGLE? JRST PNFNH1 MOVEM F,MSINGL ;NO, SAVE THIS ONE HRLM H,MSINGL ;CONTINUE TO SEARCH FOR NON-SINGLE OR UNMATCHED PIN PNFNH1: FETCH(F,F,NXBP) JUMPN F,PNFNH2 JRST BDFNH1 ;ENTER WITH LOGIC PIN IN H, PC WIRE IN G PINFNG: MOVEI F,RADDR(G,WPIN,NXTP) FETCH(A,H,PBDY) FETCH(A,A,BLOC) ;LOC FETCH(B,H,PINN) ;PIN # JRST PINFN1 PINFN2: FETCH(T,F,PINN) ;PIN # CAME T,B JRST PINFN1 FETCH(T,F,PBDY) ;BODY POINTER FETCH(T,T,BLOC) ;LOC CAMN A,T JRST CPOPJ1 PINFN1: FETCH(F,F,NXTP) JUMPN F,PINFN2 POPJ P, SUBTTL 'WLD' DIP LOC CHECK DIPCOM: MOVE L,DEFLST HRLZM L,GOODW HRLZM L,BADW FETCH(W,L,WIRL) PUSHJ P,LSTGT0 POPJ P, HRRM W,GOODW HLRZ L,BADW FETCH(W,L,PCWL) JUMPE W,NXCRD1 PUSHJ P,GETLOP JRST NXCRD1 HRRM W,BADW MOVSI T,'WLD' ;ERROR LISTING FOR WIRE LIST COMPARISON MOVEI TT,0 ;DATA MODE 0 MOVSI TTT,'DSK' PUSHJ P,OUTSET POPJ P, HRRZ W,GOODW PUSHJ P,FILLST CHDR PUSHJ P,DOWLD RELEASE LST, POPJ P, DOWLD: PUSHJ P,CLEARB MOVEI T,[ASCIZ\DIP TYPE/SOCKET MIS-MATCHING LOC BODY FILE POS DIPTYPE PINS PC PINS\] MOVEM T,HEADER MOVEI T,WLDMAR MOVEM T,MARGIN SETZM LINCNT HRRZ W,GOODW MOVEI H,RADDR(W,WBDY,NXTB) SETZM LETTER JRST DIPC1Z DIPC2Z: FETCH(TT,H,BBIT) FETCH(T,H,BLOC) TRNE TT,CBODY ;CON? JRST DIPC1X ;YES, DO DIFFERENTLY JUMPE T,[MOVEM T,LETTER ;BLANK LOC SETZM PINNUM PUSHJ P,BDPNTA ERRSTR 0,[ASCIZ/NO LOCATION IN LOGIC DRAWING/] JRST DIPC1Z] CAMN T,LETTER ;NEW LOC? JRST DIPC1Z ;NO, GET ANOTHER MOVEM T,LETTER MOVE C,BADW MOVEI C,RADDR(C,WBDY,NXTB) PUSHJ P,FN2BOD ;FIND THE LOC JRST [ SETZM PINNUM PUSHJ P,BDPNTA ERRSTR 1,[ASCIZ/NO SUCH LOCATION ON PC CARD/] JRST DIPC1Z] FETCH(T,C,BBIT) TRO T,BTMP1 STORE(T,C,BBIT) PUSHJ P,DIPMAX ;FIND MAX PIN # OF SOCKET FETCH(TTT,H,DIPT) ;DIPTYPE JUMPE TTT,[PUSHJ P,BDPNTA ERRSTR 0,[ASCIZ/NO DIP TYPE/] JRST DIPC1A] FETCH(TTT,TTT,DPNN) ;# OF PINS CAME TTT,PINNUM ;SAME # OF PINS?, NO ERROR JRST [ HRLM TTT,PINNUM ;STORE # OF PINS FOR PRINTING PUSHJ P,BDPNT ERRSTR 2,[ASCIZ/WRONG NUMBER OF PINS FOR DIP/] JRST DIPC1A] HRLM C,(P) PUSHJ P,FN2BOD ;SEE IF THERE IS ANOTHER JRST DIPC1Z ;NO, OK SKIPL LINCNT PUSHJ P,CHDR CRLF MOVE T,C HLRZ C,(P) HRLM T,(P) MOVE A,LETTER FETCH(T,C,BBIT) ;BODY BITS PUSHJ P,WLOCOUT PUSHJ P,DIPC1C ;REST OF LINE HLRZ C,(P) JRST DIPC1B DIPC1A: PUSHJ P,FN2BOD ;TRY TO FIND ANOTHER SUCH LOC JRST DIPC1Z DIPC1B: PUSHJ P,DIPC1C JRST DIPC1A DIPC1C: PUTSTR[ASCIZ/ /] PUSHJ P,DIPMAX ;GET MAX PINS MOVE T,PINNUM PUSHJ P,DECOUT ERRSTR 3,[ASCIZ/MULTIPLE DIPS WITH SAME LOC/] POPJ P, DIPC1X: FETCH(TT,H,BBIT) TRNE TT,BWILD ;SKIP WILD CARD CPINS JRST DIPC1Z MOVEM T,LETTER ;STORE LOC MOVE C,BADW MOVEI C,RADDR(C,WBDY,NXTB) PUSHJ P,FN2BOD ;FIND CON ON PC CARD JRST DIPC1N ;NO SUCH PADDLE FETCH(F,C,BPIN) ;FIRST PIN ON PC CARD FETCH(G,H,BPIN) ;FIRST PIN TLZ TFLG ;NO LOC OUT YET DIPC1Y: FETCH(T,G,PINN) DIPC2Y: JUMPE F,DIPC1M ;IF NO MORE PC PINS, THEN ERROR FETCH(TT,F,PINN) ;PIN # CAMGE T,TT ;PAST RIGHT PLACE YET? JRST DIPC1M ;YES, ERROR CAMN T,TT ;IS THIS IT? JRST DIPC1W ;YES, NEXT FETCH(F,F,NXBP) JRST DIPC2Y ;NEXT PC PIN DIPC1W: FETCH(G,G,NXBP) JUMPN G,DIPC1Y JRST DIPC1Z DIPC1M: SKIPGE LINCNT JRST DIPC0L PUSHJ P,CHDR TLZ TFLG ;NEED LOC AGAIN DIPC0L: TLOE TFLG ;LOC NEEDED? JRST DIPC1L ;NO MOVE A,LETTER FETCH(T,H,BBIT) PUSHJ P,WLOCOUT DIPC1L: PUSHJ P,CPINPN ERRSTR 2,[ASCIZ/NON EX PIN ON PADDLE/] JRST DIPC1W CPINPN: PUTSTR[ASCIZ/ /] ;NO BODY FETCH(A,G,FILP) PUTSIX ADDR(A,FILN) ;FILE NAME PUTSTR[ASCIZ/ CON /] ;DIP TYPE HRRZ A,LETTER FETCH(T,G,PINN) PUSHJ P,PRCNPN PUTBYT 11 SKIPN T,PINNUM POPJ P, JRST PRCNPN DIPC1N: TLZ TFLG DIPC2N: SKIPGE LINCNT JRST DIPC3N PUSHJ P,CHDR TLZ TFLG DIPC3N: TLOE TFLG JRST DIPC4N MOVE A,LETTER FETCH(T,H,BBIT) PUSHJ P,WLOCOUT FETCH(G,H,BPIN) DIPC4N: PUSHJ P,CPINPN ERRSTR 2,[ASCIZ/NO SUCH PADDLE ON PC CARD/] FETCH(G,G,NXBP) JUMPN G,DIPC2N DIPC1Z: FETCH(H,H,NXTB) JUMPN H,DIPC2Z MOVEI T,[ASCIZ/DIP SOCKETS NOT USED IN LOGIC DRAWING LOC PINS/] MOVEM T,HEADER SETZM LINCNT MOVE C,BADW MOVEI C,RADDR(C,WBDY,NXTB) ;NOW FIND THE SLACKERS JRST DIPC8 DIPC7: FETCH(T,C,BBIT) TRNE T,BTMP1!CBODY JRST DIPC8 ;ALREADY SEEN, OK SKIPL LINCNT PUSHJ P,CHDR FETCH(T,C,BBIT) FETCH(A,C,BLOC) PUSHJ P,WLOCOUT PUTBYT 11 PUSHJ P,DIPMAX MOVE T,PINNUM PUSHJ P,DECOUT CRLF DIPC8: FETCH(C,C,NXTB) JUMPN C,DIPC7 POPJ P, DIPMAX: SETZ TTT, ;MAX PC PIN SO FAR MOVEI A,RADDR(C,BPIN,NXBP) JRST DIPC2A DIPC2B: FETCH(TT,A,PINN) ;PIN # CAMLE TT,TTT MOVE TTT,TT DIPC2A: FETCH(A,A,NXBP) JUMPN A,DIPC2B MOVEM TTT,PINNUM POPJ P, BDPNTA: FETCH(T,H,DIPT) ;DIP POINTER SKIPE T ;ANY DIP TYPE? FETCH(T,T,DPNN) ;YES, GET NUMBER OF PINS HRLM T,PINNUM ;NUMBER OF PINS ON DIP BDPNT: SKIPL LINCNT PUSHJ P,CHDR CRLF MOVE A,LETTER FETCH(T,H,BBIT) PUSHJ P,WLOCOUT ;PRINT LOC PUTBYT 11 SKIPN ADDR(H,BNAM) PUTSTR[ASCIZ/NONE/] PUTSTR ADDR(H,BNAM) PUTBYT 11 FETCH(A,H,FILB) PUTSIX ADDR(A,FILN) PUTBYT 11 FETCH(A,H,BBIT) PUSHJ P,BPPNT PUTBYT 11 FETCH(A,H,DIPT) JUMPE A,[PUTSTR[ASCIZ/NONE/] JRST BDPNT2] FETCH(A,A,DNAM) PUSHJ P,STROUT BDPNT2: PUTBYT 11 HLRZ T,PINNUM SKIPE T PUSHJ P,DECOUT PUTBYT 11 HRRZ T,PINNUM JUMPE T,CPOPJ JRST DECOUT CLEARB: MOVEI TT,RADDR(W,WBDY,NXTB) JRST CLRB1 CLRB2: FETCH(TTT,TT,BBIT) TRZ TTT,BTMP1 STORE(TTT,TT,BBIT) CLRB1: FETCH(TT,TT,NXTB) JUMPN TT,CLRB2 POPJ P, CLEARW: MOVEI T,RADDR(W,WIRES,ALPH) JRST CLRW1 CLRW2: FETCH(TT,T,WBIT) TRZ TT,WTMP1 STORE(TT,T,WBIT) CLRW1: FETCH(T,T,ALPH) JUMPN T,CLRW2 POPJ P, SUBTTL 'DAT' PARTITION FILE OUTPUT DOPART: MOVE L,DEFLST PUSHJ P,LSTGET POPJ P, PUSHJ P,DIPCHK JRST [ OUTSTR[ASCIZ/SORRY, COULDN'T GET DIPS IN! /] POPJ P,] PUSH P,LSTNAM ;SAVE DEFAULT NAME MOVE T,[DATNAM] MOVEM T,LSTNAM ;SET TO THIS FOR NOW MOVSI T,'DAT' ;PARTITION FILE EXTENSION MOVEI TT,0 ;DATA MODE MOVSI TTT,'DSK' PUSHJ P,OUTSET JRST [ POP P,LSTNAM POPJ P,] ;HE GAVE UP! POP P,LSTNAM ASK[ASCIZ/PASS PRE-PLACED DIP LOCATIONS?/] JRST PARTQT TRZA FLAG TRO FLAG PUSHJ P,PARDEF ;PUT OUT BODY DEFS IN FRONT OF FILE MOVEI T,3 ;AVOID SPECIAL SIGS MOVEM T,FACTR1 ;INIT SIGNAL # COUNTER MOVEI H,RADDR(W,WIRES,ALPH) JRST PART1 PART2: FETCH(B,H,WBIT) TRNE B,NAM2ND!WNULL JRST PART1 ;SKIP FAKE WIRES MOVEI T,2 TRNE B,SPWR JRST PARTGS ;2 = CODE FOR PWR TRNN B,WSINGL ;SINGLE OR TRNE B,SNC ;NAME NC SOJA T,PARTGS ;1 = CODE FOR NC TRNE B,SGND AOJA T,PARTGS ;3 = CODE FOR GND AOS T,FACTR1 ;NOT PWR OR GND, GENERATE A NEW NUMBER PARTGS: STORE(T,H,WTMP) ;STORE SEQ. # IN LH OF WIRE HEAD WORDS PART1: FETCH(H,H,ALPH) ;NEXT WIRE JUMPN H,PART2 MOVEI H,RADDR(W,WBDY,NXTB) JRST BPART1 BPART2: FETCH(T,H,DIPT) ;DIP TYPE JUMPE T,BPART1 ;LOSER FETCH(T,T,DTMP) ;GET DIP # (GENERATED BY PARDEF) JUMPE T,BPART1 ;SKIP ONES WITH NO DIP #! (THEY WEREN'T 14 OR 16 PIN DIPS) FETCH(T,H,BPIN) JUMPE T,BPART1 ;SKIP ONES WITH NO PINS! PUSHJ P,MAXSET ;CALC MAX SECT PIN # SETOM FACTR1 ;SET LAST SEC # PUSHJ P,NXTSEC ;FIND FIRST JRST [ OUTSTR[ASCIZ/GROSS LOSSAGE AT BPART, NO SECTIONS FOUND FOR BODY /] OUTSTR ADDR(H,BNAM) OUTSTR[ASCIZ/ /] JRST BPART1] BPART3: MOVEM T,FACTR1 ;MAKE IT THE ONE PUSHJ P,BHPNT ;PRINT BODY HEADER PUSHJ P,F4CRLF SETZ G, MOVEI F,G ;START HERE FOR ID LIST MOVE D,FACTR2 ;THIS IS SETUP TO AOBJN POINTER SPART0: PUSHJ P,PNFND ;PIN FOR PIN# IN D AND SECT # IN FACTR1 JRST [ PUSHJ P,PINID0 ;PIN ID FOR NO PIN MOVEI T,1 ;THIS SIGNAL # JRST SPART1] PUSHJ P,PHPNT ;PRINT SIGNAL # AND LINK ID INTO LIST SPART1: PUSHJ P,DEC5 AOBJN D,SPART0 ;DO THEM ALL BPART4: PUSHJ P,F4CRLF ;END OF SIGNAL #'S PUSHJ P,PIDPNT ;POOT OUT ID'S PUSHJ P,NXTSEC ;TRY FOR ANOTHER SECTION CAIA JRST BPART3 ;GOT ANOTHER, LOOP BACK BPART1: FETCH(H,H,NXTB) ;ANOTHER BODY JUMPN H,BPART2 PUTSTR[ASCIZ/ 0/] ;END BODIES PUSHJ P,F4CRLF SKIPE ISWW PUSHJ P,WAGGND ;PUT OUT GND AND PWR FIRST SKIPN ISWW OUTSTR[ASCIZ/SINCE THIS IS NOT A WIRE WRAP BOARD I CAN'T PASS PWR AND GND EDGE CONNECTIONS! /] MOVEI H,RADDR(W,WBDY,NXTB) ;BACK TO BODY LIST JRST CPART1 CPART2: FETCH(T,H,BBIT) ;LOC TRNN T,CBODY ;CONNECTOR? JRST CPART1 ;NO, SKIP IT FETCH(T,H,BLOC) MOVEM T,FACTR1 MOVEI G,RADDR(H,BPIN,NXBP) JRST CPART3 CPART4: FETCH(T,G,PID) ;PIN ID PUSHJ P,OCT6 ;PRINT IT FETCH(D,G,FILP) FETCH(D,D,FILN) HLRZ T,D PUSHJ P,OCT6 ;LH FILENAME HRRZ T,D PUSHJ P,OCT6 ;RH FILENAME FETCH(TT,G,PBDY) FETCH(TT,TT,BBIT) TRNE TT,BWILD TDZA TT,TT FETCH(TT,G,PINN) MOVE T,FACTR1 PUSHJ P,CPARTP FETCH(T,G,HPNT) FETCH(T,T,WTMP) ;SIGNAL # PUSHJ P,DEC5 PUSHJ P, F4CRLF ;THAT'S ALL CPART3: FETCH(G,G,NXBP) ;LOOP THROUGH PINS JUMPN G,CPART4 CPART1: FETCH(H,H,NXTB) ;NEXT BODY JUMPN H,CPART2 PUTSTR[ASCIZ/ 0/] ;END OF CONNECTOR PINS PUSHJ P,F4CRLF PARTQT: RELEASE LST, ;FINI POPJ P, PIDPNT: JUMPE G,F4CRLF ;ANY LIST AT ALL? PIDPN1: MOVE F,G FETCH(T,F,TRHT) ;PIN ID PUSHJ P,OCT6 ;PRINT IT FETCH(G,G,NXTT) FSTRET(F,TBLK) JUMPN G,PIDPN1 JRST F4CRLF ;DO CRLF PHPNT: FETCH(T,A,PID) GETFS(TT,TBLK) STORE(T,TT,TRHT) CLEAR(TT,NXTT) STORE(TT,F,NXTT) MOVE F,TT ;NEW END FETCH(T,A,HPNT) FETCH(T,T,WTMP) POPJ P, ;RETURN SIGNAL # IN T PINID0: GETFS(TT,TBLK) ;STORE A 0 ID IN ID LIST CLEAR(TT,NXTT) CLEAR(TT,TRHT) STORE(TT,F,NXTT) MOVE F,TT POPJ P, BHPNT: FETCH(T,H,FILB) ;OH WELL, THIS IS UNIQUE FOR THE SLICE PUSHJ P,OCT6 FETCH(T,H,BID) PUSHJ P,OCT6 ;BODY ID FETCH(B,H,FILB) FETCH(B,B,FILN) HLRZ T,B PUSHJ P,OCT6 ;LH FILENAME HRRZ T,B PUSHJ P,OCT6 ;RH FILENAME FETCH(T,H,DIPT) FETCH(T,T,DTMP) PUSHJ P,DEC5 ;DIP # TRNN FLAG ;PASSING LOCS? POPJ P, ;NO, QUIT FETCH(A,H,BLOC) ; This is really only right for DEC nomenclature.... **BUG** LDB T,[POINT 12,A,35] PUSHJ P,DEC5 ;THIS IS X LDB T,[POINT 6,A,23] JRST DEC5 ;THIS IS Y NXTSEC: MOVEI T,100 ;PICK ULTRA GROSS SEC # (.GE. 18) FETCH(TT,H,BPIN) NXTSC2: HRLM TT,(P) FETCH(TTT,TT,PTYP) ;TYPE POINTER JUMPE TTT,NXTSC1 ;UGH! FETCH(TT,TTT,DPBIT) TRNN TT,INLD!OUTLD!TERM JRST NXTSC1 FETCH(TT,TTT,SCTB) MOVS TT,TT JFFO TT,.+2 ;CALC SECT # JRST NXTSC1 CAMLE T,TTT ;SMALLER THAN SMALLEST? CAMG TTT,FACTR1 ;YES, LARGER THAN LAST? JRST NXTSC1 ;NO MOVE T,TTT ;YES, SAVE IT NXTSC1: HLRZ TT,(P) FETCH(TT,TT,NXBP) JUMPN TT,NXTSC2 CAIE T,100 ;THIS TELLS US IF WE FOUND ANOTHER AOS (P) ;FOUND ANOTHER, SKIP POPJ P, MAXSET: FETCH(T,H,DIPT) ;DIP POINTER SETZM FACTR2 ;MAX PIN # MOVEI T,RADDR(T,DPIN,DPNXT) JRST MAXPN2 MAXPN1: FETCH(TT,T,DPBIT) TRNN TT,INLD!OUTLD!TERM JRST MAXPN2 FETCH(TTT,T,SCTP) CAMLE TTT,FACTR2 ;BIGGER THAN MAX SO FAR? MOVEM TTT,FACTR2 ;YES, STORE MAXPN2: FETCH(T,T,DPNXT) JUMPN T,MAXPN1 MOVN T,FACTR2 HRLZM T,FACTR2 AOS FACTR2 ;THIS IS NOW A STARTING POINTER POPJ P, PNFND: MOVEI A,RADDR(H,BPIN,NXBP);START HERE JRST PNFND1 PNFND2: FETCH(TT,A,PTYP) JUMPE TT,PNFND1 ;ANY TYPE POINTER? FETCH(T,TT,DPBIT) TRNN T,INLD!OUTLD!TERM JRST PNFND1 FETCH(T,TT,SCTP) CAIE T,(D) ;SAME SECT PIN #? JRST PNFND1 ;NO FETCH(T,TT,SCTB) MOVS T,T JFFO T,.+1 ;CALC SECT # CAMN TT,FACTR1 ;SAME? JRST CPOPJ1 ;YES, RETURN PNFND1: FETCH(A,A,NXBP) ;NO, LOOK FORWARD JUMPN A,PNFND2 POPJ P, OCT6: MOVEI TTT,6 OCT6A: IDIVI T,10 HRLM TT,(P) SOJLE TTT,.+2 PUSHJ P,OCT6A HLRZ TTT,(P) ADDI TTT,60 XCT PUTCHR POPJ P, ; PARTITION DIP DEFINITION OUTPUT PARDEF: SETZM FACTR1 ;INITIALIZE DIP #'S PUSHJ P,DCLEAR MOVEI H,RADDR(W,WBDY,NXTB) JRST DBPRT1 DBPRT2: PUSH P,H MOVE A,H ;SAVE BODY POINTER FOR ERROR PRINTOUT FETCH(H,H,DIPT) JUMPE H,[FETCH(T,A,BBIT) TRNE T,CBODY ;CONNECTOR BODY? JRST .+2 ;YES, PROCEED OUTSTR[ASCIZ/NO DIP TYPE FOR /] PUSHJ P,DEFLOS JRST .+2] PUSHJ P,DIPDEF POP P,H DBPRT1: FETCH(H,H,NXTB) JUMPN H,DBPRT2 NPARDP: PUTSTR[ASCIZ/ 0/] JRST F4CRLF DEFLOS: SKIPN ADDR(A,BNAM) JRST [ OUTSTR[ASCIZ/UNNAMED BODY/] JRST UNNDEF] OUTSTR ADDR(A,BNAM) UNNDEF: HRLM A,(P) FETCH(A,A,DIPT) JUMPE A,DEFLSD OUTSTR[ASCIZ/, DIP TYPE IS /] FETCH(A,A,DNAM) PUSHJ P,STRTTY DEFLSD: HLRZ A,(P) OUTSTR[ASCIZ/, YOU ARE LOSING! /] POPJ P, ;POOT OUT 1 DIP DEF DIPDEF: FETCH(T,H,DPNN) ;# OF PINS CAIE T,=14 CAIN T,=16 CAIA JRST [ OUTSTR[ASCIZ/DIP TYPE NOT 14 OR 16 PINS FOR /] JRST DEFLOS] FETCH(T,H,DTMP) JUMPN T,CPOPJ ;ALREADY OUT! AOS T,FACTR1 STORE(T,H,DTMP) PUSHJ P,SECCAL ;CALC DIP DIVISION FETCH(T,H,DTMP) PUSHJ P,DEC5 ;THEN PRINT DIP # MOVE T,G ;PINS/UNIT PUSHJ P,DEC5 MOVEI T,1(F) ;UNITS/PKG PUSHJ P,DEC5 FETCH(T,H,DPNN) ;PINS/PKG PUSHJ P,DEC5 MOVEI TTT,PWR PUSHJ P,PG5 ;FIND AND PRINT PWR PIN MOVEI TTT,GND PUSHJ P,PG5 ;FIND AND PRINT GND PIN FETCH(A,H,DNAM) PUSHJ P,STROUT ;PRINT DIP NAME PUSHJ P,F4CRLF DPART7: HRLZ G,G ;G HAS # OF PINS/SEC TLC G,-1 AOBJN G,.+1 ;NOW HAS -COUNT,,PIN # MOVNI F,1(F) ;INC BY 1 FOR COUNT HRLZ F,F ;NOW HAS -COUNT,,SEC # DPRT7A: MOVE E,G ;INIT E FROM G HRRZ D,F ;INTI RH OF D TO SEC # DPRT7B: HRL D,E ;SET LEFT HALF TO PIN # PUSHJ P,PPNT5 ;FIND AND PRINT PIN AOBJN E,DPRT7B ;LOOP FOR ALL PINS AOBJN F,DPRT7A ;LOOP FOR ALL SECTIONS JRST F4CRLF ;END WITH A CRLF ;FIND A PWR OR GND PIN AND PRINT IT PG5: MOVEI T,1 MOVEM TTT,1(P) MOVEI TT,RADDR(H,DPIN,DPNXT) JRST PG5B PG5A: FETCH(TTT,TT,DPBIT) TDNE TTT,1(P) JRST DEC5 ADDI T,1 PG5B: FETCH(TT,TT,DPNXT) JUMPN TT,PG5A SETZ T, OUTSTR[ASCIZ/PWR OR GND NOT FOUND ON DIP /] FETCH(A,H,DNAM) PUSHJ P,STRTTY OUTSTR[ASCIZ/, WILL PASS 0! /] DEC5: MOVEI TT,5 MOVEM TT,NDIG JRST NDECOUT ;ENTER WITH H=DIP DEF POINTER D=PIN#,,SEC# PPNT5: MOVEI T,1 MOVEI TT,RADDR(H,DPIN,DPNXT) JRST PPNT5B PPNT5A: FETCH(TTT,TT,DPBIT) TRNN TTT,INLD!OUTLD!TERM JRST PPNT5B FETCH(TTT,TT,SCTP) HRLZ TTT,TTT ;PICK UP PIN # XOR TTT,D TLNE TTT,-1 ;SAME? JRST PPNT5B ;NO HRLM TT,(P) FETCH(TT,TT,SCTB) MOVS TT,TT JFFO TT,.+2 JRST PPNT5B CAIN TTT,(D) ;SAME SEC #? JRST DEC5 ;YES, PHY PIN # IN T, PRINT IT HLRZ TT,(P) ;RESTORE TT PPNT5B: ADDI T,1 FETCH(TT,TT,DPNXT) JUMPN TT,PPNT5A OUTSTR[ASCIZ/PIN /] HLRZ T,D PUSHJ P,TTYDEC OUTSTR[ASCIZ/ OF SECTION /] HRRZ T,D PUSHJ P,TTYDEC OUTSTR[ASCIZ/ NOT FOUND ON DIP /] FETCH(A,H,DNAM) PUSHJ P,STRTTY OUTSTR[ASCIZ/, WILL PASS 0! /] SETZ T, JRST DEC5 ;SECCAL - CALL WITH DIP POINTER IN H, RETURN WITH PINS/SEC IN G, SEC/DIP IN F SECCAL: SETOB G,F ;START THEM OUT AS 0 MOVEI TTT,RADDR(H,DPIN,DPNXT) JRST DPART0 DPART3: FETCH(TT,TTT,DPBIT) TRNN TT,INLD!OUTLD!TERM ;INPUT OR OUTPUT PIN? JRST DPART0 FETCH(T,TTT,SCTP) ;SECT PIN # CAMLE T,G ;LARGER? MOVE G,T ;NEW LARGEST FETCH(T,TTT,SCTB) MOVS T,T JFFO T,.+2 JRST DPART0 CAMLE TT,F ;LARGER SECT #? MOVE F,TT ;YES DPART0: FETCH(TTT,TTT,DPNXT) JUMPN TTT,DPART3 POPJ P, DCLEAR: SKIPN H,DIPLST POPJ P, DPART1: CLEAR(H,DTMP) FETCH(H,H,NXTD) JUMPN H,DPART1 POPJ P, SUBTTL OUTSET ;SETUP DEVICE AND NAME FOR OUTPUT OUTSET: SETZM ALLNAM ALLSET: MOVEM T,DEFEXT ;DEFAULT EXTENSION HRRM TT,OUTMOD ;SET DATA MODE MOVEM TTT,OUTDEV NOITS,< JUMPN TT,OUTMOD ;FOR FULL WORD MODE NO OTHER DEVICE MOVSI TTT,'LST' DEVCHR TTT, JUMPE TTT,OUTMOD MOVSI TTT,'LST' MOVEM TTT,OUTDEV >;NOITS OUTMOD: INIT LST,10 OUTDEV: 'DSK ' ;ALWAYS USE DISK! XWD LSTHD,0 JRST [ OUTSTR[ASCIZ/INIT FAILED ON OUTPUT DEVICE! /] JRST ERRET] SETZM LCOUNT ;START AT LEFT MARGIN SETZM LINCNT ;NEED HEADER TLO NOFF ;BUT ALREADY AT TOP! MOVEI T,LSTBUF EXCH T,.JBFF OUTBUF LST,2 MOVEM T,.JBFF MOVE T,[PUSHJ P,BYTOUT] ;SETUP OUTPUT ROUTINE (EVEN FOR BINARY) MOVEM T,PUTCHR SETZM TTYFLG ;ASSUME NOT OUT TO TTY TLZ DEC,SIMTAB ;NOT SIMULATING TABS NORMALLY OR COMMENTING SETZM PNTNAM ;NO NAME TO PRINT YET NOITS,< MOVE T,OUTDEV DEVCHR T, ;CHECK IF HE REASSIGNED THE DISK TLNE T,10 ;TTY? SETOM TTYFLG ;YES TLNN T,4 ;DOES IT STILL HAVE A DIRECTORY? JRST CPOPJ1 ;NON-DIRECTORY DEVICE, QUIT NOW >;NOITS SKIPN T,ALLNAM JRST NOALLF MOVEM T,FILNAM MOVE T,ALLPPN MOVEM T,FILPPN MOVE T,DEFEXT MOVEM T,FILEXT SETZM FILDAT PUSH P,A MOVE T,[OUTCHR TTT] MOVEM T,PUTCHR MOVEI A,FILNAM PUSHJ P,FILPNT POP P,A JRST GOTALL NOALLF: PUSHJ P,SETFIL POPJ P, GOTALL: MOVE T,[PUSHJ P,BYTOUT] ;LOSING SETFIL CLOBBERED THIS MOVEM T,PUTCHR MOVE T,FILPPN LOOKUP LST,FILNAM SKIPA TT,FILEXT SETO TT, MOVEM T,FILPPN CLOSE LST, ;DON'T GET INTO ALTER MODE!!! TRNN TT,-1 JRST NOEXST IFN 0,< ASK[ASCIZ/ ALREADY EXISTS, REPLACE?/] POPJ P, POPJ P, ;> OUTSTR[ASCIZ/, BEING REPLACED/] NOEXST: HLLZS FILEXT SETZM FILDAT ENTER LST,FILNAM JRST [ OUTSTR[ASCIZ/ ENTER FAILED, CODE= /] HRRZ T,FILEXT PUSHJ P,TTYDEC OUTSTR[ASCIZ/ /] POPJ P,] OUTSTR[ASCIZ/ /] MOVE T,FILNAM MOVEM T,LSTNAM MOVEM T,PNTNAM MOVEM T,ALLNAM HLLZ T,FILEXT MOVEM T,PNTEXT SKIPN T,FILPPN DSKPPN T, MOVEM T,PNTPPN MOVEM T,ALLPPN JRST CPOPJ1