3 GP2X minimal library v0.A by rlyeh, (c) 2005. emulnation.info@rlyeh (swap it!)
\r
5 Thanks to Squidge, Robster, snaff, Reesy and NK, for the help & previous work! :-)
\r
10 Free for non-commercial projects (it would be nice receiving a mail from you).
\r
11 Other cases, ask me first.
\r
13 GamePark Holdings is not allowed to use this library and/or use parts from it.
\r
18 #include <linux/fb.h>
\r
19 #include <pthread.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
29 #include <sys/time.h>
\r
31 #include <sys/ioctl.h>
\r
33 #ifndef __MINIMAL_H__
\r
34 #define __MINIMAL_H__
\r
36 #define MINILIB_VERSION "GP2X minimal library v0.A by rlyeh, (c) 2005."
\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
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
49 //extern void gp2x_sound_frame (void *blah, void *bufferg, int samples);
\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
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
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
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
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
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
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
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
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
91 extern unsigned long gp2x_joystick_read(void);
\r
93 extern void gp2x_sound_volume(int left, int right);
\r
95 extern unsigned long gp2x_timer_read(void);
\r
96 extern unsigned long gp2x_timer_read_ms(void);
\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
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