ギャラクシアンの基板でマルチゲームを!! | Arcade Cabinet

Arcade Cabinet

自作したゲームコントローラを紹介します


ギャラクシアンの基板をFPGAで完全再現という試みを行っているのですが、VHDL(デジタル回路設計用のハードウェア記述言語)の習得が難しいそうです。また、デジタル論理回路を勉強し始めた状態で無理なのも当然です。

そこで、言語の習得は実際の基板を解析してからにしました。


まずZ80の勉強です。
いきなり難しく内容の濃い本でしたが、深く読むととても勉強になります。Z80は米国ザイログによって製造された8ビットマイクロプロセッサーで1976年に発表され、1980年代まで多くのコンピュータに搭載されていました。


Z80の端子です。A0-A15はアドレスバスといってメモリの場所を指定する端子です。
D0-D7はデーターバスといって、ここからアドレスで指定された場所の8bitのデータ(0~255)を読み書きできるようになっています。
アドレスバス1本には0もしくは1(LもしくはH)の1ビットのデータがシステムのクロックに同期して出力されます。アドレスバスが16本あるという事は、2の16乗(64KByte)のアドレスを指定できます。16進数にすると$0000-FFFFまでのアドレスにアクセスできます。
しかし、今のPCの容量を考えると、一度に扱えるメモリが64KByteとはものすごく少ないですね。
それ以外のピンはシステムコントロールやクロック入力で、メモリを読み書きするときにはMREQやRD,WRなどが関連しています。


上図は512Kbit(64KByte)のEPROMです。
CPUとメモリは直接つながっていて、CPUのアドレスバス(A0-A15)、データバス(D0-D7)がつながります。Vccは5Vのがつながります。Vccとは別のVppは書き込み時に(21V)を加えますが、通常は/OE(Out put Enable)として使われます。
メモリのリード時は、アドレス信号(A0-A15)をCPUが設定後、2つの/OEがLになるとデータバス(D0-D7)にメモリの内容が現れます。


上図は16Kbit(2KByte)のEPROMです。1970年後半は容量の多いEPROMが高額だったのかギャラクシアンの基板は16KbitのEPROMが複数個使われています。
このピンで気になるのはアドレスバスがA0-A10までしかありません。
16Kbitのアドレスは、16進数で$0000-07FF、2進数では00000000000-11111111111と11桁ですむので11本しか必要ないのです。3つの/CS(Chip Select)は27516の/OEと同じような働きがあり、/CS1がLで/CS2がLかつCS3がHになったきのみデータバスに信号が出力されます。
CPUのメモリに接続されていない上位のアドレスバス信号をデコードしてChip Select信号を送り、読み取るEPROMを選択する仕組みのようです。


複数のチップに分けた場合にどのアドレスバスに信号が送られるかわかりやすくするために自力でエクセルで表を作ってみました。
調べてみるとギャラクシアンの基板のプログラム領域は$0000-27FFで5個の16Kbit(2KByte)のEPROMが使われており、A11-A13の信号をデコードし/CSの状態からチップを選択するようになっております。


Midwayのギャラクシアン基板の5個のEPROMはドーターボードにまとめられています。
そこで考えたのが、プログラムを容量の大きいEPROMに置き換えれるのでは?

手元に512Kbit(64KByte)にEPROM(27516)があったので、試みてみました。
A13-A14のLとHの信号を手動でスイッチで切り替えるようにすれば、4種類の異なるバージョンのギャラクシアンのプログラムを記録できるはずです。
A13,A14をL,Lにすれば$0000-3FFFまでそのままの状態で読み取り、H,LにすればEPROMの$4000-7FFFの内容をCPUからは$0000-3FFFまでとして読み取ってくれるはずです。
L,Hにすれば$8000-$BFFF、H,Hにすれば$C000-FFFFまでがプログラム領域として読み取ってくれるはずです。

NamcoのGalaxianと海賊版のGalaxian part4のROMがあるので
$0000-07FF galmidw.u
$0800-0FFF galmidw.v
$1000-17FF galmidw.w
$1800-1FFF galmidw.y
$2000-27FF 7l
$2800-2FFF galmidw.w
$3000-37FF galmidw.y
$3800-3FFF 7l
$4000-47FF galnamco.u
$4800-4FFF galnamco.v
$5000-57FF galnamco.w
$5800-5FFF galnamco.y
$6000-67FF galnamco.z
$6800-6FFF galnamco.w
$7000-77FF galnamco.y
$7800-7FFF galnamco.z
$8000-87FF 
galmidw.u
....
....
$F800-FFFF galnamco.z
こんな感じでプログラムをならべバイナリーファイルを結合
4種類のプログラムを記録できますが手持ちに2種類しかないので上半分とした半分は同じデータにしました。$2800-3FFFと$6800-7FFFは必要ないデータです。
EPROMに書き込みます。


ドータボードを差すソケットにA0-A12までの信号は来ています。
A14とA15はトグルスイッチでL,H切り替えるようにしました。問題はA13と/OEです。
A13は、CPUからの信号を直接接続(IC 7Dのpin7)、/OEはIC 8Eのpin13が良さそう。

こんな感じで配線しました。


EPROMにデーターを書き込み、ソケットに装着。
A13と/OEは、上写真のように別のところから配線しました。

成功です。2つのトグルスイッチで4種類の領域を選択し起動できるようになりました。
これで基板を入れ替えずにゲームを切り替える事が出来ます。
やってみれば大したことはしていないのですが、10日前までは、コンデンサなどの電子部品の働きや、アナログ回路とデジタル回路の違いもわかっていなかったので、自分としては満足です。
先ほど紹介した、Z80の本が大変役立ちました。
また、Galaxian PCB Modificationsというサイトも参考にしました。


左がMidwayのGalaxian、右上がMoon Cresta、右下がGalaxian Part4です。
ほとんど同じ基板のように思われます。
今の状態は、プログラムROMの領域とキャラクターROMの領域が同じ物しか、選択する事は出来ないですが、もう少し頑張れば、ギャラクシアンの基板を流用したと思われるムーンクレスタも動かす事が出来そうなので試みてみたいと思います。

最後に、完全に素人で最近知った内容ばかりなので間違った内容の記事もあるかと思われます。もしアドバイスなどあればお願いします。