! PLA chip generator, with the PLA described as equations, Tables or Roms

%include "ilap:ilap.inc"

%begin
   %constant %integer max port = 100
   %integer Mode, rest
   %string (255) data file, out file

   %routine pla chip (%integer mode, %string (255) data file, out file)
       %integer p1, p2, outs, ins, i
       %integer %array null (1:1)
       %integer %array ia, oa (1:max port)
       %record (connf) %array ports (1:max port)
       initialise (out file)
       %if mode='E' %start
           sepla ("Pla", data file, top outputs, null, null, p1, p2, ia, oa)
       %finish %else %if mode='T' %start
           stpla ("Pla", data file, top outputs, null, null, p1, p2, ia, oa)
       %finish %else %start
           srom  ("Pla", data file, top outputs, null, null, p1, p2, ia, oa)
       %finish
       pla data size (ins, outs)
       fill port (ports(1), vdd pad, left, 0, 8, metal)
       fill port (ports(2), in pad,  left, p1, 2, poly)
       fill port (ports(3), in pad, right, p2, 2, poly)
       fill port (ports(4), gnd pad, right, 0, 8, metal)
       fill port (ports(i+4), in pad, bottom, ia(i), 2, diffusion) %for i=1,1,ins
       ins = ins + 4
       fill port (ports(i+ins), out pad, top, oa(i), 2, diffusion) %for i=1,1,outs
       place pads ("Pla chip", "Pla", ports, outs+ins)
       finish
   %end
   prompt ("PLA from Equations, Truth Tables or Rom data (E, T, or R)? ")
   read symbol (mode) %and mode=mode&95 %until mode='E' %or mode='T' %or mode='R'
   read symbol (rest) %until rest=nl
   prompt ("File name containing PLA data: ")
   read (data file)
   prompt ("File name for the chip: ")
   read (out file)
   pla chip (mode, data file, out file)
%end %of %program
