; D1TestAsm.asm -- D1 stuff for test overlay
;	Last edited: 30 April 1980

.get "d1pe.d"

; D1TEST
.bext ShmvLp,WFLp,RFLp,ProcVALp
.bext ShmvPrint,WFRFPrint,ProcVAPrint

; MDEBUG
.bext ErrorStop

; D1CONFIG
.bext HaveControl,HaveProcL,HaveProcH,HaveMemC,HaveMemD,HaveMemX,HaveIFU
.bext CacheAMask0,CacheAMask1

; Defined here
.bext MEMMask,MEMAnalyze,MEMTST,MEMOne
.bext REGMask,REGAnalyze,REGTST,REGOne
.bext OtherNAM,OtherWID,OtherProc,OtherPrint,OtherMask,OtherTST,OtherOne
.bext NOtherTests

.txtm B

.srel

MEMMask:	.MEMMask	; Memory masks for test-all
MEMAnalyze:	.MEMAnalyze	; Memory error analysis
MEMTST:		.MEMTST		; Memory test conditions
MEMOne:		.MEMOne		; Memory 1 vec's

REGMask:	.REGMask	; Register masks for test-all
REGAnalyze:	.REGAnalyze	; Register error analysis
REGTST:		.REGTST		; Register test conditions
REGOne:		.REGOne		; Register 1 vec's

OtherNAM:	.OtherNAM	; Other test names for DataTest
OtherWID:	.OtherWID	; Other test widths
OtherProc:	.OtherProc	; Other test EveryTimeList procs
OtherPrint:	.OtherPrint	; Other test setup & print procs
OtherMask:	.OtherMask	; Other test mask DVec pointers
OtherTST:	.OtherTST	; Other test conditions
OtherOne:	.OtherOne	; Other test 1 vec's
NOtherTests:	.OtherMask-.OtherNAM

TFalse:		0
MakeIMX:	.MakeIMX
MakeIMBD:	.MakeIMBD
MakeProc16:	.MakeProc16
MakeMCR:	.MakeMCR
MakeCACHEA:	.MakeCACHEA

.nrel

; ***DO NOT REORDER TABLES--LENGTH ERROR CHECK IS MADE***

; Tables to control "Test" and "Test-All" in MTest.bcpl
; Entries are self-relative pointers to DVec's which are ValSize long
.MEMMask:
	c177400-.	; $ABSOLUTE
	c177777-.	; TPC
	c177777-.	; TLINK
	0		; OLINK (n.t.)
	cIMBD-.		; IMBD
	0		; IM (virtual n.t.)
	cIMX-.		; IMX (absolute)
	c117400-.	; ALUFM
	Proc16-.	; T
	c170000-.	; RBASE
	c177400-.	; TIOA
	c174000-.	; MEMBASE
	Proc16-.	; RM
	Proc16-.	; STK
	0		; PIPE (n.t.)
	cBR-.		; BR
	cCACHEA-.	; CACHEA
	c177777-.	; CACHED
	cMAP-.		; MAP
	c177777-.	; VM
	cIFUM-.		; IFUM
	0		; LDR (n.t.)
	0		; MDATA (n.t.)
	0		; MADDR (n.t.)
	0		; DMUX (n.t.)
	0		; DHIST (n.t.)
	0		; VH (n.t.)
	0		; MD (n.t.)
	0		; TASKN (n.t.)
	0		; DEVICE (n.t.)
	0		; STKX (n.t.)
	0		; MSTAT (n.t.)
	0		; ABS (n.t.)
	0		; ROW (n.t.)
	0		; BRX (n.t.)

.REGMask:
	c177777-.	; CPREG
	cAll-.		; MIR
	0		; IMOUT (n.t.)
	Proc16-.	; Q
	Proc16-.	; CNT
	Proc16-.	; SHC
	c140000-.	; MEMBX
	cSTKP-.		; STKP
	c170000-.	; TASK
	c170000-.	; PROCSRN
	MCRmsk-.	; MCR
	0		; CONFIG (n.t.)
	0		; PCX (n.t.)
	c14000-.	; INSSET
	0		; TESTSYNDROME (n.t.)
	0		; STROBE (n.t.)
	0		; D1OUT (n.t.)
	0		; UPTIME (n.t.)
	0		; TGLITCH (n.t.)
	0		; EVCNTA (n.t.)
	c177777-.	; EVCNTB
	0		; AATOVA (n.t.)
	cESTAT-.	; ESTAT

.MEMTST:
	TFalse		; $ABSOLUTE
	HaveControl	; TPC
	HaveControl	; TLINK
	TFalse		; OLINK
	MakeIMBD	; IMBD (Test but not TestAll)
	TFalse		; IM (virtual)
	MakeIMX		; IMX (absolute)
	HaveProcL	; ALUFM
	MakeProc16	; T
	HaveProcL	; RBASE
	HaveProcH	; TIOA
	HaveProcH	; MEMBASE
	MakeProc16	; RM
	MakeProc16	; STK
	TFalse		; PIPE
	HaveMemC	; BR
	MakeCACHEA	; CACHEA
	HaveMemD	; CACHED
	HaveMemX	; MAP
	HaveMemD	;* VM (Test but not TestAll)
	HaveIFU		; IFUM
	TFalse		; LDR
	TFalse		; MDATA
	TFalse		; MADDR
	TFalse		; DMUX
	TFalse		; DHIST
	TFalse		; VH
	TFalse		; MD
	TFalse		; TASKN
	TFalse		; DEVICE
	TFalse		; STKX
	TFalse		; MSTAT
	TFalse		; $ABS
	TFalse		; ROW
	TFalse		; BRX

