(FILECREATED " 4-Dec-86 13:03:08" {ERIS}<TAMARIN>CMOS1>EMULATOR>GENERATETAM.;13 66013Q 

      changes to:  (FNS MakeRegMuxSpec)

      previous date: "10-Nov-86 12:53:18" {ERIS}<TAMARIN>CMOS1>EMULATOR>GENERATETAM.;9)


(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT GENERATETAMCOMS)

(RPAQQ GENERATETAMCOMS ((FNS)
			  (* * RegMux generation)
			  (FNS BuildMux FindLineName MakeRegMuxSpec MapMuxNameToLine MuxChipList 
			       MakeMuxBlk MakeRegMux)
			  (VARS MapNameList hspec vspec)
			  (* * PLA Generation)
			  (FNS MakeDotPlaFile MakePlaTTFile MakeFoldPlaTTFile MakePlas MakeSlimFile 
			       SearchNameList GetPlaField)
			  (VARS ClockPlaSlimSpec MiscPlaSlimSpec OpPlaSlimSpec RomPlaSlimSpec)
			  (* * Cond Code Generation)
			  (FNS BuildCondCode FindCodeLetter)))
(* * RegMux generation)

(DEFINEQ

(BuildMux
  [LAMBDA NIL                                                (* agb: "14-Jun-86 17:17")
    (MakeRegMuxSpec)
    (SETQ cl (MuxChipList RegMuxSpec))
    (MakeRegMux cl (QUOTE {PHYLUM}<Tamarin>LP>GENREGMUX.CHIP])

(FindLineName
  [LAMBDA (sect line)                                        (* agb: "14-Jun-86 17:27")
    (PROG (a)
	    [SETQ a (for k in MapNameList thereis (AND (EQ line (CADR k))
								 (GEQ sect (CADDR k))
								 (LESSP sect (PLUS (CADDR
											 k)
										       (CADDDR
											 k]
	    (RETURN (if a
			  then (LIST [CONCAT (U-CASE (CAR a))
						   "-"
						   (PLUS (OR (CAR (CDDDDR a))
								 0)
							   (DIFFERENCE sect (CADDR a]
					 (CADR (CDDDDR a])

(MakeRegMuxSpec
  [LAMBDA NIL                                                (* rtk " 4-Dec-86 10:51")
    [SETQ RegMuxRdSpec (COPY (QUOTE ((RegAddr 0 6 NewTos NewArg NewArg2 IBufN
						    ((0 4 4 0)
						     (NextOpcode 0 4 0))
						    uK)
					    (RegCxt 6 3 NewTopCxt AltCxt)
					    (AltCxt 6 3 ((0 10Q 1 10Q)
						     (NewTopCxt 6 2 6))
						    ((0 10Q 1 10Q)
						     (NewTopCxt+1 6 2 6))
						    ((0 10Q 1 10Q)
						     (NewTopCxt-1 6 2 6))
						    ((0 10Q 1 10Q)
						     (NewBotCxt 6 2 6))
						    ((0 10Q 1 10Q)
						     (NewBotCxt+1 6 2 6))
						    ((0 10Q 1 10Q)
						     (NewBotCxt-1 6 2 6))
						    ((uK 6 3 6 6))
						    ((10Q 6 3 0)))
					    (MuxBus 0 10Q ((0 6 2 6)
						     (↑Tos 0 6 0))
						    ↑Arg ↑Arg2 IBufN ↑Opcode ((0 4 4 0)
						     (↑Opcode 0 4 0))
						    ((↑uK 0 10Q 0))
						    ((0 3 5 0)
						     (↑Opcode 0 3 0)))
					    (NewArg 0 10Q ↑Arg ((0 6 2 6)
						     (Arg' 0 6 0))
						    MuxBus NIL)
					    (NewArg2 0 10Q ↑Arg2 ((0 6 2 6)
						      (Arg2' 0 6 0))
						     MuxBus NIL)
					    (NewTos 0 6 ↑Tos Tos' MuxBus NIL)
					    (NewTopCxt 6 2 ↑TopCxt AltCxt)
					    (NewBotCxt 6 2 ↑BotCxt AltCxt]
    (SETQ RegMuxWtSpec (COPY (QUOTE ((RegAddr 0 6 ↑Tos Tos' ↑Arg ↑Arg2 IBufN
						    ((0 4 2 4)
						     (↑Opcode 0 4 0))
						    ↑uK)
					    (RegCxt 6 3 ↑TopCxt AltCxt)
					    (AltCxt 6 3 ((0 10Q 1 10Q)
						     (↑TopCxt 6 2 6))
						    ((0 10Q 1 10Q)
						     (Top+1Cxt 6 2 6))
						    ((0 10Q 1 10Q)
						     (Top-1Cxt 6 2 6))
						    ((0 10Q 1 10Q)
						     (↑BotCxt 6 2 6))
						    ((0 10Q 1 10Q)
						     (BotCxt+1 6 2 6))
						    ((0 10Q 1 10Q)
						     (BotCxt-1 6 2 6))
						    ((↑uK 6 3 6 6))
						    ((10Q 6 3 0)))
					    (MuxBus 0 10Q ((0 6 2 6)
						     (↑Tos 0 6 0))
						    ↑Arg ↑Arg2 IBufN ↑Opcode ((0 4 4 0)
						     (↑Opcode 0 4 0))
						    ((↑uK 0 10Q 0))
						    ((D2 0 10Q 0))
						    ((RBus 0 10Q 0))
						    ((CtlBits 0 6 0))
						    ((0 3 4 0)
						     (↑Opcode 0 3 0)))
					    (NewArg 0 10Q NIL NIL NIL MuxBus)
					    (NewArg2 0 10Q NIL NIL NIL MuxBus)
					    (NewTos 0 6 NIL NIL NIL MuxBus])

(MapMuxNameToLine
  [LAMBDA (name n)                                           (* agb: " 9-Jun-86 15:46")
    (CADR (OR [for i in MapNameList thereis (AND (EQ name (CAR i))
							     (IGEQ n (CADDR i))
							     (ILESSP n (IPLUS (CADDR i)
										  (CADDDR i]
		  (HELP])

(MuxChipList
  [LAMBDA (spec)                                             (* agb: " 9-Jun-86 19:48")
    (COPY
      (CONS
	vspec
	(CONS
	  hspec
	  (for aspec in spec
	     collect
	      (for i from 0 to 8
		 collect
		  (if [AND (GEQ i (CADR aspec))
			       (LESSP i (PLUS (CADR aspec)
						  (CADDR aspec]
		      then
		       (CONS (MapMuxNameToLine (CAR aspec)
						   i)
			       (for j in (CDDDR aspec)
				  collect
				   (MapMuxNameToLine
				     [if (ATOM j)
					 then j
				       else (CAR (for x in j
							thereis (AND (GEQ i (CADR x))
									 (LESSP
									   i
									   (PLUS (CADR x)
										   (CADDR x]
				     i)))
		    else NIL])

(MakeMuxBlk
  [LAMBDA (spec VSpec startX)                                (* agb: "31-May-86 19:56")
    (PROG (maxHeightList last lastX)
	    (SETQ maxHeightList (for i from 0 to 20 collect 0))
	    [for y in VSpec as elt in spec when elt
	       do (for xelt in (CDR elt) as x from startX by 14 as mh on 
										    maxHeightList
		       as n from 0
		       first [ChipSymCall (QUOTE VIA)
					      (PLUS 0 startX)
					      (PLUS cellHeight 0 y (TIMES 8 (CAR elt]
			       [ChipWire 3 3 startX (PLUS -8 cellHeight y)
					   startX
					   (PLUS cellHeight y (TIMES 8 (CAR elt]
			       (SETQ last NIL)
			       (SETQ lastX startX)
		       do (if (AND (NEQ NIL xelt)
					 (GREATERP y (CAR mh)))
				then (RPLACA mh y))
			    (if (OR last xelt)
				then (if (EVENP n)
					   then (ChipSymCall (QUOTE OCELL)
								 (PLUS 0 x)
								 (PLUS 7 y))
						  (SETQ lastX (PLUS x 4))
					 else (ChipSymCall (QUOTE GCELL)
							       (PLUS 0 x)
							       (PLUS 7 y)))
			      elseif (EQ x startX)
				then (ChipSymCall (QUOTE VIA)
						      (PLUS 0 x)
						      (PLUS 29 y)))
			    (SETQ last T)
			    (if (NOT xelt)
				then                       (* ChipSymCall (QUOTE ZCELL) 
							     (PLUS 4 x) (PLUS 29 y))
				       (SETQ last NIL)
			      elseif (EQ T xelt)
				then (ChipSymCall (QUOTE PCELL)
						      (PLUS 4 x)
						      (PLUS 0 y))
			      else (ChipSymCall (QUOTE DCELL)
						    (PLUS 4 x)
						    (PLUS 0 y)))
			    [if (NUMBERP xelt)
				then (ChipSymCall (QUOTE VIA)
						      (PLUS 13 x)
						      (PLUS cellHeight 0 y (TIMES 8 xelt)))
				       (ChipWire 3 3 (PLUS x 13)
						   (PLUS -1 cellHeight y)
						   (PLUS x 13)
						   (PLUS cellHeight y (TIMES 8 xelt]
		       finally [if last
				     then (if (EVENP n)
						then (ChipSymCall (QUOTE OCELL)
								      (PLUS 0 x)
								      (PLUS 7 y))
						       (SETQ lastX (PLUS x 4))
					      else (ChipSymCall (QUOTE GCELL)
								    (PLUS 0 x)
								    (PLUS 7 y]
				 (ChipWire 11 4 startX (PLUS y 29)
					     lastX
					     (PLUS y 29]
	    (for i in maxHeightList as x from (PLUS 8 startX) by 14
	       when (NEQ i 0) do (ChipWire 3 3 (PLUS -1 x)
						   -1
						   (PLUS -1 x)
						   (ADD1 i])

(MakeRegMux
  [LAMBDA (muxSpec file)                                     (* agb: "17-Jun-86 11:11")
    (PROG (vspec hspec nm (cellHeight 41)
		   (newBase 0))
	    (SETQ RegMuxVLocSpec NIL)
	    (SETQ vspec (CAR muxSpec))
	    (SETQ hspec (CADR muxSpec))
	    [SETQ hspec1 (CONS 0 (for i in hspec collect (SETQ newBase
								     (PLUS 8 newBase
									     (TIMES i 14]
	    (SETQ newBase 0)
	    [SETQ vspec1 (CONS 0 (for i in vspec collect (SETQ newBase
								     (PLUS newBase cellHeight
									     (TIMES i 8]
	    (ChipHdrFile file (GetFile (QUOTE {Phylum}<Tamarin>LP>RegMux>MUXBASECELLS.CHIP)))
	    (for mspec in (CDDR muxSpec) as startX in hspec1 do (MakeMuxBlk mspec 
											  vspec1 
											  startX))
	    (SETQ rightEdge (CAR (LAST hspec1)))
	    (SETQ newBase 0)
	    [for i in vspec as n from 0
	       do (ChipWire 11 4 0 (PLUS 7 newBase)
				rightEdge
				(PLUS 7 newBase)
				"GND")
		    (for j from 0 to (DIFFERENCE i 1) when (SETQ nm (FindLineName
									 n j))
		       do (if (CADR nm)
				then (SETQ RegMuxVLocSpec (NCONC1 (LIST (CAR nm)
										(PLUS newBase 
										       cellHeight
											(TIMES
											  j 8)))
									RegMuxVLocSpec)))
			    (ChipWire 11 4 (if (CADR nm)
						 then -16
					       else 0)
					(PLUS newBase cellHeight (TIMES j 8))
					rightEdge
					(PLUS newBase cellHeight (TIMES j 8))
					(CAR nm)))
		    (SETQ newBase (PLUS newBase cellHeight (TIMES i 8]
	    (ChipTrailer])
)

(RPAQQ MapNameList ((#Tos 0 0 6)
		      (#Tos' 1 0 6)
		      (#NewTos~ 2 0 6)
		      (#uK 3 0 6)
		      (#Arg 4 0 6)
		      (#Arg' 5 0 6)
		      (#NewArg~ 6 0 6)
		      (#Arg2 7 0 6)
		      (#IBufN 10Q 0 6 0 T)
		      (@RegAddr~ 11Q 0 6 0 T)
		      (#NewArg2~ 12Q 0 6)
		      (@Quad 13Q 0 2 0 T)
		      (#$Opcode 14Q 0 6)
		      (D2 15Q 0 6 0 T)
		      (@MuxRdSel~ 16Q 0 6)
		      (--)
		      (#Bot-1Cxt 0 6 2)
		      (#uK 1 6 2 6)
		      (#BotCxt 2 6 2)
		      (#Bot+1Cxt 3 6 2)
		      (#NewBotCxt~ 4 6 2)
		      (#Top-1Cxt 5 6 2)
		      (#IBufN 6 6 2 6 T)
		      (#TopCxt 7 6 2)
		      (#Top+1Cxt 10Q 6 2)
		      (#NewTopCxt~ 11Q 6 2)
		      (-0-)
		      (#$Opcode 13Q 6 2 6)
		      (D2 14Q 6 2 6 T)
		      (#Arg 15Q 6 2 6)
		      (@MuxRdSel~ 16Q 6 2 6)
		      (#NewArg~ 17Q 6 2 6)
		      (@RegCxt~ 20Q 6 2 0 T)
		      (--)
		      (@RegCxt~ 0 10Q 1 2 0 T)
		      (#uK 1 10Q 1 10Q)
		      (-1 T 0 24Q)
		      (0 NIL 0 24Q)
		      (NIL NIL 0 24Q)))

(RPAQQ hspec (20Q 20Q 10Q 10Q 4 10Q 4 4))

(RPAQQ vspec (17Q 17Q 17Q 17Q 17Q 17Q 21Q 21Q 2))
(* * PLA Generation)

(DEFINEQ

(MakeDotPlaFile
  [LAMBDA (filename inLst outLst foldP row col tiles)        (* agb: " 6-Jul-86 17:46")
    (PROG (file fn1)
	    [if (EQ filename T)
		then (SETQ file NIL)
	      else (SETQ file (OPENFILE (CONCAT filename ".pla")
					      (QUOTE OUTPUT]
	    (SETQ fn1 (COPY filename))
	    (RPLSTRING fn1 (STRPOS "{" fn1)
			 "[")
	    (RPLSTRING fn1 (STRPOS "}" fn1)
			 "]")
	    (PRINT fn1)
	    (LINELENGTH 10000 file)
	    (PRINTOUT file "TruthTableFile ← %"" filename ".tt%";" T 
		      "TileSet ← %"/PHYLUM/Tamarin/LP/Pla/"
		      tiles ".dale%";" T "Optimize ← FALSE;" T "ExtraRows ← " .I1 row ";" T 
		      "ExtraOrColumns ← "
		      .I1 col ";" T "Inputs ← LIST[")
	    (SETQ fflg T)
	    (for i in inLst
	       do (if (NOT fflg)
			then (PRINTOUT file ", "))
		    (SETQ fflg NIL)
		    (PRINTOUT file "%"" (U-CASE (CAR i))
			      "%""))
	    (PRINTOUT file "];" T "Outputs ← LIST[")
	    (SETQ fflg T)
	    (for i in outLst
	       do (if (NOT fflg)
			then (PRINTOUT file ", "))
		    (SETQ fflg NIL)
		    (PRINTOUT file "%"" (U-CASE (CAR i))
			      "%"")
		    (if foldP
			then (PRINTOUT file ", %"" (U-CASE (CAR i))
					 "DUMMY" "%"")))
	    (PRINTOUT file "];" T "PrintRows ← 5;" T)
	    (CLOSEF file])

(MakePlaTTFile
  [LAMBDA (plaSpec OutputSpec file row col tile)             (* agb: " 6-Jul-86 18:07")
    (PROG (inLst outLst x)
	    (if (EQ file T)
		then (SETQ outFile NIL)
	      else [SETQ outFile (OUTPUT (OUTFILE (CONCAT file ".tt"]
		     (LINELENGTH 10000 outFile))
	    [SETQ inLst (for i in (CAR OutputSpec)
			     collect (LIST (CAR i)
					       (IPLUS (CADDR i)
							(CADR (SearchNameList (CADR i)
										  (CAR plaSpec)
										  (CADDR i]
	    [SETQ outLst (for i in (CADR OutputSpec)
			      collect (LIST (CAR i)
						[IPLUS (CADDR i)
							 (CADR (SearchNameList (CADR i)
										   (CADR plaSpec)
										   (CADDR i]
						(CADR i)
						(CADDDR i]
	    (MakeDotPlaFile file inLst outLst NIL row col tile)
	    [if (NOT plaSpec)
		then (SETQ MiDecl (RECLOOK (QUOTE MI)))
		       (SETQ plaSpec (LIST NIL NIL
					       (for i from 0 to 255
						  collect (LIST
							      i 255
							      (if (AND (ELT UCodeRom i)
									   (NEQ T (ELT UCodeRom i)
										  ))
								  then (ELT UCodeRom i)
								else (create MI]
	    (for term in (CADDR plaSpec) as n from 0
	       do (for inLine in inLst
		       do (SETQ vl (LOADBYTE (CAR term)
						   (CADR inLine)
						   1))
			    (SETQ vl2 (LOADBYTE (CADR term)
						    (CADR inLine)
						    1))
			    (if (EQ 0 vl2)
				then (PRINTOUT outFile "X")
			      elseif (EQ 0 vl)
				then (PRINTOUT outFile "0")
			      else (PRINTOUT outFile "1")))
		    (printout outFile " | ")
		    (for outLine in outLst do (if [NEQ (CADDDR outLine)
								 (NEQ 0 (GetPlaField
									  (CADDR term)
									  (CADR outLine)
									  (CADDR outLine]
							then (printout outFile "1")
						      else (printout outFile "0")))
		    (PRINTOUT outFile T))
	    (CLOSEF outFile])

(MakeFoldPlaTTFile
  [LAMBDA (plaSpec OutputSpec file row col tile)             (* agb: " 6-Jul-86 18:07")
    (PROG (inLst outLst x)
	    (if (EQ file T)
		then (SETQ outFile NIL)
	      else [SETQ outFile (OUTPUT (OUTFILE (CONCAT file ".tt"]
		     (LINELENGTH 10000 outFile))
	    [SETQ inLst (for i in (CAR OutputSpec)
			     collect (LIST (CAR i)
					       (IPLUS (CADDR i)
							(CADR (SearchNameList (CADR i)
										  (CAR plaSpec)
										  (CADDR i]
	    [SETQ outLst (for i in (CADR OutputSpec)
			      collect (LIST (CAR i)
						[IPLUS (CADDR i)
							 (CADR (SearchNameList (CADR i)
										   (CADR plaSpec)
										   (CADDR i]
						(CADR i)
						(CADDDR i]
	    (MakeDotPlaFile file inLst outLst T row col tile)
	    [if (NOT plaSpec)
		then (SETQ MiDecl (RECLOOK (QUOTE MI)))
		       (SETQ plaSpec (LIST NIL NIL
					       (for i from 0 to 255
						  collect (LIST
							      i 255
							      (if (AND (ELT UCodeRom i)
									   (NEQ T (ELT UCodeRom i)
										  ))
								  then (ELT UCodeRom i)
								else (create MI]
	    (for termL on (CADDR plaSpec) by (CDDR termL) as n from 0 by 2
	       do (SETQ term1 (CAR termL))
		    (SETQ term2 (CADR termL))
		    (for inLine in inLst
		       do (SETQ vl (LOADBYTE (CAR term1)
						   (CADR inLine)
						   1))
			    (SETQ vl2 (LOADBYTE (CADR term1)
						    (CADR inLine)
						    1))
			    (if (EQ 0 vl2)
				then (PRINTOUT outFile "X")
			      elseif (EQ 0 vl)
				then (PRINTOUT outFile "0")
			      else (PRINTOUT outFile "1")))
		    (printout outFile " | ")
		    (for outLine in outLst
		       do (if [NEQ (CADDDR outLine)
					 (NEQ 0 (GetPlaField (CADDR term1)
								 (CADR outLine)
								 (CADDR outLine]
				then (printout outFile "1")
			      else (printout outFile "0"))
			    (if [NEQ (CADDDR outLine)
					 (NEQ 0 (GetPlaField (CADDR term2)
								 (CADR outLine)
								 (CADDR outLine]
				then (printout outFile "1")
			      else (printout outFile "0")))
		    (PRINTOUT outFile T))
	    (CLOSEF outFile])

(MakePlas
  [LAMBDA (dir pla)                                          (* agb: " 1-Aug-86 16:16")
    (MakeClockPla2)
    (MakeMiscPla)
    (if (NOT dir)
	then (SETQ dir "{PHYLUM}<Tamarin>LP>Pla>"))
    [if (NOT pla)
	then (SETQ pla (QUOTE (clock op misc ucode]
    (if (MEMB (QUOTE clock)
		  pla)
	then (MakePlaTTFile ClockPlaSpec ClockPlaSlimSpec (CONCAT dir "ClockPla")
				30 30 "ClockPlaPieces"))
    (if (MEMB (QUOTE op)
		  pla)
	then (MakePlaTTFile OpPlaSpec OpPlaSlimSpec (CONCAT dir "OpPla")
				22 22 "OPPlaPieces"))
    (if (MEMB (QUOTE misc)
		  pla)
	then (MakePlaTTFile MiscPlaSpec MiscPlaSlimSpec (CONCAT dir "MiscPla")
				30 30 "MiscPlaPieces"))
    (if (MEMB (QUOTE ucode)
		  pla)
	then (MakeFoldPlaTTFile NIL RomPlaSlimSpec (CONCAT dir "UCodeRom")
				    32 32 "RomPieces"])

(MakeSlimFile
  [LAMBDA (plaSpec OutputSpec file)                          (* agb: "19-Feb-86 20:48")
    (PROG (inLst outLst x)
	    (SETQ outFile (OUTPUT (OUTFILE file)))
	    [SETQ inLst (for i in (CAR OutputSpec)
			     collect (LIST (CAR i)
					       (IPLUS (CADDR i)
							(CADR (ASSOC (CADR i)
									 (CAR plaSpec]
	    [SETQ outLst (for i in (CADR OutputSpec)
			      collect (LIST (CAR i)
						(IPLUS (CADDR i)
							 (CADR (ASSOC (CADR i)
									  (CADR plaSpec]
	    (for i in inLst do (printout outFile (CAR i)
					       " b" T))
	    (printout outFile "*" T)
	    (for i in outLst do (printout outFile (CAR i)
						" b" T))
	    (printout outFile "*" T)
	    (for term in (CADDR plaSpec) as n from 0
	       do (for outLine in outLst when (NEQ 0 (LOADBYTE (CADDR term)
									   (CADR outLine)
									   1))
		       do (printout outFile (CAR outLine)
				      " = ")
			    (SETQ firstElt T)
			    [for inLine in inLst
			       do (SETQ vl (LOADBYTE (CAR term)
							   (CADR inLine)
							   1))
				    (SETQ vl2 (LOADBYTE (CADR term)
							    (CADR inLine)
							    1))
				    (if (NEQ 0 vl2)
					then (if firstElt
						   then (SETQ firstElt NIL)
						 else (PRINTOUT outFile " * "))
					       (if (EQ 0 vl)
						   then (PRINTOUT outFile "-"))
					       (PRINTOUT outFile (CAR inLine]
			    (printout outFile " ;" T)))
	    (PRINTOUT outFile "*;" T)
	    (CLOSEF outFile])

(SearchNameList
  [LAMBDA (item list nbr)                                    (* agb: "31-May-86 14:36")
    (PROG (a)
	    (if (NOT list)
		then (RETURN (LIST item 0)))
	    [SETQ a (for i in list thereis (AND (EQUAL item (CAR i))
							  (GEQ nbr (CADDDR i))
							  (ILESSP nbr (PLUS (CADDDR i)
										(CADDR i]
	    (if (NOT a)
		then (HELP))
	    (RETURN a])

(GetPlaField
  [LAMBDA (val loc field)                                    (* agb: "31-May-86 15:19")
    (if (NUMBERP val)
	then (LOADBYTE val loc 1)
      else (LOADBYTE (OZ (RECORDACCESS field val MiDecl))
			 loc 1])
)

(RPAQQ ClockPlaSlimSpec (((RESET @Reset 0)
			    (HOLD #$Hold 0)
			    (@#FAULT @#Fault 0)
			    (#UCYCLE-0 Cycle 0)
			    (#UCYCLE-1 Cycle 1)
			    (#UCYCLE-2 Cycle 2)
			    (@#VMREFILL @#VMRefill 0)
			    (@CLOCKSTATE-3 @ClockState 3)
			    (@CLOCKSTATE-2 @ClockState 2)
			    (@CLOCKSTATE-1 @ClockState 1)
			    (@CLOCKSTATE-0 @ClockState 0))
			   ((@NCLOCKSTATE-0 @NClockState 0)
			    (@NCLOCKSTATE-1 @NClockState 1)
			    (@NCLOCKSTATE-2 @NClockState 2)
			    (@NCLOCKSTATE-3 @NClockState 3)
			    (@MICROP @Micro 0)
			    (@FIRSTCY+ @FirstCy 0)
			    (@SECONDCY+ @SecondCy 0)
			    (@OPP @Op 0)
			    (@MEMREAD+ @MemRead 0)
			    (@WRITE+ @Write 0)
			    (@FIRSTCYP @FirstCy 0)
			    (@MEMDIR+ @MemDir 0)
			    (@CASH+ @CasH 0)
			    (@READ+ @Read 0)
			    (@MEMCY+ @MemCy 0)
			    (@WRITE-VMM+ @Write-VMM 0)
			    (@READP @Read 0)
			    (@DORESET+ @DoReset 0)
			    (@WRITE@ @Write 0)
			    (@MEMDIR@ @MemDir 0)
			    (@READ@ @Read 0)
			    (@MEMREAD@ @MemRead 0)
			    (@MEMREADP @MemRead 0)
			    (@MEMWRITE@ @MemWrite 0)
			    (@QUAD-0@ @Quad 0)
			    (HOLDA@ @HoldA 0 T)
			    (@QUAD-1@ @Quad 1))))

(RPAQQ MiscPlaSlimSpec (((#UMISC-0 (#MIR Misc)
				     0)
			   (#UMISC-1 (#MIR Misc)
				     1)
			   (#UMISC-2 (#MIR Misc)
				     2)
			   (#UMISC-3 (#MIR Misc)
				     3)
			   (#UMISC-4 (#MIR Misc)
				     4))
			  ((@RESETMEMLOCK~ @ResetMemLock~ 0)
			   (@SETMEMLOCK~ @SetMemLock~ 0)
			   (@SETOUTPUTINTERRUPT~ @SetOutputInt~ 0)
			   (@RESETOUTPUTINTERRUPT~ @ResetOutputInt~ 0)
			   (@SETREFCNT~ @SetRefCnt~ 0)
			   (@RESETREFCNT~ @ResetRefCnt~ 0)
			   (@SETSTACKREFILL~ @SetStackRefill~ 0)
			   (@RESETSTACKREFILL~ @ResetStackRefill~ 0)
			   (@RESETINITIALREFILL~ @ResetInitialRefill~ 0)
			   (@SETINITIALREFILL~ @SetInitialRefill~ 0)
			   (@SETINTERRUPTENABLE~ @SetInterruptEnable~ 0)
			   (@RESETINTERRUPTENABLE~ @ResetInterruptEnable~ 0)
			   (@RESETINTERRUPT~ @ResetInterrupt 0 T)
			   (@OPLENGTH=0 @OpLength=0 0)
			   (@RESETREFRESH~ @ResetRefresh 0 T)
			   (@RESET-VMMA @Reset-VMM 0)
			   (@WRITEOCTALA~ @WriteOctal 0 T))))

(RPAQQ OpPlaSlimSpec (((+DORESET *DoReset 0)
			 (#INTERRUPT #Interrupt 0)
			 (#$REFCNT #$RefCnt 0)
			 (#REFRESH #$Refresh 0)
			 (#$STACKREFILL #$StackRefill 0)
			 (#OPCODE-0 #Opcode 0)
			 (#OPCODE-1 #Opcode 1)
			 (#OPCODE-2 #Opcode 2)
			 (#OPCODE-3 #Opcode 3)
			 (#OPCODE-4 #Opcode 4)
			 (#OPCODE-5 #Opcode 5)
			 (#OPCODE-6 #Opcode 6)
			 (#OPCODE-7 #Opcode 7)
			 (#FRAMESFULL #FramesFull 0)
			 (#FRAMESEMPTY #FramesEmpty 0)
			 (#REFILLRQ #RefillRq 0))
			((#OPLENGTH-2 #OpLength 2)
			 (#OPLENGTH-1 #OpLength 1)
			 (#OPLENGTH-0 #OpLength 0)
			 (#FORCENEWOP #ForceNewOp 0)
			 (#MODSTARTADDR #ModStartAddr 0)
			 (#MODSTARTADDR~ #ModStartAddr 0 T)
			 (#STARTADDR-0 #StartAddr 0)
			 (#STARTADDR-1 #StartAddr 1)
			 (#STARTADDR-2 #StartAddr 2)
			 (#STARTADDR-3 #StartAddr 3)
			 (#STARTADDR-4 #StartAddr 4)
			 (#STARTADDR-5 #StartAddr 5)
			 (#STARTADDR-6 #StartAddr 6)
			 (#STARTADDR-7 #StartAddr 7))))

(RPAQQ RomPlaSlimSpec (((#UPC-7 Addr 7)
			  (#UPC-6 Addr 6)
			  (#UPC-5 Addr 5)
			  (#UPC-4 Addr 4)
			  (#UPC-3 Addr 3)
			  (#UPC-2 Addr 2)
			  (#UPC-1 Addr 1))
			 ((#UNEXTINSTA-0 NextInstA 0)
			  (#UNEXTINSTB-0 NextInstB 0)
			  (#UNEXTINSTA-1 NextInstA 1)
			  (#UNEXTINSTB-1 NextInstB 1)
			  (#UNEXTINSTA-2 NextInstA 2)
			  (#UNEXTINSTB-2 NextInstB 2)
			  (#UNEXTINSTA-3 NextInstA 3)
			  (#UNEXTINSTB-3 NextInstB 3)
			  (#UNEXTINSTA-4 NextInstA 4)
			  (#UNEXTINSTB-4 NextInstB 4)
			  (#UNEXTINSTA-5 NextInstA 5)
			  (#UNEXTINSTB-5 NextInstB 5)
			  (#UNEXTINSTA-6 NextInstA 6)
			  (#UNEXTINSTB-6 NextInstB 6)
			  (#UNEXTINSTA-7 NextInstA 7)
			  (#UNEXTINSTB-7 NextInstB 7)
			  (#UNEXTINSTA-8 NextInstA 10Q)
			  (#UNEXTINSTB-8 NextInstB 10Q)
			  (#UCONDCODE-6 CondCode 6)
			  (#UCWRITE~ CWrite 0 T)
			  (#UCONDCODE-5 CondCode 5)
			  (#UTOS' Tos' 0)
			  (#UARG'-0 Arg' 0)
			  (#UARG'-1 Arg' 1)
			  (#UK-8 K 10Q)
			  (#UK-7 K 7)
			  (#UK-6 K 6)
			  (#UK-5 K 5)
			  (#UK-4 K 4)
			  (#UK-3 K 3)
			  (#UK-2 K 2)
			  (#UK-1 K 1)
			  (#UK-0 K 0)
			  (#UNEWBOTCXT-1 NewBotCxt 1)
			  (#UNEWBOTCXT-0 NewBotCxt 0)
			  (#UNEWTOPCXT-1 NewTopCxt 1)
			  (#UNEWTOPCXT-0 NewTopCxt 0)
			  (#UNEWTOS-0 NewTos 0)
			  (#UNEWTOS-2 NewTos 2)
			  (#UNEWTOS-1 NewTos 1)
			  (#UNEWARG2-1 NewArg2 1)
			  (#UNEWARG2-0 NewArg2 0)
			  (#UNEWARG-0 NewArg 0)
			  (#UNEWARG-2 NewArg 2)
			  (#UNEWARG-1 NewArg 1)
			  (#UMUXRDSEL-0 MuxRdSel 0)
			  (#UMUXRDSEL-2 MuxRdSel 2)
			  (#UMUXRDSEL-1 MuxRdSel 1)
			  (#UWCXT-0 WCxt 0)
			  (#UWCXT-1 WCxt 1)
			  (#UWCXT-2 WCxt 2)
			  (#URCXT-2 RCxt 2)
			  (#URCXT-1 RCxt 1)
			  (#URCXT-0 RCxt 0)
			  (#UCONDCODE-0 CondCode 0)
			  (#UCONDCODE-1 CondCode 1)
			  (#UWADDR-0 Waddr 0)
			  (#UWADDR-1 Waddr 1)
			  (#URADDR-1 Raddr 1)
			  (#UWADDR-2 Waddr 2)
			  (#URADDR-0 Raddr 0)
			  (#URADDR-2 Raddr 2)
			  (#UDSWAP Dswap 0)
			  (#UCONDCODE-2 CondCode 2)
			  (#UCONDCODE-4 CondCode 4)
			  (#UCONDCODE-3 CondCode 3)
			  (#UW2ADDR-2 W2addr 2)
			  (#UW2ADDR-1 W2addr 1)
			  (#UW2ADDR-0 W2addr 0)
			  (#UEUOP-5 EUop 5)
			  (#UEUOP-4 EUop 4)
			  (#UMISC-0 Misc 0)
			  (#UMISC-1 Misc 1)
			  (#UMISC-2 Misc 2)
			  (#UMISC-3 Misc 3)
			  (#UMISC-4 Misc 4)
			  (#UCYCLE-0 Cycle 0)
			  (#UCYCLE-1 Cycle 1)
			  (#UCYCLE-2 Cycle 2)
			  (#URD2ADDR-0 RD2addr 0)
			  (#URD2ADDR-1 RD2addr 1)
			  (#URD2ADDR-2 RD2addr 2)
			  (#UEUOP-2 EUop 2)
			  (#URD1ADDR-1 RD1addr 1)
			  (#UTAG-0 Tag 0)
			  (#UTAG-1 Tag 1)
			  (#UEUOP-3 EUop 3)
			  (#UEUOP-1 EUop 1)
			  (#URD1ADDR-0 RD1addr 0)
			  (#UEUOP-0 EUop 0))))
(* * Cond Code Generation)

(DEFINEQ

(BuildCondCode
  [LAMBDA (fileName)                                         (* agb: " 2-Jun-86 18:22")
    (PROG (file)
	    (OR fileName (SETQ fileName (QUOTE {ERIS}<Tamarin>Pla>CondCode.spec)))
	    (SETQ file (OPENFILE fileName (QUOTE OUTPUT)))
	    (for cc in CondALst
	       do [for n from 31 to 0 do (PRINTOUT file (FindCodeLetter
							       (LOADBYTE (fetch (CondCode D1)
									      of cc)
									   n 1)
							       (LOADBYTE (fetch (CondCode nD1)
									      of cc)
									   n 1)
							       (LOADBYTE (fetch (CondCode D2)
									      of cc)
									   n 1)
							       (LOADBYTE (fetch (CondCode nD2)
									      of cc)
									   n 1)
							       (LOADBYTE (fetch (CondCode D1xorD2)
									      of cc)
									   n 1]
		    (PRINTOUT file T))
	    (CLOSEF file])

(FindCodeLetter
  [LAMBDA (d1 nd1 d2 nd2 d1xord2)                            (* agb: " 2-Jun-86 18:31")
    (PROG (v)
	    (SETQ v (LOGOR (LLSH d1 4)
			       (LLSH nd1 3)
			       (LLSH d2 2)
			       (LLSH nd2 1)
			       d1xord2))
	    (RETURN (SELECTQ v
				 (0 (QUOTE A))
				 (1 (QUOTE B))
				 (2 (QUOTE C))
				 (4 (QUOTE D))
				 (8 (QUOTE E))
				 (10 (QUOTE F))
				 (12 (QUOTE G))
				 (16 (QUOTE H))
				 (18 (QUOTE I))
				 (20 (QUOTE J))
				 (HELP])
)
(PUTPROPS GENERATETAM COPYRIGHT ("Xerox Corporation" 3702Q))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1532Q 22743Q (BuildMux 1544Q . 2134Q) (FindLineName 2136Q . 3275Q) (MakeRegMuxSpec 
3277Q . 7534Q) (MapMuxNameToLine 7536Q . 10267Q) (MuxChipList 10271Q . 12015Q) (MakeMuxBlk 12017Q . 
17355Q) (MakeRegMux 17357Q . 22741Q)) (25105Q 47652Q (MakeDotPlaFile 25117Q . 27725Q) (MakePlaTTFile 
27727Q . 34143Q) (MakeFoldPlaTTFile 34145Q . 41100Q) (MakePlas 41102Q . 42767Q) (MakeSlimFile 42771Q
 . 46312Q) (SearchNameList 46314Q . 47243Q) (GetPlaField 47245Q . 47650Q)) (62720Q 65670Q (
BuildCondCode 62732Q . 64607Q) (FindCodeLetter 64611Q . 65666Q)))))
STOP