4 |
<table border=0 width=100% bgcolor="#d0d0d0"><tr> |
<table border=0 width=100% bgcolor="#d0d0d0"><tr> |
5 |
<td width=100% align=center valign=center><table border=0 width=100%><tr> |
<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"> |
<td align="left" valign=center bgcolor="#d0efff"><font color="#6060e0" size="6"> |
7 |
<b>Gavare's eXperimental Emulator:</b></font><br> |
<b>GXemul:</b></font> |
8 |
<font color="#000000" size="6"><b>Miscellaneous</b> |
<font color="#000000" size="6"><b>Miscellaneous</b> |
9 |
</font></td></tr></table></td></tr></table><p> |
</font></td></tr></table></td></tr></table><p> |
10 |
|
|
11 |
<!-- |
<!-- |
12 |
|
|
13 |
$Id: misc.html,v 1.66 2006/12/30 13:30:51 debug Exp $ |
$Id: misc.html,v 1.73 2007/06/23 16:59:35 debug Exp $ |
14 |
|
|
15 |
Copyright (C) 2003-2007 Anders Gavare. All rights reserved. |
Copyright (C) 2003-2007 Anders Gavare. All rights reserved. |
16 |
|
|
51 |
developing firmware, using GXemul</a> |
developing firmware, using GXemul</a> |
52 |
<li><a href="#compilercontruct">Using GXemul in compiler contruction courses</a> |
<li><a href="#compilercontruct">Using GXemul in compiler contruction courses</a> |
53 |
<li><a href="#disk">How to start the emulator with a disk image</a> |
<li><a href="#disk">How to start the emulator with a disk image</a> |
54 |
|
<li><a href="#tape_images">How to start the emulator with tape images</a> |
55 |
|
<li><a href="#disk_overlays">How to use disk image overlays</a> |
56 |
<li><a href="#filexfer">Transfering files to/from the guest OS</a> |
<li><a href="#filexfer">Transfering files to/from the guest OS</a> |
57 |
<li><a href="#largeimages">How to extract large gzipped disk images</a> |
<li><a href="#largeimages">How to extract large gzipped disk images</a> |
58 |
<li><a href="#userland">Running userland binaries</a> |
<li><a href="#userland">Running userland binaries</a> |
113 |
<p> |
<p> |
114 |
<li>Caches. There is no cache emulation in GXemul right now. Caches |
<li>Caches. There is no cache emulation in GXemul right now. Caches |
115 |
for R2000/R3000 are faked well enough to run NetBSD, Ultrix, etc |
for R2000/R3000 are faked well enough to run NetBSD, Ultrix, etc |
116 |
in the DECstation emulation mode, but other than that, cache |
in the <a href="http://en.wikipedia.org/wiki/DECstation">DECstation</a> |
117 |
operations are treated as nops. |
emulation mode, but other than that, cache operations are treated as nops. |
118 |
</ul> |
</ul> |
119 |
|
|
120 |
<p>The bottom line is that GXemul can be useful as yet another way to test |
<p>The bottom line is that GXemul can be useful as yet another way to test |
139 |
then compile into object format, and then you need to link this |
then compile into object format, and then you need to link this |
140 |
into an executable image. This is much closer to how things work |
into an executable image. This is much closer to how things work |
141 |
in real life than running assembly language listings in a simulator |
in real life than running assembly language listings in a simulator |
142 |
(e.g. SPIM). |
(e.g. <a href="http://pages.cs.wisc.edu/~larus/spim.html">SPIM</a>). |
143 |
<p> |
<p> |
144 |
<li><b>(-)</b> GXemul does not simulate out-of-order |
<li><b>(-)</b> GXemul does not simulate <a href="http://en.wikipedia.org/wiki/Out-of-order_execution">out-of-order |
145 |
execution, penalties related to instruction scheduling, or |
execution</a>, penalties related to instruction scheduling, or |
146 |
load-delays, so it cannot be used to create optimizing compilers |
load-delays, so it cannot be used to create optimizing compilers |
147 |
that take advantage of such processor features. GXemul keeps |
that take advantage of such processor features. GXemul keeps |
148 |
track of the number of instructions executed, but that's it. |
track of the number of instructions executed, and that's it. |
149 |
</ul> |
</ul> |
150 |
|
|
151 |
|
|
162 |
to get a list of possible options. |
to get a list of possible options. |
163 |
|
|
164 |
<p> |
<p> |
165 |
Here are some examples. If you want to run a NetBSD/pmax kernel on an |
Here are some examples. If you want to run a <a href="http://www.netbsd.org/ports/pmax/">NetBSD/pmax</a> |
166 |
emulated DECstation machine, you would use a command line such as this: |
kernel on an emulated <a href="http://en.wikipedia.org/wiki/DECstation">DECstation</a> |
167 |
|
machine, you would use a command line such as this: |
168 |
<pre> |
<pre> |
169 |
$ <b>gxemul -e 3max -d pmax_diskimage.fs netbsd-pmax-INSTALL</b> |
$ <b>gxemul -e 3max -d pmax_diskimage.fs netbsd-pmax-INSTALL</b> |
170 |
</pre> |
</pre> |
200 |
</pre> |
</pre> |
201 |
It is probably possible to use harddisks as well this way, but I would not |
It is probably possible to use harddisks as well this way, but I would not |
202 |
recommend it. |
recommend it. |
203 |
<p> |
|
204 |
|
|
205 |
|
|
206 |
|
|
207 |
|
|
208 |
|
|
209 |
|
<p><br> |
210 |
|
<a name="tape_images"></a> |
211 |
|
<h3>How to start the emulator with tape images:</h3> |
212 |
|
|
213 |
Using emulated tape drives is a bit more complicated than disks, because a |
Using emulated tape drives is a bit more complicated than disks, because a |
214 |
tape can be made up of several "files" with space in between. The solution |
tape can be made up of several "files" with space in between. The solution |
215 |
I have choosen is to have one file in the host's file system space for each |
I have choosen is to have one file in the host's file system space for each |
259 |
on the command line. By changing what the symbolic name points to, |
on the command line. By changing what the symbolic name points to, |
260 |
you can "switch tapes" without quiting and restarting the emulator. |
you can "switch tapes" without quiting and restarting the emulator. |
261 |
|
|
262 |
|
<p> |
263 |
|
<font color="#ff0000">Note: Tape support is most likely very buggy, |
264 |
|
because it has not been tested much, and has probably also suffered |
265 |
|
from bit-rot by now.</font> |
266 |
|
|
267 |
|
|
268 |
|
|
269 |
|
|
270 |
|
|
271 |
|
|
272 |
|
<p><br> |
273 |
|
<a name="disk_overlays"></a> |
274 |
|
<h3>How to use disk image overlays:</h3> |
275 |
|
|
276 |
|
This is most likely best understood by an example: |
277 |
|
|
278 |
|
<p><ul> |
279 |
|
<li>Install e.g. <a href="guestoses.html#netbsdcatsinstall">NetBSD/cats</a>. |
280 |
|
You will end up with a disk image called |
281 |
|
<tt>nbsd_cats.img</tt>. |
282 |
|
<p> |
283 |
|
<li>Running the following command will boot straight from the disk |
284 |
|
image, with no overlay images:<pre> |
285 |
|
<b>gxemul -XEcats -d nbsd_cats.img netbsd.aout-GENERIC.gz</b> |
286 |
|
|
287 |
|
</pre> |
288 |
|
<li>You may now create an overlay file, a corresponding map file, |
289 |
|
and start the emulator with the overlay image connected to |
290 |
|
the same (explicit) ID as the base disk image:<pre> |
291 |
|
<b>touch overlay.img overlay.img.map |
292 |
|
gxemul -XEcats -d 0:nbsd_cats.img -d V0:overlay.img netbsd.aout-GENERIC.gz</b> |
293 |
|
|
294 |
|
</pre> |
295 |
|
<li>Any changes to the filesystem you perform when using the overlay |
296 |
|
will only be written to that overlay. For example, to perform |
297 |
|
a "roll back", you can do the following:<pre> |
298 |
|
<b>rm -f overlay.img overlay.img.map |
299 |
|
touch overlay.img overlay.img.map</b> |
300 |
|
|
301 |
|
</pre> |
302 |
|
and then simply start the emulator again, with the newly created |
303 |
|
overlay image. |
304 |
|
</ul> |
305 |
|
|
306 |
|
<p>It is also possible to add multiple overlays. In that case, writes |
307 |
|
always go the the <i>last</i> added overlay. |
308 |
|
|
309 |
|
<p>GXemul uses Unix' way of supporting files with "holes", |
310 |
|
so even if <tt>ls -l overlay.img</tt> says that the overlay is several |
311 |
|
gigabytes large, <tt>du overlay.img</tt> should reveal that only the |
312 |
|
blocks that have actually been written to have been stored in the |
313 |
|
overlay, e.g.:<pre> |
314 |
|
<b>$ ls -l |
315 |
|
.. |
316 |
|
-rw-r--r-- 1 debug wheel 3072319488 Mar 24 11:59 nbsd_cats.img |
317 |
|
-rw-r--r-- 1 debug wheel 2465354 Mar 24 11:44 netbsd.aout-GENERIC.gz |
318 |
|
-rw-r--r-- 1 debug wheel 2930841600 Mar 24 14:02 overlay.img |
319 |
|
-rw-r--r-- 1 debug wheel 715538 Mar 24 14:02 overlay.img.map |
320 |
|
$ du overlay.img |
321 |
|
864 overlay.img |
322 |
|
</b> |
323 |
|
</pre> |
324 |
|
|
325 |
|
<p>The .map file is simply a raw bitmap telling which blocks of the |
326 |
|
overlay file that are in use. |
327 |
|
|
328 |
|
|
329 |
|
|
334 |
<h3>Transfering files to/from the guest OS:</h3> |
<h3>Transfering files to/from the guest OS:</h3> |
335 |
|
|
336 |
If the emulated machine supports networking (see <a |
If the emulated machine supports networking (see <a |
337 |
href="networking.html#intro">this section</a> for more info), then |
href="networking.html#intro">this section</a> for more info), then the easiest |
338 |
transfering files via FTP is probably easiest. |
way to transfer files is probably to use FTP or similar methods. |
339 |
|
|
340 |
<p>There is another way of transfering files which works for any kind of |
<p>There is another way of transfering files which works for any kind of |
341 |
emulated machine which supports disks (either SCSI or IDE). Any file can |
emulated machine which supports disks (either SCSI or IDE). Any file can |
417 |
<a name="userland"></a> |
<a name="userland"></a> |
418 |
<h3>Running userland binaries:</h3> |
<h3>Running userland binaries:</h3> |
419 |
|
|
420 |
<font color="#ff0000">Note: This feature does not really work yet. |
<font color="#ff0000"><b>NOTE 2007-06-15:</b> I just removed most of the |
421 |
It is currently disabled in stable release builds of the emulator.</font> |
userland (syscall) emulation support, and started a rewrite from scratch. |
422 |
|
The rest of this section in the documentation is not currently valid.</font> |
423 |
|
|
424 |
<p>There is some skeleton code for running userland programs as well. This |
<p>There is some skeleton code for running userland programs as well. This |
425 |
will not emulate any particular machine, but instead try to translate |
will not emulate any particular machine, but instead try to translate |
500 |
|
|
501 |
<p> |
<p> |
502 |
<h4>Dumping the PROM on a DECstation 5000/125:</h4> |
<h4>Dumping the PROM on a DECstation 5000/125:</h4> |
503 |
|
|
504 |
The image first needs to be extracted from the machine. There are |
The image first needs to be extracted from the machine. There are |
505 |
several ways to do this. |
several ways to do this. |
506 |
|
|
507 |
<ul> |
<ul> |
508 |
<li>Use hardware to read the PROM chip(s) directly. Not easy if you |
<li>Use hardware to read the PROM chip(s) directly. Not easy if you |
509 |
don't have such a hardware reader. |
don't have such a hardware reader. |
514 |
<li>Hook up a serial console and dump using the PROM's own dump |
<li>Hook up a serial console and dump using the PROM's own dump |
515 |
command. |
command. |
516 |
</ul> |
</ul> |
517 |
<p> |
|
518 |
The easiest way is to hook up a serial console. The terminal must be |
<p>The easiest way is to hook up a serial console. The terminal must be |
519 |
able to capture output to a file. |
able to capture output to a file. |
520 |
<p> |
|
521 |
These are approximately the commands that I used: |
<p>These are approximately the commands that I used: |
522 |
<pre> |
<pre> |
523 |
>><b>cnfg</b> <i>Show machine configuration</i> |
>><b>cnfg</b> <i>Show machine configuration</i> |
524 |
|
|
528 |
|
|
529 |
>><b>e -x 0xbfc00000:0xbfffffff</b> <i>Dump the PROM data</i> |
>><b>e -x 0xbfc00000:0xbfffffff</b> <i>Dump the PROM data</i> |
530 |
</pre> |
</pre> |
531 |
<p> |
|
532 |
Remember that DECstations are little endian, so if the dump data |
<p>Remember that DECstations are little endian, so if the dump data |
533 |
looks like this: |
looks like this: |
534 |
<pre> |
<pre> |
535 |
bfc00000: 0x0bf0007e |
bfc00000: 0x0bf0007e |
536 |
</pre> |
</pre> |
537 |
then the bytes in memory are actually 0x7e, 0x00, 0xf0, and 0x0b. |
then the bytes in memory are actually 0x7e, 0x00, 0xf0, and 0x0b. |
538 |
<p> |
|
539 |
At 9600 bps, about 10KB can be dumped per minute, so it takes a while. |
<p>At 9600 bps, about 10KB can be dumped per minute, so it takes a while. |
540 |
Once enough of the PROM has been dumped, you can press CTRL-C to break out. |
Once enough of the PROM has been dumped, you can press CTRL-C to break out. |
541 |
Then, restore the more environment variable: |
Then, restore the more environment variable: |
542 |
<pre> |
<pre> |
543 |
>><b>setenv more 24</b> |
>><b>setenv more 24</b> |
544 |
</pre> |
</pre> |
545 |
<p> |
|
546 |
Now, convert the data you just saved (little-endian words -> bytes), |
<p>Now, convert the data you just saved (little-endian words -> bytes), |
547 |
and store in a file. Let's call this file DECstation5000_125_promdump.bin. |
and store in a file. Let's call this file DECstation5000_125_promdump.bin. |
548 |
<pre> |
<pre> |
549 |
$ <b>decprom_dump_txt_to_bin DECstation5000_125_promdump.txt DECstation5000_125_promdump.bin</b> |
$ <b>decprom_dump_txt_to_bin DECstation5000_125_promdump.txt DECstation5000_125_promdump.bin</b> |
550 |
</pre> |
</pre> |
551 |
|
|
552 |
This binary image can now be used in the emulator: |
This binary image can now be used in the emulator: |
553 |
<pre> |
<pre> |
554 |
$ <b>gxemul -e 3min -Q -M128 -q 0xbfc00000:DECstation5000_125_promdump.bin</b> |
$ <b>gxemul -e 3min -Q -M128 -q 0xbfc00000:DECstation5000_125_promdump.bin</b> |
610 |
|
|
611 |
|
|
612 |
<p><br> |
<p><br> |
613 |
<h4>Dumping the PROM on a SGI O2:</h4> |
<a name="promdump_o2"><h4>Dumping the PROM on a SGI O2:</h4></a> |
614 |
|
|
615 |
The general ideas in this section applies to using ROM images from other |
The general ideas in this section applies to using ROM images from other |
616 |
machines as well. I have also tried this on an SGI IP32 ("O2"), in addition |
machines as well. I have also tried this on an SGI IP32 ("O2"), in addition |