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

Contents of /trunk/doc/misc.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 18 - (show annotations)
Mon Oct 8 16:19:11 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/html
File size: 19691 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.1004 2005/10/27 14:01:10 debug Exp $
20051011        Passing -A as the default boot arg for CATS (works fine with
                OpenBSD/cats).
20051012	Fixing the VGA cursor offset bug, and speeding up framebuffer
		redraws if character cells contain the same thing as during
		the last redraw.
20051013	Adding a slow strd ARM instruction hack.
20051017	Minor updates: Adding a dummy i80321 Verde controller (for
		XScale emulation), fixing the disassembly of the ARM "ldrd"
		instruction, adding "support" for less-than-4KB pages for ARM
		(by not adding them to translation tables).
20051020	Continuing on some HPCarm stuff. A NetBSD/hpcarm kernel prints
		some boot messages on an emulated Jornada 720.
		Making dev_ram work better with dyntrans (speeds up some things
		quite a bit).
20051021	Automatically generating some of the most common ARM load/store
		multiple instructions.
20051022	Better statistics gathering for the ARM load/store multiple.
		Various other dyntrans and device updates.
20051023	Various minor updates.
20051024	Continuing; minor device and dyntrans fine-tuning. Adding the
		first "reasonable" instruction combination hacks for ARM (the
		cores of NetBSD/cats' memset and memcpy).
20051025	Fixing a dyntrans-related bug in dev_vga. Also changing the
		dyntrans low/high access notification to only be updated on
		writes, not reads. Hopefully it will be enough. (dev_vga in
		charcell mode now seems to work correctly with both reads and
		writes.)
		Experimenting with gathering dyntrans statistics (which parts
		of emulated RAM that are actually executed), and adding
		instruction combination hacks for cache cleaning and a part of
		NetBSD's scanc() function.
20051026	Adding a bitmap for ARM emulation which indicates if a page is
		(specifically) user accessible; loads and stores with the t-
		flag set can now use the translation arrays, which results in
		a measurable speedup.
20051027	Dyntrans updates; adding an extra bitmap array for 32-bit
		emulation modes, speeding up the check whether a physical page
		has any code translations or not (O(n) -> O(1)). Doing a
		similar reduction of O(n) to O(1) by avoiding the scan through
		the translation entries on a translation update (32-bit mode
		only).
		Various other minor hacks.
20051029	Quick release, without any testing at all.

==============  RELEASE 0.3.6.2  ==============


1 <html><head><title>Gavare's eXperimental Emulator:&nbsp;&nbsp;&nbsp;Miscellaneous</title>
2 <meta name="robots" content="noarchive,nofollow,noindex"></head>
3 <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 <b>Gavare's eXperimental Emulator:&nbsp;&nbsp;&nbsp;</b></font>
8 <font color="#000000" size="6"><b>Miscellaneous</b>
9 </font></td></tr></table></td></tr></table><p>
10
11 <!--
12
13 $Id: misc.html,v 1.54 2005/10/29 07:06:26 debug Exp $
14
15 Copyright (C) 2003-2005 Anders Gavare. All rights reserved.
16
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
43 <a href="./">Back to the index</a>
44
45 <p><br>
46 <h2>Miscellaneous</h2>
47
48 <p>
49 <ul>
50 <li><a href="#networking">Networking</a>
51 <li><a href="#devel">Writing operating system code, or
52 developing firmware, using GXemul</a>
53 <li><a href="#compilercontruct">Using GXemul in compiler contruction courses</a>
54 <li><a href="#disk">How to start the emulator with a disk image</a>
55 <li><a href="#largeimages">How to extract large gzipped disk images</a>
56 <li><a href="#userland">Running userland binaries</a>
57 <li><a href="#promdump">Using a PROM dump from a real machine</a>
58 </ul>
59
60
61
62
63
64
65
66 <p><br>
67 <a name="networking"></a>
68 <h3>Networking:</h3>
69
70 It is possible to let the guest OS running inside the emulator get access to
71 the Internet. If you are interested in the technical details, and the
72 reasons why networking is implemented in the emulator the way it currently
73 is implemented, you might want to read the <a href="technical.html#net">
74 networking section in the technical documentation</a>.
75 <p>
76 The guest OS running inside the emulator uses a private IPv4 address, such
77 as 10.0.0.1, and the emulator acts as a NAT-like gateway/firewall at IPv4
78 address 10.0.0.254. To the outside world it will seem like it is the host's
79 OS that connects to other machines on the internet, not the guest OS.
80 <p>
81 <font color="#ff0000">NOTE: This is still experimental!
82 As of 2004-07-21, ARP + ICMP + UDP + TCP are emulated well enough to let
83 NetBSD and OpenBSD install via ftp, and use the network for many normal
84 activities, but not everything works yet.</font>
85
86
87
88
89
90
91 <p><br>
92 <a name="devel"></a>
93 <h3>Writing operating system code, or developing firmware, using GXemul:</h3>
94
95 Is this a good idea? The answer is yes and no, depending on the level of
96 detail you need in your simulations. If you are developing an operating
97 system or operating system kernel of your own, and wish to target
98 MIPS-like systems in general, then the answer might be yes, for
99 experimental purposes.
100
101 <p>Some examples of things that <i>don't</i> work, that you should keep in
102 mind:
103
104 <ul>
105 <li>Porting code to a specific machine mode, e.g. a Silicon Graphics
106 machine, using GXemul, will not necessarily cause the code to
107 work on a real machine. Sometimes code works in GXemul which doesn't
108 work on real hardware, sometimes it's the other way around.
109
110 <p>
111 <li>GXemul contains bugs, and many things are not yet implemented.
112
113 <p>
114 <li>I have only implemented devices in GXemul to the degree that
115 NetBSD, OpenBSD, etc, don't complain too much. One way to say it
116 is that the device implementations are "lazy hacks", based on the
117 assumption that the emulated OS is already developed and bug-free.
118 They are not intended to be used for development of new OS code,
119 so if you do that, then be prepared for bugs and inconsitencies.
120
121 <p>
122 <li>CPU details in GXemul are usually wrong. If your code depends
123 on, say, R10000 or MIPS64 specifics, chances are that GXemul will
124 not be sufficient. Again, this was done as "lazy hacks", and pretty
125 much assumes that the OS being emulated is already developed
126 and bug-free.
127
128 <p>
129 <li>Caches. There is no cache emulation in GXemul right now. Caches
130 for R2000/R3000 are faked well enough to run NetBSD, Ultrix, etc
131 in the DECstation emulation mode, but other than that, cache
132 operations are treated as nops.
133 </ul>
134
135 <p>The bottom line is that GXemul can be useful as yet another way to test
136 your code during development, but it should not be fully relied on.
137
138
139
140
141
142
143 <p><br>
144 <a name="compilercontruct"></a>
145 <h3>Using GXemul in compiler contruction courses:</h3>
146
147 If you are learning how to write a compiler, and wish to target a
148 realistic target platform, then MIPS (as emulated by GXemul)
149 might be a suitable choice.
150
151 <ul>
152 <li><b>(+)</b>&nbsp;&nbsp;Your compiler needs to output real assembly
153 language code, which the assembler (eg gas, the GNU assembler) can
154 then compile into object format, and then you need to link this
155 into an executable image. This is much closer to how things work
156 in real life than running assembly language listings in a simulator
157 (eg SPIM).
158 <p>
159 <li><b>(-)</b>&nbsp;&nbsp;GXemul does not simulate out-of-order
160 execution, penalties related to instruction scheduling, or
161 load-delays, so it cannot be used to create optimizing compilers
162 that take advantage of such processor features. GXemul keeps
163 track of the number of instructions executed, but that's it.
164 </ul>
165
166
167
168
169
170
171 <p><br>
172 <a name="disk"></a>
173 <h3>How to start the emulator with a disk image:</h3>
174
175 Add <i>-d [prefixes:]diskimagefilename</i> to the command line, where prefixes
176 are one or more single-character options. Run <b>gxemul -h</b>
177 to get a list of possible options.
178
179 <p>
180 Here are some examples. If you want to run a NetBSD/pmax kernel on an
181 emulated DECstation machine, you would use a command line such as this:
182 <pre>
183 $ <b>gxemul -e 3max -d pmax_diskimage.fs netbsd-pmax-INSTALL</b>
184 </pre>
185 <p>
186 NOTE: For some emulation modes, such as the DECstation mode, you do
187 <i>not</i> have to specify the name of the kernel, if the disk image is
188 bootable!
189 <p>
190 It is possible to have more than one disk. For each -d argument, a disk
191 image is added; the first will be SCSI target 0, the second will be target 1, and so on,
192 unless you specify explicitly which ID number the devices should have.
193 <pre>
194 $ <b>gxemul -e 3max -d disk0.raw -d disk1.raw -d 5:disk2.raw netbsd-pmax-INSTALL</b>
195 </pre>
196 Note: In the example above, disk2.raw will get scsi id 5.
197 <p>
198 If a filename has a 'c' prefix, or ends with ".iso", then it is assumed to be
199 a CDROM device (this can be overridden with a 'd' prefix, to force a read/write disk).
200 For example, the following command would start the emulator with two
201 CDROM images, and one harddisk image:
202 <pre>
203 $ <b>gxemul -e 3max -d image.iso -d disk0.img -d c:second_cdrom.img netbsd-pmax-INSTALL</b>
204 </pre>
205 Usually, the device with the lowest id becomes the boot device. To override
206 this, add a 'b' prefix to one of the devices:
207 <pre>
208 $ <b>gxemul -e 3max -d rootdisk.img -d bc:install-cd.iso name_of_kernel</b>
209 </pre>
210 If you have a physical CD-ROM drive on the host machine, say /dev/cd0c, you can
211 use it as a CD-ROM directly accessible from within the emulator:
212 <pre>
213 $ <b>gxemul -e 3max -d rootdisk.img -d bc:/dev/cd0c name_of_kernel</b>
214 </pre>
215 It is probably possible to use harddisks as well this way, but I would not
216 recommend it.
217 <p>
218 Using emulated tape drives is a bit more complicated than disks, because a
219 tape can be made up of several "files" with space in between. The solution
220 I have choosen is to have one file in the host's file system space for each
221 tape file. The prefix for using tapes is 't', and the filename given is
222 for the <i>first</i> file on that tape (number zero, implicitly). For
223 files following file nr 0, a dot and the filenumber is appended to the
224 filename.
225 <p>
226 As an example, starting the emulator with
227 <pre>
228 <b>-d t4:mytape.img</b>
229 </pre>
230 will cause SCSI id 4 to be a tape device, using the following file number
231 to name translation scheme:
232 <p>
233 <center>
234 <table border="0">
235 <tr>
236 <td><b>File number:</b></td>
237 <td><b>File name in the host's filesystem:</b></td>
238 </tr>
239 <tr>
240 <td align="center">0</td>
241 <td align="left">mytape.img</td>
242 </tr>
243 <tr>
244 <td align="center">1</td>
245 <td align="left">mytape.img.1</td>
246 </tr>
247 <tr>
248 <td align="center">2</td>
249 <td align="left">mytape.img.2</td>
250 </tr>
251 <tr>
252 <td align="center">..</td>
253 <td align="left">..</td>
254 </tr>
255 </table>
256 </center>
257 <p>
258 If you already have a number of tape files, which should be placed on the
259 same emulated tape, then you might not want to rename all those files.
260 Use symbolic links instead (ln -s).
261 <p>
262 There is another advantage to using symbolic links for tape filenames:
263 every time a tape is rewound, it is reopened using the filename given
264 on the command line. By changing what the symbolic name points to,
265 you can "switch tapes" without quiting and restarting the emulator.
266
267
268
269 <p><br>
270 <a name="largeimages"></a>
271 <h3>How to extract large gzipped disk images:</h3>
272
273 Unix filesystems usually support large files with "holes". Holes are
274 zero-filled blocks that don't actually exist on disk. This is very
275 practical for emulated disk images, as it is possible to create a very
276 large disk image without using up much space at all.
277
278 <p>
279 Using gzip and gunzip on disk images can be <i>very</i> slow, as these
280 files can be multiple gigabytes large, but this is usually necessary for
281 transfering disk images over the internet. If you receive a gzipped disk
282 image, say disk.img.gz, and run a naive
283 <p>
284 <pre>
285 $ <b>gunzip disk.img.gz</b>
286 </pre>
287 <p>
288 on it, you will not end up with an optimized file unless
289 gunzip supports that. (In my experiments, it doesn't.) In plain English,
290 if you type <b>ls -l</b> and the filesize is 9 GB, it will actually occupy
291 9 GB of disk space! This is often unacceptable.
292 <p>
293 Using a simple tool which only writes blocks that are non-zero, a lot of
294 space can be saved. Compile the program cp_removeblocks in the
295 experiments/ directory, and type:
296 <p>
297 <pre>
298 $ <b>gunzip -c disk.img.gz | cp_removeblocks /dev/stdin disk.img</b>
299 </pre>
300
301 <p>
302 This will give you a disk.img which looks like it is 9 GB, and works like
303 the real file, but the holes are not written out to the disk. (You can see
304 this by running for example <b>du disk.img</b> to see the physical block
305 count.)
306
307
308
309 <p><br>
310 <a name="userland"></a>
311 <h3>Running userland binaries:</h3>
312
313 <font color="#ff0000">Note: This does not really work yet.</font>
314
315 <p>There is some skeleton code for running userland programs as well. This
316 will not emulate any particular machine, but instead try to translate
317 syscalls from e.g. NetBSD/pmax into the host's OS' syscalls. Right now,
318 this is just a proof-of-concept, to show that it could work; there's lots
319 of work left to do to make it actually run useful programs.
320
321 <p>
322
323 <ul>
324 <li><b>NetBSD/pmax:</b>
325 <br>
326 Running /bin/hostname or /bin/date and similarly trivial
327 programs from the NetBSD/pmax distribution works:<pre>
328 $ <b>gxemul -q -u netbsd/pmax pmax_bin_hostname</b>
329 tab.csbnet.se
330 $ <b>gxemul -q -u netbsd/pmax pmax_bin_date</b>
331 Sun Jan 25 02:26:14 GMT 2004
332 $ <b>gxemul -q -u netbsd/pmax pmax_bin_sleep</b>
333 usage: pmax_bin_sleep seconds
334 $ <b>gxemul -q -u netbsd/pmax pmax_bin_sleep 5</b>
335 $ <b>gxemul -q -u netbsd/pmax pmax_bin_sync</b>
336 </pre>
337
338 <p>
339 <li><b>Ultrix:</b>
340 <br>
341 At least /bin/date and /bin/hostname work:<pre>
342 $ <b>gxemul -q -u ultrix ultrix4_bin_date</b>
343 UNIMPLEMENTED ultrix syscall 54
344 UNIMPLEMENTED ultrix syscall 62
345 Mon Feb 9 12:50:59 WET 2004
346 $ <b>gxemul -q -u ultrix ultrix4_bin_hostname</b>
347 tab.csbnet.se
348 </pre>
349
350 <!--
351 <p>
352 <li><b>NetBSD/powerpc:</b>
353 <br>
354 /bin/sync from NetBSD/macppc works, but probably not much else.<pre>
355 $ <b>gxemul -v -u netbsd/powerpc netbsd-1.6.2-macppc-bin-sync</b>
356 ...
357 [ sync() ]
358 [ exit(0) ]
359 cpu_run_deinit(): All CPUs halted.
360
361 </pre>
362
363 <p>
364 <li><b>Linux/PPC64:</b>
365 <br>
366 The <a href="http://www-106.ibm.com/developerworks/library/l-ppc/#h13">64-bit Hello World assembly language example</a>
367 on IBM's developerWorks pages runs:<pre>
368 $ <b>ppc64-unknown-linux-as hello-ppc64.s -o hello-ppc64.o</b>
369 $ <b>ppc64-unknown-linux-ld hello-ppc64.o -o hello-ppc64</b>
370 $ <b>gxemul -q -u linux/ppc64 hello-ppc64</b>
371 Hello, world!
372
373 </pre>
374 -->
375
376 </ul>
377
378
379
380
381
382 <p><br>
383 <a name="promdump"></a>
384 <h3>Using a PROM dump from a real machine:</h3>
385
386 Raw PROM images from real machines can, in a few cases, be used in
387 the emulator. ROM code is usually much more sensitive to correctness
388 of the emulator than operating system kernels or userland programs
389 are, so don't expect any PROM image to just magically work.
390
391
392 <p>
393 <h4>Dumping the PROM on a DECstation 5000/125:</h4>
394 The image first needs to be extracted from the machine. There are
395 several ways to do this.
396 <ul>
397 <li>Use hardware to read the PROM chip(s) directly. Not easy if you
398 don't have such a hardware reader.
399 <li>Copy the PROM memory range into a file, from a running
400 operating system. You need a running OS, and it must
401 have access to the PROM memory range. NetBSD, for example,
402 doesn't allow that from userland.
403 <li>Hook up a serial console and dump using the PROM's own dump
404 command.
405 </ul>
406 <p>
407 The easiest way is to hook up a serial console. The terminal must be
408 able to capture output to a file.
409 <p>
410 These are approximately the commands that I used:
411 <pre>
412 >><b>cnfg</b> <i>Show machine configuration</i>
413
414 >><b>printenv</b> <i>Show environment variables</i>
415
416 >><b>setenv more 0</b> <i>This turns off the More messages</i>
417
418 >><b>e -x 0xbfc00000:0xbfffffff</b> <i>Dump the PROM data</i>
419 </pre>
420 <p>
421 Remember that DECstations are little endian, so if the dump data
422 looks like this:
423 <pre>
424 bfc00000: 0x0bf0007e
425 </pre>
426 then the bytes in memory are actually 0x7e, 0x00, 0xf0, and 0x0b.
427 <p>
428 At 9600 bps, about 10KB can be dumped per minute, so it takes a while.
429 Once enough of the PROM has been dumped, you can press CTRL-C to break out.
430 Then, restore the more environment variable:
431 <pre>
432 >><b>setenv more 24</b>
433 </pre>
434 <p>
435 Now, convert the data you just saved (little-endian words -> bytes),
436 and store in a file. Let's call this file DECstation5000_125_promdump.bin.
437 <pre>
438 $ <b>decprom_dump_txt_to_bin DECstation5000_125_promdump.txt DECstation5000_125_promdump.bin</b>
439 </pre>
440 This binary image can now be used in the emulator:
441 <pre>
442 $ <b>gxemul -e 3min -Q -M128 -q 0xbfc00000:DECstation5000_125_promdump.bin</b>
443
444 KN02-BA V5.7e
445 ?TFL: 3/scc/access (1:Ln1 reg-12: actual=0x00 xpctd=0x01) [KN02-BA]
446 ?TFL: 3/scc/io (1:Ln0 tx bfr not empty. status=0X 0) [KN02-BA]
447 ...
448 --More--?TFL: 3/scsi/cntl (CUX, cause= 1000002C)
449 >><b>?</b>
450 ? [cmd]
451 boot [[-z #] [-n] #/path [ARG...]]
452 cat SCRPT
453 cnfg [#]
454 d [-bhw] [-S #] RNG VAL
455 e [-bhwcdoux] [-S #] RNG
456 erl [-c]
457 go [ADR]
458 init [#] [-m] [ARG...]
459 ls [#]
460 passwd [-c] [-s]
461 printenv [EVN]
462 restart
463 script SCRPT
464 setenv EVN STR
465 sh [-belvS] [SCRPT] [ARG..]
466 t [-l] #/STR [ARG..]
467 unsetenv EVN
468 >><b>cnfg</b>
469 3: KN02-BA DEC V5.7e TCF0 (128 MB)
470 (enet: 00-00-00-00-00-00)
471 (SCSI = 7)
472 0: PMAG-BA DEC V5.3a TCF0
473 >><b>printenv</b>
474 boot=
475 testaction=q
476 haltaction=h
477 more=24
478 #=3
479 console=*
480 osconsole=3
481 >>
482 </pre>
483
484 <p><font color="#ff0000">(Note: at the moment, this doesn't work.
485 I must have broken something when fixing something else, but this
486 is what it looked like at the time.)</font>
487
488 <p>During bootup, the PROM complains <i>a lot</i> about hardware failures.
489 That's because the emulator doesn't emulate the hardware well enough yet.
490
491 <p>The command line options used are: <tt>-e 3min</tt> for
492 "DECstation 3min" (5000/1xx), <tt>-Q</tt> to supress the emulator's own PROM
493 call emulation, <tt>-M128</tt> for 128MB RAM (because GXemul doesn't correctly
494 emulate memory detection well enough for the PROM to accept, so it will
495 always believe there is 128MB ram anyway), and <tt>-q</tt> to supress debug messages.
496 The <tt>0xbfc00000</tt> in front of the filename tells GXemul that it is a raw
497 binary file which should be loaded at a specific virtual address.
498
499
500 <p><br>
501 <h4>Dumping the PROM on a SGI O2:</h4>
502
503 The general ideas in this section applies to using ROM images from other
504 machines as well. I have also tried this on an SGI IP32 ("O2"), in addition
505 to the DECstation.
506
507 <p>For the O2, a suitable command to dump the prom memory range is
508 <pre>
509 &gt;&gt; <b>dump -b 0xBFC00000:0xBFC80000</b>
510 </pre>
511 Make sure you capture all the output (via serial console) into a file,
512 and then run <tt>experiments/sgiprom_to_bin</tt> on the captured file.
513
514 <p>
515 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
516 <a href="sgi-o2-real.jpg"><img src="sgi-o2-real_small.jpg"></a>
517 &nbsp;&nbsp;&nbsp;
518 <a href="20050817-sgi-o2-success-7.png"><img src="20050817-sgi-o2-success-7_small.png"></a>
519 &nbsp;&nbsp;&nbsp;
520 <a href="20050817-sgi-o2-success-8.png"><img src="20050817-sgi-o2-success-8_small.png"></a>
521
522 <p>The photo on the left is from the real machine. The other two are
523 screenshots of the PROM running experimentally in GXemul, using <tt>-Y2</tt>
524 framebuffer scaledown.
525
526 <p>Normally during bootup, the IP32 PROM does a Power-On test which makes
527 sure that the caches and other things are working properly. GXemul doesn't
528 emulate all those things well enough for the tests to pass. The
529 experimental screenshots above were taken with cache detection skipped
530 manually.
531
532 <p><font color="#ff0000">
533 In other words: don't expect this to work out-of-the-box with GXemul right
534 now. It might work once I've added correct cache emulation.</font>
535
536 <p>The command line used to start the emulator, once correct cache
537 emulation has been implemented, would be something like <tt>gxemul -XQeo2
538 0xbfc00000:prom.bin</tt>.
539
540 <p>The same caution applies when dealing with SGI PROMs as with
541 DECstation PROMs: GXemul doesn't really emulate the hardware, it only
542 "fakes" devices well enough to fool some things, primarily NetBSD, that
543 it is emulating a real machine. ROM code is usually a <i>lot</i> more
544 picky about the details.
545
546 <p>The graphics used in the O2 is (as far as I know) undocumented. Combining
547 some traces of info from how Linux/O2 draws to the screen with some
548 reverse-engineering of my own, I've implemented enough of the controller to
549 let the PROM draw rectangles and bitmaps, but not much more. The SCSI
550 controller is not implemented yet either.
551
552
553
554
555 </p>
556
557 </body>
558 </html>

  ViewVC Help
Powered by ViewVC 1.1.26