/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (hide annotations)
Mon Oct 8 16:21:34 2007 UTC (16 years, 7 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 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 36 * $Id: misc.h,v 1.251 2007/03/16 14:45:30 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 dpavlin 36 /* 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 dpavlin 4 /* dec_prom.c: */
182     int decstation_prom_emul(struct cpu *cpu);
183    
184    
185 dpavlin 32 /* dreamcast.c: */
186     void dreamcast_machine_setup(struct machine *);
187     int dreamcast_emul(struct cpu *cpu);
188    
189    
190 dpavlin 34 /* dreamcast_scramble.c: */
191     void dreamcast_descramble(char *from, char *to);
192    
193    
194 dpavlin 4 /* 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 dpavlin 10
206    
207     /* misc.c: */
208 dpavlin 4 unsigned long long mystrtoull(const char *s, char **endp, int base);
209 dpavlin 10 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 dpavlin 4
215    
216     /* pc_bios.c: */
217 dpavlin 6 void pc_bios_simple_pmode_setup(struct cpu *cpu);
218     void pc_bios_init(struct cpu *cpu);
219 dpavlin 4 int pc_bios_emul(struct cpu *cpu);
220    
221    
222     /* ps2_bios.c: */
223     int playstation2_sifbios_emul(struct cpu *cpu);
224    
225    
226 dpavlin 36 /* 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 dpavlin 4 /* 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 dpavlin 10 /* yamon.c: */
241 dpavlin 32 void yamon_machine_setup(struct machine *machine, uint64_t env);
242     int yamon_emul(struct cpu *);
243 dpavlin 10
244    
245 dpavlin 4 #endif /* MISC_H */

  ViewVC Help
Powered by ViewVC 1.1.26