gs2rdp.s
2.9 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*---------------------------------------------------------------------
Copyright (C) 1997, Nintendo.
File gs2rdp.s
Coded by Yoshitaka Yasumoto. Jan 23, 1997.
Modified by
Comments
$Id: gs2rdp.s,v 1.1.1.1 2002/05/02 03:29:12 blythe Exp $
---------------------------------------------------------------------*/
# ================================================================
# RDP 系処理
# ================================================================
# ----------------------------------------------------------------
# case_G_SETSCISSOR
# シザリングパラメータを保存しておいて, SP によってスプライトを
# カットする. (Copy-Mode 必須)
# RDP コマンドの図と異なり画面の左上を XL,YL 右下を XH,YH と
# している.
# ----------------------------------------------------------------
case_G_SETSCISSOR:
Assign(tmp, 1)
andi tmp, gfx0, 0xfff
sh tmp, RSP_STATEP_SCISSOR_YL(zero)
srl tmp, gfx0, 12
andi tmp, tmp, 0xfff
sh tmp, RSP_STATEP_SCISSOR_XL(zero)
andi tmp, gfx1, 0xfff
sh tmp, RSP_STATEP_SCISSOR_YH(zero)
srl tmp, gfx1, 12
andi tmp, tmp, 0xfff
j case_G_RDP_General
sh tmp, RSP_STATEP_SCISSOR_XH(zero)
EndAssign(tmp, 1)
#if 0
#========================================================================
# この 7 命令を gs2imm.s へ移動させる
# これにより gs2imm.s の命令数がオーバーレイ領域と一致する.
#========================================================================
# ----------------------------------------------------------------
# case_G_RDPSETOTHERMODE
# 現在の OtherMode の設定を保存しておく.
# (G_SETOTHERMODE_[LH] のために必要)
# ----------------------------------------------------------------
case_G_RDPSETOTHERMODE:
sw gfx0, RSP_STATEP_OTHER_H(zero)
j case_G_RDP_General
sw gfx1, RSP_STATEP_OTHER_L(zero)
# ----------------------------------------------------------------
# case_G_RDP_AdrsFixup
# コマンド内のセグメントアドレスを物理アドレスに変換してから
# RDP コマンドとして送る
# ----------------------------------------------------------------
case_G_RDP_AdrsFixup:
Assign(dram_adrs, 19)
jal AdrsFixup
addi outp, outp, 8
j case_G_RDP_General2
sw dram_adrs, 4-8(outp)
EndAssign(dram_adrs, 19)
#endif
# ----------------------------------------------------------------
# case_G_RDP_Sync
# Sync 系コマンド用
# RDP コマンドを送る際に, RSP_STATEP_RDP_STAT を 0 にする
# ----------------------------------------------------------------
case_G_RDP_Sync:
sb zero, RSP_STATEP_RDP_STAT(zero)
# ----------------------------------------------------------------
# case_G_RDP_Genaral
# RDP コマンドとして DMEM バッファに送る
# ----------------------------------------------------------------
case_G_RDP_General:
addi outp, outp, 8 # SETOTHERMODE からの jump における load-store
sw gfx1, 4-8(outp) # バブルの回避のためこの順序で処理する
case_G_RDP_General2:
j OutputCloseGfxDone
sw gfx0, 0-8(outp)
.symbol adrs_G_RDP_General, case_G_RDP_General
# End of gs2rdp.s