35868d35 |
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 |