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文字以内の英数字列???)