00001 /* 00002 * PSP Software Development Kit - http://www.pspdev.org 00003 * ----------------------------------------------------------------------- 00004 * Licensed under the BSD license, see LICENSE in PSPSDK root for details. 00005 * 00006 * psptypes.h - Commonly used typedefs. 00007 * 00008 * Copyright (c) 2005 Marcus R. Brown <mrbrown@ocgnet.org> 00009 * Copyright (c) 2005 James Forshaw <tyranid@gmail.com> 00010 * Copyright (c) 2005 John Kelley <ps2dev@kelley.ca> 00011 * 00012 * $Id: psptypes.h 540 2005-07-08 19:35:10Z warren $ 00013 */ 00014 00015 /* Note: Some of the structures, types, and definitions in this file were 00016 extrapolated from symbolic debugging information found in the Japanese 00017 version of Puzzle Bobble. */ 00018 00019 #ifndef _PSPTYPES_H_ 00020 #define _PSPTYPES_H_ 1 00021 00022 #ifdef __cplusplus 00023 extern "C" { 00024 #endif 00025 00026 #ifndef NULL 00027 #ifdef __cplusplus 00028 #define NULL 0 00029 #else 00030 #define NULL ((void *) 0) 00031 #endif /* __cplusplus */ 00032 #endif 00033 00034 /* Legacy ps2dev types. */ 00035 typedef unsigned char u8; 00036 typedef unsigned short u16; 00037 00038 typedef volatile unsigned char vu8; 00039 typedef volatile unsigned short vu16; 00040 00041 typedef unsigned int u32; 00042 typedef unsigned long long u64; 00043 00044 typedef volatile unsigned int vu32; 00045 typedef volatile unsigned long long vu64; 00046 00047 typedef signed char s8; 00048 typedef signed short s16; 00049 00050 typedef volatile signed char vs8; 00051 typedef volatile signed short vs16; 00052 00053 typedef signed int s32; 00054 typedef signed long long s64; 00055 00056 typedef volatile signed int vs32; 00057 typedef volatile signed long long vs64; 00058 00059 /* MIPS-like accessor macros. */ 00060 static __inline__ u8 _lb(u32 addr) { return *(vu8 *)addr; } 00061 static __inline__ u16 _lh(u32 addr) { return *(vu16 *)addr; } 00062 static __inline__ u32 _lw(u32 addr) { return *(vu32 *)addr; } 00063 static __inline__ u64 _ld(u32 addr) { return *(vu64 *)addr; } 00064 00065 static __inline__ void _sb(u8 val, u32 addr) { *(vu8 *)addr = val; } 00066 static __inline__ void _sh(u16 val, u32 addr) { *(vu16 *)addr = val; } 00067 static __inline__ void _sw(u32 val, u32 addr) { *(vu32 *)addr = val; } 00068 static __inline__ void _sd(u64 val, u32 addr) { *(vu64 *)addr = val; } 00069 00070 /* Common integer types. */ 00071 typedef unsigned char u_char8; 00072 typedef short unsigned int u_short16; 00073 typedef short unsigned int u_int16; 00074 typedef unsigned int u_int32; 00075 typedef unsigned long long u_int64; 00076 typedef unsigned long long u_long64; 00077 /*typedef unsigned int u_long128 __attribute__((mode(TI)));*/ 00078 00079 typedef char char8; 00080 typedef short int short16; 00081 typedef short int int16; 00082 typedef int int32; 00083 typedef signed long long int64; 00084 typedef signed long long long64; 00085 /*typedef int long128 __attribute__((mode(TI)));*/ 00086 00087 /* SCE types. */ 00088 typedef unsigned char SceUChar8; 00089 typedef short unsigned int SceUShort16; 00090 typedef unsigned int SceUInt32; 00091 typedef long long unsigned int SceUInt64; 00092 typedef long long unsigned int SceULong64; 00093 /*typedef unsigned int SceULong128 __attribute__((mode(TI)));*/ 00094 00095 typedef char SceChar8; 00096 typedef short int SceShort16; 00097 typedef int SceInt32; 00098 typedef long long int SceInt64; 00099 typedef long long int SceLong64; 00100 /*typedef int SceLong128 __attribute__((mode(TI)));*/ 00101 00102 typedef float SceFloat; 00103 typedef float SceFloat32; 00104 00105 typedef short unsigned int SceWChar16; 00106 typedef unsigned int SceWChar32; 00107 00108 typedef int SceBool; 00109 00110 typedef void SceVoid; 00111 typedef void * ScePVoid; 00112 00113 00114 /* PSP types. */ 00115 00116 /* Rectangles. */ 00117 typedef struct ScePspSRect { 00118 short int x; 00119 short int y; 00120 short int w; 00121 short int h; 00122 } ScePspSRect; 00123 00124 typedef struct ScePspIRect { 00125 int x; 00126 int y; 00127 int w; 00128 int h; 00129 } ScePspIRect; 00130 00131 typedef struct ScePspL64Rect { 00132 SceLong64 x; 00133 SceLong64 y; 00134 SceLong64 w; 00135 SceLong64 h; 00136 } ScePspL64Rect; 00137 00138 typedef struct ScePspFRect { 00139 float x; 00140 float y; 00141 float w; 00142 float h; 00143 } ScePspFRect; 00144 00145 /* 2D vectors. */ 00146 typedef struct ScePspSVector2 { 00147 short int x; 00148 short int y; 00149 } ScePspSVector2; 00150 00151 typedef struct ScePspIVector2 { 00152 int x; 00153 int y; 00154 } ScePspIVector2; 00155 00156 typedef struct ScePspL64Vector2 { 00157 SceLong64 x; 00158 SceLong64 y; 00159 } ScePspL64Vector2; 00160 00161 typedef struct ScePspFVector2 { 00162 float x; 00163 float y; 00164 } ScePspFVector2; 00165 00166 typedef union ScePspVector2 { 00167 ScePspFVector2 fv; 00168 ScePspIVector2 iv; 00169 float f[2]; 00170 int i[2]; 00171 } ScePspVector2; 00172 00173 /* 3D vectors. */ 00174 typedef struct ScePspSVector3 { 00175 short int x; 00176 short int y; 00177 short int z; 00178 } ScePspSVector3; 00179 00180 typedef struct ScePspIVector3 { 00181 int x; 00182 int y; 00183 int z; 00184 } ScePspIVector3; 00185 00186 typedef struct ScePspL64Vector3 { 00187 SceLong64 x; 00188 SceLong64 y; 00189 SceLong64 z; 00190 } ScePspL64Vector3; 00191 00192 typedef struct ScePspFVector3 { 00193 float x; 00194 float y; 00195 float z; 00196 } ScePspFVector3; 00197 00198 typedef union ScePspVector3 { 00199 ScePspFVector3 fv; 00200 ScePspIVector3 iv; 00201 float f[3]; 00202 int i[3]; 00203 } ScePspVector3; 00204 00205 /* 4D vectors. */ 00206 typedef struct ScePspSVector4 { 00207 short int x; 00208 short int y; 00209 short int z; 00210 short int w; 00211 } ScePspSVector4; 00212 00213 typedef struct ScePspIVector4 { 00214 int x; 00215 int y; 00216 int z; 00217 int w; 00218 } ScePspIVector4; 00219 00220 typedef struct ScePspL64Vector4 { 00221 SceLong64 x; 00222 SceLong64 y; 00223 SceLong64 z; 00224 SceLong64 w; 00225 } ScePspL64Vector4; 00226 00227 typedef struct ScePspFVector4 { 00228 float x; 00229 float y; 00230 float z; 00231 float w; 00232 } ScePspFVector4 __attribute__((aligned(16))); 00233 00234 typedef struct ScePspFVector4Unaligned { 00235 float x; 00236 float y; 00237 float z; 00238 float w; 00239 } ScePspFVector4Unaligned; 00240 00241 typedef union ScePspVector4 { 00242 ScePspFVector4 fv; 00243 ScePspIVector4 iv; 00244 /* SceULong128 qw;*/ /* Missing compiler support. */ 00245 float f[4]; 00246 int i[4]; 00247 } ScePspVector4 __attribute__((aligned(16))); 00248 00249 /* 2D matrix types. */ 00250 typedef struct ScePspIMatrix2 { 00251 ScePspIVector2 x; 00252 ScePspIVector2 y; 00253 } ScePspIMatrix2; 00254 00255 typedef struct ScePspFMatrix2 { 00256 ScePspFVector2 x; 00257 ScePspFVector2 y; 00258 } ScePspFMatrix2; 00259 00260 typedef union ScePspMatrix2 { 00261 ScePspFMatrix2 fm; 00262 ScePspIMatrix2 im; 00263 ScePspFVector2 fv[2]; 00264 ScePspIVector2 iv[2]; 00265 ScePspVector2 v[2]; 00266 /* SceULong128 qw[2];*/ /* Missing compiler support. */ 00267 float f[2][2]; 00268 int i[2][2]; 00269 } ScePspMatrix2; 00270 00271 /* 3D matrix types. */ 00272 typedef struct ScePspIMatrix3 { 00273 ScePspIVector3 x; 00274 ScePspIVector3 y; 00275 ScePspIVector3 z; 00276 } ScePspIMatrix3; 00277 00278 typedef struct ScePspFMatrix3 { 00279 ScePspFVector3 x; 00280 ScePspFVector3 y; 00281 ScePspFVector3 z; 00282 } ScePspFMatrix3; 00283 00284 typedef union ScePspMatrix3 { 00285 ScePspFMatrix3 fm; 00286 ScePspIMatrix3 im; 00287 ScePspFVector3 fv[3]; 00288 ScePspIVector3 iv[3]; 00289 ScePspVector3 v[3]; 00290 /* SceULong128 qw[3];*/ /* Missing compiler support. */ 00291 float f[3][3]; 00292 int i[3][3]; 00293 } ScePspMatrix3; 00294 00295 /* 4D matrix types. */ 00296 typedef struct ScePspIMatrix4 { 00297 ScePspIVector4 x; 00298 ScePspIVector4 y; 00299 ScePspIVector4 z; 00300 ScePspIVector4 w; 00301 } ScePspIMatrix4 __attribute__((aligned(16))); 00302 00303 typedef struct ScePspIMatrix4Unaligned { 00304 ScePspIVector4 x; 00305 ScePspIVector4 y; 00306 ScePspIVector4 z; 00307 ScePspIVector4 w; 00308 } ScePspIMatrix4Unaligned; 00309 00310 typedef struct ScePspFMatrix4 { 00311 ScePspFVector4 x; 00312 ScePspFVector4 y; 00313 ScePspFVector4 z; 00314 ScePspFVector4 w; 00315 } ScePspFMatrix4 __attribute__((aligned(16))); 00316 00317 typedef struct ScePspFMatrix4Unaligned { 00318 ScePspFVector4 x; 00319 ScePspFVector4 y; 00320 ScePspFVector4 z; 00321 ScePspFVector4 w; 00322 } ScePspFMatrix4Unaligned; 00323 00324 typedef union ScePspMatrix4 { 00325 ScePspFMatrix4 fm; 00326 ScePspIMatrix4 im; 00327 ScePspFVector4 fv[4]; 00328 ScePspIVector4 iv[4]; 00329 ScePspVector4 v[4]; 00330 /* SceULong128 qw[4];*/ /* Missing compiler support. */ 00331 float f[4][4]; 00332 int i[4][4]; 00333 } ScePspMatrix4; 00334 00335 /* Quaternions. */ 00336 typedef struct ScePspFQuaternion { 00337 float x; 00338 float y; 00339 float z; 00340 float w; 00341 } ScePspFQuaternion __attribute__((aligned(16))); 00342 00343 typedef struct ScePspFQuaternionUnaligned { 00344 float x; 00345 float y; 00346 float z; 00347 float w; 00348 } ScePspFQuaternionUnaligned; 00349 00350 /* Colors and pixel formats. */ 00351 typedef struct ScePspFColor { 00352 float r; 00353 float g; 00354 float b; 00355 float a; 00356 } ScePspFColor __attribute__((aligned(16))); 00357 00358 typedef struct ScePspFColorUnaligned { 00359 float r; 00360 float g; 00361 float b; 00362 float a; 00363 } ScePspFColorUnaligned; 00364 00365 typedef unsigned int ScePspRGBA8888; 00366 typedef unsigned short ScePspRGBA4444; 00367 typedef unsigned short ScePspRGBA5551; 00368 typedef unsigned short ScePspRGB565; 00369 00370 /* Unions for converting between types. */ 00371 typedef union ScePspUnion32 { 00372 unsigned int ui; 00373 int i; 00374 unsigned short us[2]; 00375 short int s[2]; 00376 unsigned char uc[4]; 00377 char c[4]; 00378 float f; 00379 ScePspRGBA8888 rgba8888; 00380 ScePspRGBA4444 rgba4444[2]; 00381 ScePspRGBA5551 rgba5551[2]; 00382 ScePspRGB565 rgb565[2]; 00383 } ScePspUnion32; 00384 00385 typedef union ScePspUnion64 { 00386 SceULong64 ul; 00387 SceLong64 l; 00388 unsigned int ui[2]; 00389 int i[2]; 00390 unsigned short us[4]; 00391 short int s[4]; 00392 unsigned char uc[8]; 00393 char c[8]; 00394 float f[2]; 00395 ScePspSRect sr; 00396 ScePspSVector4 sv; 00397 ScePspRGBA8888 rgba8888[2]; 00398 ScePspRGBA4444 rgba4444[4]; 00399 ScePspRGBA5551 rgba5551[4]; 00400 ScePspRGB565 rgb565[4]; 00401 } ScePspUnion64; 00402 00403 typedef union ScePspUnion128 { 00404 /* SceULong128 qw;*/ /* Missing compiler support. */ 00405 /* SceULong128 uq;*/ 00406 /* SceLong128 q;*/ 00407 SceULong64 ul[2]; 00408 SceLong64 l[2]; 00409 unsigned int ui[4]; 00410 int i[4]; 00411 unsigned short us[8]; 00412 short int s[8]; 00413 unsigned char uc[16]; 00414 char c[16]; 00415 float f[4]; 00416 ScePspFRect fr; 00417 ScePspIRect ir; 00418 ScePspFVector4 fv; 00419 ScePspIVector4 iv; 00420 ScePspFQuaternion fq; 00421 ScePspFColor fc; 00422 ScePspRGBA8888 rgba8888[4]; 00423 ScePspRGBA4444 rgba4444[8]; 00424 ScePspRGBA5551 rgba5551[8]; 00425 ScePspRGB565 rgb565[8]; 00426 } ScePspUnion128 __attribute__((aligned(16))); 00427 00428 /* Date and time. */ 00429 typedef struct ScePspDateTime { 00430 unsigned short year; 00431 unsigned short month; 00432 unsigned short day; 00433 unsigned short hour; 00434 unsigned short minute; 00435 unsigned short second; 00436 unsigned int microsecond; 00437 } ScePspDateTime; 00438 00439 #ifdef __cplusplus 00440 } 00441 #endif 00442 00443 #endif /* _PSPTYPES_H_ */