📄 doublebuffering.c
字号:
// main and cache
#define __CACHE_INVALIDATE_SET(VALUE) asm( "CACHE_INVALIDATE_SET: "); asm( "push %R0"); asm( "ldi %0 , %%R0" : : "i" (VALUE) ); asm( "mvtc 0 , %CR5"); asm( "pop %R0");
#define __CACHE_INVALIDATE_CHECK() asm( "CACHE_INVALIDATE_CHECK:");asm( "mvfc 0 , %CR6"); asm( "and %R0, 0x00100000, %R0"); asm( "jnz CACHE_INVALIDATE_CHECK");
#define __CACHE_MODE_SET(VALUE) asm( "CACHE_MODE_SET: "); asm( "push %R0"); asm( "ldi %0 , %%R0" : : "i" (VALUE) ); asm( "mvtc 0 , %CR3"); asm( "pop %R0");
#define __CACHE_ACTIVE_SET(VALUE) asm( "CACHE_ACTIVE_SET: "); asm( "push %R0"); asm( "ldi %0 , %%R0" : : "i" (VALUE) ); asm( "mvtc 0 , %CR7"); asm( "pop %R0");
// CACHE MASTER COMMAND REGISTER
# define __CACHE_UNIT_DISABLE ( 0 << 11 )
# define __CACHE_UNIT_ENABLE ( 1 << 11 )
# define __CACHE_UNIT_NORMAL ( 0 << 0 )
# define __CACHE_UNIT_DELAY ( 1 << 0 )
// CACHE INVALIDATE REGISTER
# define __CACHE_INVALIDATE_DISABLE ( 0 << 0 )
# define __CACHE_INVALIDATE_ENABLE ( 1 << 0 )
// CACHE INVALIDATE REGISTER
# define __CACHE_WRITE_THROUGH ( 0 << 6 )
# define __CACHE_WRITE_BACK ( 1 << 6 )
int main( void )
{
asm("CACHE_CONFIGURATION_SET:");
__CACHE_INVALIDATE_SET(__CACHE_INVALIDATE_ENABLE)
__CACHE_INVALIDATE_CHECK()
__CACHE_MODE_SET(__CACHE_WRITE_BACK)
__CACHE_ACTIVE_SET(__CACHE_UNIT_ENABLE | __CACHE_UNIT_DELAY ) // process read_hit & miss at two cpuclk
VR0_memory_controller_reset();// FMEM/TMEM - memory controller reset
CRT_320x240_noninterlace(); // set screen mode 640*480
InitRenderingEngine_zy(); // Rendering engine reset
// select Render target => back-buffer. for double buffering...
*(unsigned short*)(0x300008c) = 0x0006; // dither mode : disable,render target : back-buffer
user();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -