TTLのみで作るナイトライダー
詳細は「ナイトライダー」(wikipedia、別窓で開きます)を参照方
16bit TTLコンピュータ「RETROF-16改」のナイトライダーは2013年3月22に2MHzクロックで動作し、その後数日間、4.6MHzクロックでの安定動作の為のテストプロとして活躍しました。
この動画は4.6MHzクロックで動作(*1)したことを記念して撮影したものです。
(*1) 1つの命令は8クロック要しますので、1命令の実行時間は約1.7μSとなります
RETROF-16改の「ナイトライダー」全プログラム
以下が全プログラムです。まだWindowPCとのインターフェイスや、コンパイラやアセンブラは作成中です。このため本プログラムは、プリント基板の下部にあるトグルスイッチを1つ1つセットするという方法で主メモリに書きこみました。
本来なら「ナイトライダー」左右に移動するべきなのですが、本プログラムは左方向に流れるだけです。両方向に流れる様にするのは容易なのですが、プログラムが大きくなるので割愛しました。
アドレス | 機械語 | アセンブラ表記(表記法は仮) | C言語風の記述 | 補足説明 |
---|---|---|---|---|
0000 | 8007 | LD 7 | A0000: r80h = 7; |
A0000は後に出てくるGOTO文のラベル LEDの初期パターン(0000 0000 0000 0111) |
0001 | C480 | ST R80h | ||
0002 | 8010 | LD 16 | A0002: r81h = 16; |
A0000は後に出てくるGOTO文のラベル LEDの移動(左シフト)回数 |
0003 | C481 | ST R81h | ||
0004 | 9080 | LD R80h | OUT(R80h,0); | 機械語のOUT命令はアキュムレータの内容を下段LEDに、 オペランドで指定された情報を上段LEDに表示する。 |
0005 | CC00 | OUT 0 | ||
0006 | 9082 | LD R82h | do { ++R82h ; while(R82h != 0xFFFF) ; |
時間待ち処理。JNFは Jump Not Full (仮称) この命令FはアキュムレータがFFFFでなければ分岐する。 R82hの初期化を行っていないのは手抜きだが、 初回のみ待ち時間は不定で、2回目以降は問題ない。 |
0007 | 8801 | ADD 1 | ||
0008 | C482 | ST R82h | ||
0009 | 0207 | JNF 0007 | ||
000A | 9080 | LD R80h | R80h << 1 ; | R80h(表示パターンの格納変数)を左シフト |
000B | C600 | SL | ||
000C | C480 | ST R80h | ||
000D | 9081 | LD R81h | --R81h ; | シフト回数カウンタを1減らす |
000E | 8401 | SUB 1 | ||
000F | C481 | ST R81h | ||
0010 | 0204 | JNF 0004 | if (R81h != -1) goto A0002; | シフト回数カウンタが-1でなければ0002番地へジャンプ |
0011 | 0000 | JMP 0000 | goto A0000; | 0000番地に無条件ジャンプ |
RETROF-16改、もう一つのナイトライダー
RETROF-16改は、256×256×16色の液晶モニターインタフェイス(VGA出力、このインタフェイスも全てTTLロジック)を有しています。
次は、いよいよ液晶モニター上でのナイトライダーです。 ハードはほぼ完成しているのですが、液晶モニター上でのナイトライダーとなるとソフトウェアは100ステップを超えます。トグルSWからのプログラミングは辛いものがありますし、完成したプログラムを保存する術(すべ)もありません。まずはPCインタフェイスを先に完成させたいと思います。
(2013年3月記)
メインページに戻る