ROM Emulatorをつくってみる。
やっぱり、Z80とかのレトロCPUをやりはじめると、いちいちROM焼くのは大変ですし、ROM エミュレータがほしくなりますね。。。ちょいと調べると次のサイトがヒットしました。
順当な設計ですね。SRAMとバスを切り替えるように設計して、CPU停止中にRAMに転送する。
今回はマイコンのっけて、DIP28pin以内に収めます。DIPのソケットの上に乗っける感じで作りたいです。
設計(雑)
最初はエミュレーションするROM(SRAM)はマイコン内部のRAMを使おうと思いましたが、32kByte以上となると64pinとかになって使いにくいのと、無駄に高性能で高いのでだったりするのでやめました。ソフト自体は簡単なので、、
あと案外、100ns以内でアドレスデーコードしてデータバスから出力するのと同時にOEやCEの制御もしないといけないので、速度的に厳しいかもです。100MHzぐらいでアセンブラでゴリゴリ書けばいけると思いますが。
ということで、使い慣れたSTM32F103使って、RAMは外付けにします。データ直接USB(HID)で受信するつもりですね。
Aliexpressでかってるのでパチモンっぽいですがなんか動いてます。ただ、次のサイトの人が言っている通り一部のPWM出力が機能しなかったりしますけどね。
https://www.stm32duino.com/viewtopic.php?t=2020
STM32は3.3Vなので、5V入力を受けられるFT端子にSRAMは接続したいところですが、数えると21本しかない、、、
USBとデバッグ端子で4本とられるので、結局17本しか残らいないですね。。。
しかたないので、バスはプルアップしている前提にしてディジタルトランジスでドライブします。(オープンコレクタもしくはオープンドレイン駆動)
中日電工さんのサイトによるフルスピードのHIDで実測では6KByte/s程度のようです。1Byteあたり166usですからたぶんプルアップで引っ張ても間に合うかな。たぶん。
あとはCPUの停止ですが、Electrelicさんのサイトを参考にCPUをリセット状態にすることにしました。ICクリップをはやして、オープンコレクタとしてLOWにできるようにします。たいていのリセット回路はパワーオンリセットとしてコンデンサがついている場合が多いので、コンデンサの端子につけばOKでしょう。
今日はここまでにします。
さいなら!-_-
おまけ
画像がなかったので、適当にイラスト屋AIで「ROM Emulatorを自作します」にて生成してみました。
なんの意味もない画像です…
それにしても、、こんなにイラスト屋が世の中に浸透するとわ。。。すごいもんです。
コメント