main.c 2.14 KB
/*
   main.c

   NuSYSTEM sample nu2

   Copyright (C) 1997-1999, NINTENDO Co,Ltd.			
*/

#include <nusys.h>
#include "main.h"

/* ステージ番号 */
volatile int stage;

/* プロトタイプ宣言 */
void stage00(int);
void stage01(int);

/* 外部関数宣言 */
void initStage00(void);
void makeDL00(void);
void updateGame00(void);

void initStage01(void);
void makeDL01(void);
void updateGame01(void);

NUContData	contdata[1]; /* 1コントローラ読取データ */

/*------------------------
	メイン
--------------------------*/
void mainproc(void)
{
  /* グラフィックの初期化 */
  nuGfxInit();

  /* コントローラマネージャの初期化 */
  nuContInit();
	
  /* ステージ番号を0にセットする。*/
  stage = 0;

  while(1)
    {
      switch(stage)
	{
	  /* 
	     ステージ番号により、対応するコールバック関数を登録します。
	     コールバック関数側では、
	     他のコールバック関数に登録変更が必要になった時に、
	     stage に値をセットします。
	     */
	case 0:
	  /* コールバック関数が値をセットするのを待つために、
	     stage の値を-1にセットしておきます*/
	  stage = -1;
	  /* ステージ0の初期化 */
	  initStage00();
	  /* コールバック登録 */
	  nuGfxFuncSet((NUGfxFunc)stage00);
	  /* 表示開始 */
	  nuGfxDisplayOn();
	  break;
	case 1:
	  stage = -1;
	  initStage01();
	  nuGfxFuncSet((NUGfxFunc)stage01);
	  nuGfxDisplayOn();
	  break;
	default:
	  break;
	}
      
      /* コールバック関数が値を切り替えるの(場面切り替え)を待つ */
      while(stage == -1)
	;
      /* 表示を消す */
      nuGfxDisplayOff();
    }
}


/*-----------------------------------------------------------------------------
  コールバック関数

  Nusystem からコールバック関数の引数として渡される pendingGfx は 
  現在処理中および処理待ちの RCPタスクの合計数です。
-----------------------------------------------------------------------------*/

/* ステージ0 */
void stage00(int pendingGfx)
{
  /* 処理中/処理待ちのRCPタスクが2つ以下場合、表示処理行う */
  if(pendingGfx < 3)
    makeDL00();		

  /* ゲーム進行処理 */
  updateGame00(); 
}

/* ステージ1 */
void stage01(int pendingGfx)
{
  /* 処理中/処理待ちのRCPタスクが2つ以下場合、表示処理行う */
  if(pendingGfx < 3)
    makeDL01();

  /* ゲーム進行処理 */
  updateGame01();
}