/[gxemul]/trunk/doc/intro.html
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/doc/intro.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 38 - (hide annotations)
Mon Oct 8 16:21:53 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/html
File size: 14531 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.1515 2007/04/14 05:39:46 debug Exp $
20070324	Adding a "--debug" option to the configure script, to disable
		optimizations in unstable development builds.
		Moving out SCSI-specific stuff from diskimage.c into a new
		diskimage_scsicmd.c.
		Applying Hĺvard Eidnes' patch for SCSICDROM_READ_DISKINFO and
		SCSICDROM_READ_TRACKINFO. (Not really tested yet.)
		Implementing disk image "overlays" (to allow simple roll-back
		to previous disk state). Adding a 'V' disk flag for this, and
		updating the man page and misc.html.
20070325	Stability fix to cpu_dyntrans.c, when multiple physical pages
		share the same initial table entry. (The ppp == NULL check
		should be physpage_ofs == 0.) Bug found by analysing GXemul
		against a version patched for Godson.
		Fixing a second occurance of the same problem (also in
		cpu_dyntrans.c).
		Fixing a MAJOR physical page leak in cpu_dyntrans.c; pages
		weren't _added_ to the set of translated pages, they _replaced_
		all previous pages. It's amazing that this bug has been able
		to live for this long. (Triggered when emulating >128MB RAM.)
20070326	Removing the GDB debugging stub support; it was too hackish
		and ugly.
20070328	Moving around some native code generation skeleton code.
20070329	The -lm check in the configure script now also checks for sin()
		in addition to sqrt(). (Thanks to Nigel Horne for noticing that
		sqrt was not enough on Fedora Core 6.) (Not verified yet.)
20070330	Fixing an indexing bug in dev_sh4.c, found by using gcc version
		4.3.0 20070323.
20070331	Some more experimentation with native code generation.
20070404	Attempting to fix some more SH4 SCIF interrupt bugs; rewriting
		the SH interrupt assertion/deassertion code somewhat.
20070410	Splitting src/file.c into separate files in src/file/.
		Cleanup: Removing the dummy TS7200, Walnut, PB1000, and
		Meshcube emulation modes, and dev_epcom and dev_au1x00.
		Removing the experimental CHIP8/RCA180x code; it wasn't really
		working much lately, anyway. It was fun while it lasted.
		Also removing the experimental Transputer CPU support.
20070412	Moving the section about how the dynamic translation system
		works from intro.html to a separate translation.html file.
		Minor SH fixes; attempting to get OpenBSD/landisk to run
		without randomly bugging out, but no success yet.
20070413	SH SCI (serial bit interface) should now work together with a
		(new) RS5C313 clock device (for Landisk emulation).
20070414	Moving Redhat/MIPS down from supported to experimental, in
		guestoses.html.
		Preparing for a new release; doing some regression testing etc.

==============  RELEASE 0.4.5  ==============


