PR 記事には広告が含まれています
スポンサーリンク
Translate

UV-EPROMライターを作っています

スポンサーリンク

ファミコンの自作カセットが作りたくて、いろいろ準備をしています。前回はUV-EPROMの消去用の紫外線ライトの実験でした。

今回は、ROMライターを作りたいと思います。

スポンサーリンク

ROMライターって作れるのか

ROMライターとは

ROMライターとは、プログラムの書かれていない生のROMにデータやプログラムを書き込む(昔は焼くと言っていました)装置です。

WINGONEER TL866II Plus USB高性能 EEPROM フラッシュBIOSプログラマ、ATMEL AVR ATMEGA AT90 PIC GAL SRAM CMOS
WINGONEER

こんな感じの装置で、パソコンからデータを送って、ROMの書き込み信号に変換し、生のROMに書き込んでいきます。

書き込むにはどんな信号が必要なのか

Aliexpressで購入した、STmicroのUV-EPROMのM27C256のデータシートがこちらです。

電源の種類

通常の電源電圧は5V、消費電流は30mA程度とあります。最近の3.3Vでは動作しないので、5Vのマイコンでライターを作ることにします。arduinoにしようかな。

データシートの書き込みの説明をみてみます。

プログラミグモードにするには、Vppを12.75Vに、Vccを6.25Vにする。と、書いてあります。ライターには12.75Vと6.25Vの電源が必要なんですね。

  • リード時の電源:5V
  • ライト時の電源:12.75Vと6.25V

ということがわかりました。

書き込み制御の方法

次は、書き込みにどのような信号が必要か調べます。データシートの書き込み波形の図を見てみます。

  • A0-A14:アドレス指定
  • Q0-A7:データの指定
  • Vpp:ライトモードにするための信号(通常5Vで、ライトモードにするために12.75Vに上げる)
  • Vcc:電源(ライトモードにするためには6.25Vに上げる)
  • /E(/CS):書き込みタイミングを指定
  • /G(/OE):読み出しタイミングを指定

結構簡単な制御方法ですね。まとめると

  1. Vppを12.75V、Vccを6.25Vにしてライトモードにする
  2. アドレスとデータを指定する
  3. /EにLowのパルスを入れると書き込まれる
  4. /GをLowにすると書き込んだデータが読み出されるのでチェックする

です。arduinoでもできそうですね。

スポンサーリンク

arduinoでROMライターを作る

IOピンが足りるかな?

制御方法が難しくなかったので、5Vのマイコンであるarduinoでライターを作ることを検討しようと思います。問題はarduinoのIOピンが足りるかです。

  • アドレス 15本
  • データ 8本
  • Vpp、Vccをライトモードにするための信号 1本
  • /E、/G 2本

合計、26本必要です。各arduinoのユーザが利用できるIOピン数は

  • UNO:18本
  • Leonardo:21本
  • MEGA:46本

くらいでした。UNOだと全然足りず、MEGAだとかなり余裕で足ります。MEGAのボードは値段がちょっと高いので、Leonardoで考えたいと思います。Leonardoも普通に買うと高いので、Leonardoに使われている、Atmega32U4を使おうと思います。

IOピンの節約

データピンはライト動作と、リード動作で、双方向の信号のやりとりが必要ですが、アドレス線はマイコンからEP-ROMへの片方向です。なので、アドレスの15本はシフトレジスターを使って、IO数を節約します。

具体的には74HC595というメジャーなシフトレジスタを2段使って、SPI信号を16ビットのパラレル信号に変換します。

ブロック図にすると、こんな感じです。たった3本のIOで、ROMのアドレス線15本分がまかなえます。(注意:図のMOSIとIO?が逆になってした)もし、もっと大きなROMに書き込みたくなった時には、シフトレジスタを追加するだけでアドレスが拡張できるので、簡単に対応できますね。

回路の設計

ROM1個用

