anti-tear modes for Wiz
[libpicofe.git] / common / emu.c
index 8548bdc..1c7d1b7 100644 (file)
@@ -662,32 +662,36 @@ int emu_write_config(int is_game)
 \r
 /* always using built-in font */\r
 \r
-#define mk_text_out(name, type, val) \\r
+#define mk_text_out(name, type, val, topleft, step_x, step_y) \\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
+       type *screen = (type *)(topleft) + x * step_x + y * step_y;     \\r
                                                                        \\r
-       for (i = 0; i < len; i++, screen += 8)                          \\r
+       for (i = 0; i < len; i++, screen += 8 * step_x)                 \\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
+                       type *s = screen + l * step_y;                  \\r
+                       if (fd&0x80) s[step_x * 0] = val;               \\r
+                       if (fd&0x40) s[step_x * 1] = val;               \\r
+                       if (fd&0x20) s[step_x * 2] = val;               \\r
+                       if (fd&0x10) s[step_x * 3] = val;               \\r
+                       if (fd&0x08) s[step_x * 4] = val;               \\r
+                       if (fd&0x04) s[step_x * 5] = val;               \\r
+                       if (fd&0x02) s[step_x * 6] = val;               \\r
+                       if (fd&0x01) s[step_x * 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
+mk_text_out(emu_text_out8,      unsigned char,    0xf0, g_screen_ptr, 1, g_screen_width)\r
+mk_text_out(emu_text_out16,     unsigned short, 0xffff, g_screen_ptr, 1, g_screen_width)\r
+mk_text_out(emu_text_out8_rot,  unsigned char,    0xf0,\r
+       (char *)g_screen_ptr  + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)\r
+mk_text_out(emu_text_out16_rot, unsigned short, 0xffff,\r
+       (short *)g_screen_ptr + (g_screen_width - 1) * g_screen_height, -g_screen_height, 1)\r
 \r
 #undef mk_text_out\r
 \r