ROMエミュレータ
MC14500Bを使ったボードを1年前に作った。このボードはプログラムをUV-EPROMやEEPROMに書くと、書いたり消したりが面倒なので、RAMに格納するようにした。
プログラムの入力はスイッチでデータをセットしてWRボタンを押してRAMに書き込み、STEPボタンを押してアドレスを進める、という手順が必要である。
この方法の問題は書き込んでいるデータとアドレス両方を確認できないことである。
アドレスのインクリメント(STEPボタン)を忘れてデータを入力すると、そのアドレス以降全てやり直しになるので効率が悪い。結局、面倒になって1年間放ったままだ。
懐古趣味とはいえ、ヘタレなのでスイッチをパチパチやってプログラムを入力するのは正直つらいのでROMエミュレータを作ることを考えた。
TD4のROM(DIP-SW×16)をAVRを使ってROMエミュレータにしている方がいらっしゃる。
ということでAVRでROMエミュレータを考えてみた。
AVR AT90S2344の手持ちがあるのでこれを消費することにしよう。(ATMegaがあるので今更AT90S2344を使うこともないだろうし)
256byteのROMエミュレータで動作は、#CE,#OEで割り込みを発生させて、アドレス用のポートをを読んでテーブル(ROMデータ)を引いてデータ用のポートに出力する。
プログラムを考えると、割り込み遅延、ポートが分かれているためアドレス計算、出力データ計算が必要で速度的に厳しそうだ。
読み取る側のCPUが遅いならば使えるが、古い8bitCPUのIPLに使いたいのでUV-EPROMくらいのスピード(450usくらい)が欲しい。 と思案していたら、同じことを考えている方がいらっしゃった。外付けのバッファ(HC244)で#CE,#OEを処理すると、AVRでの余分な処理がなくなるので早くなりそうだ。
ROMデータプログラムを領域に置いてISPで書くのは面倒なのでSRAMに置いて、シリアル経由でダウンロードできるようにしよう。スイッチでA0,A1とRxD,TxDを切り替えるようにして、リセット時に特定のポートをチェックしてLならばプログラム・ダウンロードモード、HならばROMモードになるようにしよう。
Tiny2313のSRAMは128byteである。SRAMすべてをROMデータにするとファームウエアでCALLや割り込みが使えなくなるのでCで書けなくなる。
ちょっと前はAT90S1200を使ったニキシー管時計のファームをアセンブラで書いてたのに最近はすっかりヘタレになってしまった。
ROMデータを64byteにするかなあ...ATMega88/ATMega168を使うかなあ...
« やる気のスイッチ | トップページ | 雨降らし男の物語 »
コメント