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月)