gxs2dmem.h
26.4 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
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
/*---------------------------------------------------------------------
Copyright (C) 1998, Nintendo.
File gxs2dmem.h
Coded by Yoshitaka Yasumoto. Apr 7, 1998.
$Id: gxs2dmem.h,v 1.1.1.1 2002/05/02 03:29:11 blythe Exp $
---------------------------------------------------------------------*/
#----------------------------
# グローバルステート
#----------------------------
RSP_GSTAT_OFFSET:
#include "gxdmem_gstat.h"
#
# symbol 対応表
#
.symbol RSP_STATEP_MMTX, RSP_GSTAT_MMTX
.symbol RSP_STATEP_PMTX, RSP_GSTAT_PMTX
.symbol RSP_STATEP_MPMTX, RSP_GSTAT_MPMTX
.symbol RSP_STATEP_OTHER_H, RSP_GSTAT_OTHER_H
.symbol RSP_STATEP_OTHER_L, RSP_GSTAT_OTHER_L
.symbol RSP_STATEP_RDPHALF_0H, RSP_GSTAT_RDPHALF_0H
.symbol RSP_STATEP_RDPHALF_0L, RSP_GSTAT_RDPHALF_0L
.symbol RSP_STATEP_RDPHALF_1L, RSP_GSTAT_RDPHALF_1L
.symbol RSP_STATEP_DL_N, RSP_GSTAT_DL_N
.symbol RSP_STATEP_FIFO_OUTP, RSP_GSTAT_FIFO_OUTP
.symbol RSP_SEG_OFFSET, RSP_GSTAT_SEG_OFFSET
.symbol RSP_DLSTACK_OFFSET, RSP_GSTAT_DLSTACK_OFFSET
/*---------------------------------------------------------------------------*
* ローカルステート
* マイクロコードにおいて固有に使用するステータス領域
*
* TASK 起動時および gSPLoadUcode で初期化される.
*---------------------------------------------------------------------------*/
RSP_LSTAT_OFFSET:
#---------------------------------------------------------------------
# ベクトルレジスタ用エリア (vecptr でのアクセスが可能)
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# ベクトルレジスタ定数 (lqv でアクセス可能な位置)
#---------------------------------------------------------------------
.bound 16
#define ______ 0x0000
#---- vconst = $v31 の値 ----
RSP_LSTAT_VCONST0: _half4 (0x0800, 0x0040, 0x0002, 0xffff)
_half4 (0x4000, 0x0003, 0x0008, 0xfff8)
#---- vconst1 = $v30 の値 ----
RSP_LSTAT_VCONST1: _half4 (0x0100, 0x8000, 0xfe00, 0x0000) # [3|7]
_half4 (0x1000, 0x0400, 0x2000, 0x0200) # には意味あり
#---- vconst2 = $v29 の値 ----
RSP_LSTAT_VCONST2: _half4 (0x3d10, 0x0001, 0x3200, 0x0000)
_half4 (0x2700, 0x0000, 0x3524, 0x2628)
#---- vconst3 = $v28 の値 ----
RSP_LSTAT_VCONST3: _half4 (0xfffc, 0x0400, 0x0020, 0x0010)
_half4 (0xfc00, 0x03ff, 0x001f, 0xffe0)
.symbol RSPOBJ_VPTR, RSP_LSTAT_VCONST0+64
#---- ベクトル演算に使用する ----#
#define _0x0000 vconst2[3]
#define _0x0001 vconst2[1]
#define _0x0002 vconst0[2]
#define _0xffff vconst0[3]
#define _0x4000 vconst0[4]
#define _0x0003 vconst0[5]
#define _0x0008 vconst0[6]
#define _0xfff8 vconst0[7]
#define _0x0100 vconst1[0]
#define _0x8000 vconst1[1] /* vconst1[1]である必要 -> gs2sprite */
#define _0xfe00 vconst1[2]
#define _Reserved0 vconst1[3]
#define _Reserved1 vconst1[4]
#define _Reserved2 vconst1[5]
#define _0x2000 vconst1[6]
#define _0x0200 vconst1[7] /* gs2rect で [3] と共に使用 */
#define _0x0800 vconst0[0] /* [0] でなければならない gs2bg1c.s */
#define _0x0040 vconst0[1]
#define _0xfffc vconst3[0]
#define _0x0400 vconst3[1]
#define _0x0020 vconst3[2]
#define _0x0010 vconst3[3]
#define _0xfc00 vconst3[4]
#define _0x03ff vconst3[5]
#define _0x001f vconst3[6]
#define _0xffe0 vconst3[7]
#---- RDP コマンドの設定に使用する ----#
#define _0x10000400 vconst1[8] /* 4<<10, 1<<10 */
#define _0x3d100001 vconst2[0] /* G_SETTIMG */
#define _0x32000000 vconst2[4] /* G_SETTILE << 24 */
#define _0x27000000 vconst2[8] /* [LOADTILE7]<< 24 二度使用する */
#define _0x27 vconst2[8] /* G_PIPESYNC */
#define _0x35 vconst2[12] /* G_SETTILE */
#define _0x24 vconst2[13] /* G_TXTRRECT */
#define _0x26 vconst2[14] /* G_RDPLOADSYNC */
#define _0x28 vconst2[15] /* G_RDPTILESYNC */
#define _COPYMODESCALE _0x10000400
#define _SETTXTRIMG _0x3d100001
#define _SETTILESIZE _0x32000000
#define _SETTILE _0x35
#define _TXTRRECT _0x24
#define _LOADSYNC _0x26
#define _PIPESYNC _0x27
#define _TILESYNC _0x28
#define _TX_LOADTILE _0x27000000
#---------------------------------------------------------------------
# ベクトルレジスタ用スクラッチエリア
# 16 byte アサインがなされている.
#---------------------------------------------------------------------
.bound 16
RSPOBJ_VSCRATCH: .space 32
.symbol oRSPOBJ_VSCRATCH, RSPOBJ_VSCRATCH-RSPOBJ_VPTR
#---------------------------------------------------------------------
# スプライト変形用行列 (lqv でアクセス可能な位置)
# 頂点 (x,y) が以下の式で (x',y') に移動する.
# x' = Ax + By + X
# y' = Cx + Dy + Y
# Assert 処理のために未初期化データには AID を代入しておく.
#---------------------------------------------------------------------
.bound 16
RSPOBJ_MATRIX: _word4 (1<<16,AID,AID,1<<16) # 行列 A,B,C,D
RSPOBJ_MATRIX_X: .half 0 # 行列 X
RSPOBJ_MATRIX_Y: .half 0 # 行列 Y
.symbol oRSPOBJ_MATRIX, RSPOBJ_MATRIX-RSPOBJ_VPTR
.symbol oRSPOBJ_MATRIX_X, RSPOBJ_MATRIX_X-RSPOBJ_VPTR
.symbol oRSPOBJ_MATRIX_Y, RSPOBJ_MATRIX_Y-RSPOBJ_VPTR
#---------------------------------------------------------------------
# Rectangle 座標計算ベース値
# DMA 転送によりこの 4 byte は MATRIX と同時にロードされる
# このため RSPOBJ_MATRIX の直後になければならない.
#---------------------------------------------------------------------
RSPOBJ_BASE_SCALEX: .half 1<<10
RSPOBJ_BASE_SCALEY: .half 1<<10
.symbol oRSPOBJ_BASE_SCALEX, RSPOBJ_BASE_SCALEX-RSPOBJ_VPTR
.symbol oRSPOBJ_BASE_SCALEY, RSPOBJ_BASE_SCALEY-RSPOBJ_VPTR
# --------------------------------------------------------------------
# Rect/Sprite の Shrink パラメータ
#
# Shrink 0 Shrink 1 Shrink 2
# Texture のシフト量 0x0000 0x0010 0x0020
# Sprite サイズの縮小量 0x0000 0x0020 0x0040
# Rect の objXY のシフト量 P 0x0001 0x0001 0x0001
# B 0xfffe 0x0001 0xfffe
# Sprite の objXY のシフト量 P 0xfffe 0x0001 0xfffe
# B 0xfffe 0x0001 0xfffe
# --------------------------------------------------------------------
#define iSHRINK_IMGST 0
#define iSHRINK_IMGWH 1
#define iSHRINK_R_OBJXY 2
#define iSHRINK_S_OBJXY 3
.bound 8
RSPOBJ_SHRINKPARAM: .half 0x0000 # Texture のシフト量
.half 0x0000 # Sprite サイズの縮小量
.half 0x0001 # Rect での objXY のシフト量
.half 0xfffe # Sprite での objXY のシフト量
.symbol oRSPOBJ_SHRINKPARAM, RSPOBJ_SHRINKPARAM-RSPOBJ_VPTR
# --------------------------------------------------------------------
# Bilerp 時における BG のパラメータ
# --------------------------------------------------------------------
RSPBG_BILERPPARAM:
.half 0x0020 # 1<<5
.half 0xffff # -1
.symbol oRSPBG_BILERPPARAM, RSPBG_BILERPPARAM-RSPOBJ_VPTR
# --------------------------------------------------------------------
# シザリングパラメータ保存エリア (llv でアクセス可能な位置 +252)
# --------------------------------------------------------------------
.bound 4
RSP_STATEP_SCISSOR_XL: .half 0
RSP_STATEP_SCISSOR_XH: .half 320<<2
RSP_STATEP_SCISSOR_YL: .half 0
RSP_STATEP_SCISSOR_YH: .half 240<<2
.symbol oRSP_SCISSOR_XL, RSP_STATEP_SCISSOR_XL-RSPOBJ_VPTR
.symbol oRSP_SCISSOR_XH, RSP_STATEP_SCISSOR_XH-RSPOBJ_VPTR
.symbol oRSP_SCISSOR_YL, RSP_STATEP_SCISSOR_YL-RSPOBJ_VPTR
.symbol oRSP_SCISSOR_YH, RSP_STATEP_SCISSOR_YH-RSPOBJ_VPTR
.symbol RSP_SUBMOD_LN_SCIS_XL, RSP_STATEP_SCISSOR_XL
.symbol RSP_SUBMOD_LN_SCIS_XH, RSP_STATEP_SCISSOR_XH
.symbol RSP_SUBMOD_LN_SCIS_YL, RSP_STATEP_SCISSOR_YL
.symbol RSP_SUBMOD_LN_SCIS_YH, RSP_STATEP_SCISSOR_YH
#-------------------------------------------------------------------------
# 非ベクトルレジスタ用エリア (vecptr でのアクセスをしない)
#-------------------------------------------------------------------------
#---------------------------------------------------------------------
# G_OBJ_LOADTXTR の複合命令のための Jump テーブル
#---------------------------------------------------------------------
# adrs_G_OBJ_RECT_Txtr_NEG は adrs_G_OBJ_RECT_Txtr に 0x8000 を OR し
# lh 命令でのロード時に負の値となるようにしたものである.
# これにより, gfx0 < 0 となり, case_G_OBJ_RECT_R 処理へ進む.
#
RSPOBJ_LDTX_TABLE:
.half GfxDone
.half case_G_OBJ_SPRITE_Txtr # G_OBJ_LDTX_SPRITE
.half case_G_OBJ_RECT_Txtr # G_OBJ_LDTX_RECT
.half case_G_OBJ_RECT_Txtr+0x8000 # G_OBJ_LDTX_RECT_R
# --------------------------------------------------------------------
# image のシュリンク量のテーブル
#
# Shrink 0 1 2 3 / 0a 1a 2a 3a
# ------------------------------------------------------
# IMGST 0 16 32 48 0 16 32 48
# IMGWH 0 32 64 96 -12 20 52 84
# --------------------------------------------------------------------
RSPOBJ_SHRINKIMG_TBL: _half8 ( 0, 0, 16, 32, 32, 64, 48, 96)
_half8 ( 0,-12, 16, 20, 32, 52, 48, 84)
# --------------------------------------------------------------------
# objXY のシフト量のテーブル
# Shrink 0 Shrink 1 Shrink 2
# Rect の objXY のシフト量 P 0x0001 0x0001 0x0001
# B 0xfffe 0x0000 0xfffe
# Sprite の objXY のシフト量 P 0xfffe 0x0000 0xfffe
# B 0xfffe 0x0000 0xfffe
# --------------------------------------------------------------------
RSPOBJ_SHRINKOBJ_TBL: # P0-R P0-S B0-R B0-S
_half4 (0x0001, 0xfffe, 0xfffe, 0xfffe)
# P1-R P1-S B1-R B1-S
_half4 (0x0001, 0x0000, 0x0000, 0x0000)
#---------------------------------------------------------------------
# OBJ 表示モード用パラメータポインタ
#---------------------------------------------------------------------
RSPOBJ_RENDERP_SMODE: .half RSPOBJ_RENDERTBL_SMODE
RSPOBJ_RENDERP_TWINDOW: .half RSPOBJ_RENDERTBL_TWINDOW
#---------------------------------------------------------------------
# OBJ 表示モード用パラメータテーブル
#---------------------------------------------------------------------
#define iCUT_SUBPIX 0
#define iGET_SUBPIX 1
#define iR_ADD_IMGST 2
#define iS_ADD_OBJOFS 3
.bound 8
RSPOBJ_RENDERTBL_SMODE:
# --- Bilerp Off の場合
.half 0xfffc # R/S共通の SubPixel 切捨値
.half 0x0000 # SubPixel シフト量取得用 Mask 値
.half 0x0000 # Rect の imgST の加算値
.half 0x0001 # Sprite の objOfs の加算値
# --- Bilerp On の場合
.half 0xffff # R/S共通の SubPixel 切捨値
.half 0x0003 # SubPixel シフト量取得用 Mask 値
.half 0xfff0 # Rect の imgST の加算値
.half 0x0000 # Sprite の objOfs の加算値
#define iTWIN_FLIPST 0
#define iTWIN_FLIPSC 1
RSPOBJ_RENDERTBL_TWINDOW:
# ---Texture Window On の場合 (default)
.half 0x0001 # S,T 値への係数 (+1)
.half 0xffff # scale 値への係数 (-1)
.word 0x00080200 # SETTILE MaskS=MaskT=0 Clamp
# ---Texture Window Off の場合
.half 0xffff # S,T 値への係数 (-1)
.half 0x0001 # scale 値への係数 (+1)
.word 0x0007c1f0 # SETTILE MaskS=MaskT=15 Mirror/gs2bg.sで参照
# 注意!!!
# gs2bg.s において RENDERTILE を設定しているコードがこのテーブルを参照
# しているため, もしこのテーブルの値を変更した場合, 以下のシンボルを修
# 正する必要がある.
.symbol RSPOBJ_SETTILE_MIRROR, RSPOBJ_RENDERTBL_TWINDOW+12
#---------------------------------------------------------------------
# OBJ 表示モード保存エリア (必要?)
#---------------------------------------------------------------------
RSPOBJ_RENDERMODE: .half 0x0000
#---------------------------------------------------------------------
# TMEM のサイズ計算用パラメータテーブル
# (u15.1) or (s14.1) フォーマットになっている
#---------------------------------------------------------------------
RSPBG_TMEMSIZE_TBL:
.half 1024<<1 # RGBA
.half 1024<<1 # YUV
.half 512<<1 # CI
.half 1024<<1 # IA
.half 1024<<1 # I
#---------------------------------------------------------------------
# BG の TMEM バウンダリ計算用パラメータテーブル
# imageX から tmemS と tmemX を計算するためのパラメータ
# ピクセルのサイズに依存する
#---------------------------------------------------------------------
RSPBG_IMAGEX_TO_TMEM:
# 4bit
.half 16*4-1 # tmemS の値は 0 から 15.75 まで
.half 0x0800 # /(16*2)
.half 0x1000 # /16
.half 0x0080 # /(16*32)
# 8bit
.half 8*4-1 # tmemS の値は 0 から 7.75 まで
.half 0x1000 # /( 8*2)
.half 0x2000 # /8
.half 0x0100 # /(8*32)
# 16bit
.half 4*4-1 # tmemS の値は 0 から 3.75 まで
.half 0x2000 # /( 4*2)
.half 0x4000 # /4
.half 0x0200 # /(4*32)
# 32bit
.half 2*4-1 # tmemS の値は 0 から 1.75 まで
.half 0x4000 # /( 2*2)
.half 0x8000 # /2
.half 0x0400 # /(2*32)
#---------------------------------------------------------------------
# SBG の TMEM バウンダリ計算用パラメータテーブル
#---------------------------------------------------------------------
RSPSBG_TMEMPARAM:
.bound 4
.half 0x01ff # tmemMask
.half 0x0080 # 1/tmemShift 1/0x200
.half 0x00ff # tmemMask
.half 0x0100 # 1/tmemShift 1/0x100
.half 0x007f # tmemMask
.half 0x0200 # 1/tmemShift 1/0x080
.half 0x003f # tmemMask
.half 0x0400 # 1/tmemShift 1/0x040
#---------------------------------------------------------------------
# SBG 版の TMEM のサイズ計算用パラメータテーブル
#---------------------------------------------------------------------
RSPSBG_TMEMSIZE_TBL:
.bound 2
.half 0x400 # RGBA
.half 0x400 # YUV
.half 0x200 # CI
.half 0x400 # IA
.half 0x400 # I
#---------------------------------------------------------------------
# 現在の RDP の状態
# Sync を管理するために導入. 以下の条件で Sync コマンドを発行する
#
# (A) プリミティブの作画前に RDP_STAT_LOADTILE なら PipeSync を
# 送信し, RDP_STAT_PRIM_TILE(n) に変更.
# (B) レンダーモードの変更時に RDP_STAT_PRIMITIVE なら PipeSync
# を送信し, RDP_STAT_NON に変更.
# (C) LoadTile/LoadBlock/LoadTLUT 時に RDP_STAT_PRIM_TILE(n) な
# ら LoadSync を送信し, RDP_STAT_LOADTILE に変更.
# (D) SetTile で TILE n 変更時に RDP_STAT_PRIM_TILE(n) なら
# TileSync を送信し, RDP_STAT_NON に変更.
# (E) SetTile で LOADTILE の変更時に RDP_STAT_LOADTILE なら
# TileSync を送信し, RDP_STAT_NON に変更.
# (F) ユーザが発行した sync があれば全て RSP_STAT_NON にする
#
# 実際は ユーザが直接 RDP の LOAD コマンドを発行したときに
# それに応じたモードに切り替える必要があるがそれによるオーバー
# ヘッドがイヤなのでやめる. そのため (F) も手を抜いている.
#---------------------------------------------------------------------
#define RDP_STAT_NON 0x80
#define RDP_STAT_LOADTILE 0x81 /* TMEM ロード中 */
#define RDP_STAT_PRIMITIVE 0x00 /* プリミティブ作画中 */
#define RDP_STAT_PRIM_TILE(n) (RDP_STAT_PRIMITIVE+(n)) /* TILE n 使用中 */
RSP_STATEP_RDP_STAT: .byte RDP_STAT_NON
#---------------------------------------------------------------------
# 現在のプリミティブで使用している Tile 記述子
# 0<->2 と変化する
#---------------------------------------------------------------------
RSP_STATEP_RENDERTILE: .byte 2 # 初期値は 2
#---------------------------------------------------------------------
# テクスチャ, パレットのロード状態フラグ
# ロードが既に行なわれているかどうかを
# STATE & MASK == FLAG
# であるかどうかで判定する. これが真なら既にロードされていると
# みなし, ロード命令をスキップする.
# 偽なら, ロードを行ない,
# STATE = (STATE & ~MASK) | (FLAG & MASK)
# のように, STATE を更新する.
#
# MASK=0, FLAG!=0 の場合, 上記判定式は常に偽となる.
# データを常にロードしたい場合は MASK=0 FLAG!=0 と指定すればよい.
#---------------------------------------------------------------------
.bound 4
RSPOBJ_GENSTAT_A_STATEP: .word 0x00000000
RSPOBJ_GENSTAT_B_STATEP: .word 0x00000000
RSPOBJ_GENSTAT_C_STATEP: .word 0x00000000
RSPOBJ_GENSTAT_D_STATEP: .word 0x00000000
.symbol RSPOBJ_GENSTAT_TABLE, RSPOBJ_GENSTAT_A_STATEP
#---------------------------------------------------------------------
# スプライトの頂点座標計算係数
# 0-3,1-2 がそれぞれ対角線になる 0+--+1
# V0(0,0) V1(1,0) V2(0,1) V3(1,1) | |
# 2+--+3
# マトリクス乗算後の Y 座標に関して a<b<d,a<c<d となるように
# 並べる.
#---------------------------------------------------------------------
.bound 16
RSP_VTX_INDEX:
# b c a d b c a d a b c d
_half8 ( 1,0, 0,1, 0,1, 0,1) # C >=0, D >=0 の時 V0,V1,V2,V3
_half8 ( 0,1, 1,0, 0,1, 0,1) # C < 0, D >=0 の時 V1,V0,V3,V2
_half8 ( 0,1, 1,0, 1,0, 1,0) # C < 0, D < 0 の時 V3,V2,V1,V0
_half8 ( 1,0, 0,1, 1,0, 1,0) # C >=0, D < 0 の時 V2,V3,V0,V1
.word 0 # Dummy --- Padding
#---------------------------------------------------------------------
# Overlay パラメータ
#---------------------------------------------------------------------
.bound 4
RSP_LSTAT_OVERLAY_TASKDONE:
.word CODE_OFS_TASKDONE
.half CODE_SIZ_TASKDONE-1
.half 0x1000
RSP_LSTAT_OVERLAY_RSPBOOT:
.word CODE_OFS_RSPBOOT
.half CODE_SIZ_RSPBOOT-1
.half 0x1000
RSP_LSTAT_OVERLAY_SPRITE:
.word CODE_OFS_SPRITE
.half CODE_SIZ_SPRITE-1
.half CODE_TOP_SPRITE
RSP_LSTAT_OVERLAY_BG1CYC:
.word CODE_OFS_BG1CYC
.half CODE_SIZ_BG1CYC-1
.half CODE_TOP_SPRITE
#---------------------------------------------------------------------
# Jump テーブル
# Gfx の ID から Jump 先を求める)
#---------------------------------------------------------------------
.bound 2
.half case_G_OBJ_RECT_R # 0xda G_OBJ_RECTANGLE_R
.half case_G_MOVEWORD # 0xdb G_MOVEWORD
.half case_G_OBJ_MOVEMEM # 0xdc G_OBJ_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
.half case_G_OBJ_RECT # 0x01 G_OBJ_RECTANGLE
.half case_G_OBJ_SPRITE # 0x02 G_OBJ_SPRITE
.half GfxDone # 0x03
.half case_G_SELECT_DL # 0x04 G_SELECT_DL
.half case_G_OBJ_LOADTMEM # 0x05 G_OBJ_LOADTXTR
.half case_G_OBJ_LDTM_SPRITE # 0x06 G_OBJ_LOADTXTR
.half case_G_OBJ_LDTM_RECT # 0x07 G_OBJ_LOADTXTR
.half case_G_OBJ_LDTM_RECT_R # 0x08 G_OBJ_LOADTXTR
.half case_G_BG_1CYC # 0x09 G_BG_1CYC
.half case_G_BG_COPY # 0x0a G_BG_COPY
.half case_G_OBJ_RENDERMODE # 0x0b G_OBJ_RENDERMODE
.symbol G_OBJ_LOADTXTR, 0x05
#---------------------------------------------------------------------
# MOVEMEM offset テーブル
#---------------------------------------------------------------------
.bound 2
RSP_MOVEMEM_TBL: .half RSPOBJ_MATRIX # gSPObjMatrix (24B)
.half RSPOBJ_MATRIX_X # gSPObjSubMatrix (8B)
#---------------------------------------------------------------------
# MOVEWORD offset テーブル
#---------------------------------------------------------------------
.bound 2
RSP_LSTAT_MOVEWORD_TBL: .half RSP_SEG_OFFSET # 6 segment table
.half RSPOBJ_GENSTAT_A_STATEP # 8 GenStat Table
.symbol RSP_LSTAT_MOVEWORD_OFFSET, RSP_LSTAT_MOVEWORD_TBL-6
.dmax 2048-1
#---------------------------------------------------------------------
# Yield 時のレジスタセーブ用領域 (0x0bf8 〜 0x0bff)
#---------------------------------------------------------------------
RSP_SAVE_OFFSET: .symbol RSP_SAVE_YIELD_INP, 0x0bf8
.symbol RSP_SAVE_YIELD_UCODE, 0x0bfc
#ifdef OUT_xbus
.symbol RSP_SAVETMP_YIELD_INP, RSP_DLINPUT_OFFSET
.symbol RSP_SAVETMP_YIELD_UCODE, RSP_DLINPUT_OFFSET+4
#endif
.symbol RSP_SAVE_YIELD_LEN, 0x0c00
#---------------------------------------------------------------------
# スクラッチバッファおよび Yield 時のレジスタ保存エリア
#---------------------------------------------------------------------
RSP_SCRATCH_OFFSET: .space 16
#---------------------------------------------------------------------
# ワークエリア
#---------------------------------------------------------------------
RSP_WORK_OFFSET: .bound 8
#---------------------------------------------------------------------
# DMA 系命令用ローディングエリア
#---------------------------------------------------------------------
.space 8 # Dummy---Padding
RSP_INPUT_TMEM: .space 8 # 24 Bytes
.bound 16
RSP_INPUT_BG: .space 16 # 40 Bytes
.bound 16
RSP_INPUT_SPRITE: .space 24 # 24 Bytes
#---------------------------------------------------------------------
# レジスタ一時待避エリア
#---------------------------------------------------------------------
.bound 4
RSP_TMP_AREA: .space 64
#---------------------------------------------------------------------
# 共通ワークエリア
#---------------------------------------------------------------------
#include "gxdmem_work.h"
# gs2bg1cycL.s
.symbol RSPBG_TMP_frameX0, RSP_TMP_AREA+0
.symbol RSPBG_TMP_frameX1, RSP_TMP_AREA+2
.symbol RSPBG_TMP_framePtrY0, RSP_TMP_AREA+4
.symbol RSPBG_TMP_frameRemain, RSP_TMP_AREA+6
.symbol RSPBG_TMP_flagBilerp, RSP_TMP_AREA+8
.symbol RSPBG_TMP_flagSplit, RSP_TMP_AREA+9
.symbol RSPBG_TMP_tmemSliceWmax, RSP_TMP_AREA+10
.symbol RSPBG_TMP_imageLYoffset, RSP_TMP_AREA+12
.symbol RSPBG_TMP_frameSliceLines, RSP_TMP_AREA+16
.symbol RSPBG_TMP_frameLSliceL0, RSP_TMP_AREA+20
.symbol RSPBG_TMP_imageYorig, RSP_TMP_AREA+24
.symbol RSPBG_TMP_imagePtrX0, RSP_TMP_AREA+28
.symbol RSPBG_TMP_imageSrcWsize, RSP_TMP_AREA+30
.symbol RSPBG_TMP_rdpSetTimg_w0, RSP_TMP_AREA+32
.symbol RSPBG_TMP_rdpSetTile_w0, RSP_TMP_AREA+36
.symbol RSPBG_TMP_imageISliceL0, RSP_TMP_AREA+40
.symbol RSPBG_TMP_imageSliceLines, RSP_TMP_AREA+42
.symbol RSPBG_TMP_imageSliceSize0, RSP_TMP_AREA+44
.symbol RSPBG_TMP_imageSliceSize, RSP_TMP_AREA+48
.symbol RSPBG_TMP_tmemSrcLines, RSP_TMP_AREA+52
.symbol RSPBG_TMP_imageIY0, RSP_TMP_AREA+54
# short
.symbol oRSPBG_TMP_frameX0, RSPBG_TMP_frameX0-RSP_TMP_AREA
.symbol oRSPBG_TMP_frameX1, RSPBG_TMP_frameX1-RSP_TMP_AREA
.symbol oRSPBG_TMP_framePtrY0, RSPBG_TMP_framePtrY0-RSP_TMP_AREA
.symbol oRSPBG_TMP_flagBilerp, RSPBG_TMP_flagBilerp-RSP_TMP_AREA
.symbol oRSPBG_TMP_tmemSliceWmax, RSPBG_TMP_tmemSliceWmax-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageSliceLines, RSPBG_TMP_imageSliceLines-RSP_TMP_AREA
.symbol oRSPBG_TMP_frameSliceLines, RSPBG_TMP_frameSliceLines-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageLYoffset, RSPBG_TMP_imageLYoffset-RSP_TMP_AREA
.symbol oRSPBG_TMP_frameLSliceL0, RSPBG_TMP_frameLSliceL0-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageISliceL0, RSPBG_TMP_imageISliceL0-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageYorig, RSPBG_TMP_imageYorig-RSP_TMP_AREA
.symbol oRSPBG_TMP_imagePtrX0, RSPBG_TMP_imagePtrX0-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageIY0, RSPBG_TMP_imageIY0-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageSliceSize, RSPBG_TMP_imageSliceSize-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageSliceSize0, RSPBG_TMP_imageSliceSize0-RSP_TMP_AREA
.symbol oRSPBG_TMP_imageSrcWsize, RSPBG_TMP_imageSrcWsize-RSP_TMP_AREA
/*---------------------------------------------------------------------------*
* Sprite 構造体
*---------------------------------------------------------------------------*/
.symbol RSP_SPR_OBJXY, 0
.symbol RSP_SPR_OBJX, 0
.symbol RSP_SPR_SCALEX, 2
.symbol RSP_SPR_IMGW, 4
.symbol RSP_SPR_PADDINGX, 6
.symbol RSP_SPR_OBJY, 8
.symbol RSP_SPR_SCALEY, 10
.symbol RSP_SPR_IMGH, 12
.symbol RSP_SPR_PADDINGY, 14
.symbol RSP_SPR_IMGSTR, 16
.symbol RSP_SPR_IMGADRS, 18
.symbol RSP_SPR_IMGFMT, 20
.symbol RSP_SPR_IMGSIZ, 21
.symbol RSP_SPR_IMGPAL, 22
.symbol RSP_SPR_IMGFLAGS, 23
/*---------------------------------------------------------------------------*
* Texture 構造体
*---------------------------------------------------------------------------*/
.symbol RSP_TXT_TYPE, 0
.symbol RSP_TXT_TYPE_LINE, 1
.symbol RSP_TXT_TYPE_FMT, 2
.symbol RSP_TXT_TYPE_HEAD, 3
.symbol RSP_TXT_IMAGE, 4
.symbol RSP_TXT_TMEM, 8
.symbol RSP_TXT_TSIZE, 10
.symbol RSP_TXT_TSTRIDE, 12
.symbol RSP_TXT_PADDING2, 14
.symbol RSP_TXT_SID, 15
.symbol RSP_TXT_FLAG, 16
.symbol RSP_TXT_MASK, 20
/*---------------------------------------------------------------------------*
* Bg 構造体
*---------------------------------------------------------------------------*/
.symbol RSP_BG_IMAGEX, 0 # imageX
.symbol RSP_BG_IMAGEW, 2 # imageW
.symbol RSP_BG_FRAMEX, 4 # frameX
.symbol RSP_BG_FRAMEW, 6 # frameW
.symbol RSP_BG_IMAGEY, 8 # imageY
.symbol RSP_BG_IMAGEH, 10 # imageH
.symbol RSP_BG_FRAMEY, 12 # frameY
.symbol RSP_BG_FRAMEH, 14 # frameH
.symbol RSP_BG_IMAGEPTR, 16 # imagePtr
.symbol RSP_BG_IMAGELOAD_MASK, 20 # imageLoad
.symbol RSP_BG_IMAGELOAD_HEAD, 21 # imageLoad
.symbol RSP_BG_IMAGEFMT, 22 # imageFmt
.symbol RSP_BG_IMAGESIZ, 23 # imageSiz
.symbol RSP_BG_IMAGEPAL, 25 # imagePal
.symbol RSP_BG_IMAGEFLIP, 27 # imageFlip
.symbol RSP_BG_TMEMW, 28 # tmemW
.symbol RSP_BG_TMEMH, 30 # tmemH
.symbol RSP_BG_TMEMLOADSH, 32 # tmemLoadSH
.symbol RSP_BG_TMEMLOADTH, 34 # tmemLoadTH
.symbol RSP_BG_TMEMSIZEW, 36 # tmemSizeW
.symbol RSP_BG_TMEMSIZE, 38 # tmemSize
.symbol RSP_SBG_SCALEW, 28 # scaleW
.symbol RSP_SBG_SCALEH, 30 # scaleH
.symbol RSP_SBG_IMAGEYORIG, 32 # imageYorig
.symbol RSP_SBG_PADDING, 36 # padding
/*---------------------------------------------------------------------------*
* Task 構造体領域
*---------------------------------------------------------------------------*/
#include "gxdmem_task.h"
/*======== End of gxs2dmem.h ========*/