gzmain.s
3.04 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
/*---------------------------------------------------------------------
$Id: gzmain.s,v 1.1.1.1 2002/05/02 03:29:12 blythe Exp $
File : gzmain.s
Coded by Yoshitaka Yasumoto. Jun 17, 1997.
Copyright by Nintendo, Co., Ltd. 1997.
---------------------------------------------------------------------*/
#include <rsp.h>
#include <rcp.h>
#include <os.h>
#include <sptask.h>
#include <gzsort.h>
#include <gbi.h>
#include "gzmacros.h"
#include "gzregs.h"
#---------------------------------------------------------------------
# DMEM 領域の設定
#---------------------------------------------------------------------
.data 0x04000000
#include "gzdmem.h"
#---------------------------------------------------------------------
# IMEM のコードの設定
#---------------------------------------------------------------------
# rspboot で 0x1080 にロードされ, ここから実行される
.text 0x04001080
#------ 初期化 & Yield 復帰処理 ------
#
#include "gzinit.s"
#===================================================== Gfx 処理
#------ Gfx を DMEM 内にロードする ------
#
StartDLload:
AssignForDMAproc
sra sys0, gfxdone, 14 # Main のときは 0, Sub のときは -2
lhu dmem_adrs, RSP_DLLOAD_DMEM_ADRS(sys0)
_li (dma_len, GZ_MAX_DL*8-1)
jal DMAread
_mov (dram_adrs, inp)
addiu inp, inp, GZ_MAX_DL*8
_li (dinp, -GZ_MAX_DL*8)
#ifdef xDEBUG
sw dinp, ASSERT_DEBUG0(zero)
#endif
j DMAwait
_mov (return, gfxdone)
EndAssignForDMAproc
#------ Gfx 処理ループ ------
#
GfxDone: mfc0 sys1, SP_STATUS ###! YIELD 要求チェック
lw gfx0, (RSP_DLINPUT_BOTTOM+0)(dinp) # DL 前半を gfx0 へ
beq dinp, zero, StartDLload # DL バッファが空か ?
andi sys1, sys1, SP_STATUS_YIELD ###! YIELD フラグ取得
sra sys0, gfx0, 24 # INDEX 作成
sll sys0, sys0, 1 # INDEX 作成
lhu sys0, RSP_JTBL_A_ORG(sys0) # テーブル参照
bne sys1, zero, RSPyield_A ###! YIELD 判定
lw gfx1, (RSP_DLINPUT_BOTTOM+4)(dinp) # DL 後半を gfx1 へ
jr sys0 # 各処理へ JUMP
addiu dinp, dinp, 8 # ポインタ加算
#include "gzgfx.s"
#include "gzobj.s"
#include "gzsubdl.s"
#include "gzmath.s"
#include "gzoutfifo.s"
#include "gzdone.s"
#define LOADUC_START 0x04001f74
End_of_Body: .dmax (LOADUC_START-0x04000080)/4+1
.space LOADUC_START
.symbol IMEM_PAD, (LOADUC_START-End_of_Body)/4
#include "gzloaduc.s"
End_of_Main: .dmax 1025-32
.symbol IMEM_INIT, (StartDLload & 0xfff)/4
OVERLAY_CODE: .symbol DUMMY_OVERLAY_CODE, 0
#define OVERLAY_AREA
#include "gzmath.s"
OVERLAY_CODE_END: .symbol DUMMY_OVERLAY_CODE_END, 0
.symbol IMEM_OVERLAY, (OVERLAY_CODE_END-OVERLAY_CODE)/4
.print "| ucode 常駐部の残り = %d inst.\n", IMEM_PAD
.print "| ucode 初期化部のサイズ = %d inst.(DMA可能 = %d)\n", IMEM_INIT-2, (IMEM_INIT-2)&~1
.print "| ucode OVERLAY のサイズ = %d inst.\n", IMEM_OVERLAY
.print "|\n"
/*======== End of gzmain.s ========*/