1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-05 16:14:50 +00:00
Files
PDP-10.its/src/wl/mpg21.502
2018-05-05 19:19:09 +02:00

686 lines
16 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;<WIRELIST>MPG21.FAI.9, 15-NOV-75 19:03:46, EDIT BY HELLIWELL
.ADD(ALLLOCS,MPG21,LMP21V)
.ADD(ALLLOCS,PG21,LMP21V)
MDWL,<
.ADD(ALLWW,MPG21,MP21TV)
.ADD(ALLWW,PG21,MP21TV)
>;MDWL
;Note! These .ADD's must be outside of block structure
BEGIN MPG21
;THE TRANSFER VECTOR FOR THE AUGUAT 8136 PG21-180 BOARD
^LMP21V:
JRST LCINIT ;BOARD INITIALIZATION
JRST QUPIN ;CHECKS FOR WILD CONNECTOR BODIES
JRST $SLTOUT ;PRINTS CARD LOC (B-R-S)
JRST $GETSLT ;READS CARD LOC (B-R-S)
JRST PRNLOC ;PRINTS SOCKET, DIP, OR CONNECTOR LOC
JRST PRNPIN ;PRINTS SOCKET, DIP, OR CONNECTOR PIN
JRST CPNSEP ;SEPARATE CONNECTORS LOC/PIN PARTS FROM 18 BIT FORM
JRST CPNMER ;MERGE CONN LOC/PIN PARTS BACK
JRST CPNMAP ;MAP CARD LOC, CPIN-LOC INTO BACKPANEL PIN LOC
MDWL,< JRST MAPOST > ;CONVERT FROM DIP-LOC/PIN TO POST
MDPC,<
JRST GTSLTL ;READS (B-R-S) AND BODY LOCN
MD,<
JRST GTCONP ;READS (B-R-S) AND CONNECTOR PIN
JRST LOCFUK ;PATCHUP OLD VERSIONS
>;MD
>;MDPC
MWL,<
JRST GETLOC ;READS EITHER DIP LOC, OR CONNECTOR LOC
JRST RAYDIP ;PRINTS DIP, OR CONNECTOR LOC IN FORTRAN FORM
JRST CPARTP ; (PRINT EDGE PIN TO PARTITION FILE)
JRST SEQLOC ;TESTS FOR BODY LOCS BEING SEQUENTIAL
JRST CONGIN ;GENERATE NEXT INVENTED PIN TO REPLACE "U" PINS
JRST $GTSLTT ;GETSLT, BUT WITH FIRST CHAR IN CHRREG
JRST AUGDIP
>;MWL
[ASCIZ/ #LL#/] ;CUE FOR BOARD SLOT
[ASCIZ/ #/] ;CUE FOR BOARD PIN
MDPC,< [ASCIZ/ #LJ#-#/] ;CUE FOR CONNECTOR PIN
[ASCIZ/ #L#(@#)/] ;CUE FOR BODY LOC
[ASCID/1A01/] ;PROTOTYPE FOR BODY LOC
>;MDPC
MWL,< [ASCIZ/#L#(@#) or #LJ#/] ;WIRELISTER BODY CUE
[ASCIZ/#LJ#/] ;WIRELISTER CONNECTOR BODY CUE
>;MWL
CHECK LMP21V,LTVLEN
L2NSUB: BLOCK L2NLEN
N2LSUB: REPEAT N2LLEN, < "?"
>
EN2L__.
NNN__1
FOR I IN(A,B,C,D,E,F)
< L2N2L I,0
>
FOR I IN (G,I,O,Q)
< L2N2L I,1B0
>
N2LMAX__NNN-1
ORG EN2L
;SOME BYTE POINTERS FOR EXTRACTING FIELDS
%DIPPNL__<POINT 3,,20>-=18 ;PANEL NUMBER
%DIPG__<POINT 3,,23>-=18 ;DIP GROUP
%DIPS__<POINT 6,,29>-=18 ;DIP SLOT
%DIPOF__<POINT 6,,35>-=18 ;DIP OFFSET
;NOTE - Old format MPG21's have no offset, but the DIP slot was <POINT 12,,35>
%CONP__<POINT 12,,35>-=18 ;CONNECTOR PIN # (AND JACK NUMBER <PINS 1-2*26>)
%CNPG__<POINT 5,,22>-=18 ;<PANEL-1>*NGRPS+GROUP
%CNJK__<POINT 1,,23>-=18 ;CONNECTOR JACK BIT
MXPNL__5 ;max number of panels wrappable at once
NGRPS__6 ;PG21-180 HAS 6 GROUPS
GRPCOL__5 ;# COLS IN GROUP
GRPROW__6 ;# ROWS IN GROUP
MAXDIP__GRPROW*GRPCOL ;# DIPS IN GROUP
MAXCNP__=26
;The 8136-PG21 consists of 180 dip slots, organized into
;6 groups of 30 dips each.
;The groups are labeled A-F, with group A to left
;Withhin a group, slots are numbered:
; 5 4 3 2 1
; 10 9 .... 6
; 15 .... 11
; 20 .... 16
; 25 .... 21
; 30 .... 26
;(All coordinates are from DIP side, assuming Scotchflex conns
; are at the top)
COMMENT 
AUGAT-8136-PG21 CONNECTOR PIN FORMAT PRINTS AS #LJ#(#)
WHERE L IS THE GROUP. THE J IS LITERAL. THE FIRST DIGIT IS THE PANEL
AND THE SECOND IS THE JACK. PIN IS LAST
______|_____|_____|_____|_____|_____|
| 2223 35
| 5 |1| 12 |
|_____ ___|_|_______________________|
| | |
< | | |------------>PIN
| |
< | |------------------------->JACK 01, 12
|
< |-------------------------------># <PANEL-1>*NGRPS+GROUP

;VARIOUS FIXUP ROUTINES
MD,<
;T = LOCATION FOR BODY
;(TT= RDVER .LT. 27)
LOCFUK: CAIL TT,27 ;OLD VERSIONS HAVE DIFFERENT
POPJ P,
MOVE TT,NOMTYP ;GAD, THIS IS BLETCHEROUS
CAIN TT,PGNOM
JRST [ MOVEI TT,1 ;PATCH UP PG21'S TO LOOK LIKE 1 OF MPG21
DPB TT,[%DIPPNL,,T]
JRST .+1]
LDB TT,[POINT 12,T,35] ;CONVERT MPG21'S LOC TO LOC/OFFSET
DPB TT,[%DIPS,,T]
SETZ TT,
DPB TT,[%DIPOF,,T]
POPJ P,
>;MD
LCINIT: MOVE T,[L2NSUB,,L2N]
BLT T,L2N+L2NLEN+N2LLEN-1
MOVEI T,N2LMAX
MOVEM T,MAXN2L
POPJ P,
PRNLOC: JUMPL A,CNLOC
LDB TT,[%DIPG,,A]
LDB T,[%DIPPNL,,A] ;PANEL NUMBER
IOR TT,T
JUMPE TT,CPOPJ ;BOTH BANEL AND GROUP NULL?
PUSHJ P,PUTDEC ;PANEL #
LDB T,[%DIPG,,A] ;GROUP LETTER
PUTBYT @N2L(T) ;CONVERT TO LETTER AND PRINT
MOVEI T,2 ;SETUP FOR 2 DIGIT NUMBER PRINT
MOVEM T,NDIG
LDB T,[%DIPS,,A] ;SLOT NUMBER WITHIN GROUP
PUSHJ P,NPUTDEC ;PRINT IT OUT
MOVEI T,2 ;SETUP FOR 2 DIGIT NUMBER PRINT
MOVEM T,NDIG
LDB T,[%DIPOF,,A] ;ANY SLOT OFFSET?
JUMPE T,PRNLC1
PUTBYT "@"
MWL,< PUSHJ P,NPUTDEC >
MDPC,< PUSHJ P,PUTDEC >
PRNLC1: MOVEI TT,"-"
POPJ P,
CNLOC: LDB T,[%CNPG,,A]
JUMPE T,CPOPJ
PUSH P,T+1
SOS T
IDIVI T,NGRPS
AOS T+1
EXCH T+1,(P)
AOS T
PUSHJ P,PUTDEC ;PANEL NUMBER
POP P,T
PUTBYT @N2L(T) ;GROUP LETTER
PUTBYT "J"
LDB T,[%CNJK,,A]
AOS T
PUSHJ P,PUTDEC
MOVEI TT,"-"
POPJ P,
PRNPIN: TLNE A,MAPPWR!MAPGND
JRST [ MOVEI T,"G"
TLNN A,MAPGND
MOVEI T,"V"
PUTBYT (T)
POPJ P,]
LDB T,[%%PINN,,A]
MWL,< MOVEI TT,2
MOVEM TT,NDIG
JRST NPUTDEC
>
MDPC,< JRST PUTDEC >
;CONVERT PIN-SPEC TO POST-SPEC
;MAPOST (DWL) - CONVERT FROM DIP-LOC,PIN# TO SOCKET-LOC, PIN#
;A = MBIT+PIN#,,LOC
;B = PACKAGE
;Skips if can map, with MAPSOC set.
; Possibly MAPPWR or MAPGND if V or G posts on board
;A = New MBIT+PIN#,,LOC
;B = FLAGS,,PIN CHANGE
; %MPLOC ;LOC WAS CHANGED
; %MPPIN ;PIN WAS CHANGED, DIFFERENCE IN RH (TO CHECK FOR +1)
; %MPPL1 ;PIN NUMBER CHANGED BY 1 (KLUDGE)
MDWL,<
MAPOST: TLNN A,CRDPIN ;SHOULDN'T BE ON
TLOE A,MAPSOC
OUTSTR [ASCIZ /PIN ALREADY MAPPED TO POST???
/]
JUMPL A,[SETZ B, ;CONNECTOR, NO CHANGE
JRST CPOPJ1]
PUSH P,C
PUSH P,D
PUSH P,A
LDB D,[%DIPOF,,A] ;OFFSET FIELD WITHIN SOCKET
LDB A,[%%PINN,,A]
JUMPE A,MAPOS1
MOVEI C,=16 ;BOARD HAS 16 PIN SOCKETS
PUSHJ P,MAPPER
JRST MAPOSX
LDB T,[%DIPS,,(P)] ;NOW OFFSET SLOT
MOVEI TT,-1(T)
IDIVI TT,GRPCOL ;TTT GETS COL WITHIN ROW, TT ROW
SUB TTT,C ;DOES OFFSET OVERFLOW GROUP?
SKIPL TTT
CAIL TTT,GRPCOL
JRST MAPOSX
SUB T,C ;Column offset
ADD TT,D ;DOES OFFSET OVERFLOW GROUP?
CAIL TT,GRPROW
JRST MAPOSX
IMULI D,GRPCOL
ADD T,D
DPB T,[%DIPS,,(P)]
MAPOS1: SETZ T,
DPB T,[%DIPOF,,(P)] ;WITHIN SOCKET OFFSET GOES AWAY
DPB A,[%%PINN,,(P)]
AOS -3(P)
MAPOSX: POP P,A
POP P,D
POP P,C
POPJ P,
>;MDWL
GTSLTL: SETZM DESTIN
GETNUM ;GET PANEL NUMBER
CAILE NUMREG,MXPNL ;MAX PANELS IN ONE ASSEMBLY
POPJ P,
DPB NUMREG,[%DIPPNL,,DESTIN] ;STORE AS PANEL NUMBER
CAIN CHRREG,12 ;END OF LINE?
JUMPE NUMREG,CPOPJ1 ;YES, AND NULL NUMBER, JUST RETURN
JUMPE NUMREG,CPOPJ ;OTHERWISE ZERO IS IN ERROR
PUSHJ P,CHKLET ;LETTER TYPED NEXT?
POPJ P, ;NO, ERROR
SKIPG D,L2N(CHRREG) ;GET NUMBER CORRESPONDING TO LETTER
POPJ P, ;NON-EX OR GIOQ!!
CAILE D,NGRPS ;LEGAL GROUP LETTER?
POPJ P,
DPB D,[%DIPG,,DESTIN] ;DEPOSIT AS GROUP LETTER
GETNUM ;GET NEXT NUMBER
JUMPE NUMREG,CPOPJ ;ZERO, ERROR
CAILE NUMREG,=30 ;EXCEEDS MAX SLOT NUMBER WITHIN GROUP?
POPJ P, ;YES
DPB NUMREG,[%DIPS,,DESTIN] ;DEPOSIT AS SLOT NUMBER
CAIE CHRREG,"@" ;ANY SLOT OFFSET?
JRST CPOPJ2 ;RETURN HAPPINESS
GETNUM
DPB NUMREG,[%DIPOF,,DESTIN]
JRST CPOPJ2
MD,<
GTCONP: SETZM DESTIN
GETNUM
LAY,< CAIE CHRREG,TEXIST >
CAIN CHRREG,12
JUMPE NUMREG,CPOPJ1 ;CARRIAGE RETURN ONLY
JUMPE NUMREG,CPOPJ ;ERROR IF NO NUMBER
CAILE NUMREG,MXPNL ;MAX PANELS
POPJ P, ;ERROR OTHERWISE
SOS NUMREG
IMULI NUMREG,NGRPS
MOVEM NUMREG,DESTIN
PUSHJ P,CHKLET ;CHECK FOR LETTER
POPJ P, ;BAD LETTER, ERROR
SKIPN CHRREG,L2N(CHRREG)
POPJ P,
ADD CHRREG,DESTIN
SETZM DESTIN
DPB CHRREG,[POINT 5,DESTIN,22]
GETNUM
JUMPN NUMREG,CPOPJ ;BETTER NOT BE A NUMBER HERE
CAIE CHRREG,"J" ;AND LETTER BETTER BE J
POPJ P,
GETNUM
JUMPE NUMREG,CPOPJ ;BETTER BE A NUMBER HERE
CAIN CHRREG,"-" ;TERMINATED BY A -
CAILE NUMREG,2 ;AND LESS THAN OR EQUAL TO 2
POPJ P,
SOS NUMREG
DPB NUMREG,[POINT 1,DESTIN,23] ;TEMP STORAGE FOR CONNECTOR NUMBER
GETNUM
JUMPE NUMREG,CPOPJ ;BETTER BE A NON ZERO NUMBER
CAILE NUMREG,MAXCNP ;LESS THAN 27
POPJ P,
DPB NUMREG,[POINT 12,DESTIN,35]
CAIE CHRREG,12 ;TERMINATION HAD BETTER BE HERE AND EOL
POPJ P,
JRST CPOPJ2 ;ALL'S WELL THAT ENDS WELL
>;MD
MWL,<
GETLOC: GETNUM
JUMPE NUMREG,CPOPJ ;NON ZERO NUMBER
CAILE NUMREG,MXPNL ;PANEL # MAX
POPJ P,
LSH NUMREG,=15 ;INTO LEFT 3 BITS OF RIGHT HALF
HRLM NUMREG,(P) ;INTO LH OF PDL
PUSHJ P,CHKLET
POPJ P, ;NOT A LETTER
SKIPN CHRREG,L2N(CHRREG)
POPJ P,
DPB CHRREG,[POINT 3,(P),5] ;DEPOSIT GROUP LETTER INTO LH OF PDL
GETNUM
JUMPN NUMREG,[ CAILE NUMREG,=30 ;HERE FOR DIP LOC
POPJ P, ;ONLY 30 DIP SLOTS PER GROUP
HLRZ TT,(P)
DPB NUMREG,[%DIPS,,TT]
CAIE CHRREG,"@"
JRST CPOPJ1
HRLM TT,(P)
GETNUM
HLRZ TT,(P)
DPB NUMREG,[%DIPOF,,TT]
JRST CPOPJ1]
LDB NUMREG,[POINT 3,(P),2]
SOS NUMREG
IMULI NUMREG,NGRPS
LDB TT,[POINT 3,(P),5]
ADD NUMREG,TT
DPB NUMREG,[POINT 5,(P),4]
PUSHJ P,CHKLET ;HERE TO DO CONNECTOR PIN
POPJ P,
CAIE CHRREG,"J"
POPJ P,
GETNUM
JUMPE NUMREG,CPOPJ
CAILE NUMREG,2 ;CHECK FOR LEGAL JACK #
POPJ P,
SOS NUMREG
DPB NUMREG,[POINT 1,(P),5] ;DEPOSIT CONNECTOR NUMBER INTO RH OF LH OF PDL
HLRZ TT,(P)
TRZ TT,7777
TLO TT,MAPCON ;SIGNAL AS CONNECTOR
JRST CPOPJ1
RAYDIP: TLNN A,MAPSOC
PUSHJ P,FUCKUP
PUSHJ P,PRNLOC
PUTSTR [ASCIZ / /] ;3 SPACES
TLNE A,MAPPWR!MAPGND
JRST RAYDP1
LDB T,[%%PINN,,A] ;DIP PIN NUMBER
MOVEI TTT,2
MOVEM TTT,NDIG
JRST NPUTDEC
RAYDP1: PUTBYT "0"
MOVEI T,"G"
TLNN A,MAPGND
MOVEI T,"V"
PUTBYT (T)
POPJ P,
NOTYET(AUGDIP:,CPARTP:,CPARTP:,SEQLOC:)
>;MWL
CPNSEP: MOVE TT,T
TRZ T,7777
ANDI TT,7777
POPJ P,
CPNMER: SKIPN T
SKIPE TT
CAIA
MOVEI TT,1 ;T,TT=0 MEANS INITIALIZE TO FIRST
CAILE TT,MAXCNP ;CARRY INTO JACK, FROM PIN#
JRST [ ADDI T,10000
MOVEI TT,1
JRST .+1]
DPB TT,[001200,,T]
POPJ P,
QUPIN: SETZ A, ;NO RULE NUMBER
POPJ P, ;AND IT'S NOT WILD!!
NOTYET(CPNMAP:)
MDWL,<
MWL,<
SUBTTL WIRE WRAP ROUTINES -- MULTIPLE PG21'S
comment 
All calculations are done from the dip side.
(0,0) at lower left hand corner in left handed coordinate system.
Dip sockets are arranged in 5x6 groups. These 30 dip groups come
in pairs. Each group comes with a pair of Scotch Flex(R) connectors
labeled "J1" and "J2". There can be up to 6 30 dip groups on one
board. The horizontal spacing between groups is 2.700".
There are 5 panels, vertically arranged. The vertical spacing
is 7.500".
5A30(8) is at (0,0). 5AJ2-26 is at (500,6100). 5AJ1-26 is at (500,6400).
It follows that 5B30(8) is at (2700,0)

UMLCOL__GRPROW ;UML INTERCHANGES ROWS AND COLUMNS
UMLROW__GRPCOL
PNLOFT__=7500 ;7.500" VERTICAL SPACING BETWEEN PANELS
GXOFST__=2700 ;2.700" GROUP HORIZONTAL SPACING
XDIPSP__ =500 ; .500" DIP HORIZONTAL SPACING
YDIPSP__=1000 ;1.000" DIP VERTICAL SPACING
XPINSP__ =300 ; .300" DIP PIN HORIZONTAL SPACING
YPINSP__ =100 ; .100" DIP PIN VERTICAL SPACING
PXOFST__ =300 ; .300" X OFFSET FOR POWER PIN
PYOFST__ =800 ; .800" Y OFFSET FOR POWER AND GROUND PINS
JXOFST__ =500 ; .500" X OFFSET FOR JACKS
JYOFST__=6100 ;6.100" Y OFFSET FOR J2
JYOFS1__ =300 ; .300" Y OFFSET FROM J2 TO J1
PXPNSP__ =100 ; .100" CONNECTOR PIN VERTICAL SPACING
PYPNSP__ =100 ; .100" CONNECTOR PIN HORIZONTAL SPACING
^^MP21TV__. ;TRANSFER VECTOR FOR DOUBLE HEIGHT DEC BOARDS
-1 ;FLAGS IF WIRE WRAP OR PC BOARD
JRST CPOPJ ;THE INIT ROUTINE
JRST MAPRC ;MAP ROW/COLS INTO GENERATED LOCS
JRST MAPPAD ;MAP PADDLE/LETTER/SIDE INTO CONN LOCS
JRST DISTPP ;DISTANCE CALC ROUTINE
JRST FPWR ;FIND A POST WITH POWER
JRST FGND ;FIND A POST WITH GND
JRST MAPIT ;CONVERT POST INTO X,Y,BITS
JRST PAKSIZ ;FIND DIMENSION OF DIP OUTLINE
JRST GNDCLR ;?
JRST WAGGND ;?
JRST GNDOUT ;?
JRST VCCOUT ;?
MXPNL*UMLROW*NGRPS ;NROWS (USED FOR UML ONLY)
UMLCOL ;NCOLS (USED FOR UML ONLY)
UMLCOL ;NCLPRG (USED FOR UML ONLY)
UMLROW*2 ;NRWPRP (USED FOR UML ONLY)
MXPNL*MAXDIP*NGRPS ;DIPSLT_NROWS*NCOLS (USED FOR UML ONLY)
SETPAD(MXPNL*NGRPS*2) ;NPADS (USED FOR UML ONLY)
XWD -MAXCNP,1 ;PADLET (USED FOR UML ONLY)
XWD -1,0 ;PADPIN (USED FOR UML ONLY)
=10 ;FRACTN
=200*2 ;WRAPMG .200" INSULATION AROUND EACH POST
=1500 ;POSTMG .750" BARE WIRE AROUND EACH POST
0 ;NEXTR
CHECK MP21TV,WTVLEN
;TABLES FOR MAPIT
;**************************************** DIP PINS
DEFINE XY(X,Y)
< X*XPINSP,,Y*YPINSP
>
PINTAB:
FOR Y_7, 0, -1
< XY(1,Y)
>
FOR Y_0, 7, 1
< XY(0,Y)
>
;**************************************** DIP LOCATIONS
DEFINE XY(X,Y)
< X*XDIPSP,,Y*YDIPSP
>
DIPLOC:
FOR Y_5, 0, -1
<FOR X_4, 0, -1
< XY(X,Y)
>>
;**************************************** SCOTCH-FLEX PINS
DEFINE XY(X,Y)
< X*PXPNSP,,Y*PYPNSP
>
FLXPIN:
FOR Y_1, 0, -1
<FOR X_0, =12, 1
< XY(X,Y)
>>
MAPIT: JUMPL A,CONMAP
PUSHJ P,MAPLOC ;MAP DIP LOCN
POPJ P, ;BAD LOCN
LDB TT,[%%PINN,,A] ;PIN #
TLNE A,MAPPWR!MAPGND ;WANT POWER OR GROUND?
JRST PINPGP ;YES, RETURN FIX IT UP
MAPIT0: ADD T,PINTAB-1(TT) ;ADD EXTRA XY FOR PIN
SETZB TT,TTT ;FLUSH AWAY THOSE GOODIES
JRST CPOPJ1
;POWER AND GROUND PIN FOR DIP
PINPGP: JUMPN TT,CPOPJ ;THE PIN # SHOULD BE ZERO
ADDI T,PYOFST ;FIX THE Y
TLNN A,MAPPWR
JRST [ MOVSI TT,GND ;HE WANTS GND
JRST PINPG1]
ADD T,[PXOFST,,0] ;HE WANTS PWR
MOVSI TT,PWR
PINPG1: SETZ TTT,
JRST CPOPJ1
;Convert PIN-SPEC in A into DIP X,Y locn (T)
MAPLOC: LDB TTT,[%DIPPNL,,A] ;GET PANEL NUMBER
JUMPE TTT,CPOPJ ;LOSER
MOVEI TT,MXPNL ;MAX NUMBER OF PANELS
CAILE TTT,MXPNL ;TOO BIG
POPJ P,
SUBM TT,TTT
IMULI TTT,PNLOFT ;VERTICAL OFFSET OF PANEL
LDB TT,[%DIPG,,A] ;GROUP LETTER
LDB T,[%DIPS,,A] ;DIP #
JUMPE T,CPOPJ
CAILE T,MAXDIP ;TOO MANY DIPS FOR SLOT
POPJ P,
MOVE T,DIPLOC-1(T) ;XY OF DIP SLOT
IMULI TT,GXOFST ;X FUDGE FOR GROUP
MOVSI TT,-GXOFST(TT)
ADD T,TT ;LOCATION OF DIP ON BOARD
ADD T,TTT ;ADD IN PANEL OFFSET
JRST CPOPJ1
;HERE FOR CONNECTOR PINS
CONMAP: LDB TT,[%CNPG,,A] ;PANEL AND GROUP NUMBER
JUMPE TT,CPOPJ ;ILLEGAL PANEL NO
PUSH P,TT+1
SOS TT
IDIVI TT,NGRPS
CAIL TT,MXPNL
JRST [ POP P,TT+1
POPJ P,] ;TOO BIG A PANEL NUMBER
MOVEI T,MXPNL-1
SUBM T,TT ;0 FOR PANEL <MXPNL>
IMULI TT,PNLOFT ;OFFSET BETWEEN PANELS
MOVE T,TT+1
POP P,TT+1
IMULI T,GXOFST
HRLZ T,T ;XY OF GROUP
ADD T,[JXOFST,,JYOFST] ;LOC OF J2
ADD T,TT ;ADD IN PANEL OFFSET
LDB TT,[%CNJK,,A]
SKIPG TT
ADDI T,JYOFS1 ;ADD OFFSET FOR JACK 1
LDB TT,[%%PINN,,A] ;PIN #
JUMPE TT,CPOPJ
CAILE TT,MAXCNP ;REASONABLE # OF PINS
POPJ P,
ADD T,FLXPIN-1(TT)
SETZB TT,TTT
JRST CPOPJ1
PAKSIZ: SKIPE ILLPAK(B) ;THIS PACKAGE KNOWN TO BOARD?
POPJ P,
LDB T,[%DIPS,,A] ;STARTING DIP SLOT
SOS T
IDIVI T,GRPCOL ;T  row with 0 on top, TT  column with 0 to right
SUB T,PAKHGT(B) ;Vertical extent-1
SUB TT,PAKWID(B) ;Horizontal extent-1
JUMPL T,CPOPJ
JUMPL TT,CPOPJ
CAIGE T,GRPROW
CAIL TT,GRPCOL ;MUST BE WITHIN GROUP HORIZONTALLY
POPJ P,
JRST PAKDIM ;GET PACKAGE DIMENSIONS
;Define illegal package types in this board
ILLPAK: BLOCK NPACK
FOR @' I IN (22,24,36,40,48,64)
<ORG ILLPAK+K.'I  -1
>
ORG ILLPAK+NPACK
MAPRC: HLRZ TT,T ;(1,1) IS DIP IN UPPER LEFT HAND CORNER
SOJL TT,CPOPJ
CAML TT,NROWS
POPJ P,
HRRZS T ;ROW IN TT, COL IN T
SOJL T,CPOPJ
CAML T,NCOLS ;(0,0) IS NOW IN UPPER LEFT
POPJ P,
PUSH P,[0]
IDIVI TT,NGRPS*GRPCOL ;BREAK INTO PANEL#,COL WITHIN PANEL
ADDI TT,1
DPB TT,[%DIPPNL,,(P)]
MOVE TT,TTT
IDIVI TT,GRPCOL ;BREAK INTO GROUP#,COL#
ADDI TT,1
DPB TT,[%DIPG,,(P)]
MOVNS T ;LAST UML COL CORRESPONDS TO FIRST DIP ROW
MOVEI T,UMLCOL-1(T)
IMULI T,UMLROW ;DIPSLOTS COUNT BY UMLROWS, THEN UMLCOLS
ADDI T,1(TTT)
DPB T,[%DIPS,,(P)]
POP P,T
JRST CPOPJ1
MAPPAD: MOVE TTT,T ;JACK #, STARTING AT 1
SETZ T,
CAIG TT,MAXCNP ;PIN #
CAILE TTT,<MXPNL>*NGRPS*2 ;2 JACKS PER GROUP
POPJ P,
SOS TTT
DPB TTT,[%CNJK,,T]
ASH TTT,-1
AOS TTT
DPB TTT,[%CNPG,,T]
DPB TT,[%%PINN,,T]
TLO T,MAPCON
POPJ P,
FPWR: CAIE B,=500 ;NOT +5.00V??
JRST [ SETZ A,
POPJ P,]
TLO A,MAPPWR!MAPSOC ;MAKE IT "V" PIN
JUMPL A,FPWRC ;CONNECTOR?
TLZ A,$$PINN
POPJ P,
FGND: TLO A,MAPGND!MAPSOC ;MAKE IT "G" PIN
JUMPL A,FGNDC
TLZ A,$$PINN
POPJ P,
FPWRC: ;FIND DIP SLOT CLOSEST TO CONN PIN
FGNDC: LDB T,[%CNPG,,A]
SOS T
IDIVI T,NGRPS
AOS T
AOS TT
TRZ A,-1
DPB T,[%DIPPNL,,A] ;GET THE RIGHT PANEL,GROUP
DPB TT,[%DIPG,,A]
LDB T,[%%PINN,,A]
SOS T
IDIVI T,=13
MOVE T,[ REPEAT 4,<2>
REPEAT 5,<3>
REPEAT 4,<4>](TT)
DPB T,[%DIPS,,A]
TLZ A,$$PINN
POPJ P,
FOR NAME (GNDCLR:,WAGGND:,GNDOUT:,VCCOUT:)
<NOTYET(NAME)
>
>;MWL
>;MDWL
BEND MPG21