gxmain.s 5.4 KB
/*---------------------------------------------------------------------
	Copyright (C) 1997, Nintendo.
	
	File		gxmain.s
	Coded    by	Yoshitaka Yasumoto.	Oct  9, 1997.
	
	$Id $
  ---------------------------------------------------------------------*/

#if	((!defined(_RSPASM_VERSION)) || _RSPASM_VERSION < 220)
● This Code must be complied with RSPASM version 2.20 or later. ●
#endif	
	
#define		F3DEX_GBI
#define		F3DEX_GBI_2
#include	<rsp.h>
#include	<rcp.h>
#include	<os.h>
#include	<sptask.h>
#include	<gbi.h>
#include	"gxmacros.h"
#include	"gxregs.h"

	#---------------------------------------------------------------------
	#  DMEM 領域の設定
	#---------------------------------------------------------------------
		.data   0x0000
#include	"gxdmem.h"
	
        #---------------------------------------------------------------------
        #       IMEM のコードの設定
        #---------------------------------------------------------------------
	#
	#
	#       ↓RSPBOOT
	#	  直後の状態
	#	+-----------+  +     +               +
	#	|  RSPBOOT  |  |     |INIT 終了後    |TASKDONE 時に
	#	+-----------+  |     |OVLtoBOOT の   |CODE を LOAD
	#	|   INIT    |  |     |CODE を LOAD   +
	#	+-----------+  |     +
	#	| 常駐領域  |  |LoadUcode
	#	+-----------+  |でロード  +
	#	| SUBMODULE |  |          |SUBMOD 命令
	#	+-----------+  +          +でロード
	#	|  OVERLAY  |
	#	+===========+
	#	| TASKDONE  |--> RSPBOOT+INIT の領域へ (INIT 終了時)
	#	+-----------+
	#	| OVLtoBOOT |--> RSPBOOT+INIT の領域へ (TASKDONE 時)
	#	+-----------+
	#	| Lighting  |
	#	+-----------+
	#
        #---------------------------------------------------------------------
        #  マイクロコードは rspboot によって IMEM=0x1080 以降にロード
	# され, 0x1080 から順に実行される. そのため起動直後は 0x1000
	# から 0x107f に rspboot マイクロコードのローダー部がある.
        #---------------------------------------------------------------------
		.symbol	CODE_TOP_IMEM, 0x1000
		.text	CODE_TOP_IMEM+0x80

        #---------------------------------------------------------------------
        #  初期化 & Yield 復帰処理
        #---------------------------------------------------------------------
        #	マイクロコードの初期化処理をここで行なう.
	#	このコードは初期化が終ると必要なくなるので, 初期化終了時に
	#	rspboot の 0x1000 から初期化処理の終りまでの領域へ他のコー
	#	ドをロード(オーバーレイ)させることができる. ただし DMA は
	#	8 Bytes 単位なので命令数が奇数の場合には注意が必要.
        #---------------------------------------------------------------------
CODE_TOP_BOOT:		.bound	8
#include		"gxinit.s"
CODE_BTM_BOOT:		.bound	8

        #---------------------------------------------------------------------
	#  DisplayList 処理ループ
        #---------------------------------------------------------------------
#include		"gxloop.s"
	
        #---------------------------------------------------------------------
	#	常駐モジュール
        #---------------------------------------------------------------------
#include		"gximm.s"
#include		"gxrdp.s"
#if	defined(OUT_fifo)
# include		"gxoutfifo.s"
#elif	defined(OUT_xbus)
# include		"gxoutxbus.s"
#else
● OUT_fifo or OUT_xbus must be defined either. ●
#endif

        #---------------------------------------------------------------------
	#	サブモジュール
        #---------------------------------------------------------------------
#include		"gxsubmod.s"

        #---------------------------------------------------------------------
	#	オーバーレイ処理 & DMA 処理
        #---------------------------------------------------------------------
#include		"gxoverlay.s"
CODE_BTM_IMEM:		.bound	8
			.dmax	0x1000

        #---------------------------------------------------------------------
	#	Overlay コード / TASKDONE
        #---------------------------------------------------------------------
			.text	0x1000
CODE_TOP_TASKDONE:	.symbol	CODE_OFS_TASKDONE, @codecount
#include		"gxdone.s"
			.align	8
CODE_BTM_TASKDONE:	.symbol	CODE_SIZ_TASKDONE, @codecount-CODE_OFS_TASKDONE
		
        #---------------------------------------------------------------------
	#	Overlay コード / RSPBOOT
        #---------------------------------------------------------------------
			.text	0x1000
CODE_TOP_RSPBOOT:	.symbol	CODE_OFS_RSPBOOT, @codecount
#define	OVERLAY
#include		"gximm.s"
			.align	8
#undef	OVERLAY
CODE_BTM_RSPBOOT:	.symbol	CODE_SIZ_RSPBOOT, @codecount-CODE_OFS_RSPBOOT
	
        #---------------------------------------------------------------------
	#	Overlay コード / CLIPPING
        #---------------------------------------------------------------------
#define	OVERLAY
#include		"gxsubmod.s"
			.align	8
#undef	OVERLAY
		
#define			ASSERT_UNNAME
#include		"gxregs.h"

        #---------------------------------------------------------------------
	#  binHack のデータ作成
        #---------------------------------------------------------------------
	.symbol	SEG_TOP_DMEM,     0
	.symbol	SEG_BTM_DMEM,     RSP_SAVE_OFFSET-RSP_GSTAT_OFFSET

        #---------------------------------------------------------------------
	#  IMEM の空き情報の出力
        #---------------------------------------------------------------------
	.print	"| Free Area:\n"
	.print	"|   MAIN     = %3d inst.\n", \
		((CODE_BTM_FREE_MAIN-CODE_TOP_FREE_MAIN)&0xfff)/4
	.print  "|   TASKDONE = %3d inst.\n", \
		((CODE_BTM_BOOT-CODE_BTM_TASKDONE)&0xfff)/4
	.print  "|   RSPBOOT  = %3d inst.\n", \
		((CODE_BTM_BOOT-CODE_BTM_RSPBOOT)&0xfff)/4
	.print	"|\n"
	
/*======== End of gxmain.s ========*/