Dreamcast: Unify assembly

This commit is contained in:
UnknownShadow200 2024-05-15 22:00:24 +10:00
parent 9a69e3fac6
commit 29859ca9ab
4 changed files with 58 additions and 120 deletions

View File

@ -38,56 +38,16 @@ _DrawColouredQuads:
.TRANSFORM_QUAD:
mov.l CMD_COL_VERT, r1 ! r1 = GPU VERT command
! TRANSFORM VERTEX 1
add #16, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! fr4 = src->x
fmov @r4+, fr5 ! fr5 = src->y
fmov @r4+, fr6 ! fr6 = src->z
fldi1 fr7 ! fr7 = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7)
fmov @r4+,fr3 ! C = src->color
LoadColouredVertex
ProcessVertex1
! TRANSFORM VERTEX 2
add #16, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! fr4 = src->x
fmov @r4+, fr5 ! fr5 = src->y
fmov @r4+, fr6 ! fr6 = src->z
fldi1 fr7 ! fr7 = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7)
fmov @r4+,fr3 ! C = src->color
LoadColouredVertex
ProcessVertex2
! TRANSFORM VERTEX 3
add #16, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! fr4 = src->x
fmov @r4+, fr5 ! fr5 = src->y
fmov @r4+, fr6 ! fr6 = src->z
fldi1 fr7 ! fr7 = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7)
fmov @r4+,fr3 ! C = src->color
LoadColouredVertex
ProcessVertex3
! TRANSFORM VERTEX 4
add #16, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! fr4 = src->x
fmov @r4+, fr5 ! fr5 = src->y
fmov @r4+, fr6 ! fr6 = src->z
fldi1 fr7 ! fr7 = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(fr4..fr7)
fmov @r4+,fr3 ! C = src->color
LoadColouredVertex
ProcessVertex4 CMD_COL_EOS
! CLIPFLAGS TESTING
@ -118,20 +78,16 @@ CMD_COL_EOS: .long 0xf0000000
.global _VP_COL_HWIDTH
.type _VP_COL_HWIDTH,%object
.size _VP_COL_HWIDTH,4
_VP_COL_HWIDTH: .long 0
.global _VP_COL_HHEIGHT
.type _VP_COL_HHEIGHT,%object
.size _VP_COL_HHEIGHT,4
_VP_COL_HHEIGHT: .long 0
.global _VP_COL_X_PLUS_HWIDTH
.type _VP_COL_X_PLUS_HWIDTH,%object
.size _VP_COL_X_PLUS_HWIDTH,4
_VP_COL_X_PLUS_HWIDTH: .long 0
.global _VP_COL_Y_PLUS_HHEIGHT
.type _VP_COL_Y_PLUS_HHEIGHT,%object
.size _VP_COL_Y_PLUS_HHEIGHT,4
_VP_COL_Y_PLUS_HHEIGHT: .long 0

View File

@ -36,64 +36,16 @@ _DrawTexturedQuads:
.TRANSFORM_QUAD:
mov.l CMD_TEX_VERT, r1 ! r1 = GPU VERT command
! TRANSFORM VERTEX 1
add #24, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! X = src->x
fmov @r4+, fr5 ! Y = src->y
fmov @r4+, fr6 ! Z = src->z
fldi1 fr7 ! W = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(XYZW)
! OUTPUT + CLIPFLAGS VERTEX 1
fmov @r4+,fr3 ! C = src->color
fmov @r4+,fr1 ! U = src->u
fmov @r4+,fr2 ! V = src->v
LoadTexturedVertex
ProcessVertex1
! TRANSFORM VERTEX 2
add #24, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! X = src->x
fmov @r4+, fr5 ! Y = src->y
fmov @r4+, fr6 ! Z = src->z
fldi1 fr7 ! W = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(XYZW)
! OUTPUT + CLIPFLAGS VERTEX 2
fmov @r4+,fr3 ! C = src->color
fmov @r4+,fr1 ! U = src->u
fmov @r4+,fr2 ! V = src->v
LoadTexturedVertex
ProcessVertex2
! TRANSFORM VERTEX 3
add #24, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! X = src->x
fmov @r4+, fr5 ! Y = src->y
fmov @r4+, fr6 ! Z = src->z
fldi1 fr7 ! W = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(XYZW)
! OUTPUT + CLIPFLAGS VERTEX 3
fmov @r4+,fr3 ! C = src->color
fmov @r4+,fr1 ! U = src->u
fmov @r4+,fr2 ! V = src->v
LoadTexturedVertex
ProcessVertex3
! TRANSFORM VERTEX 4
add #24, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
fmov @r4+, fr4 ! X = src->x
fmov @r4+, fr5 ! Y = src->y
fmov @r4+, fr6 ! Z = src->z
fldi1 fr7 ! W = 1.0
ftrv xmtrx, fv4 ! TRANSFORM(XYZW)
! OUTPUT + CLIPFLAGS VERTEX 4
fmov @r4+,fr3 ! C = src->color
fmov @r4+,fr1 ! U = src->u
fmov @r4+,fr2 ! V = src->v
LoadTexturedVertex
ProcessVertex4 CMD_TEX_EOS
! CLIPFLAGS TESTING
@ -124,20 +76,16 @@ CMD_TEX_EOS: .long 0xf0000000
.global _VP_TEX_HWIDTH
.type _VP_TEX_HWIDTH,%object
.size _VP_TEX_HWIDTH,4
_VP_TEX_HWIDTH: .long 0
.global _VP_TEX_HHEIGHT
.type _VP_TEX_HHEIGHT,%object
.size _VP_TEX_HHEIGHT,4
_VP_TEX_HHEIGHT: .long 0
.global _VP_TEX_X_PLUS_HWIDTH
.type _VP_TEX_X_PLUS_HWIDTH,%object
.size _VP_TEX_X_PLUS_HWIDTH,4
_VP_TEX_X_PLUS_HWIDTH: .long 0
.global _VP_TEX_Y_PLUS_HHEIGHT
.type _VP_TEX_Y_PLUS_HHEIGHT,%object
.size _VP_TEX_Y_PLUS_HHEIGHT,4
_VP_TEX_Y_PLUS_HHEIGHT: .long 0

