先日eBayでIntel 4004用のメモリインターフェース4289を購入したのですが、到着予定は11/16~22でまだ届いていません。届いたらすぐに動作確認をしたいので準備を進めることにしました。
過去に白セラミックのIntel C1702Aが8つも載った基板(下記写真)を入手しており、ROMはこれを使おうと思っています。
ただ、これをいきなり使うのは怖いので、実験用のROMを調達しました。
NS製の白セラミックは上記ROMボードと同時期に入手していたもの、黒セラミックは新規にeBayで買ったものです。3つで60PLN(約1800円)、送料31PLNでポーランドから10日ほどで届きました。
このROMですが、27xx系のROMとは電圧や作法が違うので、普通のROMライターでは書けません。Retro Chip Tester (RTC)もアダプターを使って読み込み(ダンプ)はできるのですが、書き込み用のアダプターはまだありません。
"1702 programmer"でググったところ、参考になりそうなサイトが2つ見つかりました。(この記事の末尾の参考文献参照)
[1]の方はリーダー機能とライター機能の双方を完備しているので若干複雑な回路になっています。[2]の方はライター機能に特化したもので、かなり簡単な回路です。[2]に紹介されている文献[3]もとても参考になりました。具体的な作り方がわかったのでIntel のオリジナルの資料[4], [5]で仕様を確認。(順序が逆な気もしますが。)
読み込みをRCTに任せて、書き込み専用のライターならわりと簡単に作れそうな気がしてきました。
書き込みに必要なことをまとめると、
・電源は+12V, -47V
・Vcc=0V, Vbb=+12V, /CS=0V
・PROGRAM=-47V, Vdd=-47V, Vgg=-35~40V(-47Vからツエナーダイオード(9.1V)で作ったやつでOK)。
・PROGRAM, Vdd, Vggはパルスで与える。(Duty比20%以下、立上り立下り1μs以下)
・D1~D8は0Vで"0"、-47Vで"1"。
・A0~A8は0Vで"1"、-47Vで"0"。
・上記信号をタイミング仕様に従って生成して1byte書き込み、12ms以上休む。
・アドレス0x00~0xFFへの書き込みを32回繰り返す。
文献[3]ではアドレスやデータをトグルスイッチで与えていたので、1つのアドレスに対し32回繰り返してから次のアドレスに行けばいいのかと思ったのですが、文献[4]に
"For best results, the 1602A/1702A should be programmed by scanning through the addresses in binary sequence some 32 times. Each pass repeats the same series of programming pulses. The duty cycle for applied power must not exceed 20%. As result, each pass takes about 4 seconds, with the 32 passes taking just over 2 minutes."
とあるため、「"0x00~0xFFへの書き込み"を32回繰り返す」が正しいやり方のようです。
タイミングに関する仕様はこんな感じ。
肝心のProgram Pulse WidthはMAX.=3msと規定されているだけで、MIN. TYP.が提示されていないのですが、とりあえず2.5msにすることにしました。
ホスト用のマイコンには、文献[1]ではArduino、[2]ではPCを使っているようでしたが、私は以前にVFDインターフェースを作ってノウハウのあるRaspberry Piを使うことにしました。
ロジック系と-47V系とのインターフェースには、トランジスタアレイTBD62083(部品情報)が使えるんじゃないかと思って調べてみました。
一見するとインバーターロジックですが、入力が2.5V以上でON、0.6V以下でOFFのスイッチ(出力端子OがGNDにつながる)のような働きをします。
・出力耐圧50V, 電流500mA/ch。(電圧はギリギリだけどOK、電流も余裕。)
・ターンオン時間=0.4μs, ターンオフ時間0.8μs。(要求条件の1μsを満たす。)
・入力2.5VでONなのでラズパイのGPIOでもOK
(と書いていて今気がついたのですが、ラズパイのGPIOって3.3V系でしたね。実測したら余裕で3V出てるから結果オーライでした。と書いてさらに調べたら、CMOS3.3V系の出力は直接5VのTTLにつなげてもいいのね。VFD用のインターフェースでは真面目にレベル変換用バッファを挟んでたけどもしかして不要だったか・・・)
ラズパイのGPIOのGNDを-47Vに接続して大丈夫か若干不安だったのですが、試してみたら期待通りの動作をしてくれました。
今までは、オシロスコープで50V/divなんて何に使うのだろう?コンセントの電源でも測るのか?とか思っていたのですが、まさかデジタル回路の工作で使うことになるとは。
パルスのエッジも1μsをなんとか満たしていそうです。
電源は過去にメルカリで買ったMatsusadaの絶縁出力の安定化電源。これのおかげで電源部分をサボれてかなり助かりました。
ラズパイ用の電源はモバイルバッテリーを使いました。-47Vが絶縁出力なので多分USBアダプタでも大丈夫だとは思うのですが、ラズパイ側のGNDを-47Vに接続するので念のため。
一つ大事なことを書き忘れていました。今回使っているRaspberry PiのOSはリアルタイムOSではないので、書き込み信号発生時のタイミングが保証されません。一番心配なのは、PROGRAM, Vdd, Vggのパルス信号をアサートしているときに割り込みがかかって3msを超えてしまう事態です。最悪の場合にはROMが壊れてしまうかもしれません。
というわけで、"raspberry pi 割り込み禁止"でググったところ、[6]のサイトが見つかりました。Raspberry Pi Zeroでこれを試したところ期待通りの動作をしたのでこれで解決しました。Pi 4での方法は見つけられなかったので、今回のプログラムはPi Zero専用になっています。
完成した書き込み器の回路図はこちら。[PDF]
プログラムはGitHubで公開しています。
書き込みの様子です。
書いたROMをRetro Chip Testerでダンプ。無事書き込めていることが確認できました。
■参考文献、サイト
[1] A compact programmer for 1702A EPROMs – Matt's Tech Pages
[2] Building a Simple 1702A EPROM Programmer by Stephen H. Lafferty
[3] "Low-Cost EPROM Programmer" by Dan Vincent, Popular Electronics, Feb.1978
[4] "Read Only Memories", The Intel Memory Design Handbook, Aug. 1973, pp. 2-1~2-5
[5] "Silicon Gate MOS 1602A/1702A", Intel Data Catalog 1975, pp. 3-7~3-13
[6] Raspberry Pi で割り込みを禁止したい (≒DI/EI したい)by @yagshi
過去に白セラミックのIntel C1702Aが8つも載った基板(下記写真)を入手しており、ROMはこれを使おうと思っています。
ただ、これをいきなり使うのは怖いので、実験用のROMを調達しました。
NS製の白セラミックは上記ROMボードと同時期に入手していたもの、黒セラミックは新規にeBayで買ったものです。3つで60PLN(約1800円)、送料31PLNでポーランドから10日ほどで届きました。
このROMですが、27xx系のROMとは電圧や作法が違うので、普通のROMライターでは書けません。Retro Chip Tester (RTC)もアダプターを使って読み込み(ダンプ)はできるのですが、書き込み用のアダプターはまだありません。
"1702 programmer"でググったところ、参考になりそうなサイトが2つ見つかりました。(この記事の末尾の参考文献参照)
[1]の方はリーダー機能とライター機能の双方を完備しているので若干複雑な回路になっています。[2]の方はライター機能に特化したもので、かなり簡単な回路です。[2]に紹介されている文献[3]もとても参考になりました。具体的な作り方がわかったのでIntel のオリジナルの資料[4], [5]で仕様を確認。(順序が逆な気もしますが。)
読み込みをRCTに任せて、書き込み専用のライターならわりと簡単に作れそうな気がしてきました。
書き込みに必要なことをまとめると、
・電源は+12V, -47V
・Vcc=0V, Vbb=+12V, /CS=0V
・PROGRAM=-47V, Vdd=-47V, Vgg=-35~40V(-47Vからツエナーダイオード(9.1V)で作ったやつでOK)。
・PROGRAM, Vdd, Vggはパルスで与える。(Duty比20%以下、立上り立下り1μs以下)
・D1~D8は0Vで"0"、-47Vで"1"。
・A0~A8は0Vで"1"、-47Vで"0"。
・上記信号をタイミング仕様に従って生成して1byte書き込み、12ms以上休む。
・アドレス0x00~0xFFへの書き込みを32回繰り返す。
文献[3]ではアドレスやデータをトグルスイッチで与えていたので、1つのアドレスに対し32回繰り返してから次のアドレスに行けばいいのかと思ったのですが、文献[4]に
"For best results, the 1602A/1702A should be programmed by scanning through the addresses in binary sequence some 32 times. Each pass repeats the same series of programming pulses. The duty cycle for applied power must not exceed 20%. As result, each pass takes about 4 seconds, with the 32 passes taking just over 2 minutes."
とあるため、「"0x00~0xFFへの書き込み"を32回繰り返す」が正しいやり方のようです。
タイミングに関する仕様はこんな感じ。
肝心のProgram Pulse WidthはMAX.=3msと規定されているだけで、MIN. TYP.が提示されていないのですが、とりあえず2.5msにすることにしました。
ホスト用のマイコンには、文献[1]ではArduino、[2]ではPCを使っているようでしたが、私は以前にVFDインターフェースを作ってノウハウのあるRaspberry Piを使うことにしました。
ロジック系と-47V系とのインターフェースには、トランジスタアレイTBD62083(部品情報)が使えるんじゃないかと思って調べてみました。
一見するとインバーターロジックですが、入力が2.5V以上でON、0.6V以下でOFFのスイッチ(出力端子OがGNDにつながる)のような働きをします。
・出力耐圧50V, 電流500mA/ch。(電圧はギリギリだけどOK、電流も余裕。)
・ターンオン時間=0.4μs, ターンオフ時間0.8μs。(要求条件の1μsを満たす。)
・入力2.5VでONなのでラズパイのGPIOでもOK
(と書いていて今気がついたのですが、ラズパイのGPIOって3.3V系でしたね。実測したら余裕で3V出てるから結果オーライでした。と書いてさらに調べたら、CMOS3.3V系の出力は直接5VのTTLにつなげてもいいのね。VFD用のインターフェースでは真面目にレベル変換用バッファを挟んでたけどもしかして不要だったか・・・)
ラズパイのGPIOのGNDを-47Vに接続して大丈夫か若干不安だったのですが、試してみたら期待通りの動作をしてくれました。
今までは、オシロスコープで50V/divなんて何に使うのだろう?コンセントの電源でも測るのか?とか思っていたのですが、まさかデジタル回路の工作で使うことになるとは。
パルスのエッジも1μsをなんとか満たしていそうです。
電源は過去にメルカリで買ったMatsusadaの絶縁出力の安定化電源。これのおかげで電源部分をサボれてかなり助かりました。
ラズパイ用の電源はモバイルバッテリーを使いました。-47Vが絶縁出力なので多分USBアダプタでも大丈夫だとは思うのですが、ラズパイ側のGNDを-47Vに接続するので念のため。
一つ大事なことを書き忘れていました。今回使っているRaspberry PiのOSはリアルタイムOSではないので、書き込み信号発生時のタイミングが保証されません。一番心配なのは、PROGRAM, Vdd, Vggのパルス信号をアサートしているときに割り込みがかかって3msを超えてしまう事態です。最悪の場合にはROMが壊れてしまうかもしれません。
というわけで、"raspberry pi 割り込み禁止"でググったところ、[6]のサイトが見つかりました。Raspberry Pi Zeroでこれを試したところ期待通りの動作をしたのでこれで解決しました。Pi 4での方法は見つけられなかったので、今回のプログラムはPi Zero専用になっています。
完成した書き込み器の回路図はこちら。[PDF]
プログラムはGitHubで公開しています。
書き込みの様子です。
書いたROMをRetro Chip Testerでダンプ。無事書き込めていることが確認できました。
■参考文献、サイト
[1] A compact programmer for 1702A EPROMs – Matt's Tech Pages
[2] Building a Simple 1702A EPROM Programmer by Stephen H. Lafferty
[3] "Low-Cost EPROM Programmer" by Dan Vincent, Popular Electronics, Feb.1978
[4] "Read Only Memories", The Intel Memory Design Handbook, Aug. 1973, pp. 2-1~2-5
[5] "Silicon Gate MOS 1602A/1702A", Intel Data Catalog 1975, pp. 3-7~3-13
[6] Raspberry Pi で割り込みを禁止したい (≒DI/EI したい)by @yagshi
※コメント投稿者のブログIDはブログ作成者のみに通知されます