RETROF-16(令和版)の 機械語命令一覧
概略
RETROF-16の命令語はワード長が1ワード(16bit)もしくは2ワード(32bit)であり、「分岐命令」「演算命令」「その他の命令」の3群に大別されます。本記事ではRETROF-16の全ての命令の機能と、そのビット構成を示します。
尚、アセンブリ表現(ニモニック等)は本記事とは別に定めるものとします。
■分岐命令概略
- Cは分岐条件を指定(詳細後述)
- Dは絶対分岐か相対分岐かなどを指定(詳細後述)
- Aはアドレッシングモードを指定(詳細後述)
- nはアドレッシングモードにより意味が変わる
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|0|C|C|C|D|D|A|A|n|n|n|n|n|n|n|n|
■ 演算命令概略
- Xは将来の拡張用(0でも1でも同じだが0を推奨)
- Pは演算種別を指定(詳細後述)
- Aはアドレッシングモードを指定(詳細後述)
- nはアドレッシングモードにより意味が変わる
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|1|0|X|P|P|P|A|A|n|n|n|n|n|n|n|n|
■ その他の命令概略
- Kは命令種別を指定(詳細後述)
- Aはアドレッシングモードを指定(詳細後述)
- nはアドレッシングモードにより意味が変わる
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|1|1|K|K|K|K|A|A|n|n|n|n|n|n|n|n|
■ 全命令共通のアドレッシングモード
アドレッシングモード指定ビットの意は以下の通り。これは全ての命令で共通です。
AA | アドレッシングモード |
---|---|
00 | nで示す値(0~255)が実効値(もしくは実効アドレス)となる |
01 | nで示すレジスタ(0番レジスタ~255番レジスタのいずれか)の値が実効値(もしくは実効アドレス)となる |
10 | nで示すレジスタが示すの主メモリの値(0~65535)が実効値(もしくは実効アドレス)となる |
11 | nは無視され、この命令語の次の語の値(0~65535)が実効値(もしくは実効アドレス)となる(2ワード命令) |
分岐命令
■ 分岐命令のビット構成
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|0|C|C|C|D|D|A|A|n|n|n|n|n|n|n|n|
■ 分岐条件指定ビット
CCC | 意味 |
---|---|
000 | 無条件分岐 |
001 | 水平ポーチ期間以外なら分岐 |
010 | ZEROフラグが立っていれば分岐 |
011 | ZEROフラグが落ちていれば分岐 |
100 | CARRYフラグが立っていれば分岐 |
101 | CARRYフラグが落ちていれば分岐 |
110 | MINUSフラグが立っていれば分岐 |
111 | MINUSフラグが落ちていれば分岐 |
「水平ポーチ期間以外なら分岐」は、LCDへの描画時のチラツキを軽減させるための特殊な命令です。ここではその詳細説明は割愛します。
■ 分岐方向指定ビット
DD | 意味 |
---|---|
00 | 未定義命令となる(HALT扱いとなる) |
01 | 実効アドレスへ分岐 |
10 | 実効値を相対距離として前方相対分岐 |
11 | 実効値を相対距離として後方相対分岐 |
相対分岐は、当該分岐命令の次の命令が基準点(距離ゼロ)になります。従って、前方相対分岐、後方相対分岐共に分岐距離ゼロを与えると、分岐しなかった場合と同じ動作になります。
演算命令
■ 演算命令のビット構成
Xは将来の拡張用(0でも1でも同じだが0を推奨)
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|1|0|X|P|P|P|A|A|n|n|n|n|n|n|n|n|
■ 演算種別指定ビット
|PPP|意味
|---|---|---|
|000|Accと実効値のAND演算を行い結果をAccへ
|001|Accと実効値のOR演算を行い結果をAccへ
|010|Accと実効値のXOR演算を行い結果をAccへ
|011|Accと実効値のXNOR演算を行い結果をAccへ
|100|未定義演算(HALT扱いとなる)
|101|実効値をAccに格納(ロード命令)
|110|Accに実効値を加え結果をAccへ
|111|Accから実効値を引き結果をAccへ
その他の命令
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|1|1|K|K|K|K|A|A|n|n|n|n|n|n|n|n|
|KKKK| 命令
|---|---|---|
|x000|Accの値を主メモリの有効アドレスで示される番地にセーブする
xは0/1任意
|x001|Accの値を主メモリの有効アドレスで示される番地からロードする
xは0/1任意
|x010|Accの値を画像メモリの有効アドレスで示される番地にセーブする
xは0/1任意
|x011|Accの値を画像メモリの有効アドレスで示される番地からロードする
xは0/1任意
|x100|実効値を基板LEDの上列へ、Accの値を基板LED下段に表示する
xは0/1任意
|x101|プログラムカウンタの値をAccに格納しますする
xは0/1任意(オペランドは意味を持たない)
|x110|Accの値を右にシフトする。MSBには0が補填される
xは0/1任意(オペランドは意味を持たない)
|0111|ポートA(基板上の16個のトグルスイッチ)の内容をAccへ格納
(オペランドは意味を持たない)
|0111|ポートB(基板上のコネクタ)の内容をAccへ格納
(オペランドは意味を持たない)
フラグの変化条件
|フラグ|変化条件
|---|---|---|
|EQUAL|ロード命令以外は、2つの被演算子の値が等しい時にフラグが立ち、等しくない時に落ちます。
ロード命令は代入前のAccの値と代入後のAccの値が等しい時にフラグが立ち、等しくない時に落ちる。
|CARRY|加算命令ではキャリーが発生した時に立つ
減算命令ではボローが発生しなかったときに立つ
ロード命令と論理演算命令実行後は不定(再考中、仕様が変わる可能性有)
|MINUS|演算種別に関わらず、演算後のAccの最上位ビットがHの時に立ち、それ以外では落ちる。
その他補足事項
■ 画像メモリについて
本機に接続可能な液晶ディスプレイは、その解像度が1280(横)×1024(縦)であるもの(SXGA)に限ります。本機はその液晶ディスプレイを横5画素毎、縦4画素毎に同一色を表示し、見かけ上、256×256画素のディスプレイとして扱います。
画像メモリのアドレスは0000Hが左上の画素、00FFHが右上の画素、FF00Hが左下の画素、FFFFHが右下の画素にそれぞれ対応します。
各画素の色は6bitで表現します。本機は16bit機ですのが、画像メモリのアクセスは下位6bitのデータのみが意味を持ちます。
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|x|x|x|x|x|x|x|x|y|y|R|R|G|G|B|B|
- xで示されるビットはメモリが実装されていない、リード時の値は不定となる
- yで示されるビットはメモリは実装されているが、その値は表示内容に影響しない
- Rは2bitで表現される赤色成分の明るさ
- Gは2bitで表現される緑色成分の明るさ
- Bは2bitで表現される青色成分の明るさ
■ ロード命令に関する補足
本機のロード命令(Accに値を設定する命令)は、演算命令の一種としてのロード命令と、その他の命令としてのロード命令があります。下記の表はそれを一覧形式にしたものですが、2番と5番、3番と6番は実質的に同じ命令となります。
命令種別 | 命令コード | 動作 | |
---|---|---|---|
1 | 演算 | 1000 1100 nnnn nnnn | nの値(0~255)をロード |
2 | 演算 | 1000 1101 nnnn nnnn | n番レジスタの値をロード |
3 | 演算 | 1000 1110 nnnn nnnn | n番レジスタが示す主メモリの内容をロード |
4 | 演算 | 1000 1111 nnnn nnnn | 次のワード(0~65535)をロード |
5 | その他 | 1100 0000 nnnn nnnn | n番レジスタの値をロード |
6 | その他 | 1100 0001 nnnn nnnn | n番レジスタが示す主メモリの内容をロード |
7 | その他 | 1100 0010 nnnn nnnn | n番レジスタが示す主メモリの内容をアドレスとして その主メモリ内容をロード |
8 | その他 | 1100 0011 nnnn nnnn | 次のワードが示す主メモリの内容をアドレスとして その主メモリ内容をロード |