screen ptr/size unification, major cleanups
[libpicofe.git] / common / emu.c
index 58fee61..f8b4e65 100644 (file)
@@ -16,6 +16,7 @@
 #include "lprintf.h"\r
 #include "config.h"\r
 #include "common.h"\r
+#include "plat.h"\r
 \r
 #include <pico/pico_int.h>\r
 #include <pico/patch.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
-int rom_loaded = 0;\r
 char noticeMsg[64] = { 0, };\r
 int state_slot = 0;\r
 int config_slot = 0, config_slot_current = 0;\r
-char loadedRomFName[512] = { 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
+/* TODO: len checking */\r
+char rom_fname_reload[512] = { 0, };\r
+char rom_fname_loaded[512] = { 0, };\r
+int rom_loaded = 0;\r
 \r
 unsigned char *movie_data = NULL;\r
 static int movie_size = 0;\r
 \r
-// provided by platform code:\r
-extern void emu_noticeMsgUpdated(void);\r
-extern int  emu_getMainDir(char *dst, int len);\r
-extern void menu_romload_prepare(const char *rom_name);\r
-extern void menu_romload_end(void);\r
-\r
 \r
 // utilities\r
 static void strlwr_(char *string)\r
@@ -492,8 +498,8 @@ int emu_ReloadRom(char *rom_fname)
        if (currentConfig.EmuOpt & EOPT_USE_SRAM)\r
                emu_SaveLoadGame(1, 1);\r
 \r
-       strncpy(loadedRomFName, rom_fname, sizeof(loadedRomFName)-1);\r
-       loadedRomFName[sizeof(loadedRomFName)-1] = 0;\r
+       strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1);\r
+       rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0;\r
        rom_loaded = 1;\r
        return 1;\r
 \r
@@ -518,8 +524,8 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext)
        int prefix_len = 0;\r
 \r
        // make save filename\r
-       p = loadedRomFName+strlen(loadedRomFName)-1;\r
-       for (; p >= loadedRomFName && *p != PATH_SEP_C; p--); p++;\r
+       p = rom_fname_loaded + strlen(rom_fname_loaded) - 1;\r
+       for (; p >= rom_fname_loaded && *p != PATH_SEP_C; p--); p++;\r
        *dst = 0;\r
        if (prefix) {\r
                int len = emu_getMainDir(dst, 512);\r
@@ -527,7 +533,7 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext)
                prefix_len = len + strlen(prefix);\r
        }\r
 #ifdef UIQ3\r
-       else p = loadedRomFName; // backward compatibility\r
+       else p = rom_fname_loaded; // backward compatibility\r
 #endif\r
        strncpy(dst + prefix_len, p, 511-prefix_len);\r
        dst[511-8] = 0;\r
@@ -680,54 +686,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
+/* 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
-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
+mk_text_out(emu_textOut8, unsigned char, 0xf0)\r
+mk_text_out(emu_textOut16, unsigned short, 0xffff)\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
+#undef mk_text_out\r
 \r
 #ifdef PSP\r
 #define MAX_COMBO_KEY 23\r
@@ -735,6 +723,7 @@ void emu_textOut16(int x, int y, const char *text)
 #define MAX_COMBO_KEY 31\r
 #endif\r
 \r
+// FIXME\r
 void emu_findKeyBindCombos(void)\r
 {\r
        int act, u;\r