gp2x->common menu migration finished, gp2x now only uses input fwk
[libpicofe.git] / common / emu.c
index 7aac10b..542abf5 100644 (file)
@@ -15,7 +15,6 @@
 #include "fonts.h"\r
 #include "lprintf.h"\r
 #include "config.h"\r
-#include "common.h"\r
 #include "plat.h"\r
 \r
 #include <pico/pico_int.h>\r
 #include <zlib/zlib.h>\r
 \r
 \r
+void *g_screen_ptr;\r
+\r
+#if !SCREEN_SIZE_FIXED\r
+int g_screen_width  = SCREEN_WIDTH;\r
+int g_screen_height = SCREEN_HEIGHT;\r
+#endif\r
+\r
 char *PicoConfigFile = "config.cfg";\r
 currentConfig_t currentConfig, defaultConfig;\r
 char noticeMsg[64] = { 0, };\r
 int state_slot = 0;\r
 int config_slot = 0, config_slot_current = 0;\r
-int kb_combo_keys = 0, kb_combo_acts = 0;      // keys and actions which need button combos\r
 int pico_inp_mode = 0;\r
 int engineState = PGS_Menu;\r
 \r
@@ -122,9 +127,9 @@ int emu_findBios(int region, char **bios_file)
                if (bios_file) *bios_file = bios_path;\r
                return 1;\r
        } else {\r
-               sprintf(menuErrorMsg, "no %s BIOS files found, read docs",\r
+               sprintf(bios_path, "no %s BIOS files found, read docs",\r
                        region != 4 ? (region == 8 ? "EU" : "JAP") : "USA");\r
-               lprintf("%s\n", menuErrorMsg);\r
+               me_update_msg(bios_path);\r
                return 0;\r
        }\r
 }\r
@@ -300,7 +305,7 @@ int emu_ReloadRom(char *rom_fname)
 \r
        // detect wrong extensions\r
        if (!strcmp(ext, ".srm") || !strcmp(ext, "s.gz") || !strcmp(ext, ".mds")) { // s.gz ~ .mds.gz\r
-               sprintf(menuErrorMsg, "Not a ROM/CD selected.");\r
+               me_update_msg("Not a ROM/CD selected.");\r
                return 0;\r
        }\r
 \r
@@ -317,32 +322,32 @@ int emu_ReloadRom(char *rom_fname)
                int dummy;\r
                FILE *movie_file = fopen(rom_fname, "rb");\r
                if(!movie_file) {\r
-                       sprintf(menuErrorMsg, "Failed to open movie.");\r
+                       me_update_msg("Failed to open movie.");\r
                        return 0;\r
                }\r
                fseek(movie_file, 0, SEEK_END);\r
                movie_size = ftell(movie_file);\r
                fseek(movie_file, 0, SEEK_SET);\r
                if(movie_size < 64+3) {\r
-                       sprintf(menuErrorMsg, "Invalid GMV file.");\r
+                       me_update_msg("Invalid GMV file.");\r
                        fclose(movie_file);\r
                        return 0;\r
                }\r
                movie_data = malloc(movie_size);\r
                if(movie_data == NULL) {\r
-                       sprintf(menuErrorMsg, "low memory.");\r
+                       me_update_msg("low memory.");\r
                        fclose(movie_file);\r
                        return 0;\r
                }\r
                fread(movie_data, 1, movie_size, movie_file);\r
                fclose(movie_file);\r
                if (strncmp((char *)movie_data, "Gens Movie TEST", 15) != 0) {\r
-                       sprintf(menuErrorMsg, "Invalid GMV file.");\r
+                       me_update_msg("Invalid GMV file.");\r
                        return 0;\r
                }\r
                dummy = try_rfn_cut(rom_fname) || try_rfn_cut(rom_fname);\r
                if (!dummy) {\r
-                       sprintf(menuErrorMsg, "Could't find a ROM for movie.");\r
+                       me_update_msg("Could't find a ROM for movie.");\r
                        return 0;\r
                }\r
                get_ext(rom_fname, ext);\r
@@ -354,7 +359,7 @@ int emu_ReloadRom(char *rom_fname)
                PicoPatchLoad(rom_fname);\r
                dummy = try_rfn_cut(rom_fname) || try_rfn_cut(rom_fname);\r
                if (!dummy) {\r
-                       sprintf(menuErrorMsg, "Could't find a ROM to patch.");\r
+                       me_update_msg("Could't find a ROM to patch.");\r
                        return 0;\r
                }\r
                get_ext(rom_fname, ext);\r
