gpu_neon: partially support range regs
[pcsx_rearmed.git] / maemo / hildon.c
index 41d8f63..ba035d1 100644 (file)
 #include <gtk/gtk.h>
 #include <glib.h>
 #include <stdlib.h>
+#include <stdint.h>
 #include <unistd.h>
 #include <hildon/hildon.h>
-#include "minimal.h"
-
-GdkImage *image;
-HildonAnimationActor *actor;
-GtkWidget *window, *drawing;
+#include "plugin_lib.h"
+#include "main.h"
+#include "../libpcsxcore/psemu_plugin_defs.h"
 
 #define X_RES           800
 #define Y_RES           480
 #define D_WIDTH                        640
 #define D_HEIGHT               480
 
-int screen_size;
+int g_layer_x = (X_RES - D_WIDTH) / 2;
+int g_layer_y = (Y_RES - D_HEIGHT) / 2;
+int g_layer_w = D_WIDTH, g_layer_h = D_HEIGHT;
+
+static GdkImage *image;
+static HildonAnimationActor *actor;
+static GtkWidget *window, *drawing;
+
+static int keymap[65536];
+
+// map psx4m compatible keymap to PSX keys
+static const unsigned char keymap2[14] = {
+       DKEY_LEFT,   // 0
+       DKEY_RIGHT,
+       DKEY_UP,
+       DKEY_DOWN,
+       DKEY_CIRCLE,
+       DKEY_CROSS,  // 5
+       DKEY_TRIANGLE,
+       DKEY_SQUARE,
+       DKEY_SELECT,
+       DKEY_START,
+       DKEY_L2,     // 10
+       DKEY_R2,
+       DKEY_L1,
+       DKEY_R1,
+};
 
-void *pl_fbdev_buf=NULL;
-int keymap[65536];
-void hildon_quit();
-unsigned long keys = 0;
+void hildon_quit()
+{
+       gtk_main_quit();
+       exit(0);
+}
 
 static void
