gzmain.s 3.04 KB
/*---------------------------------------------------------------------
  $Id: gzmain.s,v 1.1.1.1 2002/05/02 03:29:12 blythe Exp $
  
  File : gzmain.s
  
  Coded     by Yoshitaka Yasumoto.   Jun 17, 1997.
  Copyright by Nintendo, Co., Ltd.           1997.
  ---------------------------------------------------------------------*/
#include	<rsp.h>
#include	<rcp.h>
#include	<os.h>
#include	<sptask.h>
#include	<gzsort.h>
#include	<gbi.h>
#include	"gzmacros.h"
#include	"gzregs.h"

	#---------------------------------------------------------------------
	#	DMEM 領域の設定
	#---------------------------------------------------------------------
	.data	0x04000000
#include	"gzdmem.h"

	#---------------------------------------------------------------------
	#	IMEM のコードの設定
	#---------------------------------------------------------------------
	#	rspboot で 0x1080 にロードされ, ここから実行される
	.text	0x04001080

	#------ 初期化 & Yield 復帰処理 ------
	#
#include	"gzinit.s"

        #===================================================== Gfx 処理
        #------ Gfx を DMEM 内にロードする ------
        #
StartDLload:	
  AssignForDMAproc
	sra	sys0, gfxdone, 14	# Main のときは 0, Sub のときは -2
	lhu	dmem_adrs, RSP_DLLOAD_DMEM_ADRS(sys0)
        _li     (dma_len, GZ_MAX_DL*8-1)
        jal     DMAread
        _mov    (dram_adrs, inp)
	addiu   inp, inp, GZ_MAX_DL*8
        _li     (dinp, -GZ_MAX_DL*8)
#ifdef	xDEBUG
	sw	dinp, ASSERT_DEBUG0(zero)
#endif	
        j	DMAwait
	_mov	(return, gfxdone)	
  EndAssignForDMAproc

	#------ Gfx 処理ループ ------
	#	
GfxDone:	mfc0	sys1, SP_STATUS			###! YIELD 要求チェック
        lw	gfx0, (RSP_DLINPUT_BOTTOM+0)(dinp)	# DL 前半を gfx0 へ
	beq	dinp, zero, StartDLload			# DL バッファが空か ?
                andi	sys1, sys1, SP_STATUS_YIELD     ###! YIELD フラグ取得
	sra     sys0, gfx0, 24                          # INDEX 作成
	sll	sys0, sys0, 1				# INDEX 作成
        lhu     sys0, RSP_JTBL_A_ORG(sys0)		# テーブル参照
                bne	sys1, zero, RSPyield_A		###! YIELD 判定
        lw      gfx1, (RSP_DLINPUT_BOTTOM+4)(dinp)      # DL 後半を gfx1 へ
        jr      sys0                                    # 各処理へ JUMP
        addiu   dinp, dinp, 8                           # ポインタ加算 
	
#include	"gzgfx.s"
#include	"gzobj.s"
#include	"gzsubdl.s"
#include	"gzmath.s"
#include	"gzoutfifo.s"
#include	"gzdone.s"

#define		LOADUC_START	0x04001f74
End_of_Body:	.dmax		(LOADUC_START-0x04000080)/4+1
		.space  LOADUC_START
	        .symbol IMEM_PAD, (LOADUC_START-End_of_Body)/4
#include	"gzloaduc.s"
End_of_Main:	.dmax		1025-32

	.symbol	IMEM_INIT, (StartDLload & 0xfff)/4

OVERLAY_CODE:		.symbol	DUMMY_OVERLAY_CODE, 0
#define			OVERLAY_AREA
#include		"gzmath.s"
OVERLAY_CODE_END:	.symbol	DUMMY_OVERLAY_CODE_END, 0

	.symbol	IMEM_OVERLAY, (OVERLAY_CODE_END-OVERLAY_CODE)/4
	
	.print  "| ucode 常駐部の残り     = %d inst.\n", IMEM_PAD
	.print	"| ucode 初期化部のサイズ = %d inst.(DMA可能 = %d)\n", IMEM_INIT-2, (IMEM_INIT-2)&~1
	.print  "| ucode OVERLAY のサイズ = %d inst.\n", IMEM_OVERLAY
	.print  "|\n"
	
/*======== End of gzmain.s ========*/