gzsubdl.s
1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*---------------------------------------------------------------------
$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 ========*/