前回、古代の8ビット・プロセッサ共(80系)を入手。まずは「火をいれて」最近ご無沙汰なパラレル・バスの動作などを愛でたいと思いました。しかし今時、昔の8ビットCPUを刺せば動くようなボードもなく、前回は「どうする?」で止まってました。今回は古代のプロセッサ共をNOP無限ループに陥らせるためのハードウエアを工作。
前回入手のプロセッサ・チップは、インテル8085、ザイログZ80、インテル8088の全て互換チップでした。8085とZ80はどちらもベストセラー8080の後継機でありながら別な方向へ進んだもの。8088は8085のハードウエアのイメージを残しつつ16ビットCPU化し、今のパソコン(64bit)にまで血脈がつながる8086の8ビットバス縛りの兄弟チップであります。初代IBM-PCのCPUね。8088は中身は16ビットとは言え、外から見たらば8ビットだと。
一応、トラタヌの目論見を述べておくと2段階での動作実験を考えてます。
-
- ハードウエアの動作確認。NOPの無限ループを実行。アドレス・バス、データ・バスなどの動きを観察。ついでにホールドや割り込みへの反応なども見物してみる。
- ホストPC上で「クロス開発」したプログラムをダウンロードして実行できるようにする。CPUとメモリだけのちんまりしたシステムだけれども。
「古代の」とは言えCPUなので、動きだすためにはメモリから機械語命令をフェッチして実行しなければなりません。「当時」であれば、ブート時に実行されるプログラムはマスクROM(工場でプログラムするROM)かUV-EPROM(紫外線消去型EPROM)に書き込んでそれをバスにぶら下げるのが一般的でした(今みたいなFlashなどは無かったのよ。)今時マスクROMは絶滅危惧種な上、最低発注数量数万個の世界なのでありえへん。一方「UV-EPROMの在庫品」の流通は細々と続いているみたいですが、新規製造は多分絶滅種。それにUV-EPROMに書き込むためにはEPROMライター(実行時とは異なる高い電圧供給必須)、消去するためには紫外線消去器(UV-EPROMのシールをはがし、強烈な紫外線を照射して記憶を初期化する装置)が必要。ちょっとメンドすぎます。そこで以下のように計画しました。
「1」の用途には「手動プログラミング」可能なスイッチでROMモドキを作り、NOPか短い機械語コードの無限ループを実現できるようにする。
「2」の用途にはお手頃サイズのSRAMで主記憶を構成し、これを外部のマイコンからターゲットCPUにDMAをかけてSRAM上にプログラムを流し込んだ後、ターゲットを再起動してプログラムを実行させる。
つい「2」のためには「超古代技術」手動コンソール(アドレス、データ線にスイッチがついていて、それをパチパチやって書き込む)も考えましたがこれはあまりにメンドい。どうせ使える外部マイコンはいろいろあるので、ホストからのダウンロードはそれらを活用する方がお楽。中途半端な現代化。
手動プログラミングROM8ビットx2ワード
さて、今回は「1」の用途のために手動(ピンセット)でプログラム可能な8ビットx2ワード(2バイトです)のROMを作ってみました。回路図が以下に。
8ビットx2ワードのROMになるのが、8ビットのDIPスイッチ2個です。左下のアドレスデコーダに使ったSN74HC139の出力端子がまだ2本余っているので、DIPスイッチをもう2個追加して4ワードにできそうなもんですが、「8ビットのパラレルバス」のはんだ付けがあまりにメンドイので2個しか取り付けてません。
「リード信号」がアクティブになったときだけ、データバスを駆動するように「バスバッファ」TC74HC541を取り付けてあるので、8085や8088のようなマルチプレクス・バスでもアドレス線の出力の観察を邪魔せずROMとして機能するハズ。
なおRA2の33kΩプルアップはROM機能的には不要です。今回「リード信号」がインアクティブなときに541の出力がHiZになっていることを確認したかったがために取り付けてあるだけのものです。プルアップのお陰でリードが出てないときには出力はオールHiになると。
実機で動作確認
Analog Discovery2のロジアナ機能で観察した上記回路の動作が以下に。
それらしく動いているんでないかい。なおDIPスイッチはOFF側でビットは1、ONにすると0となります。
無限NOPループ編はできそう?