グラフィックパッケージ MAGIC

既に3Dグラフィックを駆使して多数のゲームを世に送り出していたTUX吉村氏(当時のPN。現在は吉村ことり氏(@urdcat))の開発による高速3Dグラフィックパッケージ、それがMAGICです。MAGICを使えば、BASICのグラフィック機能よりもはるかに高速に、そしてワイヤーフレームながらリアルな3Dモデルを画面上で動かすことができます。

多機種に展開されているのも特徴で、グラフィックデータだけでなく呼び出し方法も共通化されているため、メーカーや機種を超えて同じプログラムを用い同じ画面を再生することが可能になりました。

パッケージとしてはOSに非依存で、BASICからでもCP/M上でも使用することができますが、1987年3月号のアニメーションツール「MAGE」掲載の際にS-OSとしての標準化が図られ、初期化手順も含めて使い方のルールが定められました。

MAGICが移植された機種とその掲載号は以下の通りです。
X1/X1turbo
(1986.9)
MZ-2000/MZ-2200
(1986.9)
MZ-2500
(1986.9)
PC-8801
(1986.9)
MZ-1500
(1987.2)
SMC-777
(1987.2)
MZ-80B/MZ-80B2
(1987.4) 
X68000
(1991.5 , 1991.9)
※X68000用MAGICはコマンドに大部分の互換性を持たせた移植版で、X68000用S-OS"SWORD"で使用するものではありません。リンク先はMAGICを含むSION II配布ページです。
※X1/turbo用ダウンロード用データの作成にはひろし@H.O SOFT (@honda_ken)さんのご協力を賜りました。

MAGICのコマンド一覧がこちら。コマンドを並べたデータの先頭アドレスをC200hに置いてB000hを呼び出すか、先頭アドレスをIXレジスタに入れてB004hを呼び出せば実行できます。またS-OSでは実行に先立ちAF00h~に置いたMGINITを呼び出して初期化するようにしてください。
データ バイト数 内容 データ バイト数 内容 データ バイト数 内容
00h : LINE
(連続した直線を描く)
05h : CIRCLE FULL
(円を塗りつぶす)
0Bh : SET 3D PARAMETER
(3D→2D変換用のパラメータを設定する)
00h 1 コマンド 05h 1 コマンド 0Bh 1 コマンド
n 1 座標総数 TILE 4 タイルパターン Pnum 1 パラメータナンバー
X1 2 座標1 X 2 中心座標 DATA 2 設定データ
Y1 2 Y 2 パラメータナンバー
R 2 半径 0:CX 物体の位置
(オフセット)
Xn 2 座標n 06h : SET WINDOW
(ウィンドウを設定する)
1:CY
Yn 2 2:CZ
01h : SPLINE
(3点を結ぶスプライン曲線を描く) 
06h 1 コマンド 3:DX 回転の中心座標
X1 2 左上座標 4:DY
01h 1 コマンド Y1 2 5:DZ
X1 2 座標1 X2 2 右下座標 6:HEAD 回転角(度)
Y1 2 Y2 2 7:PITCH
X2 2 座標2 ※起動後必ず設定する必要がある 8:BANK
Y2 2 07h : SET MODE
(グラフィックモードを設定する)
※物体の位置は、MAGIC内部では次のSET 3D DATAで指定した座標に加算して処理される
X3 2 座標3
Y4 2 07h 1 コマンド
02h : BOX
(2点を対角とする長方形を描く)
MODE 1 ラインモード  0Ch : SET 3D DATA
(物体の3Dデータを設定する)
PLANE 1 プレーン
02h 1 コマンド ラインモード:描画するときの書き込みモード
0:RESET 1:XOR 2:OR 3:NOP

プレーン:描画をするグラフィックプレーン
0:BLUE 1:RED 2:GREEN

※起動後必ず設定する必要がある
0Ch 1 コマンド
X1 2 座標1 PCT 1 頂点の数(n+1)
Y1 2 X0 2 頂点0
X2 2 座標2 Y0 2
Y2 2 Z0 2
03h : TRIANGLE
(三角形を塗りつぶす)
08h : POINT
(指定座標の色を調べる)
Xn 2 頂点n
03h 1 コマンド Yn 2
X1 2 座標1 08h 1 コマンド Zn 2
Y1 2 X 2 座標 LCT 1 線分の数(m)
X2 2 座標2 Y 2 LS1 1 線分1
Y2 2  ※カラーコードがC202h番地に格納される
※座標が規定外ならカラーコードはFFhになる
LE1 1
X3 2 座標3
Y4 2 LSm 1 線分m
04h : BOX FULL
(2点を対角とする長方形を塗りつぶす) 
09h : CLS
(ウィンドウ内をクリアする)
LEm 1
※ひとつの線分は2つの頂点ナンバーで指定する 
09h  1  コマンド
04h 1 コマンド 0Ah : PALET
(パレットを設定する)
0Dh : TRANSLATE 3D→2D
(3Dデータを3Dパラメータに従って2Dに変換し、ワークエリアに格納する) 
TILE 4 タイルパターン
X1 2 座標1 0Ah 1 コマンド
Y1 2 P0 1 パレットカラー 0Dh 1 コマンド
X2 2 座標2 P1 1 0Eh : DISPLAY 2D
(TRANSLATE 3D→2Dで変換したデータに従ってワイヤーフレーム表示する) 
Y2 2 P2 1
  P3 1 0Eh 1 コマンド
  P4 1 ※0Bh,0Ch,0Dhコマンドの実行後に行う必要があるが、ワークエリアの内容が破壊されていなければこの限りではない
  P5 1
  P6 1
  P7 1 0Fh : DONE
(MAGICを終了し呼び出したシステムに戻る) 
   
 
  0Fh 1 コマンド
※以下の機種について、SET MODE機能で指定するプレーンに制約があります。
SMC-777 プレーン2に対する描画は無視される
MZ-80B/MZ-80B2 GRAMが1ページのみの実装だった場合、プレーン0以外への描画が全てプレーン0に対して行われる
※以下の機種について、PALET機能に制約があります。
MZ-2000/MZ-2200 ハードとしてパレット機能がないため
P1:青 P2:赤 P4:緑
に0以外の値を設定するとそのプレーンを表示、0で非表示という機能に変更
それ以外のパラメータは無効だが、一応8バイト分必要
SMC-777 色を正しく表示するためには4096色カラーパレットボードが必要、ただし使用している色は他機種と同じ8色のみ
同時表示は4色まで
MZ-80B/MZ-80B2 ハードとしてパレット機能がないため、P1とP2に0以外の値を設定するとそのプレーンを表示、0で非表示という機能に変更
それ以外のパラメータは無効だが、一応8バイト分必要
(C)1998-2024 Oh!Ishi,Nibbles Lab.