mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-12 09:06:55 -04:00
Dreamcast: Unify assembly
This commit is contained in:
parent
9a69e3fac6
commit
29859ca9ab
@ -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
|
@ -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
|
@ -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
|
@ -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();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user