初代PC-6001にPC-6031を繋ぐ
- 2022/03/30 11:29
PC-6001用のフロッピーディスクドライブが動き出したことで,私の気持ちは一気にPC-6001に傾きました。ここは意を決して初代PC-6001をレストアしようではありませんか。
この初代PC-6001は,PC-6001mk2が出た直後に投げ売りされていた時に買ってもらったものです。発売から2年が経過し,その後初代でも動くソフトが激減して世代交代を実感するのですが,緑バックの見やすい画面,大文字のファンクションキー,そしてかわいらしい筐体と意外に使いやすいキーボードと,私にとっては魅力一杯のマシンでした。
なんといっても,私が初めて使ったコンピュータですし,プログラムを組むことやコンピュータのシステム構成を学ぶ機会をくれた,記念すべきパソコンなのです。
今にして気が付くのは,2年ほどでPC-6001を卒業してしまったことで,当時の私には難しすぎて理解出来ずにいたことがそのままになっていたことをがあるという事実です。今ならとても簡単に理解出来ることが,当時の私にはさっぱりわかりませんでした。
だから,今,新しいマシンに触れているのと同じ新鮮さがあります。ほら,よくあるじゃないですが,今の知識と能力のまま小学生に戻れたらっていうやつ,まさにあれなんです。
今の力なら出来る事,でも当時は考えも及ばなかったことに,ハードウェアの自作があります。当時は情報源も少なく,部品の入手方法も限られており,しかも高価でしたから小学生には到底無理な工作も,今なら十分可能です。
そして,今の私が考えたのが,16kバイトの拡張RAMと拡張BASICのROM,そしてFDインターフェースを1枚にのせた拡張ボードです。
ご存じの通り,PC-6001でPC-6031を使おうと思ったら,拡張ユニットPC-6011と拡張BASICカートリッジが必要です。通常ディスクBASICと呼ばれるものがROMで供給されるのですからフリーエリアは大きく減りませんし,起動も迅速なので歓迎すべきところですが,貴重な拡張スロットが消えてしまうのは痛いところです。
しかも実用性から必須である拡張RAMまで考えると,当時一体どれだけの人がPC-6031を使っていたのか首をかしげたくなりますよね。
私の考えていたカードは,3つの機能を持つもので,これ1つでPC-6001mk2のモード1からモード4をカバーするものです。RAMは256kビットのSRAMで簡単配線,ROMも27256を使って2つの16kバイトの空間をスイッチで切り替える事が可能,そして8255を搭載しFDインターフェースも装備ということで,まさにPC-6001をフルスペックで使うカードなのです。
個人的には,純正で用意されていなかったものを勝手に付け足すのはPC-6001に限っては違うなと思っていて,ROMのエリアに書き込み可能なフラッシュを置いたり,RAMをバンク切り替えで増やしたりということには,興味はありません。
そんなわけで,構成を考えます。
まずRAMは256kビットのSRAMを半分だけ使います。残りの半分は無駄になりますが,A14をLowに固定して殺してしまいます。アドレスは8000hからBFFFhまでの16kバイトなので,簡単なデコード回路でRAMをイネーブルすればよいと考えました。ただ,これは結局失敗に終わります。
さらに,RAMのCSをスイッチで切り離しでやればRAMカードリッジを抜き差しする手間も省けて楽ちんという事になり,この段階ですでに純正を越えるものになりそうな予感がします。
ROMは4000hから7FFFhまでの16kバイトですが,PC-6001は4000hから5FFFhと,6000hから7FFFhまでの8kバイトごとにエリアが分かれています。どちらにしても,この16kバイトの空間に27256を割り当て,A14にスイッチを取り付けて16kバイトx2の構成としてROMの交換を再現します。
さらにCSをスイッチで切り離せるようにしておき,ROMカートリッジを完全に抜いた状態も再現出来るようにします。
FDインターフェースは8255の3つの8ビットポートがそのまま外のコネクタに出ているだけなので簡単です。アドレスはD0hからD3hまでで,しかも下位4ビットはデコードされていないので,D5hからD7hまでイメージがでても構いません。あと,これはPC-6011相当の機能ですので,CSを切り離す必要はないでしょう。
回路を考えますが,アドレスデコーダやリセットの反転でどうしてもゲートが中途半端な数になり,いくつか余ってしまいます。特にROMについては4000hから5FFFhのエリアと6000hから7FFFhまでのエリアがそれぞれデコードされてCSが出ているので,これらをORしてROMに突っ込めばよいのですが,それにはANDゲートが1つ必要です。
他はNANDゲートとORゲートで間に合うので,わざわざANDゲートを使うのは悔しいですから,ここはショットキーダイオードでAND回路を作る事にしました。
そうやって作ったカードですが,残念な事にRAMが動きません。暴走します。ROMは動いているようですが,FDインターフェースも動いてくれません。なかなか大変そうなかんじです。
RAMは,アドレスバスがCPUからだけでVDGのアクセスでは動かないことを知らず,VDGのアクセスが出来ないRAMになってしまい,動作しなかったようです。多くの先人が開拓した外部DRAM用の信号を転用する回路に組み直して解決しました。勝手なことをすんな,という話です。
8255のアドレスデコードもゲートを減らすために一部ダイオードORを使ったのですが,アクセスが全くできません。実はD0とD1が入れ替わっていたという恥ずかしいミスが原因だったのですが,動き出してもRAMのアクセスが時々不安定になっていました。
波形を見ると,ダイオードORの出力の波形がヨレヨレ,データバスの衝突も起きている感じです。PC-6001は結構タイミングがシビアな設計を行っているようで,ルーズな設計ではトラブルが出がちです。やはりダイオードORは厳しいかと,アドレスデコーダを再設計しました。
ROMのデコーダも,ワンゲートのANDの在庫が見つかったのでこれに切り替え,結局すべてどっかで見たような回路に落ち着いてしまいました。そのROMですが,半分は拡張BASICを入れるとして,もう半分はI/Oに掲載されていたEXAS BASICコンパイラを打ち込んであるので,これを焼くことにします。
N60BASICはとにかく遅く,せっかくのグラフィック機能やサウンド機能が有効に利用出来ません。自ずとマシン語に頼ることを考えますが,当時の私にはちんぷんかんぷんでした。後にわかるのは,Z80のアセンブリ言語は全然難しいものではなく,PC-6001の内部情報に関する資料を全く持っていないことが原因だったということでした。
作ったゲームが遅くて話にならないとうなだれていたとき,EXAS BASICコンパイラで作られたゲームが製品として世に出ていることを知ると,これが自分の限界を超えるツールであると意識をするようになりますが,そうはいっても当時の私に1万円を越える買い物は簡単ではなく,夢で終わってしまったのでした。
それがこうして,実機でコンパイルをし,BASICで書いたプログラムが高速で動作するのを味わうと,本当に感慨深いものがあります。
そうそう,FDインターフェースのコネクタについてです。今どきアンフェノールの36ピンコネクタなんて簡単には手に入らないでしょうし,手に入っても正規品の在庫でしょうから高価なはずです。
ひょっとするとと思って,昨年注文したデジットのお楽しみ箱を探してみると,アンフェノールのメスコネクタの圧着タイプが入っていました。他にも16ピンと10ピンのコネクタも見つかり,手持ちのフラットケーブルを使って変換ケーブルを作ることにしました。
基板に直接アンフェノールコネクタを置ければいいんですが,ピッチが2.54mmではないのでそのままではマウント出来ず,ユニバーサル基板でスマートに作るには変換ケーブルの世話になるのが一番早いです。
PC-6001のFDインターフェースは本来36ピンで,8ビットポートが3つで24ピン,これにリセットを加えて25ピン,残りの11本はGNDです。全部繋いでおく必要もなかろうということで16ピンと10ピンのコネクタを使ってギリギリ本数で配線を行います。
完成したのがこの写真です。基板はあるお店のオリジナル品を買いましたが,実は製造不良があり,このクオリティなら返品だなあと思ったのですが,使えないわけではないですし,気の毒なのでこのまま使うことにしました。
ということで,なんとか動き出したのですが,実際に動かしてみると,あの初代でフロッピーが使える事の感激は,それがかつての憧れだったことを思い出させてくれます。カセットはカセットで趣がありますが,やっぱりフロッピーの便利さは一度使うともう戻れません。
しかし最大の問題は,5インチの2Dや1Dのディスクの入手が難しい事。40年も前の磁気メディアですから当たり前の事とは思いますが,AppleIIでも使うこの手のディスク,なんとかしないとちょっと厳しいなあと思います。