@@ -394,12 +399,12 @@ int emu_ReloadRom(char *rom_fname)
 \r
        rom = pm_open(used_rom_name);\r
        if (!rom) {\r
-               sprintf(menuErrorMsg, "Failed to open ROM/CD image");\r
+               me_update_msg("Failed to open ROM/CD image");\r
                goto fail;\r
        }\r
 \r
        if (cd_state < 0) {\r
-               sprintf(menuErrorMsg, "Invalid CD image");\r
+               me_update_msg("Invalid CD image");\r
                goto fail;\r
        }\r
 \r
@@ -409,10 +414,9 @@ int emu_ReloadRom(char *rom_fname)
        rom_loaded = 0;\r
 \r
        if ( (ret = PicoCartLoad(rom, &rom_data, &rom_size)) ) {\r
-               if      (ret == 2) sprintf(menuErrorMsg, "Out of memory");\r
-               else if (ret == 3) sprintf(menuErrorMsg, "Read failed");\r
-               else               sprintf(menuErrorMsg, "PicoCartLoad() failed.");\r
-               lprintf("%s\n", menuErrorMsg);\r
+               if      (ret == 2) me_update_msg("Out of memory");\r
+               else if (ret == 3) me_update_msg("Read failed");\r
+               else               me_update_msg("PicoCartLoad() failed.");\r
                goto fail2;\r
        }\r
        pm_close(rom);\r
@@ -422,7 +426,7 @@ int emu_ReloadRom(char *rom_fname)
        if (rom_size <= 0x200 || strncmp((char *)rom_data, "Pico", 4) == 0 ||\r
          ((*(unsigned char *)(rom_data+4)<<16)|(*(unsigned short *)(rom_data+6))) >= (int)rom_size) {\r
                if (rom_data) free(rom_data);\r
-               sprintf(menuErrorMsg, "Not a ROM selected.");\r
+               me_update_msg("Not a ROM selected.");\r
                goto fail2;\r
        }\r
 \r
@@ -436,7 +440,7 @@ int emu_ReloadRom(char *rom_fname)
 \r
        lprintf("PicoCartInsert(%p, %d);\n", rom_data, rom_size);\r
        if (PicoCartInsert(rom_data, rom_size)) {\r
-               sprintf(menuErrorMsg, "Failed to load ROM.");\r
+               me_update_msg("Failed to load ROM.");\r
                goto fail2;\r
        }\r
 \r
@@ -444,8 +448,7 @@ int emu_ReloadRom(char *rom_fname)
        if (cd_state != CIT_NOT_CD) {\r
                ret = Insert_CD(rom_fname, cd_state);\r
                if (ret != 0) {\r
-                       sprintf(menuErrorMsg, "Insert_CD() failed, invalid CD image?");\r
-                       lprintf("%s\n", menuErrorMsg);\r
+                       me_update_msg("Insert_CD() failed, invalid CD image?");\r
                        goto fail2;\r
                }\r
        }\r
@@ -627,13 +630,7 @@ int emu_ReadConfig(int game, int no_defaults)
        if (currentConfig.gamma < 10 || currentConfig.gamma > 300) currentConfig.gamma = 100;\r
 #endif\r
        if (currentConfig.volume < 0 || currentConfig.volume > 99) currentConfig.volume = 50;\r
-#ifdef __GP2X__\r
-       // if volume keys are unbound, bind them to volume control\r
-       if (!currentConfig.KeyBinds[23] && !currentConfig.KeyBinds[22]) {\r
-               currentConfig.KeyBinds[23] = 1<<29; // vol up\r
-               currentConfig.KeyBinds[22] = 1<<30; // vol down\r
-       }\r
-#endif\r
+\r
        if (ret == 0) config_slot_current = config_slot;\r
        return (ret == 0);\r
 }\r
@@ -679,101 +676,36 @@ void emu_writelrom(void)
 #endif\r
 }\r
 \r
