053260 とその周辺回路

ご厚意で 6809 互換コアを提供してくださったので、6809 を使ったゲームを動かそうということで、 DECO の DARWIN (Sound 未対応) と Overdrive (Sound だけ)を作ってみた。

053260 とその周辺回路自体は以前作ったのだが、いろいろわかっておらずいろいろやっていたこともあって最初から作り直し。とはいえ、いろいろ気に入らない点があって、今回の作り直しで3度作り直したというオチ。使用 LE 数が最初 3000 だったんだが、重複機能を並列ではなく時分割で切替える方式を使っていったら最終的に 1200 まで縮んだので、コンパイルした結果を見比べるゲームになっていた。

053260 の pinout からの考察

これは外国のオペレータ向けに配られた Vendetta の回路図を見ることでわかる(検索すればでてくる / これに気付いたのも9月に入ってからという残念ぷり)。バスをまとめると、こういうことになっているんだと思う。

  • CLK: master clock usualy tied 3.579 MHz
  • sound CPU bus (6809 based)
    • AB5:0, DB7:0, RW, CS
  • main CPU bus (6809 based)
    • MBA0, MDB7:0, MRW, MCS
  • DAC interface
    • STBI, AUX1:2
    • SY, SH2, SH1, SO
    • ST2:1 unknown, tied GND
  • Sample data ROM bus (6809 based?)
    • RA20:0, RD7:0, NE, NQ
    • TIM2, RWP: ?

sound CPU bus は 6809 のような R/W があるバスを想定しつつ、 Z80 もつなげられるという体だと思われる。実際には 6809 が1つでほか Z80 が10個ぐらい。
main CPU bus も 6809 のようなバスということで 6809カスタム品, 68000 がつながっている。注意したい点は address bus が 1 bit ということ。つまり main CPU から 2 つの register が access できる。 write は利用頻度が高いからいいとして、問題は read のほうである。
一応 053260 は sound CPU からの出力を main CPU から読み込むことができて、テストモードで Sample ROM の checksum を算出した結果を main CPU へ送るということで使われている。この場合 sound CPU は address 2 か 3 へ書き込んで、 main CPU は main address 0,1 から sub address 2,3 を読み込むと言うことができるらしい。補足は Parodius DA! の項に記載する。

DAC interface は入力と出力に系統が分かれる。053260 は YM3012 向けの serial data を受け取って内部で Sample Data を合成してから YM3012 へ送る仕組みになっている。
このため、 STBI は SH0, AUX1 か AUX2 に YM2151 と別の 053260 の出力を入力側につなぐことができる。 SY,SH2,SH1,SO は最終的に YM3012 につなぐほう。
ST2:1 はよくわからないが YM2151 にも似た名前の端子があるのでその関係なのかもということで dac interface にいれてある。深い根拠はない。

Sample data ROM bus は NE, NQ という信号があるので 6809 based とした。これらの信号のうち RWP, TIM2, NE, NQ は実際のところ用途不明。考察は Overdrive に譲る。

MAME では 053260 から制御しているということになっている Z80 の NMI

053260 と Z80 では NMI を動作することができるんだが、 MAME の実装は NMI の発生間隔がソースによってバラバラだったりする。
回路図がある Vendetta では 053260 からの SH1 が発生原因と記載されており、手元のサンダークロスIIは YM2151 からの SH1 が 7474 を経由して NMI へ配線されているのを確認した。
Konami の場合、構成されるICが同じでもハードが違うとわざと配線を2,3本いれかえるのが好きなので*1MAME の実装はその影響がきていると思われる。ただし、この NMI はとりあえず発生していれば OK ぐらいの位置づけらしくテキトー実装でも問題ないらしい。

でも Escape Kids の曲のテンポが緩い気がするから NMI の間隔は個別に調べないとまずいのかもしれない。

Overdrive と Sample ROM のバス

この基板は 053260 を2つ持ち、サウンドCPUとして 6809 を使用する珍しい基板だ。
事前調査では Sample ROM が物理的に 2 つあり、BGM 用と SE 用で 053260 が分かれているので ROM はそれぞれ独立していると思っていた。実際のところ動かすと Sound Code 0x84 の最初のギターが鳴らないので、 2つの ROM はバスを共有していて、2つの 053260 が ROM を時分割で切替えてデータを取ってきているということだった。

実物を確認したんだが、なかなか貴重な品のためピンを調べるということはしていないので、ピン配置から予想してみる。
6809 系のバスの場合、 E と Q の2相のサイクルがあって CPU が memory access する期間は E が low の間だけなので E が high の間は別のデバイスが memory access をすることが可能。
たぶんこれを利用して2つの 053260 のバスを切替えると思うので NE という信号が活用できると思われる。でも address 21bit を 74157 みたいな IC で切替えると結構でかくなってしまうので片方の RA は hiz, もう片方の RA は出力ということができるのかもしれない。
そうなると Vendetta では未接続の TIM2 を Overdrive では使うのだろうかとか、謎が多い。また RWP は名前から察するに R は sample ROM の prefix となっているので R/W ではなく WP という意味なのか...

Parodius Da! と Sample ROM access

他のゲームは Test mode に入った時点で Sample ROM の checksum を算出するが、これは起動時に毎回確認する。このため起動が遅い。
また互換コアを作る側としてはこの機能はなくても動くという認識のため、ちゃんと作っていない。おまけに checksum が違うと木魚を鳴らして無限ループをしてくれる。対策として、パッチを当ててごまかしたら曲が再生できる。

また MAME では main cpu 側の read address に kludge のような関数があるので注意した方が良い。察するに sub cpu からの address 2 or 3 の write が main cpu 0 or 1 の mirror になっているのか、ここもいまいち謎である。

*1:「性能は同じ、仕様は別」と勝手に名付けた