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

	#---------------------------------------------------------------------
	#  case_G_SETSUBDL
	#
	#    副 DL の設定をする. (主 DL からのみコール可能)
	#    既に副 DL が起動している場合は動作は保証しない.
	#---------------------------------------------------------------------
case_G_SETSUBDL:
	jal	AdrsFixup_DMA
	sh	zero, RSP_SUBDL_DINP(zero)
	j	GfxDone
	sw	$19,  RSP_SUBDL_INP(zero)
	
	#---------------------------------------------------------------------
	#  case_G_LINKSUBDL
	#
	#   副 DL をリンクする.
	#    現在の DL をセーブし, 副 DL の Stack を主 DL の Stack 上へ
	#    コピーする
	#---------------------------------------------------------------------
  Assign(mainTop, 1)
  Assign(subTop,  2)
  Assign(subBtm,  3)
  Assign(dadrs,   4)
case_G_LINKSUBDL:
			lw	sys0, RSP_SUBDL_INP(zero)
			lh	sys1, RSP_SUBDL_DINP(zero)
	add	dadrs, inp, dinp			# 現在の DL を計算
			beq	sys0, zero, GfxDone	# 副 DL がないなら終了
	lbu	subBtm,  RSP_DLSTACK_BOTTOM+1(zero)
	lbu	mainTop, RSP_STATEP_DL_N+0(zero)	# Main DL Stackp 取得
	lbu	subTop,  RSP_STATEP_DL_N+1(zero)	# Sub  DL Stackp 取得
			add	inp, sys0, sys1		# Sub  DL の計算
	j	case_G_LINKSUBDL_2
	sb	subBtm,  RSP_STATEP_DL_N+1(zero)	# Sub DL Stackp クリア
case_G_LINKSUBDL_1:
	lw	dadrs,   RSP_DLSTACK_OFFSET(subBtm)
	addi	subBtm,  subBtm,  4
case_G_LINKSUBDL_2:
	addi	mainTop, mainTop, 4			# Main Stackp 加算
	bne	subTop,  subBtm, case_G_LINKSUBDL_1
	sw	dadrs,   RSP_DLSTACK_OFFSET-4(mainTop)	# DL 保存
	sb	mainTop, RSP_STATEP_DL_N+0(zero)	# Main Stackp 更新
	j	StartDLload
	sw	zero,    RSP_SUBDL_INP(zero)		# Sub DL クリア
  EndAssign(mainTop, 1)
  EndAssign(subTop,  2)
  EndAssign(subBtm,  3)
  EndAssign(dadrs,   4)

/*======== End of gzsubdl.s ========*/