汎用ロジックでコンピュータを作る   

RETROF-16Hの全機械語命令

Copyright © 2013-2014 T.GATARO All Rights Reserved.

「汎用ロジックでコンピュータを作る」のトップページ(目次)はこちら   管理人のメインページはこちら

変更記録

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