//**************************************************************************************
//D0CS10.TST
//By B. Rosen and M. Thomson  							February 7, 1979
//Sub Test Program for D0 CS Module
//**************************************************************************************
get "d0cs.d"

//Edge pin signal busses used by D0CS module: (none)

//**************************************************************************************
//This is not a test but a procedure

let LoadBootROM() be
[
//Load Boot Rom simulator
//StuffMicroWord(adr,mi,rm,rsel,aluf,bsel,f1,lr,lt,f2,jc,ja,BadPar)

	//first 16 patterns count in fields which do not affect the CS board
	for i=0 to 15 do //set up first patterns for test 3
	StuffMicroWord(i,i,i,(i lshift 2)+3,i,i,0,i,i,i,GoTo,i+1,0)

	//next 16 are APC&APCTask ←,Branch i+1 for test 4
	for i=0 to 15 do
	StuffMicroWord(i+20b,0,0,3,0,2,7,0,0,#10,Branch+(i&3),i+17,0)

	//next 16 are UseCTask,Call i+1 for test 5
	for i=0 to 15 do
	StuffMicroWord(i+40b,0,0,3,0,2,7,0,0,#13,Call,i+33,0)

	//next 16 do Page←,Return (forced Short Fld Disp to load APC) for test 6
	for i=0 to 15 do
	StuffMicroWord(i+60b,0,0,3,0,2,5,0,0,(i eq 15?1,i),(i eq 0?GoTo,Return),(i eq 0? 61b,0),0)

	//The next 2 instructions are used in the first part of test 7
	StuffMicroWord(400b,0,0,3,0,1,0,0,0,0,Branch,00b,0)	//Wake-up loop
	StuffMicroWord(401b,0,0,3,0,1,0,0,0,0,GoTo,02b,0)	//Nop for WakeUp

	//The next 2 instructions are used in the second part of test 7
	StuffMicroWord(402b,0,0,3,0,1,0,0,0,0,Branch,02b,0)	//BBFA loop
	StuffMicroWord(403b,0,0,3,0,1,0,0,0,0,GoTo,20b,0)	//Nop for BBFA

	//the following line loads #125252..... @1000 for Test 8
	StuffMicroWord(1000b,0,1,47b,5,1,5,1,0,12b,5,25b,0)

//in the tables that follow, the first entry of a group of 13 words is the control store
//location, the other words are the fields of the instruction.

	let t1 = table //instructions for test 9
	[
	420b;0;0;3;0;2;7;0;0;10b;GoTo;21b;0	//APC←adr
	421b;0;0;3;0;2;7;0;0;16b;Return;22b;0	//ReadCS
	422b;0;0;3;0;3;0;0;0;00b;GoTo;23b;0	//CSIn←Data
	423b;0;0;3;0;2;7;0;0;10b;GoTo;24b;0	//APC←Adr
	424b;0;0;3;0;2;7;0;0;14b;Return;25b;0	//WriteCS
	425b;0;0;3;0;2;7;0;0;11b;GoTo;26b;0	//APC←Adr
	426b;0;0;3;0;2;7;0;0;16b;Return;27b;0	//ReadCS
	427b;0;0;3;0;2;7;0;0;10b;GoTo;30b;0	//APC←Adr
	430b;0;0;3;0;2;7;0;0;15b;Return;31b;0	//WriteCS
	431b;0;0;3;0;2;7;0;0;10b;GoTo;32b;0	//APC←Adr
	432b;0;0;3;0;2;7;0;0;16b;Return;33b;0	//ReadCS
	433b;0;0;3;0;2;7;0;0;11b;GoTo;34b;0	//APC←Adr
	434b;0;0;3;0;2;7;0;0;16b;Return;35b;0	//ReadCS
	]

	for i = 0 to 12 do
	[
	let x = lv(t1!(13*i))
	StuffMicroWord(x!0,x!1,x!2,x!3,x!4,x!5,x!6,x!7,x!8,x!9,x!10,x!11,x!12)
	]

	let t2 = table //instructions for test 10
	[
	435b;0;0;3;0;3;0;0;0;00b;GoTo;36b;0	//CSIn←
	436b;0;0;3;0;2;7;0;0;10b;GoTo;37b;0	//APC←Adr
	437b;0;0;3;0;2;7;0;0;14b;Return;70b;0	//WriteCS
	470b;0;0;3;0;2;7;0;0;10b;GoTo;40b;0	//APC←Adr
	440b;0;0;3;0;2;7;0;0;15b;Return;41b;0	//WriteCS
	441b;0;0;3;0;2;7;0;0;10b;GoTo;42b;0	//APC←Adr
	442b;0;0;3;0;2;7;0;0;16b;Return;43b;0	//ReadCS
	443b;0;0;3;0;3;0;0;0;00b;GoTo;44b;0	//CSIn←
	444b;0;0;3;0;2;7;0;0;10b;GoTo;45b;0	//APC←Adr
	445b;0;0;3;0;2;7;0;0;14b;Return;71b;0	//WriteCS
	471b;0;0;3;0;2;7;0;0;10b;GoTo;46b;0	//APC←Adr
	446b;0;0;3;0;2;7;0;0;15b;Return;47b;0	//WriteCS
	447b;0;0;3;0;2;7;0;0;10b;GoTo;50b;0	//APC←Adr
	450b;0;0;3;0;2;7;0;0;16b;Return;51b;0	//ReadCS
	451b;0;0;3;0;3;0;0;0;00b;GoTo;52b;0	//CSIn←
	452b;0;0;3;0;2;7;0;0;10b;GoTo;53b;0	//APC←Adr
	453b;0;0;3;0;2;7;0;0;14b;Return;72b;0	//WriteCS
	472b;0;0;3;0;2;7;0;0;10b;GoTo;54b;0	//APC←Adr
	454b;0;0;3;0;2;7;0;0;15b;Return;55b;0	//WriteCS
	455b;0;0;3;0;2;7;0;0;10b;GoTo;56b;0;	//APC←Adr
	456b;0;0;3;0;2;7;0;0;16b;Return;57b;0;	//ReadCS
	457b;0;0;3;0;2;7;0;0;10b;GoTo;60b;0;	//APC←
	460b;0;0;3;0;3;0;0;0;00b;Return;00b;0;	//return
	]

	for i = 0 to 22 do
	[
	let x = lv(t2!(13*i))
	StuffMicroWord(x!0,x!1,x!2,x!3,x!4,x!5,x!6,x!7,x!8,x!9,x!10,x!11,x!12)
	]

	let t3 = table //more instructions for test 10
	[
	461b;0;0;3;0;2;5;0;0;03b;GoTo;62b;0;	//Page←3
	462b;0;0;3;0;3;0;0;0;00b;GoTo;35b;0;
	1435b;0;0;3;0;3;0;0;0;00b;GoTo;36b;0;	//CSIn←
	1436b;0;0;3;0;2;7;0;0;10b;GoTo;37b;0;	//APC←Adr
	1437b;0;0;3;0;2;7;0;0;14b;Return;70b;0;	//WriteCS
	1470b;0;0;3;0;2;7;0;0;10b;GoTo;40b;0;	//APC←Adr
	1440b;0;0;3;0;2;7;0;0;15b;Return;41b;0;	//WriteCS
	1441b;0;0;3;0;2;7;0;0;10b;GoTo;42b;0;	//APC←Adr
	1442b;0;0;3;0;2;7;0;0;16b;Return;43b;0;	//ReadCS
	1443b;0;0;3;0;3;0;0;0;00b;GoTo;44b;0;	//CSIn←
	1444b;0;0;3;0;2;7;0;0;10b;GoTo;45b;0;	//APC←Adr
	1445b;0;0;3;0;2;7;0;0;14b;Return;71b;0;	//WriteCS
	1471b;0;0;3;0;2;7;0;0;10b;GoTo;46b;0;	//APC←Adr
	1446b;0;0;3;0;2;7;0;0;15b;Return;47b;0;	//WriteCS
	1447b;0;0;3;0;2;7;0;0;10b;GoTo;50b;0;	//APC←Adr
	1450b;0;0;3;0;2;7;0;0;16b;Return;51b;0;	//ReadCS
	1451b;0;0;3;0;3;0;0;0;00b;GoTo;52b;0;	//CSIn←
	1452b;0;0;3;0;2;7;0;0;10b;GoTo;53b;0;	//APC←Adr
	1453b;0;0;3;0;2;7;0;0;14b;Return;72b;0;	//WriteCS
	1472b;0;0;3;0;2;7;0;0;10b;GoTo;54b;0;	//APC←Adr
	1454b;0;0;3;0;2;7;0;0;15b;Return;55b;0;	//WriteCS
	1455b;0;0;3;0;2;7;0;0;10b;GoTo;56b;0;	//APC←Adr
	1456b;0;0;3;0;2;7;0;0;16b;Return;57b;0;	//ReadCS
	1457b;0;0;3;0;2;7;0;0;10b;GoTo;60b;0; 	//APC←
	1460b;0;0;3;0;3;0;0;0;00b;Return;00b;0;	//return
	]

	for i = 0 to 24 do
	[
	let x = lv(t3!(13*i))
	StuffMicroWord(x!0,x!1,x!2,x!3,x!4,x!5,x!6,x!7,x!8,x!9,x!10,x!11,x!12)
	]

	let t4 = table //instructions for tests 13 and 14
	[
	1400b;0;0;3;0;3;0;0;0;00b;GoTo;02b;0;	//CSIn←
	1402b;0;0;3;0;2;7;0;0;10b;GoTo;03b;0;	//APC←adr
	1403b;0;0;3;0;2;7;0;0;14b;Return;22b;0;	//WriteCS
	1422b;0;0;3;0;2;7;0;0;10b;GoTo;23b;0;	//APC←adr
	1423b;0;0;3;0;2;7;0;0;16b;Return;04b;0;	//ReadCS
	1404b;0;0;3;0;2;7;0;0;10b;GoTo;05b;0;	//APC←adr
	1405b;0;0;3;0;2;7;0;0;15b;Return;06b;0;	//WriteCS
	1406b;0;0;3;0;3;0;0;0;00b;Branch;00b;0; //Brch
	1401b;0;0;3;0;3;0;0;0;00b;GoTo;10b;0; 	//Brch
	1410b;0;0;3;0;2;7;0;0;10b;GoTo;12b;0;	//APC←adr
	1412b;0;0;3;0;2;7;0;0;16b;Return;13b;0;	//ReadCS
	1413b;0;0;3;0;2;7;0;0;10b;GoTo;14b;0;	//APC←adr
	1414b;0;0;3;0;2;7;0;0;16b;Return;15b;0;	//ReadCS
	1415b;0;0;3;0;2;7;0;0;10b;GoTo;16b;0;	//APC←adr
	1416b;0;0;3;0;2;7;0;0;16b;Return;17b;0;	//ReadCS
	1417b;0;0;3;0;3;0;0;0;00b;Branch;10b;0; //Brch
	1411b;0;0;3;0;2;5;0;0;02b;GoTo;25b;0;	//Page←2
	1425b;0;0;3;0;3;0;0;0;00b;GoTo;22b;0;
	1022b;0;0;3;0;3;0;0;0;00b;GoTo;03b;0;	//CSIn←
	1003b;0;0;3;0;2;7;0;0;10b;GoTo;04b;0;	//APC←adr
	1004b;0;0;3;0;2;7;0;0;14b;Return;05b;0;	//WriteCS
	1005b;0;0;3;0;2;7;0;0;10b;GoTo;06b;0;	//APC←adr
	1006b;0;0;3;0;2;7;0;0;16b;Return;07b;0;	//ReadCS
	1007b;0;0;3;0;2;7;0;0;10b;GoTo;10b;0;	//APC←adr
	1010b;0;0;3;0;2;7;0;0;15b;Return;11b;0;	//WriteCS
	1011b;0;0;3;0;3;0;0;0;00b;Branch;22b;0; //Brch
	1023b;0;0;3;0;3;0;0;0;00b;GoTo;24b;0; 	//Brch
	1024b;0;0;3;0;2;7;0;0;10b;GoTo;13b;0;	//APC←adr
	1013b;0;0;3;0;2;7;0;0;16b;Return;14b;0;	//ReadCS
	1014b;0;0;3;0;2;7;0;0;10b;GoTo;15b;0;	//APC←adr
	1015b;0;0;3;0;2;7;0;0;16b;Return;16b;0;	//ReadCS
	1016b;0;0;3;0;2;7;0;0;10b;GoTo;17b;0;	//APC←adr
	1017b;0;0;3;0;2;7;0;0;16b;Return;20b;0;	//ReadCS
	1020b;0;0;3;0;3;0;0;0;00b;Branch;24b;0; //Brch
	]

	for i = 0 to 33 do
	[
	let x = lv(t4!(13*i))
	StuffMicroWord(x!0,x!1,x!2,x!3,x!4,x!5,x!6,x!7,x!8,x!9,x!10,x!11,x!12)
	]
]