\r
#include <stdio.h>\r
#include <stdlib.h>\r
+#include <stdarg.h>\r
#include <string.h>\r
#include <unistd.h>\r
#include <sys/mman.h>\r
\r
#include "gp2x.h"\r
#include "usbjoy.h"\r
-#include "asmutils.h"\r
+#include "../common/arm_utils.h"\r
\r
volatile unsigned short *gp2x_memregs;\r
//static\r
}\r
\r
\r
+void gp2x_video_flush_cache(void)\r
+{\r
+ // since we are using the mmu hack, we must flush the cache first\r
+ // (the params are most likely wrong, but they seem to work somehow)\r
+ //flushcache(addr, addr + 320*240*2, 0);\r
+ flushcache(gp2x_screen, (char *)gp2x_screen + 320*240*2, 0);\r
+}\r
+\r
+\r
void gp2x_memcpy_buffers(int buffers, void *data, int offset, int len)\r
{\r
- if (buffers & (1<<0)) memcpy((char *)gp2x_screens[0] + offset, data, len);\r
- if (buffers & (1<<1)) memcpy((char *)gp2x_screens[1] + offset, data, len);\r
- if (buffers & (1<<2)) memcpy((char *)gp2x_screens[2] + offset, data, len);\r
- if (buffers & (1<<3)) memcpy((char *)gp2x_screens[3] + offset, data, len);\r
+ char *dst;\r
+ if (buffers & (1<<0)) { dst = (char *)gp2x_screens[0] + offset; if (dst != data) memcpy(dst, data, len); }\r
+ if (buffers & (1<<1)) { dst = (char *)gp2x_screens[1] + offset; if (dst != data) memcpy(dst, data, len); }\r
+ if (buffers & (1<<2)) { dst = (char *)gp2x_screens[2] + offset; if (dst != data) memcpy(dst, data, len); }\r
+ if (buffers & (1<<3)) { dst = (char *)gp2x_screens[3] + offset; if (dst != data) memcpy(dst, data, len); }\r
}\r
\r
\r
\r
void gp2x_pd_clone_buffer2(void)\r
{\r
- memcpy(gp2x_screen, gp2x_screens[2], 320*240);\r
- memset(gp2x_screen, 0xe0, 320*8);\r
- memset(gp2x_screen + 320*232, 0xe0, 320*8);\r
+ memcpy(gp2x_screen, gp2x_screens[2], 320*240*2);\r
}\r
\r
\r
if (sounddev == -1)\r
printf("open(\"/dev/dsp\") failed with %i\n", errno);\r
\r
- ioctl(sounddev, SNDCTL_DSP_SPEED, &rate);\r
ioctl(sounddev, SNDCTL_DSP_SETFMT, &bits);\r
+ ioctl(sounddev, SNDCTL_DSP_SPEED, &rate);\r
ioctl(sounddev, SNDCTL_DSP_STEREO, &stereo);\r
// calculate buffer size\r
buffers = 16;\r
while ((bsize>>=1)) frag++;\r
frag |= buffers<<16; // 16 buffers\r
ioctl(sounddev, SNDCTL_DSP_SETFRAGMENT, &frag);\r
+ usleep(192*1024);\r
+\r
printf("gp2x_set_sound: %i/%ibit/%s, %i buffers of %i bytes\n",\r
rate, bits, stereo?"stereo":"mono", frag>>16, 1<<(frag&0xffff));\r
\r
s_oldrate = rate; s_oldbits = bits; s_oldstereo = stereo;\r
- usleep(100000);\r
}\r
\r
\r
}\r
}\r
\r
+/* lprintf */\r
+void lprintf(const char *fmt, ...)\r
+{\r
+ va_list vl;\r
+\r
+ va_start(vl, fmt);\r
+ vprintf(fmt, vl);\r
+ va_end(vl);\r
+}\r
\r