2004.7.23 公開
Time Pilot on FPGA
一世代進んだ回路を手がけてみる。
PACMANとの主な違い
1.タイルマップ(背景)とオブジェクト(スプライト)の描画が別系統になった。
2.オブジェクト描画用RAMが2重化され、同時表示可能な16x16のオブジェクト数が6から24に増えた。(TimePilotでは裏テクで24個以上を表示してる!)
3.RGB出力が8bpp(256色)から15bpp(65535色)に増加した
4.CPUがメイン/サブに分かれ、サブCPUでサウンドを演奏してる
5.サウンド回路に汎用PSGチップ(AY-3-8910)を2つ使用
FPGAに乗せる際の問題点
1.外部ROMの種類が増加、全部でメインCPU,サブCPU,背景パターン,オブジェクトパターンの4つが必要。
多インターリーブ、高速ROM、複数ROM化などで対応する。
2.内部RAM/ROMの容量増加
XC2S200なら、ぎりぎり間に合う。
2.ツインCPU+PSGにより、2倍以上の回路規模のFPGAが必要
注:サウンド未実装ならXC2S150で入る。
試:Z80を1つ外付けすれば、XC2S200でサウンドも鳴るか?
望:ALUやMCodeを時分割実行するMulti-Z80のIPがあれば...
実装方法
1.ROM
1つのROMを、9.216MHzサイクルで6インターリーブして、全てのROMバスを1つでまかなう。
順序=Tile -> MainCPU -> SubCpu -> Obj -> MainCPU -> SubCpu -> Tile
ROMのアクセス速度は100ns程度が必要
2.サブCPU
無くても動くので、とりあえず未実装とする。当然音は出ない
AY-3-8910は自前で書いてみたら、4時間くらいでそれなりに動いてしまった。
そのノリでサウンドも適当にインプリメントした。RCフィルタだけは入ってない。
デバッグには、メインCPUバスをJTAGでハックしてMAMEと繋いでみた。楽ちん〜
ボードを作ってないのでノーチェックだが、手持ちのXC2S300Eで動くハズ
Download
Download Page
転用、展望
ビデオ回路では、以後数世代の間で様々な機能が追加さていく。
・背景のスクロール
・背景の2重化
・背景、オブジェクトの色数増加
・オブジェクトの倍サイズ、拡大機能
それでも、基本回路はTimePilotと大差なく、特に画面構成が256x224pixelの物は、これに追加/変更する形で多くに転用可能と思われる。
しかし、ROMの数やバス幅が増加していくため、1つのFPGA+1つの古典8bit PROMで実装できるのは、この辺が限界だろう。
サウンド回路では、PACMANのいわゆるナムコサウンドは多く使われているが、YM2203やYM2151等のFM音源やADPCMも主流になっていく。
FM音源そのものはFPGAでも書けるが回路規模は肥大化していく。
MAME用のFM音源エミュを書いた経緯もあるので、気がむいたらOPN-IPでも組んでみるか?