gpfce patch part3
[fceu.git] / drivers / pc / minimal.h
CommitLineData
98733207 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
38typedef struct gp2x_queue { volatile unsigned long head, tail, items, max_items; unsigned long *place920t, *place940t; } gp2x_queue;\r
39typedef struct gp2x_rect { int x,y,w,h,solid; unsigned short *data15; unsigned char *data8; } gp2x_rect;\r
40\r
41extern void gp2x_timer_delay(unsigned long ticks);\r
42extern void gp2x_sound_pause(int yes);\r
43extern void gp2x_dualcore_pause(int yes);\r
44extern void gp2x_blitter_rect15(gp2x_rect *r);\r
45extern 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
51enum { 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
79extern volatile unsigned short gp2x_palette[512];\r
80extern unsigned short *gp2x_screen15;\r
81extern unsigned char *gp2x_screen8;\r
82extern volatile unsigned long *gp2x_dualcore_ram;\r
83\r
84extern void gp2x_init(int tickspersecond, int bpp, int rate, int bits, int stereo, int hz);\r
85extern void gp2x_deinit(void);\r
86\r
87extern void gp2x_video_flip(void);\r
88extern void gp2x_video_flip_single(void);\r
89extern void gp2x_video_setpalette(void);\r
90\r
91extern unsigned long gp2x_joystick_read(void);\r
92\r
93extern void gp2x_sound_volume(int left, int right);\r
94\r
95extern unsigned long gp2x_timer_read(void);\r
96extern unsigned long gp2x_timer_read_ms(void);\r
97\r
98extern void gp2x_dualcore_enable(int on);\r
99extern void gp2x_dualcore_sync(void);\r
100extern void gp2x_dualcore_exec(unsigned long command);\r
101extern void gp2x_dualcore_launch_program(unsigned long *area, unsigned long size);\r
102extern 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