screen ptr/size unification, major cleanups
[libpicofe.git] / gp2x / emu.c
index f5052db..237105a 100644 (file)
@@ -17,7 +17,6 @@
 #include "emu.h"\r
 #include "gp2x.h"\r
 #include "menu.h"\r
-#include "../linux/usbjoy.h"\r
 #include "../common/arm_utils.h"\r
 #include "../common/fonts.h"\r
 #include "../common/emu.h"\r
@@ -167,23 +166,24 @@ void emu_prepareDefaultConfig(void)
 void osd_text(int x, int y, const char *text)\r
 {\r
        int len = strlen(text)*8;\r
+       int *p, i, h, offs;\r
 \r
        if ((PicoOpt&0x10)||!(currentConfig.EmuOpt&0x80)) {\r
-               int *p, i, h;\r
-               x &= ~3; // align x\r
                len = (len+3) >> 2;\r
                for (h = 0; h < 8; h++) {\r
-                       p = (int *) ((unsigned char *) gp2x_screen+x+320*(y+h));\r
-                       for (i = len; i; i--, p++) *p = 0xe0e0e0e0;\r
+                       offs = (x + g_screen_width * (y+h)) & ~3;\r
+                       p = (int *) ((char *)g_screen_ptr + offs);\r
+                       for (i = len; i; i--, p++)\r
+                               *p = 0xe0e0e0e0;\r
                }\r
                emu_textOut8(x, y, text);\r
        } else {\r
-               int *p, i, h;\r
-               x &= ~1; // align x\r
                len = (len+1) >> 1;\r
                for (h = 0; h < 8; h++) {\r
-                       p = (int *) ((unsigned short *) gp2x_screen+x+320*(y+h));\r
-                       for (i = len; i; i--, p++) *p = (*p>>2)&0x39e7;\r
+                       offs = (x + g_screen_width * (y+h)) & ~1;\r
+                       p = (int *) ((short *)g_screen_ptr + offs);\r
+                       for (i = len; i; i--, p++)\r
+                               *p = (*p >> 2) & 0x39e7;\r
                }\r
                emu_textOut16(x, y, text);\r
        }\r
@@ -200,15 +200,15 @@ static void draw_cd_leds(void)
                // 8-bit modes\r
                unsigned int col_g = (old_reg & 2) ? 0xc0c0c0c0 : 0xe0e0e0e0;\r
                unsigned int col_r = (old_reg & 1) ? 0xd0d0d0d0 : 0xe0e0e0e0;\r
-               *(unsigned int *)((char *)gp2x_screen + 320*2+ 4) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*3+ 4) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*4+ 4) = col_g;\r
-               *(unsigned int *)((char *)gp2x_screen + 320*2+12) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*3+12) =\r
-               *(unsigned int *)((char *)gp2x_screen + 320*4+12) = col_r;\r
+               *(unsigned int *)((char *)g_screen_ptr + 320*2+ 4) =\r
+               *(unsigned int *)((char *)g_screen_ptr + 320*3+ 4) =\r
+               *(unsigned int *)((char *)g_screen_ptr + 320*4+ 4) = col_g;\r
+               *(unsigned int *)((char *)g_screen_ptr + 320*2+12) =\r
+               *(unsigned int *)((char *)g_screen_ptr + 320*3+12) =\r
+               *(unsigned int *)((char *)g_screen_ptr + 320*4+12) = col_r;\r
        } else {\r
                // 16-bit modes\r
-               unsigned int *p = (unsigned int *)((short *)gp2x_screen + 320*2+4);\r
+               unsigned int *p = (unsigned int *)((short *)g_screen_ptr + 320*2+4);\r
                unsigned int col_g = (old_reg & 2) ? 0x06000600 : 0;\r
                unsigned int col_r = (old_reg & 1) ? 0xc000c000 : 0;\r
                *p++ = col_g; *p++ = col_g; p+=2; *p++ = col_r; *p++ = col_r; p += 320/2 - 12/2;\r
@@ -219,7 +219,7 @@ static void draw_cd_leds(void)
 \r
 static void draw_pico_ptr(void)\r
 {\r
-       unsigned short *p = (unsigned short *)gp2x_screen;\r
+       unsigned short *p = (unsigned short *)g_screen_ptr;\r
 \r
        // only if pen enabled and for 16bit modes\r
        if (pico_inp_mode == 0 || (PicoOpt&0x10) || !(currentConfig.EmuOpt&0x80)) return;\r
@@ -239,7 +239,7 @@ static void draw_pico_ptr(void)
 static int EmuScanBegin16(unsigned int num)\r
 {\r
        if (!(Pico.video.reg[1]&8)) num += 8;\r
-       DrawLineDest = (unsigned short *) gp2x_screen + 320 * num;\r
+       DrawLineDest = (unsigned short *) g_screen_ptr + g_screen_width * num;\r
 \r
        return 0;\r
 }\r
@@ -247,7 +247,7 @@ static int EmuScanBegin16(unsigned int num)
 static int EmuScanBegin8(unsigned int num)\r
 {\r
        if (!(Pico.video.reg[1]&8)) num += 8;\r
-       DrawLineDest = (unsigned char *)  gp2x_screen + 320 * num;\r
+       DrawLineDest = (unsigned char *)  g_screen_ptr + g_screen_width * num;\r
 \r
        return 0;\r
 }\r
@@ -272,7 +272,7 @@ static void blit(const char *fps, const char *notice)
                if (PicoRead16Hook == PicoSVPRead16)\r
                        memset32((int *)(PicoDraw2FB+328*8+328*223), 0xe0e0e0e0, 328);\r
                // do actual copy\r
-               vidCpyM2((unsigned char *)gp2x_screen+320*8, PicoDraw2FB+328*8);\r
+               vidCpyM2((unsigned char *)g_screen_ptr+320*8, PicoDraw2FB+328*8);\r
        }\r
        else if (!(emu_opt&0x80))\r
        {\r
@@ -326,12 +326,12 @@ static void blit(const char *fps, const char *notice)
        if (!(PicoOpt&0x10)) {\r
                if (!(Pico.video.reg[1]&8)) {\r
                        if (currentConfig.EmuOpt&0x80) {\r
-                               DrawLineDest = (unsigned short *) gp2x_screen + 320*8;\r
+                               DrawLineDest = (unsigned short *) g_screen_ptr + 320*8;\r
                        } else {\r
-                               DrawLineDest = (unsigned char  *) gp2x_screen + 320*8;\r
+                               DrawLineDest = (unsigned char  *) g_screen_ptr + 320*8;\r
                        }\r
                } else {\r
-                       DrawLineDest = gp2x_screen;\r
+                       DrawLineDest = g_screen_ptr;\r
                }\r
        }\r
 }\r
@@ -389,12 +389,12 @@ static void emu_msg_cb(const char *msg)
                // 8-bit renderers\r
                gp2x_memset_all_buffers(320*232, 0xe0, 320*8);\r
                osd_text(4, 232, msg);\r
-               gp2x_memcpy_all_buffers((char *)gp2x_screen+320*232, 320*232, 320*8);\r
+               gp2x_memcpy_all_buffers((char *)g_screen_ptr+320*232, 320*232, 320*8);\r
        } else {\r
                // 16bit accurate renderer\r
                gp2x_memset_all_buffers(320*232*2, 0, 320*8*2);\r
                osd_text(4, 232, msg);\r
-               gp2x_memcpy_all_buffers((char *)gp2x_screen+320*232*2, 320*232*2, 320*8*2);\r
+               gp2x_memcpy_all_buffers((char *)g_screen_ptr+320*232*2, 320*232*2, 320*8*2);\r
        }\r
        gettimeofday(&noticeMsgTime, 0);\r
        noticeMsgTime.tv_sec -= 2;\r
