#include #include #include "rockmacros.h" #include "input.h" #include "rc.h" #include "exports.h" #include "emu.h" #include "loader.h" #include "hw.h" //#include "Version" static char *defaultconfig[] = { "bind up +up", "bind down +down", "bind left +left", "bind right +right", "bind joy0 +b", "bind joy1 +a", "bind joy2 +select", "bind joy3 +start", "bind ins savestate", "bind del loadstate", NULL }; void doevents() { event_t ev; int st; ev_poll(); while (ev_getevent(&ev)) { if (ev.type != EV_PRESS && ev.type != EV_RELEASE) continue; st = (ev.type != EV_RELEASE); pad_set(ev.code, st); } } /* convenience macro for printing loading state */ #define PUTS(str) do { \ rb->lcd_putsxy(1, y, (unsigned char *)str); \ rb->lcd_getstringsize((unsigned char *)str, &w, &h); \ y += h + 1; \ } while (0) int gnuboy_main(char *rom) { int i, w, h, y; y = 1; // Avoid initializing video if we don't have to // If we have special perms, drop them ASAP! PUTS("Init exports"); init_exports(); PUTS("Loading default config"); for (i = 0; defaultconfig[i]; i++) rc_command(defaultconfig[i]); // sprintf(cmd, "source %s", rom); // s = strchr(cmd, '.'); // if (s) *s = 0; // strcat(cmd, ".rc"); // rc_command(cmd); // FIXME - make interface modules responsible for atexit() PUTS("Init video"); vid_init(); PUTS("Init sound"); pcm_init(); PUTS("Loading rom"); loader_init(rom); if(shut) return PLUGIN_ERROR; PUTS("Emu reset"); emu_reset(); PUTS("Emu run"); #if (LCD_HEIGHT > 144) || (LCD_WIDTH > 160) rb->lcd_clear_display(); rb->lcd_drawrect((LCD_WIDTH-160)/2-1, (LCD_HEIGHT-144)/2-1, 162, 146); rb->lcd_update(); #endif emu_run(); // never reached return PLUGIN_OK; } #undef PUTS