mirror of
https://github.com/PDP-10/its.git
synced 2026-01-27 20:47:38 +00:00
2366 lines
53 KiB
Plaintext
2366 lines
53 KiB
Plaintext
;<WIRELIST>WLIN.FAI.177, 26-NOV-75 10:22:37, EDIT BY HELLIWELL
|
||
SUBTTL 'WD' 'WPC' 'BAC' 'BEQ' SETUP
|
||
;BACK PANEL EQUIVALENCE INPUT
|
||
READEQ: MOVSI T,'BEQ'
|
||
TRZ PCNOTD!DOPRTL
|
||
TRO ISBACK!DOBEQ
|
||
JRST WREAD
|
||
|
||
;BACK PANEL INPUT SETUP (OR JUST PARTS IN)
|
||
RDPART: TROA DOPRTL
|
||
BREADD: TRZ DOPRTL
|
||
MOVSI T,'BAC'
|
||
TRZ PCNOTD!DOBEQ
|
||
TRO ISBACK
|
||
JRST WREAD
|
||
|
||
;WIRE LIST EQUIVALENCE INPUT
|
||
RDWEQ: MOVSI T,'WEQ'
|
||
TRZ PCNOTD!ISBACK!DOPRTL
|
||
TRO DOBEQ
|
||
JRST WREAD
|
||
|
||
;WIRE LIST INPUT SETUP
|
||
WREADD: MOVSI T,'WD '
|
||
TRZ PCNOTD!ISBACK!DOBEQ!DOPRTL
|
||
JRST WREAD
|
||
|
||
WREADP: MOVSI T,'WPC'
|
||
TRO PCNOTD
|
||
TRZ ISBACK!DOBEQ!DOPRTL
|
||
WREAD: MOVEM T,DEFEXT
|
||
MOVE TT,[PUSHJ P,TTYOUT]
|
||
MOVEM TT,PUTCHR
|
||
MOVE L,DEFLST
|
||
SKIPGE NOMTYP
|
||
JRST [ OUTSTR[ASCIZ/NO NOMENCLATURE TYPE SET.
|
||
/]
|
||
PUSHJ P,NOMSET
|
||
SKIPGE NOMTYP
|
||
JRST ERRET
|
||
OUTSTR[ASCIZ/
|
||
/]
|
||
JRST .+1]
|
||
PUTSIX DEFEXT
|
||
OUTSTR[ASCIZ/ INPUT FILENAME?/]
|
||
PUSHJ P,MAKLST ;NEVER RETURNS HERE ON ERRORS
|
||
HRRZ T,DIRLST
|
||
JUMPE T,CPOPJ ;QUIT NOW IT NOTHING IN LIST
|
||
TRNN DOWIE ;DOING WIRELIST ERROR FILE?
|
||
JRST NOWIE ;NO, GO TO TTY
|
||
MOVSI T,'WIE' ;WIRELIST INPUT ERRORS
|
||
MOVEI TT,0
|
||
MOVSI TTT,'DSK' ;FILE IT!
|
||
PUSHJ P,OUTSET
|
||
CAIA
|
||
JRST GOTWIE
|
||
NOWIE: SETOM TTYFLG
|
||
GOTWIE: SKIPE TTYFLG
|
||
RELEASE LST, ;IF TTY OUTPUT, WILL USE TTYUUO'S
|
||
MOVE TT,[PUSHJ P,TTYOUT] ;START OUTPUTTING TO TTY
|
||
MOVEM TT,PUTCHR
|
||
TRNE ISBACK
|
||
JRST XNDIPS ;DON'T NEED DIPS FOR BACK PANEL
|
||
PUSHJ P,DIPCHK
|
||
OUTSTR[ASCIZ/COULDN'T GET DIPS IN, WILL GO ON ANYWAY!
|
||
/]
|
||
XNDIPS: TRNE DOBEQ ;EQUIVALENCE FILE INPUT?
|
||
JRST [ PUSHJ P,IN0
|
||
POPJ P,
|
||
JRST IN0DON]
|
||
PUSHJ P,IN10
|
||
POPJ P,
|
||
;PROCESS EACH INPUT SPEC
|
||
;FALLS THRU
|
||
IN0DON: HRRZ H,DIRLST
|
||
NXTDIR: MOVEI G,RADDR(H,CVAR,NSLC)
|
||
SETZM SLICEL
|
||
SETZM CDSKPC ;CLEAR UN-CRDLOC'D COUNT
|
||
FETCH(T,G,NSLC) ;DO NEXT SLICE CHECK NOW
|
||
JUMPE T,NOSLC ;IS THERE EVEN ONE?
|
||
MOVE G,T ;YES, USE IT
|
||
SLCNXT: FETCH(T,G,CDLC)
|
||
HRLZM T,SLICEL
|
||
FETCH(T,G,VLST)
|
||
JUMPE T,[SETZM VARLST
|
||
MOVEI T,377777
|
||
MOVEM T,UPPER
|
||
MOVEM T,WIDTH
|
||
MOVNI T,400000
|
||
MOVEM T,LOWER
|
||
JRST NOSLC]
|
||
FETCH(TTT,G,LBND)
|
||
MOVEM TTT,LOWER
|
||
FETCH(TTT,G,UBND)
|
||
MOVEM TTT,UPPER
|
||
SUB TTT,LOWER
|
||
ADDI TTT,1
|
||
MOVEM TTT,WIDTH
|
||
MOVEM T,VARLST
|
||
SETZM VARERR ;NO ERRORS ON THIS LIST YET
|
||
NOSLC: FETCH(T,H,DFIL)
|
||
MOVEM T,FILNAM
|
||
FETCH(T,H,DEXT)
|
||
HRLZM T,FILEXT
|
||
FETCH(T,H,DPPN)
|
||
MOVEM T,FILPPN
|
||
SETZM FILDAT
|
||
MOVE T,[PUSHJ P,TTYIN]
|
||
MOVEM T,GETCHR
|
||
PUSHJ P,PTERM
|
||
MOVE T,FILPPN
|
||
LOOKUP DAT,FILNAM
|
||
JRST [ OUTSTR[ASCIZ/, LOOKUP FAILED, CODE= /]
|
||
HRRZ T,FILEXT
|
||
PUSHJ P,DECOUT
|
||
OUTSTR[ASCIZ/
|
||
/]
|
||
FETCH(T,H,DIRNXT)
|
||
JUMPE T,DIRDON
|
||
PUSHJ P,IERR ;CHECK DSKIN ERROR
|
||
ASK[ASCIZ/GO ON?/]
|
||
JRST DIRDON
|
||
JRST DIRDON
|
||
JRST GOON]
|
||
MOVEM T,FILPPN
|
||
MOVE TT,[PUSHJ P,BYTIN]
|
||
MOVEM TT,GETCHR
|
||
PUSH P,H
|
||
PUSH P,G ;THIS GETS CLOBBERED
|
||
PUSHJ P,DOREAD
|
||
MOVE T,[PUSHJ P,TTYOUT] ;OUTPUT TO TTY
|
||
MOVEM T,PUTCHR
|
||
POP P,G
|
||
POP P,H
|
||
FETCH(G,G,NSLC) ;NEXT SLICE BLOCK
|
||
JUMPN G,SLCNXT
|
||
GOON: TRNE ISBACK
|
||
SKIPN T,CDSKPC
|
||
JRST NOCDPN
|
||
PUSHJ P,DECOUT
|
||
OUTSTR[ASCIZ/ CARDS SKIPPED DUE TO NO LOC.
|
||
/]
|
||
NOCDPN: FETCH(H,H,DIRNXT)
|
||
JUMPN H,NXTDIR
|
||
DIRDON: RELEASE DAT,
|
||
POPJ P,
|
||
|
||
|
||
PSLICL: PUSH P,A
|
||
PUSH P,TTT
|
||
HLRZ A,SLICEL
|
||
PUSHJ P,SLTOUT
|
||
POP P,TTT
|
||
POP P,A
|
||
POPJ P,
|
||
|
||
PTERM: PUSH P,A
|
||
MOVEI A,FILNAM
|
||
PUSHJ P,FILPNT
|
||
POP P,A
|
||
PSLVAR: SKIPN SLICEL
|
||
JRST NOLOCL
|
||
PUTBYT 11
|
||
PUSHJ P,PSLICL
|
||
NOLOCL: SKIPN VARLST
|
||
POPJ P,
|
||
SKIPN SLICEL
|
||
PUTBYT 11
|
||
PUTBYT "("
|
||
MOVE T,LOWER
|
||
CAMN T,[-400000]
|
||
JRST BTNUPR
|
||
PUSHJ P,DECOUT
|
||
PUTBYT 74
|
||
BTNUPR: MOVE T,UPPER
|
||
CAIN T,377777
|
||
JRST BTNLP1
|
||
PUSHJ P,DECOUT
|
||
PUTBYT 76
|
||
BTNLP1: SKIPN A,VARLST
|
||
JRST NOVARS
|
||
CAIA
|
||
BTNLOP: PUTBYT ","
|
||
FETCH(T,A,LET)
|
||
PUTBYT @T
|
||
PUTBYT "="
|
||
FETCH(T,A,WID)
|
||
MOVEM T,NDIG
|
||
FETCH(T,A,VAL)
|
||
PUSHJ P,NDECOUT
|
||
FETCH(A,A,NVAR)
|
||
JUMPN A,BTNLOP
|
||
NOVARS: PUTSTR[ASCIZ/)/]
|
||
POPJ P,
|
||
; MAKE LIST, READ FILE INFO
|
||
;READ ONE SLICE OF A WIRE LIST
|
||
MAKHED: PGETFS(W,WLBLOCK)
|
||
BCLEAR(T,W,WLBLOCK) ;CLEAR OUT BLOCK
|
||
MOVEI T,RADDR(W,WIRES,ALPH);INITIAL GENLAST
|
||
HRL T,T
|
||
STORE(T,W,HASHTB) ;0 WORD OF HASH TABLE IS INITED TO WIRE HEADER
|
||
POPJ P,
|
||
|
||
DOREAD: TRNE ISBACK
|
||
JRST BAKIN
|
||
MOVEI W,RADDR(L,WIRL,NXTWL)
|
||
TRNE PCNOTD
|
||
MOVEI W,RADDR(L,PCWL,NXTWL)
|
||
TRNE DOBEQ
|
||
JRST FNDSLQ ;BACKPANEL EQUIV INPUT
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
TRNN PCNOTD
|
||
JRST CKWDVR
|
||
;RIGHT PC VERSION # ?
|
||
CAIN TTT,WPCVER
|
||
JRST CKCLOC
|
||
OUTSTR[ASCIZ/
|
||
VERSION # MISMATCH, MAYBE YOU SHOULD REWRITE IT!
|
||
/]
|
||
TRNN TTT,400000
|
||
OUTSTR[ASCIZ/
|
||
THIS IS A 'WD' FILE, NOT A 'WPC' FILE!
|
||
/]
|
||
JRST ERRET
|
||
|
||
;RIGHT D VERSION # ?
|
||
CKWDVR: CAIN TTT,WDVER
|
||
JRST CKCLOC
|
||
OUTSTR[ASCIZ/
|
||
VERSION # MISMATCH, MAYBE YOU SHOULD REWRITE IT!
|
||
/]
|
||
TRNE TTT,400000
|
||
OUTSTR[ASCIZ/
|
||
THIS IS A 'WPC' FILE, NOT A 'WD' FILE!
|
||
/]
|
||
JRST ERRET
|
||
|
||
CKCLOC: XCT GETCHR
|
||
JRST ILLEND
|
||
HLLZ TTT,TTT ;SOMEHOW THIS GOT CRUFT IN IT, GET RID OF THE CRUFT
|
||
JUMPE TTT,FNDSL0
|
||
EXCH TTT,SLICEL
|
||
JUMPE TTT,FNDSLP
|
||
CAMN TTT,SLICEL
|
||
JRST FNDSL0 ;CARD LOC IN FILE = CARD LOC CALLED FOR?
|
||
OUTSTR[ASCIZ/
|
||
CARD LOC FROM FILE = /]
|
||
PUSH P,TTT
|
||
PUSHJ P,PSLICL
|
||
POP P,SLICEL ;USE WHAT HE TYPED
|
||
OUTSTR[ASCIZ/, USING WHAT YOU TYPE INSTEAD!
|
||
/]
|
||
JRST FNDSL0
|
||
|
||
FNDSLP: OUTCHR[11]
|
||
PUSHJ P,PSLICL
|
||
FNDSL0: OUTSTR[ASCIZ/
|
||
/]
|
||
JRST FNDSL1
|
||
|
||
;FNDSLQ - FIND WIRELIST THAT SLICE GOES INTO
|
||
FNDSLQ: SKIPE SLICEL ;ZERO CARD LOC?
|
||
JRST FNDSL1 ;NO
|
||
FETCH(T,W,NXTWL)
|
||
JUMPE T,FNDSL1
|
||
FETCH(T,T,NXTWL)
|
||
JUMPN T,FNDSL1 ;MORE THAN ONE?
|
||
FETCH(W,W,NXTWL) ;NO, USE SINGLE CARD
|
||
FETCH(T,W,FCRD)
|
||
HRLZM T,SLICEL
|
||
OUTCHR[11]
|
||
PUSHJ P,PSLICL
|
||
JRST BODLP0 ;MAKE OUTPUT TESTS
|
||
|
||
;find place in sorted list of WIRELISTs that this card goes
|
||
FNDSLC: FETCH(T,W,FCRD)
|
||
MOVS T,T
|
||
CAML T,SLICEL ;IS THIS WHERE WE GO?
|
||
JRST [ CAMN T,SLICEL ;YES, EXACT MATCH?
|
||
JRST BODLP0 ;YES
|
||
JRST MAKHD1]
|
||
FNDSL1: MOVE A,W
|
||
FETCH(W,W,NXTWL)
|
||
JUMPN W,FNDSLC
|
||
MAKHD1: PUSHJ P,MAKHED
|
||
FETCH(T,A,NXTWL) ;LINK IN SORTED
|
||
STORE(T,W,NXTWL)
|
||
STORE(W,A,NXTWL)
|
||
HLRZ T,SLICEL
|
||
STORE(T,W,FCRD)
|
||
;PROCESS SINGLE WIRELIST
|
||
;FALLS THRU
|
||
BODLP0: PUSHJ P,WIESTR ;SETUP INPUT ERROR LISTING
|
||
TRNE DOBEQ
|
||
JRST EQVSGW
|
||
PGETFS(B,FBLK)
|
||
BCLEAR(T,B,FBLK)
|
||
MOVEM B,THSFIL ;CURRENT FILENAME!
|
||
HLRZ T,SLICEL
|
||
MOVEM T,PINLOC
|
||
PUSHJ P,FVCOPY ;COPY CARDLOC AND VARIABLE STUFF INTO FILE BLOCK
|
||
TRNE PCNOTD
|
||
JRST [ MOVE T,FILNAM
|
||
STORE(T,B,FILN)
|
||
HLRZ T,FILEXT
|
||
STORE(T,B,FEXT)
|
||
MOVE T,FILPPN
|
||
STORE(T,B,FPPN)
|
||
JRST PCONLY]
|
||
FOR I IN(FPOL,FDAT,FILN)
|
||
< XCT GETCHR
|
||
JRST ILLEND
|
||
STORE(TTT,B,I)
|
||
>
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
HLRZ T,TTT ;EXT ONLY FOR NOW
|
||
STORE(T,B,FEXT)
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
STORE(TTT,B,FPPN)
|
||
PCONLY: MOVEI A,RADDR(W,FILS,FNXT)
|
||
PUSHJ P,FILMER ;CHECK FOR DUPLICATE FILES
|
||
FETCH(TTT,B,FPRF)
|
||
JUMPE TTT,MORE5A ;PREFIX ?
|
||
HRRZ T,(TTT)
|
||
JUMPE T,MORE5A
|
||
MOVE T,1(T)
|
||
TRNE T,376
|
||
JRST MORE5B ;PREFIX TOO LONG
|
||
MORE5A: FETCH(TTT,B,FMOD)
|
||
JUMPE TTT,BODLOP
|
||
HRRZ T,(TTT)
|
||
JUMPE T,NOMDTL
|
||
MORE5B: PUTSTR[ASCIZ\MODULE NAME AND/OR DRAWING PREFIX
|
||
WITH TOO MANY CHARS FROM FILE:
|
||
\]
|
||
PUSHJ P,FBLKPN
|
||
FETCH(TTT,B,FMOD)
|
||
NOMDTL: TRZ FLAG ;NO OTHER STRINGS SEEN YET
|
||
FETCH(A,W,FILS)
|
||
MODCK1: CAIN A,(B)
|
||
JRST MODCK2 ;DON'T CHECK US
|
||
FETCH(T,A,FMOD)
|
||
JUMPE T,MODCK2
|
||
TRO FLAG ;SEEN ONE
|
||
FETCH(TT,B,FMOD)
|
||
PUSHJ P,TXTMAT
|
||
JFCL
|
||
SKIPA C,A
|
||
JRST BODLOP
|
||
MODCK2: FETCH(A,A,FNXT)
|
||
JUMPN A,MODCK1
|
||
TRNN FLAG
|
||
JRST BODLOP
|
||
PUTSTR[ASCIZ/MULTIPLE MODULE NAMES ON THIS CARD FROM FILES:
|
||
/]
|
||
PUSHJ P,FBLKPN
|
||
MOVE B,C
|
||
PUSHJ P,FBLKPN
|
||
;FALL INTO BODLOP
|
||
; READ BODIES
|
||
BODLOP: XCT GETCHR ;READ A WORD
|
||
JRST ILLEND
|
||
JUMPE TTT,DOWIRES ;YES, GO DO WIRES
|
||
PUSH P,TTT ;SAVE LH (LOC ON DRWING) FOR LATER
|
||
HRRZM TTT,BID
|
||
XCT GETCHR ;READ LOC (AND BODY BITS (PC))
|
||
JRST ILLEND
|
||
HRRZM TTT,PINLOC
|
||
TRNE PCNOTD
|
||
JRST [ HLRZM TTT,FACTR1 ;STORE BODY BITS HERE
|
||
SETZM STRTAB ;CLEAR BODY NAME
|
||
POP P,TTT
|
||
HLLM TTT,FACTR1 ;STORE # OF PINS HERE
|
||
JRST RDDIP] ;MAKE BODY AND READ DIP TYPE
|
||
HRRI TTT, ;GET JUST BAY-RACK-SLOT
|
||
JUMPE TTT,LOOKT1 ;BLANK OR
|
||
CAME TTT,SLICEL ;SAME CARD
|
||
JRST [ POP P,(P) ;NO, IGNORE THIS BODY
|
||
XCT GETCHR ;SKIP BITS,,0
|
||
JRST ILLEND
|
||
PUSHJ P,SKPSTR ;SKIP BODY NAME
|
||
JFCL
|
||
BDSKP1: PUSHJ P,SKPSTR ;SKIP PACKAGE NAME, OR VALUE PART OF PROPERTY
|
||
JFCL
|
||
PUSHJ P,SKPSTR ;SKIP PROPERTY NAME
|
||
JRST BDSKP1 ;NOT NULL, SKIP VALUE ALSO
|
||
JRST BODLOP]
|
||
LOOKT1: POP P,T ;APPROX X,Y OF BODY ON DRWING
|
||
XCT GETCHR ;GET BODY BITS
|
||
JRST ILLEND
|
||
TRZ TTT,-1 ;NOTHING IN RH
|
||
HLRZ TT,T ;NOW STUFF X,Y POS INTO BITS
|
||
JUMPE TT,XANYPS ;SKIP IF NONE
|
||
SUBI TT,1001
|
||
DPB TT,[POINT BXPOSL,TTT,35-BXPOSB];STO X POS
|
||
LSH TT,-9
|
||
DPB TT,[POINT BYPOSL,TTT,35-BYPOSB];STO Y POS
|
||
TRO TTT,BANYPOS ;MARK AS HAVING POS BITS
|
||
XANYPS: HRRZM TTT,FACTR1 ;STORE BODY BITS AND POS HERE
|
||
PUSHJ P,TRSTR ;READ BODY NAME INTO STRTAB
|
||
JRST ILLEND
|
||
JRST ILLEND ;SHOULDN'T HAPPEN
|
||
RDDIP: PUSHJ P,BODFND
|
||
JRST RDDIP1 ;NOT FOUND, AS IT SHOULD BE
|
||
TRNE PCNOTD ;OK IF PC CARD
|
||
JRST RDDIP1
|
||
PUTSTR[ASCIZ/LOSE BIG, BODY "/]
|
||
PUTSTR STRTAB ;PRINT BODY NAME
|
||
PUTSTR[ASCIZ/" ALREADY EXISTS AT BODY INPUT TIME!
|
||
/]
|
||
RDDIP1: PUSHJ P,BODMK2 ;MAKE AND LINK BODY, NAME WILL BE COPIED FROM STRTAB
|
||
TRNE PCNOTD ;ONLY FOR D
|
||
JRST [ PUSHJ P,RSTR ;READ DIP NAME
|
||
JRST BODLOP ;NONE
|
||
MOVEM T,STRING
|
||
PUSHJ P,BODDIP ;GET DIP TYPE SETUP
|
||
JRST [ PUSHJ P,DPLOST
|
||
JRST BODLOP]
|
||
JRST RPRPDN]
|
||
MOVE TTT,FACTR1
|
||
STORE(TTT,A,BBIT) ;STORE BODY BITS (SHOULDN'T BE ANY OTHERS ON YET)
|
||
|
||
; Read D's idea of Package Name and compile into Package code
|
||
PUSHJ P,RSTR ;GET PACKAGE NAME
|
||
JRST RDDIP8
|
||
MOVE B,T ;SAVE STRING
|
||
PUSH P,A ;SAVE BODY
|
||
PUSHJ P,MATPAK
|
||
JRST [ PUTSTR [ASCIZ /UNKNOWN PACKAGE TYPE "/]
|
||
MOVE T,B
|
||
PUSHJ P,STROUT
|
||
PUTSTR [ASCIZ /" ON /]
|
||
MOVE A,(P)
|
||
PUSHJ P,PBODY
|
||
CRLF
|
||
SETZ A,
|
||
JRST .+1]
|
||
PUSHJ P,PUTFS
|
||
MOVE T,A ;PACKAGE CODE
|
||
POP P,A
|
||
STORE(T,A,BPAK)
|
||
; Read the bodies properties (including DIPTYPE)
|
||
RDDIP8: PUSHJ P,GETPRP
|
||
MOVE B,PRPLST
|
||
STORE(B,A,PRPX)
|
||
MOVE B,LSTPART
|
||
STORE(B,A,PRTN)
|
||
JUMPE B,RPRP12
|
||
FETCH(T,B,PRBT)
|
||
TRO T,PNUSED
|
||
STORE(T,B,PRBT)
|
||
RPRP12: MOVE B,LSTDIP
|
||
STORE(B,A,DIPT)
|
||
FETCH(T,A,PRPX)
|
||
SKIPN T,PRPLST
|
||
JRST RPRPDN
|
||
JUMPE T,RPRPDN ;JUMP IF NO EXTRA PROPERTIES
|
||
; See if this PROP list is already on this DIP
|
||
SETZM TMPCN1
|
||
RPRPX0: AOS TMPCN1
|
||
FETCH(T,T,NXTT)
|
||
JUMPN T,RPRPX0
|
||
;TRY TO INTERN THIS PRPLST, TO SAVE SPACE I SUPPOSE
|
||
MOVEI G,RADDR(W,WBDY,NXTB)
|
||
RPRPX1: FETCH(G,G,NXTB)
|
||
JUMPE G,RPRPDN
|
||
RPRPX2: CAIN G,(A)
|
||
JRST RPRPX1 ;DON'T LOOK AT OURSELVES
|
||
FETCH(T,G,BBIT)
|
||
TRNE T,PRX2ND ;THE PRIME COPY ?
|
||
JRST RPRPX1 ; PROBABLY WON'T BE NEW POSSIBILITY OTHERWISE
|
||
FETCH(E,G,PRPX)
|
||
JUMPE E,RPRPX1
|
||
PUSHJ P,PRXMAT
|
||
JRST RPRPX1
|
||
FETCH(F,G,PRPX) ;FOUND ALREADY THERE, COPY IT
|
||
STORE(F,A,PRPX)
|
||
FETCH(T,A,BBIT) ;MARK AS 2ND COPY
|
||
TRO T,PRX2ND
|
||
STORE(T,A,BBIT)
|
||
;READ BODIES - CHECK DIP TYPE
|
||
RPRPDN: FETCH(B,A,DIPT) ;GET DIP TYPE POINTER BACK
|
||
JUMPE B,BODLOP
|
||
TRNN PCNOTD
|
||
JRST DOINVT ;GO INVENT POWER/GROUND
|
||
FETCH(T,B,DPNN)
|
||
HLRZ TT,FACTR1 ;# OF PINS FROM PC
|
||
CAMN TT,T ;PC AND WL AGREE ABOUT SIZE OF DIP ?
|
||
JRST BODLOP
|
||
FETCH(A,B,DNAM) ;DIPNAME POINTER
|
||
PUSHJ P,STROUT ;DIPNAME
|
||
PUTSTR[ASCIZ/ (/]
|
||
FETCH(T,B,DPNN)
|
||
PUSHJ P,DECOUT ;# OF PINS ON DIP
|
||
PUTSTR[ASCIZ/ PINS) IN /]
|
||
HLRZ T,FACTR1
|
||
PUSHJ P,DECOUT ;# OF PINS ON SOCKET
|
||
PUTSTR[ASCIZ/ PIN SOCKET/]
|
||
SKIPN PINLOC
|
||
JRST NCLOC
|
||
PUTSTR[ASCIZ/ AT /]
|
||
MOVE A,PINLOC
|
||
PUSHJ P,LOCOUT ;LOC
|
||
NCLOC: PUTSTR[ASCIZ/!
|
||
/]
|
||
JRST BODLOP
|
||
|
||
DIPCHECK
|
||
DIPFND: HLRZ T,(B)
|
||
MOVE TT,STRING
|
||
PUSHJ P,DSORT
|
||
JFCL
|
||
CAIA
|
||
JRST CPOPJ1
|
||
HRRZ B,(B)
|
||
JUMPN B,DIPFND
|
||
POPJ P,
|
||
|
||
BODDIP: SKIPN B,DIPLST
|
||
POPJ P,
|
||
DIPCHECK
|
||
PUSHJ P,DIPFND
|
||
POPJ P,
|
||
STORE(B,A,DIPT) ;STORE DIP TYPE POINTER
|
||
JRST CPOPJ1 ;SUCCESS
|
||
|
||
DPLOST: FETCH(A,A,BLOC)
|
||
JUMPE A,[PUTSTR[ASCIZ/BODY WITH NO LOCATION/]
|
||
JRST DPLST1]
|
||
PUTSTR[ASCIZ/BODY AT LOCATION /]
|
||
PUSHJ P,LOCOUT
|
||
DPLST1: PUTSTR[ASCIZ/, DIPTYPE "/]
|
||
MOVE A,STRING
|
||
PUSHJ P,STROUT ;DIPNAME
|
||
PUTSTR[ASCIZ/", NOT FOUND!
|
||
/]
|
||
MOVE B,STRING
|
||
JRST PUTFS
|
||
;CREATE INVENTED SIGNAL NAMES FOR GND, AND ALL FLAVORS OF PWR ON DIP
|
||
; The invented pins may be removed later if explicit drawing
|
||
|
||
DOINVT: TRNE FLAG ;FIRST BODY IN THIS LOC?
|
||
JRST BODLOP ;NO, SKIP IT
|
||
MOVEM A,BSLOT ;SAVE BODY POINTER HERE
|
||
FETCH(A,B,DPIN) ;GET DIP PIN LIST
|
||
JUMPE A,BODLOP ;QUIT IF NONE
|
||
DOINV1: FETCH(T,A,DPBIT) ;GET PIN BITS
|
||
TRNN T,PWR!GND ;POWER OR GROUND PIN?
|
||
JRST DOINV2 ;NO, SKIP IT
|
||
HRLM A,BSLOT ;SAVE PIN POINTER HERE
|
||
SETZM PID
|
||
SETZM PINTMP
|
||
FETCH(TT,A,DPNM)
|
||
MOVEM TT,PINNUM
|
||
SETZB G,WQNWRD ;NO WIRE YET
|
||
TRNE T,GND
|
||
JRST [ PUSHJ P,MAKGND
|
||
JRST DOINV5]
|
||
FETCH(T,A,LLOW) ;THE VOLTAGE
|
||
PUSHJ P,MAKPWR
|
||
DOINV5: HRRZ F,BSLOT ;GET BODY POINTER
|
||
PUSHJ P,PMAKE
|
||
PUSHJ P,PMERGE
|
||
FETCH(T,E,PBIT)
|
||
TRO T,INVENT
|
||
STORE(T,E,PBIT)
|
||
HLRZ A,BSLOT
|
||
DOINV2: FETCH(A,A,DPNX)
|
||
JUMPN A,DOINV1
|
||
JRST BODLOP
|
||
|
||
;MAKPWR - GENERATE NEW SIGNAL FOR GND OR PWR RUN AND ADD TO CURRENT WIRE
|
||
;T = VOLTAGE
|
||
MAKGND: MOVE T,[ASCII /GND/]
|
||
MOVEM T,STRTAB ;THIS IS SIGNAL NAME "GND"
|
||
JRST DOINV3
|
||
|
||
MAKPWR: MOVE B,[POINT 7,STRTAB] ;CREATE SIGNAL NAME FOR PWR
|
||
MOVEM B,TMPCN1
|
||
MOVE B,[IDPB TTT,TMPCN1]
|
||
EXCH B,PUTCHR
|
||
SKIPL T
|
||
PUTBYT "+"
|
||
SKIPGE T
|
||
PUTBYT "-"
|
||
MOVM T,T
|
||
IDIVI T,=100
|
||
PUSH P,TT
|
||
PUSHJ P,DECOUT
|
||
PUTBYT "."
|
||
POP P,T
|
||
IDIVI T,=10
|
||
PUTBYT "0"(T)
|
||
SKIPE TT
|
||
PUTBYT "0"(TT)
|
||
PUTBYT "V"
|
||
MOVEM B,PUTCHR ;RESTORE OLD PUTCHR
|
||
MOVE T,TMPCN1
|
||
SETZ TT,
|
||
DOINV4: IDPB TT,T ;FILL OUT SIGNAL NAME WITH 0'S
|
||
TLNE T,760000
|
||
JRST DOINV4
|
||
DOINV3: PUSHJ P,TGRONK ;ADD NAME TO CURRENT WIRE
|
||
POPJ P,
|
||
; PROPERTY READING SUBRS
|
||
GETPRP: SETZM LSTDIP
|
||
BAKPRP: SETZM LSTPART
|
||
SETZM PRPLST ;SAVE OTHER PROPERTIES HERE
|
||
; Read PROP-VALUE pairs into PRPLST (making values canonical)
|
||
RDDIP5: PUSHJ P,RSTR
|
||
JRST RDDIP4 ;ALL DONE
|
||
MOVE B,T ;SAVE COPY OF STRING
|
||
PUSHJ P,RSTR
|
||
JRST [ PUSHJ P,PUTFS ;RETURN PROPERTY NAME IF NO VALUE
|
||
JRST RDDIP5]
|
||
PUSHJ P,VALFIX ;FIX VALUE STRING (RETURNS STRING IN T)
|
||
GETFS(TT,TBLK) ;GET TEMP BLOCK
|
||
BCLEAR(TTT,TT,TBLK) ;CLEAR BLOCK
|
||
STORE(B,TT,TLFT) ;STORE PROPERTY NAME HERE
|
||
STORE(T,TT,TRHT) ;STORE PROPERTY VALUE HERE
|
||
MOVE T,PRPLST
|
||
STORE(T,TT,NXTT) ;LINK INTO LIST OF PROPERTIES
|
||
MOVEM TT,PRPLST
|
||
JRST RDDIP5
|
||
|
||
RDDIP4: SKIPE DIPLST ;ANY DIPS IN?
|
||
TRNE ISBACK
|
||
JRST BRPRP1
|
||
; Look for DIPTYPE property
|
||
MOVEI F,PRPLST-ADDR(0,NXTT)
|
||
RDDIP7: MOVE E,F
|
||
FETCH(F,F,NXTT)
|
||
JUMPE F,BRPRP1
|
||
RDDIP6: FETCH(T,F,TLFT)
|
||
MOVEI TT,[ASCIZ/DIPTYPE/]
|
||
PUSHJ P,ASCMAT ;IS THIS DIPTYPE ?
|
||
JRST GETPR1
|
||
FETCH(T,F,TRHT)
|
||
MOVEM T,STRING
|
||
MOVE B,DIPLST
|
||
PUSHJ P,DIPFND
|
||
JRST GETPR1
|
||
MOVEM B,LSTDIP
|
||
FETCH(B,F,TLFT) ;FOUND DIPTYPE,
|
||
PUSHJ P,PUTFS ; REMOVE "DIPTYPE" FROM PRPLST
|
||
FETCH(B,F,TRHT)
|
||
PUSHJ P,PUTFS
|
||
FETCH(B,F,NXTT)
|
||
STORE(B,E,NXTT)
|
||
FSTRET(F,TBLK)
|
||
MOVE F,E
|
||
JRST RDDIP7
|
||
|
||
GETPR1: FETCH(T,F,TLFT)
|
||
MOVEI TT,[ASCIZ/PACKAGE/]
|
||
PUSHJ P,ASCMAT ;IS THIS "PACKAGE" ?
|
||
JRST RDDIP7
|
||
FETCH(T,A,BBIT) ;MARK BODY HAS PACKAGE PROPERTY
|
||
TRO T,BPACKP
|
||
STORE(T,A,BBIT)
|
||
JRST RDDIP7
|
||
|
||
;MATCH BODIES PROP LIST AGAINST DIP'S PROP/PART# DECISION TREE
|
||
; Allow bodies properties to specify down tree, until
|
||
; 1) next prop in tree not mentioned in PRPLST, and no default value
|
||
; 2) next prop in tree mentioned, but value not equal to any of choices
|
||
;FALLS THRU
|
||
BRPRP1: SKIPN B,LSTDIP
|
||
POPJ P,
|
||
FETCH(H,B,PRPV) ;GET POINTER TO PROPERTY VALUES
|
||
SETZ G, ;CLEAR PREVIOUS LEVEL
|
||
RPRP1: JUMPE H,RPRP4
|
||
MOVEI F,PRPLST-ADDR(0,NXTT)
|
||
JRST RPRP2
|
||
|
||
; ASSQ down PRPLST, looking for next prop in tree
|
||
RPRP3: FETCH(T,F,TVAL) ;GET FLAG
|
||
JUMPN T,RPRP2 ;SKIP IF ALREADY MATCHED
|
||
FETCH(T,F,TLFT) ;GET PROPERTY NAME
|
||
JUMPE T,RPRP2 ;SKIP IF WAS DIPTYPE
|
||
FETCH(TT,H,PRNB)
|
||
FETCH(TT,TT,PRNS)
|
||
PUSHJ P,TXTMAT
|
||
JRST RPRP2
|
||
JRST RPRP2
|
||
SETO T, ;PROP WAS FOUND
|
||
STORE(T,F,TVAL) ;FLAG THIS PROPERTY MATCHED
|
||
; Got a match on next decision, look for value match
|
||
RPRP7:
|
||
; FETCH(T,H,PRBT)
|
||
; TRNE T,NULVAL
|
||
; JRST RPRP8
|
||
FETCH(T,F,TRHT) ;NOW GET VALUE STRING
|
||
FETCH(TT,H,PRVS)
|
||
PUSHJ P,VALMAT
|
||
JRST [RPRP8: FETCH(H,H,PRNV)
|
||
JUMPN H,RPRP7
|
||
JRST RPRP4]
|
||
RPRP6: MOVE G,H ;VALUE MATCHED TOO, STEP DOWN IN TREE
|
||
FETCH(H,G,PRNP)
|
||
JRST RPRP1
|
||
|
||
|
||
RPRP2: FETCH(F,F,NXTT) ;NEXT TEMP BLOCK
|
||
JUMPN F,RPRP3 ;AND LOOP
|
||
; No item on PRPLST matches next node of tree, look for default value
|
||
RPRP5: FETCH(T,H,PRBT) ;GET PROPERTY VALUE BITS
|
||
TRNE T,DEFPRP ;IS IT THE DEFAULT?
|
||
JRST RPRP6 ;YES, STEP DOWN TREE TO NEXT NODE
|
||
FETCH(H,H,PRNV)
|
||
JUMPN H,RPRP5
|
||
; Matched as far as we can
|
||
RPRP4: JUMPE G,CPOPJ ;IF NOTHING FOUND,
|
||
FETCH(T,G,PRBT)
|
||
TRNN T,PARTNM ;DID WE GET ALL THE WAY TO THE PART NUMBER ?
|
||
POPJ P,
|
||
MOVEM G,LSTPART ;YES, SOME MEASURE OF SUCCESS
|
||
MOVEI F,PRPLST-ADDR(0,NXTT)
|
||
JRST RPRP9 ;DELETE ALL PRPLST ENTRIES THAT WERE USED TO MATCH
|
||
|
||
RPRP14: FETCH(T,F,TVAL) ;USED TO MATCH PROP TREE ?
|
||
JUMPE T,RPRP9
|
||
FETCH(B,F,TLFT) ;YES, DELETE FROM PRPLST
|
||
PUSHJ P,PUTFS
|
||
FETCH(B,F,TRHT)
|
||
PUSHJ P,PUTFS
|
||
FETCH(B,F,NXTT)
|
||
STORE(B,E,NXTT)
|
||
FSTRET(F,TBLK)
|
||
MOVE F,E
|
||
RPRP9: MOVE E,F
|
||
FETCH(F,F,NXTT)
|
||
JUMPN F,RPRP14
|
||
POPJ P,
|
||
|
||
;PRXMAT - MATCH TWO EXTRA-PROP LISTS
|
||
;F = TEST LIST
|
||
;E = LIST TO MATCH
|
||
;SKIPS, RECLAIMS TEST LIST IF MATCH FOUND
|
||
|
||
PRXMAT: MOVE T,E
|
||
SETZ TT, ;COUNT NUMBER OF EXTRA PROPS
|
||
RPRPX3: ADDI TT,1
|
||
FETCH(T,T,NXTT)
|
||
JUMPN T,RPRPX3
|
||
CAME TT,TMPCN1 ;SAME NUMBER OF PROPERTIES?
|
||
POPJ P,
|
||
MOVE F,PRPLST
|
||
RPRPX4: MOVE D,E
|
||
RPRPX5: FETCH(T,D,TLFT) ;PROPERTY NAME
|
||
FETCH(TT,F,TLFT)
|
||
PUSHJ P,TXTMAT ;SAME PROP NAME ?
|
||
JRST RPRPX6
|
||
JRST RPRPX6
|
||
FETCH(T,D,TRHT)
|
||
FETCH(TT,F,TRHT)
|
||
PUSHJ P,VALMAT ;SAME PROP VALUE ?
|
||
POPJ P, ;LOSE ON THIS BODY
|
||
JRST RPRPX7
|
||
|
||
RPRPX6: FETCH(D,D,NXTT)
|
||
JUMPN D,RPRPX5
|
||
POPJ P, ;LOSE, PROPERTY NOT FOUND
|
||
|
||
RPRPX7: FETCH(F,F,NXTT)
|
||
JUMPN F,RPRPX4
|
||
MOVE F,PRPLST ;FOUND SAME LIST, RETURN OTHER ONE
|
||
RPRPX8: FETCH(B,F,TLFT)
|
||
PUSHJ P,PUTFS
|
||
FETCH(B,F,TRHT)
|
||
PUSHJ P,PUTFS
|
||
MOVE D,F
|
||
FETCH(F,F,NXTT)
|
||
FSTRET(D,TBLK)
|
||
JUMPN F,RPRPX8
|
||
JRST CPOPJ1
|
||
; BACKPANEL FILE INFO INPUT
|
||
BAKIN: TRNE DOBEQ
|
||
JRST EQVSIG
|
||
OUTSTR[ASCIZ/
|
||
/]
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
CAIE TTT,BACVER ;CURRENT VERSION?
|
||
JRST [ OUTSTR[ASCIZ/
|
||
VERSION # MISMATCH, MAYBE YOU SHOULD REWRITE THIS FILE!
|
||
/]
|
||
JRST ERRET]
|
||
PUSHJ P,WIESTR ;SETUP INPUT ERROR LISTING
|
||
FETCH(W,L,BLST) ;GET BACK PANEL LIST POINTER
|
||
JUMPN W,DOFILS ;IF ALREADY GOT HEADER, GO READ FILE BLOCKS
|
||
PUSHJ P,MAKHED ;MAKE A HEADER BLOCK
|
||
STORE(W,L,BLST)
|
||
DOFILS: XCT GETCHR ;READ CARD LOC
|
||
JRST ILLEND
|
||
JUMPL TTT,CPOPJ ;NEG IS END
|
||
TRNE DOPRTL ;PARTS ONLY?
|
||
JRST [ SETZM BSLOT ;YES, DON'T CARE ABOUT LOC
|
||
JRST DOFIL1]
|
||
SKIPN T,TTT ;ANY CARD LOC?
|
||
HLRZ T,SLICEL ;NO, USE WHAT HE TYPED
|
||
JUMPE T,SKPFIL
|
||
MOVEM T,PINLOC ;THIS IS WHERE SLOTFN LOOKS
|
||
TRNE DOPRTL ;READING PARTS ONLY?
|
||
TDZA A,A ;YES, DON'T FIND SLOT
|
||
PUSHJ P,SLOTFN ;FIND OR MAKE SLOT BODY
|
||
MOVEM A,BSLOT ;AND SAVE IT
|
||
DOFIL1: XCT GETCHR
|
||
JRST ILLEND
|
||
JUMPE TTT,FILDON ;DONE WITH FILES?, DO WIRES
|
||
PGETFS(B,FBLK) ;MAKE A FILE BLOCK
|
||
BCLEAR(T,B,FBLK)
|
||
STORE(TTT,B,FILN)
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
HLRZ T,TTT ;EXT ONLY FOR NOW
|
||
STORE(T,B,FEXT)
|
||
FOR I IN(FPPN,FDAT)
|
||
< XCT GETCHR
|
||
JRST ILLEND
|
||
STORE(TTT,B,I)
|
||
>
|
||
PUSHJ P,FVCOPY ;COPY CARD LOC AND VARIABLE STUFF
|
||
MOVEI A,RADDR(L,BKNM,FNXT)
|
||
PUSHJ P,FILMER
|
||
FETCH(T,B,FMOD) ;TAKE LAST MODULE NAME
|
||
MOVEM T,MODULE ;AND SAVE FOR DIP COUNTS STUFF LATER
|
||
JRST DOFIL1
|
||
|
||
FILDON: TRNN DOPRTL ;PARTS ONLY?
|
||
JRST DOWIRES ;NO
|
||
PUSHJ P,SKP2CNT ;SKIP TO DIP COUNTS
|
||
JRST ENDIN ;AND READ THEM
|
||
;READ SIGNAL EQUIVALENTS, ALL SIGNALS ON LINE ARE EQUIV
|
||
EQVSIG: SETZM BAKOLD
|
||
SETZM BAKILD
|
||
SETZM BAKSFL
|
||
SETZM BAKBIT ;MAKE SURE NO BITS GET INTO WIRE HEADERS
|
||
FETCH(W,L,BLST) ;GET BACK PANEL LIST POINTER
|
||
JUMPN W,EQVSGB ;IF ALREADY GOT HEADER, GO READ WIRES
|
||
PUSHJ P,MAKHED ;MAKE A HEADER BLOCK
|
||
STORE(W,L,BLST)
|
||
EQVSGB: SKIPE SLICEL ;DID HE GIVE A CARD SLOT?
|
||
OUTSTR[ASCIZ/ IGNORING CARD SLOT!/]
|
||
EQVSGW: OUTSTR[ASCIZ/
|
||
/]
|
||
EQVSG0: SETZB G,WQNWRD
|
||
EQVSG1: PUSHJ P,SIGIN ;READ A SIGNAL
|
||
POPJ P, ;EOF
|
||
PUSH P,TTT ;SAVE TERMINATOR
|
||
PUSHJ P,TGRONK ;ADD NEW SIGNAL TO WIRE
|
||
POP P,TTT
|
||
CAIE TTT,12
|
||
JRST EQVSG1 ;GET NEXT EQUIVALENT
|
||
JRST EQVSG0 ;EOL, GET NEXT SET OF EQUIVS
|
||
;SKIP OVER PORTIONS OF 'BAC' FILE
|
||
|
||
;SKPFIL - SKIP ALL AFTER WORD WITH CARD LOCN
|
||
|
||
SKPFIL: AOS CDSKPC
|
||
SKPFL1: XCT GETCHR ;DRWNAM ?
|
||
JRST ILLEND
|
||
JUMPE TTT,SKPRUN
|
||
FOR I IN(FEXT,FPPN,FDAT)
|
||
< XCT GETCHR
|
||
JRST ILLEND
|
||
>
|
||
FOR I IN(FREV,FMOD,FVAR,FPRF,AUTHOR,TIT1,TIT2,FPROJ,FPAGE,FOF,FNXH)
|
||
< PUSHJ P,SKPSTR
|
||
JFCL
|
||
>
|
||
PUSHJ P,SKPSTR ;SKIP NOMENCLATURE TYPE
|
||
JFCL
|
||
PUSHJ P,SKPSTR ;SKIP BOARD TYPE
|
||
JFCL
|
||
JRST SKPFL1
|
||
|
||
SKPRUN: PUSHJ P,SKP2CNT
|
||
SKPCNT: PUSHJ P,SKPSTR ;DIPTYPE STRING?
|
||
JRST SKPCN1
|
||
JRST DOFILS
|
||
|
||
SKPCN1: XCT GETCHR ;APPROX COUNT
|
||
JRST ILLEND
|
||
AOJE TTT,SKPCNT ;ENDS ON -1
|
||
XCT GETCHR ;REAL COUNT
|
||
JRST ILLEND
|
||
SKPCN2: PUSHJ P,SKPSTR ;PROP NAME, VALUE
|
||
CAIA
|
||
JRST SKPCN1
|
||
PUSHJ P,SKPSTR
|
||
JFCL
|
||
JRST SKPCN2
|
||
|
||
; Skip to parts counts in BAC file
|
||
SKP2CNT:
|
||
XCT GETCHR ;WBITS,,TBITS
|
||
JRST ILLEND
|
||
JUMPE TTT,CPOPJ
|
||
MOVEI T,2
|
||
SKPRN1: XCT GETCHR ;IN, OUT LOADING
|
||
JRST ILLEND
|
||
SOJG T,SKPRN1
|
||
XCT GETCHR ;SOURCE PIN DRWING NAME,EXT,PPN ?
|
||
JRST ILLEND
|
||
JUMPE TTT,SKPRN9 ;NO
|
||
XCT GETCHR ;EXT
|
||
JRST ILLEND
|
||
XCT GETCHR ;PPN
|
||
JRST ILLEND
|
||
SKPRN9: PUSHJ P,SKPSTR ;SIGNAL NAME(S)
|
||
JRST .-1
|
||
SKPRN2: XCT GETCHR ;PPS,,CPIN ?
|
||
JRST ILLEND
|
||
JUMPE TTT,SKP2CNT
|
||
MOVEI T,4 ;X,Y NAME,EXT,PPN
|
||
SKPRN3: XCT GETCHR
|
||
JRST ILLEND
|
||
SOJG T,SKPRN3
|
||
JRST SKPRN2
|
||
|
||
SKPSTR: XCT GETCHR
|
||
JRST ILLEND
|
||
JUMPE TTT,CPOPJ1
|
||
SKPST1: TRNN TTT,376
|
||
POPJ P,
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
JRST SKPST1
|
||
|
||
; SETUP INPUT ERROR FILE, FILE BLOCK SORT ROUTINE, READ BOARD TYPE
|
||
WIESTR: SKIPN TTYFLG
|
||
SKIPA T,[PUSHJ P,BYTOUT]
|
||
MOVE T,[PUSHJ P,TTYOUT]
|
||
MOVEM T,PUTCHR
|
||
SKIPE TTYFLG ;IF TTY
|
||
POPJ P, ;TERM ALREADY PRINTED
|
||
PUSHJ P,PTERM
|
||
PUTSTR[ASCIZ/
|
||
/]
|
||
POPJ P,
|
||
|
||
;FILMER - MERGE NEW FILE BLOCK, CHECK FOR DUPLICATE FILE NAMES
|
||
FILMER: TRNE PCNOTD
|
||
JRST FILMR1
|
||
FOR I IN(FREV,FMOD,FVAR,FPRF,AUTHOR,TIT1,TIT2,FPROJ,FPAGE,FOF,FNXH)
|
||
< PUSHJ P,RSTR ;READ STRING
|
||
SETZ T,
|
||
STORE(T,B,I)
|
||
>
|
||
PUSHJ P,RDNOM
|
||
PUSHJ P,RDWW
|
||
JRST FILMR1
|
||
|
||
FILMR2: FETCH(T,A,FILN)
|
||
CAMGE T,ADDR(B,FILN)
|
||
JRST FILMR1
|
||
CAME T,ADDR(B,FILN)
|
||
JRST FILMR3
|
||
TRNN ISBACK
|
||
JRST [ PUTSTR[ASCIZ/DRW FILES WITH SAME NAME:
|
||
/]
|
||
JRST FILMR4]
|
||
FETCH(T,A,FPPN)
|
||
CAMN T,ADDR(B,FPPN)
|
||
JRST [ FETCH(T,A,FEXT)
|
||
FETCH(TTT,B,FEXT)
|
||
CAMN T,TTT
|
||
JRST FILMR3
|
||
JRST .+1]
|
||
PUTSTR[ASCIZ\DRW FILES WITH SAME NAME, BUT DIFFERENT EXTENSION AND/OR PPN:
|
||
\]
|
||
FILMR4: PUSH P,TT
|
||
PUSHJ P,FBLKPN
|
||
EXCH A,B
|
||
PUSHJ P,FBLKPN
|
||
EXCH A,B
|
||
POP P,TT
|
||
FETCH(T,A,FEXT)
|
||
FETCH(TTT,B,FEXT)
|
||
CAMGE T,TTT
|
||
JRST FILMR1
|
||
FETCH(T,A,FPPN)
|
||
CAML T,ADDR(B,FPPN)
|
||
JRST FILMR3
|
||
FILMR1: MOVE TT,A
|
||
FETCH(A,A,FNXT)
|
||
JUMPN A,FILMR2
|
||
FILMR3: STORE(B,TT,FNXT)
|
||
STORE(A,B,FNXT)
|
||
POPJ P,
|
||
|
||
;HERE TO READ AND DECODE BOARD TYPE
|
||
|
||
RDNOM: PUSH P,B ;SAVE POINTER TO THIS BLOCK
|
||
PUSHJ P,RSTR
|
||
JRST [ PUTSTR[ASCIZ/NO NOMENCLATURE TYPE FROM FILE:
|
||
/]
|
||
JRST RDWNX1]
|
||
STORE(T,B,FNOM)
|
||
MOVE B,T
|
||
PUSHJ P,FNDNOM
|
||
JRST [ PUTSTR [ASCIZ /UNKNOWN NOMENCLATURE TYPE FROM FILE:
|
||
/]
|
||
JRST RDWNX1]
|
||
MOVEI C,-LNAMES(C)
|
||
CAMN C,NOMTYP ;DO BOARD TYPES AGREE?
|
||
JRST RDWNX2
|
||
MOVE T,NOMTYP
|
||
MOVE T,LOCTVV(T) ;GET NOMENCLATURE TABLE POINTER
|
||
CAMN T,LOCTVV(C) ;SAME NOMENCLATURE?
|
||
JRST RDWNX2 ;YES
|
||
PUTSTR [ASCIZ /NOMENCLATURE TYPE FROM FILE IS DIFFERENT FROM CURRENT ONE:
|
||
/]
|
||
JRST RDWNX1
|
||
|
||
RDWW: TRNE PCNOTD
|
||
POPJ P, ;NO BOARD TYPE FOR PC
|
||
PUSH P,B ;SAVE POINTER TO THIS BLOCK
|
||
PUSHJ P,RSTR
|
||
JRST [ SETO C,
|
||
JRST RDWW1]
|
||
STORE(T,B,FWWT) ;STORE STRING BOARD TYPE
|
||
MOVE B,T
|
||
PUSHJ P,FNDWW
|
||
JRST [ PUTSTR [ASCIZ /UNKNOWN BOARD TYPE FROM FILE:
|
||
/]
|
||
JRST RDWNX1]
|
||
MOVEI C,-WNAMES(C)
|
||
RDWW1: CAMN C,WWTYP ;DO BOARD TYPES AGREE?
|
||
JRST RDWNX2
|
||
PUTSTR [ASCIZ /BOARD TYPE FROM FILE IS DIFFERENT FROM CURRENT ONE:
|
||
/]
|
||
RDWNX1: POP P,B
|
||
JRST FBLKPN
|
||
|
||
RDWNX2: POP P,B
|
||
POPJ P,
|
||
; READ SIGNAL NAMES
|
||
DIDWIR: JUMPE G,DOWIRES ;ANY WIRE SEEN?
|
||
FETCH(T,G,WBIT)
|
||
TRNE T,GENSIG
|
||
PUSHJ P,FINGEN ;FINISH GENERATED NAME
|
||
DOWIRES:SETZB G,WQNWRD ;INIT WIRE POINTER
|
||
SETZM LOSBIT ;INIT GEN NAME CELLS
|
||
SETZM LOSNAM
|
||
TRNN ISBACK ;BACK PANEL INPUT?
|
||
JRST DOTEXT
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
JUMPE TTT,ENDIN ;END ON 0 HERE (THIS COUNTS ON BITS NEVER BEING 0)
|
||
MOVEM TTT,BAKBIT ;SAVE BITS HERE
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
MOVEM TTT,BAKOLD
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
MOVEM TTT,BAKILD
|
||
SETZM BID ;CLEAR THIS
|
||
SETZM BAKSFL ;CLEAR SOURCE FILE POINTER
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
JUMPE TTT,DOTEXT ;0 MEANS NO SOURCE
|
||
MOVE E,TTT
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
HLRZ F,TTT ;EXT ONLY FOR NOW
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
EXCH F,TTT
|
||
PUSHJ P,BPFFIL ;FIND FILE BLOCK
|
||
MOVEM T,BAKSFL ;SAVE HERE
|
||
DOTEXT: PUSHJ P,TRSTR
|
||
JRST ILLEND
|
||
JRST [ XCT GETCHR ;NULL, GET NEXT WORD
|
||
JRST ILLEND
|
||
JUMPN TTT,PINLPA ;ANY PINS?
|
||
POPJ P,] ;NULL STRING AND NULL LIST, END
|
||
JRST DOTXTS
|
||
|
||
DOTXTA: PUSHJ P,TRSTR
|
||
JRST ILLEND
|
||
JRST [ TRNN ISBACK ;DONE, GO DO PINS
|
||
JRST PINLOP
|
||
JRST BPINLP]
|
||
DOTXTS: PUSHJ P,TGRONK
|
||
JRST DOTXTA
|
||
;ASSEMBLE NAME (STRTAB) INTO CURRENT WIRE
|
||
;RETURNS
|
||
;G = CURRENT ACTIVE HEAD OF THIS WIRE
|
||
|
||
TGRONK: MOVE A,[POINT 7,STRTAB] ;POINTER TO BEGINNING OF STRING
|
||
PUSHJ P,PERMUT ;MAKE CONONICAL FORM, CONVERT VARIABLES
|
||
SKIPN CMPWRD
|
||
JRST [ SKIPE WQNWRD ;DID WE PICKUP QN?
|
||
JUMPN G,QNMERG ;YES, MERGE IF WE HAVE HEADER
|
||
POPJ P,] ;NO (ALWAYS 0 IF NOT BP)
|
||
MOVEI T,CMPWRD
|
||
MOVEM T,SAVET
|
||
PUSHJ P,TXTFND ;FIND THIS SIGNAL NAME OR WHERE IT GOES
|
||
JRST NEQ ;MUST INSERT NEW STRING
|
||
JRST ISEQV ;JUST MERGE COMMENTS!!!!!
|
||
; Name was found, merge it if we already have a wire (G)
|
||
WASEQ: FETCH(T,C,WBIT)
|
||
IOR T,SAVBIT ;ADD THESE BITS
|
||
STORE(T,C,WBIT)
|
||
JUMPN G,WASEQV ;WIRES TO MERGE?
|
||
TRNN T,NAM2ND ;IS IT HEADER BLOCK?
|
||
SKIPA G,C ; YES, MAKE IT THE CURRENT WIRE
|
||
FETCH(G,C,WPIN) ;NO, GET REAL HEAD
|
||
QNMERG: TRNN ISBACK ;WR FOR BP ONLY
|
||
POPJ P,
|
||
FETCH(T,G,WRN)
|
||
HRRZ TT,WQNWRD
|
||
PUSHJ P,WHCHRN
|
||
PUSHJ P,WHERRP
|
||
STORE(T,G,WRN)
|
||
POPJ P,
|
||
|
||
; A second name for this wire (G) already had a wire of its own (C)
|
||
; Merge the two wires into one
|
||
WASEQV: MOVE B,C
|
||
FETCH(T,B,WBIT)
|
||
TRNE T,NAM2ND
|
||
FETCH(B,B,WPIN)
|
||
CAIE B,(G) ;ON CURRENT WIRE?
|
||
PUSHJ P,LMERGE ;NO, MERGE THEM
|
||
JRST QNMERG ;PICKUP QN
|
||
|
||
; This name is new, but is equivalent to an existing wire,
|
||
; sort this name into signal list, and merge with the equivalent.
|
||
ISEQV: PUSH P,E ;THE EQUIVALENT SIGNAL
|
||
PUSH P,C
|
||
PUSHJ P,NEQSET ;MAKE WIRE HEADER AND NAME
|
||
POP P,C ; WHERE TO INSERT
|
||
POP P,E ; WHERE EQUIVALENT NAME IS
|
||
EXCH C,E ;C WANTS EQUIVALENT ONE REGARDLESS
|
||
CAME C,E ;WILL EQUIVALENT ONE BE OUR NEXT ?
|
||
JRST ISEQV1 ;NO, THEN WE CAN'T BE FIRST
|
||
FETCH(T,C,WBIT) ;YES, GET ITS BITS
|
||
TRZN T,SIG1 ;IS IT SIG 1?
|
||
JRST ISEQV1 ;NO, WE AREN'T EITHER
|
||
STORE(T,C,WBIT) ;YES, TURN IT OFF
|
||
JRST WASEQV ;NOW WE ARE FIRST
|
||
|
||
ISEQV1: FETCH(T,G,WBIT) ;WE AREN'T FIRST, TURN OFF BIT
|
||
TRZ T,SIG1
|
||
STORE(T,G,WBIT)
|
||
JRST WASEQV
|
||
|
||
; Completely new name, add to current wire
|
||
NEQ: MOVE T,G
|
||
SKIPE T
|
||
FETCH(T,G,WBIT)
|
||
PUSH P,T ;SAVE OLD STATE OF SPWR
|
||
PUSHJ P,NEQSET ;WILL TURN ON SIG1 WHICH IS CORRECT
|
||
POP P,TT
|
||
FETCH(T,G,WBIT) ;WIRE NOW IS A PWR RUN?
|
||
TRNE T,SPWR
|
||
TRNE TT,SPWR ;AND WASN'T BEFORE
|
||
JRST QNMERG
|
||
FETCH(A,G,WVOL) ;THIS DOESN'T CHECK FOR TWO VOLTAGES ON SAME WIRE
|
||
PUSHJ P,FNDPWR ;FIND CANONICAL FORM OF THAT PWR (+5.0V = +5.00V = VCC)
|
||
JRST [ FETCH(T,G,WVOL) ;DOESN'T EXIST, MAKE IT!
|
||
JRST MAKPWR]
|
||
JRST WASEQV ;YES, MERGE IT ONTO THAT POWER RUN
|
||
|
||
; Un-Interned name, enter it, as a 2nd name if wire already started
|
||
NEQSET: JUMPE G,SETG ;NOT STARTED, JUST ENTER
|
||
PUSH P,G
|
||
PUSHJ P,SETG ;GET HEADER BLOCK FOR SECOND NAME
|
||
FETCH(T,G,WBIT)
|
||
TRO T,NAM2ND ;MARK AS SECOND BLOCK
|
||
STORE(T,G,WBIT)
|
||
MOVEM G,SAVET ;SAVE THIS POINTER HERE
|
||
POP P,G ;RESTORE REAL WIRE POINTER
|
||
JRST TMERGE ;SORT IN NEW SIGNAL NAME
|
||
;NULTXT - NO NAME FOR WIRE, CREATE ONE
|
||
;RETURNS
|
||
;G = CREATED WIRE HEADER
|
||
|
||
NULTXT: PUSH P,TTT
|
||
TRNN ISBACK
|
||
TRNN PCNOTD
|
||
SKIPA TT,[GENLEN+1+5]
|
||
MOVEI TT,GNPCLN+1+5 ;ENOUGH FOR GEN NAME + % + 0
|
||
PUSH P,TT
|
||
FETCH(T,W,NGEN) ;IN CASE WE HAVE TO USE THIS
|
||
ADDI T,1
|
||
MOVEI TTT,1+5 ;% + 0
|
||
NULTX1: IDIVI T,=10
|
||
ADDI TTT,1
|
||
JUMPN T,NULTX1
|
||
POP P,TT
|
||
CAMGE TT,TTT
|
||
MOVE TT,TTT ;USE LARGEST
|
||
IDIVI TT,5
|
||
SETOM CMPWRD
|
||
SOS CMPWRD ;LEAVE US NOT GET THE LOW ORDER BIT ON
|
||
MOVE T,[CMPWRD,,PERMTB]
|
||
BLT T,CMPWRD-1(TT) ;MARK ENOUGH SPACE
|
||
SETZM PERMTB-1(TT) ;FOR GEN NAME LATER
|
||
SETZM SAVBIT ;SIMULATE BITS FROM PERMUT
|
||
PUSHJ P,SETGEN ;WILL TURN ON SIG1 AS IT SHOULD
|
||
CLEAR(G,NNAM) ;CLEAR NEXT NAME POINTER (THIS IS ONLY ONE)
|
||
FETCH(TTT,G,WBIT)
|
||
TRO TTT,GENSIG ;MARK AS GENERATED
|
||
STORE(TTT,G,WBIT)
|
||
POP P,TTT
|
||
POPJ P,
|
||
|
||
;FINGEN - FINISH GENERATED NAME
|
||
|
||
FINGEN: PUSHJ P,FNSNGL ;FIRST TRY TO FIND ANOTHER UNAMED RUN WITH SAME PIN
|
||
POPJ P, ;FOUND ONE
|
||
;Make generated name, try to make it the name of some pin on run
|
||
MOVE B,[POINT 7,STRTAB]
|
||
MOVE T,[IDPB TTT,B]
|
||
EXCH T,PUTCHR
|
||
MOVEM T,SVPTCH
|
||
PUTBYT GENCHR
|
||
FETCH(T,G,TBIT) ;WIRE TYPE BITS
|
||
TRNE ISBACK
|
||
JRST FINGNC ;FOR BACK, BODY LOCN, PINN IS SLOT, PADDLE-PIN
|
||
TRNN PCNOTD ;ONLY FOR WD FILES
|
||
TRNN T,ANYCON ;AND CONNECTOR
|
||
JRST FINGN0
|
||
FETCH(A,W,FCRD) ;UNNAMED BACKPANEL RUN, ADD SLOT TO MAKE UNIQUE
|
||
JUMPE A,FINGNA ; NO SLOT
|
||
PUSHJ P,SLTOUT ;PREFIX SLOT ON NAME
|
||
PUTBYT 40
|
||
FINGNA: PUSHJ P,FINGN0 ;FINISH NAME BEFORE PRINTING IT
|
||
FINGNB: PUTSTR[ASCIZ/UNNAMED BACKPANEL RUN:
|
||
/]
|
||
PUTSIG ADDR(G,SPNT)
|
||
PUTSTR[ASCIZ/
|
||
/]
|
||
POPJ P,
|
||
|
||
FINGNC: PUSHJ P,FINGN5
|
||
JRST FINGNB
|
||
|
||
FINGN5: FETCH(A,G,WPIN)
|
||
JUMPE A,FINGN3 ;USE NUMBER IF NO PIN!!!!
|
||
FETCH(T,A,PBDY)
|
||
FETCH(T,T,BLOC)
|
||
FETCH(A,A,PINN)
|
||
HRL A,T
|
||
SETZ T, ;NO OFFSET
|
||
PUSHJ P,BPNPIN
|
||
JRST FINGN1
|
||
|
||
FINGN3: FETCH(T,W,NGEN) ;NOTHING BETTER THAN GENSYM
|
||
ADDI T,1
|
||
STORE(T,W,NGEN)
|
||
PUSHJ P,DECOUT
|
||
JRST FINGN1
|
||
|
||
FINGN0: MOVE A,LOSNAM ;PIN#,,LOC OF BEST LABELING FOR THIS RUN
|
||
JUMPE A,FINGN3 ; NONE
|
||
MOVE T,LOSBIT
|
||
TRNE T,ANYCON ;CON?
|
||
JRST [ PUSHJ P,LOCPNC
|
||
JRST FINGN1]
|
||
PUSHJ P,LOCPIN
|
||
FINGN1: SETZ T, ;FINISH OFF GENERATED NAME
|
||
IDPB T,B
|
||
TLNE B,760000
|
||
JRST .-2
|
||
MOVE T,SVPTCH
|
||
MOVEM T,PUTCHR
|
||
SETZM SAVBIT
|
||
MOVE T,STRTAB
|
||
STORE(T,G,SCMP)
|
||
MOVEI T,-1+ADDR(G,SPNT)
|
||
MOVEI TT,STRTAB-1
|
||
FINGN4: ADDI T,1
|
||
ADDI TT,1
|
||
MOVE TTT,(TT)
|
||
TRNN TTT,376
|
||
JRST [ MOVEM TTT,(T) ;WIN
|
||
JRST GALPH]
|
||
EXCH TTT,(T)
|
||
TRNE TTT,376 ;DOES OLD STRING END?
|
||
JRST FINGN4
|
||
PUTSTR[ASCIZ/MOBY LOSSAGE, I THOUGHT I ALLOCATED ENOUGH SPACE
|
||
BUT I RAN OUT, TRUNCATED SIGNAL IS:
|
||
/]
|
||
PUTSIG ADDR(G,SPNT)
|
||
PUTSTR[ASCIZ/
|
||
/]
|
||
GALPH: MOVEI T,ADDR(G,SCMP)
|
||
MOVEM T,SAVET
|
||
PUSHJ P,GENFND ;FIND PLACE FOR IT
|
||
JFCL ;DON'T CARE IF NEQ, EQV, EQU
|
||
JFCL
|
||
STORE(G,B,ALPH)
|
||
STORE(C,G,ALPH) ;LINK IN
|
||
JRST GENHSH ;FIX HASH TABLE ENTRIES
|
||
; FIND ANOTHER WSINGL!GENSIG WITH SAME PIN
|
||
FNSNGL: FETCH(T,G,WBIT)
|
||
TRNN T,WSINGL ;ARE WE SINGLE PIN?
|
||
JRST CPOPJ1 ;NO
|
||
FETCH(E,G,WPIN) ;GET POINTER TO FIRST PIN
|
||
FETCH(A,E,PBDY)
|
||
FETCH(T,E,PINN)
|
||
MOVEM T,PINNUM
|
||
FETCH(T,E,PBIT)
|
||
TRNE T,PIDPIN
|
||
JRST CPOPJ1
|
||
FETCH(T,A,BBIT)
|
||
TRNN T,CBODY ;CON?
|
||
JRST FNPBDY ;NO, FIND BODIES
|
||
PUSHJ P,FNSNPN ;CHECK THIS BODY FOR PIN
|
||
POPJ P, ;FOUND
|
||
JRST CPOPJ1 ;NOT FOUND, BUT NO MORE BODIES TO CHECK
|
||
|
||
FNPBDY: FETCH(T,A,BLOC)
|
||
JUMPE T,CPOPJ1
|
||
MOVEM T,PINLOC
|
||
FETCH(T,A,DIPT)
|
||
MOVEM T,LSTDIP
|
||
MOVEI A,RADDR(W,WBDY,NXTB)
|
||
JRST FNPB1
|
||
|
||
FNPB2: FETCH(T,A,BBIT)
|
||
TRNE T,CBODY ;CON?
|
||
JRST CPOPJ1 ;YES, LOSE
|
||
FETCH(T,A,BLOC)
|
||
CAMGE T,PINLOC
|
||
JRST FNPB1
|
||
CAME T,PINLOC
|
||
JRST CPOPJ1 ;NO MORE BODIES
|
||
FETCH(T,A,DIPT)
|
||
CAME T,LSTDIP
|
||
JRST FNPB1
|
||
PUSHJ P,FNSNPN ;SEARCH FOR PIN
|
||
POPJ P, ;FOUND AND MERGED
|
||
FNPB1: FETCH(A,A,NXTB)
|
||
JUMPN A,FNPB2
|
||
JRST CPOPJ1
|
||
|
||
FNSNPN: MOVEI C,RADDR(A,BPIN,NXBP)
|
||
JRST FNPN1
|
||
|
||
FNPN2: FETCH(T,C,PINN)
|
||
CAMGE T,PINNUM
|
||
JRST FNPN1
|
||
CAME T,PINNUM
|
||
JRST CPOPJ1
|
||
FETCH(T,C,PBIT)
|
||
TRNE T,PIDPIN
|
||
JRST FNPN1
|
||
FETCH(B,C,HPNT)
|
||
CAIN B,(G)
|
||
JRST FNPN1
|
||
FETCH(T,B,WBIT)
|
||
TRC T,WSINGL!GENSIG
|
||
TRCN T,WSINGL!GENSIG
|
||
JRST GENMER ;MERGE PINS
|
||
FNPN1: FETCH(C,C,NXBP)
|
||
JUMPN C,FNPN2
|
||
JRST CPOPJ1 ;NOT FOUND
|
||
|
||
GENMER: EXCH B,G ;USE OLD ONE (MAY ALREADY HAVE MULTIPLE PINS)
|
||
FETCH(T,B,WPIN)
|
||
HRLM T,(P) ;SAVE PIN LIST HERE TO MERGE LATER
|
||
GENMR1: HLRZ E,(P)
|
||
JUMPE E,CPOPJ
|
||
FETCH(T,E,NXTP)
|
||
HRLM T,(P)
|
||
PUSHJ P,PMERGE
|
||
JRST GENMR1
|
||
; SETG, TXTFND, TMERGE, LMERGE
|
||
SETGEN: PGETFS(G,WHEAD)
|
||
BCLEAR(T,G,WHEAD)
|
||
JRST SETGN1
|
||
|
||
;SETG - splice in new Wire Header between B and C
|
||
; uses contents of CMPWRD, PERMTB, VOLTAGE, and SAVBIT
|
||
|
||
SETG: PGETFS (G,WHEAD)
|
||
BCLEAR(T,G,WHEAD) ;CLEAR OUT BLOCK
|
||
STORE(G,B,ALPH)
|
||
STORE(C,G,ALPH)
|
||
PUSHJ P,FIXHSH ;FIXUP HASH TABLE POINTERS
|
||
SETGN1: MOVE TTT,CMPWRD
|
||
MOVEM TTT,ADDR(G,SCMP) ;COMPARE WORD
|
||
MOVEI T,PERMTB
|
||
MOVEI TT,ADDR(G,SPNT) ;START OF PRINT NAME
|
||
SETG1: MOVE TTT,(T)
|
||
CAMLE TT,.JBREL
|
||
JSR MORCOR
|
||
MOVEM TTT,(TT)
|
||
USAGE,< AOS FSTCNT >
|
||
ADDI TT,1
|
||
TRNE TTT,376
|
||
AOJA T,SETG1
|
||
USAGE,< SOS FSTCNT >
|
||
MOVEM TT,FSTOP ;THIS COUNTS ON PGETFS BEING USED ABOVE
|
||
MOVEI T,SIG1!WNULL ;ASSUME THESE (CALLER WILL FIX)
|
||
IOR T,SAVBIT ;AND ADD THESE
|
||
STORE(T,G,WBIT) ;STORE IN WIRE HEADER
|
||
TRNN T,SPWR
|
||
POPJ P,
|
||
MOVE T,VOLTAG
|
||
STORE(T,G,WVOL)
|
||
POPJ P,
|
||
|
||
|
||
;GENHSH, FIXHSH
|
||
;Fixup hash table pointers
|
||
;CMPWRD = asciz for entry just made
|
||
;B = previous pointer for the entry just made
|
||
|
||
GENHSH: TDZA T,T
|
||
FIXHSH: LDB T,[POINT HASHB,CMPWRD,HASHB-1]
|
||
ADDI T,ADDR(W,HASHTB)
|
||
SKIPN TTT,(T)
|
||
JRST [ HRLM B,(T) ;THIS IS LAST FOR LAST LIST
|
||
JRST FXHSH1] ;NOW STORE US AS LAST FOR THIS LIST AND FIX NEXT BUCKET
|
||
CAIE B,(TTT) ;IS OUR LAST THE OLD LAST FOR THIS LIST?
|
||
POPJ P,
|
||
FXHSH1: HRRM G,(T) ;YES, MAKE US NEW LAST
|
||
ADDI T,1 ;ADVANCE TO NEXT BUCKET
|
||
FXHSH2: CAIL T,HASHL+ADDR(W,HASHTB) ;NO MORE BUCKETS?
|
||
POPJ P, ;NOPE, LEAVE NOW
|
||
SKIPN (T) ;FIND NEXT NON-ZERO BUCKET
|
||
AOJA T,FXHSH2 ;KEEP LOOKING
|
||
HRLM G,(T) ;FIX IT'S LAST LAST POINTER TO OUR LAST POINTER
|
||
POPJ P,
|
||
|
||
;GENFND, TXTFND - Find cmpwrd in SAVET, PERMTB in hash table for wirelist (W)
|
||
; (May find SPWR in SAVBIT, use VOLTAG)
|
||
; PUSHJ P,TXTFND
|
||
; Wasn't found - insert here
|
||
; Wasn't found, but equivalent is in E
|
||
; Found
|
||
; Returns C = matching wire header, or place to insert
|
||
; B = previous entry
|
||
|
||
GENFND: SETZ T,
|
||
JRST GENFN1
|
||
|
||
TXTFND: MOVE T,SAVET
|
||
LDB T,[POINT HASHB,(T),HASHB-1] ;GET HASH VALUE
|
||
GENFN1: ADDI T,ADDR(W,HASHTB) ;ADD ADDRESS OF HASH TABLE
|
||
SKIPN A,(T) ;PICKUP HASH TABLE ENTRY
|
||
JRST TXTFST ;THIS IS FIRST IN THIS BUCKET
|
||
HLRZ C,A
|
||
SETZ E,
|
||
JRST TXTFN2
|
||
|
||
TXTFN1: MOVEI TT,ADDR(C,SCMP) ;GET SIGNAL NAME POINTER
|
||
MOVE T,SAVET
|
||
PUSHJ P,ALPHA
|
||
JRST TXTFNT ;T LESS THAN TT, IT GOES HERE
|
||
JRST TXTFN2 ;T GREATER THAN TT, KEEP LOOKING
|
||
JRST TXTFNF ;T EQV TT, T LESS THAN TT
|
||
JRST TXTFNE ;T EQV TT, TT LESS THAN T
|
||
JRST CPOPJ2 ;T EQUAL TT
|
||
|
||
TXTFNF: MOVE E,C ;THIS IS THE ONE
|
||
JRST CPOPJ1
|
||
|
||
TXTFNE: MOVE E,C ;SAVE POINTER TO EQUIVALENT ONE
|
||
TXTFN2: MOVE B,C
|
||
FETCH(C,C,ALPH)
|
||
CAIE B,(A) ;WAS THAT THE LAST ONE?
|
||
JUMPN C,TXTFN1 ;NO, END OF LIST?
|
||
TXTFNT: JUMPN E,CPOPJ1 ;IF EQUIVALENT SEEN, SKIP
|
||
POPJ P, ;NOT FOUND, B,C IS WHERE IT GOES
|
||
|
||
TXTFST: MOVE A,T
|
||
SKIPN B,(A)
|
||
SOJA A,.-1 ;BACK UP TO FIRST NON-ZERO ENTRY
|
||
HLLI B,
|
||
FETCH(C,B,ALPH) ;NEXT FROM HIM
|
||
POPJ P, ;RETURN POINTERS
|
||
|
||
;FNDPWR - FIND AN SPWR SIGNAL WITH GIVEN VOLTAGE
|
||
;A = VOLTAGE
|
||
;SKIPS IF FOUND
|
||
;C = MATCHING SIGNAL
|
||
|
||
FNDPWR: HRRZS A
|
||
MOVEI C,RADDR(W,WIRES,ALPH)
|
||
JRST FNDPW1
|
||
|
||
FNDPW2: FETCH(T,C,WBIT)
|
||
TRNE T,SCANON ;THE CANONICAL FORM?
|
||
TRNN T,SPWR ;AND POWER?
|
||
JRST FNDPW1
|
||
FETCH(TT,C,WVOL)
|
||
CAIN A,(TT)
|
||
JRST CPOPJ1
|
||
FNDPW1: FETCH(C,C,ALPH)
|
||
JUMPN C,FNDPW2
|
||
POPJ P,
|
||
|
||
;TMERGE - Merge signal block in SAVET into NAM2ND list of G
|
||
|
||
TMERGE: PUSH P,B
|
||
PUSH P,C
|
||
MOVE B,G ;START HERE
|
||
TMERG1: MOVEI TT,ADDR(B,SCMP)
|
||
MOVE T,SAVET
|
||
MOVEI T,ADDR(T,SCMP)
|
||
PUSHJ P,ALPHA
|
||
JRST LNKTXT ;WE'RE HERE
|
||
JRST TMERG2 ;NOT YET
|
||
JRST LNKTXT
|
||
JRST TMERG2
|
||
FETCH(T,B,WBIT)
|
||
TRNE T,GENSIG ;THESE MAY BE EQUAL
|
||
JRST LNKTXT
|
||
PUTSTR[ASCIZ/LOSE BIG, EQUAL RETURN FROM ALPHA AT TMERGE, SIGNAL IS :
|
||
/]
|
||
PUTSIG ADDR(B,SPNT)
|
||
PUTSTR[ASCIZ/
|
||
/]
|
||
JRST LNKTXT
|
||
|
||
TMERG2: MOVE C,B
|
||
FETCH(B,B,NNAM)
|
||
JUMPN B,TMERG1 ;NEXT?
|
||
LNKTXT: CAIN B,(G) ;WILL NEW SIGNAL BE AHEAD OF G ?
|
||
JRST LNKTX1 ;YES, IT'S THE NEW HEADER
|
||
; The new name is an altername of header (G), link in and absorb its wire
|
||
MOVE TTT,SAVET
|
||
LNKTX2: STORE(B,TTT,NNAM) ;LINK NEW BLOCK INTO NAME LIST
|
||
STORE(TTT,C,NNAM)
|
||
TRNN ISBACK ;ONLY BP HAS WRN
|
||
JRST LNKT2A
|
||
FETCH(T,G,WRN) ;MERGE WIRE-RULES
|
||
FETCH(TT,TTT,WRN)
|
||
PUSHJ P,WHCHRN
|
||
PUSHJ P,WHERRP
|
||
STORE(T,G,WRN)
|
||
LNKT2A: FETCH(T,TTT,WBIT) ;MERGE SIGNAL BITS
|
||
ANDI T,SIGBIT
|
||
FETCH(TT,G,WBIT)
|
||
IOR TT,T
|
||
STORE(TT,G,WBIT) ;INTO HEADER BLOCK
|
||
FETCH(T,TTT,WBIT)
|
||
TRON T,NAM2ND ;MARK AS SECOND
|
||
JRST LNKTX3 ;HAS WIRE, STORE BITS AND MERGE WIRES
|
||
STORE(G,TTT,WPIN) ;ALREADY SECOND, LINK BACK TO NEW HEADER POINTER
|
||
TMERGX: POP P,C
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
; New signal is new wire header, replace old header, update 2ND name links
|
||
LNKTX1: MOVE TTT,SAVET
|
||
FETCH(T,TTT,WBIT)
|
||
TRZE T,NAM2ND ;NEW WILL NO LONGER BE SECOND
|
||
JRST [ CLEAR(TTT,WPIN) ;CLEAR POINTER IF WAS SECOND (NO PINS)
|
||
TRZ T,WSINGL ;NOT SINGLE
|
||
TRO T,WNULL ;AND IS NULL (TO START WITH)
|
||
JRST .+1]
|
||
STORE(T,TTT,WBIT) ;STORE BITS BACK
|
||
FETCH(T,G,NNAM) ;COPY OVER HEADER'S LIST OF 2ND NAMES
|
||
STORE(T,TTT,NNAM)
|
||
JUMPE T,LNKTXA
|
||
LNKTXB: STORE(TTT,T,WPIN) ;POINT SECOND NAMES TO NEW HEADER
|
||
FETCH(T,T,NNAM)
|
||
JUMPN T,LNKTXB
|
||
LNKTXA: EXCH TTT,G ;MAKE NEW THE HEADER, AND MERGE OLD HEADER AFTER IT
|
||
MOVE C,G ;SETUP LINKS
|
||
FETCH(B,C,NNAM)
|
||
JRST LNKTX2
|
||
|
||
; Absorb pins of new 2ND name onto header's wire
|
||
LNKTX3: STORE(T,TTT,WBIT) ;STORE BACK BITS
|
||
FETCH(E,TTT,WPIN) ;PIN LIST POINTER
|
||
STORE(G,TTT,WPIN) ;REPLACE WITH HEADER POINTER
|
||
JUMPE E,TMERGX ;DONE IF NO WIRES
|
||
LNKTX4: FETCH(T,E,NXTP)
|
||
HRLM T,(P) ;SAVE NXTP
|
||
PUSHJ P,PMERGE ;MERGE PIN IN B INTO LIST G
|
||
HLRZ E,(P) ;GET NXTP BACK
|
||
JUMPN E,LNKTX4
|
||
JRST TMERGX
|
||
|
||
;LMERGE - Merge 2 wires, pointer to current in G, other in B
|
||
|
||
LMERGE: MOVEM B,SAVET
|
||
FETCH(T,B,NNAM) ;GET NEXT LINK NOW
|
||
HRLM T,(P) ;SAVE IT
|
||
PUSHJ P,TMERGE ;MERGE, LOOKING FORWARD FROM HERE
|
||
HLRZ B,(P) ;GET NEXT POINTER
|
||
JUMPN B,LMERGE ;LOOP FOR ALL THE TEXT
|
||
POPJ P,
|
||
; READ PINS AND FIND THEIR BODIES
|
||
|
||
PINLOP: XCT GETCHR ;READ NEXT PIN ON WIRE
|
||
JRST ILLEND
|
||
JUMPN TTT,PINLP2 ; MORE PINS?
|
||
XCT GETCHR ;ALL PINS IN, GET 0,,RUNBITS
|
||
JRST ILLEND
|
||
JUMPE G,DIDWIR ;NO PLACE TO PUT THEM IF NO RUN
|
||
TRNN TTT,CABBDY ;THIS IS ONLY INTERESTING BIT FOR NOW
|
||
JRST DIDWIR
|
||
FETCH(T,G,WBIT)
|
||
TRO T,CABRUN ;FLAG AS CABLE RUN
|
||
STORE(T,G,WBIT)
|
||
JRST DIDWIR
|
||
|
||
PINLPA: TRNE ISBACK ;ALREADY GOT FIRST WORD IN TTT
|
||
JRST BPNLP0 ;BACK PANEL STUFF?
|
||
PINLP2: SKIPN G ;ADD PIN TO WIRE BEING READ IN
|
||
PUSHJ P,NULTXT ;CREATE GENERATED WIRE (INTO G)
|
||
TLNE TTT,-1 ;CONNECTOR PIN?
|
||
JRST DOBODQ ; YES
|
||
MOVEM TTT,BID ;NO, THIS IS BODY ID
|
||
XCT GETCHR ;GET PIN ID,,PIN #
|
||
JRST ILLEND
|
||
HRRZM TTT,PINNUM
|
||
HLRZM TTT,PID
|
||
SETZM PINTMP
|
||
TRNE PCNOTD
|
||
JRST NOPTMP
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
HLLZM TTT,PINTMP ;STORE PIN BITS (NOTHING IN RIGHT HALF YET)
|
||
NOPTMP: PUSHJ P,BODFNB ;FIND BY BID ALONE
|
||
JRST PINLOP ;NOT FOUND, MUST NOT BE ON THIS CARD, LOOP BACK
|
||
JRST NCNPIN
|
||
|
||
DOBODQ: MOVS TTT,TTT ;SWAP IT BACK
|
||
MOVE T,TTT
|
||
PUSHJ P,CPNSEP ;SEPARATE BODY LOC AND PIN NUMBER
|
||
MOVEM TT,PINNUM
|
||
MOVEM T,PINLOC
|
||
SETZM BID
|
||
PUSH P,TTT
|
||
XCT GETCHR ;APPROX X,Y ,, CPIN ID
|
||
JRST ILLEND
|
||
HRRZM TTT,PID
|
||
HLRZM TTT,PINTMP
|
||
TRNE PCNOTD
|
||
JRST DOBDQ1
|
||
XCT GETCHR ;GET BITS,,0
|
||
JRST ILLEND
|
||
HLLM TTT,PINTMP ;STORE BITS HERE
|
||
DOBDQ1: POP P,TTT ;B-R-S,,CPIN LOC/PIN
|
||
HRRI TTT,
|
||
JUMPE TTT,BLNKCD ;BLANK OR
|
||
CAME TTT,SLICEL ;RIGHT SLICE?
|
||
JRST PINLOP ;NO, SKIP IT
|
||
BLNKCD: PUSHJ P,BODFNC ;FIND BODY FOR CON
|
||
NCNPIN: MOVE F,A ;PUT BODY POINTER IN SAFE PLACE
|
||
PUSHJ P,PMAKE ;NOW MAKE PIN BLOCK, AND SETUP TYPE POINTER
|
||
PUSHJ P,PMERGE ;AND MERGE IT INTO THE WIRE
|
||
JRST PINLOP
|
||
|
||
; READ PINS (BACKPANEL)
|
||
|
||
BPINLP: XCT GETCHR ;READ PPS,,CPIN ID
|
||
JRST ILLEND
|
||
JUMPE TTT,DIDWIR ;QUIT ON 0
|
||
BPNLP0: SKIPN G
|
||
PUSHJ P,NULTXT ;NO SIGNAL NAME BLOCK YET, MAKE ONE
|
||
HRRZM TTT,PID
|
||
HLRZM TTT,PINNUM
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
MOVEM TTT,PINTMP ;STORE 0,,APPROX X/Y
|
||
XCT GETCHR ;FILENAME
|
||
JRST ILLEND
|
||
MOVE E,TTT
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
HLRZ F,TTT ;EXT ONLY FOR NOW
|
||
XCT GETCHR ;PPN
|
||
JRST ILLEND
|
||
EXCH F,TTT
|
||
PUSHJ P,BPFFIL ;FIND FILE BLOCK
|
||
MOVEM T,THSFIL ;FILE POINTER
|
||
MOVE F,BSLOT ;SLOT BODY POINTER
|
||
PUSHJ P,PMAKE ;MAKE PIN BLOCK
|
||
PUSHJ P,PMERGE ;MERGE WITH OTHERS
|
||
JRST BPINLP ;AND LOOP BACK FOR MORE
|
||
|
||
;BPFFIL - FIND BP FILE BLOCK
|
||
;CALL WITH FILNAME IN E
|
||
;AND PPN IN F
|
||
BPFFIL: MOVEI T,RADDR(L,BKNM,FNXT)
|
||
PUSH P,TTT ;SAVE EXT ON STACK
|
||
JRST BPNLP2
|
||
|
||
BPNLP1: CAMGE E,ADDR(T,FILN)
|
||
JRST BPNLOS
|
||
CAME E,ADDR(T,FILN)
|
||
JRST BPNLP2
|
||
FETCH(TTT,T,FEXT)
|
||
CAMLE TTT,(P)
|
||
JRST BPNLOS
|
||
CAME TTT,(P)
|
||
JRST BPNLP2
|
||
CAMGE F,ADDR(T,FPPN)
|
||
JRST BPNLOS
|
||
CAMN F,ADDR(T,FPPN)
|
||
JRST [ POP P,(P)
|
||
POPJ P,]
|
||
BPNLP2: MOVE TT,T
|
||
FETCH(T,T,FNXT)
|
||
JUMPN T,BPNLP1
|
||
BPNLOS: PGETFS(T,FBLK)
|
||
BCLEAR(TTT,T,FBLK)
|
||
FETCH(TTT,TT,FNXT)
|
||
STORE(TTT,T,FNXT)
|
||
STORE(T,TT,FNXT)
|
||
STORE(E,T,FILN)
|
||
POP P,TTT
|
||
STORE(TTT,T,FEXT)
|
||
STORE(F,T,FPPN)
|
||
MOVE B,T
|
||
PUTSTR[ASCIZ/NO FILE BLOCK FOR /]
|
||
PUTSIX ADDR(B,FILN)
|
||
PUTBYT "."
|
||
FETCH(T,B,FEXT)
|
||
HRLZ T,T
|
||
PUTSIX T
|
||
PUTBYT "["
|
||
HLLZ TT,ADDR(B,FPPN)
|
||
PUSHJ P,LSIXOUT
|
||
PUTBYT ","
|
||
HRLZ TT,ADDR(B,FPPN)
|
||
PUSHJ P,LSIXOUT
|
||
PUTBYT "]"
|
||
PUTSTR[ASCIZ/, SO I MADE ONE!
|
||
/]
|
||
MOVEI A,RADDR(L,BKNM,FNXT)
|
||
PUSHJ P,FILMR1 ;SORT INTO LIST
|
||
MOVE T,B
|
||
POPJ P,
|
||
|
||
;PMAKE - MAKE POINT ENTRY
|
||
;G = WIRE
|
||
;F = BODY
|
||
;WQNWRD = Qualifier/rule number stuff
|
||
;BAKBIT = Bits from on-board wirelist
|
||
;RETURNS PIN POINTER IN E
|
||
|
||
PMAKE: TRNN ISBACK ;BACK PANEL?
|
||
JRST PMAKEA
|
||
GETFS(E,BPHEAD)
|
||
BCLEAR(TTT,E,BPHEAD) ;CLEAR OUT BLOCK
|
||
SETZ TT,
|
||
PUSHJ P,CAPPXY ;GET CON APPROX X,Y
|
||
STORE(TT,E,PBIT)
|
||
MOVE TTT,PINNUM
|
||
STORE(TTT,E,PINN)
|
||
HLRZ TT,WQNWRD ;ANY Q FOR THIS PIN?
|
||
JUMPN TT,BPMAK0 ;YES
|
||
HLRZ TT,BAKBIT ;GET WBITS FROM BOARD WIRELIST
|
||
TRNN TT,CABRUN ;CABLE RUN?
|
||
JRST BPMAK1 ;NO
|
||
FETCH(TT,E,PBIT)
|
||
TRNE TT,QBITS ;ALREADY GOT Q LETTER?
|
||
JRST BPMAK1 ;YES, SKIP
|
||
MOVE TT,QL2N+"C" ;GET Q NUMBER FOR "C"
|
||
BPMAK0: FETCH(TTT,E,PBIT)
|
||
TRZ TTT,QBITS
|
||
ANDI TT,QBITS
|
||
TRO TTT,(TT)
|
||
STORE(TTT,E,PBIT)
|
||
BPMAK1: HRRZ TT,BAKBIT
|
||
JUMPE TT,BACMAK
|
||
HLLZS BAKBIT ;MAKE SURE ONLY ONE PIN PER CARD PER RUN
|
||
STORE(TT,E,CBIT) ;STORE CON/CARD BITS
|
||
HLRE T,BAKOLD ;HI IN
|
||
STORE(T,E,HILD)
|
||
HRRE T,BAKOLD ;LOW IN
|
||
STORE(T,E,LILD)
|
||
HLRE T,BAKILD ;HI OUT
|
||
STORE(T,E,HOLD)
|
||
HRRE T,BAKILD ;LOW OUT
|
||
STORE(T,E,LOLD)
|
||
MOVE T,BAKSFL
|
||
STORE(T,E,FILO) ;STORE SOURCE FILE BLOCK POINTER
|
||
JRST BACMAK
|
||
|
||
CAPPXY: HRRZ TTT,PINTMP
|
||
JUMPE TTT,CPOPJ
|
||
TRO TT,CANYPOS
|
||
SUBI TTT,1001
|
||
DPB TTT,[POINT CXPOSL,TT,35-CXPOSB]
|
||
LSH TTT,-9
|
||
DPB TTT,[POINT CYPOSL,TT,35-CYPOSB]
|
||
POPJ P,
|
||
|
||
PMAKEA: PGETFS(E,PHEAD)
|
||
BCLEAR(TTT,E,PHEAD) ;CLEAR OUT BLOCK
|
||
FETCH(TT,F,BBIT)
|
||
TRNE TT,CBODY
|
||
JRST [ LDB TT,[POINT CPNBSZ,PINTMP,CPNBPS]
|
||
LSH TT,=18-(TRMBPS+1) ;POSITION TO ADD POS INFO
|
||
PUSHJ P,CAPPXY
|
||
JRST PMAKPN]
|
||
MOVE TTT,PINTMP
|
||
TLNN TTT,DEFPIN
|
||
TDZA TT,TT
|
||
MOVEI TT,PIDPIN
|
||
PMAKPN: MOVE TTT,PINNUM
|
||
STORE(TTT,E,PINN)
|
||
STORE(TT,E,PBIT) ;STO BITS
|
||
MOVE TTT,PID
|
||
STORE(TTT,E,PID)
|
||
BACMAK: MOVE TTT,THSFIL ;FILE POINTER
|
||
STORE(TTT,E,FILP)
|
||
STORE(F,E,PBDY)
|
||
;PMAKE - CONT'D
|
||
;NOW SORT INTO BODY PIN LIST BY PIN #
|
||
MOVEI T,RADDR(F,BPIN,NXBP)
|
||
JRST PMAKE1
|
||
|
||
PMAKE2: FETCH(TTT,T,PINN)
|
||
CAMGE TTT,PINNUM ;THERE YET?
|
||
JRST PMAKE1
|
||
TRNN PCNOTD
|
||
CAME TTT,PINNUM
|
||
JRST PMAKE3 ;YES, STICK US IN
|
||
PMAKE1: MOVE TT,T
|
||
FETCH(T,T,NXBP)
|
||
JUMPN T,PMAKE2
|
||
PMAKE3: FETCH(T,TT,NXBP)
|
||
STORE(T,E,NXBP)
|
||
STORE(E,TT,NXBP)
|
||
TRNE ISBACK ;NOT FOR BACK PANEL LIST
|
||
POPJ P, ;ALL DONE IF BACK PANEL LIST
|
||
;FALL INTO PTLINK
|
||
;PTLINK - FIND PIN TYPE POINTER --
|
||
; BODY IN F, PIN BLOCK IN E
|
||
;PIN # IN PINNUM
|
||
;(Returns T = 0 if link fails )
|
||
|
||
PTLINK: FETCH(T,F,DIPT) ;DIP POINTER
|
||
JUMPE T,CPOPJ ;LEAVE NOW IF NONE
|
||
MOVEI T,RADDR(T,DPIN,DPNXT)
|
||
JRST PTLNK2
|
||
PTLNK1: FETCH(TTT,T,DPNM)
|
||
CAMN TTT,PINNUM
|
||
JRST ISPNTR
|
||
PTLNK2: FETCH(T,T,DPNXT)
|
||
JUMPN T,PTLNK1
|
||
POPJ P,
|
||
|
||
;Found pointer, store it and collect bits and pin types
|
||
ISPNTR: STORE(T,E,PTYP)
|
||
MOVEM T,TMPCN1 ;SAVE FOR COMPARISON LATER
|
||
FETCH(TT,T,DPBIT) ;GET DIP PIN TYPE BITS
|
||
TRNN TT,PWR!GND ;ARE WE ADDING A POWER/GROUND PIN?
|
||
POPJ P,
|
||
; Remove invented PWR/GND pin if explicit in drawing
|
||
FETCH(T,F,BLOC) ;GET BODY LOC
|
||
MOVEM T,PINLOC ;SAVE HERE
|
||
|
||
MOVEI T,RADDR(W,WBDY,NXTB)
|
||
JRST UNINV2
|
||
UNINV1: FETCH(TT,T,BBIT)
|
||
TRNE TT,CBODY
|
||
JRST UNINV2
|
||
FETCH(TT,T,BLOC)
|
||
CAMGE TT,PINLOC ;GOT TO RIGHT LOC YET?
|
||
JRST UNINV2 ;NO
|
||
CAME TT,PINLOC ;YES, AT OR PAST?
|
||
JRST UNINVX ;PAST
|
||
|
||
MOVEI TT,RADDR(T,BPIN,NXBP)
|
||
JRST UNINV4
|
||
;Found body in same loc, look for invented version of same pin
|
||
UNINV3: FETCH(TTT,TT,PBIT)
|
||
TRNN TTT,INVENT ;INVENTED PIN?
|
||
JRST UNINV4 ;NO
|
||
FETCH(TTT,TT,PTYP)
|
||
CAMN TTT,TMPCN1 ;SAME DIP PIN?
|
||
JRST UNINV5 ;YES
|
||
UNINV4: MOVEM TT,TMPCN2
|
||
FETCH(TT,TT,NXBP)
|
||
JUMPN TT,UNINV3
|
||
UNINV2: FETCH(T,T,NXTB)
|
||
JUMPN T,UNINV1
|
||
UNINVX: MOVE T,TMPCN1 ;RETURN TYPE BLOCK
|
||
POPJ P,
|
||
|
||
;Remove invented pin from Body's pin list
|
||
UNINV5: MOVE T,TMPCN2
|
||
FETCH(TTT,TT,NXBP)
|
||
STORE(TTT,T,NXBP) ;LINK PIN OUT OF BODY LIST
|
||
FETCH(T,TT,HPNT) ;GET WIRE HEADER
|
||
MOVEI T,RADDR(T,WPIN,NXTP)
|
||
JRST UNINV7
|
||
|
||
;Also remove invented pin from it's wire
|
||
UNINV6: CAIN T,(TT) ;GET TO US YET?
|
||
JRST UNINV8
|
||
UNINV7: MOVE TTT,T
|
||
FETCH(T,T,NXTP)
|
||
JUMPN T,UNINV6
|
||
OUTSTR [ASCIZ /MOBY LOSSAGE - PIN NOT FOUND IN ITS WIRE AT UNINV7.
|
||
/]
|
||
JRST UNINVX
|
||
|
||
UNINV8: FETCH(T,TT,NXTP)
|
||
STORE(T,TTT,NXTP) ;LINK PIN OUT OF WIRE
|
||
FSTRET(TT,PHEAD) ;RETURN PIN
|
||
JRST UNINVX
|
||
|
||
;PMERGE - MERGE PIN ONTO WIRE
|
||
;ENTER WITH PIN POINTER IN E, WIRE POINTER IN G
|
||
|
||
PMERGE: FETCH(F,E,PBDY) ;BODY POINTER
|
||
FETCH(T,F,BLOC)
|
||
MOVEM T,PINLOC
|
||
STORE(G,E,HPNT)
|
||
FETCH(T,E,PINN)
|
||
MOVEM T,PINNUM
|
||
;SORT INTO WIRE BY LOC AND PIN #
|
||
MOVEI T,RADDR(G,WPIN,NXTP)
|
||
FETCH(A,E,PBDY)
|
||
FETCH(TT,A,DIPT)
|
||
MOVEM TT,LSTDIP
|
||
FETCH(A,A,BBIT)
|
||
MKPBK: MOVE TT,T
|
||
FETCH(T,TT,NXTP)
|
||
JUMPE T,MKPBK1
|
||
FETCH(TTT,T,PBDY)
|
||
FETCH(TTT,TTT,BBIT)
|
||
TRNN TTT,CBODY
|
||
JRST [ TRNE A,CBODY
|
||
JRST MKPBK ;NOT THERE YET
|
||
JRST MKPBKC]
|
||
TRNN A,CBODY
|
||
JRST MKPBK1
|
||
MKPBKC: FETCH(TTT,T,PBDY)
|
||
FETCH(TTT,TTT,BLOC)
|
||
CAMLE TTT,PINLOC ;HAVE WE PASSED IT?
|
||
JRST MKPBK1 ;YES
|
||
CAME TTT,PINLOC ;EQUAL?
|
||
JRST MKPBK ;NO, GO ON
|
||
FETCH(TTT,T,PINN) ;YES, CHECK PIN #
|
||
CAMGE TTT,PINNUM ;THIS IT?
|
||
JRST MKPBK ;NO, LOOP
|
||
FETCH(TTT,E,PBIT)
|
||
TRNN TTT,PIDPIN ;NO DUP IF PID HERE
|
||
SKIPN PINLOC
|
||
JRST MKPBK1 ;NO DUP IF NO LOC
|
||
FETCH(TTT,T,PINN) ;SETUP PIN # AGAIN
|
||
TRNN PCNOTD ;NO SUCH FEATURE FOR PC CARDS
|
||
CAME TTT,PINNUM ;SAME PIN AS WELL AS LOC?
|
||
JRST MKPBK1 ;NO, DO NORMAL THING
|
||
FETCH(TTT,T,PBIT)
|
||
TRNE TTT,PIDPIN ;IF HE IS PID
|
||
JRST MKPBK ;THEN KEEP LOOKING
|
||
FETCH(TTT,T,PBDY)
|
||
FETCH(TTT,TTT,DIPT)
|
||
CAME TTT,LSTDIP ;MUST BE SAME DIP TYPE
|
||
JRST MKPBK
|
||
FETCH(A,E,PBIT)
|
||
TRO A,DUP
|
||
STORE(A,E,PBIT)
|
||
FETCH(TT,T,NXTP) ;PUT IT AFTER MATCH PIN
|
||
STORE(TT,E,NXTP)
|
||
STORE(E,T,NXTP)
|
||
POPJ P,
|
||
|
||
MKPBK1: FETCH(TTT,G,WBIT)
|
||
TRZE TTT,WNULL ;CERTAINLY NOT NULL ANY MORE
|
||
TROA TTT,WSINGL ;IF WAS NULL, NOW IS SINGLE
|
||
TRZ TTT,WSINGL ;APPARENTLY NOT SINGLE EITHER
|
||
STORE(TTT,G,WBIT)
|
||
MKPBK2: STORE(T,E,NXTP)
|
||
STORE(E,TT,NXTP)
|
||
TRNE ISBACK ;BACK PANEL DOESN'T DO THE REST
|
||
JRST BBITOR ;OR BITS INTO INTO HEADER
|
||
;LBCOPY - COPY BITS AND LOADING INTO HEADER
|
||
;ENTER WITH E POINTER TO PIN, G POINTER TO WIRE, SET PSHARE IF SECOND SHARE PIN!
|
||
;FALLS THRU
|
||
|
||
LBCOPY: FETCH(TT,E,PBIT)
|
||
TRNE TT,DUP
|
||
POPJ P,
|
||
TRZ TT,PSHARE ;CLEAR THIS BIT
|
||
STORE(TT,E,PBIT)
|
||
FETCH(A,E,PTYP)
|
||
JUMPE A,NSHARE ;NO SHARING IF NO POINTER
|
||
FETCH(T,A,DPBIT) ;GET TYPE BITS
|
||
TRNN T,SHARE ;SHARE PIN?
|
||
JRST NSHARE
|
||
FETCH(TT,G,TBIT)
|
||
TRNN TT,SHARE ;ANY SHARE PINS IN WIRE YET?
|
||
JRST NSHARE ;NO, SKIP REST OF THIS
|
||
FETCH(T,A,PSWP) ;THIS IS SHARE #
|
||
MOVEM T,SHRNUM ;SAVE HERE
|
||
FETCH(F,E,PBDY) ;GET BODY
|
||
MOVEI F,RADDR(F,BPIN,NXBP);FOLLOW BODY PIN LIST
|
||
JRST LBCPY1
|
||
|
||
LBCPY2: CAIN F,(E) ;THIS US?
|
||
JRST LBCPY3 ;YES, GO TO OTHER LOOP
|
||
FETCH(T,F,HPNT)
|
||
CAIE T,(G) ;SAME WIRE?
|
||
JRST LBCPY1 ;NO
|
||
FETCH(T,F,PTYP) ;PIN TYPE POINTER
|
||
JUMPE T,LBCPY1 ;ANY?
|
||
FETCH(TT,T,DPBIT)
|
||
TRNN TT,SHARE ;SHARE PIN?
|
||
JRST LBCPY1 ;NO
|
||
FETCH(TT,T,PSWP)
|
||
CAMN TT,SHRNUM ;SAME SHARE NUMBER?
|
||
JRST LBCPYS
|
||
LBCPY1: FETCH(F,F,NXBP)
|
||
JUMPN F,LBCPY2
|
||
PUTSTR[ASCIZ/DIDN'T SEE OURSELVES AT LBCOPY!
|
||
/]
|
||
JRST NSHARE
|
||
|
||
LBCPY4: FETCH(T,F,HPNT)
|
||
CAIE T,(G) ;SAME WIRE?
|
||
JRST LBCPY3 ;NO
|
||
FETCH(T,F,PTYP)
|
||
JUMPE T,LBCPY3 ;ANY TYPE POINTER?
|
||
FETCH(TT,T,DPBIT)
|
||
TRNN TT,SHARE ;SHARE PIN?
|
||
JRST LBCPY3
|
||
FETCH(TT,T,PSWP)
|
||
CAMN TT,SHRNUM
|
||
JRST LBCPYT
|
||
LBCPY3: FETCH(F,F,NXBP)
|
||
JUMPN F,LBCPY4
|
||
JRST NSHARE
|
||
|
||
LBCPYT: FETCH(T,F,PBIT)
|
||
TRO T,PSHARE ;MAKE LATER ONE A SHARE PIN
|
||
STORE(T,F,PBIT)
|
||
JRST NSHARE
|
||
|
||
; SHARED PIN ?
|
||
LBCPYS: FETCH(T,E,PBIT)
|
||
TRO T,PSHARE
|
||
STORE(T,E,PBIT)
|
||
NSHARE: JUMPE A,CONCHK ;PIN TYPE POINTER? IF NOT, CHECK IF CON PIN
|
||
FETCH(T,A,DPBITS) ;PIN TYPE BITS
|
||
FETCH(B,G,TBIT)
|
||
IOR B,T
|
||
STORE(B,G,TBIT)
|
||
SETLOS: FETCH(TTT,G,WBIT)
|
||
TRNN TTT,GENSIG ;does this run need a generated signal name?
|
||
POPJ P,
|
||
; Try to remember something to make the name of this pin unique
|
||
; In order of preference: Loc of output, connector, input, any other pin
|
||
MOVE TTT,LOSBIT ;get DPBITS from last pass thru STOLOS
|
||
TRNE TTT,OUTLD
|
||
POPJ P, ;GOT GOOD GUY
|
||
TRNE T,OUTLD
|
||
JRST STOLOS
|
||
TRNE TTT,ANYCON
|
||
POPJ P,
|
||
TRNE T,ANYCON
|
||
JRST STOLOS
|
||
TRNE TTT,INLD
|
||
POPJ P,
|
||
TRNE T,INLD
|
||
JRST STOLOS
|
||
TRNE TTT,-1
|
||
POPJ P,
|
||
TRNN T,-1
|
||
SKIPN LOSNAM
|
||
JRST STOLOS
|
||
POPJ P,
|
||
|
||
STOLOS: MOVEM T,LOSBIT ;TRY TO REMEMBER SOME LOCN TO LABEL RUN IF NONAME
|
||
FETCH(T,E,PBDY)
|
||
FETCH(T,T,BLOC)
|
||
JUMPE T,CPOPJ ;DON'T USE IF NO BLOC
|
||
HRRM T,LOSNAM
|
||
FETCH(T,E,PINN)
|
||
HRLM T,LOSNAM
|
||
POPJ P,
|
||
|
||
CONCHK: FETCH(F,E,PBDY)
|
||
FETCH(TTT,F,BBIT)
|
||
TRNN TTT,CBODY ;CON?
|
||
JRST [ SETZ T,
|
||
JRST SETLOS] ;MAYBE USE THIS PIN IF NOTHING ELSE
|
||
FETCH(T,G,TBIT)
|
||
TRO T,ANYCON ;MARK AS HAVING CON IN RUN
|
||
STORE(T,G,TBIT)
|
||
JRST SETLOS ;STORE WORD WITH ANYCON ON IN LOSBIT
|
||
|
||
BBITOR: FETCH(A,E,CBIT)
|
||
JUMPE A,CPOPJ
|
||
FETCH(TT,G,TBIT)
|
||
IOR TT,A ;OR CON BITS INTO HEADER BITS
|
||
STORE(TT,G,TBIT)
|
||
POPJ P,
|
||
; FIND BODIES, MAKE THEM
|
||
;FIND BODY BY BODY ID ONLY
|
||
BODFNB: MOVEI A,RADDR(W,WBDY,NXTB)
|
||
MOVE TTT,BID
|
||
JRST BDFNB1
|
||
|
||
BDFNB2: FETCH(T,A,BID)
|
||
CAME TTT,T
|
||
JRST BDFNB1 ;NOT IT
|
||
FETCH(T,A,FILB)
|
||
CAMN T,THSFIL ;FROM THIS FILE?
|
||
JRST CPOPJ1 ;THIS IS IT
|
||
BDFNB1: FETCH(A,A,NXTB)
|
||
JUMPN A,BDFNB2
|
||
POPJ P, ;NOT FOUND
|
||
|
||
;FIND BODY BY LOCATION
|
||
BODFND: TRZ FLAG ;FLAG NO OTHER BODIES IN THIS LOC YET
|
||
MOVEI A,RADDR(W,WBDY,NXTB)
|
||
BODFN2: MOVE B,A ;SAVE PREVIOUS POINTER
|
||
FETCH(A,A,NXTB)
|
||
JUMPE A,CPOPJ ;END? GOES HERE
|
||
FETCH(TT,A,BBIT)
|
||
TRNE TT,CBODY
|
||
POPJ P, ;ALWAYS GOES BEFORE CONS
|
||
FETCH(TT,A,BLOC) ;GET HIS LOC
|
||
CAMGE TT,PINLOC ;ARE WE THERE YET?
|
||
JRST BODFN2 ;NO
|
||
CAME TT,PINLOC ;YES, SAME?
|
||
POPJ P, ;GOES HERE
|
||
TRO FLAG ;FLAG LOC ALREADY EXISTS
|
||
FETCH(T,A,BID)
|
||
CAMGE T,BID
|
||
JRST BODFN2
|
||
CAME T,BID
|
||
POPJ P,
|
||
FETCH(TT,A,FILB)
|
||
CAMGE TT,THSFIL
|
||
JRST BODFN2
|
||
CAMN TT,THSFIL
|
||
AOS (P) ;THIS IS IT, SKIP
|
||
POPJ P,
|
||
|
||
;FIND CONNECTOR BODY
|
||
BODFNC: MOVEI A,RADDR(W,WBDY,NXTB)
|
||
BDFNC1: MOVE B,A
|
||
FETCH(A,A,NXTB)
|
||
JUMPE A,BODMKC ;NOT FOUND, MAKE IT
|
||
FETCH(T,A,BBIT)
|
||
TRNN T,CBODY
|
||
JRST BDFNC1 ;ALWAYS GOES AFTER BODIES
|
||
FETCH(T,A,BLOC)
|
||
CAMGE T,PINLOC
|
||
JRST BDFNC1
|
||
CAMN T,PINLOC
|
||
POPJ P, ;FOUND IT
|
||
JRST BODMKC
|
||
|
||
;FIND BACK PANEL SLOT BODY
|
||
SLOTFN: MOVEI A,RADDR(W,WBDY,NXTB)
|
||
JRST SLOTF1
|
||
|
||
SLOTF2: FETCH(T,A,BLOC)
|
||
CAML T,PINLOC
|
||
JRST [ CAME T,PINLOC ;EXACT MATCH?
|
||
JRST BODMK1 ;NO, MAKE ONE
|
||
POPJ P,]
|
||
SLOTF1: MOVE B,A
|
||
FETCH(A,A,NXTB)
|
||
JUMPN A,SLOTF2
|
||
JRST BODMK1
|
||
|
||
;MAKE BODIES
|
||
;B,A = POINT IN LIST TO INSERT BODY
|
||
BODMK0: PGETFS(T,BHEAD) ;YES, MAKE NEW BODY
|
||
BCLEAR(TTT,T,BHEAD) ;CLEAR OUT BLOCK
|
||
STORE(T,B,NXTB)
|
||
STORE(A,T,NXTB)
|
||
MOVE A,T
|
||
MOVE TTT,BID
|
||
STORE(TTT,A,BID)
|
||
MOVE TTT,PINLOC
|
||
STORE(TTT,A,BLOC)
|
||
POPJ P,
|
||
|
||
BODMK1: PUSHJ P,BODMK0
|
||
MOVE T,THSFIL ;NO, USE FILE POINTER
|
||
BDMKST: STORE(T,A,FILB)
|
||
POPJ P,
|
||
|
||
;MAKE A BODY BLOCK FOR A CONNECTOR PIN
|
||
BODMKC: PUSHJ P,BODMK0
|
||
PUSH P,A
|
||
MOVE A,PINLOC
|
||
PUSHJ P,QUPIN
|
||
SKIPA T,[BEDGE]
|
||
MOVEI T,BWILD
|
||
POP P,A
|
||
STORE(T,A,BBIT)
|
||
MOVEI T,[0] ;POINTER TO 0 FILENAME(FILB)
|
||
JRST BDMKST
|
||
|
||
;THIS COUNTS ON BODMK1 USING PGETFS, NOT GETFS, SO BODY NAME GOES AT FSTOP
|
||
BODMK2: PUSHJ P,BODMK1 ;MAKE AND LINK BASIC BODY BLOCK
|
||
MOVEI T,ADDR(A,BNAM) ;POINTER TO WHERE TO PUT BODY NAME
|
||
MOVEI TT,STRTAB
|
||
BODMK3: MOVE TTT,(TT)
|
||
CAMLE T,.JBREL
|
||
JSR MORCOR ;NEED SOME MORE
|
||
MOVEM TTT,(T)
|
||
USAGE,< AOS FSTCNT >
|
||
ADDI T,1
|
||
TRNE TTT,376 ;END OF STRING?
|
||
AOJA TT,BODMK3
|
||
MOVEM T,FSTOP ;NEW FSTOP
|
||
USAGE,< SOS FSTCNT >
|
||
POPJ P,
|
||
|
||
ILLEND: PUTSTR[ASCIZ/ILLEGAL END OF INPUT FILE!
|
||
NO MORE INPUT WILL BE DONE!
|
||
/]
|
||
JRST ERRET
|
||
; READ DIP COUNTS FROM BAC FILE
|
||
ENDIN: SKIPE MODULE ;THEORY HAS IT THIS WON'T HAPPEN
|
||
SKIPN DIPLST
|
||
JRST SKPCNT ;IF NO DIPS, SKIP COUNTS
|
||
MOVEI A,MODLST-ADDR(0,MNXT)
|
||
JRST MODLP1
|
||
|
||
MODLP2: FETCH(T,A,MNAM)
|
||
MOVE TT,MODULE
|
||
PUSHJ P,TXTMAT
|
||
JRST MODLP1
|
||
JRST MODLP3
|
||
JRST SKPCNT ;IF MODULE ALREADY IN LIST, SKIP IT
|
||
;WE ONLY WANT COUNTS FOR ONE BOARD
|
||
|
||
MODLP1: MOVE B,A
|
||
FETCH(A,A,MNXT)
|
||
JUMPN A,MODLP2
|
||
MODLP3: PGETFS(A,BMOD)
|
||
BCLEAR(T,A,BMOD)
|
||
MOVE T,MODULE
|
||
STORE(T,A,MNAM)
|
||
FETCH(T,B,MNXT)
|
||
STORE(T,A,MNXT)
|
||
STORE(A,B,MNXT)
|
||
MOVEM A,MODULE
|
||
ENDIN1: PUSHJ P,RSTR ;READ STRING DIPNAME
|
||
JRST DOFILS
|
||
MOVEM T,STRING
|
||
MOVE B,DIPLST
|
||
PUSHJ P,DIPFND
|
||
JRST [ MOVE A,STRING
|
||
PUSHJ P,STROUT
|
||
PUTSTR[ASCIZ/, DIPTYPE NOT FOUND!
|
||
/]
|
||
SETZ B,
|
||
JRST .+1]
|
||
MOVEM B,LSTDIP
|
||
MOVE B,STRING
|
||
PUSHJ P,PUTFS
|
||
ENDIN2: XCT GETCHR
|
||
JRST ILLEND
|
||
AOJE TTT,ENDIN1 ;END IS -1
|
||
SUBI TTT,1
|
||
MOVEM TTT,TMPCN2 ;SAVE APPROX COUNT HERE
|
||
XCT GETCHR
|
||
JRST ILLEND
|
||
MOVEM TTT,TMPCN1 ;SAVE REAL COUNT HERE
|
||
PUSHJ P,BAKPRP ;READ PROPERTIES AND FIND PART NUMBER
|
||
SKIPN LSTPART
|
||
JRST ENDIN6 ;USE NULL PART NUMBER BLOCK
|
||
SKIPN H,PARTLIST
|
||
JRST ENDIN4
|
||
ENDIN3: FETCH(T,H,PLPT)
|
||
CAMN T,LSTPART ;FIND OUR PART?
|
||
JRST ENDIN5
|
||
FETCH(H,H,NXPL)
|
||
JUMPN H,ENDIN3
|
||
ENDIN4: OUTSTR[ASCIZ/MOBY LOSSAGE, PART NUMBER NOT FOUND IN PARTLIST.
|
||
/]
|
||
ENDIN6: MOVEI H,NULPART-ADDR(0,MDCN);SET NULL PART HEADER BLOCK
|
||
ENDIN5: MOVEI G,RADDR(H,MDCN,MDNX)
|
||
JRST ENDNA1
|
||
|
||
ENDNA2: FETCH(TT,G,MDIP)
|
||
SKIPN T,LSTDIP
|
||
JRST [ JUMPN TT,ENDNA1
|
||
JRST ENDNA4]
|
||
JUMPE TT,ENDNA3
|
||
FETCH(T,T,DNAM)
|
||
FETCH(TT,TT,DNAM)
|
||
PUSHJ P,DSORT
|
||
JRST ENDNA3
|
||
JRST ENDNA1
|
||
JRST ENDNA4
|
||
|
||
ENDNA1: MOVE F,G
|
||
FETCH(G,G,MDNX)
|
||
JUMPN G,ENDNA2
|
||
ENDNA3: GETFS(T,MDBLOCK)
|
||
BCLEAR(TT,T,MDBLOCK)
|
||
MOVE TT,LSTDIP
|
||
STORE(TT,T,MDIP)
|
||
STORE(T,F,MDNX)
|
||
STORE(G,T,MDNX)
|
||
MOVE G,T
|
||
ENDNA4: MOVEI E,RADDR(G,MXPT,MXNX)
|
||
FETCH(F,G,MXPT)
|
||
JUMPE F,ENDNB3
|
||
SKIPE PRPLST
|
||
JRST ENDNB2
|
||
FETCH(T,F,MPRX)
|
||
JUMPN T,ENDNB3
|
||
JRST ENDNB4
|
||
|
||
ENDNB2: FETCH(E,F,MPRX)
|
||
PUSH P,F
|
||
JUMPE E,ENDNB1
|
||
PUSHJ P,PRXMAT
|
||
JRST ENDNB1
|
||
POP P,F
|
||
JRST ENDNB4
|
||
|
||
ENDNB1: POP P,E
|
||
FETCH(F,E,MXNX)
|
||
JUMPN F,ENDNB2
|
||
ENDNB3: GETFS(T,MXBLOCK)
|
||
BCLEAR(TT,T,MXBLOCK)
|
||
MOVE TT,PRPLST
|
||
STORE(TT,T,MPRX)
|
||
STORE(T,E,MXNX)
|
||
STORE(F,T,MXNX)
|
||
MOVE F,T
|
||
ENDNB4: MOVEI E,RADDR(F,MCPT,MCNX)
|
||
JRST ENDNC1
|
||
|
||
ENDNC2: FETCH(T,E,MODC)
|
||
FETCH(T,T,MNAM)
|
||
MOVE TT,MODULE
|
||
FETCH(TT,TT,MNAM)
|
||
PUSHJ P,TXTMAT
|
||
JRST ENDNC1
|
||
JRST ENDNC3
|
||
JRST ENDNC4
|
||
|
||
ENDNC1: MOVE D,E
|
||
FETCH(E,E,MCNX)
|
||
JUMPN E,ENDNC2
|
||
ENDNC3: GETFS(T,MCBLOCK)
|
||
BCLEAR(TT,T,MCBLOCK)
|
||
MOVE TT,MODULE
|
||
STORE(TT,T,MODC)
|
||
STORE(T,D,MCNX)
|
||
STORE(E,T,MCNX)
|
||
MOVE E,T
|
||
ENDNC4: FETCH(T,E,MREA)
|
||
ADD T,TMPCN1
|
||
STORE(T,E,MREA)
|
||
FETCH(T,E,MAPP)
|
||
ADD T,TMPCN2
|
||
STORE(T,E,MAPP)
|
||
JRST ENDIN2
|