「汎用ロジックでコンピュータを作る」のトップページ(目次)はこちら 管理人のメインページはこちら
変更記録
2013-12-18 推敲中の原案を起草
2014-01-15 回路設計時に思いついた各種変更を反映。(演算子指定bitと条件指定bitを強化し全面改訂)
2014-01-28 「表の見方」を追記
全機械語命令
TTLコンピュータRETROF-16の全命令です。専用のコンパイラでのプログラミングムを前提としているため、アセンブラ作成の計画はありませんが、コンパイラの設計に必要なのでニモニックも決め併記しました。
表の読み方
・Aはアキュムレータ、PCはプログラムカウンタ、Rnはn番レジスタ、M[]はメモリ、VRAM[]は画像メモリを表す・nは8bit数値(0~255)、nnは16bit数値(0~65535)、Rnはn番レジスタ(R0~R255)を表す
・表中の演算子はC言語で用いる表記に準じる。但し代入記号は「→」を使う
・OUT()は基板上のLEDを制御を意味する。例えばOUT(Rn:A)はn番目のレジスタの値とアキュムレータの値を32個のLEDに渡す
・赤文字(背景は灰色)は命令デコード回路設計の都合上あらわれた重複命令(同じ命令が他のコードとして存在)
・命令コード001XXX11に現われる skip は次の命令1ワードを無視することを意味する。(回路設計の都合上あらわれた命令)
・命令コード100XXX00に現われる PC(L) はプログラムカウンタの下位8bitを意味する。
・命令コード最上位ビットが0の命令は条件フラグが更新される。命令コード最上位ビットが1の命令は条件フラグは保持される。
・条件指定は分岐命令だけではなく、ストア命令、VRAM書き込み命令、出力命令も対象となる。条件フラグの意味は以下の通り
BTM:画像表示が水平ポーチ信号区間である(液晶モニタへのアクセス時に画面がチラつくのをソフトウェア側で軽減する際に使用)
BRW:減算時にボローが発生した、もしくは加算時にキャリーが発生していない。(ロード及び論理演算時は不定)
CRY:加算時にキャリーが発生した、もしくは減算時にボローが発生していない。(ロード及び論理演算時は不定)
MNS:演算結果が負(最上位ビットが1)。(ロード及び論理演算時にも有効)
PLS:演算結果がゼロまたは正(最上位ビットが0)。(ロード及び論理演算時にも有効)
OVR:演算時にオーバーフローが発生した。(ロード及び論理演算時は不定)
NOV:演算時にオーバーフローが発生しなかった。(ロード及び論理演算時は不定)
上位 6bit |
下位2bit = 00 | 下位2bit = 00 | 下位2bit = 10 | 下位2bit = 11 | ||||
---|---|---|---|---|---|---|---|---|
MNIM | 動作 | MNIM | 動作 | MNIM | 動作 | MNIM | 動作 | |
000000 | LDI n | M[n] → A | LDR n | Rn → A | VLR n | V[Rn] → A | LDL nn | V[nn] → A |
000001 | ILI n | M[n]+1 → A | ILR n | Rn+1 → A | IVR n | V[Rn]+1 → A | ILL nn | V[nn]+1 → A |
000010 | DLI n | M[n]-1 → A | DLR n | Rn-1 → A | DVR n | V[Rn]-1 → A | DLL nn | V[nn]-1 → A |
000011 | ADI n | A+M[n] → A | ADR n | A+Rn → A | AVR n | A+V[Rn] → A | ADL nn | A+V[nn] → A |
000100 | SBI n | A-M[n] → A | SBR n | A-Rn → A | SVR n | A-V[Rn] → A | SBL nn | A-V[nn] → A |
000101 | ANI n | A&M[n] → A | ANR n | A&Rn → A | NVR n | A&V[Rn] → A | ANL nn | A&V[nn] → A |
000110 | ORI n | A|M[n] → A | ORR n | A|Rn → A | OVR n | A|V[Rn] → A | ORL nn | A|V[nn] → A |
000111 | XOI n | A^M[n] → A | XOR n | A^Rn → A | XVR n | A^V[Rn] → A | XOL nn | A^V[nn] → A |
001000 | LDI n | M[n] → A | LDR n | Rn → A | LDM n | M[Rn] → A | LDL nn | nn → A |
001001 | ILI n | M[n]+1 → A | ILR n | Rn+1 → A | ILM n | M[Rn]+1 → A | ILL nn | nn+1 → A |
001010 | DLI n | M[n]-1 → A | DLR n | Rn-1 → A | DLM n | M[Rn]-1 → A | DLL nn | nn-1 → A |
001011 | ADI n | A+M[n] → A | ADR n | A+Rn → A | ADM n | A+M[Rn] → A | ADL nn | A+nn → A |
001100 | SBI n | A-M[n] → A | SBR n | A-Rn → A | SBM n | A-M[Rn] → A | SBL nn | A-nn → A |
001101 | ANI n | A&M[n] → A | ANR n | A&Rn → A | ANM n | A&M[Rn] → A | ANL nn | A&nn → A |
001110 | ORI n | A|M[n] → A | ORR n | A|Rn → A | ORM n | A|M[Rn] → A | ORL nn | A|nn → A |
001111 | XOI n | A^M[n] → A | XOR n | A^Rn → A | XOM n | A^M[Rn] → A | XOL nn | A^nn → A |
010000 | HLT | HALT PROGTRAM | SFT | A >> 1 | LPC | PC → A | LPS | PC → A , Skip |
010001 | HLT | HALT PROGTRAM | SFT | A >> 1 | IPC | PC+1 → A | IPS | PC+1 → A , Skip |
010010 | HLT | HALT PROGTRAM | SFT | A >> 1 | DPC | PC-1 → A | DPS | PC-1 → A , Skip |
010011 | HLT | HALT PROGTRAM | SFT | A >> 1 | APC | A+PC → A | APS | A+PC → A , Skip |
010100 | HLT | HALT PROGTRAM | SFT | A >> 1 | SPC | A-PC → A | SPS | A-PC → A , Skip |
010101 | HLT | HALT PROGTRAM | SFT | A >> 1 | NPC | A&PC → A | NPS | A&PC → A , Skip |
010110 | HLT | HALT PROGTRAM | SFT | A >> 1 | OPC | A|PC → A | OPS | A|PC → A , Skip |
010111 | HLT | HALT PROGTRAM | SFT | A >> 1 | XPC | A^PC → A | XPS | A^PC → A , Skip |
011000 | IR0 n | IN0 → Rn | IM0 n | IN0 → M[Rn] | II0 n | IN0 →M[M[Rn]] | IL0 nn | IN0 →M[nn] |
011001 | IR1 n | IN1 → Rn | IM1 n | IN1 → M[Rn] | II1 n | IN1 →M[M[Rn]] | IL1nn | IN1 →M[nn] |
011010 | IR0 n | IN0 → Rn | IM0 n | IN0 → M[Rn] | II0 n | IN0 →M[M[Rn]] | IL0 nn | IN0 →M[nn] |
011011 | IR1 n | IN1 → Rn | IM1 n | IN1 → M[Rn] | II1 n | IN1 →M[M[Rn]] | IL1 nn | IN1 →M[nn] |
011100 | IR0 n | IN0 → Rn | IM0 n | IN0 → M[Rn] | II0 n | IN0 →M[M[Rn]] | IL0 nn | IN0 →M[nn] |
011101 | IR1 n | IN1 → Rn | IM1 n | IN1 → M[Rn] | II1 n | IN1 →M[M[Rn]] | IL1 nn | IN1 →M[nn] |
011110 | IR0 n | IN0 → Rn | IM0 n | IN0 → M[Rn] | II0 n | IN0 →M[M[Rn]] | IL0 nn | IN0 →M[nn] |
011111 | IR1 n | IN1 → Rn | IM1 n | IN1 → M[Rn] | II1 n | IN1 →M[M[Rn]] | IL1 nn | IN1 →M[nn] |
100000 | JUS n | n → PC(L) | JUR n | Rn → PC | JUM n | M[Rn] → PC | JUL nn | nn → PC |
100001 | JVS n | n → PC(L) , if BTM | JVR n | Rn → PC , if BTM | JVM n | M[Rn] → PC , if BTM | JVL nn | nn → PC , if BTM |
100010 | JBS n | n → PC(L) , if BRW | JBR n | Rn → PC , if BRW | JBM n | M[Rn] → PC , if BRW | JBL nn | nn → PC , if BRW |
100011 | JCS n | n → PC(L) , if CRY | JCR n | Rn → PC , if CRY | JCM n | M[Rn] → PC , if CRY | JCL nn | nn → PC , if CRY |
100100 | JMS n | n → PC(L) , if MNS | JMR n | Rn → PC , if MNS | JMM n | M[Rn] → PC , if MNS | JML nn | nn → PC , if MNS |
100101 | JPS n | n → PC(L) , if PLS | JPR n | Rn → PC , if PLS | JPM n | M[Rn] → PC , if PLS | JPL nn | nn → PC , if PLS |
100110 | JOS n | n → PC(L) , if OVF | JOR n | Rn → PC , if OVF | JOM n | M[Rn] → PC , if OVF | JOL nn | nn → PC , if OVF |
100111 | JNS n | n → PC(L) , if NOV | JNR n | Rn → PC , if NOV | JNM n | M[Rn] → PC , if NOV | JNL nn | nn → PC , if NOV |
101000 | STS n | A → M[n] | STR n | A → M[Rn] | STM n | A → M[M[Rn]] | STL nn | A → M[nn] |
101001 | SVS n | A → M[n] , if BTM | SVR n | A → M[Rn] , if BTM | SVM n | A → M[M[Rn]] , if BTM | SVL nn | A → M[nn] , if BTM |
101010 | SBS n | A → M[n] , if BRW | SBR n | A → M[Rn] , if BRW | SBM n | A → M[M[Rn]] , if BRW | SBL nn | A → M[nn] , if BRW |
101011 | SCS n | A → M[n] , if CRY | SCR n | A → M[Rn] , if CRY | SCM n | A → M[M[Rn]] , if CRY | SCL nn | A → M[nn] , if CRY |
101100 | SMS n | A → M[n] , if MNS | SMR n | A → M[Rn] , if MNS | SMM n | A → M[M[Rn]] , if MNS | SML nn | A → M[nn] , if MNS |
101101 | SPS n | A → M[n] , if PLS | SPR n | A → M[Rn] , if PLS | SPM n | A → M[M[Rn]] , if PLS | SPL nn | A → M[nn] , if PLS |
101110 | SOS n | A → M[n] , if OVF | SOR n | A → M[Rn] , if OVF | SOM n | A → M[M[Rn]] , if OVF | SOL nn | A → M[nn] , if OVF |
101111 | SNS n | A → M[n] , if NOV | SNR n | A → M[Rn] , if NOV | SNM n | A → M[M[Rn]] , if NOV | SNL nn | A → M[nn] , if NOV |
101000 | VIS n | A → V[n] | VIR n | A → V[Rn] | VIM n | A → V[M[Rn]] | VIL nn | A → V[nn] |
101001 | VVS n | A → V[n] , if BTM | VVR n | A → V[Rn] , if BTM | VVM n | A → V[M[Rn]] , if BTM | VVL nn | A → V[nn] , if BTM |
101010 | VBS n | A → V[n] , if BRW | VBR n | A → V[Rn] , if BRW | VBM n | A → V[M[Rn]] , if BRW | VBL nn | A → V[nn] , if BRW |
101011 | VCS n | A → V[n] , if CRY | VCR n | A → V[Rn] , if CRY | VCM n | A → V[M[Rn]] , if CRY | VCL nn | A → V[nn] , if CRY |
101100 | VMS n | A → V[n] , if MNS | VMR n | A → V[Rn] , if MNS | VMM n | A → V[M[Rn]] , if MNS | VML nn | A → V[nn] , if MNS |
101101 | VPS n | A → V[n] , if PLS | VPR n | A → V[Rn] , if PLS | VPM n | A → V[M[Rn]] , if PLS | VPL nn | A → V[nn] , if PLS |
101110 | VOS n | A → V[n] , if OVF | VOR n | A → V[Rn] , if OVF | VOM n | A → V[M[Rn]] , if OVF | VOL nn | A → V[nn] , if OVF |
101111 | VNS n | A → V[n] , if NOV | VNR n | A → V[Rn] , if NOV | VNM n | A → V[M[Rn]] , if NOV | VNL nn | A → V[nn] , if NOV |
111000 | OUS n | OUT(n:A) | OUR n | OUT(Rn:A) | OUM n | OUT(M[Rn]:A) | OUL nn | OUT(nn:A) |
111001 | OVS n | OUT(n:A) , if BTM | OVR n | OUT(Rn:A) , if BTM | OVM n | OUT(M[Rn]:A) , if BTM | OVL nn | OUT(nn:A) , if BTM |
111010 | OBS n | OUT(n:A) , if BRW | OBR n | OUT(Rn:A) , if BRW | OBM n | OUT(M[Rn]:A) , if BRW | OBL nn | OUT(nn:A) , if BRW |
111011 | OCS n | OUT(n:A) , if CRY | OCR n | OUT(Rn:A) , if CRY | OCM n | OUT(M[Rn]:A) , if CRY | OCL nn | OUT(nn:A) , if CRY |
111100 | OMS n | OUT(n:A) , if MNS | OMR n | OUT(Rn:A) , if MNS | OMM n | OUT(M[Rn]:A) , if MNS | OML nn | OUT(nn:A) , if MNS |
111101 | OPS n | OUT(n:A) , if PLS | OPR n | OUT(Rn:A) , if PLS | OPM n | OUT(M[Rn]:A) , if PLS | OPL nn | OUT(nn:A) , if PLS |
111110 | OOS n | OUT(n:A) , if OVF | OOR n | OUT(Rn:A) , if OVF | OOM n | OUT(M[Rn]:A) , if OVF | OOL nn | OUT(nn:A) , if OVF |
111111 | ONS n | OUT(n:A) , if NOV | ONR n | OUT(Rn:A) , if NOV | ONM n | OUT(M[Rn]:A) , if NOV | ONL nn | OUT(nn:A) , if NOV |