gxs2main.s 5.98 KB
/*---------------------------------------------------------------------
	Copyright (C) 1998, Nintendo.
	
	File		gs2xmain.s
	Coded    by	Yoshitaka Yasumoto.	Apr  7, 1998.
	
	$Id: gxs2main.s,v 1.1.1.1 2002/05/02 03:29:11 blythe Exp $
  ---------------------------------------------------------------------*/
#if	((!defined(_RSPASM_VERSION)) || _RSPASM_VERSION < 230)
● This Code must be complied with RSPASM version 2.30 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		"gxs2dmem.h"
	
        #---------------------------------------------------------------------
        #       IMEM のコードの設定
        #---------------------------------------------------------------------
	#
	#
	#       ↓RSPBOOT
	#	  直後の状態
	#	+-----------+  +     +               +
	#	|  RSPBOOT  |  |     |INIT 終了後    |TASKDONE 時に
	#	+-----------+  |     |OVLtoBOOT の   |CODE を LOAD
	#	|   INIT    |  |     |CODE を LOAD   +
	#	+-----------+  |     +
	#	| 常駐領域  |  |LoadUcode
	#	+-----------+  +でロード
	#	|  OVERLAY  |
	#	+===========+
	#	| TASKDONE  |--> RSPBOOT+INIT の領域へ (INIT 終了時)
	#	+-----------+
	#	| OVLtoBOOT |--> RSPBOOT+INIT の領域へ (TASKDONE 時)
	#	+-----------+
	#	|  BG1CYC   |
	#	+-----------+
	#
        #---------------------------------------------------------------------
        #  マイクロコードは 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"
	
        #---------------------------------------------------------------------
	#	常駐モジュール
        #---------------------------------------------------------------------
			#
			# IMM 系処理
			#
#include		"gxs2imm.s"
			#
			# RDP 系処理
			#
#include		"gxrdp.s"
			#
			# BG 系処理
			#
#include		"gs2bg.s"
			#
			# TMEM ロード処理
			#
#include		"gs2tmem.s"
			#
			# RDP 出力処理
			#
#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

        #---------------------------------------------------------------------
	#	Default Overlay コード
        #---------------------------------------------------------------------
			#
			# スプライト処理
			#
			.align	8
CODE_TOP_SPRITE:	.symbol CODE_OFS_SPRITE, @codecount	
#include		"gs2sprite.s"		/* 回転可能 */
#include		"gs2rect.s"		/* 回転不能 */
			.align	8
CODE_BTM_SPRITE:	.symbol CODE_SIZ_SPRITE, @codecount-CODE_OFS_SPRITE

        #---------------------------------------------------------------------
	#	Free Area
        #---------------------------------------------------------------------
CODE_TOP_FREE_MAIN:     .bound  4
                        .space  0x1fac
CODE_BTM_FREE_MAIN:

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

        #---------------------------------------------------------------------
	#	Overlay コード
        #---------------------------------------------------------------------
#define	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
			#
			# RSPBOOT
			#
			.text	0x1000
CODE_TOP_RSPBOOT:	.symbol	CODE_OFS_RSPBOOT, @codecount
#include		"gxs2imm.s"
#include		"gxrdp.s"
			.align	8
CODE_BTM_RSPBOOT:	.symbol	CODE_SIZ_RSPBOOT, @codecount-CODE_OFS_RSPBOOT
			#
			# BG1CYC スケーリング可能な BG の処理
			#
			.text	CODE_TOP_SPRITE
CODE_TOP_BG1CYC:	.symbol	CODE_OFS_BG1CYC, @codecount
#include		"gxs2bg1cyc.s"
			.align	8
CODE_BTM_BG1CYC:	.symbol	CODE_SIZ_BG1CYC, @codecount-CODE_OFS_BG1CYC

#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  "|   BG1CYC   = %3d inst.\n", \
		((CODE_BTM_SPRITE-CODE_BTM_BG1CYC)&0xfff)/4
	.print	"|\n"
	
/*======== End of gs2xmain.s ========*/