誘うPC98互換機(9) GDCのVRAMのアドレシングは微妙です

Kitsuneno_shippo

描画のためXY座標をVRAMに展開する場合、そのアドレス変換は微妙です。なぜかと言えば画面をXY座標の第一象限と考えると、ハイレゾモードでは横1120dot(46hワード)、縦750lineですから、X=Y=0となる左下のアドレスはn=104860(CCCEhワード)です。<外伝>なぜXY座標に拘るかをお話しします。

※誘うPC98互換機 投稿順indexはこちら

まずは、左下から右下にX座標軸と同じ直線を書いてみましょう。CCCEhの全ビット(D0からD15)を”1”にして、Writeすれば良く、その後CCCFh、CCD0h、CCD1h・・・CD13hと続きます。

次に左下から左上にY座標軸と同じ直線を書いてみましょう。CCCEhのMSBに”1”を書き込むためには既存のBIT(D0からD14)の値をそのままにしてRMW(ReadModifyWrite)を行わなければなりません。次にCC88hのMSBに”1”を書き込みます。当然BIT(D0からD14)の値はそのままにして、RMWを行います。この後、CC42h、CBFCh、CBB6h・・・0000hと続きます。

このようにGDCのVRAMアクセスはRMW描画が通常です。

※ RMW  = Read Modify Write (J.Halfmoonによるコメント)

ここで、GDCには線分発生、塗り潰し、円弧発生機能などがあります。これは対象を0度から45度の部分、45度から90度の部分など、始点を中心に全体を8等分した内容のものです。始点から、X方向の+/-、Y方向の+/-、Xの絶対値とYの絶対値を比較してXの方が大きい場合とYの方が大きい場合で分かれます。現在のこの種のデバイスは、外部からこの情報を仕入れなくてはならないことはないはずですが、当時は外部から情報を得ていました。

仮にXの絶対値が大きい場合は、ベクトルを描こうとするとXは常に1、YはΔYを加えた数値です。直線を引く際に、315度から45度と135度から225度の際にΔYはDDA(Digital Difference Analyzer)として有力な情報として認知されています。仮にY絶対値の方が大きい場合は (45度以上135度と225度から315度の場合)はΔXです。

これは、線分の発生にあっては、DDAが基本です。また、GDCには円弧発生や塗り潰しなどは個別のアルゴリズムがあります。GDCの中にVRAM転写用の8×8のRAMが内蔵されています。これにより、例えばΔYが0.25の場合は、線分の4dot (あるいは3dot)が同一線分となり、RMWの回数を減らすことができます。

<外伝>

画面をXY座標の第一象限と考えるのは、ごく自然な行為です。X座標もY座標も双方共に+の領域だからです。しかしながら、CRTの概念からか、左上が原点となる第四象限の考え方がGDCの基本となります。DMAなどが続く場合はCPUや他の機器からの転送は問題ありません。

これは、グラフィック画面を構成する際に重要なことです。X座標とY座標を別々に管理する(DOT構成が1dotを24bitとする)場合などは、X座標とY座標に管理することがグラフィックの基本と考えて居ました。私は、第一象限を整合としていたのですが、PC98世界で第4象限とすることはグラフィック担当としては目が点でした。

誘うPC98互換機(8) GDCの同期は大変そうである へ戻る

誘うPC98互換機(10) 当時のHDDはマイクロサイズ? へ進む