-window_key_proxy (GtkWidget *widget,
+window_key_proxy(GtkWidget *widget,
                     GdkEventKey *event,
                     gpointer user_data)
 {
-       unsigned long key = 0;
-switch(keymap[event->hardware_keycode]){
-       case -1:
-               return; break;
-       case 0:
-                       key = GP2X_LEFT;break;
-       case 1:
-                       key = GP2X_RIGHT;break;
-       case 2:
-                       key = GP2X_UP;break;
-       case 3:
-                       key = GP2X_DOWN;break;
-       case 4:
-                       key = GP2X_B;break;
-       case 5:
-                       key = GP2X_X;break;
-       case 6:
-                       key = GP2X_Y;break;
-       case 7:
-                       key = GP2X_A;break;
-       case 8:
-                       key = GP2X_SELECT;break;
-       case 9:
-                       key = GP2X_START;break;
-       case 10:
-                       key = GP2X_VOL_DOWN;break;
-       case 11:
-                       key = GP2X_VOL_UP;break;
-       case 12:
-                       key = GP2X_L;break;
-       case 13:
-                       key = GP2X_R;break;
-       case 14:
-               hildon_quit();break;
-       case 15:
-                       if (event->type == GDK_KEY_PRESS){
-                       keys |= GP2X_LEFT;
-                       keys |= GP2X_UP;
-                       }else if (event->type == GDK_KEY_RELEASE){
-                       keys &= ~GP2X_LEFT;
-                       keys &= ~GP2X_UP;
-                       }
-               key = -1;                       return ;                        break;
-       case 16:
-                       if (event->type == GDK_KEY_PRESS){
-                       keys |= GP2X_RIGHT;
-                       keys |= GP2X_UP;
-                       }else if (event->type == GDK_KEY_RELEASE){
-                       keys &= ~GP2X_RIGHT;
-                       keys &= ~GP2X_UP;
-                       }
-               key = -1;                       return ;                        break;
-       case 17:
-                       if (event->type == GDK_KEY_PRESS){
-                       keys |= GP2X_LEFT;
-                       keys |= GP2X_DOWN;
-                       }else if (event->type == GDK_KEY_RELEASE){
-                       keys &= ~GP2X_LEFT;
-                       keys &= ~GP2X_DOWN;
-                       }
-               key = -1;                       return ;                        break;
-       case 18:
-                       if (event->type == GDK_KEY_PRESS){
-                       keys |= GP2X_RIGHT;
-                       keys |= GP2X_DOWN;
-                       }else if (event->type == GDK_KEY_RELEASE){
-                       keys &= ~GP2X_RIGHT;
-                       keys &= ~GP2X_DOWN;
-                       }
-               key = -1;                       return ;                        break;
-/*     case 19:
-               SaveState(cfile);
-               key = -1;                       return ;                        break;
-       break;
-       case 20:
-               LoadState(cfile);
-               key = -1;                       return ;                        break;*/
-       break;
-}
-       
-       if (event->type == GDK_KEY_PRESS) {
-               keys |= key;
-       }
-       else if (event->type == GDK_KEY_RELEASE) {
-               keys &= ~key;
-       }
-}
-unsigned long int gp2x_joystick_read();
-unsigned int ReadZodKeys()
-{
-       unsigned int pad_status = 0xffff;
-       unsigned long int  keys = gp2x_joystick_read();
-
+       int key, psxkey1 = -1, psxkey2 = -1;
 
-    if(        keys & GP2X_VOL_DOWN ) // L2
-       {
-               pad_status &= ~(1<<8);
-       }
-       if (keys & GP2X_L)
-       {
-               pad_status &= ~(1<<10); // L ?
-       }
-  
-  
+       key = keymap[event->hardware_keycode];
+       if (key < 0)
+               return;
 
-       if( keys & GP2X_VOL_UP ) // R2
-       {
-               pad_status &= ~(1<<9);
-       }
-       if (keys & GP2X_R)
-       {
-               pad_status &= ~(1<<11); // R ?
-       }
-    
-       if (keys & GP2X_UP)
-       {
-               pad_status &= ~(1<<4); 
-       }
-       if (keys & GP2X_DOWN)
-       {
-               pad_status &= ~(1<<6);
-       }
-       if (keys & GP2X_LEFT)
-       {
-               pad_status &= ~(1<<7);
-       }
-       if (keys & GP2X_RIGHT)
-       {
-               pad_status &= ~(1<<5);
-       }
-       if (keys & GP2X_START)
-       {
-               pad_status &= ~(1<<3);
+       if (key < ARRAY_SIZE(keymap2))
+               psxkey1 = keymap2[key];
+       else switch (key) {
+               case 14:
+                       hildon_quit();
+                       break;
+               case 15:
+                       psxkey1 = DKEY_UP;
+                       psxkey2 = DKEY_LEFT;
+                       break;
+               case 16:
+                       psxkey1 = DKEY_UP;
+                       psxkey2 = DKEY_RIGHT;
+                       break;
+               case 17:
+                       psxkey1 = DKEY_DOWN;
+                       psxkey2 = DKEY_LEFT;
+                       break;
+               case 18:
+                       psxkey1 = DKEY_DOWN;
+                       psxkey2 = DKEY_RIGHT;
+                       break;
+               case 19:
+                       if (event->type == GDK_KEY_PRESS)
+                               emu_set_action(SACTION_SAVE_STATE);
+                       return;
+               case 20:
+                       if (event->type == GDK_KEY_PRESS)
+                               emu_set_action(SACTION_LOAD_STATE);
+                       return;
        }
-       if (keys & GP2X_SELECT)
-       {                       
-               pad_status &= ~(1);
-       }
-               
-       if (keys & GP2X_X)
-       {
-               pad_status &= ~(1<<14);
-       }
-       if (keys & GP2X_B)
-       {
-               pad_status &= ~(1<<13);
-       }
-       if (keys & GP2X_A)
-       {
-               pad_status &= ~(1<<15);
-       }
-       if (keys & GP2X_Y)
-       {
-               pad_status &= ~(1<<12);
+
+       if (event->type == GDK_KEY_PRESS) {
+               if (psxkey1 >= 0)
+                       in_keystate |= 1 << psxkey1;
+               if (psxkey2 >= 0)
+                       in_keystate |= 1 << psxkey2;
        }
+       else if (event->type == GDK_KEY_RELEASE) {
+               if (psxkey1 >= 0)
+                       in_keystate &= ~(1 << psxkey1);
+               if (psxkey2 >= 0)
+                       in_keystate &= ~(1 << psxkey2);
 
-       return pad_status;
+               emu_set_action(SACTION_NONE);
+       }
 }
 
-void hildon_quit()
+void plat_finish()
 {
-       gtk_main_quit();
-       exit(0);
+       hildon_quit();
 }
-void plat_finish(){hildon_quit();}
 
 void maemo_init(int *argc, char ***argv)
 {
@@ -207,7 +126,6 @@ void maemo_init(int *argc, char ***argv)
                }
                fclose(pFile);
        }
-               
        
        gtk_init (argc, argv);
 
@@ -235,18 +153,19 @@ void maemo_init(int *argc, char ***argv)
        gtk_widget_show_all (GTK_WIDGET (window));
 }
 
+void menu_loop(void)
+{
+}
 
-void pl_fbdev_set_mode(int w, int h,int bpp)
+void *hildon_set_mode(int w, int h)
 {
-//if (bpp==24){w=800;h=480;}
        if (w <= 0 || h <= 0)
-               return;
+               return pl_vout_buf;
 
        if (image) gdk_image_destroy(image);
        image = gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), w, h );
 
