gzdone.s 2.33 KB
/*---------------------------------------------------------------------
  $Id: gzdone.s,v 1.1.1.1 2002/05/02 03:29:12 blythe Exp $
  
  File : gzdone.s
  
  Coded     by Yoshitaka Yasumoto.   Jun 17, 1997.
  Copyright by Nintendo, Co., Ltd.           1997.
  ---------------------------------------------------------------------*/

        #---------------------------------------------------------------------
	#  Yield 処理
        #	ucode の処理状態をセーブする
        #	outp はバッファフラッシュにより RSP_OUTPUT_OFFSET に初期化
	#	されるのでここでセーブする必要はない.
	#
	#  Yield する位置でモード分けし処理を変える
	# 
	#  Mode A: DL 処理部での Yield
	#  Mode B: ZObject 処理部での Yield
	#  Mode C: Sub DL 処理部での Yield
	#
        #---------------------------------------------------------------------
  AssignForDMAproc
	#------ ZObject 処理部での Yield ------
RSPyield_B:		
	_li	(sys0, 1)
	sb	sys0, RSP_YIELD_SAVE_MODE(zero)		# モード ID 1 を設定
	j	RSPyield_Common
	sw	objp, RSP_YIELD_SAVE_OBJP(zero)		# ZOBJ のポインタ保存

	#------ DL 処理部での Yield ------
RSPyield_A:
	sb	zero, RSP_YIELD_SAVE_MODE(zero)		# モード ID 0 を設定
		
	#------ パラメータの DMEM への書き出し(共通部) ------
RSPyield_Common:		
	add	inp,  inp, dinp				# Gfx  のポインタ計算
        lw      sys0, GTASK_UCODE(zero)			# 現在の ucode を取得
        sw      inp,  RSP_YIELD_SAVE_INP(zero)		# Gfx  のポインタ保存
        jal     OutputCloseFlush			# バッファフラッシュ
        sw      sys0, RSP_YIELD_SAVE_LEN-4(zero)	# 現在の ucode を保存
	
        #------ DMEM の内容の DMA 転送 ------
        lw       dram_adrs, GTASK_YIELD(zero)
        _li     (dmem_adrs, 0)
        _li     (dma_len, RSP_YIELD_SAVE_LEN-1)
        _li     (iswrite, SP_SET_YIELDED|SP_SET_TASKDONE) # フラグとしても使用
        jal     DMAproc
        addiu   return, return, 8       # TaskDone2 へ飛ぶ

        #---------------------------------------------------------------------
	# TaskDone 処理
	#   CPU に割り込み通知を送り, タスクを終了する
        #---------------------------------------------------------------------
		#------ 終了フラグの設定 ------
TaskDone:	_li	(iswrite, SP_SET_TASKDONE)
	
		#------ バッファのフラッシュ ------
TaskDone1:	jal	OutputCloseFlush
	
		#------ STATUS 更新/ RSP 停止 ------
TaskDone2:	mtc0	iswrite, SP_STATUS
		break
  EndAssignForDMAproc
	
/*======== End of gzdone.s ========*/