gxs2main.s
5.98 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
/*---------------------------------------------------------------------
Copyright (C) 1998, Nintendo.
File gs2xmain.s
Coded by Yoshitaka Yasumoto. Apr 7, 1998.
$Id: gxs2main.s,v 1.1.1.1 2002/05/02 03:29:11 blythe Exp $
---------------------------------------------------------------------*/
#if ((!defined(_RSPASM_VERSION)) || _RSPASM_VERSION < 230)
● This Code must be complied with RSPASM version 2.30 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 "gxs2dmem.h"
#---------------------------------------------------------------------
# IMEM のコードの設定
#---------------------------------------------------------------------
#
#
# ↓RSPBOOT
# 直後の状態
# +-----------+ + + +
# | RSPBOOT | | |INIT 終了後 |TASKDONE 時に
# +-----------+ | |OVLtoBOOT の |CODE を LOAD
# | INIT | | |CODE を LOAD +
# +-----------+ | +
# | 常駐領域 | |LoadUcode
# +-----------+ +でロード
# | OVERLAY |
# +===========+
# | TASKDONE |--> RSPBOOT+INIT の領域へ (INIT 終了時)
# +-----------+
# | OVLtoBOOT |--> RSPBOOT+INIT の領域へ (TASKDONE 時)
# +-----------+
# | BG1CYC |
# +-----------+
#
#---------------------------------------------------------------------
# マイクロコードは 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"
#---------------------------------------------------------------------
# 常駐モジュール
#---------------------------------------------------------------------
#
# IMM 系処理
#
#include "gxs2imm.s"
#
# RDP 系処理
#
#include "gxrdp.s"
#
# BG 系処理
#
#include "gs2bg.s"
#
# TMEM ロード処理
#
#include "gs2tmem.s"
#
# RDP 出力処理
#
#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
#---------------------------------------------------------------------
# Default Overlay コード
#---------------------------------------------------------------------
#
# スプライト処理
#
.align 8
CODE_TOP_SPRITE: .symbol CODE_OFS_SPRITE, @codecount
#include "gs2sprite.s" /* 回転可能 */
#include "gs2rect.s" /* 回転不能 */
.align 8
CODE_BTM_SPRITE: .symbol CODE_SIZ_SPRITE, @codecount-CODE_OFS_SPRITE
#---------------------------------------------------------------------
# Free Area
#---------------------------------------------------------------------
CODE_TOP_FREE_MAIN: .bound 4
.space 0x1fac
CODE_BTM_FREE_MAIN:
#---------------------------------------------------------------------
# オーバーレイ処理 & DMA 処理
#---------------------------------------------------------------------
#include "gxoverlay.s"
CODE_BTM_IMEM: .bound 8
.dmax 0x1000
#---------------------------------------------------------------------
# Overlay コード
#---------------------------------------------------------------------
#define 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
#
# RSPBOOT
#
.text 0x1000
CODE_TOP_RSPBOOT: .symbol CODE_OFS_RSPBOOT, @codecount
#include "gxs2imm.s"
#include "gxrdp.s"
.align 8
CODE_BTM_RSPBOOT: .symbol CODE_SIZ_RSPBOOT, @codecount-CODE_OFS_RSPBOOT
#
# BG1CYC スケーリング可能な BG の処理
#
.text CODE_TOP_SPRITE
CODE_TOP_BG1CYC: .symbol CODE_OFS_BG1CYC, @codecount
#include "gxs2bg1cyc.s"
.align 8
CODE_BTM_BG1CYC: .symbol CODE_SIZ_BG1CYC, @codecount-CODE_OFS_BG1CYC
#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 "| BG1CYC = %3d inst.\n", \
((CODE_BTM_SPRITE-CODE_BTM_BG1CYC)&0xfff)/4
.print "|\n"
/*======== End of gs2xmain.s ========*/