.REGTST:
	HaveControl	; CPREG
	HaveControl	; MIR
	TFalse		; IMOUT
	MakeProc16	; Q
	MakeProc16	; CNT
	MakeProc16	; SHC
	HaveProcH	; MEMBX
	HaveProcL	; STKP
	HaveControl	; TASK
	HaveMemX	; PROCSRN
	MakeMCR		; MCR
	TFalse		; CONFIG
	TFalse		; PCX
	HaveIFU		; INSSET
	TFalse		; TESTSYNDROME
	TFalse		; STROBE
	TFalse		; D1OUT
	TFalse		; UPTIME
	TFalse		; TGLITCH
	TFalse		; EVCNTA
	HaveIFU		; EVCNTB
	TFalse		; AATOVA
	HaveControl	; ESTAT

.MEMAnalyze:
	NoAnal-.	; $ABSOLUTE
	NoAnal-.	; TPC
	NoAnal-.	; TLINK
	NoAnal-.	; OLINK
	NoAnal-.	; IMBD
	NoAnal-.	; IM
	NoAnal-.	; IMX
	NoAnal-.	; ALUFM
	NoAnal-.	; T
	NoAnal-.	; RBASE
	NoAnal-.	; TIOA
	NoAnal-.	; MEMBASE
	NoAnal-.	; RM
	NoAnal-.	; STK
	NoAnal-.	; PIPE
	NoAnal-.	; BR
	NoAnal-.	; CACHEA
	NoAnal-.	; CACHED
	NoAnal-.	; MAP
	NoAnal-.	; VM
	NoAnal-.	; IFUM
	NoAnal-.	; LDR
	NoAnal-.	; MDATA
	NoAnal-.	; MADDR
	NoAnal-.	; DMUX
	NoAnal-.	; DHIST
	NoAnal-.	; VH
	NoAnal-.	; MD
	NoAnal-.	; TASKN
	NoAnal-.	; DEVICE
	NoAnal-.	; STKX
	NoAnal-.	; MSTAT
	NoAnal-.	; $ABS
	NoAnal-.	; ROW
	NoAnal-.	; BRX

.REGAnalyze:
	NoAnal-.	; CPREG
	NoAnal-.	; MIR
	NoAnal-.	; IMOUT
	NoAnal-.	; Q
	NoAnal-.	; CNT
	NoAnal-.	; SHC
	NoAnal-.	; MEMBX
	NoAnal-.	; STKP
	NoAnal-.	; TASK
	NoAnal-.	; PROCSRN
	NoAnal-.	; MCR
	NoAnal-.	; CONFIG
	NoAnal-.	; PCX
	NoAnal-.	; INSSET
	NoAnal-.	; TESTSYNDROME
	NoAnal-.	; STROBE
	NoAnal-.	; D1OUT
	NoAnal-.	; UPTIME
	NoAnal-.	; TGLITCH
	NoAnal-.	; EVCNTA
	NoAnal-.	; EVCNTB
	NoAnal-.	; AATOVA
	NoAnal-.	; ESTAT

.MEMOne:
	c1in16-.	; $ABSOLUTE
	c1in16-.	; TPC
	c1in16-.	; TLINK
	0		; OLINK
	c1inIM-.	; IMBD
	0		; IM
	c1inIM-.	; IMX
	c1in8-.		; ALUFM
	c1in16-.	; T
	c1in4-.		; RBASE
	c1in8-.		; TIOA
	c1in5-.		; MEMBASE
	c1in16-.	; RM
	c1in16-.	; STK
	0		; PIPE
	c1in32-.	; BR
	c1inCACHEA-.	; CACHEA
	c1in16-.	; CACHED
	c1in32-.	; MAP
	c1in16-.	; VM
	c1in32-.	; IFUM
	0		; LDR
	0		; MDATA
	0		; MADDR
	0		; DMUX
	0		; DHIST
	0		; VH
	0		; MD
	0		; TASKN
	0		; DEVICE
	0		; STKX
	0		; MSTAT
	0		; $ABS
	0		; ROW
	0		; BRX

.REGOne:
	c1in16-.	; CPREG
	c1inIM-.	; MIR
	0		; IMOUT
	c1in16-.	; Q
	c1in16-.	; CNT
	c1in16-.	; SHC
	c1in2-.		; MEMBX
	c1in16-.	; STKP
	c1in4-.		; TASK
	c1in4-.		; PROCSRN
	c1in16-.	; MCR
	0		; CONFIG
	0		; PCX
	c1in5-.		; INSSET
	0		; TESTSYNDROME
	0		; STROBE
	0		; D1OUT
	0		; UPTIME
	0		; TGLITCH
	0		; EVCNTA
	c1in16-.	; EVCNTB
	0		; AATOVA
	c1in16-.	; ESTAT

