5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RETROF-16 機械語命令一覧

Posted at

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 次のワードが示す主メモリの内容をアドレスとして
その主メモリ内容をロード
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?