@@ -521,7 +521,7 @@ static void RunEvents(unsigned int which)
                if (do_it) {\r
                        osd_text(4, 232, (which & 0x1000) ? "LOADING GAME" : "SAVING GAME");\r
                        PicoStateProgressCB = emu_state_cb;\r
-                       gp2x_memcpy_all_buffers(gp2x_screen, 0, 320*240*2);\r
+                       gp2x_memcpy_all_buffers(g_screen_ptr, 0, 320*240*2);\r
                        emu_SaveLoadGame((which & 0x1000) >> 12, 0);\r
                        PicoStateProgressCB = NULL;\r
                }\r
@@ -567,14 +567,10 @@ static void updateKeys(void)
 {\r
        unsigned int keys, keys2, allActions[2] = { 0, 0 }, events;\r
        static unsigned int prevEvents = 0;\r
-       int joy, i;\r
 \r
        keys = gp2x_joystick_read(0);\r
-       if (keys & GP2X_SELECT) {\r
+       if (keys & GP2X_SELECT)\r
                engineState = select_exits ? PGS_Quit : PGS_Menu;\r
-               // wait until select is released, so menu would not resume game\r
-               while (gp2x_joystick_read(1) & GP2X_SELECT) usleep(50*1000);\r
-       }\r
 \r
        keys &= CONFIGURABLE_KEYS;\r
        keys2 = keys;\r
@@ -612,22 +608,6 @@ static void updateKeys(void)
        }\r
 #endif\r
 \r
-       // add joy inputs\r
-       if (num_of_joys > 0)\r
-       {\r
-               usbjoy_update();\r
-               for (joy = 0; joy < num_of_joys; joy++) {\r
-                       int btns = usbjoy_check2(joy);\r
-                       for (i = 0; i < 32; i++) {\r
-                               if (btns & (1 << i)) {\r
-                                       int acts = currentConfig.JoyBinds[joy][i];\r
-                                       int pl = (acts >> 16) & 1;\r
-                                       allActions[pl] |= acts;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
        PicoPad[0] = allActions[0] & 0xfff;\r
        PicoPad[1] = allActions[1] & 0xfff;\r
 \r
@@ -736,7 +716,7 @@ void emu_forcedFrame(int opts)
                clearArea(1);\r
        } else  vidCpyM2 = vidCpyM2_40col;\r
 \r
-       vidCpyM2((unsigned char *)gp2x_screen+320*8, PicoDraw2FB+328*8);\r
+       vidCpyM2((unsigned char *)g_screen_ptr+320*8, PicoDraw2FB+328*8);\r
        vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
        gp2x_video_setpalette(localPal, 0x40);\r
 */\r
@@ -799,11 +779,11 @@ static void tga_dump(void)
 #define CONV(X) (((X>>1)&0x7fe0)|(X&0x1f)) // 555?\r
 \r
        for (i = 0; i < 320*240; i++)\r
-               if(oldscr[i] != CONV(((unsigned short *)gp2x_screen)[i])) break;\r
+               if(oldscr[i] != CONV(((unsigned short *)g_screen_ptr)[i])) break;\r
        if (i < 320*240)\r
        {\r
                for (i = 0; i < 320*240; i++)\r
-                       oldscr[i] = CONV(((unsigned short *)gp2x_screen)[i]);\r
+                       oldscr[i] = CONV(((unsigned short *)g_screen_ptr)[i]);\r
                sprintf(name, "%05i.tga", Pico.m.frame_count);\r
                f = fopen(name, "wb");\r
                if (!f) { printf("!f\n"); exit(1); }\r