また、slInitSystemは、他のSGL関数で使われる作業領域の確保やイニシャライズ
を行なっています。
もし、SGLの関数を使う場合、必ず先にこの関数を実行してください。
slInitSystemを実行する前に、他のSGL関数を実行した場合、
動作は保証できません。
Left | : 0 |
Top | : 0 |
Right | : ScreenXSize - 1 |
Bottom | : ScreenYSize - 1 |
Zlimit | : 0x7fff |
CenterX | : ScreenXSize / 2 |
CenterY | : ScreenYSize / 2 |
PersAngle | : 90゜ |
ZdspLevel | : 1 |
表示されるスクロール面 : NBG0 , NBG1 , RBG0 スクロールのプライオリティ : NBG0 NBG1 NBG2 NBG3 RBG0 : 7 3 2 1 4 スプライト0 : SPR0 (ポリゴン)のプライオリティ: 6 その他のスプライト : SPR1〜SPR7 : 5 スクロールの色数 : 各面とも256色モード カラーRAMモード : 1 (32768色中2048色) VRAM分割 : バンクA、Bともに分割 キャラクタデータ : NBG0、NBG1 25E60000から : RBG0 25E00000から キャラクタサイズ : 各面とも8x8ドット パターンネームデータ : NBG0 25E76000から : NBG1 257E7800から : RBG0 PA 25E40000から : RBG0 PB 25E50000から パターンネームサイズ : NBG0 1ワード : セルごとに反転付き10ビットパターンネーム : NBG1 及び、RBG0 1ワード : 反転無し、12ビットパターンネーム プレーンサイズ : 各面とも64x64セル バック画面カラー : 25E3FFFE に黒(R=0,G=0,B=0) 回転パラメータ : 25E3FF00 から スプライトデータ : パレットとRGB形式との混在 特殊効果機能 : モザイク、カラーオフセット等使用しない スプライトタイプ : scnSPR3 アスキーキャラクタセット : 0x25e00000(For RBG)、0x25e60000(For NBG)
slDynamicFrame
が受け持ちます。
また、1から-1のようにベースインターバル数が変化しないときは、SynchConstを 設定し直す必要はありません。
/* 1 int固定から 2 intベース不定モードに切り替える */ extern Uint8 SynchConst; /* signed intではなくunsigned int */ /* ^^^^^^ ^^^^^^^^ */ slInitSystem( TV_320x224, NULL, 1 ); : : /* 不定インターバルモード-2を設定 */ slDynamicFrame( ON ); SynchConst = 2; /* -2ではない */ slSynch();
/* 1 int不定インターバルから 1 int固定インターバルに変更 */ slInitSystem( TV_320x224, NULL, -1 ); : : /* 固定インターバルモード 1を設定 */ slDynamicFrame( OFF ); /* SynchConstを変更する必要はない */ slSynch();
その後slSynchを実行する直前でシステム変数SynchCountを見ます。 SynchCountが負数になっていれば処理が落ちていると分かります。
のパラメータ"Count"(フレーム切り替えカウント)を負の数に変更したところ、
暴走します。
この現象は、LowRamに実行ファイルを配置した場合に発生しています。
SGLはLowRAMの転送スピードが遅いことや、SCUがLowRAMの制御外にあることなど からなどから、プログラムをLowRAMに置くことを考えておりません。
スプライトやポリゴンをバッファにエントリする際、Z limitと近値限界による
クリッピングをZ値の上位16ビットで比較し、その後整数部分の上位8ビットを
用いて1次ソーティングを行います。
さらに同次のポリゴンやスプライトに
関しては、整数部分の下位8ビットを用いて2次ソーティングを行います。
従って小数部分に関しては用いられることはありません。
また、SPR_ATTRIBUTEの引数には、カラーRAMの先頭から何色目かという情報
になるので24ビットカラーの時と15ビットカラーの時とでは一色当たりの
バウンダリは異なります。したがってアドレスのオフセットとは違います。
例えば、24ビットモードの時256色目はオフセットで、400hですが、
15ビットモードでは、200hです。slPageNbgでは、与える値はそれぞれ、
0x400、0x200ですが、SPR_ATTRIBUTEの場合どちらも256(0x100)です。
slInitSystemの第三引数に考えられる処理の最大数を設定する。
但し、不定モードのみの対応なので負数で設定する必要がある。
CPUの処理が終わった時点で(slSynch、slInitSynchを呼ぶ直前で)
システム変数SynchCountを先にslInitSystemで設定したフレーム数
にする。
この場合の注意点として、この値を変更する場合に以下の
チェックが必要になる。
割り込みを禁止にする。
VBlank期間中ではないことをチェックする。チェック方法は、
VDP2の画面ステータス(25F80004番地)のビット3のVカウンタ
レジスタをチェックする。
VBlank期間でなければ、上記の変更
処理を行う。VBlank期間中であった場合、c.)の処理を行なっ
た後、再度a.)〜c.)の処理を行う。
割り込みを解除する。