メインページに戻る

TTLのみで作るナイトライダー

ナイトライダーとは沢山並んだLEDを流れる様に点滅させるプログラムです。
原典は同名の米国ドラマに出てくる人工知能搭載車のフロントグリルの電飾です。

詳細は「ナイトライダー」(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月記)
メインページに戻る