Skip to content

Commit e9ba3a2

Browse files
committed
#368 GBA use fixed address for lightmap and div tables
1 parent 1d789d0 commit e9ba3a2

File tree

11 files changed

+53
-49
lines changed

11 files changed

+53
-49
lines changed

src/platform/gba/common.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ int32 rand_draw()
4545
return X_RAND(rand_seed_draw);
4646
}
4747

48-
const uint16 divTable[DIV_TABLE_SIZE] = { // ROM, not a big difference with IWRAM
48+
EWRAM_DATA uint16 divTable[DIV_TABLE_SIZE] = { // must be at EWRAM start
4949
0xFFFF, 0xFFFF, 0x8000, 0x5555, 0x4000, 0x3333, 0x2AAA, 0x2492,
5050
0x2000, 0x1C71, 0x1999, 0x1745, 0x1555, 0x13B1, 0x1249, 0x1111,
5151
0x1000, 0x0F0F, 0x0E38, 0x0D79, 0x0CCC, 0x0C30, 0x0BA2, 0x0B21,

src/platform/gba/common.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
//#define PROFILING
55
#ifdef PROFILING
6-
// #define STATIC_ITEMS
6+
#define STATIC_ITEMS
77
// #define PROFILE_FRAMETIME
8-
#define PROFILE_SOUNDTIME
8+
// #define PROFILE_SOUNDTIME
99
#endif
1010

1111
#define IWRAM_MATRIX_LERP
@@ -1646,7 +1646,7 @@ struct IMA_STATE {
16461646
}
16471647
#endif
16481648

1649-
extern const uint16 divTable[DIV_TABLE_SIZE];
1649+
extern uint16 divTable[DIV_TABLE_SIZE];
16501650

16511651
// renderer internal
16521652
extern uint32 keys;

src/platform/gba/main.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,9 @@ int main(void) {
511511
} while (msg.message != WM_QUIT);
512512

513513
#elif defined(__GBA__)
514+
if (intptr_t(divTable) != MEM_EWRAM) return 0;
515+
if (intptr_t(lightmap) != MEM_IWRAM) return 0;
516+
514517
irq_init(NULL);
515518
irq_add(II_VBLANK, vblank);
516519
irq_enable(II_VBLANK);

src/platform/gba/rasterizeFTA_mode4.s

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ rasterizeFTA_mode4_asm:
8181
stmfd sp!, {r4,r5,r6,r7,r8,r9,r10,r11,lr}
8282
sub sp, #16 // reserve stack space for [Ldx, Ldt, Rdx, Rdt]
8383

84-
ldr LMAP, =lightmap
84+
mov LMAP, #LMAP_ADDR
8585
ldrb tmp, [L, #VERTEX_G]
8686
add LMAP, tmp, lsl #8 // tmp = (L->v.g << 8)
8787

@@ -108,7 +108,7 @@ rasterizeFTA_mode4_asm:
108108
ble .skip_left_dx
109109

110110
lsl tmp, Lh, #1
111-
ldr DIVLUT, =divTable
111+
mov DIVLUT, #DIVLUT_ADDR
112112
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Lh)
113113

114114
ldrsh Ldx, [L, #VERTEX_X]
@@ -148,7 +148,7 @@ rasterizeFTA_mode4_asm:
148148
ble .skip_right_dx
149149

150150
lsl tmp, Rh, #1
151-
ldr DIVLUT, =divTable
151+
mov DIVLUT, #DIVLUT_ADDR
152152
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Rh)
153153

154154
ldrsh Rdx, [R, #VERTEX_X]
@@ -188,7 +188,7 @@ rasterizeFTA_mode4_asm:
188188

189189
add tmp, pixel, tmp // tmp = pixel + x1
190190

191-
ldr DIVLUTi, =divTable
191+
mov DIVLUTi, #DIVLUT_ADDR
192192
lsl inv, width, #1
193193
ldrh inv, [DIVLUTi, inv] // inv = FixedInvU(width)
194194

@@ -255,22 +255,22 @@ rasterizeFTA_mode4_asm:
255255

256256
.align_block_8px:
257257
tst width, #4
258-
beq .scanlin_block_8px
258+
beq .scanline_block_8px
259259

260260
PUT_PIXELS
261261
PUT_PIXELS
262262

263263
subs width, #4
264264
beq .scanline_end
265265

266-
.scanlin_block_8px:
266+
.scanline_block_8px:
267267
PUT_PIXELS
268268
PUT_PIXELS
269269
PUT_PIXELS
270270
PUT_PIXELS
271271

272272
subs width, #8
273-
bne .scanlin_block_8px
273+
bne .scanline_block_8px
274274

275275
.scanline_end:
276276
ldr tmp, [sp, #(SP_LDX + 16)]

src/platform/gba/rasterizeFT_mode4.s

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ rasterizeFT_mode4_asm:
8484
stmfd sp!, {r4,r5,r6,r7,r8,r9,r10,r11,lr}
8585
sub sp, #16 // reserve stack space for [Ldx, Ldt, Rdx, Rdt]
8686

87-
ldr LMAP, =lightmap
87+
mov LMAP, #LMAP_ADDR
8888
ldrb tmp, [L, #VERTEX_G]
8989
add LMAP, tmp, lsl #8 // tmp = (L->v.g << 8)
9090

@@ -111,7 +111,7 @@ rasterizeFT_mode4_asm:
111111
ble .skip_left_dx
112112

113113
lsl tmp, Lh, #1
114-
ldr DIVLUT, =divTable
114+
mov DIVLUT, #DIVLUT_ADDR
115115
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Lh)
116116

117117
ldrsh Ldx, [L, #VERTEX_X]
@@ -151,7 +151,7 @@ rasterizeFT_mode4_asm:
151151
ble .skip_right_dx
152152

153153
lsl tmp, Rh, #1
154-
ldr DIVLUT, =divTable
154+
mov DIVLUT, #DIVLUT_ADDR
155155
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Rh)
156156

157157
ldrsh Rdx, [R, #VERTEX_X]
@@ -191,7 +191,7 @@ rasterizeFT_mode4_asm:
191191

192192
add tmp, pixel, tmp // tmp = pixel + x1
193193

194-
ldr DIVLUTi, =divTable
194+
mov DIVLUTi, #DIVLUT_ADDR
195195
lsl inv, width, #1
196196
ldrh inv, [DIVLUTi, inv] // inv = FixedInvU(width)
197197

@@ -255,22 +255,22 @@ rasterizeFT_mode4_asm:
255255

256256
.align_block_8px:
257257
tst width, #4
258-
beq .scanlin_block_8px
258+
beq .scanline_block_8px
259259

260260
PUT_PIXELS
261261
PUT_PIXELS
262262

263263
subs width, #4
264264
beq .scanline_end
265265

266-
.scanlin_block_8px:
266+
.scanline_block_8px:
267267
PUT_PIXELS
268268
PUT_PIXELS
269269
PUT_PIXELS
270270
PUT_PIXELS
271271

272272
subs width, #8
273-
bne .scanlin_block_8px
273+
bne .scanline_block_8px
274274

275275
.scanline_end:
276276
ldr tmp, [sp, #(SP_LDX + 16)]

src/platform/gba/rasterizeF_mode4.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ blocks .req DIVLUT
2727
rasterizeF_mode4_asm:
2828
stmfd sp!, {r4,r5,r6,r7,r8,r9,r10,r11,lr}
2929

30-
ldr LMAP, =lightmap
30+
mov LMAP, #LMAP_ADDR
3131

3232
ldrb tmp, [L, #VERTEX_G]
3333
orr tmp, index, tmp, lsl #8 // tmp = index | (L->v.g << 8)
@@ -38,7 +38,7 @@ rasterizeF_mode4_asm:
3838
mov Rh, #0 // Rh = 0
3939

4040
.loop:
41-
ldr DIVLUT, =divTable
41+
mov DIVLUT, #DIVLUT_ADDR
4242

4343
.calc_left_start:
4444
cmp Lh, #0

src/platform/gba/rasterizeGTA_mode4.s

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ rasterizeGTA_mode4_asm:
128128
ble .skip_left_dx
129129

130130
lsl tmp, Lh, #1
131-
ldr DIVLUT, =divTable
131+
mov DIVLUT, #DIVLUT_ADDR
132132
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Lh)
133133

134134
ldrsh Ldx, [L, #VERTEX_X]
@@ -156,9 +156,8 @@ rasterizeGTA_mode4_asm:
156156

157157
.skip_left_dx:
158158
lsl Lx, #16 // Lx <<= 16
159-
160-
ldr LMAP, =lightmap // !!! lightmap should be 64k aligned
161-
add Lg, LMAP, Lg, lsl #8 // Lg is address in lightmap array
159+
lsl Lg, #8 // Lg <= 8
160+
add Lg, #LMAP_ADDR // Lg += lightmap
162161

163162
b .calc_left_start
164163
.calc_left_end:
@@ -179,7 +178,7 @@ rasterizeGTA_mode4_asm:
179178
ble .skip_right_dx
180179

181180
lsl tmp, Rh, #1
182-
ldr DIVLUT, =divTable
181+
mov DIVLUT, #DIVLUT_ADDR
183182
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Rh)
184183

185184
ldrsh Rdx, [R, #VERTEX_X]
@@ -207,9 +206,8 @@ rasterizeGTA_mode4_asm:
207206

208207
.skip_right_dx:
209208
lsl Rx, #16 // Rx <<= 16
210-
211-
ldr LMAP, =lightmap // !!! lightmap should be 64k aligned
212-
add Rg, LMAP, Rg, lsl #8 // Rg is address in lightmap array
209+
lsl Rg, #8 // Rg <= 8
210+
add Rg, #LMAP_ADDR // Rg += lightmap
213211

214212
b .calc_right_start
215213
.calc_right_end:
@@ -234,7 +232,7 @@ rasterizeGTA_mode4_asm:
234232

235233
add ptr, pixel, tmp // ptr = pixel + x1
236234

237-
ldr DIVLUTi, =divTable
235+
mov DIVLUTi, #DIVLUT_ADDR
238236
lsl inv, width, #1
239237
ldrh inv, [DIVLUTi, inv] // inv = FixedInvU(width)
240238

@@ -321,22 +319,22 @@ rasterizeGTA_mode4_asm:
321319

322320
.align_block_8px:
323321
tst width, #4
324-
beq .scanlin_block_8px
322+
beq .scanline_block_8px
325323

326324
PUT_PIXELS
327325
PUT_PIXELS
328326

329327
subs width, #4
330328
beq .scanline_end
331329

332-
.scanlin_block_8px:
330+
.scanline_block_8px:
333331
PUT_PIXELS
334332
PUT_PIXELS
335333
PUT_PIXELS
336334
PUT_PIXELS
337335

338336
subs width, #8
339-
bne .scanlin_block_8px
337+
bne .scanline_block_8px
340338

341339
.scanline_end:
342340
ldmfd sp!, {Lx,Rx,Lg,Rg,Lt,Rt} // sp+24

src/platform/gba/rasterizeGT_mode4.s

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ rasterizeGT_mode4_asm:
131131
ble .skip_left_dx
132132

133133
lsl tmp, Lh, #1
134-
ldr DIVLUT, =divTable
134+
mov DIVLUT, #DIVLUT_ADDR
135135
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Lh)
136136

137137
ldrsh Ldx, [L, #VERTEX_X]
@@ -159,9 +159,8 @@ rasterizeGT_mode4_asm:
159159

160160
.skip_left_dx:
161161
lsl Lx, #16 // Lx <<= 16
162-
163-
ldr LMAP, =lightmap // !!! lightmap should be 64k aligned
164-
add Lg, LMAP, Lg, lsl #8 // Lg is address in lightmap array
162+
lsl Lg, #8 // Lg <= 8
163+
add Lg, #LMAP_ADDR // Lg += lightmap
165164

166165
b .calc_left_start
167166
.calc_left_end:
@@ -182,7 +181,7 @@ rasterizeGT_mode4_asm:
182181
ble .skip_right_dx
183182

184183
lsl tmp, Rh, #1
185-
ldr DIVLUT, =divTable
184+
mov DIVLUT, #DIVLUT_ADDR
186185
ldrh tmp, [DIVLUT, tmp] // tmp = FixedInvU(Rh)
187186

188187
ldrsh Rdx, [R, #VERTEX_X]
@@ -210,9 +209,8 @@ rasterizeGT_mode4_asm:
210209

211210
.skip_right_dx:
212211
lsl Rx, #16 // Rx <<= 16
213-
214-
ldr LMAP, =lightmap // !!! lightmap should be 64k aligned
215-
add Rg, LMAP, Rg, lsl #8 // Rg is address in lightmap array
212+
lsl Rg, #8 // Rg <= 8
213+
add Rg, #LMAP_ADDR // Rg += lightmap
216214

217215
b .calc_right_start
218216
.calc_right_end:
@@ -237,7 +235,7 @@ rasterizeGT_mode4_asm:
237235

238236
add ptr, pixel, tmp // ptr = pixel + x1
239237

240-
ldr DIVLUTi, =divTable
238+
mov DIVLUTi, #DIVLUT_ADDR
241239
lsl inv, width, #1
242240
ldrh inv, [DIVLUTi, inv] // inv = FixedInvU(width)
243241

@@ -312,22 +310,22 @@ rasterizeGT_mode4_asm:
312310

313311
.align_block_8px:
314312
tst width, #4
315-
beq .scanlin_block_8px
313+
beq .scanline_block_8px
316314

317315
PUT_PIXELS
318316
PUT_PIXELS
319317

320318
subs width, #4
321319
beq .scanline_end
322320

323-
.scanlin_block_8px:
321+
.scanline_block_8px:
324322
PUT_PIXELS
325323
PUT_PIXELS
326324
PUT_PIXELS
327325
PUT_PIXELS
328326

329327
subs width, #8
330-
bne .scanlin_block_8px
328+
bne .scanline_block_8px
331329

332330
.scanline_end:
333331
ldmfd sp!, {Lx,Rx,Lg,Rg,Lt,Rt} // sp+24

src/platform/gba/rasterizeG_mode4.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ rasterizeG_mode4_asm:
4747
stmfd sp!, {r4,r5,r6,r7,r8,r9,r10,r11,lr}
4848
sub sp, #16 // reserve stack space for [Ldx, Ldg, Rdx, Rdg]
4949

50-
ldr tmp, =lightmap
50+
mov tmp, #LMAP_ADDR
5151
add LMAP, index, tmp // LMAP = lightmap + index
52-
ldr DIVLUT, =divTable
52+
mov DIVLUT, #DIVLUT_ADDR
5353

5454
mov Lh, #0 // Lh = 0
5555
mov Rh, #0 // Rh = 0

src/platform/gba/rasterizeS_mode4.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ rasterizeS_mode4_asm:
3636
mov Rh, #0 // Rh = 0
3737

3838
.loop:
39-
ldr DIVLUT, =divTable
39+
mov DIVLUT, #DIVLUT_ADDR
4040

4141
.calc_left_start:
4242
cmp Lh, #0

0 commit comments

Comments
 (0)