X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fplugin_lib.c;h=7d5e15fd32808ccbb2807b5eddbe02fe7b737adb;hp=92c2b5383e816a94d04671338d849aad8651bb3a;hb=69af03a2c2fccc06cb836f42a10b490a48f29c15;hpb=698517be481301b4525c29873134a67b8343af3c;ds=sidebyside diff --git a/frontend/plugin_lib.c b/frontend/plugin_lib.c index 92c2b538..7d5e15fd 100644 --- a/frontend/plugin_lib.c +++ b/frontend/plugin_lib.c @@ -7,48 +7,90 @@ #include #include +#include +#include #include "linux/fbdev.h" +#include "common/fonts.h" +#include "common/input.h" +#include "omap.h" +#include "../libpcsxcore/new_dynarec/new_dynarec.h" -static struct vout_fbdev *fbdev; void *pl_fbdev_buf; +int keystate; +static int pl_fbdev_w; int pl_fbdev_init(void) { - const char *fbdev_name; - int w, h; + pl_fbdev_buf = vout_fbdev_flip(layer_fb); + return 0; +} - fbdev_name = getenv("FBDEV"); - if (fbdev_name == NULL) - fbdev_name = "/dev/fb0"; +int pl_fbdev_set_mode(int w, int h, int bpp) +{ + int ret; - w = 640; - h = 512; // ?? - fbdev = vout_fbdev_init(fbdev_name, &w, &h, 16, 3); - if (fbdev == NULL) - return -1; + pl_fbdev_w = w; + printf("set mode %dx%d@%d\n", w, h, bpp); + ret = vout_fbdev_resize(layer_fb, w, h, bpp, 0, 0, 0, 0, 3); + if (ret) + fprintf(stderr, "failed to set mode\n"); + return ret; +} + +void *pl_fbdev_flip(void) +{ + /* doing input here because the pad is polled + * thousands of times for some reason */ + int actions[IN_BINDTYPE_COUNT] = { 0, }; - pl_fbdev_buf = vout_fbdev_flip(fbdev); + in_update(actions); + if (actions[IN_BINDTYPE_EMU] & PEV_MENU) + stop = 1; + keystate = ~actions[IN_BINDTYPE_PLAYER12]; - return 0; + // let's flip now + pl_fbdev_buf = vout_fbdev_flip(layer_fb); + return pl_fbdev_buf; } -int pl_fbdev_set_mode(int w, int h, int bpp) +void pl_fbdev_finish(void) { - printf("set mode %dx%d@%d\n", w, h, bpp); - return vout_fbdev_resize(fbdev, w, h, bpp, 0, 0, 0, 0, 3); } -void *pl_fbdev_flip(void) +static void pl_text_out16_(int x, int y, const char *text) { - pl_fbdev_buf = vout_fbdev_flip(fbdev); - return pl_fbdev_buf; + int i, l, len = strlen(text), w = pl_fbdev_w; + unsigned short *screen = (unsigned short *)pl_fbdev_buf + x + y * w; + unsigned short val = 0xffff; + + for (i = 0; i < len; i++, screen += 8) + { + for (l = 0; l < 8; l++) + { + unsigned char fd = fontdata8x8[text[i] * 8 + l]; + unsigned short *s = screen + l * w; + if (fd&0x80) s[0] = val; + if (fd&0x40) s[1] = val; + if (fd&0x20) s[2] = val; + if (fd&0x10) s[3] = val; + if (fd&0x08) s[4] = val; + if (fd&0x04) s[5] = val; + if (fd&0x02) s[6] = val; + if (fd&0x01) s[7] = val; + } + } } -void pl_fbdev_finish(void) +void pl_text_out16(int x, int y, const char *texto, ...) { - if (fbdev != NULL) - vout_fbdev_finish(fbdev); - fbdev = NULL; + va_list args; + char buffer[256]; + + va_start(args, texto); + vsnprintf(buffer, sizeof(buffer), texto, args); + va_end(args); + + pl_text_out16_(x, y, buffer); }