file-list :
s1m.h, s1m.c, supportm.c simulator files
mpgm.txt
microprogram file used by s1m.c
in.obj
test machine code
mgen.c, hash.c
microprogram generator
mspec.txt
input microprogram in human readable form
s1mx.txt
explain S1 instruction set and microprogram format.
Run mgen.exe, it takes input from mspec.txt and outputs a microprogram
in the form that s1m.exe can read. (see mpgm.txt)
0 dest r
1 pc
2 ir
3 mar
4 mdr
5 src r
6 pc
7 ir
8 mar
9 mdr
10 t
11 selr ir:r0
12 ir:r1
13 ir:r2
14 ir:r1,r2
15 alu pass1
16 add
17 sub
18 add1
19 mctl rd
20 wr
21 misc pc+1
22 cond u
23 mrdy
24 testcc
25 decode
26 goto 5 bits 26..30
where nn is the number of microword, aaaa is address
and xxxxx... is
the microprogram bit. xxx... begins at the column 5.
Input to mgen is in a simple form as follows :
.w N // width of microword N
bits
.a B E // bit position of Goto field, B
start, E end
.s // start symbolic
name section
name bit // "name" is the signal at "bit"
position
...
.m // start microprogram
section
:label name name ... /label ;
//
lable begins with ":"
//
name is signal name
//
/label is in Goto field
//
";" end a microword spec.
...
.e end of microprogram
spec.
Example from mspec.txt (comment shows here for explanation, no comments are allowed in mspec.txt).
.w 31 // width 31 bits
.a 26 30 // Goto start at bit 26 end at
30
.s //
symbol section
dr 0 // dest R bit
0
dpc 1 // dest PC bit 1
...
sub 17 // alu sub bit 17
add1 18
mrd 19 // memory read bit 19
mwr 20
pc+1 21
u 22 // Cond uncond
bit 22
mrdy 23
testcc 24
decode 25
.m
// microprogram section
:ifetch dmar spc ;
// <ifetch> MAR = PC
:w0 mrd mrdy /w0 ;
// MDR = M[MAR]; MREAD MRDY w0
dir smdr pc+1 decode
; // IR = MDR; PC = PC + 1 DECODE
:load dmar sir:ads ;
// <load> MAR = IR:ADS
:w1 mrd mrdy /w1 ;
dr smdr ir:r0 u /ifetch
;
...
.e
// end
This is the output (from mpgm.txt )
29
0 0001001000000000000000000000000
1 0000000000000000000100010000001
2 0010000001000000000001000100000
3 0001000100000000000000000000000
4 0000000000000000000100010000100
5 1000000001010000000000100000000
6 0001000100000000000000000000000
....
27 0100000100000000000000100000000
28 0100010000001000000000100000000
S1m microprogram simulator reads this microprogram (mpgm.txt) to instantiate
its microstore. S1m runs the same machine code program as S1, such
as "in.obj" which is sum(a[0]..a[n]). The "in.obj" executed 1109 instructions
6054 clocks with CPI = 5.46
26 July 1998
Prabhas Chongstitvatana