-       pl_fbdev_buf = (void*) image->mem;
-       screen_size = image->bpl * h  * image->bpp;
+       pl_vout_buf = (void *) image->mem;
 
        gtk_image_set_from_image (GTK_IMAGE(drawing), image, NULL);
 
@@ -255,72 +174,27 @@ void pl_fbdev_set_mode(int w, int h,int bpp)
                                (gdouble)D_WIDTH / (gdouble)w,
                                (gdouble)D_HEIGHT / (gdouble)h
        );
+
+       return pl_vout_buf;
 }
 
-unsigned long gp2x_joystick_read(void)
+void *hildon_flip(void)
 {
-       //printf("gp2x_joystick_read\n");
+       gtk_widget_queue_draw (drawing);
+
        /* process GTK+ events */
        while (gtk_events_pending())
                gtk_main_iteration();
 
-       return keys;
+       return pl_vout_buf;
 }
 
-void gp2x_video_RGB_clearscreen16(void)
+int omap_enable_layer(int enabled)
 {
-       //if (screenbuffer && screen_size)
-       //      memset(pl_fbdev_buf, 0, screen_size);
+       return 0;
 }
 
-void pl_fbdev_flip()
+void menu_notify_mode_change(int w, int h, int bpp)
 {
-       gtk_widget_queue_draw (drawing);
 }
 
-void gp2x_printfchar15(gp2x_font *f, unsigned char c)
-{
-  unsigned short *dst=&((unsigned short*)pl_fbdev_buf)[f->x+f->y*(image->bpl>>1)],w,h=f->h;
-//unsigned char  *src=f->data[ (c%16)*f->w + (c/16)*f->h ];
-  unsigned char  *src=&f->data[c*10];
-
- if(f->solid)
-         while(h--)
-         {
-          w=f->wmask;
-          while(w)
-          {
-           if( *src & w ) *dst++=f->fg; else *dst++=f->bg;
-           w>>=1;
-          }
-          src++;    
-
-          dst+=(image->bpl>>1)-(f->w);
-         }
- else
-         while(h--)
-         {
-          w=f->wmask;
-          while(w)
-          {
-           if( *src & w ) *dst=f->fg;
-           dst++;
-           w>>=1;
-          }
-          src++;
-
-          dst+=(image->bpl>>1)-(f->w);
-         }
-}
-
-void pl_frame_limit(void){
-}
-
-void pl_fbdev_close(void){
-}
-
-void pl_fbdev_open(void){
-        
-}
-
-