185 lines
4.6 KiB
C
Raw Normal View History

2017-08-21 21:01:18 -03:00
#include <vram.h>
#include <gpulcd.h>
#include <types.h>
void LCD_SetBrightness(u32 screen, u32 brightness)
{
vu32 *lcd_reg;
if (screen & 1) {
lcd_reg = LCD_CFG(0xA40);
} else {
lcd_reg = LCD_CFG(0x240);
}
*lcd_reg = brightness & 0xFF;
return;
}
void LCD_Initialize(u32 brightness)
{
brightness &= 0xFF;
*LCD_CFG(0x014) = 0x00000001;
*LCD_CFG(0x00C) &= 0xFFFEFFFE;
*LCD_CFG(0x240) = brightness;
*LCD_CFG(0xA40) = brightness;
*LCD_CFG(0x244) = 0x1023E;
*LCD_CFG(0xA44) = 0x1023E;
}
void LCD_Deinitialize(void)
{
*LCD_CFG(0x244) = 0;
*LCD_CFG(0xA44) = 0;
*LCD_CFG(0x00C) = 0;
*LCD_CFG(0x014) = 0;
return;
}
void GPU_PSCFill(u32 start, u32 end, u32 fv)
{
u32 mp;
if (start > end) {
return;
}
start = GPU_ADDR(start);
end = GPU_ADDR(end);
mp = (start+end)/2;
*GPU_PSC0(PSC_SADDR) = start;
*GPU_PSC0(PSC_EADDR) = mp;
*GPU_PSC0(PSC_FILL) = fv;
*GPU_PSC1(PSC_SADDR) = mp;
*GPU_PSC1(PSC_EADDR) = end;
*GPU_PSC1(PSC_FILL) = fv;
*GPU_PSC0(PSC_CNT) = PSC_START | PSC_32BIT;
*GPU_PSC1(PSC_CNT) = PSC_START | PSC_32BIT;
while(!((*GPU_PSC0(PSC_CNT) & PSC_DONE) && (*GPU_PSC1(PSC_CNT) & PSC_DONE)));
return;
}
void GPU_SetFramebuffers(const u32 *framebuffers)
{
*GPU_PDC0(0x68) = framebuffers[0];
*GPU_PDC0(0x6C) = framebuffers[1];
*GPU_PDC0(0x94) = framebuffers[2];
*GPU_PDC0(0x98) = framebuffers[3];
*GPU_PDC1(0x68) = framebuffers[4];
*GPU_PDC1(0x6C) = framebuffers[5];
*GPU_PDC0(0x78) = 0;
*GPU_PDC1(0x78) = 0;
return;
}
void GPU_SetFramebufferMode(u32 screen, u32 mode)
{
u32 stride, cfg;
vu32 *fbcfg_reg, *fbstr_reg;
mode &= 7;
screen &= 1;
cfg = PDC_FIXSTRIP | mode;
if (screen) {
fbcfg_reg = GPU_PDC1(0x70);
fbstr_reg = GPU_PDC1(0x90);
} else {
fbcfg_reg = GPU_PDC0(0x70);
fbstr_reg = GPU_PDC0(0x90);
cfg |= PDC_MAINSCREEN;
}
switch(mode) {
case PDC_RGBA8:
stride = 960;
break;
case PDC_RGB24:
stride = 720;
break;
default:
stride = 480;
break;
}
*fbcfg_reg = cfg;
*fbstr_reg = stride;
return;
}
void GPU_Init(void)
{
LCD_Initialize(0x20);
if (*GPU_CNT != 0x1007F) {
*GPU_CNT = 0x1007F;
*GPU_PDC0(0x00) = 0x000001C2;
*GPU_PDC0(0x04) = 0x000000D1;
*GPU_PDC0(0x08) = 0x000001C1;
*GPU_PDC0(0x0C) = 0x000001C1;
*GPU_PDC0(0x10) = 0x00000000;
*GPU_PDC0(0x14) = 0x000000CF;
*GPU_PDC0(0x18) = 0x000000D1;
*GPU_PDC0(0x1C) = 0x01C501C1;
*GPU_PDC0(0x20) = 0x00010000;
*GPU_PDC0(0x24) = 0x0000019D;
*GPU_PDC0(0x28) = 0x00000002;
*GPU_PDC0(0x2C) = 0x00000192;
*GPU_PDC0(0x30) = 0x00000192;
*GPU_PDC0(0x34) = 0x00000192;
*GPU_PDC0(0x38) = 0x00000001;
*GPU_PDC0(0x3C) = 0x00000002;
*GPU_PDC0(0x40) = 0x01960192;
*GPU_PDC0(0x44) = 0x00000000;
*GPU_PDC0(0x48) = 0x00000000;
*GPU_PDC0(0x5C) = 0x00F00190;
*GPU_PDC0(0x60) = 0x01C100D1;
*GPU_PDC0(0x64) = 0x01920002;
*GPU_PDC0(0x68) = VRAM_START;
*GPU_PDC0(0x6C) = VRAM_START;
*GPU_PDC0(0x70) = 0x00080340;
*GPU_PDC0(0x74) = 0x00010501;
*GPU_PDC0(0x90) = 0x000003C0;
*GPU_PDC0(0x94) = VRAM_START;
*GPU_PDC0(0x98) = VRAM_START;
*GPU_PDC0(0x9C) = 0x00000000;
for (u32 i=0; i<256; i++)
*GPU_PDC0(0x84) = 0x10101 * i;
*GPU_PDC1(0x00) = 0x000001C2;
*GPU_PDC1(0x04) = 0x000000D1;
*GPU_PDC1(0x08) = 0x000001C1;
*GPU_PDC1(0x0C) = 0x000001C1;
*GPU_PDC1(0x10) = 0x000000CD;
*GPU_PDC1(0x14) = 0x000000CF;
*GPU_PDC1(0x18) = 0x000000D1;
*GPU_PDC1(0x1C) = 0x01C501C1;
*GPU_PDC1(0x20) = 0x00010000;
*GPU_PDC1(0x24) = 0x0000019D;
*GPU_PDC1(0x28) = 0x00000052;
*GPU_PDC1(0x2C) = 0x00000192;
*GPU_PDC1(0x30) = 0x00000192;
*GPU_PDC1(0x34) = 0x0000004F;
*GPU_PDC1(0x38) = 0x00000050;
*GPU_PDC1(0x3C) = 0x00000052;
*GPU_PDC1(0x40) = 0x01980194;
*GPU_PDC1(0x44) = 0x00000000;
*GPU_PDC1(0x48) = 0x00000011;
*GPU_PDC1(0x5C) = 0x00F00140;
*GPU_PDC1(0x60) = 0x01C100d1;
*GPU_PDC1(0x64) = 0x01920052;
*GPU_PDC1(0x68) = VRAM_START;
*GPU_PDC1(0x6C) = VRAM_START;
*GPU_PDC1(0x70) = 0x00080300;
*GPU_PDC1(0x74) = 0x00010501;
*GPU_PDC1(0x90) = 0x000003C0;
*GPU_PDC1(0x9C) = 0x00000000;
for (u32 i=0; i<256; i++)
*GPU_PDC1(0x84) = 0x10101 * i;
}
return;
}