CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

LEDチカチカ

準備が整ったので一気にコーディングしました

まずSCN2681出力ポートの設定と変数COUNTの初期化した後、変数COUNTの値を出力ポートにセット、ビット反転してリセットと2回出力。そのあとCOUNTをインクリメントしてSTARTラベルにループします。

単純なパラレルLEDへのインクリメントデータ出力なのですが結構な長さになりました。

コーディングのやりにくさの一番の原因はレジスタの扱いです。ABCの3本あってもスタック構造で直接アクセスできるのはトップのAレジスタのみ。しかも値を参照や演算で取り出すとポップされてデータは破棄されてしまいます。つまり静的にデータを保持できないので変数COUNTのような静的な大域変数はメモリ上に持つことになります(ここではCPUのオンチップRAMのユーザ先頭アドレス0x8000070を使用)

さらにそのことでメモリ/レジスタ間のストア命令、ロード命令を使うたびにアドレスの即値を指定しなくてはならずますますオーバーヘッドが大きくなってしまいます。ここらへんはworkspaceポインタを使えば良いのかもしれません。

正しくはスタックマシンとしてのコーディング方法があるのでしょうが初回はこのぎこちないコードをROMに焼いて実行させました。

8個のLEDが全点灯(実は高速点滅)して一発でうまくいきました

この淡黄色のチップLED、かつ電流を抑えていますが直視するインジケータとして目に刺激が少なく気に入ってます

 

最下位ビットは約124kHzで点滅、最上位ビットはその1/128の970Hzとなりインクリメントデータ出力はうまくいってます

 

回路電流は今のところ400mA程度です。