X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=common%2Fwiz_video.c;h=657e4af6d8a0c25d613c131fd2d669ee4489d6f8;hp=999fc062981401a812eafa363dcf344ce8e03f2e;hb=7000b522095b21ba16784d02997835d74ecc3375;hpb=6ca083930098ee075c8f61cf2c04d616349959c3 diff --git a/common/wiz_video.c b/common/wiz_video.c index 999fc06..657e4af 100644 --- a/common/wiz_video.c +++ b/common/wiz_video.c @@ -11,7 +11,7 @@ #include "warm.h" static volatile unsigned short *memregs; -static volatile unsigned long *memregl; +static volatile unsigned int *memregl; int memdev = -1; #define FB_BUF_COUNT 4 @@ -84,12 +84,12 @@ static int vout_gp2x_init(int no_dblbuf) fprintf(stderr, "could not make fb buferable.\n"); } - printf(" %p -> %08x\n", gp2x_screens[0], fb_paddr[0]); + // printf(" %p -> %08x\n", gp2x_screens[0], fb_paddr[0]); for (i = 1; i < FB_BUF_COUNT; i++) { fb_paddr[i] = fb_paddr[i-1] + 320*240*2; gp2x_screens[i] = (char *)gp2x_screens[i-1] + 320*240*2; - printf(" %p -> %08x\n", gp2x_screens[i], fb_paddr[i]); + // printf(" %p -> %08x\n", gp2x_screens[i], fb_paddr[i]); } fb_work_buf = 0; g_screen_ptr = gp2x_screens[0]; @@ -141,7 +141,14 @@ static void vout_gp2x_set_mode(int bpp, int rot) memregl[0x4058>>2] = r; } -static void vout_gp2x_set_palette(unsigned int *pal, int len) +static void vout_gp2x_set_palette16(unsigned short *pal, int len) +{ + int i; + for (i = 0; i < len; i++) + memregl[0x4070>>2] = (i << 24) | pal[i]; +} + +static void vout_gp2x_set_palette32(unsigned int *pal, int len) { /* pollux palette is 16bpp only.. */ int i; @@ -155,11 +162,21 @@ static void vout_gp2x_set_palette(unsigned int *pal, int len) void vout_gp2x_finish(void) { - memregl[0x406C>>2] = fb_paddr[0]; - memregl[0x4058>>2] |= 0x10; - close(fbdev); + if (memregl != NULL) { + if (memregl[0x4058>>2] & 0x10) + usleep(100000); + if (memregl[0x4058>>2] & 0x10) + printf("MLCCONTROL1 dirty? %08x %08x\n", + memregl[0x406C>>2], memregl[0x4058>>2]); + + memregl[0x406C>>2] = fb_paddr[0]; + memregl[0x4058>>2] |= 0x10; + munmap((void *)memregs, 0x20000); + memregs = NULL; + memregl = NULL; + } - munmap((void *)memregs, 0x20000); + close(fbdev); close(memdev); warm_finish();