initial pandora port, with hardware scaling and stuff
[gpsp.git] / common.h
CommitLineData
2823a4c8 1/* gameplaySP
2 *
3 * Copyright (C) 2006 Exophase <exophase@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of
8 * the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#ifndef COMMON_H
21#define COMMON_H
22
23#define ror(dest, value, shift) \
24 dest = ((value) >> shift) | ((value) << (32 - shift)) \
25
26// These includes must be used before SDL is included.
27#ifdef ARM_ARCH
28
29#ifdef _WIN32_WCE
30 #include <windows.h>
31#else
8b6232a6 32 #define _BSD_SOURCE // sync
2823a4c8 33 #include <stdlib.h>
34 #include <stdio.h>
35 #include <string.h>
36 #include <math.h>
37 #include <fcntl.h>
38 #include <unistd.h>
39 #include <stdarg.h>
40 #include <time.h>
41 #include <sys/time.h>
42#endif /* _WIN32_WCE */
43
44#ifdef GIZ_BUILD
45 #include "giz/giz.h"
46#endif
47#endif /* ARM_ARCH */
48
49// Huge thanks to pollux for the heads up on using native file I/O
50// functions on PSP for vastly improved memstick performance.
51
52#define file_write_mem(filename_tag, buffer, size) \
53{ \
54 memcpy(write_mem_ptr, buffer, size); \
55 write_mem_ptr += size; \
56} \
57
58#define file_write_mem_array(filename_tag, array) \
59 file_write_mem(filename_tag, array, sizeof(array)) \
60
61#define file_write_mem_variable(filename_tag, variable) \
62 file_write_mem(filename_tag, &variable, sizeof(variable)) \
63
64#ifdef PSP_BUILD
65 #define fastcall
66
67 #include <pspkernel.h>
68 #include <pspdebug.h>
69 #include <pspctrl.h>
70 #include <pspgu.h>
71 #include <pspaudio.h>
72 #include <pspaudiolib.h>
73 #include <psprtc.h>
74
75 #define function_cc
76
77 #define convert_palette(value) \
78 value = ((value & 0x7FE0) << 1) | (value & 0x1F) \
79
80 #define psp_file_open_read PSP_O_RDONLY
81 #define psp_file_open_write (PSP_O_CREAT | PSP_O_WRONLY | PSP_O_TRUNC)
82
83 #define file_open(filename_tag, filename, mode) \
84 s32 filename_tag = sceIoOpen(filename, psp_file_open_##mode, 0777) \
85
86 #define file_check_valid(filename_tag) \
87 (filename_tag >= 0) \
88
89 #define file_close(filename_tag) \
90 sceIoClose(filename_tag) \
91
92 #define file_read(filename_tag, buffer, size) \
93 sceIoRead(filename_tag, buffer, size) \
94
95 #define file_write(filename_tag, buffer, size) \
96 sceIoWrite(filename_tag, buffer, size) \
97
98 #define file_seek(filename_tag, offset, type) \
99 sceIoLseek(filename_tag, offset, PSP_##type) \
100
101 #define file_tag_type s32
102
103 #include <time.h>
104 #include <stdio.h>
105#else
106 #include "SDL.h"
107
108#ifdef ARM_ARCH
109 #define function_cc
110#else
111 #define function_cc __attribute__((regparm(2)))
112#endif
113
114 typedef unsigned char u8;
115 typedef signed char s8;
116 typedef unsigned short int u16;
117 typedef signed short int s16;
eac69717 118 typedef unsigned int u32;
119 typedef signed int s32;
2823a4c8 120 typedef unsigned long long int u64;
121 typedef signed long long int s64;
122
123 #define convert_palette(value) \
124 value = ((value & 0x1F) << 11) | ((value & 0x03E0) << 1) | (value >> 10) \
125
126 #define stdio_file_open_read "rb"
127 #define stdio_file_open_write "wb"
128
129 #define file_open(filename_tag, filename, mode) \
130 FILE *filename_tag = fopen(filename, stdio_file_open_##mode) \
131
132 #define file_check_valid(filename_tag) \
133 (filename_tag) \
134
135#ifdef GP2X_BUILD
136
137 #define file_close(filename_tag) \
138 { \
2823a4c8 139 fclose(filename_tag); \
638cc626 140 sync(); \
2823a4c8 141 } \
142
143#else
144
145 #define file_close(filename_tag) \
146 fclose(filename_tag) \
147
148#endif
149
150 #define file_read(filename_tag, buffer, size) \
151 fread(buffer, size, 1, filename_tag) \
152
153 #define file_write(filename_tag, buffer, size) \
154 fwrite(buffer, size, 1, filename_tag) \
155
156 #define file_seek(filename_tag, offset, type) \
157 fseek(filename_tag, offset, type) \
158
159 #define file_tag_type FILE *
160
2823a4c8 161#endif
162
163// These must be variables, not constants.
164
165#define file_read_variable(filename_tag, variable) \
166 file_read(filename_tag, &variable, sizeof(variable)) \
167
168#define file_write_variable(filename_tag, variable) \
169 file_write(filename_tag, &variable, sizeof(variable)) \
170
171// These must be statically declared arrays (ie, global or on the stack,
172// not dynamically allocated on the heap)
173
174#define file_read_array(filename_tag, array) \
175 file_read(filename_tag, array, sizeof(array)) \
176
177#define file_write_array(filename_tag, array) \
178 file_write(filename_tag, array, sizeof(array)) \
179
180
181
182typedef u32 fixed16_16;
183
184#define float_to_fp16_16(value) \
185 (fixed16_16)((value) * 65536.0) \
186
187#define fp16_16_to_float(value) \
188 (float)((value) / 65536.0) \
189
190#define u32_to_fp16_16(value) \
191 ((value) << 16) \
192
193#define fp16_16_to_u32(value) \
194 ((value) >> 16) \
195
196#define fp16_16_fractional_part(value) \
197 ((value) & 0xFFFF) \
198
199#define fixed_div(numerator, denominator, bits) \
200 (((numerator * (1 << bits)) + (denominator / 2)) / denominator) \
201
202#define address8(base, offset) \
203 *((u8 *)((u8 *)base + (offset))) \
204
205#define address16(base, offset) \
206 *((u16 *)((u8 *)base + (offset))) \
207
208#define address32(base, offset) \
209 *((u32 *)((u8 *)base + (offset))) \
210
211#include <unistd.h>
212#include <time.h>
213#include <stdio.h>
214#include <stdlib.h>
215#include <string.h>
216#include <stdarg.h>
217#include "SDL.h"
218#include "cpu.h"
219#include "memory.h"
220#include "video.h"
221#include "input.h"
222#include "sound.h"
223#include "main.h"
224#include "gui.h"
225#include "zip.h"
226#include "cheats.h"
227
c21718e9 228#ifdef ARM_ARCH
229 #include "arm/warm.h"
230#endif
2823a4c8 231
232#ifdef PSP_BUILD
233 #define printf pspDebugScreenPrintf
234#endif
235
236#ifdef PC_BUILD
237 #define STDIO_DEBUG
238 //#define REGISTER_USAGE_ANALYZE
239#endif
240
241#ifdef GP2X_BUILD
242 #include <strings.h>
243 #include "gp2x/gp2x.h"
244
245 #define printf(format, ...) \
246 fprintf(stderr, format, ##__VA_ARGS__) \
247
248 #define vprintf(format, ap) \
249 vfprintf(stderr, format, ap) \
250
2823a4c8 251// #define STDIO_DEBUG
252#endif
253
eb3668fc 254#ifdef PND_BUILD
255 #include "pandora/pnd.h"
256#endif
257
2823a4c8 258#endif