V30 CPUを動かした。
数年前に、8088や8086を動かそうとして失敗していた。
これらのチップはHMOSと呼ばれる、現代のCMOSとは違うプロセスで作られていたらしく、 現代のCMOSチップではドライブできなかった。
あきらめて放置していたのだが、 NEC製の8086互換CPUであるV30なら、 CMOSプロセスで作られているからこの問題は回避できると聞いた。
また、CMOSプロセスになった事で、クロック周波数を落としても、 (定格外だが)動作するという話も聞いた。
そこで、RP2024とV30を接続して動作するかを確かめようという事になった。
今回は、なるべくAIに作らせてみている。
まず、AIに回路を考えさせた。 ネットリスト相当の物を作らせ、 それをKiCADに読ませてオートルータにかけ、 PCBを発注した。
RP2040側のC++のコードも、AIに書いてもらった。 V30の相手をする部分の他にも、PCからメモリイメージを送り込み実行する機能や、 シリアルから対話的にメモリを編集するモニタプログラムも作ってもらった。 更に、「アセンブラと逆アセンブラも付けて」と言ったら付けてくれた。 すばらしい。
届いたPCBを組み立て、PCに繋いだが、 最初は動作しなかった。
AIに相談したら「では回路を作りなおします」とか言いだした。 身体性がないAIはこれだから。
自分でデバッグしようと、ロジアナを取り出したが、 CPUを動かすとロジアナが途中で止まってしまう。 ロジアナ単体で動作すると正常で動作する。
これで半日ほど悩んだが、 最終的に発見したのは、 信号の衝突だった。
V30はアドレスピンとデータピンが共有されていて、 クロックごとに切り替わるステートによって、 CPUからアドレスが出力されるステート、 メモリからCPUにデータを送るステート、 という風に切り替わる。
AIが書いたコードは、次のステートではこの向きが切り変わるという信号が来た瞬間に向きを切り替えていた。 これによって、状況によっては電気がショートしてた。
こんな事もあろうかと、PCのUSBポートを直接使うのではなく、 USB HUBを経由してデバイスを繋いでいたのだが、 デバイスがショートした事で、USB HUBがリセットされ、 ロジアナの接続もリセットされていた。
適当なディレイを入れたら動き出した。