フォト
無料ブログはココログ

MyList

« やる気のスイッチ | トップページ | 雨降らし男の物語 »

2012年12月 7日 (金)

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を使うこともないだろうし)
Romemu

 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モードになるようにしよう。
Romemu2313

 Tiny2313のSRAMは128byteである。SRAMすべてをROMデータにするとファームウエアでCALLや割り込みが使えなくなるのでCで書けなくなる。
ちょっと前はAT90S1200を使ったニキシー管時計のファームをアセンブラで書いてたのに最近はすっかりヘタレになってしまった。

 ROMデータを64byteにするかなあ...ATMega88/ATMega168を使うかなあ...

« やる気のスイッチ | トップページ | 雨降らし男の物語 »

MC14500B」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: ROMエミュレータ:

« やる気のスイッチ | トップページ | 雨降らし男の物語 »