PC-6001用の8KByte ROMカードを作ってみる

PC-6001の右側面には拡張端子があり、市販のROMカートリッジソフトや、PC-6006 ROM&RAMカートリッジを差し込むことができます。

拡張端子の使い方の学習を兼ねて、まずは拡張端子に接続する8KByteのROMカードを作ってみます。たったの8KByteかヨ!とツッコミたくなる容量ですが、基本を抑えれば後は回路の応用で容量を増やすのは容易いです。

PC-6001mkII以降でも使えると思いますが、mkII以降はメモリの管理方法が少しだけ複雑なので初代機に限定します。

PC-6001のハードウェア上のメモリ構成

Z80の64KByteメモリ空間のうち、0000H-3FFFHが内蔵のBASIC ROM、C000H-FFFFHが内蔵のRAMになっていて、それ以外が空いた状態になっています。

PC-6001専用のPC-6006 ROM&RAMカートリッジを差し込むと、空き領域が埋まります。専用のROM&RAMカートリッジ内部は、16KByteのRAM(DRAM)と、2つのROMソケットがあります。

上図のメモリマップのように、外部ROMエリアが2つに分離しています。専用のROM&RAMカートリッジにはROMソケットが2つあるので、それに合わせてメモリ空間を分離したのでしょうか。 PC-6001本体の拡張端子には、外部ROMエリアを空間を2つに分割して扱えるような専用の信号が出ています。

このメモリ空間の割り当ては、内蔵BASICのメモリ空間の扱い方を基準にした構成です。拡張端子にはZ80の大半の信号が出ているので、この構成とは異なる使い方をすることも可能です。 例えば、外部ROM領域にRAMを載せるようなことも出来ます。ただ、PC-6001ハード上の制約で出来ない事もありますし、BASICが想定している使い方とは異なるのでBASIC起動後に不具合が起きる場合もありますから、 その辺の知識を踏まえておく必要はあります。

拡張端子の信号

PC-6001右側面側からみた拡張端子の信号(※負論理信号の記号を入れてないので注意 / mkII以降では一部の端子の機能が変わっています)

Z80の端子にはない、見慣れない信号がありますが、全てを説明するのは面倒なので、外部ROMをつなぐ為の信号にしぼって説明していきます。

MSW1,MSW2は、拡張基板側でショートしておきます。拡張スロットの内部には電断スイッチがあり、このスイッチがONになると電源ユニットの電源供給が停止されます。 つまり、PC-6001にROMカートリッジを差し込もうとすると、物理的に電断スイッチがONになります。PC-6001が動作している状態でROMカートリッジを差し込むような危険な扱いをしようとすると 電気的にPC-6001が止まるようになっています。これだけだとPC-6001が動作しないのですが、ROMカートリッジ側でMSW1とMSW2をショートさせると、電断スイッチがONであっても 電源ユニットからの電源供給が開始される仕組みになっているのです。 拡張端子に基板だけのような薄いものを差し込んだ場合、電断スイッチがONにならない(スイッチに触れない)ので、MSW1,MSW2をショートさせておく必要はありません。

CS2/CS3は、外部ROMへのアクセスがある時に有効になる端子です。0Vで有効(Active LOW)です。CS2は4000H-5FFFH、CS3は6000H-7FFFHへのアクセスです。 PC-6001内部では、Z80のMREQとAnとRD信号からCS2/CS3信号を生成していますから、拡張基板側でメモリアクセス時のアドレスデコードをする必要がなくなります。 注意点としては、このメモリ空間への書き込み時はCS2/CS3は有効にならないので、4000H-7FFFHをROMではなくRAMにするには、CS2/CS3を使わずに 基板側でZ80の各種信号を使って回路を組む必要があります。

CS2/CS3のおかげで、PC-6001に外部ROM(EPROM等)を接続するにはDn,An,CS2/CS3の信号を配線するだけ済みます。あとは電源周りとMSW1,2ですね。

他の端子のざっくり説明:RAS2,DRD2,WE,EXCASがDRAM用(8000H~の領域用)、EROMは内部BASIC ROMの無効化です

秋月のフラッシュメモリ

27CxxxのようなEPROMを使ってもよかったのですが、秋月電子に安いフラッシュメモリEN29F002Tがあったので、これを使ってみました。

ただ、PLCCのフラッシュメモリは基板に半田付けできないので、 aitendoソケット変換アダプタPLCC32-EP1Mも買ってみました。 aitendoには他にも激安の変換基板もあったりしますが、PLCCからDIPへの接続先がおかしなものもあるので注意してください。

このPLCCからDIPへの変換基板は27C020と同じピン配置になっています。PLCCのWEはDIPのPGM(31)、PLCCのRESETはVPP(1)につながっていました。

フラッシュメモリEN29F002Tへの書き込みデバイスを調べてみたところ、以前から所有していた、秋月電子に売っている LEAPER-3Cが対応していました。

変換基板の足が太いので、ROMライターに綺麗にはまりません。傾いた状態だと途中で書き込みエラーが出るので水平に。

ROMタイプにEON EN29F002Tを指定します。

配線してみる

PC-6001のメモリ空間とフラッシュメモリの対応はこのようになります。もったいない・・・

先に説明したとおり、拡張端子からフラッシュメモリへの配線はD0-D7,A0-A12,CS2,+5V,GNDだけになります。

PC-6001側のCS2はフラッシュメモリのOE端子に接続します。また、フラッシュメモリのCSはGNDに繋いでおきます。このフラッシュメモリは、CSとOEがLOWとなった時にデータバスにデータが載るようなので、CSは常にLOWにしておいて大丈夫なようです。後々のことを考えると、CS2をCEに、RDをOEに繋いでおく方がいいと思いますが、拡張コネクタからの配線が1本減りますし。

その他のフラッシュメモリ側のA13-A17はGNDへ、WE(PGM)とRESET(VPP)は+5Vへ繋ぎます。

CS2の代わりにCS3を使うと、4000Hからではなく6000Hからの配置になります。

電源ONで拡張ROMのプログラムを実行

PC-6001は電源投入時に外部ROM領域の4000HにA(41H),4001HにB(42H)が書き込まれていれば、4002H,4003Hに書かれている番地をCALLします。ROMカートリッジからの起動シーケンスはPC-6001各機種で異なります。ROMカートリッジについてに詳しく書かれています。

パーツまとめ

PC-6001本体はともかく、ここの製作で使用したものは全て今でもネット通販で手に入るものです。

特にM.A.D.さんの通販ページには面白いものがたくさんあるので、のぞいてみるといいと思います。