; Table of other test names for "Test" action
.OtherNAM:
	ShmvOp-.
	WF-.
	RF-.
	ProcVA-.

.OtherMask:
	Proc16-.	; Mask for data out of Alu
	c17777-.	; Mask for data in ShC on WF
	c17417-.	; Mask for data in ShC on RF
	cProcVA-.	; 24-bit mask for ProcVA

.OtherTST:
	MakeProc16
	HaveProcH
	HaveProcH
	HaveMemC

.OtherWID:
	20		; Shmv
	20		; WF
	20		; RF
	40		; ProcVA

.OtherProc:
	ShmvLp
	WFLp
	RFLp
	ProcVALp

.OtherPrint:
	ShmvPrint
	WFRFPrint
	WFRFPrint
	ProcVAPrint

.OtherOne:
	c1in16-.
	c1in16-.
	c1in16-.
	c1in32-.

ShmvOp:	.txt "Shmv"
WF:	.txt "WF"
RF:	.txt "RF"
ProcVA:	.txt "ProcVA"

cAll:		177777
		177777
		170000

cIFUM:		  3777
		177777
		0

cESTAT:		Henables
		0
		0

cBR:		  7777
		177777
		0

c177777:	177777
		0
		0

cMAP:		     3
		177777
		0

c17777:		 17777
		0
		0

c117400:	117400
		0
		0

c17417:		17417
		0
		0

c140000:	140000
		0
		0

c170000:	170000
		0
		0

c174000:	174000
		0
		0

cSTKP:				; StkOvf, StkUfl not tested
c177400:	177400
		0
		0

c14000:		 14000
		0
		0

cProcVA:	   377
		177777
		0

c1in2:		40000
		0
		0

c1in4:		10000
		0
		0

c1in5:		4000
		0
		0

c1in8:		400
		0
		0

c1in16:		1
		0
		0

c1in32:		0
		1
		0

c1inIM:		0
		0
		40000

; Fill in the IMX mask with 0 if HaveControl false, else with full mask
; if HaveProcL & HaveProcH, else with full mask sans parity bits.
.MakeIMX:
	sta 3 1 2
	jsr MItst0
cIMX:	 177777
	 177777
	 0
MItst0:	lda 0 @lvHaveControl
	mov# 0 0 snr
	jmp MIret	; Return 0 indicating no test
MItst1:	lda 1 @lvHaveProcL
	lda 0 @lvHaveProcH
	and 0 1
	lda 0 c170000
	mov# 1 1 snr
	lda 0 c140000
	sta 0 2 3
	jmp MIret

lvHaveControl:	HaveControl

; Fill in IMBD mask with full mask if HaveProcL and HaveProcH both true,
; else with full mask sans parity bits.
.MakeIMBD:
	sta 3 1 2
	jsr MItst1
cIMBD:	 177777
	 177777
	 0

; Fill in the Proc16 vector with 0, -1, or 377 according to the values
; of HaveProcH and HaveProcL.
.MakeProc16:
	sta 3 1 2
	jsr MP16A
Proc16:	 0
	 0
	 0
MP16A:	lda 0 @lvHaveProcL
	mov# 0 0 snr
	jmp MP16B
	lda 0 @lvHaveProcH
	mov# 0 0 snr
	lda 0 mp377
MP16B:	sta 0 0 3
MIret:	lda 3 1 2
	jmp 1 3

lvHaveProcL:	HaveProcL
lvHaveProcH:	HaveProcH
mp377:		377
lvHaveMemC:	HaveMemC
lvHaveMemD:	HaveMemD
lvHaveMemX:	HaveMemX
mmMcrX:		160747	; Victim, NextV untested
mmMcrC:		160740	; WakeOnCL, ReportSE', NoWake also untested
lvCacheAMask0:	CacheAMask0
lvCacheAMask1:	CacheAMask1

; Fill in the Mcr test mask according to HaveMemC and HaveMemX
.MakeMCR:
	sta 3 1 2
	lda 0 @lvHaveMemC
	mov# 0 0 snr
	jmp MP16B
	jsr MMA
MCRmsk:	 0
	 0
	 0
MMA:	lda 0 mmMcrC
	lda 1 @lvHaveMemX
	mov# 1 1 szr
	lda 0 mmMcrX
	jmp MP16B

; Fill in the CACHEA test mask according to configuration.
.MakeCACHEA:
	sta 3 1 2
	lda 0 @lvHaveMemC
	mov# 0 0 snr
	jmp MP16B
	jsr MCA0
cCACHEA: 0
	 0
	 0
c1inCACHEA:
	 0
	 0
	 0
MCA0:	lda 0 @lvCacheAMask1
	sta 0 1 3
	neg 0 1
	and 1 0
	sta 1 4 3
	lda 0 @lvCacheAMask0
	jmp MP16B


NoAnal:	0		; 1st two words are min. error count
	0
	ErrorStop	; 3rd word is procedure for analysis

.end