先ほどのブロック図に、電源の制御、制御信号、データバスを追加してみました(注意:図のMOSIとIO?が逆になってした)。アドレスバスをシフトレジスタにしたので、必要なIOピンがかなり少なくて済みました。全部で14本です。Atmega32U4(Leonardo)のピンにはまだ余裕があるので、2つのROMに書き込めるようにしようと思います。

というのも、ファミコンのカセットの中には、プログラムROMとキャラクターROMの2つが入っています。

写真の右側がプログラムROM、左側がキャラクターROMです。ファミコンのカセットのROMを作る時には、これらの2つのROMにデータを書き込む必要があります。

2つのROMをセットできて、プログラムROMもキャラクターROMも一緒に書き込むことができれば便利です。

ROM2個用に拡張

2個のROMが制御できるよう拡張したのが、この回路図です。どのIOピンを使うかのアサインもしてみました。Atmega32U4(Leonardo)で2個のROMに書き込みができそうです。

電源の切り替え回路

EP-ROMにデータを書き込む時には、Vppに12.75V、Vccを6.25Vにしてライトモードにする必要があります。このための電源と、電圧を切り替える回路を考えます。電源回路は、安いDCDCモジュールを使って、5Vから12.75Vと6.25Vを作ります。

DC-DC 2-24V〜2-28V可変パワーモジュール2A SX1308ステップアップブーストコンバータNov01ドロップ船
Wolfrule

これを使います。ボリュームを調節することで、25V近くまで昇圧することができます。このDCCDを使って、こんな感じの回路を考えます。

これを回路に置き換えるとこんな感じです。

ダイオードを使った電源のOR回路になっています。通常は5Vが出力されていますが、Pch MOS-FETがONすると、DCDCの電圧の方が高いために、DCDCコンバータの電圧が出力されます。

Pch MOS-FETは負論理(ゲートを0VにするとFETがON)なので、マイコンから制御しやすいように、トランジスタで正論理に変換しています。これによって、IOがLowの時はPch MOS-FETがOFFし、出力には5Vが出力され、Hiの時はPch MOS-FETがONしてDCDCの電圧が出力されるようになります。

Pch MOS-FETはON抵抗が小さければ何でもよく、秋月電子のIRLML6402などが使えます。トランジスタはNchの物であれば何でもよく、2SC1815など何でもいいです。

注意が必要なのは、回路の最後にあるダイオードによって電圧降下が起こるため、DCDCコンバータの電圧は、6.25Vや12.75Vに設定するのではなく、ダイオードを通過した後の電圧が6.25Vや12.75Vになるように調整します。

スポンサーリンク

基板に実装

半田付け開始

回路が決定したので、回路を作ります。こんな感じの配置で行こうと思います。

数時間かかり、部品の実装が終わりました。次は基板の裏の配線です。

数時間かけて一通り配線も終わったので、動作テストです。あちこちのピンに5Vをつないだりして、誤配線がないかチェックです。電源の切り替えも回路もうまく動作しています。なかなかいい感じに動作しました。

完成

アドレスバス、データバス、制御信号とそれぞれに確認用のLEDを付けました。どの信号がONしているのかわかるので、書き込み用のプログラムのデバッグに便利です。

この基板、不思議な形をしていますが、これは自作のマイコン基板に刺すためです。

スポンサーリンク

カセットArduino

今制作中のArduino Leonardo互換のマイコンボードです。ファミコンのカセットスロットがついていて、全てのIOピンと、32bitのパラレル出力がつながっています。ArduinoにHAT基板を接続するように、拡張ボードをこのカセットスロットに差し込んで使います。カセットArduinoという名称で、現在開発中です。

例えば、こんなカセットを刺すと、

時計が作れたりします。こんな感じです。いいでしょ。

それでもって、今回作った基板は、

ROMライタカセットになります。ROMが縦に刺さっているなんて前代未聞ですが、面白いでしょ。この仕組み。

回路が完成したので、今度はプログラムの作成です。うまく書き込めるようになるでしょうか????

2019.6.21 つづき ROMに書き込んだり読み込んだりできるようになりました