View File

@ -1,3 +1,40 @@
! =========================================================
! ========================= VERTEX LOADING ================
! =========================================================
.macro LoadColouredVertex
! PREPARE NEXT VERTEX
add #16, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
! LOAD XYZ
fmov @r4+, fr4 ! X = src->x
fmov @r4+, fr5 ! Y = src->y
fmov @r4+, fr6 ! Z = src->z
fldi1 fr7 ! W = 1.0
! TRANSFORM VERTEX
ftrv xmtrx, fv4 ! TRANSFORM(XYZW)
! LOAD ATTRIBUTES
fmov @r4+,fr3 ! C = src->color
.endm
.macro LoadTexturedVertex
! PREPARE NEXT VERTEX
add #24, r3 ! r3 += VERTEX_STRIDE
pref @r3 ! PREFETCH r3 (next vertex)
add #64, r5 ! r5 += 2 * sizeof(VERTEX)
! LOAD XYZ
fmov @r4+, fr4 ! X = src->x
fmov @r4+, fr5 ! Y = src->y
fmov @r4+, fr6 ! Z = src->z
fldi1 fr7 ! W = 1.0
! TRANSFORM VERTEX
ftrv xmtrx, fv4 ! TRANSFORM(XYZW)
! LOAD ATTRIBUTES
fmov @r4+,fr3 ! C = src->color
fmov @r4+,fr1 ! U = src->u
fmov @r4+,fr2 ! V = src->v
.endm
! =========================================================
! ========================= VERTEX OUTPUT =================
! =========================================================
@ -96,10 +133,10 @@
.macro ViewportTransformVertex
! INVERSE W CALCULATION
add #28, r5 ! r5 = &vertex[0].w
fmov.s @r5+,fr0 ! fr0 = vertex->w
add #28, r5 ! r5 = &vertex->w
fmov.s @r5,fr0 ! fr0 = vertex->w
fmul fr0,fr0 ! fr0 = fr0 * fr0
add #-32, r5 ! r5 -= sizeof(VERTEX)
add #-24, r5 ! r5 = &vertex->x
fsrra fr0 ! fr0 = 1 / sqrt(fr0) -> 1 / vertex->w
! TRANSFORM X
@ -107,22 +144,18 @@
fmov fr10,fr5 ! fr5 = VIEWPORT_X_PLUS_HWIDTH
fmul fr8,fr4 ! fr4 = VIEWPORT_HWIDTH * vertex->x
fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (X * F * hwidth) + x_plus_hwidth
fmov.s fr9,@r5 ! vertex->x = fr9
add #4, r5 ! r5 += 4 (points to vertex->y)
fmov.s fr5,@r5 ! vertex->x = fr5
add #4, r5 ! r5 = &vertex->y
! TRANSFORM Y
fmov.s @r5,fr3 ! fr4 = vertex->y
fmov fr11,fr5 ! fr4 = VIEWPORT_Y_PLUS_HHEIGHT
fmov.s @r5,fr4 ! fr4 = vertex->y
fmov fr11,fr5 ! fr5 = VIEWPORT_Y_PLUS_HHEIGHT
fmul fr9,fr4 ! fr4 = VIEWPORT_HHEIGHT * vertex->y
fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (Y * F * hheight) + y_plus_hheight
fmov.s fr9,@r5 ! vertex->y = fr9
add #4, r5 ! r5 += 4 (points to vertex->z)
fmov.s fr5,@r5 ! vertex->y = fr5
add #4, r5 ! r5 = &vertex->z
! ASSIGN Z
! fmov.s @r5,fr0 ! vertex->z = fr0
! add #24, r5 ! r5 += 24 (points to next vertex)
fmov.s fr0,@r5 ! vertex->z = fr0
add #20, r5 ! r5 += 20 (points to start of next vertex)
.endm
VP_ZSHIFT:
.float 1.0001

View File

@ -31,6 +31,7 @@ static void InitGLState(void) {
void Gfx_Create(void) {
if (!Gfx.Created) glKosInit();
Gfx_SetViewport(0, 0, Game.Width, Game.Height);
InitGLState();