/[gxemul]/trunk/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

Contents of /trunk/src/include/misc.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (show annotations)
Mon Oct 8 16:21:34 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 6807 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.1497 2007/03/18 03:41:36 debug Exp $
20070224	Minor update to the initialization of the ns16550 in
		machine_walnut.c, to allow that machine type to boot with the
		new interrupt system (although it is still a dummy machine).
		Adding a wdc at 0x14000000 to machine_landisk.c, and fixing
		the SCIF serial interrupts of the SH4 cpu enough to get
		NetBSD/landisk booting from a disk image :-)  Adding a
		preliminary install instruction skeleton to guestoses.html.
20070306	Adding SH-IPL+G PROM emulation, and also passing the "end"
		symbol in r5 on bootup, for Landisk emulation. This is enough
		to get OpenBSD/landisk to install :)  Adding a preliminary
		install instruction skeleton to the documentation. SuperH
		emulation is still shaky, though :-/
20070307	Fixed a strangeness in memory_sh.c (read/write was never
		returned for any page). (Unknown whether this fixes any actual
		problems, though.)
20070308	dev_ram.c fix: invalidate code translations on writes to
		RAM, emulated as separate devices. Linux/dreamcast gets
		further in the boot process than before, but still bugs out
		in userland.
		Fixing bugs in the "stc.l gbr,@-rN" and "ldc.l @rN+,gbr" SuperH 
		instructions (they should NOT check the MD bit), allowing the
		Linux/dreamcast Live CD to reach userland correctly :-)
20070310	Changing the cpu name "Alpha" in src/useremul.c to "21364" to
		unbreak userland syscall emulation of FreeBSD/Alpha binaries.
20070314	Applying a patch from Michael Yaroslavtsev which fixes the
		previous Linux lib64 patch to the configure script.
20070315	Adding a (dummy) sun4v machine type, and SPARC T1 cpu type.
20070316	Creating a new directory, src/disk, and moving diskimage.c
		to it. Separating out bootblock loading stuff from emul.c into
		new files in src/disk.
		Adding some more SPARC registers.
20070318	Preparing/testing for a minirelease, 0.4.4.1.

==============  RELEASE 0.4.4.1  ==============


1 #ifndef MISC_H
2 #define MISC_H
3
4 /*
5 * Copyright (C) 2003-2007 Anders Gavare. All rights reserved.
6 *
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 * $Id: misc.h,v 1.251 2007/03/16 14:45:30 debug Exp $
32 *
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
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 */
54 #ifdef NO_C99_64BIT_LONGLONG
55 #define PRIi8 "i"
56 #define PRIi16 "i"
57 #define PRIi32 "i"
58 #define PRIi64 "lli"
59 #define PRIx8 "x"
60 #define PRIx16 "x"
61 #define PRIx32 "x"
62 #define PRIx64 "llx"
63 #else
64 #define PRIi8 "i"
65 #define PRIi16 "i"
66 #define PRIi32 "i"
67 #define PRIi64 "li"
68 #define PRIx8 "x"
69 #define PRIx16 "x"
70 #define PRIx32 "x"
71 #define PRIx64 "lx"
72 #endif
73 #endif
74
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 #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
119 #ifdef HOST_LITTLE_ENDIAN
120 #define LE16_TO_HOST(x) (x)
121 #define BE16_TO_HOST(x) ((((x) & 0xff00) >> 8) | (((x)&0xff) << 8))
122 #else
123 #define LE16_TO_HOST(x) ((((x) & 0xff00) >> 8) | (((x)&0xff) << 8))
124 #define BE16_TO_HOST(x) (x)
125 #endif
126
127 #ifdef HOST_LITTLE_ENDIAN
128 #define LE32_TO_HOST(x) (x)
129 #define BE32_TO_HOST(x) ((((x) & 0xff000000) >> 24) | (((x)&0xff) << 24) | \
130 (((x) & 0xff0000) >> 8) | (((x) & 0xff00) << 8))
131 #else
132 #define LE32_TO_HOST(x) ((((x) & 0xff000000) >> 24) | (((x)&0xff) << 24) | \
133 (((x) & 0xff0000) >> 8) | (((x) & 0xff00) << 8))
134 #define BE32_TO_HOST(x) (x)
135 #endif
136
137 #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
159
160 /* Debug stuff: */
161 #define DEBUG_BUFSIZE 1024
162 #define DEBUG_INDENTATION 4
163
164
165 /* bootblock.c: */
166 int load_bootblock(struct machine *m, struct cpu *cpu,
167 int *n_loadp, char ***load_namesp);
168
169
170 /* bootblock_apple.c: */
171 int apple_load_bootblock(struct machine *m, struct cpu *cpu,
172 int disk_id, int disk_type, int *n_loadp, char ***load_namesp);
173
174
175 /* bootblock_iso9660.c: */
176 int iso_load_bootblock(struct machine *m, struct cpu *cpu,
177 int disk_id, int disk_type, int iso_type, unsigned char *buf,
178 int *n_loadp, char ***load_namesp);
179
180
181 /* dec_prom.c: */
182 int decstation_prom_emul(struct cpu *cpu);
183
184
185 /* dreamcast.c: */
186 void dreamcast_machine_setup(struct machine *);
187 int dreamcast_emul(struct cpu *cpu);
188
189
190 /* dreamcast_scramble.c: */
191 void dreamcast_descramble(char *from, char *to);
192
193
194 /* file.c: */
195 int file_n_executables_loaded(void);
196 void file_load(struct machine *machine, struct memory *mem,
197 char *filename, uint64_t *entrypointp,
198 int arch, uint64_t *gpp, int *byte_order, uint64_t *tocp);
199
200
201 /* main.c: */
202 void debug_indentation(int diff);
203 void debug(char *fmt, ...);
204 void fatal(char *fmt, ...);
205
206
207 /* misc.c: */
208 unsigned long long mystrtoull(const char *s, char **endp, int base);
209 int mymkstemp(char *template);
210 #ifdef USE_STRLCPY_REPLACEMENTS
211 size_t mystrlcpy(char *dst, const char *src, size_t size);
212 size_t mystrlcat(char *dst, const char *src, size_t size);
213 #endif
214
215
216 /* pc_bios.c: */
217 void pc_bios_simple_pmode_setup(struct cpu *cpu);
218 void pc_bios_init(struct cpu *cpu);
219 int pc_bios_emul(struct cpu *cpu);
220
221
222 /* ps2_bios.c: */
223 int playstation2_sifbios_emul(struct cpu *cpu);
224
225
226 /* sh_ipl_g.c: */
227 void sh_ipl_g_emul_init(struct machine *machine);
228 int sh_ipl_g_emul(struct cpu *);
229
230
231 /* useremul.c: */
232 void useremul_setup(struct cpu *, int, char **);
233 void useremul_syscall(struct cpu *cpu, uint32_t code);
234 void useremul_name_to_useremul(struct cpu *, char *name,
235 int *arch, char **machine_name, char **cpu_name);
236 void useremul_list_emuls(void);
237 void useremul_init(void);
238
239
240 /* yamon.c: */
241 void yamon_machine_setup(struct machine *machine, uint64_t env);
242 int yamon_emul(struct cpu *);
243
244
245 #endif /* MISC_H */

  ViewVC Help
Powered by ViewVC 1.1.26