gxdmem_lstat.h
10.8 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
/*---------------------------------------------------------------------*
Copyright (C) 1997, Nintendo.
File gxdmem_lstat.h
Coded by Yoshitaka Yasumoto. Oct 17, 1997.
$Id: gxdmem_lstat.h,v 1.1.1.1 2002/05/02 03:29:11 blythe Exp $
*---------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
* ローカルステート
* マイクロコードにおいて固有に使用するステータス領域
* TASK 起動時および gSPLoadUcode で初期化される.
*---------------------------------------------------------------------------*/
#---------------------------------------------------------------------
# Clip Ratio の値
# ldv でアクセスする.
# (ldv でアクセス可能な位置 -0x200 〜 +0x1f8)
#---------------------------------------------------------------------
RSP_LSTAT_CLIPSELECT:
.bound 4
.word 0x00010000 .word 0x00000002
.word 0x00000001 .word 0x00000002
.word 0x00010000 .word 0x0000fffe
.word 0x00000001 .word 0x0000fffe
.word 0x00000000 .word 0x0001ffff
#ifdef NEARCLIP_OFF
.word 0x00000000 .word 0x00000001
#else
.word 0x00000000 .word 0x00010001
#endif
.symbol oRSP_LSTAT_CLIPSELECT, RSP_LSTAT_CLIPSELECT-RSP_LSTAT_OFFSET
#---------------------------------------------------------------------
# ベクトルレジスタ定数 (lqv でアクセス可能な位置 -0x400 〜 +0x3f0)
#---------------------------------------------------------------------
.bound 16
#define ______ 0x0000
.symbol POINTS, RSP_SAVE_POINTS&0xfff
RSP_LSTAT_VCONST0:
#---- vconst0 = $v30 の値 ----
#
# lighting 処理の都合により
# vconst0[0],[4] は負,
# vconst0[1],[5] は正にする必要あり
# vtx 処理の都合により
# vconst0[3],[7] は vconst0 の要素
# の内の最大の 2 つをセットする vconst0[7] が最大
#
_half4 (0xffff, 0x0004, 0x0008, 0x7f00)
_half4 (0xfffc, 0x4000, POINTS, 0x7fff)
RSP_LSTAT_VCONST1:
#---- vconst1 = $v29 の値 ----
#
# setup_ex 処理の都合により
# [4..6]<[7]<[0..3] とする
#
_half4 (0x7ffc, 0x1400, 0x1000, 0x0100)
_half4 (0xfff0, 0xfff8, 0x0010, 0x0020)
RSP_LSTAT_VCONST_TMP:
#---- light/clip 用の一時使用 const 値 ----
_half4 (0xc000, 0x44d3, 0x6cb3, 0x0002)
#---- ベクトル演算に使用する ----#
#define _0x0000 vzero[0]
#define _0x0001 vone[0]
#define _0xffff vconst0[0]
#define _0x0004 vconst0[1]
#define _0x0008 vconst0[2]
#define _0x7f00 vconst0[3]
#define _0xfffc vconst0[4]
#define _0x4000 vconst0[5]
#define _TopOfPoints vconst0[6]
#define _0x7fff vconst0[7]
#define _0x7ffc vconst1[0]
#define _0x1400 vconst1[1]
#define _0x1000 vconst1[2]
#define _0x0100 vconst1[3]
#define _0xfff0 vconst1[4]
#define _0xfff8 vconst1[5]
#define _0x0010 vconst1[6]
#define _0x0020 vconst1[7]
#define _0xc000 vconstTmp[0]
#define _0x44d3 vconstTmp[1]
#define _0x6cb3 vconstTmp[2]
#define _0x0002 vconstTmp[3] # gxclip_ex.s で使用する
#---------------------------------------------------------------------
# MxP Matrix の計算要求フラグ / Light の計算要求フラグ / Light 数
# 0 なら計算を行なう必要あり. 0 以外なら書換えない.
# G_MTX/G_POPMTX で MULMP と LIGHT の両フラグ(2Bytes)を 0
# に書換える. ForceMatrix では, MULMP のみ 1 にする.
# gSPNumLights で FLAG と NUM の双方(4Bytes)を書換える.
# 書き込みアドレスの変更により, それぞれのフラグを操作する.
# 以上から LIGHT が 1 のときに MULMP が 0 であることはない.
# (= MULMP のみが計算要求されることはない)
# PMtx のみが書換えられたときは Light はそのままで MPMtx を
# 再計算する必要があるがそういったケースは少ないと判断し,
# このケースでも双方とも再計算する.
#---------------------------------------------------------------------
.byte 0 # Padding 必要
RSP_LSTAT_MULMP_FLAG:
.byte 1
.half 0 # Padding 必要
RSP_LSTAT_LIGHT_FLAG:
.byte 1
RSP_LSTAT_LIGHT_NUM:
.byte 0
.symbol RSP_LSTAT_FORCEMTX_FLAG, RSP_LSTAT_MULMP_FLAG-1
.symbol RSP_LSTAT_SETMTX_FLAG, RSP_LSTAT_MULMP_FLAG
.symbol RSP_LSTAT_NUMLIGHT_FLAG, RSP_LSTAT_MULMP_FLAG+1
#---------------------------------------------------------------------
# DRAM FIFO への RDP コマンドを転送するための一時保存領域のポインタ
#---------------------------------------------------------------------
RSP_LSTAT_DMA2BUF:
.half RSP_WORK_OUTPUT_0
#---------------------------------------------------------------------
# Fog パラメータ
#---------------------------------------------------------------------
RSP_LSTAT_FOG_FACTOR:
.word 0
.symbol oRSP_LSTAT_FOG_FACTOR, \
RSP_LSTAT_FOG_FACTOR-RSP_LSTAT_OFFSET
#---------------------------------------------------------------------
# Texture 設定パラメータ (gSPTexture で設定)
#---------------------------------------------------------------------
.bound 4
RSP_LSTAT_TEX_CMD:
.byte 0 # =G_TEXTURE
RSP_LSTAT_TEX_XPARAM:
.byte 0 # =XPARAM (Normally 0)
RSP_LSTAT_TEX_TILE:
.byte 0 # =TILE/LEVEL
RSP_LSTAT_TEX_ENABLE:
.byte 0 # =G_ON(1)/G_OFF(0)
RSP_LSTAT_TEX_SCALE:
.half 0 # S
.half 0 # T
.symbol oRSP_LSTAT_TEX_SCALE, \
RSP_LSTAT_TEX_SCALE-RSP_LSTAT_OFFSET
#---------------------------------------------------------------------
# Geometry Mode
#---------------------------------------------------------------------
RSP_LSTAT_RENDER:
.half G_CLIPPING_H
RSP_LSTAT_RENDER_CULL:
.byte 0 # G_CULL_FRONT=0x02 BACK=0x04 BOTH=0x06
RSP_LSTAT_RENDER_TRI:
.byte 0
#---------------------------------------------------------------------
# Light データ
#---------------------------------------------------------------------
.bound 8
RSP_LSTAT_LOOKATX: .space 24
RSP_LSTAT_LOOKATY: .space 24
RSP_LSTAT_L_0: .space 24
RSP_LSTAT_L_1: .space 24
RSP_LSTAT_L_2: .space 24
RSP_LSTAT_L_3: .space 24
#ifndef ALPHA_LIGHTING
RSP_LSTAT_L_4: .space 24
RSP_LSTAT_L_5: .space 24
RSP_LSTAT_L_6: .space 24
RSP_LSTAT_L_7: .space 24
#endif
.symbol oRSP_LSTAT_L_0, RSP_LSTAT_L_0-RSP_LSTAT_OFFSET
.symbol oRSP_LSTAT_LIGHT_COLOR, 0+oRSP_LSTAT_L_0
.symbol oRSP_LSTAT_LIGHT_DIR_W, 8+oRSP_LSTAT_L_0
.symbol oRSP_LSTAT_LIGHT_PAD, 12+oRSP_LSTAT_L_0
.symbol oRSP_LSTAT_LIGHT_DIR_M, 16+oRSP_LSTAT_L_0
#---------------------------------------------------------------------
# Overlay テーブル
#---------------------------------------------------------------------
RSP_LSTAT_OVERLAY_TOP:
.bound 4
RSP_LSTAT_OVERLAY_TASKDONE: # TaskDone/RSPyield/LoadUcode 処理
.word CODE_OFS_TASKDONE
.half CODE_SIZ_TASKDONE-1
.half 0x1000 # Top of IMEM
RSP_LSTAT_OVERLAY_RSPBOOT: # rspboot,doInit 上のコード
.word CODE_OFS_RSPBOOT
.half CODE_SIZ_RSPBOOT-1
.half 0x1000 # Top of IMEM
RSP_LSTAT_OVERLAY_BOTTOM:
.bound 4
.symbol RSP_LSTAT_OVERLAY_SIZE, \
RSP_LSTAT_OVERLAY_BOTTOM-RSP_LSTAT_OVERLAY_TOP
#---------------------------------------------------------------------
# MOVEMEM の index に対応するオフセット値
#---------------------------------------------------------------------
RSP_LSTAT_MOVEMEM_OFFSET:
#------- G_MTX/POPMTX 用 -------
.half RSP_WORK_DMABUF # MMTX + MUL
.half RSP_GSTAT_MMTX # MMTX + LOAD
.half RSP_WORK_DMABUF # PMTX + MUL
.half RSP_GSTAT_PMTX # PMTX + LOAD
#------- G_MOVEMEM 用 -------
.half RSP_GSTAT_VIEWPORT_SC # ViewPort
.half RSP_LSTAT_LOOKATX # Light 系
#------- G_VTX 用 -------
.half RSP_SAVE_POINTS # G_VTX
# .half RSP_GSTAT_MPMTX # MOVEWORD と共用する.
#---------------------------------------------------------------------
# MOVEWORD の index に対応するオフセット値
#---------------------------------------------------------------------
RSP_LSTAT_MOVEWORD_OFFSET:
.half RSP_GSTAT_MPMTX # MOVEMEM と共用
.half RSP_LSTAT_NUMLIGHT_FLAG # NumLight GBI 用
.half RSP_LSTAT_CLIPSELECT # ClipRatio GBI 用
.half RSP_GSTAT_SEG_OFFSET # Segment GBI 用
.half RSP_LSTAT_FOG_FACTOR # SetFog GBI 用
.half RSP_LSTAT_L_0 # LightColor GBI 用
.half RSP_LSTAT_FORCEMTX_FLAG # ForceMtx GBI 用
.half RSP_GSTAT_PERSPNORM # PerspNorm GBI 用
#---------------------------------------------------------------------
# DMA 系命令用 Jump テーブル (Gfx の ID から Jump 先を求める)
# Gfx の ID が偶数で無ければならない.
#---------------------------------------------------------------------
RSP_LSTAT_JUMPTBL_DMA:
.half case_G_MOVEMEM # 0xd8 G_POPMTX
.half case_G_MTX_Mul # 0xda G_MTX+MUL
.half case_G_MOVEMEM # 0xdc G_MOVEMEM/G_MTX+LOAD
#---------------------------------------------------------------------
# モジュール間共通 Jump テーブル
# Gfx の ID から Jump 先を求める)
#---------------------------------------------------------------------
.bound 2
.half case_G_SPECIAL_3 # 0xd3 G_SPECIAL_3
.half case_G_SPECIAL_2 # 0xd4 G_SPECIAL_2
.half case_G_SPECIAL_1 # 0xd5 G_SPECIAL_1
.half case_G_DMA_IO # 0xd6 G_DMA_IO
.half case_G_TEXTURE # 0xd7 G_TEXTURE
.half case_G_POPMTX # 0xd8 G_POPMTX
.half case_G_GEOMETRYMODE # 0xd9 G_GEOMETRYMODE
.half case_G_MTX # 0xda G_MTX
.half case_G_MOVEWORD # 0xdb G_MOVEWORD
.half case_G_DMA_General # 0xdc G_MOVEMEM
.half case_G_LOAD_UCODE # 0xdd G_LOAD_UCODE
.half case_G_DL # 0xde G_DL
.half case_G_ENDDL # 0xdf G_ENDDL
.half GfxDone # 0xe0 G_SPNOOP
.half case_G_RDPHALF_1 # 0xe1 G_RDPHALF_1
.half case_G_SETOTHERMODE_L # 0xe2 G_SETOTHERMODE_L
.half case_G_SETOTHERMODE_H # 0xe3 G_SETOTHERMODE_H
.half case_G_RDPHALF_0 # 0xe4 G_TEXRECT
.half case_G_RDPHALF_0 # 0xe5 G_TEXRECTFLIP
.half case_G_RDP_General_Half # 0xe6 G_RDPLOADSYNC
.half case_G_RDP_General_Half # 0xe7 G_RDPPIPESYNC
.half case_G_RDP_General_Half # 0xe8 G_RDPTILESYNC
.half case_G_RDP_General_Half # 0xe9 G_RDPFULLSYNC
.half case_G_RDP_General # 0xea G_SETKEYGB
.half case_G_RDP_General # 0xeb G_SETKEYR
.half case_G_RDP_General # 0xec G_SETCONVERT
.half case_G_SETSCISSOR # 0xed G_SETSCISSOR
.half case_G_RDP_General # 0xee G_SETPRIMDEPTH
.half case_G_RDPSETOTHERMODE # 0xef G_RDPSETOTHERMODE
.half case_G_RDP_General # 0xf0 G_LOADTLUT
.half case_G_TEXRECT_DONE # 0xf1 G_RDPHALF_2
.half case_G_RDP_General # 0xf2 G_SETTILESIZE
.half case_G_RDP_General # 0xf3 G_LOADBLOCK
.half case_G_RDP_General # 0xf4 G_LOADTILE
.half case_G_RDP_General # 0xf5 G_SETTILE
.half case_G_RDP_General # 0xf6 G_FILLRECT
.half case_G_RDP_General # 0xf7 G_SETFILLCOLOR
.half case_G_RDP_General # 0xf8 G_SETFOGCOLOR
.half case_G_RDP_General # 0xf9 G_SETBLENDCOLOR
.half case_G_RDP_General # 0xfa G_SETPRIMCOLOR
.half case_G_RDP_General # 0xfb G_SETENVCOLOR
.half case_G_RDP_General # 0xfc G_SETCOMBINE
.half case_G_RDP_AdrsFixup # 0xfd G_SETTIMG 要 AdrsFixup
.half case_G_RDP_AdrsFixup # 0xfe G_SETZIMG 要 AdrsFixup
.half case_G_RDP_AdrsFixup # 0xff G_SETCIMG 要 AdrsFixup
RSP_LSTAT_JUMPTBL:
.half case_G_RDP_General_Half # 0x00 G_NOOP
#---------------------------------------------------------------------
# これ以降は各モジュールに依存した GBI が並ぶので
# 他の領域を追加してはいけない.
#---------------------------------------------------------------------
#----------------------------
# SUB MODULE 領域
#----------------------------
RSP_SUBMOD_OFFSET:
#include "gxdmem_submod.h"
.dmax 0x800+1
/*======== End of gxdmem_lstat.h ========*/