| 1 | /*\r |
| 2 | \r |
| 3 | GP2X minimal library v0.A by rlyeh, (c) 2005. emulnation.info@rlyeh (swap it!)\r |
| 4 | \r |
| 5 | Thanks to Squidge, Robster, snaff, Reesy and NK, for the help & previous work! :-)\r |
| 6 | \r |
| 7 | License\r |
| 8 | =======\r |
| 9 | \r |
| 10 | Free for non-commercial projects (it would be nice receiving a mail from you).\r |
| 11 | Other cases, ask me first.\r |
| 12 | \r |
| 13 | GamePark Holdings is not allowed to use this library and/or use parts from it.\r |
| 14 | \r |
| 15 | */\r |
| 16 | \r |
| 17 | #include <fcntl.h>\r |
| 18 | #include <linux/fb.h>\r |
| 19 | #include <pthread.h>\r |
| 20 | #include <signal.h>\r |
| 21 | #include <stdlib.h>\r |
| 22 | #include <stdio.h>\r |
| 23 | #include <string.h>\r |
| 24 | #include <sys/mman.h>\r |
| 25 | //#include <sys/ioctl.h>\r |
| 26 | #include <sys/soundcard.h>\r |
| 27 | #include <linux/soundcard.h>\r |
| 28 | \r |
| 29 | #include <sys/time.h>\r |
| 30 | #include <unistd.h>\r |
| 31 | #include <sys/ioctl.h>\r |
| 32 | \r |
| 33 | #ifndef __MINIMAL_H__\r |
| 34 | #define __MINIMAL_H__\r |
| 35 | \r |
| 36 | #define MINILIB_VERSION "GP2X minimal library v0.A by rlyeh, (c) 2005."\r |
| 37 | \r |
| 38 | typedef struct gp2x_queue { volatile unsigned long head, tail, items, max_items; unsigned long *place920t, *place940t; } gp2x_queue;\r |
| 39 | typedef struct gp2x_rect { int x,y,w,h,solid; unsigned short *data15; unsigned char *data8; } gp2x_rect;\r |
| 40 | \r |
| 41 | extern void gp2x_timer_delay(unsigned long ticks);\r |
| 42 | extern void gp2x_sound_pause(int yes);\r |
| 43 | extern void gp2x_dualcore_pause(int yes);\r |
| 44 | extern void gp2x_blitter_rect15(gp2x_rect *r);\r |
| 45 | extern void gp2x_blitter_rect8(gp2x_rect *r);\r |
| 46 | \r |
| 47 | \r |
| 48 | \r |
| 49 | //extern void gp2x_sound_frame (void *blah, void *bufferg, int samples);\r |
| 50 | \r |
| 51 | enum { GP2X_UP=0x1, GP2X_LEFT=0x4, GP2X_DOWN=0x10, GP2X_RIGHT=0x40,\r |
| 52 | GP2X_START=1<<8, GP2X_SELECT=1<<9, GP2X_L=1<<10, GP2X_R=1<<11,\r |
| 53 | GP2X_A=1<<12, GP2X_B=1<<13, GP2X_X=1<<14, GP2X_Y=1<<15,\r |
| 54 | GP2X_VOL_UP=1<<23, GP2X_VOL_DOWN=1<<22, GP2X_PUSH=1<<27 };\r |
| 55 | \r |
| 56 | \r |
| 57 | #define GP2X_QUEUE_MAX_ITEMS 16\r |
| 58 | #define GP2X_QUEUE_ARRAY_PTR ((0x1000-(sizeof(gp2x_queue)<<2)))\r |
| 59 | #define GP2X_QUEUE_DATA_PTR (GP2X_QUEUE_ARRAY_PTR-(GP2X_QUEUE_MAX_ITEMS<<2))\r |
| 60 | \r |
| 61 | #define gp2x_2ndcore_code(v) (*(volatile unsigned long *)(v))\r |
| 62 | #define gp2x_1stcore_code(v) gp2x_dualcore_ram[(v)>>2]\r |
| 63 | #define gp2x_2ndcore_data(v) gp2x_2ndcore_code((v)+0x100000)\r |
| 64 | #define gp2x_1stcore_data(v) gp2x_1stcore_code((v)+0x100000)\r |
| 65 | #define gp2x_dualcore_data(v) gp2x_1stcore_data(v)\r |
| 66 | \r |
| 67 | #define gp2x_2ndcore_code_ptr(v) ((volatile unsigned long *)(v))\r |
| 68 | #define gp2x_1stcore_code_ptr(v) (&gp2x_dualcore_ram[(v)>>2])\r |
| 69 | #define gp2x_2ndcore_data_ptr(v) gp2x_2ndcore_code_ptr((v)+0x100000)\r |
| 70 | #define gp2x_1stcore_data_ptr(v) gp2x_1stcore_code_ptr((v)+0x100000)\r |
| 71 | \r |
| 72 | #define gp2x_video_wait_vsync() while(gp2x_memregs[0x1182>>1]&(1<<4));\r |
| 73 | #define gp2x_video_wait_hsync() while(gp2x_memregs[0x1182>>1]&(1<<5));\r |
| 74 | \r |
| 75 | #define gp2x_video_color8(C,R,G,B) do gp2x_palette[((C)<<1)+0]=((G)<<8)|(B),gp2x_palette[((C)<<1)+1]=(R); while(0)\r |
| 76 | #define gp2x_video_color15(R,G,B,A) ((((R)&0xF8)<<8)|(((G)&0xF8)<<3)|(((B)&0xF8)>>3)|((A)<<5))\r |
| 77 | \r |
| 78 | \r |
| 79 | extern volatile unsigned short gp2x_palette[512];\r |
| 80 | extern unsigned short *gp2x_screen15;\r |
| 81 | extern unsigned char *gp2x_screen8;\r |
| 82 | extern volatile unsigned long *gp2x_dualcore_ram;\r |
| 83 | \r |
| 84 | extern void gp2x_init(int tickspersecond, int bpp, int rate, int bits, int stereo, int hz);\r |
| 85 | extern void gp2x_deinit(void);\r |
| 86 | \r |
| 87 | extern void gp2x_video_flip(void);\r |
| 88 | extern void gp2x_video_flip_single(void);\r |
| 89 | extern void gp2x_video_setpalette(void);\r |
| 90 | \r |
| 91 | extern unsigned long gp2x_joystick_read(void);\r |
| 92 | \r |
| 93 | extern void gp2x_sound_volume(int left, int right);\r |
| 94 | \r |
| 95 | extern unsigned long gp2x_timer_read(void);\r |
| 96 | extern unsigned long gp2x_timer_read_ms(void);\r |
| 97 | \r |
| 98 | extern void gp2x_dualcore_enable(int on);\r |
| 99 | extern void gp2x_dualcore_sync(void);\r |
| 100 | extern void gp2x_dualcore_exec(unsigned long command);\r |
| 101 | extern void gp2x_dualcore_launch_program(unsigned long *area, unsigned long size);\r |
| 102 | extern void gp2x_dualcore_launch_program_from_disk(const char *file, unsigned long offset, unsigned long size);\r |
| 103 | \r |
| 104 | #define gp2x_dualcore_declare_subprogram(name) extern void gp2x_dualcore_launch_## name ##_subprogram(void);\r |
| 105 | #define gp2x_dualcore_launch_subprogram(name) gp2x_dualcore_launch_## name ##_subprogram()\r |
| 106 | \r |
| 107 | #endif\r |
| 108 | \r |