1 dpavlin 12 <html><head><title>Gavare's eXperimental Emulator:&nbsp;&nbsp;&nbsp;Introduction</title>
2     <meta name="robots" content="noarchive,nofollow,noindex"></head>
3 dpavlin 4 <body bgcolor="#f8f8f8" text="#000000" link="#4040f0" vlink="#404040" alink="#ff0000">
4     <table border=0 width=100% bgcolor="#d0d0d0"><tr>
5     <td width=100% align=center valign=center><table border=0 width=100%><tr>
6     <td align="left" valign=center bgcolor="#d0efff"><font color="#6060e0" size="6">
7 dpavlin 22 <b>Gavare's eXperimental Emulator:</b></font><br>
8 dpavlin 4 <font color="#000000" size="6"><b>Introduction</b>
9     </font></td></tr></table></td></tr></table><p>
10 dpavlin 2
11     <!--
12    
13 dpavlin 38 $Id: intro.html,v 1.108 2007/04/12 16:57:22 debug Exp $
14 dpavlin 2
15 dpavlin 34 Copyright (C) 2003-2007 Anders Gavare. All rights reserved.
16 dpavlin 2
17     Redistribution and use in source and binary forms, with or without
18     modification, are permitted provided that the following conditions are met:
19    
20     1. Redistributions of source code must retain the above copyright
21     notice, this list of conditions and the following disclaimer.
22     2. Redistributions in binary form must reproduce the above copyright
23     notice, this list of conditions and the following disclaimer in the
24     documentation and/or other materials provided with the distribution.
25     3. The name of the author may not be used to endorse or promote products
26     derived from this software without specific prior written permission.
27    
28     THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
29     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31     ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
32     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34     OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38     SUCH DAMAGE.
39    
40     -->
41    
42     <a href="./">Back to the index</a>
43    
44     <p><br>
45     <h2>Introduction</h2>
46    
47     <p>
48 dpavlin 22 <table border="0" width="99%"><tr><td valign="top" align="left">
49 dpavlin 2 <ul>
50     <li><a href="#overview">Overview</a>
51 dpavlin 4 <li><a href="#free">Is GXemul Free software?</a>
52 dpavlin 2 <li><a href="#build">How to compile/build the emulator</a>
53 dpavlin 6 <li><a href="#run">How to run the emulator</a>
54 dpavlin 22 <li><a href="#cpus">Which processor architectures does GXemul emulate?</a>
55 dpavlin 24 <li><a href="#hosts">Which host architectures are supported?</a>
56 dpavlin 2 <li><a href="#accuracy">Emulation accuracy</a>
57     <li><a href="#emulmodes">Which machines does GXemul emulate?</a>
58     </ul>
59 dpavlin 22 </td><td valign="center" align="center">
60     <a href="20050317-example.png"><img src="20050317-example_small.png"></a>
61     <p>NetBSD/pmax 1.6.2 with X11<br>running in GXemul</td></tr></table>
62 dpavlin 2
63    
64    
65    
66     <p><br>
67     <a name="overview"></a>
68     <h3>Overview:</h3>
69    
70 dpavlin 14 GXemul is an experimental instruction-level machine emulator. Several
71     emulation modes are available. In some modes, processors and surrounding
72     hardware components are emulated well enough to let unmodified operating
73     systems (e.g. NetBSD) run as if they were running on a real machine.
74 dpavlin 2
75 dpavlin 32 <p>Devices and processors are not simulated with 100% accuracy. They are
76     only ``faked'' well enough to allow guest operating systems to run without
77     complaining too much. Still, the emulator could be of interest for
78     academic research and experiments, such as when learning how to write
79     operating system code.
80 dpavlin 12
81 dpavlin 22 <p>The emulator is written in C, does not depend on third-party libraries,
82     and should compile and run on most 64-bit and 32-bit Unix-like systems.
83 dpavlin 2
84 dpavlin 10 <p>The emulator contains code which tries to emulate the workings of CPUs
85     and surrounding hardware found in real machines, but it does not contain
86     any ROM code. You will need some form of program (in binary form) to run
87     in the emulator. For many emulation modes, PROM calls are handled by the
88 dpavlin 2 emulator itself, so you do not need to use any ROM image at all.
89    
90 dpavlin 10 <p>You can use pre-compiled kernels (for example NetBSD kernels, or
91     Linux), or other programs that are in binary format, and in some cases
92     even actual ROM images. A couple of different file formats are supported
93     (ELF, a.out, ECOFF, SREC, and raw binaries).
94 dpavlin 2
95 dpavlin 10 <p>If you do not have a kernel as a separate file, but you have a bootable
96 dpavlin 6 disk image, then it is sometimes possible to boot directly from that
97 dpavlin 34 image. (This works for example with DECstation emulation, Dreamcast
98     emulation, or when booting from generic ISO9660 CDROM images if the
99     kernel is included in the image as a plain file.)
100 dpavlin 2
101 dpavlin 32 <p>Thanks to (in no specific order) Joachim Buss, Olivier Houchard, Juli
102     Mallett, Juan Romero Pardines, Alec Voropay, Göran Weinholt, Alexander
103     Yurchenko, and everyone else who has provided me with feedback.
104 dpavlin 2
105    
106    
107 dpavlin 6
108    
109 dpavlin 10
110    
111 dpavlin 2 <p><br>
112     <a name="free"></a>
113 dpavlin 4 <h3>Is GXemul Free software?</h3>
114 dpavlin 2
115 dpavlin 6 Yes. I have released GXemul under a Free license. The code in GXemul is
116     Copyrighted software, it is <i>not</i> public domain. (If this is
117     confusing to you, you might want to read up on the definitions of the
118     four freedoms associated with Free software, <a
119     href="http://www.gnu.org/philosophy/free-sw.html">http://www.gnu.org/philosophy/free-sw.html</a>.)
120 dpavlin 2
121 dpavlin 12 <p>The code I have written is released under a 3-clause BSD-style license
122     (or "revised BSD-style" if one wants to use <a
123     href="http://www.gnu.org/philosophy/bsd.html">GNU jargon</a>). Apart from
124     the code I have written, some files are copied from other sources such as
125     NetBSD, for example header files containing symbolic names of bitfields in
126     device registers. They are also covered by similar licenses, but with some
127     additional clauses. The main point, however, is that the licenses require
128     that the original Copyright and license terms are included when you make a
129     copy or modification.
130 dpavlin 2
131 dpavlin 12 <p>If you plan to redistribute GXemul <i>without</i> supplying the source
132     code, then you need to comply with each individual source file some other
133     way, for example by writing additional documentation containing copyright
134     notes. I have not done this, since I do not plan on making distributions
135     without source code. You need to check all individual files for details.
136     The "easiest way out" if you plan to redistribute code from GXemul is, of
137     course, to let it remain open source and simply supply the source code.
138 dpavlin 2
139 dpavlin 22 <p>In case you want to reuse parts of GXemul, but you need to do that
140     under a different license (e.g. the GPL), then contact me and I might
141     re-license/dual-license files on a case-by-case basis.
142 dpavlin 2
143    
144    
145    
146 dpavlin 12
147 dpavlin 2 <p><br>
148     <a name="build"></a>
149     <h3>How to compile/build the emulator:</h3>
150    
151     Uncompress the .tar.gz distribution file, and run
152     <pre>
153     $ <b>./configure</b>
154     $ <b>make</b>
155     </pre>
156    
157 dpavlin 22 <p>This should work on most Unix-like systems. GXemul does not require any
158     specific libraries to build, however, if you build on a system which does
159     not have X11 libraries installed, some functionality will be lost.
160 dpavlin 2
161 dpavlin 12 <p>The emulator's performance is highly dependent on both runtime settings
162 dpavlin 2 and on compiler settings, so you might want to experiment with different
163 dpavlin 20 CC and CFLAGS environment variable values. For example, on an AMD Athlon
164 dpavlin 24 host, you might want to try setting <tt>CFLAGS</tt> to <tt>-march=athlon</tt>
165     before running <tt>configure</tt>.
166 dpavlin 2
167    
168 dpavlin 6
169    
170    
171    
172    
173     <p><br>
174     <a name="run"></a>
175     <h3>How to run the emulator:</h3>
176    
177     Once you have built GXemul, running it should be rather straight-forward.
178     Running <tt><b>gxemul</b></tt> without arguments (or with the
179     <b><tt>-h</tt></b> or <b><tt>-H</tt></b> command line options) will
180     display a help message.
181    
182 dpavlin 2 <p>
183 dpavlin 6 To get some ideas about what is possible to run in the emulator, please
184     read the section about <a href="guestoses.html">installing "guest"
185     operating systems</a>. If you are interested in using the emulator to
186     develop code on your own, then you should also read the section about
187     <a href="experiments.html#hello">Hello World</a>.
188    
189     <p>
190 dpavlin 2 To exit the emulator, type CTRL-C to enter the
191 dpavlin 6 single-step debugger, and then type <tt><b>quit</b></tt>.
192 dpavlin 2
193 dpavlin 4 <p>
194     If you are starting an emulation by entering settings directly on the
195 dpavlin 6 command line, and you are not using the <tt><b>-x</b></tt> option, then all
196 dpavlin 4 terminal input and output will go to the main controlling terminal.
197     CTRL-C is used to break into the debugger, so in order to send CTRL-C to
198     the running (emulated) program, you may use CTRL-B.
199 dpavlin 6 (This should be a reasonable compromise to allow the emulator to be usable
200     even on systems without X Windows.)
201 dpavlin 2
202 dpavlin 4 <p>
203 dpavlin 6 There is no way to send an actual CTRL-B to the emulated program, when
204     typing in the main controlling terminal window. The solution is to either
205     use <a href="configfiles.html">configuration files</a>, or use
206     <tt><b>-x</b></tt>. Both these solutions cause new xterms to be opened for
207     each emulated serial port that is written to. CTRL-B and CTRL-C both have
208     their original meaning in those xterm windows.
209 dpavlin 2
210    
211    
212    
213 dpavlin 4
214 dpavlin 2 <p><br>
215     <a name="cpus"></a>
216 dpavlin 22 <h3>Which processor architectures does GXemul emulate?</h3>
217 dpavlin 2
218 dpavlin 24 The architectures that are emulated well enough to let at least one
219 dpavlin 32 guest operating system run (per architecture) are ARM, MIPS, PowerPC,
220     and SuperH.
221 dpavlin 2
222 dpavlin 34 <p>Please read the page about <a href="guestoses.html">guest operating
223     systems</a> for more information about the machines and operating systems
224     that can be considered "working" in the emulator.
225 dpavlin 2
226    
227    
228 dpavlin 14
229 dpavlin 32
230 dpavlin 34
231 dpavlin 24 <p><br>
232     <a name="hosts"></a>
233     <h3>Which host architectures are supported?</h3>
234 dpavlin 2
235 dpavlin 32 GXemul should compile and run on any modern host architecture (64-bit or
236     32-bit word-length).
237 dpavlin 2
238 dpavlin 38 <p>Note: The <a href="translation.html">dynamic translation</a> engine
239     does <i>not</i> require backends for native code generation to be written
240     for each individual host architecture; the intermediate representation
241     that the dyntrans system uses can be executed on any host architecture.
242 dpavlin 6
243 dpavlin 2
244    
245    
246 dpavlin 32
247 dpavlin 24 <p><br>
248 dpavlin 2 <a name="accuracy"></a>
249     <h3>Emulation accuracy:</h3>
250    
251 dpavlin 6 GXemul is an instruction-level emulator; things that would happen in
252 dpavlin 24 several steps within a real CPU are not taken into account (e.g. pipe-line
253 dpavlin 6 stalls or out-of-order execution). Still, instruction-level accuracy seems
254     to be enough to be able to run complete guest operating systems inside the
255 dpavlin 2 emulator.
256    
257 dpavlin 24 <p>The existance of instruction and data caches is "faked" to let
258     operating systems think that they are there, but for all practical
259     purposes, these caches are non-working.
260 dpavlin 2
261 dpavlin 32 <p>The emulator is in general <i>not</i> timing-accurate, neither at the
262     instruction level nor on any higher level. An attempt is made to let
263     emulated clocks run at the same speed as the host (i.e. an emulated timer
264     running at 100 Hz will interrupt around 100 times per real second), but
265     since the host speed may vary, e.g. because of other running processes,
266     there is no guarantee as to how many instructions will be executed in
267     each of these 100 Hz cycles.
268 dpavlin 2
269 dpavlin 32 <p>If the host is very slow, the emulated clocks might even lag behind
270     the real-world clock.
271 dpavlin 2
272    
273 dpavlin 6
274    
275 dpavlin 20
276    
277 dpavlin 2 <p><br>
278     <a name="emulmodes"></a>
279     <h3>Which machines does GXemul emulate?</h3>
280    
281 dpavlin 4 A few different machine types are emulated. The following machine types
282     are emulated well enough to run at least one "guest OS":
283 dpavlin 2
284     <p>
285     <ul>
286 dpavlin 24 <li><b><u>ARM</u></b>
287 dpavlin 14 <ul>
288 dpavlin 28 <li><b>CATS</b> (<a href="guestoses.html#netbsdcatsinstall">NetBSD/cats</a>,
289     <a href="guestoses.html#openbsdcatsinstall">OpenBSD/cats</a>)
290     <li><b>IQ80321</b> (<a href="guestoses.html#netbsdevbarminstall">NetBSD/evbarm</a>)
291 dpavlin 30 <li><b>NetWinder</b> (<a href="guestoses.html#netbsdnetwinderinstall">NetBSD/netwinder</a>)
292 dpavlin 14 </ul>
293     <p>
294 dpavlin 24 <li><b><u>MIPS</u></b>
295 dpavlin 14 <ul>
296 dpavlin 28 <li><b>DECstation 5000/200</b> (<a href="guestoses.html#netbsdpmaxinstall">NetBSD/pmax</a>,
297     <a href="guestoses.html#openbsdpmaxinstall">OpenBSD/pmax</a>,
298     <a href="guestoses.html#ultrixinstall">Ultrix</a>,
299     <a href="guestoses.html#declinux">Linux/DECstation</a>,
300     <a href="guestoses.html#sprite">Sprite</a>)
301     <li><b>Acer Pica-61</b> (<a href="guestoses.html#netbsdarcinstall">NetBSD/arc</a>)
302 dpavlin 32 <li><b>NEC MobilePro 770, 780, 800, 880</b> (<a href="guestoses.html#netbsdhpcmipsinstall">NetBSD/hpcmips</a>)
303 dpavlin 28 <li><b>Cobalt</b> (<a href="guestoses.html#netbsdcobaltinstall">NetBSD/cobalt</a>)
304 dpavlin 34 <li><b>Malta</b> (<a href="guestoses.html#netbsdevbmipsinstall">NetBSD/evbmips</a>, Linux/Malta <font color="#0000e0">(<super>*1</super>)</font>)
305 dpavlin 30 <li><b>Algorithmics P5064</b> (<a href="guestoses.html#netbsdalgorinstall">NetBSD/algor</a>)
306 dpavlin 34 <li><b>SGI O2 (aka IP32)</b> <font color="#0000e0">(<super>*2</super>)</font>
307 dpavlin 28 (<a href="guestoses.html#netbsdsgimips">NetBSD/sgi</a>)
308 dpavlin 14 </ul>
309 dpavlin 20 <p>
310     <li><b><u>PowerPC</u></b>
311     <ul>
312 dpavlin 28 <li><b>IBM 6050/6070 (PReP, PowerPC Reference Platform)</b> (<a href="guestoses.html#netbsdprepinstall">NetBSD/prep</a>)
313 dpavlin 34 <li><b>MacPPC (generic "G4" Macintosh)</b> (<a href="guestoses.html#netbsdmacppcinstall">NetBSD/macppc</a>)
314 dpavlin 20 </ul>
315 dpavlin 32 <p>
316     <li><b><u>SuperH</u></b>
317     <ul>
318 dpavlin 36 <li><b>Sega Dreamcast</b> (<a href="dreamcast.html#netbsd_generic_md">NetBSD/dreamcast</a>, <a href="dreamcast.html#linux_live_cd">Linux/dreamcast</a>)
319 dpavlin 32 </ul>
320 dpavlin 2 </ul>
321    
322 dpavlin 32 <p>
323     <small><font color="#0000e0">(<super>*1</super>)</font> =
324 dpavlin 34 Linux/Malta may be run as a guest OS, however I have not yet found any stable
325     URL to pre-compiled Linux/Malta kernels. Thus, Linux/Malta emulation is not
326     tested for every release of the emulator; sometimes it works, sometimes
327     it doesn't.</small>
328    
329 dpavlin 32 <br><small><font color="#0000e0">(<super>*2</super>)</font> =
330 dpavlin 34 SGI O2 emulation is enough for root-on-nfs, but not for disk boot.</small>
331 dpavlin 22
332 dpavlin 34
333 dpavlin 10 <p>There is code in GXemul for emulation of many other machine types; the
334     degree to which these work range from almost being able to run a complete
335     OS, to almost completely unsupported (perhaps just enough support to
336     output a few boot messages via serial console).
337 dpavlin 2
338 dpavlin 10 <p>In addition to emulating real machines, there is also a "test-machine".
339     A test-machine consists of one or more CPUs and a few experimental devices
340     such as:
341 dpavlin 2
342     <p>
343     <ul>
344     <li>a console I/O device (putchar() and getchar()...)
345     <li>an inter-processor communication device, for SMP experiments
346     <li>a very simple linear framebuffer device (for graphics output)
347 dpavlin 32 <li>a simple disk controller
348 dpavlin 12 <li>a simple ethernet controller
349 dpavlin 32 <li>a real-time clock device
350 dpavlin 2 </ul>
351    
352 dpavlin 10 <p>This mode is useful if you wish to run experimental code, but do not
353 dpavlin 2 wish to target any specific real-world machine type, for example for
354     educational purposes.
355    
356 dpavlin 10 <p>You can read more about these experimental devices <a
357     href="experiments.html#expdevices">here</a>.
358 dpavlin 2
359    
360    
361    
362    
363    
364     </body>
365     </html>

  ViewVC Help
Powered by ViewVC 1.1.26