;       *****************************************************
TITLE 	Am2900 FAMILY  C P U  MNEMONICS JAN 12, 1982 DEW
;	*****************************************************
;
;
; ******************************************
; Am2900 FAMILY MNEMONICS - AM29CPU.DEF FILE
; ******************************************
;
; This file was created to serve as a master cpu file.  The user must
; edit it as required for his/her particular application.
;
;
;
; Anyone finding errors in this file is requested to send a marked listing
; or portion thereof to:  AMD CUSTOMER EDUCATION CENTER
;			  490-A LAKESIDE DRIVE
;		          PO BOX 453  MS#71
;		          SUNNYVALE, CA  94086
;
;
; Advanced Micro Devices reserves the right to make changes in its product
; without notice in order to improve design and performance characteristics.
; The company assumes no responsibility for the use of any circuits or programs
; described herein.
EJECT
;
;
;
 WORD 64
;
; 13 DECEMBER 1976 JRM
; UPDATED SEPT 28, 1977
; UPDATED APRIL 16, 1981 DEW
; UPDATED MAY 15, 1981 DEW
; UPDATED JAN 12, 1982 DEW
;
; 	INDEX:
;       Am2901 [1], [2], [3]
;	Am2914 [5]
;	Am2930 [6]
;	Am2932 [7]
;	Am2940 [8]
;	Am2903 [9], [10], [11], [12]
;	Am29203 [9], [11], [13], [14]
;	THREE-ADDRESS EXPANDED MEMORY SAMPLE [15], [16], [17], [18]
;	MISCELLANEOUS FIELDS
;		REGISTERS [R]
;		CARRY BIT (NOT Am2904) [19]
;	Am2910 [20]
;	Am29811 ADDED INSTRUCTION
;	Am2925 MICROPROGRAMMABLE CLOCK CYCLE SELECT + CONTROL LINES [21]
;	Am2904 SHIFT EXAMPLES
;	Am2904 STATUS REGISTER EXAMPLES
;	Am2904 CONDITION CODE OUTPUT EXAMPLES
;	MORE MISCELLANEOUS FIELDS
;		OUTPUT ENABLE
;		INSTRUCTION ENABLE
;		CONDITION CODE MUX - DATA MONITOR PROBLEM ADDITION
;	EXAMPLES OF DEF STATEMENTS - TWO ADDRESS - NONEXPANDED MEMORY
EJECT
;
; * * * * * * * * * * * * * * * * * * * * * * * *
;
; Am2901 INSTRUCTION SET
;
; * * * * * * * * * * * * * * * * * * * * * * * *
;
; Am2901 SOURCE OPERANDS (R S)		        [1]
;
AQ:	EQU	Q#0
AB:	EQU	Q#1
ZQ:	EQU	Q#2
ZB:	EQU	Q#3
ZA:	EQU	Q#4
DA:	EQU	Q#5
DQ:	EQU	Q#6
DZ:	EQU	Q#7
;
; Am2901 ALU FUNCTIONS (R FUNCTION S) 		[2]
; *** TO USE: DELETE THE .01 AND DELETE THE Am2903/29203 INSTRUCTION SETS ***
;
ADD.01:		EQU	Q#0
SUBR.01:	EQU	Q#1
SUBS.01:	EQU	Q#2
OR.01:		EQU	Q#3
AND.01:		EQU	Q#4
NOTRS.01:	EQU	Q#5
EXOR.01:	EQU	Q#6
EXNOR.01:	EQU	Q#7
;
; Am2901 DESTINATION CONTROL   			[3]
;
QREG.01:	EQU	Q#0
NOP.01:		EQU	Q#1
RAMA.01:	EQU	Q#2
RAMF.01:	EQU	Q#3
RAMQD.01:	EQU	Q#4
RAMD.01:	EQU	Q#5
RAMQU.01:	EQU	Q#6
RAMU.01:	EQU	Q#7  
;
EJECT
;
;
; EXAMPLE SUB STATEMENTS
;
ALU:	SUB	3VQ#0, 3VQ#0, 3VQ#1, 2VB#00     ; Am2901 FIELDS ONLY
;               SOURCE FUNCT  DEST   CARRY
;
REGS:   SUB	4VH#0, 4VH#0			; ALU REGISTER ADDRESSES
;		RA     RB
;
SAMPLE: DEF     19X, ALU, REGS, 2VB#00, 24X	; USAGE OF SUB STATEMENTS 
;		SEQ      	MUX  etc.  
;
; Although the file is written with DEF statements which include the
; very same fields, SUB statements are included here for a reference
; example.  The use of SUB statements to partially define a microword
; allows a SUB to be defined immediatly after the mnemonics of the
; individual fields.  The DEF statement may be defined after all of the
; SUB statements to which it refers are defined.  The DEF statements are then
; more readable. The comments which would appear with a DEF statement would
; then appear with the SUB statement (what the field is, what the default   
; represents, etc.).  This file has been written with both versions to
; provide a reference.  Whichever method is chosen, DOCUMENT THE STATEMENTS.
;
; NOTE THAT, if the sequencer fields had been defined, the 19X above could
; have been replaced by the sequencer SUB statement name.
EJECT
;
; * * * * * * * * * * * * * * * * 
;
; Am2914 INSTRUCTION SET  		        [5]
;
; * * * * * * * * * * * * * * * *
;
MCLR:	EQU	H#0	; MASTER CLEAR
CLRIN:	EQU	H#1	; CLEAR ALL INTERRUPTS
CLRMB:	EQU	H#2	; CLEAR INTERRUPTS FROM M-BUS
CLRMR:	EQU	H#3	; CLEAR INTERRUPTS FROM MASK REGISTER
CLRVC:	EQU	H#4	; CLEAR INTERRUPT FROM LAST VECTOR READ
RDVC:	EQU	H#5	; READ VECTOR
RDSTA:	EQU	H#6	; READ STATUS REGISTER
RDM:	EQU	H#7	; READ MASK REGISTER
SETM:	EQU	H#8	; SET MASK REGISTER
LDSTA:	EQU	H#9	; LOAD STATUS REGISTER
BCLRM:	EQU	H#A	; BIT CLEAR MASK REGISTER
BSETM:	EQU	H#B	; BIT SET MASK REGISTER
CLRM:	EQU	H#C	; CLEAR MASK REGISTER
DISIN:	EQU	H#D	; DISABLE INTERRUPT REQUEST
LDM:	EQU	H#E	; LOAD MASK REGISTER
ENIN:	EQU	H#F	; ENABLE INTERRUPT REQUEST
;
EJECT
; * * * * * * * * * * * * * * * * * * 
;
; Am2930 PROGRAM CONTROL UNIT   		[6]
;
; * * * * * * * * * * * * * * * * * *
;
; NON-CONDITIONAL INSTRUCTIONS
;
PRST:	EQU	5H#00:	; RESET
FPC:	EQU	5H#01:	; FETCH PC
FR:	EQU	5H#02:	; FETCH R
FD:	EQU	5H#03:	; FETCH D
FRD:	EQU	5H#04:	; FETCH R PLUS D
FPD:	EQU	5H#05:	; FETCH PC PLUS D
FPR:	EQU	5H#06:	; FETCH PC PLUS R
FSD:	EQU	5H#07:	; FETCH S PLUS D
FPLR:	EQU	5H#08:	; FETBH PC, LOAD R
FRDR:	EQU	5H#09:	; FETCH R PLUS D, LOAD R
PLDR:	EQU	5H#0A:	; LOAD R
PSHP:	EQU	5H#0B:	; PUSH PC
PSHD:	EQU	5H#0C:	; PUSH D
POPS:	EQU	5H#0D:	; POP S
POPP:	EQU	5H#0E:	; POP PC
PHLD:	EQU	5H#0F:	; HOLD
; 
; CONDITIONAL INSTRUCTIONS - FAIL TEST, EXECUTE FPC
; 
JMPR:	EQU	5H#10:	; JUMP R
JMPD:	EQU	5H#11:	; JUMP D
JMPZ:	EQU	5H#12:	; JUMP ZERO
JPRD:	EQU	5H#13:	; JUMP R PLUS D
JPPD:	EQU	5H#14:	; JUMP PC PLUS D
JPPR:	EQU	5H#15:	; JUMP PC PLUS R
JSBR:	EQU	5H#16:	; JUMP SUBROUTINE R
JSBD:	EQU	5H#17:	; JUMP SUBROUTINE D
JSBZ:	EQU	5H#18:	; JUMP SUBROUTINE ZERO
JSRD:	EQU	5H#19:	; JUMP SUBROUTINE R PLUS D
JSPD:	EQU	5H#1A:	; JUMP SUBROUTINE PC PLUS D
JSPR:	EQU	5H#1B:	; JUMP SUBROUTINE PC PLUS R
RTS:	EQU	5H#1C:	; RETURN S
RTSD:	EQU	5H#1D:	; RETURN S PLUS D
CHLD:	EQU	5H#1E:	; HOLD
PSUS:	EQU	5H#1F:	; SUSPEND
;
EJECT
; * * * * * * * * * * * * * * * * * *
;
; Am2932 PROGRAM CONTROL UNIT			[7]
;
; * * * * * * * * * * * * * * * * * *
;
; TO USE: DELETE THE .32  FROM Am2932 MNEMONICS IF NEEDED
; AND DELETE THE Am2930 INSTRUCTION SET
;
PRST.32:	EQU	H#0   	; RESET
PSUS.32:	EQU	H#1   	; SUSPEND
PSHD.32:	EQU	H#2   	; PUSH D
POPS.32:	EQU	H#3   	; POP STACK
FPC.32:		EQU	H#4   	; FETCH PC
JMPD.32:	EQU	H#5   	; JUMP D
PSHP.32:	EQU	H#6   	; PUSH PC
RTS.32:		EQU	H#7   	; RETURN STACK
FR.32:		EQU	H#8   	; FETCH R
FPR.32:		EQU	H#9   	; FETCH PC PLUS R
FPLR.32:	EQU	H#A   	; FETCH PC, LOAD R
JMPR.32:	EQU	H#B   	; JUMP R
JPPR.32:	EQU	H#C   	; JUMP PC PLUS R
JSBR.32:	EQU	H#D   	; JUMP SUBROUTINE R
JSPR.32:	EQU	H#E   	; JUMP SUBROUTINE PC PLUS R
PLDR.32:	EQU	H#F   	; LOAD R
EJECT
; * * * * * * * * * * * * * * * * * * * 
;
; Am2940 DMA CONTROL UNIT  			[8]
;
; * * * * * * * * * * * * * * * * * * * 
; INSTRUCTIONS
;
WRCR:	EQU	Q#0	; WRITE CONTROL REGISTER
RDCR:	EQU	Q#1	; READ CONTROL REGISTER
RDWC:	EQU	Q#2	; READ WORD COUNTER
RDAC:	EQU	Q#3	; READ ADDRESS COUNTER
REIN:	EQU	Q#4	; REINITIALIZE COUNTERS
LDAD:	EQU	Q#5	; LOAD ADDRESS
LDWC:	EQU	Q#6	; LOAD WORD COUNT
ENCT:	EQU	Q#7	; ENABLE COUNTERS
;
; CONTROL MODE BYTE
; NOTE - BITS 3 THROUGH 7 ARE DON'T CARE
;
WC1I:	EQU	8Q#0%	; WORD COUNT EQUALS ONE, INCREMENT ADDRESS COUNTER
WCCI:	EQU	8Q#1%	; WORD COUNT COMPARE, INCREMENT ADDRESS COUNTER
ADCI:	EQU	8Q#2%	; ADDRESS COMPARE, INCREMENT ADDRESS COUNTER
WCOI:	EQU	8Q#3%	; WORD COUNTER CARRY OUT, INCREMENT ADDRESS COUNTER
WC1D:	EQU	8Q#4%	; WORD COUNT EQUALS ONE, DECREMENT ADDRESS COUNTER
WCCD:	EQU	8Q#5%	; WORD COUNT COMPARE, DECREMENT ADDRESS COUNTER
ADCD:	EQU	8Q#6%	; ADDRESS COMPARE, DECREMENT ADDRESS COUNTER
WCOD:	EQU	8Q#7%	; WORD COUNTER CARRY OUT, DECREMENT ADDRESS COUNTER
;
EJECT
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;         
; Am2903 INSTRUCTION SET
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 
; ALU SOURCE OPERANDS (EA, I0, OEB) 		[9]
; 16 REGISTER - TWO ADDRESS VERSION
;
; NOTE: USE FOR BOTH THE Am2903 AND THE Am29203 * * * 
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
;
RAMAB:   	EQU	Q#0		; RAM A PORT, RAM B PORT
RAMADB:   	EQU	Q#1		; RAM A PORT, DATA BUS B
RAMAQ:   	EQU	Q#2		; OR Q#3 - RAM A PORT, Q REGISTER
DARAMB:   	EQU	Q#4		; DATA BUS A, RAM B PORT
DADB:   	EQU	Q#5		; DATA BUS A, DATA BUS B
DAQ:   		EQU	Q#6		; OR Q#7 - DATA BUS A, Q REGISTER
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
; ALU FUNCTIONS - NORMAL MODE (I4, I3, I2, I1, I0 ALL NOT 0)
; Am2903 ONLY !  * * * TO USE, DELETE THE .03 AND TAG OR
; DELETE THE Am29203 FUNCTIONS * * *  
;						[10]
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
SPECL.03:	EQU	H#0		; I0 MUST BE LOW
HIGH.03:	EQU	H#0		; I0 MUST BE HIGH (Q REGISTER SELECT)
SUBR.03:	EQU	H#1		; F = S - R - 1 + Cin
SUBS.03:	EQU	H#2		; F = R - S - 1 + Cin
ADD.03:		EQU	H#3		; F = R + S + Cin
INCRS.03:	EQU	H#4		; F = S + Cin
INCSNON.03:     EQU	H#5		; F = NOT S + Cin
INCRR.03:	EQU	H#6		; F = R + Cin
INCRNON.03:	EQU	H#7		; F = NOT R + Cin
LOW.03:		EQU	H#8		; F = LOW
NOTRS.03:	EQU	H#9		; F = NOT R AND S
EXNOR.03:	EQU	H#A		; F = R EXNOR S
EXOR.03:	EQU	H#B		; F = R EXOR S
AND.03:		EQU	H#C		; F = R AND S
NOR.03:		EQU	H#D		; F = R NOR S
NAND.03:	EQU	H#E		; F = R NAND S
OR.03:		EQU	H#F		; F = R OR S
EJECT
; * * * * * * * * * * * * * * * * * * * * * * *
;
; ALU DESTINATION CONTROL ( I8 - I7 - I6 - I5)		[11]
;     NORMAL FUNCTIONS
;
; NOTE: USE FOR BOTH THE Am2903 AND THE Am29203 * * * *
;
; * * * * * * * * * * * * * * * * * * * * * * *
;
RAMDA:		EQU	H#0		; F TO RAM, ARITHMETIC DOWN SHIFT
RAMDL:		EQU	H#1		; F TO RAM, LOGICAL DOWN SHIFT
RAMQDA:		EQU	H#2		; DOUBLE PRECISION ARITHMETIC DOWN SHIFT
RAMQDL: 	EQU     H#3		; DOUBLE PRECISION LOGICAL DOWN SHIFT
RAM:		EQU	H#4		; F TO RAM WITH PARITY
QD:		EQU	H#5		; F TO Y, DOWN SHIFT Q
LOADQ:		EQU	H#6		; F TO Q WITH PARITY
RAMQ:		EQU	H#7		; F TO RAM AND Q WITH PARITY
RAMUPA: 	EQU	H#8		; F TO RAM, ARITHMETIC UP SHIFT
RAMUPL: 	EQU	H#9		; F TO RAM, LOGICAL UP SHIFT
RAMQUPA:	EQU	H#A		; DOUBLE PRECISION ARITHMETIC UP SHIFT
RAMQUPL:	EQU	H#B		; DOUBLE PRECISION LOGICAL UP SHIFT
YBUS:		EQU	H#C		; F TO Y ONLY
QUP:		EQU	H#D		; F TO Y, UP SHIFT Q
SIGNEXT:	EQU	H#E		; SIO0 TO Yi
RAMEXT: 	EQU	H#F		; F TO Y, SIGN EXTEND LEAST SIG. BYTE
EJECT
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; SPECIAL FUNCTIONS (I8-I7-I6-I5)		[12]      
;
;
; Am2903 FUNCTIONS ONLY
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
MULT.03:	EQU	H#0		; UNSIGNED MULTIPLY
TWOMULT.03:	EQU	H#2 		; TWO'S COMPLEMENT MULTIPLY
TWOLAST.03:	EQU	H#6 		; TWO'S COMPLEMENT MULTIPLY LAST STEP
INCRMNT.03:	EQU	H#4 		; INCREMENT BY 1 + Cin
SGNTWO.03:	EQU	H#5 		; SIGN MAGNITUDE-TWO'S COMPL CONVERSION
SLN.03:		EQU	H#8 		; SINGLE LENGTH NORMALIZE
DLN.03:		EQU	H#A 		; DOUBLE LENGTH NORMALIZE
DIVFRST.03:	EQU	H#A 		; TWO'S COMPLEMENT DIVIDE FIRST STEP
DIVIDE.03: 	EQU	H#C 		; TWO'S COMPLEMENT DIVIDE MIDDLE STEPS
DIVLAST.03:	EQU	H#E 		; TWO'S COMPLEMENT DIVIDE LAST STEP
;
EJECT
; **********************************************************************
; NEW!   NEW!   NEW!   NEW!   NEW!   NEW!   NEW!   NEW!   NEW!   NEW!
;
; Am29203 INSTRUCTION SET - 5/15/81 - DEW
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; Am29203 SOURCE SELECT - SEE Am2903 SOURCE SELECTION (SAME)
; TWO - ADDRESS OPERATION ONLY
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
; Am29203 ALU FUNCTIONS - NORMAL MODE ( I4, I3, I2, I1, I0 ALL NOT 0 )
;						[13]
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; NOTE DIFFERENCE FROM Am2903 - ** FIVE ** INSTRUCTION FIELDS USED
; IN THE DATA SHEET TABLE - THEREFORE RESTRICTIONS ON THE SOURCE SELECTION
; APPLY.   THE FUNCTIONS ARE GROUPED ACCORDING TO THE RESTRICTION
;
;
; * * THE FOLLOWING DO NOT HAVE RESTRICTIONS ON THE SOURCE SELECTION * *
;
SUBR:		EQU	H#1    		; Fi = Si - Ri - 1 + Cin
SUBS:		EQU	H#2    		; Fi = Ri - Si - 1 + Cin
ADD:		EQU	H#3    		; Fi = Ri + Si + Cin
INCRS:		EQU	H#4    		; Fi = Si + Cin
INCRSNON:	EQU	H#5    		; Fi = ~Si + Cin
NOTRS:		EQU	H#9    		; Fi = NOT Ri AND Si
EXNOR:		EQU	H#A    		; Fi = Ri EXNOR Si
EXOR:		EQU	H#B    		; Fi = Ri EXOR Si
AND:		EQU	H#C    		; Fi = Ri AND Si
NOR:		EQU	H#D    		; Fi = Ri NOR Si
NAND:		EQU	H#E    		; Fi = Ri NAND Si
OR:		EQU	H#F     	; Fi = Ri OR Si
;    
; * * THE FOLLOWING REQUIRE THAT RAMAQ OR DAQ BE THE SELECTED SOURCE * *
;
HIGH:		EQU	H#0		; Fi = HIGH
INCRR:		EQU	H#6		; Fi = Ri + Cin
INCRNON:	EQU	H#7		; Fi = ~Ri + Cin
LOW:		EQU	H#8		; Fi = LOW
;
; * * THE FOLLOWING REQUIRE THAT Q IS ** NOT ** IN THE SELECTED SOURCE * *
;
SPECL:		EQU	H#0		; SPECIAL FUNCTIONS
RESRVD.1:	EQU	H#6		; RESERVED FOR LATER USE
RESRVD.2:	EQU	H#7		; RESERVED FOR LATER USE
SPECIL.2:	EQU	H#8		; SPECIAL FUNCTIONS (MULTI-BCD)
EJECT
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
; DESTINATION CONTROL - SEE Am2903 DESTINATION (SAME)
;
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; Am29203 SPECIAL FUNCTIONS			[14]
;						
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; INSTRUCTION LINES I8, I7, I6, I5
;
; THE FOLLOWING ARE USED WITH SPECL:
;
MULT:	 	EQU	H#0	; UNSIGNED MULTIPLY
TWOMULT:	EQU	H#2	; TWO'S COMPLEMENT MULTIPLY
TWOLAST:	EQU	H#6	; TWO'S COMPLEMENT MULTIPLY - LAST STEP
DECRMNT:	EQU	H#3	; DECREMENT BY 1 OR 2
INCRMNT:	EQU	H#4	; INCREMENT BY 1 OR 2
SGNTWO:		EQU	H#5	; SIGN MAGNITUDE-TWO'S COMPLEMENT CONVERSION
SLN:		EQU	H#8	; SINGLE LENGTH NORMALIZE
DLN:		EQU	H#A	; DOUBLE LENGTH NORMALIZE
DIVFRST:	EQU	H#A	; TWO'S COMPLEMENT DIVIDE - FIRST STEP
DIVIDE:		EQU	H#C	; TWO'S COMPLEMENT DIVIDE - MIDDLE STEPS
DIVLAST:	EQU	H#E	; TWO'S COMPLEMENT DIVIDE - LAST STEP
BCD.BIN:	EQU	H#1	; BCD TO BINARY CONVERSION
BCD.DIV2:	EQU	H#7	; BCD DIVIDE BY TWO
BIN.BCD:	EQU	H#9	; BINARY TO BCD CONVERSION
BCD.ADD:	EQU	H#B	; BCD ADD
BCD.SUBS:	EQU	H#D	; BCD SUBTRACT Fi = Ri - Si - 1 + Cin [BCD]
BCD.SUBR:	EQU	H#F	; BCD SUBTRACT Fi = Si - Ri - 1 + Cin [BCD]
;
; THE FOLLOWING ARE USED WITH SPECIL.2:
;
MULTIBCD:	EQU	H#1	; MULTIPRECISION BCD TO BINARY CONVERSION
MULTIBIN:	EQU	H#9	; MULTIPRECISION BINARY TO BCD CONVERSION
;
EJECT
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;  
;
; DEFINITION FILE FOR FIGURE 29, PAGE 2-57, 1980 DATA BOOK
;
; EXPANDED MEMORY FOR THE Am2903 USING THE Am20705
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
; ONLY THE SOURCE FIELDS CHANGE - EXPANDED
; A THIRD ADDRESS FIELD WAS ALSO ADDED (ADDRESS C)
;
;
;
; SOURCE OPERANDS			[15]
; ADDED A ADDRESS BITS (A6-A5-A4)
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
;
AINALU:	EQU	Q#0   		; A ADDRESSES 2903 REGISTERS
AIS7051:EQU	Q#1		; A ADDRESSES FIRST 29705 ADDITION
AIS7052:EQU	Q#2		; A ADDRESSES SECOND 29705 ADDITION
ACONST:	EQU	Q#3		; A ADDRESSES CONSTANT PROM
ABUS:	EQU	Q#4		; A FROM BUS
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; ADDED B ADDRESS BITS (B5-B4)		[16]
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
;
BINALU:	EQU	B#00		; B ADDRESSES 2903 REGISTERS
BIS7051:EQU	B#01		; B ADDRESSES FIRST 29705 ADDTION
BIS7052:EQU	B#10		; B ADDRESSES SECOND 29705 ADDITION
BBUS:	EQU	B#11		; B FROM BUS
;
EJECT
; * * * * * * * * * * * * * * * * * * * * * * * *
;
; THREE ADDRESS OPERATION - THIRD ADDRESS FIELD
; ADDED C ADDRESS BITS (C5-C4)		[17]
; * * * * * * * * * * * * * * * * * * * * * * * *
;
;
CIN2903:EQU	B#00		; C ADDRESSES 2903 REGISTERS
CIS7051:EQU	B#01		; C ADDRESSES FIRST 29705 ADDITION
CIS7052:EQU	B#10		; C ADDRESSES SECOND 29705 ADDITION
CBUS:	EQU	B#11		; C TO B BUS OUT
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; I0 SOURCE SELECT FIELD REPLACES EA-I0-OEB THREE-BIT FIELD
;					[18]
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;  
QREGSEL:EQU	B#1		; SOURCE IS Q REGISTER
NONQREG:EQU	B#0		; SOURCE IS RAMB OR B.BUS
;
EJECT
; * * * * * * * * * * * * * * * * * * * * * 
;
; MISCELLANEOUS FIELDS
;
; REGISTERS				[R]
; * * * * * * * * * * * * * * * * * * * * *
;
R0:		EQU	H#0
R1:		EQU	H#1
R2:		EQU	H#2
R3:		EQU	H#3
R4:		EQU	H#4
R5:		EQU	H#5
R6:		EQU	H#6
R7:		EQU	H#7
R8:		EQU	H#8
R9:		EQU	H#9
R10:		EQU	H#A
R11:		EQU	H#B
R12:		EQU	H#C
R13:		EQU	H#D
R14:		EQU	H#E
R15:		EQU	H#F
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
; CARRY BIT (2 BITS FOR NOW) 		[19]
;
; * * * * * * * * * * * * * * * * * * * * * * * * * *
;
;
CARRY:		EQU	B#01 
NOCARRY:	EQU	B#00		;IMAGINATIVE!
IC:		EQU	B#10		; Cin is Cout
Z:		EQU	B#11		; Z is Cin
;
EJECT
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
; Am2910 MICROPROGRAM CONTROLLER INSTRUCTION SET [20]
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
;
JZ:		EQU	H#0		; RESET STACK, MICROPC, ADDRESS
CJS:		EQU	H#1		; COND JUMP SUBROUTINE, PUSH STACK
JMAP:		EQU	H#2		; UNCOND JUMP TO MEMORY MAP (Di)
CJP:		EQU	H#3		; COND JUMP PIPELINE 
PUSH:		EQU	H#4		; PUSH STACK, LOAD REG MAYBE, CONT
JSRP:		EQU	H#5		; JUMP SUB FROM REG (F) OR PIPE(T)
CJV:		EQU	H#6		; COND JUMP TO VECTOR INTER (Di)
JRP:		EQU	H#7		; JUMP TO REG (F) OR PIPE (T)
RFCT:		EQU	H#8		; DO LOOP REPEAT UNTIL CTR=0 - STACK
RPCT:		EQU	H#9		; DO LOOP UNTIL CTR=0 - PIPE
CRTN:		EQU	H#A		; COND RETURN, POP STACK (T)
CJPP:		EQU	H#B		; COND JUMP PIPELINE, POP STACK
LDCT:		EQU	H#C		; LOAD REGISTER, CONTINUE
LOOP:		EQU	H#D		; DO LOOP UNTIL TEST=T - STACK
CONT:		EQU	H#E		; CONTINUE
TWB:		EQU	H#F		; THREE WAY (DEAD MAN TIMER!)
;
; * * * * * * * * * * * * * * * * * 
;
; Am29811 INSTRUCTION SET
;
; * * * * * * * * * * * * * * * * *
;
; NOTE: THE SAME AS THE Am2910 EXCEPT TWB IS REPLACED BY JP
; AND ALL TESTS ARE ACTIVE HIGH RATHER THAN ACTIVE LOW
;
JP:		EQU	H#F		; UNCONDITIONAL JUMP PIPELINE
;
;
; EXAMPLE SEQUENCER SUB STATEMENT
;
SEQR:	 SUB	4VH#E, 3VQ#0,  12V$X	;
; 		INSTR  MUX     ADDR
;		CONT	?	#
;
;
;
EJECT
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; Am2925 CYCLE LENGTH SELECT 			[21]
; System Clock Generator and Driver
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; THE FOLLOWING ARE THE CYCLE LENGTH CODES  (PRELIM)
;							EXAMPLE CYCLE (1 OF 4)
CLA:	EQU	Q#0	; 3 CLOCK PERIODS		100ns AT 30MHz
CLB:	EQU	Q#1	; 4				160ns AT 25MHz
CLC:	EQU	Q#5	; 5				200ns AT 25MHz
CLD:	EQU	Q#7	; 6				200ns AT 30MHz
CLE:	EQU	Q#3	; 7				280ns AT 25MHz
CLF:	EQU	Q#2	; 8				320ns AT 25MHz
CLG:	EQU	Q#6	; 9				300ns AT 30MHz
CLH:	EQU	Q#4	; 10 CLOCK PERIODS		322ns AT 31MHz
;					(max crystal frequency is 311MHz)
;
; OTHER CONTROL LINES FOR THE Am2925   
; INCOMPLETELY DEFINED AT PRESENT (IN THIS FILE)
;
FIRST.25:	EQU	B#1		;
LAST.25:	EQU	B#0		;
;
HALT:		EQU	B#00		;
NOHALT:		EQU	B#00		;
;
SINGLSTP:	EQU	B#00		;
RUN:		EQU	B#00		;
;
WAITREQ:	EQU	B#0		;
NOWAITRQ:       EQU	B#1		;
;
READY:		EQU	B#0		;
NOTREADY:	EQU	B#1		;
;
INITIALIZE:	EQU	B#0		;
NO.INIT:	EQU	B#1		;
;
EJECT
; * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; Am2904 SHIFT INSTRUCTIONS (I9-I8-I7-I6 AND SE)
;    I10 IS TIED TO I8 OF Am2903/29203
;
; * * * * * * * * * * * * * * * * * * * * * * * * * *
;
;
; DOWN SHIFTING
;
SDZRZQ:		EQU	H#0		; Z->RN; Z->QN
SDOROQ:		EQU	H#1		; 1->RN; 1->QN
SLN.RECOVER:    EQU	H#2		; 0->RN; R0->Mc; MN->QN
DDOR:		EQU	H#3		; 1->RN; R0->QN
DDMCR:		EQU	H#4		; Mc->RN; R0->QN
DLN.RECOVER:	EQU	H#5		; MN->RN; R0->QN
DDZR:		EQU	H#6		; 0->RN; R0->QN
DDZRQMC:	EQU	H#7		; 0->RN; R0->QN; Q0->Mc
SDROTMC:	EQU	H#8		; ROT.R; R0->Mc; ROT.Q
SDROTC:		EQU	H#9		; ROT.R WITH Mc; ROT.Q
SDROT:		EQU	H#A		; ROT.R; ROT.Q
SDIC:		EQU	H#B		; Ic->RN; R0->QN
DDROTC:		EQU	H#C		; Mc->RN; R0->QN; Q0->Mc
DDROTMC:	EQU	H#D		; Q0->RN; R0->QN; Q0->Mc
DDINIOVR:	EQU	H#E		; IN EXOR IOVR -> RN; R0->QN
DDROT:		EQU	H#F		; DOUBLE PRECISION ROTATE DOWN
;
; UP SHIFTING (INCOMPLETE)
;
SURZQZ:		EQU	H#2		; R0<-0; Q0<-0
;
; SHIFT ENABLES
;
SE.EN:		EQU	B#0		; ENABLE SHIFTING
SE.DIS:		EQU	B#1		; DISABLE SHIFTING
EJECT
;
;
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Am2904 STATUS REGISTER INSTRUCTION CODES
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; MACHINE STATUS REGISTER INSTRUCTION CODES
;    I5-I4-I3-I2-I1-I0 AND EZ-EC-EN-EOVR-CEM ENABLES
; MICRO STATUS REGISTER INSTRUCTION CODES
;    I5-I4-I3-I2-I1-I0 AND CEu ENABLE
;
; THE FOLLOWING TAKES THESE ALL TOGETHER - YOU MAY WISH TO DO THIS ANOTHER WAY
;
; ORDER: 543 210 ZCNOVR CEM CEu
;        Q#  Q#  H#     B#  B#
;
ONELEVEL:	EQU   	12Q#0000	; Y -> MSR; MSR -> USR
SET.MSR:	EQU	12Q#0101	; SET MACRO STATUS ONLY
SET.USR:	EQU	12Q#0176	; SET MICRO STATUS ONLY
SWAP.REG:	EQU	12Q#0200	; MSR <--> USR
;
LOAD.MSR:	EQU	12Q#2001	; ALU STATUS -> MSR
; THE ABOVE IS ONE OF SEVERAL CODES - YOU DON'T NEED THEM ALL!
;
LOAD.USR:	EQU	12Q#2076	; ALU STATUS -> USR
; DITTO!
;
LOAD.BOTH:	EQU	12Q#2000	; ALU -> MSR, USR
; AGAIN DITTO!
;
LDINVRTM: 	EQU	12Q#3001	; ALU -> MSR; Ic INVERTED
LDINVRTU:	EQU	12Q#3076	; ALU -> USR; Ic INVERTED
LOAD.INVERT:	EQU	12Q#3000	; ALU -> MSR, USR; Ic INVERTED
;
EJECT
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
; Am2904 CONDITION CODE OUTPUT INSTRUCTION CODES
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; caution!  I5-I4-I3-I2-I1-I0 ARE ALSO USED FOR TESTING!!!!
; ENABLE TESTING VIA OEct ENABLE
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
TESTMZ:		EQU	12Q#4477  	; NO STATUS OPERATION
TESTMOVR:	EQU	12Q#4677	; NO STATUS OPERATION
TESTMC:		EQU	12Q#5277	; NO STATUS OPERATION
TESTMN:		EQU	12Q#5677	;
TEST.IOVR:	EQU	12Q#6677	;
TEST.IC:	EQU	12Q#7277	;
;
;
; TEST ENABLE
;
OECTEN:		EQU	B#0
OECTDIS:	EQU	B#1
;
;
; OUTPUT ENABLE
;
OEYEN:		EQU	B#0
OEYDIS:		EQU	B#1
;
; INSTRUCTION ENABLE
;
IEN:		EQU	B#0
IENDIS:		EQU	B#1
;
;
; CONDITIONAL CODE MULTIPLEXER (DATA MONITOR)
;
NOACK:		EQU	Q#0 
COUT:		EQU	Q#1 
PASS:		EQU	Q#7 
;
EJECT
;
; Certain of the EQU groupings are labeled by [i].  The following DEF statements
; are documented by referring to the group of mnemonics which may be substituted
; in the various variable fields.  The reference is via [i].  The DEF statements
; are also documented by providing a comment on the default value given.
;
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Am2901-BASED CPU
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
AM2901:  DEF 19X, 3VQ#1, 3VQ#0, 3VQ#1, 2VB#00, 4VH#0, 4VH#0, 26X
; DEFAULTS         AB    ADD.01 NOP.01  NOCin  R0     R0 
;		   [1]    [2]    [3]    [19]   [R]    [R]
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Am29203/2903 TWO ADDRESS OPERATION - NO EXPANDED MEMORY
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
AM29203: DEF 19X, 3VQ#0, 4VH#F, 4VH#C, 2VB#00, 4VH#0, 4VH#0, 1VB#0, 1VB#0, 22X
; DEFAULTS        RAMAB  OR     YBUS   NOCin   R0     R0     IEN    OEY.EN
;                 [9]    [13]   [11]   [19]    [R]    [R]    
;           		        [14] 
;
AM2903:  DEF 19X, 3VQ#0, 4VH#F, 4VH#C, 2VB#00, 4VH#0, 4VH#0, 1VB#0, 1VB#0, 22X
;  DEFAULTS       RAMAB  OR     YBUS   NOCin   R0     R0     IEN    OEY.EN
;                 [9]    [10]   [11]   [19]    [R]    [R]
;				[12]
;
AM2910:   DEF   4VH#E, 3VX, 12V$X, 45X
; DEFAULTS      CONT   #    #
; 		[20]    
;
;
; note: This file is written such that the AM2910, AM29203, and AM2904 DEF
; statements are overlayed in the .SRC file.  The user would add additional DEF
; definitions for his/her additional fields in the microword.  Or, the user can
; delete all DEF statements and begin anew.  The intent of this file and all
; other MASTER files is to help reduce the effort required in using AMDASM by 
; reducing the effort required to create a customized .DEF file.
;
EJECT
;
;
; ADDITIONAL EXAMPLE DEF STATEMENTS
;
;
AM2904:   DEF   42X,	12VQ#2001, 1VB#1,  1VB#0, 4VX,  1VB#1, 3X
; DEFAULTS              LOAD.MSR   OECTDIS OEYEN  X     SE.DIS
;
SHIFT:    DEF   56X,  4VX, 1B#0, 3X
;                     SHIFT SE.EN
TEST:     DEF   42X, 12VQ#7777, 1VB#0, 9X
;                    DISABLED   OECTEN
STATUS:   DEF   42X, 12VQ#2001, B#1, 1VB#0, 4X, B#1, 3X
;                    LOAD.MSR  NO CT OEYEN     SE.DIS
;
; *********************************************************************
; ADDED STATEMENTS FOR DATA MONITOR PROBLEM - USES Am2903 sans .03 **
; ( This is for the EDSYS29 class - other users should delete )
; *********************************************************************
;
NOP2903:  DEF   19X, Q#0, H#F, H#C, B#00, H#0, H#0, B#0, B#1, 22X
;
CTRL:     DEF   61X, 1VB#0, 1VB#0, 1VB#0
;                    DATAin DATAout MEMORY MAP SELECT
;                    CTRL   CTRL    FIRST QUADRANT
END
