MICRO-1マイクロプログラム記述言語
<マイクロプログラム>::=
<タイトル>
<本体>
<タイトル>::=
.TITLE
<名前>
<本体>::=
<マイクロ命令>
{ <マイクロ命令> }
.END
<マイクロ命令>::=
<マイクロ命令頭部>
<マイクロ命令本体>
<マイクロ命令頭部>::=
*
<名札>
<アドレス>
<名札>::=
<名前> :
|
<空>
<アドレス>::=
<符号なし整数>
|
<空>
<マイクロ命令本体>::=
<テストと順序制御文>
<メモリ文>
<演算文>
<EX文>
<テストと順序制御文>::=
<goto文>
|
<call文>
|
<return文>
|
<if文>
|
<iop文>
|
<ira文>
|
<iab文>
|
<nsq文>
|
<空>
<goto文>::=
GOTO
<名前>
|
GOTO FETCH
<call文>:==
CALL
<名前>
<return文>:==
RETURN
<if文>::=
IF
<フラグ>=1
THEN
<名前>
|
IF
<フラグ>=0
THEN
<名前>
|
IF
<フラグ>=0
THEN
<名前>
ELSE
FETCH
<フラグ>::=
ZER
|
NEG
|
CRY
|
OV
|
CZ
|
T
<iop文>::=
IOP
<名前>
<ira文>::=
IRA
<名前>
<iab文>::=
IAB
<名前>
<nsq文>::=NSQ
<演算文>::=
<alu文>
|
<set文>
|
<空>
<alu文>::=
<sbus>
:=
<式>
<set文>::=
SET BY
<式>
<sbus>::=
R0 |
R1 |
R2 |
R3 |
R4 |
R5 |
R6 |
R7 |
RA |
RAP |
RB |
RBP |
PC
<式>::=
<lbus>
<aluとシフト>
<rbus>
|
<alu素通り式>
<lbus>::=
R0 |
R1 |
R2 |
R3 |
R4 |
R5 |
R6 |
R7 |
RB |
RBP |
PC |
IO |
MM |
IR |
FSR |
ZERO
<aluとシフト>::=
<alu>
:
<シフト>
|
<alu>
<alu>::=
+ |
- |
AND |
OR |
XOR |
$ |
@
<シフト>::=
SLL |
SRL |
SLA |
SRA |
SNX |
SWP |
NSB
<rbus>::=
R0 |
R1 |
R2 |
R3 |
R4 |
R5 |
R6 |
R7 |
RA |
RAP |
<リテラル>
<リテラル>::=
<符号なし整数>
<符号なし整数>::=
<16進数> |
<10進数> |
<2進数>
<16進数>::=
<16進数字>
{ <16進数字> }
<16進数字>::=
<数字> |
A |
B |
C |
D |
E |
F
<10進数>::=
D"
<数字>
{ <数字> }
<2進数>::=
B"
<2進文字>
{ <2進文字> }
<2進文字>::=
0 |
1
<数字>::=
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9
<alu素通り式>::=
<シフト>
<lbusまたはrbus>
|
<lbusまたはrbus>
<lbusまたはrbus>::=
<lbus> |
<rbus>
<メモリ文>::=
READ |
WRITE |
<空>
<EX文>::=
C-1
|
FLAG SAVE
|
WITH CRY
|
WITH ONE
|
IR :=
<lbusソース>
|
IO :=
<lbusソース>
|
C :=
<rbusソース>
|
EXECUTE IO
|
T := 1
|
T := 0
|
IRA+1
|
IRB+1
|
IRB-1
|
SET HLT
|
SET OV
|
NEX
|
<空>
<lbusソース>::=
LBUS |
<lbus>
<rbusソース>::=
RBUS |
<rbus>
<空>::=(何もなし)
<名前>::= (英字で始まる8文字以内の英数字列???)