English
PROGRAMMER'S GUIDEVDP1ライブラリ
■   | 進む
VDP1ライブラリ

1.VDP1基本処理ガイド


1.1 目的

1.2 解説

 [初期処理]

 [V-BLANK割り込み内処理関数]

1.3 スプライト実行環境の変更方法

 3Dおよび2Dの高速処理を行うために、スレーブSH、DSPを用いますが、 アプリケーションによってはそれらをライブラリ側で使用しないようにしたい場合 があります。このような場合、sega_spr.h の先頭に定義されている以下の #define を定義またはコメントアウトしてスプライト、スクロールライブラリを 再構築することで、スプライトの実行環境を変更することができます。

/*------------------------------------------
 * Select 3D & Sprite Execute Environment
 *----------------------------------------*/
 #define  SPR_SYNC_VB_OUT
 #define  USE_SLAVE
 #define  USE_DSP
 #define  USE_INBETWEEN_OBJECT
 #define  USE_DEBUG_INFO

各 #define の説明を以下に示します。

(1) SPR_SYNC_VB_OUT
 これを定義すると SCL_DisplayFrame() のスプライトのフレームバッファ切り替え 待ちがVブランクアウトになり、1フィールドの処理時間が延びます。
スクロールのレジスタ書き込みは、SCL_DisplayFrame() を待たずVブランクイン で行われます。
コメントアウトすると、従来通りVブランクインでスクロール、スプライトの同期 が取られます。

(2) USE_SLAVE
 これを定義するとスレーブCPUを使用し、メインCPUとの並列処理を行います。
コメントアウトするとスレーブCPUは使用しません。

(3) USE_DSP
 これを定義すると座標変換のマトリックス合成をDSPで行い、CPU側と並列処理を行います。
コメントアウトするとDSPは使用しません。

(4) USE_INBETWEEN_OBJECT
 これを定義するとオブジェクト間接続ポリゴンの処理ができます。オブジェクト間 接続ポリゴンが無い場合、この定義をコメントアウトすることで3Dライブラリの 若干のシェイプアップが図れます。

(5) USE_DEBUG_INFO
 これを定義すると SPR_3DrawModel() による計算ポリゴン数と描画ポリゴン数を 以下の変数に設定します。
この値は累積値なので、アプリケーション側で必要に 応じクリアしてください。

extern int  dbgComputePol;   /* 計算ポリゴン数 */
extern int  dbgDrawPol;      /* 描画ポリゴン数 */

この変数は sega_spr.h に定義済みです。

1.4 プログラム記述例

#include <machine.h>
#include "saga_spr.h"
#include "sega_scl.h"
#include "sega_int.h"

extern void vbStart(void);          /*     V-BLANK IN  割り込みルーチン           */
extern void vbEnd(void);            /*     V-BLANK OUT  割り込みルーチン          */
main()

{
     Uint8          *vram;          /*     VRAMアドレス格納エリア                 */

     set_imask(0);                  /*     割り込み可にする                      */

     SCL_Vdp2Init();               /*     スクロールとプライオリティの初期化       */
     SCL_SetPriority(SCL_SP0|SCL_SP1|SCL_SP2|SCL_SP3|SCL_SP4|
                     SCL_SP5|SCL_SP6|SCL_SP7,7);
     SCL_SetSpriteMode(SCL_TYPE1,SCL_MIX,SCL_SP_WINDOW);
     SPR_Initial(&vram);            /*     スプライトを初期化                     */

     INT_ChgMsk(INT_MSK_NULL, INT_MSK_VBL_IN | INT_MSK_VBL_OUT);
                                    /*     V-BLANK割り込みをディセーブル            */
     INT_SetFunc(INT_SCU_VBLK_IN, &vbStart);     
                                    /*     V-BLANK IN     割り込みルーチンの登録    */
     INT_SetFunc(INT_SCU_VBLK_OUT, &vbEnd);     
                                    /*     V-BLANK OUT    割り込みルーチンの登録    */
     INT_ChgMsk(INT_MSK_VBL_IN | INT_MSK_VBL_OUT, INT_MSK_NULL);
                                    /*     V-BLANK割り込みをイネーブル              */

     SCL_SetFrameInterval(2);       /*     フレームチェンジインターバルを          */
                                    /*     2/60 秒にセット                     */

     for(;;){
           memcpy(vram,command,sizeof(command));
                                    /*     VRAMにスプライトコマンドをセット      */

              --------              /*     スクロールデータセット                   */
           SCL_DisplayFrame();      /*     V-BLANK割り込み待ち                 */
                                    /*     スプライト表示とスクロール動作を行う      */
     }
 }

−Vブランク処理ルーチン(上記メインとは別ソースファイル)−

#include <machine.h>
#include "sega_spr.h"
#include "sega_scl.h"

#pragma  interrupt(VbStart)
#pragma  interrupt(VbEnd)

void VbStart(void)
{
     SCL_VblankStart();           /*     Vブランク開始VDP割り込み処理              */

             --------              /*     その他Vブランク開始処理                  */
}

void VbEnd(void)
{
     SCL_VblankEnd();              /*     Vブランク終了VDP割り込み処理              */
     --------                      /*     その他Vブランク終了処理                  */
}


■   | 進む
PROGRAMMER'S GUIDEVDP1ライブラリ
Copyright SEGA ENTERPRISES, LTD., 1997