mirror of
https://git.planet-casio.com/Fcalva/Copy3DEngine.git
synced 2024-12-28 04:23:44 +01:00
Essai de boucle de dessin en asm (echec)
This commit is contained in:
parent
972e52f666
commit
6942d10dda
5 changed files with 112 additions and 8 deletions
|
@ -2,7 +2,7 @@
|
||||||
# toolchain file and module path of the fxSDK
|
# toolchain file and module path of the fxSDK
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.15)
|
||||||
project(Copy3DEngine)
|
project(Copy3DEngine LANGUAGES C ASM)
|
||||||
|
|
||||||
include(GenerateG3A)
|
include(GenerateG3A)
|
||||||
include(Fxconv)
|
include(Fxconv)
|
||||||
|
@ -18,6 +18,7 @@ set(SOURCES
|
||||||
src/main.c
|
src/main.c
|
||||||
src/moteur.c
|
src/moteur.c
|
||||||
src/map.c
|
src/map.c
|
||||||
|
src/opti.S
|
||||||
)
|
)
|
||||||
|
|
||||||
set(ASSETS
|
set(ASSETS
|
||||||
|
|
|
@ -27,9 +27,7 @@
|
||||||
#error Ce code est pour FXCG50/G90+E uniquement, enlevez ce message a vos riques et périls
|
#error Ce code est pour FXCG50/G90+E uniquement, enlevez ce message a vos riques et périls
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define debug //pour afficher les infos de debug
|
#define debug 0 //pour afficher les infos de debug
|
||||||
|
|
||||||
//extern uint16_t *gint_vram;
|
|
||||||
|
|
||||||
image_t *tex_index[TINDEX_S];
|
image_t *tex_index[TINDEX_S];
|
||||||
|
|
||||||
|
@ -73,7 +71,7 @@ void keys_get(){
|
||||||
if (keydown(KEY_EXIT)) exit_game = 1;
|
if (keydown(KEY_EXIT)) exit_game = 1;
|
||||||
|
|
||||||
#ifdef debug
|
#ifdef debug
|
||||||
if (keydown(KEY_TAN)) end_screen();
|
//if (keydown(KEY_TAN)) end_screen();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +127,7 @@ int main(){
|
||||||
|
|
||||||
if (disp_frame_time == 1) dprint( 1, 10, C_BLACK, "Frame time : %d ms", frame_time);
|
if (disp_frame_time == 1) dprint( 1, 10, C_BLACK, "Frame time : %d ms", frame_time);
|
||||||
|
|
||||||
#ifdef debug
|
#if debug
|
||||||
dprint( 1, 20, C_BLACK, "planeX : %d", planeX);
|
dprint( 1, 20, C_BLACK, "planeX : %d", planeX);
|
||||||
dprint( 1, 30, C_BLACK, "planeY : %d", planeY);
|
dprint( 1, 30, C_BLACK, "planeY : %d", planeY);
|
||||||
dprint( 1, 40, C_BLACK, "dirX : %d", dirX);
|
dprint( 1, 40, C_BLACK, "dirX : %d", dirX);
|
||||||
|
|
|
@ -167,7 +167,10 @@ void load_map(){
|
||||||
spawn_gen();
|
spawn_gen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_stripe(image_t *tex, int texSampleY, int texSample, int linePos, fixed_t texSize, int texX, int x){
|
#if asm_opti
|
||||||
|
void draw_stripe(image_t *tex, int texSampleY, int linePos, fixed_t texSize, int texX, int x);
|
||||||
|
#else
|
||||||
|
void inline draw_stripe(image_t *tex, int texSampleY, int linePos, fixed_t texSize, int texX, int x){
|
||||||
fixed_t screenPos = fix(linePos);
|
fixed_t screenPos = fix(linePos);
|
||||||
uint32_t texDat = (uint32_t)tex->data + 2*texX;
|
uint32_t texDat = (uint32_t)tex->data + 2*texX;
|
||||||
for(int texPos = texSampleY; texPos < 64; texPos++){
|
for(int texPos = texSampleY; texPos < 64; texPos++){
|
||||||
|
@ -180,6 +183,7 @@ void draw_stripe(image_t *tex, int texSampleY, int texSample, int linePos, fixed
|
||||||
texDat += tex->stride;
|
texDat += tex->stride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void draw_walls(){
|
void draw_walls(){
|
||||||
extern fixed_t posX;
|
extern fixed_t posX;
|
||||||
|
@ -336,6 +340,6 @@ void draw_walls(){
|
||||||
|
|
||||||
image_t *tex = tex_index[map_test[mapX][mapY]];
|
image_t *tex = tex_index[map_test[mapX][mapY]];
|
||||||
|
|
||||||
draw_stripe(tex, texSampleY, texSample, linePos, texSize, texX, x);
|
draw_stripe(tex, texSampleY, linePos, texSize, texX, x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
|
|
||||||
#define TINDEX_S 256
|
#define TINDEX_S 256
|
||||||
|
|
||||||
|
#define asm_opti 1
|
||||||
|
|
||||||
void load_map();
|
void load_map();
|
||||||
void end_screen();
|
void end_screen();
|
||||||
void draw_walls();
|
void draw_walls();
|
||||||
|
|
99
src/opti.S
Normal file
99
src/opti.S
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
##void draw_stripe(image_t *tex, int texSampleY, int linePos, fixed_t texSize, int texX, int x){
|
||||||
|
## fixed_t screenPos = fix(linePos);
|
||||||
|
## uint32_t texDat = (uint32_t)tex->data + 2*texX;
|
||||||
|
## for(int texPos = texSampleY; texPos < 64; texPos++){
|
||||||
|
## if(screenPos < -texSize) goto noDraw;
|
||||||
|
## for(fixed_t oldPos = screenPos; oldPos < screenPos+texSize; oldPos+=0xFFFF){
|
||||||
|
## gint_vram[ffloor(oldPos)*396+x] = *(uint16_t*)texDat;
|
||||||
|
## }
|
||||||
|
## noDraw:
|
||||||
|
## screenPos += texSize;
|
||||||
|
## texDat += tex->stride;
|
||||||
|
## }
|
||||||
|
##}
|
||||||
|
|
||||||
|
# r0 : vram
|
||||||
|
# r1 : tex->stride
|
||||||
|
# r2 : texDat
|
||||||
|
# r3 : 0xFFFF / swapped with 64
|
||||||
|
# r4 : tex -> x -> texX -> oldPos
|
||||||
|
# r5 : texSampleY -> texPos
|
||||||
|
# r6 : linePos -> screenPos
|
||||||
|
# r7 : texSize
|
||||||
|
# r8 : 396*2
|
||||||
|
# r9 : -texSize
|
||||||
|
# r10 : px save
|
||||||
|
# @-4 : texX -> r8 (save)
|
||||||
|
# @-8 : x -> r9 (save)
|
||||||
|
# @-12 : r10 (save)
|
||||||
|
|
||||||
|
.global _draw_stripe
|
||||||
|
.align 4
|
||||||
|
_draw_stripe:
|
||||||
|
mov.l .gint_vram, r0
|
||||||
|
|
||||||
|
add #4, r4
|
||||||
|
mov.l @r4, r1
|
||||||
|
|
||||||
|
add #4, r4
|
||||||
|
mov.l @r4, r2
|
||||||
|
mov.l @r15+, r4
|
||||||
|
shll r4
|
||||||
|
add r4, r2
|
||||||
|
|
||||||
|
mov.l @r15+, r4
|
||||||
|
shll r4
|
||||||
|
add r4, r0
|
||||||
|
|
||||||
|
shll16 r6
|
||||||
|
|
||||||
|
mov.l r8, @-r15
|
||||||
|
mov #99, r8
|
||||||
|
shll2 r8
|
||||||
|
shll r8
|
||||||
|
|
||||||
|
mov.l r9, @-r15
|
||||||
|
mov r7, r9
|
||||||
|
neg r9, r9
|
||||||
|
|
||||||
|
mov.l r10, @-r15
|
||||||
|
|
||||||
|
ds_lpstart:
|
||||||
|
cmp/gt r6, r9
|
||||||
|
bt noDraw
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
ds_tex_lpstart:
|
||||||
|
mov #-1, r3
|
||||||
|
mov r6, r4
|
||||||
|
#tex read
|
||||||
|
mov.w @r2, r10
|
||||||
|
extu.w r3, r3
|
||||||
|
add r7, r6
|
||||||
|
mov.w r10, @r0
|
||||||
|
add r3, r4
|
||||||
|
cmp/gt r4, r6
|
||||||
|
add r8, r0
|
||||||
|
bf ds_tex_lpstart
|
||||||
|
bt ds_tex_exit
|
||||||
|
nop
|
||||||
|
noDraw:
|
||||||
|
add r7, r6
|
||||||
|
add r8, r0
|
||||||
|
ds_tex_exit:
|
||||||
|
add r1, r2
|
||||||
|
mov #64, r3
|
||||||
|
add #1, r5
|
||||||
|
cmp/ge r5, r3
|
||||||
|
bf ds_lpstart
|
||||||
|
nop
|
||||||
|
|
||||||
|
mov.l @r15+, r10
|
||||||
|
mov.l @r15+, r9
|
||||||
|
mov.l @r15+, r8
|
||||||
|
rts
|
||||||
|
add #-8, r15
|
||||||
|
|
||||||
|
.align 4
|
||||||
|
.gint_vram:
|
||||||
|
.long _gint_vram
|
Loading…
Reference in a new issue