
/************************************************************
  Ninja Sample
  COPYRIGHT (C) SEGA ENTERPRISES, LTD.

  タイトル ： ＡＶケーブル接続をチェックする。
  編集履歴 ： 98-08-21 製作開始
************************************************************/

#include <shinobi.h>
#include <sg_sycbl.h>
#include <njdef.h>

#define TEXNUM 1
#define MAX_VERTEXES 1000

void main(void)
{
	njSetBorderColor( 0x00000000 );
    njUserInit();
    while (njUserMain() == NJD_USER_CONTINUE) {
        njWaitVSync();
    }
    njUserExit();
}

/* 画像モードのステータスメモリを確保 */
Sint32 VideoMode;

/************************************************************
  ユーザー関数のプロトタイプ宣言
************************************************************/
void StartDisplayCable( void );
void CableChack( void );

/************************************************************
  初期化
************************************************************/
void njUserInit(void)
{
    /*システムを初期化*/
	StartDisplayCable();
    /*バックグラウンドカラーを設定*/
    njSetBackColor(ARGB(0, 150, 0, 0), ARGB(0, 150, 0, 0), ARGB(0, 0, 0, 0));
    /*頂点データ登録用バッファをアロケート*/
    njInitVertexBuffer(MAX_VERTEXES * 64 / 4, 0, MAX_VERTEXES * 64 / 4, 0, 0);
	njInitPrint( NULL, 0, NJD_TEXFMT_ARGB_1555 );
    /* デバッグ文字の色 */
    njPrintColor(ARGB(255, 150, 150, 150));
}

/************************************************************
  定期実行されるメイン処理
************************************************************/
Sint32 njUserMain(void)
{
    /* ＡＶケーブルの状態を確認 */
	CableChack();
    /*サンプル名の表示*/
    njPrintC(NJM_LOCATION(6, 5), "Ninja Sample AV CABLE CHECK");

    /*ステータスの表示*/
    if(VideoMode == NJD_RESOLUTION_640x480_NTSCNI){
		njPrintC(NJM_LOCATION(2, 7), "NJD_RESOLUTION_640x480_NTSCNI");
    }
    /*ステータスの表示*/
    if(VideoMode == NJD_RESOLUTION_VGA){
	    njPrintC(NJM_LOCATION(2, 7), "NJD_RESOLUTION_VGA");
	}
	
    return NJD_USER_CONTINUE;
}

/************************************************************
  実行終了時に呼び出される終了処理
************************************************************/
void njUserExit(void)
{
    sbExitSystem();
}
/************************************************************
  初期化時にＡＶケーブルの種類を確認する処理
************************************************************/
void StartDisplayCable( void )
{
  SYE_CBL_CABLE Cable;
  Cable = syCblCheckCable();
  switch( Cable ) {
	case SYE_CBL_CABLE_VGA:
		sbInitSystem(NJD_RESOLUTION_VGA, NJD_FRAMEBUFFER_MODE_RGB565, 1);
	    /* ステータスをメモリに保存 */
		VideoMode = NJD_RESOLUTION_VGA;
    break;
	case SYE_CBL_CABLE_NTSC:
	    sbInitSystem(NJD_RESOLUTION_640x480_NTSCNI, NJD_FRAMEBUFFER_MODE_RGB565, 1);
	    /* ステータスをメモリに保存 */
		VideoMode = NJD_RESOLUTION_640x480_NTSCNI;
    break;
   }
}


/************************************************************
  ＡＶケーブルの変更をチェックする処理
************************************************************/

void CableChack( void )
{
  SYE_CBL_CABLE MainCable;
  MainCable = syCblCheckCable();
  if((MainCable == SYE_CBL_CABLE_VGA) && (VideoMode == NJD_RESOLUTION_640x480_NTSCNI)){
    /* 表示を止める */
    njStopDisplay();
	/* テクスチャメモリの全開放 */
   	njReleaseTextureAll();
    /* 解像度の変更 */
   	njChangeSystem(NJD_RESOLUTION_VGA, NJD_FRAMEBUFFER_MODE_RGB565, 1);
    /*頂点データ登録用バッファをアロケート*/
    njInitVertexBuffer(MAX_VERTEXES * 64 / 4, 0, MAX_VERTEXES * 64 / 4, 0, 0);
	njInitPrint( NULL, 0, NJD_TEXFMT_ARGB_1555 );
    /* ステータスをメモリに保存 */
	VideoMode = NJD_RESOLUTION_VGA;
  }

  if((MainCable == SYE_CBL_CABLE_NTSC) && (VideoMode == NJD_RESOLUTION_VGA)){
   /* 表示を止める */
    njStopDisplay();
	/* テクスチャメモリの全開放 */
   	njReleaseTextureAll();
    /* 解像度の変更 */
   	njChangeSystem(NJD_RESOLUTION_640x480_NTSCNI, NJD_FRAMEBUFFER_MODE_RGB565, 1);
    /*頂点データ登録用バッファをアロケート*/
    njInitVertexBuffer(MAX_VERTEXES * 64 / 4, 0, MAX_VERTEXES * 64 / 4, 0, 0);
	njInitPrint( NULL, 0, NJD_TEXFMT_ARGB_1555 );
    /* ステータスをメモリに保存 */
	VideoMode = NJD_RESOLUTION_640x480_NTSCNI;
  }
}
