S1 instruction set	26 July 98

aim to keep compatible as much as possible to original S1

// notation     op src  dest,  op r1 r2 ::  r1 = r1 op r2

load M r	M -> r
load (r1) r2	M[r1]  -> r2
store r M	r -> M
store r1 (r2)	r1 -> M[r2]
jmp cc A	jump condition
jal r A		jump and link  r store return ads
jr r		jump register
mov r1 r2	r1 -> r2
add r1 r2	r1 -> r1 + r2
cmp r1 r2	set cc
inc r1
trap c		trap code c

op code format
L - format	op:3,r0:3,ads:10
R - format	op:3,xop:4,u:3,r1:3,r2:3
M,A = ads
r,cc = r0
c = r1

op	inst	format
0	load	L
1	store	L
2	jmp	L
3	jal	L
4,5,6	undef	L
7	xop	R

xop	inst 	format
0	mov	R
1	loadr	R
2	storer	R
3	add	R
4	cmp	R
5	inc	R
6	jr	R
7	trap	R
8..15	undef	R

condition code bit Z S
0	always
1	EQ  equal   Z = 1
2	NE  not eq  Z = 0
3	LT  S = 1
4	LE  S = 1 or Z = 1
5	GE  S = 0 or Z = 0
6	GT  S = 0

S1 micro step

ifetch
MAR = PC
MDR = M[MAR] ; MREAD
IR = MDR ; PC = PC + 1

load
MAR = IR:ADS
MDR = M[MAR] ; MREAD
R[IR:R0] = MDR

store
MAR = IR:ADS
MDR = R[IR:R0]
M[MAR] = MDR ; MWRITE

loadr
MAR = R[IR:R1]
MDR = M[MAR] ; MREAD
R[IR:R2] = MDR

storer
MAR = R[IR:R2]
MDR = R[IR:R1]
M[MAR] = MDR ; MWRITE

mov
T = R[IR:R1]
R[IR:R2] = T

add
T = ADD( R[IR:R1], R[IR:R2] )
R[IR:R1] = T

cmp
T = SUB( R[IR:R1], R[IR:R2] )

inc
T = ADD1 ( R[IR:R1] )
R[IR:R1) = T

jmp
if testCC(IR:R0) then PC = IR:ADS

jal
R[IR:R0] = PC
PC = IR:ADS

jr
PC = R[IR:R0]

S1 microprogram

loc label	dest src selR alu 	Mcnt misc cond goto

0 ifetch	mar pc
1 w0			rd 	mrdy w0
2	ir mdr		pc+1 	decode
3 load	mar ir:ads
4 w1			rd 	mrdy w1
5	r mdr ir:r0		u ifetch
6 store	mar ir:ads
7	mdr r ir:r0
8 w2			wr	mrdy w2
9				u ifetch
10 loadr	mar r ir:r1
11 w3			rd	mrdy w3
12	r mdr ir:r2		u ifetch
13 storer 	mar r ir:r2
14	mdr r ir:r1
15 w4			wr	mrdy w4
16				u ifetch
17 mov	ir:r1,r2 pass
18	r t ir:r2			u ifetch
19 add	ir:r1,r2 add
20	r t ir:r1			u ifetch
21 cmp	ir:r1,r2 sub		u ifetch
22 inc	ir:r1,r2 add1
23	r t ir:r1			u ifetch
24 jmp				testcc(ir:r0) ifetch (false)
25	pc ir:ads			u ifetch
26 jal	r pc ir:r0
27	pc ir:ads			u ifetch
28 jr 	pc r ir:r1			u ifetch