-#ifndef UIQ3\r
-void emu_textOut8(int x, int y, const char *text)\r
-{\r
-       int i,l,len=strlen(text);\r
-       unsigned char *screen = (unsigned char *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;\r
-\r
-       /* always using built-in font */\r
-       for (i = 0; i < len; i++)\r
-       {\r
-               for (l=0;l<8;l++)\r
-               {\r
-                       unsigned char fd = fontdata8x8[((text[i])*8)+l];\r
-                       if (fd&0x80) screen[l*SCREEN_WIDTH+0]=0xf0;\r
-                       if (fd&0x40) screen[l*SCREEN_WIDTH+1]=0xf0;\r
-                       if (fd&0x20) screen[l*SCREEN_WIDTH+2]=0xf0;\r
-                       if (fd&0x10) screen[l*SCREEN_WIDTH+3]=0xf0;\r
-                       if (fd&0x08) screen[l*SCREEN_WIDTH+4]=0xf0;\r
-                       if (fd&0x04) screen[l*SCREEN_WIDTH+5]=0xf0;\r
-                       if (fd&0x02) screen[l*SCREEN_WIDTH+6]=0xf0;\r
-                       if (fd&0x01) screen[l*SCREEN_WIDTH+7]=0xf0;\r
-               }\r
-               screen += 8;\r
-       }\r
-}\r
-\r
-void emu_textOut16(int x, int y, const char *text)\r
-{\r
-       int i,l,len=strlen(text);\r
-       unsigned short *screen = (unsigned short *)SCREEN_BUFFER + x + y*SCREEN_WIDTH;\r
-\r
-       for (i = 0; i < len; i++)\r
-       {\r
-               for (l=0;l<8;l++)\r
-               {\r
-                       unsigned char fd = fontdata8x8[((text[i])*8)+l];\r
-                       if(fd&0x80) screen[l*SCREEN_WIDTH+0]=0xffff;\r
-                       if(fd&0x40) screen[l*SCREEN_WIDTH+1]=0xffff;\r
-                       if(fd&0x20) screen[l*SCREEN_WIDTH+2]=0xffff;\r
-                       if(fd&0x10) screen[l*SCREEN_WIDTH+3]=0xffff;\r
-                       if(fd&0x08) screen[l*SCREEN_WIDTH+4]=0xffff;\r
-                       if(fd&0x04) screen[l*SCREEN_WIDTH+5]=0xffff;\r
-                       if(fd&0x02) screen[l*SCREEN_WIDTH+6]=0xffff;\r
-                       if(fd&0x01) screen[l*SCREEN_WIDTH+7]=0xffff;\r
-               }\r
-               screen += 8;\r
-       }\r
-}\r
-#endif\r
-\r
-#ifdef PSP\r
-#define MAX_COMBO_KEY 23\r
-#else\r
-#define MAX_COMBO_KEY 31\r
-#endif\r
-\r
-void emu_findKeyBindCombos(void)\r
-{\r
-       int act, u;\r
-\r
-       // find out which keys and actions are combos\r
-       kb_combo_keys = kb_combo_acts = 0;\r
-       for (act = 0; act < 32; act++)\r
-       {\r
-               int keyc = 0, keyc2 = 0;\r
-               if (act == 16 || act == 17) continue; // player2 flag\r
-               if (act > 17)\r
-               {\r
-                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
-                               if (currentConfig.KeyBinds[u] & (1 << act)) keyc++;\r
-               }\r
-               else\r
-               {\r
-                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
-                               if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1\r
-                                       (currentConfig.KeyBinds[u] & (1 << act))) keyc++;\r
-                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
-                               if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2\r
-                                       (currentConfig.KeyBinds[u] & (1 << act))) keyc2++;\r
-                       if (keyc2 > keyc) keyc = keyc2;\r
-               }\r
-               if (keyc > 1)\r
-               {\r
-                       // loop again and mark those keys and actions as combo\r
-                       for (u = 0; u <= MAX_COMBO_KEY; u++)\r
-                       {\r
-                               if (currentConfig.KeyBinds[u] & (1 << act)) {\r
-                                       kb_combo_keys |= 1 << u;\r
-                                       kb_combo_acts |= 1 << act;\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       // printf("combo keys/acts: %08x %08x\n", kb_combo_keys, kb_combo_acts);\r
-}\r
+/* always using built-in font */\r
+\r
+#define mk_text_out(name, type, val) \\r
+void name(int x, int y, const char *text)                              \\r
+{                                                                      \\r
+       int i, l, len = strlen(text);                                   \\r
+       type *screen = (type *)g_screen_ptr + x + y * g_screen_width;   \\r
+                                                                       \\r
+       for (i = 0; i < len; i++, screen += 8)                          \\r
+       {                                                               \\r
+               for (l = 0; l < 8; l++)                                 \\r
+               {                                                       \\r
+                       unsigned char fd = fontdata8x8[text[i] * 8 + l];\\r
+                       type *s = screen + l * g_screen_width;          \\r
+                       if (fd&0x80) s[0] = val;                        \\r
+                       if (fd&0x40) s[1] = val;                        \\r
+                       if (fd&0x20) s[2] = val;                        \\r
+                       if (fd&0x10) s[3] = val;                        \\r
+                       if (fd&0x08) s[4] = val;                        \\r
+                       if (fd&0x04) s[5] = val;                        \\r
+                       if (fd&0x02) s[6] = val;                        \\r
+                       if (fd&0x01) s[7] = val;                        \\r
+               }                                                       \\r
+       }                                                               \\r
+}\r
+\r
+mk_text_out(emu_textOut8, unsigned char, 0xf0)\r
+mk_text_out(emu_textOut16, unsigned short, 0xffff)\r
+\r
+#undef mk_text_out\r
 \r
 \r
 void emu_updateMovie(void)\r