comparison src/Port.h @ 19:5e8e5083da94

brought in common and gba, fixed problems with outdated Makefile.am files in both of these packages
author Robert McIntyre <rlm@mit.edu>
date Sun, 04 Mar 2012 14:33:52 -0600
parents f9f4f1b99eed
children 48369c6aeaa0
comparison
equal deleted inserted replaced
18:ac56489c2ca6 19:5e8e5083da94
1 #ifndef VBA_PORT_H
2 #define VBA_PORT_H
3
4 #if _MSC_VER > 1000
5 #pragma once
6 #endif // _MSC_VER > 1000
7
8 #include <ctime>
9
10 #ifndef NULL
11 #define NULL 0
12 #endif
13
14 typedef unsigned char bool8;
15
16 #ifdef HAVE_STDINT_H
17 #include <stdint.h>
18
19 typedef int8_t int8;
20 typedef uint8_t uint8;
21 typedef int16_t int16;
22 typedef uint16_t uint16;
23 typedef int32_t int32;
24 typedef uint32_t uint32;
25 typedef int64_t int64;
26 typedef uint64_t uint64;
27 typedef intptr_t pint;
28
29 #else /* Don't have stdint.h */
30
31 #ifdef PTR_NOT_INT
32 typedef long pint;
33 #else /* pointer is int */
34 typedef int pint;
35 #endif /* PTR_NOT_INT */
36
37 /* FIXME: Refactor this by moving out the BORLAND part and unifying typedefs */
38 #ifndef WIN32
39 typedef unsigned char uint8;
40 typedef unsigned short uint16;
41 typedef signed char int8;
42 typedef short int16;
43 typedef int int32;
44 typedef unsigned int uint32;
45 # ifdef __GNUC__ /* long long is not part of ISO C++ */
46 __extension__ typedef long long int64;
47 __extension__ typedef unsigned long long uint64;
48 # else
49 typedef long long int64;
50 typedef unsigned long long uint64;
51 # endif
52 #else /* WIN32 */
53
54 # ifdef __BORLANDC__
55 # include <systypes.h>
56 # else
57
58 typedef unsigned char uint8;
59 typedef unsigned short uint16;
60 typedef signed char int8;
61 typedef short int16;
62
63 # ifndef WSAAPI
64 /* winsock2.h typedefs int32 as well. */
65 typedef long int32;
66 # endif
67
68 typedef unsigned int uint32;
69
70 # endif /* __BORLANDC__ */
71
72 typedef __int64 int64;
73 typedef unsigned __int64 uint64;
74
75 #endif /* WIN32 */
76 #endif /* HAVE_STDINT_H */
77
78 #ifndef WIN32
79
80 #ifndef PATH_MAX
81 #define PATH_MAX 1024
82 #endif
83
84 #define _MAX_DIR PATH_MAX
85 #define _MAX_DRIVE 1
86 #define _MAX_FNAME PATH_MAX
87 #define _MAX_EXT PATH_MAX
88 #define _MAX_PATH PATH_MAX
89
90 #define ZeroMemory(a, b) memset((a), 0, (b))
91
92 void _makepath(char *path, const char *drive, const char *dir,
93 const char *fname, const char *ext);
94 void _splitpath(const char *path, char *drive, char *dir, char *fname,
95 char *ext);
96 #else /* WIN32 */
97 #define strcasecmp stricmp
98 #define strncasecmp strnicmp
99 #endif
100
101 typedef uint8 u8;
102 typedef uint16 u16;
103 typedef uint32 u32;
104 typedef uint64 u64;
105 typedef int8 s8;
106 typedef int16 s16;
107 typedef int32 s32;
108 typedef int64 s64;
109
110 // for consistency
111 static inline u8 swap8(u8 v)
112 {
113 return v;
114 }
115
116 // swaps a 16-bit value
117 static inline u16 swap16(u16 v)
118 {
119 return (v<<8)|(v>>8);
120 }
121
122 // swaps a 32-bit value
123 static inline u32 swap32(u32 v)
124 {
125 return (v<<24)|((v<<8)&0xff0000)|((v>>8)&0xff00)|(v>>24);
126 }
127
128 #define READ8LE(x) \
129 *((u8 *)x)
130
131 #define WRITE8LE(x, v) \
132 *((u8 *)x) = (v)
133
134 #ifdef WORDS_BIGENDIAN
135 #if defined(__GNUC__) && defined(__ppc__)
136
137 #define READ16LE(base) \
138 ({ unsigned short lhbrxResult; \
139 __asm__("lhbrx %0, 0, %1" : "=r" (lhbrxResult) : "r" (base) : "memory"); \
140 lhbrxResult; })
141
142 #define READ32LE(base) \
143 ({ unsigned long lwbrxResult; \
144 __asm__("lwbrx %0, 0, %1" : "=r" (lwbrxResult) : "r" (base) : "memory"); \
145 lwbrxResult; })
146
147 #define WRITE16LE(base, value) \
148 __asm__("sthbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory")
149
150 #define WRITE32LE(base, value) \
151 __asm__("stwbrx %0, 0, %1" : : "r" (value), "r" (base) : "memory")
152
153 #else
154 #define READ16LE(x) \
155 swap16(*((u16 *)(x)))
156 #define READ32LE(x) \
157 swap32(*((u32 *)(x)))
158 #define WRITE16LE(x, v) \
159 *((u16 *)x) = swap16((v))
160 #define WRITE32LE(x, v) \
161 *((u32 *)x) = swap32((v))
162 #endif
163 #else
164 #define READ16LE(x) \
165 *((u16 *)x)
166 #define READ32LE(x) \
167 *((u32 *)x)
168 #define WRITE16LE(x, v) \
169 *((u16 *)x) = (v)
170 #define WRITE32LE(x, v) \
171 *((u32 *)x) = (v)
172 #endif
173
174 #ifndef CTASSERT
175 #define CTASSERT(x) typedef char __assert ## y[(x) ? 1 : -1];
176 #endif
177
178 #endif // VBA_PORT_H