/[gxemul]/upstream/0.4.4/src/include/misc.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /upstream/0.4.4/src/include/misc.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 35 - (hide annotations)
Mon Oct 8 16:21:26 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 6242 byte(s)
0.4.4
1 dpavlin 4 #ifndef MISC_H
2     #define MISC_H
3    
4     /*
5 dpavlin 34 * Copyright (C) 2003-2007 Anders Gavare. All rights reserved.
6 dpavlin 4 *
7     * Redistribution and use in source and binary forms, with or without
8     * modification, are permitted provided that the following conditions are met:
9     *
10     * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17     *
18     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21     * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28     * SUCH DAMAGE.
29     *
30     *
31 dpavlin 34 * $Id: misc.h,v 1.249 2006/12/30 13:31:01 debug Exp $
32 dpavlin 4 *
33     * Misc. definitions for gxemul.
34     */
35    
36    
37     #include <sys/types.h>
38     #include <inttypes.h>
39    
40     /*
41     * ../../config.h contains #defines set by the configure script. Some of these
42     * might reduce speed of the emulator, so don't enable them unless you
43     * need them.
44     */
45    
46     #include "../../config.h"
47    
48 dpavlin 24
49     #ifdef NO_C99_PRINTF_DEFINES
50     /*
51     * This is a SUPER-UGLY HACK which happens to work on some machines.
52     * The correct solution is to upgrade your compiler to C99.
53 dpavlin 4 */
54 dpavlin 24 #ifdef NO_C99_64BIT_LONGLONG
55 dpavlin 32 #define PRIi8 "i"
56 dpavlin 24 #define PRIi16 "i"
57     #define PRIi32 "i"
58     #define PRIi64 "lli"
59 dpavlin 32 #define PRIx8 "x"
60 dpavlin 24 #define PRIx16 "x"
61     #define PRIx32 "x"
62     #define PRIx64 "llx"
63     #else
64 dpavlin 32 #define PRIi8 "i"
65 dpavlin 24 #define PRIi16 "i"
66     #define PRIi32 "i"
67     #define PRIi64 "li"
68 dpavlin 32 #define PRIx8 "x"
69 dpavlin 24 #define PRIx16 "x"
70     #define PRIx32 "x"
71     #define PRIx64 "lx"
72     #endif
73     #endif
74 dpavlin 4
75    
76     #ifdef NO_MAP_ANON
77     #ifdef mmap
78     #undef mmap
79     #endif
80     #include <fcntl.h>
81     #include <stdlib.h>
82     #include <sys/mman.h>
83     static void *no_map_anon_mmap(void *addr, size_t len, int prot, int flags,
84     int nonsense_fd, off_t offset)
85     {
86     void *p;
87     int fd = open("/dev/zero", O_RDWR);
88     if (fd < 0) {
89     fprintf(stderr, "Could not open /dev/zero\n");
90     exit(1);
91     }
92    
93     printf("addr=%p len=%lli prot=0x%x flags=0x%x nonsense_fd=%i "
94     "offset=%16lli\n", addr, (long long) len, prot, flags,
95     nonsense_fd, (long long) offset);
96    
97     p = mmap(addr, len, prot, flags, fd, offset);
98    
99     printf("p = %p\n", p);
100    
101     /* TODO: Close the descriptor? */
102     return p;
103     }
104     #define mmap no_map_anon_mmap
105     #endif
106    
107    
108     struct cpu;
109     struct emul;
110     struct machine;
111     struct memory;
112    
113    
114 dpavlin 32 #define NO_BYTE_ORDER_OVERRIDE -1
115     #define EMUL_UNDEFINED_ENDIAN 0
116     #define EMUL_LITTLE_ENDIAN 1
117     #define EMUL_BIG_ENDIAN 2
118 dpavlin 4
119 dpavlin 22 #ifdef HOST_LITTLE_ENDIAN
120 dpavlin 30 #define LE16_TO_HOST(x) (x)
121 dpavlin 32 #define BE16_TO_HOST(x) ((((x) & 0xff00) >> 8) | (((x)&0xff) << 8))
122 dpavlin 30 #else
123 dpavlin 32 #define LE16_TO_HOST(x) ((((x) & 0xff00) >> 8) | (((x)&0xff) << 8))
124 dpavlin 30 #define BE16_TO_HOST(x) (x)
125     #endif
126    
127     #ifdef HOST_LITTLE_ENDIAN
128 dpavlin 22 #define LE32_TO_HOST(x) (x)
129 dpavlin 32 #define BE32_TO_HOST(x) ((((x) & 0xff000000) >> 24) | (((x)&0xff) << 24) | \
130 dpavlin 22 (((x) & 0xff0000) >> 8) | (((x) & 0xff00) << 8))
131     #else
132 dpavlin 32 #define LE32_TO_HOST(x) ((((x) & 0xff000000) >> 24) | (((x)&0xff) << 24) | \
133 dpavlin 22 (((x) & 0xff0000) >> 8) | (((x) & 0xff00) << 8))
134     #define BE32_TO_HOST(x) (x)
135     #endif
136 dpavlin 4
137 dpavlin 32 #ifdef HOST_LITTLE_ENDIAN
138     #define LE64_TO_HOST(x) (x)
139     #define BE64_TO_HOST(x) ( (((x) >> 56) & 0xff) + \
140     ((((x) >> 48) & 0xff) << 8) + \
141     ((((x) >> 40) & 0xff) << 16) + \
142     ((((x) >> 32) & 0xff) << 24) + \
143     ((((x) >> 24) & 0xff) << 32) + \
144     ((((x) >> 16) & 0xff) << 40) + \
145     ((((x) >> 8) & 0xff) << 48) + \
146     (((x) & 0xff) << 56) )
147     #else
148     #define BE64_TO_HOST(x) (x)
149     #define LE64_TO_HOST(x) ( (((x) >> 56) & 0xff) + \
150     ((((x) >> 48) & 0xff) << 8) + \
151     ((((x) >> 40) & 0xff) << 16) + \
152     ((((x) >> 32) & 0xff) << 24) + \
153     ((((x) >> 24) & 0xff) << 32) + \
154     ((((x) >> 16) & 0xff) << 40) + \
155     ((((x) >> 8) & 0xff) << 48) + \
156     (((x) & 0xff) << 56) )
157     #endif
158 dpavlin 30
159 dpavlin 32
160 dpavlin 4 /* Debug stuff: */
161     #define DEBUG_BUFSIZE 1024
162 dpavlin 22 #define DEBUG_INDENTATION 4
163 dpavlin 4
164    
165     /* dec_prom.c: */
166     int decstation_prom_emul(struct cpu *cpu);
167    
168    
169 dpavlin 32 /* dreamcast.c: */
170     void dreamcast_machine_setup(struct machine *);
171     int dreamcast_emul(struct cpu *cpu);
172    
173    
174 dpavlin 34 /* dreamcast_scramble.c: */
175     void dreamcast_descramble(char *from, char *to);
176    
177    
178 dpavlin 4 /* file.c: */
179     int file_n_executables_loaded(void);
180     void file_load(struct machine *machine, struct memory *mem,
181     char *filename, uint64_t *entrypointp,
182     int arch, uint64_t *gpp, int *byte_order, uint64_t *tocp);
183    
184    
185     /* main.c: */
186     void debug_indentation(int diff);
187     void debug(char *fmt, ...);
188     void fatal(char *fmt, ...);
189 dpavlin 10
190    
191     /* misc.c: */
192 dpavlin 4 unsigned long long mystrtoull(const char *s, char **endp, int base);
193 dpavlin 10 int mymkstemp(char *template);
194     #ifdef USE_STRLCPY_REPLACEMENTS
195     size_t mystrlcpy(char *dst, const char *src, size_t size);
196     size_t mystrlcat(char *dst, const char *src, size_t size);
197     #endif
198 dpavlin 4
199    
200     /* pc_bios.c: */
201 dpavlin 6 void pc_bios_simple_pmode_setup(struct cpu *cpu);
202     void pc_bios_init(struct cpu *cpu);
203 dpavlin 4 int pc_bios_emul(struct cpu *cpu);
204    
205    
206     /* ps2_bios.c: */
207     int playstation2_sifbios_emul(struct cpu *cpu);
208    
209    
210     /* useremul.c: */
211     void useremul_setup(struct cpu *, int, char **);
212     void useremul_syscall(struct cpu *cpu, uint32_t code);
213     void useremul_name_to_useremul(struct cpu *, char *name,
214     int *arch, char **machine_name, char **cpu_name);
215     void useremul_list_emuls(void);
216     void useremul_init(void);
217    
218    
219 dpavlin 10 /* yamon.c: */
220 dpavlin 32 void yamon_machine_setup(struct machine *machine, uint64_t env);
221     int yamon_emul(struct cpu *);
222 dpavlin 10
223    
224 dpavlin 4 #endif /* MISC_H */

  ViewVC Help
Powered by ViewVC 1.1.26