diff --git a/src/platform/32x/32x.h b/src/platform/32x/32x.h index e30246b..3ae7739 100644 --- a/src/platform/32x/32x.h +++ b/src/platform/32x/32x.h @@ -151,4 +151,8 @@ extern "C" void CacheClearLine(void* ptr); } +#define CacheClear()\ + CacheControl(0);\ + CacheControl(SH2_CCTL_CP | SH2_CCTL_CE); + #endif diff --git a/src/platform/32x/asm/common.i b/src/platform/32x/asm/common.i index cc2e549..57c9698 100644 --- a/src/platform/32x/asm/common.i +++ b/src/platform/32x/asm/common.i @@ -9,12 +9,6 @@ // int16 e10, e11, e12 // rotation // int16 e20, e21, e22 // rotation // int16 e03, e13, e23 // translation -// -// word [ N Z Z ] // rot -// [ Z N Z ] // rot -// [ Z Z N ] // rot -// [ Z Z Z ] // trans -// long [ NZ ZZ NZ ZZ NZ ZZ ] // row[0] rotation #define M00 0 diff --git a/src/platform/32x/asm/matrixSetIdentity.s b/src/platform/32x/asm/matrixSetIdentity.s index 936dc66..81c036b 100644 --- a/src/platform/32x/asm/matrixSetIdentity.s +++ b/src/platform/32x/asm/matrixSetIdentity.s @@ -5,6 +5,12 @@ SEG_MATH #define ZZ r1 #define NZ r2 +// word [ N Z Z ] // rot +// [ Z N Z ] // rot +// [ Z Z N ] // rot +// [ Z Z Z ] // trans +// long [ NZ ZZ NZ ZZ NZ ZZ ] + .align 4 .global _matrixSetIdentity_asm _matrixSetIdentity_asm: diff --git a/src/platform/32x/asm/rasterize.s b/src/platform/32x/asm/rasterize.s index e8365e5..c8a2bf6 100644 --- a/src/platform/32x/asm/rasterize.s +++ b/src/platform/32x/asm/rasterize.s @@ -44,6 +44,14 @@ var_fb: // write per but allow transparent write for byte & word .long 0x24020200 var_table: +/* 2k on-chip test + .long 0xC0000000 + 516 + 416 + 256 + 18 //_rasterizeS_asm + .long 0xC0000000 + 516 + 416 + 18 //_rasterizeF_asm + .long 0xC0000000 + 516 + 18 //_rasterizeFT_asm + .long 0xC0000000 + 516 + 18 //_rasterizeFT_asm + .long 0xC0000000 + 20 //_rasterizeGT_asm + .long 0xC0000000 + 20 //_rasterizeGT_asm +*/ .long _rasterizeS_asm .long _rasterizeF_asm .long _rasterizeFT_asm diff --git a/src/platform/32x/asm/rasterizeF.s b/src/platform/32x/asm/rasterizeF.s index 92aacf9..bc36e85 100644 --- a/src/platform/32x/asm/rasterizeF.s +++ b/src/platform/32x/asm/rasterizeF.s @@ -30,6 +30,9 @@ SEG_RASTER #define LMAP inv .align 4 +.global _rasterizeF_asm_start +_rasterizeF_asm_start: + .exit: // pop mov.l @sp+, r14 @@ -213,3 +216,7 @@ var_LMAP_ADDR: .long _gLightmap_base var_divTable: .long _divTable + +.align 2 +.global _rasterizeF_asm_end +_rasterizeF_asm_end: \ No newline at end of file diff --git a/src/platform/32x/asm/rasterizeFT.s b/src/platform/32x/asm/rasterizeFT.s index d147b0a..a7cc524 100644 --- a/src/platform/32x/asm/rasterizeFT.s +++ b/src/platform/32x/asm/rasterizeFT.s @@ -57,6 +57,9 @@ SP_R = 24 SP_SIZE = 28 .align 4 +.global _rasterizeFT_asm_start +_rasterizeFT_asm_start: + .exit: // pop add #SP_SIZE, sp @@ -317,3 +320,7 @@ var_divTable: .long _divTable var_gTile: .long _gTile + +.align 2 +.global _rasterizeFT_asm_end +_rasterizeFT_asm_end: diff --git a/src/platform/32x/asm/rasterizeGT.s b/src/platform/32x/asm/rasterizeGT.s index 0c92b35..aa34f8b 100644 --- a/src/platform/32x/asm/rasterizeGT.s +++ b/src/platform/32x/asm/rasterizeGT.s @@ -69,6 +69,10 @@ SP_R = 28 SP_SIZE = 32 .align 4 + +.global _rasterizeGT_asm_start +_rasterizeGT_asm_start: + .exit: // pop add #SP_SIZE, sp @@ -400,3 +404,7 @@ var_divTable: .long _divTable var_gTile: .long _gTile + +.align 2 +.global _rasterizeGT_asm_end +_rasterizeGT_asm_end: diff --git a/src/platform/32x/asm/rasterizeS.s b/src/platform/32x/asm/rasterizeS.s index 264e374..5ee61ba 100644 --- a/src/platform/32x/asm/rasterizeS.s +++ b/src/platform/32x/asm/rasterizeS.s @@ -29,6 +29,9 @@ SEG_RASTER #define ih inv .align 4 +.global _rasterizeS_asm_start +_rasterizeS_asm_start: + .exit: // pop mov.l @sp+, r14 @@ -188,3 +191,7 @@ var_LMAP_ADDR: .long _gLightmap_base var_divTable: .long _divTable + +.align 2 +.global _rasterizeS_asm_end +_rasterizeS_asm_end: \ No newline at end of file diff --git a/src/platform/32x/render.cpp b/src/platform/32x/render.cpp index d8fac29..767808f 100644 --- a/src/platform/32x/render.cpp +++ b/src/platform/32x/render.cpp @@ -685,6 +685,37 @@ void flush_c() return; gFacesBase = gFaces; +/* + CacheControl(0); + CacheControl(SH2_CCTL_CP | SH2_CCTL_CE | SH2_CCTL_TW); + + extern int32 rasterizeGT_asm_start; + extern int32 rasterizeGT_asm_end; + + int32 size = intptr_t(&rasterizeGT_asm_end) - intptr_t(&rasterizeGT_asm_start); + fast_memcpy((void*)(0xC0000000 + 0), &rasterizeGT_asm_start, size >> 2); // 516 + + extern int32 rasterizeFT_asm_start; + extern int32 rasterizeFT_asm_end; + + size = intptr_t(&rasterizeFT_asm_end) - intptr_t(&rasterizeFT_asm_start); + fast_memcpy((void*)(0xC0000000 + 516), &rasterizeFT_asm_start, size >> 2); // 416 + + extern int32 rasterizeF_asm_start; + extern int32 rasterizeF_asm_end; + + size = intptr_t(&rasterizeF_asm_end) - intptr_t(&rasterizeF_asm_start); + fast_memcpy((void*)(0xC0000000 + 516 + 416), &rasterizeF_asm_start, size >> 2); // 256 + + extern int32 rasterizeS_asm_start; + extern int32 rasterizeS_asm_end; + + size = intptr_t(&rasterizeS_asm_end) - intptr_t(&rasterizeS_asm_start); + fast_memcpy((void*)(0xC0000000 + 516 + 416 + 256), &rasterizeS_asm_start, size >> 2); // 224 + + //extern int32 fps; + //fps = size; +*/ PROFILE(CNT_FLUSH); @@ -753,6 +784,10 @@ void flush_c() } while (face); } +/* + CacheControl(0); + CacheControl(SH2_CCTL_CP | SH2_CCTL_CE); +*/ } #endif @@ -843,6 +878,18 @@ void renderInit() gFacesBase = gFaces; } +void renderFree() +{ +} + +void renderLevelInit() +{ +} + +void renderLevelFree() +{ +} + extern "C" X_NOINLINE void drawTriangle(uint32 flags, VertexLink* v) { VertexLink* v0 = v + 0;