PC-98サブセット規格の提唱 〜「なんちゃってPC-98」のススメ〜 1.はじめに PC-98アーキテクチャは中核部に8bitなデバイスが多く使われています。 16bitでなければ出来ないI/Oアクセスを要求される場面は実は大変少なかったりします。 そこではたと、実はPC-98ってデータバス8bitで作ってもそれなりな物が出来てしまうんでは?等と考え付く訳です。 PC-98の主要内蔵デバイスで16bitアクセスが必須なのって、パッと思いつく範囲内ではEGC周りとかIDEレジスタ 位しか出て来なかったりします。 ならば、いきなり大変なPC-98アーキテクチャフル実装するのでは無く、いっそサブセットと割り切って データバスを8bit化してしまう事で、PC-8801互換の回路を作れば それをベースに少し手を加えるだけでPC-98っぽい物が出来てしまうのでは?PC-9801VM辺り用のソフトまでもが 一部動いてしまうのでは?と考えたのがこの提唱です。 勿論8bitですから速度は期待出来ません。あくまで「なんちゃってPC-98」です。 が、とりあえずでも一通り動作させてしまえるのならば、 それを叩き台にして16bitのフル規格PC-98実装に繋げて行く事も、少しは楽になるのかな?と思った次第です。 2.CPU/DMA i8086/V30のプログラム(バイナリコード)がそのまま実行出来るi8086/V30命令互換、尚かつメモリ・I/Oの16bitアクセスを適切に複数の8bitアクセスに分割する事が出来るCPU、つまりはi8088とかV20、或いはその上位互換CPUという事になります。 DMAについてですが、元々PC-98は8bitバス向けのDMAコントローラーに細工をして16bitバスで動作させている為、ひょっとすると却ってバス幅変換小細工を辞め素直に実装した方が期待した動作になってくれるのかも知れません。ただ、データバス幅は8bitでOKなのですが、アドレスバスは(最低でも20bit、場合によっては24bit/32bitに)拡張する必要があるでしょう。アドレス拡張の方法は、PC-98シリーズで実機に既に使われているのと同じ方法にするのが、互換性の上でも好ましいでしょう。 3.画面周り GDCμPD7220を忠実に再現するのも、余裕があって出来る!というならその方が良いのかも知れませんが、GDCは余りに複雑で巨大な物であり、ここで提唱するサブセットPC-98ではそこまでは必須としない事にします。 但し、VSYNC(VBLANK?)を検出(割込及びI/Oポートによるポーリング?)する機構は、必要とするソフトが多そうなので 実装する事を推奨する、とするのが良いでしょうかね。 3.1.テキスト画面 GDCを丸ごとフルセットで実装するのは大変です。なのでテキスト画面についてはA0000H〜の内容を固定で表示する 決め打ち回路でも良しとします。勿論VRAMの書式は実機と出来る限りなるべく同じにする事。 アトリビュート(A2000H)対応は必須では無い事にしますが、当然対応する方が好ましいです。ただ、そうなると PC-8801とアトリビュート部の構造が大きく異なりますし、配置が異なる事から、PC-8801の3303からは かなり大きく内部構造が異なって来る事が予想されます。特にDMAで読んで来るのが難しそうなので、 バスマスタになり自分でVRAMを読みに行く必要がありそうな所でしょうか。 テキストVRAMをどう設置するか、即ちメインメモリとして実装しCPUを止めて読むか、或いはデュアルポートRAMにするか、 或いは専用RAMとして持ち何らかの方法でCPUからのアクセスを仲介するか、 等の設計は、どんなレベルのサブセットにするかで任意という事にします。 3.2.グラフィック画面 GDCを作りこむのは困難なので(出来るのなら勿論やって構わないのですが)、取り敢えずVRAMに書き込めば絵が表示 される仕組みがあれば(勿論VRAMの配置アドレスや構造自体はPC-98の仕様に合わせるとして)良いのではないでしょうか。 PC-98LTなんかはGDCでは無く独自のコントローラーなのでBIOSが初期化した後はほぼVRAMに書きに行く事くらいしか 意識しない様になっていますし(白黒二値なのでBプレーン(0A8000H-0AFFFF)しか無いが構造自体はPC-98と同じ)。 後はパレット周り等、一部周辺機能を組み込めば、かなり「良い感じ」になるのではないでしょうか。 それだけあれば、取り敢えずPC-88やPC-98LTの様な感覚でのアクセスなら一通りは出来そうです。 4.バス 8bit設計ですからCバス互換には出来ません。そこで、PC-8x01かPC-6x01のバスをそのままか、多少手を加えて採用 してしまう事が考えられます。 PC-98側はI/Oポート空間が65536ありますので、上手く邪魔にならない位置にPC-66/88バス(I/O空間は256)を 配置出来るかも知れません。 その様なバスを採用する事で、既存のPC-6x01/8x01用のリソースを用いた(PC-98機能を更に実装する為の) デバイス開発したり、実験レベルでPC-66/88デバイスを流用したり出来るかも知れません。 例えばユニバーサルボードを使い回したり等しながら仮画面回路をGDC互換に置き換えたり音源実装したり等です。