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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 39 - (hide annotations)
Mon Oct 8 16:22:02 2007 UTC (16 years, 8 months ago) by dpavlin
File MIME type: text/html
File size: 14531 byte(s)
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