◆MAGICについて◆ #226 AYANY  MAGICは発表当時は大変な代物であったようですが、今日改めて検証して見る と様々な欠点があり改良の余地が大いにあると思われます。 (1)CLSルーチンにバグがある。  ウインドウの設定値によっては異常な動作をします。以下の各機種用の物に存在す ることを確認しています。他の機種用のものについても同様であると思われます。    X1,MZ−2000,MZ−80B,MZ−1500  また、SMC版は少し症状が違いますが同様のバグがあるようです。 (2)モノクロ仕様であるため、カラーで使うと遅い。又、カラーで2画面使えない。  3プレーンに同じ形状のものを描画するときに同じ計算を3回することになり処理 時間の無駄となります。また、動画を扱う場合に再描画時のちらつきを抑えるにはダ ブル・バッファリングを用いる必要がありますが、MAGICはカラー1画面しかサ ポートしていません。 (3)回転の動作が仕様と違う。又、回転と透視変換を別々に行えない。  (DX,DY,DZ)は「回転の中心」と書かれていますが、そのように動作しま せん。尚、下図においては説明の簡略化のため(CX,CY,CZ)を考慮していま せん。 1:図1:正しい動作 :G=FIG1 .M 2:図2:MAGICの仕様 :G=FIG2 .M  さらに、回転の計算順序も本来ならBANK,PITCH,HEADの順に行うと 自然になるのですが、どういうわけが逆になっています。また、HEAD,PITC- H,BANKの各回転も一般的な仕様と違っていますが、これはディスプレイの座標 を基準にしたためと思われます。 一般的仕様 HEAD :Z軸中心の回転 PITCH:X軸中心の回転 BANK :Y軸中心の回転 MAGICの仕様 HEAD :Y軸中心の回転 PITCH:X軸中心の回転 BANK :Z軸中心の回転  回転と透視変換が同時に行われて回転後の3D座標が残らないのも問題です。全体 が回転しながらさらに一部が回転するような物体が表示出来ません。ヘリコプターが 羽根を回転させながら旋回するようなデモは作れないのです。 (4)機種依存する部分とそうでない部分が混在する。  たとえば、長方形とスプライン曲線の描画の処理部は、ライン描画ルーチンを使用 していますが、これ以外の部分は全く機種依存しません。よって、標準で用意する必 要は全くなく、使わない人にとってはメモリの無駄遣い以外の何者でもありません。 フリーエリアの狭いZ80マシンにおいて、これは由々しき問題です。こういった物 はオプションで用意すべきでしょう。また、タイル・パターンによる塗潰しについて も同様のことが言えますし、前述の回転も機種依存しませんから独自のルーチンを用 意したほうがよさそうです。 ☆新MAGICに対する提案 (1)フル・カラーを前提とし、可能な機種ではページ切替機能を追加する。  タイル・パターンの指定を廃止し色コードの指定を追加する。尚、色数に制限のあ る機種では自動的にタイル・パターンで描画する。又、ラインの描画モードは4種あ るが、多色モードでは実現困難であるので、これを上書きモードのみに変更する。 (2)標準コマンドは機種依存する部分のみとし、その他はオプションとする。  標準コマンドは高速化のためMAGIC内のジャンプ・テーブルを参照して直接C- ALLする方式をとる。また、画面のドット構成等を示すデータ・エリアを用意する。    初期化,ウインドウ設定,ページ切替,画面消去,    非クリッピング・ライン,ラスター塗潰,    ドットの色の読み出し  オプション・コマンドは各機種共通に使えるようにし、切離,追加を可能にする。    クリッピング・ライン,スプライン曲線,    長方形塗潰,円塗潰,多角形塗潰,    3D回転,透視変換 ☆実は…  実は、X1版について、カラー仕様に改造&CLSルーチン等のバグ取りをしまし た。おかげで、320×200ドット^2/8色で2画面使え、SWORDの標準画 面モードである横40文字とグラフィックを混在出来るようになりました。しかも、 それでいて、従来版に対して上位互換を保っています。残念ながら、ラインについて は諸般の事情によりカラー化できませんでしたが、ちゃんと2画面切替に対応してい ます。他機種版でも同様の改造をしてくれる人がいるなら公開しようかと思います。  また、某筋からの情報ですが、MAGICのMSXへの移植が画策されているよう です。 ☆パターン描画について(再考の余地あり)  MAGICには、パターン描画機能がありません。この点に不満を覚える人もいる でしょうが、現実問題としてMAGICで描画するようなデータとパターン描画を混 在させる必要性は乏しいのではないでしょうか?とはいえ、全機種共通のパターン描 画ルーチンはぜひとも欲しいですね。ということで、MAGICとは別にパターン描 画パッケージの制作を前提にした仕様案を発表したいと思います。 (1)パッケージは、データ・コンバータと本体の2つに分ける。  パターン・データは、全機種共通のフォーマットのものをデータ・コンバータにて 各機種専用のフォーマットに変換する。その際、フリー・エリア・サイズに応じて半 自動的にデータ・サイズを調整するようにする。 (2)共通フォーマット・データは、ANDデータとORデータからなる。  ANDデータ(RGB共通)は背景との重ね合わせ処理に用いるマスク・データで ある。ORデータ(RGB別)がパターンデータの本体である。尚、これらのデータ は、コンバートのことを考慮して、ある程度荒目に作るものとする。 (3)データ・サイズについて  パターンの横方向の表示位置をドット単位で移動する場合、ビット・シフトの必要 がある。あらかじめビット・シフトしたデータを用意しておけば、演算の時間分だけ 表示速度が稼げる。しかし、この方法は大量のメモリを消費する。そこで、あらかじ め、セットされたパラメータに応じて、以下のいづれかのビット・シフトのモードを 自動選択する機能を付ける。これについては、同じパラメータ値にならば、機種を問 わずほぼ同じフリー・エリアが残るように動作させるものとする。 完全事前ビット・シフト:表示時にはビット・シフトしない。 事前2ビット・シフト :表示時に0〜1ビットのシフトを行う。 事前4ビット・シフト :表示時に0〜2ビットのシフトを行う。 事後ビット・シフト  :表示時に0〜4ビットのシフトを行う。 [おしまい]