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:
|
.TRANSFORM_QUAD:
|
||||||
mov.l CMD_COL_VERT, r1 ! r1 = GPU VERT command
|
mov.l CMD_COL_VERT, r1 ! r1 = GPU VERT command
|
||||||
|
|
||||||
! TRANSFORM VERTEX 1
|
LoadColouredVertex
|
||||||
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
|
|
||||||
ProcessVertex1
|
ProcessVertex1
|
||||||
|
|
||||||
! TRANSFORM VERTEX 2
|
LoadColouredVertex
|
||||||
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
|
|
||||||
ProcessVertex2
|
ProcessVertex2
|
||||||
|
|
||||||
! TRANSFORM VERTEX 3
|
LoadColouredVertex
|
||||||
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
|
|
||||||
ProcessVertex3
|
ProcessVertex3
|
||||||
|
|
||||||
! TRANSFORM VERTEX 4
|
LoadColouredVertex
|
||||||
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
|
|
||||||
ProcessVertex4 CMD_COL_EOS
|
ProcessVertex4 CMD_COL_EOS
|
||||||
|
|
||||||
! CLIPFLAGS TESTING
|
! CLIPFLAGS TESTING
|
||||||
@ -118,20 +78,16 @@ CMD_COL_EOS: .long 0xf0000000
|
|||||||
|
|
||||||
.global _VP_COL_HWIDTH
|
.global _VP_COL_HWIDTH
|
||||||
.type _VP_COL_HWIDTH,%object
|
.type _VP_COL_HWIDTH,%object
|
||||||
.size _VP_COL_HWIDTH,4
|
|
||||||
_VP_COL_HWIDTH: .long 0
|
_VP_COL_HWIDTH: .long 0
|
||||||
|
|
||||||
.global _VP_COL_HHEIGHT
|
.global _VP_COL_HHEIGHT
|
||||||
.type _VP_COL_HHEIGHT,%object
|
.type _VP_COL_HHEIGHT,%object
|
||||||
.size _VP_COL_HHEIGHT,4
|
|
||||||
_VP_COL_HHEIGHT: .long 0
|
_VP_COL_HHEIGHT: .long 0
|
||||||
|
|
||||||
.global _VP_COL_X_PLUS_HWIDTH
|
.global _VP_COL_X_PLUS_HWIDTH
|
||||||
.type _VP_COL_X_PLUS_HWIDTH,%object
|
.type _VP_COL_X_PLUS_HWIDTH,%object
|
||||||
.size _VP_COL_X_PLUS_HWIDTH,4
|
|
||||||
_VP_COL_X_PLUS_HWIDTH: .long 0
|
_VP_COL_X_PLUS_HWIDTH: .long 0
|
||||||
|
|
||||||
.global _VP_COL_Y_PLUS_HHEIGHT
|
.global _VP_COL_Y_PLUS_HHEIGHT
|
||||||
.type _VP_COL_Y_PLUS_HHEIGHT,%object
|
.type _VP_COL_Y_PLUS_HHEIGHT,%object
|
||||||
.size _VP_COL_Y_PLUS_HHEIGHT,4
|
|
||||||
_VP_COL_Y_PLUS_HHEIGHT: .long 0
|
_VP_COL_Y_PLUS_HHEIGHT: .long 0
|
@ -36,64 +36,16 @@ _DrawTexturedQuads:
|
|||||||
.TRANSFORM_QUAD:
|
.TRANSFORM_QUAD:
|
||||||
mov.l CMD_TEX_VERT, r1 ! r1 = GPU VERT command
|
mov.l CMD_TEX_VERT, r1 ! r1 = GPU VERT command
|
||||||
|
|
||||||
! TRANSFORM VERTEX 1
|
LoadTexturedVertex
|
||||||
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
|
|
||||||
ProcessVertex1
|
ProcessVertex1
|
||||||
|
|
||||||
! TRANSFORM VERTEX 2
|
LoadTexturedVertex
|
||||||
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
|
|
||||||
ProcessVertex2
|
ProcessVertex2
|
||||||
|
|
||||||
! TRANSFORM VERTEX 3
|
LoadTexturedVertex
|
||||||
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
|
|
||||||
ProcessVertex3
|
ProcessVertex3
|
||||||
|
|
||||||
! TRANSFORM VERTEX 4
|
LoadTexturedVertex
|
||||||
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
|
|
||||||
ProcessVertex4 CMD_TEX_EOS
|
ProcessVertex4 CMD_TEX_EOS
|
||||||
|
|
||||||
! CLIPFLAGS TESTING
|
! CLIPFLAGS TESTING
|
||||||
@ -124,20 +76,16 @@ CMD_TEX_EOS: .long 0xf0000000
|
|||||||
|
|
||||||
.global _VP_TEX_HWIDTH
|
.global _VP_TEX_HWIDTH
|
||||||
.type _VP_TEX_HWIDTH,%object
|
.type _VP_TEX_HWIDTH,%object
|
||||||
.size _VP_TEX_HWIDTH,4
|
|
||||||
_VP_TEX_HWIDTH: .long 0
|
_VP_TEX_HWIDTH: .long 0
|
||||||
|
|
||||||
.global _VP_TEX_HHEIGHT
|
.global _VP_TEX_HHEIGHT
|
||||||
.type _VP_TEX_HHEIGHT,%object
|
.type _VP_TEX_HHEIGHT,%object
|
||||||
.size _VP_TEX_HHEIGHT,4
|
|
||||||
_VP_TEX_HHEIGHT: .long 0
|
_VP_TEX_HHEIGHT: .long 0
|
||||||
|
|
||||||
.global _VP_TEX_X_PLUS_HWIDTH
|
.global _VP_TEX_X_PLUS_HWIDTH
|
||||||
.type _VP_TEX_X_PLUS_HWIDTH,%object
|
.type _VP_TEX_X_PLUS_HWIDTH,%object
|
||||||
.size _VP_TEX_X_PLUS_HWIDTH,4
|
|
||||||
_VP_TEX_X_PLUS_HWIDTH: .long 0
|
_VP_TEX_X_PLUS_HWIDTH: .long 0
|
||||||
|
|
||||||
.global _VP_TEX_Y_PLUS_HHEIGHT
|
.global _VP_TEX_Y_PLUS_HHEIGHT
|
||||||
.type _VP_TEX_Y_PLUS_HHEIGHT,%object
|
.type _VP_TEX_Y_PLUS_HHEIGHT,%object
|
||||||
.size _VP_TEX_Y_PLUS_HHEIGHT,4
|
|
||||||
_VP_TEX_Y_PLUS_HHEIGHT: .long 0
|
_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 =================
|
! ========================= VERTEX OUTPUT =================
|
||||||
! =========================================================
|
! =========================================================
|
||||||
@ -96,10 +133,10 @@
|
|||||||
|
|
||||||
.macro ViewportTransformVertex
|
.macro ViewportTransformVertex
|
||||||
! INVERSE W CALCULATION
|
! INVERSE W CALCULATION
|
||||||
add #28, r5 ! r5 = &vertex[0].w
|
add #28, r5 ! r5 = &vertex->w
|
||||||
fmov.s @r5+,fr0 ! fr0 = vertex->w
|
fmov.s @r5,fr0 ! fr0 = vertex->w
|
||||||
fmul fr0,fr0 ! fr0 = fr0 * fr0
|
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
|
fsrra fr0 ! fr0 = 1 / sqrt(fr0) -> 1 / vertex->w
|
||||||
|
|
||||||
! TRANSFORM X
|
! TRANSFORM X
|
||||||
@ -107,22 +144,18 @@
|
|||||||
fmov fr10,fr5 ! fr5 = VIEWPORT_X_PLUS_HWIDTH
|
fmov fr10,fr5 ! fr5 = VIEWPORT_X_PLUS_HWIDTH
|
||||||
fmul fr8,fr4 ! fr4 = VIEWPORT_HWIDTH * vertex->x
|
fmul fr8,fr4 ! fr4 = VIEWPORT_HWIDTH * vertex->x
|
||||||
fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (X * F * hwidth) + x_plus_hwidth
|
fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (X * F * hwidth) + x_plus_hwidth
|
||||||
fmov.s fr9,@r5 ! vertex->x = fr9
|
fmov.s fr5,@r5 ! vertex->x = fr5
|
||||||
add #4, r5 ! r5 += 4 (points to vertex->y)
|
add #4, r5 ! r5 = &vertex->y
|
||||||
|
|
||||||
! TRANSFORM Y
|
! TRANSFORM Y
|
||||||
fmov.s @r5,fr3 ! fr4 = vertex->y
|
fmov.s @r5,fr4 ! fr4 = vertex->y
|
||||||
fmov fr11,fr5 ! fr4 = VIEWPORT_Y_PLUS_HHEIGHT
|
fmov fr11,fr5 ! fr5 = VIEWPORT_Y_PLUS_HHEIGHT
|
||||||
fmul fr9,fr4 ! fr4 = VIEWPORT_HHEIGHT * vertex->y
|
fmul fr9,fr4 ! fr4 = VIEWPORT_HHEIGHT * vertex->y
|
||||||
fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (Y * F * hheight) + y_plus_hheight
|
fmac fr0,fr4,fr5 ! fr5 = fr0 * fr4 + fr5 -- (Y * F * hheight) + y_plus_hheight
|
||||||
fmov.s fr9,@r5 ! vertex->y = fr9
|
fmov.s fr5,@r5 ! vertex->y = fr5
|
||||||
add #4, r5 ! r5 += 4 (points to vertex->z)
|
add #4, r5 ! r5 = &vertex->z
|
||||||
|
|
||||||
! ASSIGN Z
|
! ASSIGN Z
|
||||||
! fmov.s @r5,fr0 ! vertex->z = fr0
|
fmov.s fr0,@r5 ! vertex->z = fr0
|
||||||
! add #24, r5 ! r5 += 24 (points to next vertex)
|
add #20, r5 ! r5 += 20 (points to start of next vertex)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
||||||
VP_ZSHIFT:
|
|
||||||
.float 1.0001
|
|
@ -31,6 +31,7 @@ static void InitGLState(void) {
|
|||||||
|
|
||||||
void Gfx_Create(void) {
|
void Gfx_Create(void) {
|
||||||
if (!Gfx.Created) glKosInit();
|
if (!Gfx.Created) glKosInit();
|
||||||
|
|
||||||
Gfx_SetViewport(0, 0, Game.Width, Game.Height);
|
Gfx_SetViewport(0, 0, Game.Width, Game.Height);
|
||||||
InitGLState();
|
InitGLState();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user