gxmain.s
5.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
/*---------------------------------------------------------------------
Copyright (C) 1997, Nintendo.
File gxmain.s
Coded by Yoshitaka Yasumoto. Oct 9, 1997.
$Id $
---------------------------------------------------------------------*/
#if ((!defined(_RSPASM_VERSION)) || _RSPASM_VERSION < 220)
● This Code must be complied with RSPASM version 2.20 or later. ●
#endif
#define F3DEX_GBI
#define F3DEX_GBI_2
#include <rsp.h>
#include <rcp.h>
#include <os.h>
#include <sptask.h>
#include <gbi.h>
#include "gxmacros.h"
#include "gxregs.h"
#---------------------------------------------------------------------
# DMEM 領域の設定
#---------------------------------------------------------------------
.data 0x0000
#include "gxdmem.h"
#---------------------------------------------------------------------
# IMEM のコードの設定
#---------------------------------------------------------------------
#
#
# ↓RSPBOOT
# 直後の状態
# +-----------+ + + +
# | RSPBOOT | | |INIT 終了後 |TASKDONE 時に
# +-----------+ | |OVLtoBOOT の |CODE を LOAD
# | INIT | | |CODE を LOAD +
# +-----------+ | +
# | 常駐領域 | |LoadUcode
# +-----------+ |でロード +
# | SUBMODULE | | |SUBMOD 命令
# +-----------+ + +でロード
# | OVERLAY |
# +===========+
# | TASKDONE |--> RSPBOOT+INIT の領域へ (INIT 終了時)
# +-----------+
# | OVLtoBOOT |--> RSPBOOT+INIT の領域へ (TASKDONE 時)
# +-----------+
# | Lighting |
# +-----------+
#
#---------------------------------------------------------------------
# マイクロコードは rspboot によって IMEM=0x1080 以降にロード
# され, 0x1080 から順に実行される. そのため起動直後は 0x1000
# から 0x107f に rspboot マイクロコードのローダー部がある.
#---------------------------------------------------------------------
.symbol CODE_TOP_IMEM, 0x1000
.text CODE_TOP_IMEM+0x80
#---------------------------------------------------------------------
# 初期化 & Yield 復帰処理
#---------------------------------------------------------------------
# マイクロコードの初期化処理をここで行なう.
# このコードは初期化が終ると必要なくなるので, 初期化終了時に
# rspboot の 0x1000 から初期化処理の終りまでの領域へ他のコー
# ドをロード(オーバーレイ)させることができる. ただし DMA は
# 8 Bytes 単位なので命令数が奇数の場合には注意が必要.
#---------------------------------------------------------------------
CODE_TOP_BOOT: .bound 8
#include "gxinit.s"
CODE_BTM_BOOT: .bound 8
#---------------------------------------------------------------------
# DisplayList 処理ループ
#---------------------------------------------------------------------
#include "gxloop.s"
#---------------------------------------------------------------------
# 常駐モジュール
#---------------------------------------------------------------------
#include "gximm.s"
#include "gxrdp.s"
#if defined(OUT_fifo)
# include "gxoutfifo.s"
#elif defined(OUT_xbus)
# include "gxoutxbus.s"
#else
● OUT_fifo or OUT_xbus must be defined either. ●
#endif
#---------------------------------------------------------------------
# サブモジュール
#---------------------------------------------------------------------
#include "gxsubmod.s"
#---------------------------------------------------------------------
# オーバーレイ処理 & DMA 処理
#---------------------------------------------------------------------
#include "gxoverlay.s"
CODE_BTM_IMEM: .bound 8
.dmax 0x1000
#---------------------------------------------------------------------
# Overlay コード / TASKDONE
#---------------------------------------------------------------------
.text 0x1000
CODE_TOP_TASKDONE: .symbol CODE_OFS_TASKDONE, @codecount
#include "gxdone.s"
.align 8
CODE_BTM_TASKDONE: .symbol CODE_SIZ_TASKDONE, @codecount-CODE_OFS_TASKDONE
#---------------------------------------------------------------------
# Overlay コード / RSPBOOT
#---------------------------------------------------------------------
.text 0x1000
CODE_TOP_RSPBOOT: .symbol CODE_OFS_RSPBOOT, @codecount
#define OVERLAY
#include "gximm.s"
.align 8
#undef OVERLAY
CODE_BTM_RSPBOOT: .symbol CODE_SIZ_RSPBOOT, @codecount-CODE_OFS_RSPBOOT
#---------------------------------------------------------------------
# Overlay コード / CLIPPING
#---------------------------------------------------------------------
#define OVERLAY
#include "gxsubmod.s"
.align 8
#undef OVERLAY
#define ASSERT_UNNAME
#include "gxregs.h"
#---------------------------------------------------------------------
# binHack のデータ作成
#---------------------------------------------------------------------
.symbol SEG_TOP_DMEM, 0
.symbol SEG_BTM_DMEM, RSP_SAVE_OFFSET-RSP_GSTAT_OFFSET
#---------------------------------------------------------------------
# IMEM の空き情報の出力
#---------------------------------------------------------------------
.print "| Free Area:\n"
.print "| MAIN = %3d inst.\n", \
((CODE_BTM_FREE_MAIN-CODE_TOP_FREE_MAIN)&0xfff)/4
.print "| TASKDONE = %3d inst.\n", \
((CODE_BTM_BOOT-CODE_BTM_TASKDONE)&0xfff)/4
.print "| RSPBOOT = %3d inst.\n", \
((CODE_BTM_BOOT-CODE_BTM_RSPBOOT)&0xfff)/4
.print "|\n"
/*======== End of gxmain.s ========*/