メインページに戻る

Twitter関係者のみへの仮公開です。今後大きく変わる可能性があります 2013年3月28日
Twitter関係者のみへの仮公開です。今後大きく変わる可能性があります 2013年3月28日
Twitter関係者のみへの仮公開です。今後大きく変わる可能性があります 2013年3月28日
Twitter関係者のみへの仮公開です。今後大きく変わる可能性があります 2013年3月28日
Twitter関係者のみへの仮公開です。今後大きく変わる可能性があります 2013年3月28日
Twitter関係者のみへの仮公開です。今後大きく変わる可能性があります 2013年3月28日
(Special Thanks @iruka3氏)



全命令共通のアドレッシングモード

即値アドレッシング(命令長は1ワード16ビット)

bit13,12が共に0ならば、bit7~0の値がそのまま命令実行に必要な「」になる。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 -  -  0  0  -  -  -  -  即値(0~255)


レジスタ直接アドレッシング(命令長は1ワード16ビット)

bit13=0,bit12=1ならば、bit7~0がレジスタ番号となり、そのレジスタ値が命令実行に必要な「」になる。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 -  -  0  1  -  -  -  -  レジスタ番号(0~255)


レジスタ間接アドレッシング(命令長は1ワード16ビット)

bit13=1,bit12=0ならば、bit7~0がレジスタ番号となり、そのレジスタ値が示す主メモリの内容が命令実行に必要な「」になる。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 -  -  0  1  -  -  -  -  レジスタ番号(0~255)


24bit即値アドレッシング(命令長は2ワード32ビット)

bit13=1,bit12=1ならば、1ワード目のbit7~0と、2ワード目全体を合わせた24biの内容が、命令実行に必要な「」になる。
但しRETRIF-16改は24bit指定のアドレッシングや演算はサポートしてませんので、上位8bitは捨てられ下位16bitのみが「値」になる。
       

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 -  -  1  1  -  -  -  -  24bit即値 但し上位8ビット無視されるので 表現できる範囲は0~65535  


演算命令(比較命令)

命令上位8bit

15 14 13 12 11 10 9 8
 1  0  ー  ー   演算種別  *

Accと「」との演算を行う。「」が何を指すのかは前述のアドレッシングモードを参照方。
bit8が1ならば、フラグのみ変化し、Accは変化しない。


演算種別とフラグの変化

ニモニックは左がbit8=0(演算モード)の場合。右はbit8=0(比較モード)の場合。比較モードではフラグのみ変化し、Accは変化しない。

演算種別 ニモニック  動作 Cフラグの変化  Fフラグの変化 Mフラグの変化
 000  LD   LDT   値 → Acc  変化せず  ロード値がFFFFなら1、他なら0  ロード値の最上位ビットと同じ
 001  SBC   SCT  (未定) 最終調整中  (未定) 最終調整中  演算結果がFFFFなら1、他なら0  演算結果の最上位ビットと同じ
 010  SUB   SBT  ACC - 値 → Acc  0未満以下になると0、他なら1  演算結果がFFFFなら1、他なら0  演算結果の最上位ビットと同じ
 011  OR    ORT  ACC | 値 → Acc  変化せず  演算結果がFFFFなら1、他なら0  演算結果の最上位ビットと同じ
 100  ADD   ADT  ACC + 値 → Acc  FFFFを超えると1、他なら0  演算結果がFFFFなら1、他なら0  演算結果の最上位ビットと同じ
 101  AND   ANT  ACC & 値 → Acc  変化せず  演算結果がFFFFなら1、他なら0  演算結果の最上位ビットと同じ
 110  ADC  ACT  ACC + 値 + CF → Acc  FFFFを超えると1、他なら0  演算結果がFFFFなら1、他なら0  演算結果の最上位ビットと同じ
 111  XOR  XOT  ACC ^ 値 → Acc  変化せず  演算結果がFFFFなら1、他なら0  演算結果の最上位ビットと同じ







分岐命令

命令上位8bit

15 14 13 12 11 10 9 8
 0  *  ー  ー   方向   * *

bit14,9,8 で指定する条件に一致したら「」とbit11,10で決定するアドレスに分岐する。
相対分岐の場合の起点は、本命令ではなく次の命令が基点となる。


分岐条件と分岐方向

bit14/9/8 ニモニック  分岐条件
 000  JMP    無条件
 001  JBP   (未定) 最終調整中
 010  JNF   Fフラグが立ってない
 011  JF    Fフラグが立っている
 100  JNC   Cフラグが立っている
 101  JC   Cフラグが立っている
 110  JNM  Mフラグが立ってない
 111  JM  Mフラグが立っている
方向 分岐方向
 00  絶対
 01  後方相対
 10  前方相対
 011 (未定) 最終調整中




その他の命令

命令上位8bit

15 14 13 12 11 10 9 8
 1  1  ー  ー   命令種別

演算種別とフラグの変化

命令種別の「-」は1でも0でも同じである。(未デコードbit)

命令種別 ニモニック  動作
 000-  LDV   「」で示されたVRAMアドレスの内容 → Acc
 001-  LDP   PC(次の命令のアドレス) + 「」→ Acc
 010-  ST   Acc → 主メモリの「」で示されたアドレス
 011-  SR    Accを右シフト、左には0が詰められる。フラグは無変化。「」は意味をもたない
 100-  SL   Accを左シフト、右には0が詰められる。フラグは無変化。「」は意味をもたない
 101-  IN  パネル上のトグルスイッチと「」のAND → Acc  (トグルSWが上向きならH)
 110-  OUT  「」をLED上段に、Accの値をLEDに転送 (H=点灯)
 1110  STV  Acc → 「」で示されたVRAMアドレスの内容
 1111  HALT  停止





VRAMマッピング

VRAMは 左上が0000番地、右下が7FFF番地です。 但しVRAMのアドレス最上位ビットはデコードしていないので
左上を8000番地、右下がFFFF番地としてアクセスしても同じです。
RETROF-16の主メモリのデータ幅は16bitですが、VRAMのデータ幅は8bitです。 このためCPUから見た場合VRAMの上位8bitは存在しない事になります。つまり、上位8bitに書き込んでも何もおきず、上位8bitを読み込んだら不定値(おそらく0xFF)が返ります。

VRAMの8bitは更に上位4bitと下位4bitがそれぞれ1つの画素(ピクセル)に対応します。(上位が右画素、下位が左画素)


CPUからみたVRAM

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
 bit15~bit8は存在しない      左画素   右画素
   R  G  B    R  G  B

横方向1列で128ワード(=128バイト=256画素)
縦方向は256画素、よってVRAMの総容量は128×256=32KB



上図では各画素1bit余ってますが、これの使用方法は未定です。 「中間色表示用」、「ブリンク用」、
「ゲーム時の隠れキャラ(見かけは同じだが値が違う事を利用する昔のゲームテクニック)」などを考えております。
基板上はこの部分は別回路を組める様、娘基板(ドーターボード)用のソケットを設置しています(2013年3月)

メインページに戻る