1 |
<html> |
<html><head><title>Gavare's eXperimental Emulator: Experimenting with GXemul</title> |
2 |
<head><title>GXemul documentation: Experimenting with GXemul</title> |
<meta name="robots" content="noarchive,nofollow,noindex"></head> |
|
<meta name="robots" content="noarchive,nofollow,noindex"> |
|
|
</head> |
|
3 |
<body bgcolor="#f8f8f8" text="#000000" link="#4040f0" vlink="#404040" alink="#ff0000"> |
<body bgcolor="#f8f8f8" text="#000000" link="#4040f0" vlink="#404040" alink="#ff0000"> |
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>GXemul documentation:</b></font> |
<b>Gavare's eXperimental Emulator: </b></font> |
8 |
<font color="#000000" size="6"><b>Experimenting with GXemul</b> |
<font color="#000000" size="6"><b>Experimenting with GXemul</b> |
9 |
</font></td></tr></table></td></tr></table><p> |
</font></td></tr></table></td></tr></table><p> |
10 |
|
|
11 |
<!-- |
<!-- |
12 |
|
|
13 |
$Id: experiments.html,v 1.71 2005/06/12 12:31:53 debug Exp $ |
$Id: experiments.html,v 1.89 2005/08/09 18:29:20 debug Exp $ |
14 |
|
|
15 |
Copyright (C) 2003-2005 Anders Gavare. All rights reserved. |
Copyright (C) 2003-2005 Anders Gavare. All rights reserved. |
16 |
|
|
104 |
</font></pre> |
</font></pre> |
105 |
</td></tr></table> |
</td></tr></table> |
106 |
|
|
107 |
<p> |
<p>(This hello world program is available here as well: |
108 |
(This hello world program is available here as well: |
<a href="hello_mips.c"><tt>hello_mips.c</tt></a>) |
|
<a href="hello_mips.c">hello_mips.c</a>) |
|
109 |
|
|
110 |
<p> |
<p>I recommend that you build a GCC cross compiler for the |
|
I recommend that you build a GCC cross compiler for the |
|
111 |
<b>mips64-unknown-elf</b> target, and install it. Other compilers could |
<b>mips64-unknown-elf</b> target, and install it. Other compilers could |
112 |
work too, but GCC is good because of its portability. Then try to compile |
work too, but GCC is good because of its portability. Then try to compile |
113 |
the hello world program: |
and link the hello world program: |
114 |
<pre> |
<pre> |
115 |
$ <b>mips64-unknown-elf-gcc -O2 hello_mips.c -mips4 -mabi=64 -c</b> |
$ <b>mips64-unknown-elf-gcc -O2 hello_mips.c -mips4 -mabi=64 -c</b> |
116 |
$ <b>mips64-unknown-elf-ld -Ttext 0xa800000000030000 -e f hello_mips.o -o hello_mips --oformat=elf64-bigmips</b> |
$ <b>mips64-unknown-elf-ld -Ttext 0xa800000000030000 -e f hello_mips.o -o hello_mips --oformat=elf64-bigmips</b> |
166 |
a800000000030038: 00021600 sll v0,v0,24 |
a800000000030038: 00021600 sll v0,v0,24 |
167 |
GXemul> <b>print v0</b> |
GXemul> <b>print v0</b> |
168 |
v0 = 0x0000000048000000 |
v0 = 0x0000000048000000 |
169 |
GXemul> <b><blink>_</blink></b> |
GXemul> <b>_</b> |
170 |
</pre> |
</pre> |
171 |
|
|
172 |
<p> |
<p>The syntax of the single-step debugger shouldn't be too hard to grasp. |
173 |
The syntax of the single-step debugger shouldn't be too hard to grasp. |
Type "<tt>s</tt>" to single-step one instruction. For some commands (e.g. |
174 |
Type 's' to single-step one instruction. Just pressing enter after that |
the single-step command), just pressing enter on a blank line will cause |
175 |
will repeat the 's' command. Type 'quit' to quit. |
the last command to be repeated. Type "<tt>quit</tt>" to quit. |
176 |
|
|
177 |
<p> |
<p> |
178 |
Hopefully this is enough to get you inspired. :-) |
Hopefully this is enough to get you inspired. :-) |
179 |
|
|
180 |
|
|
181 |
|
|
|
<p><br> |
|
|
<h4>Hello World for GXemul's PPC mode</h4> |
|
|
|
|
|
GXemul also has an experimental PowerPC emulation mode. |
|
|
<a href="hello_ppc.c">hello_ppc.c</a> is similar to hello_mips.c, but |
|
|
should be compiled and run as follows: |
|
|
<p> |
|
|
<pre> |
|
|
$ <b>ppc-unknown-elf-gcc -O2 hello_ppc.c -c</b> |
|
|
$ <b>ppc-unknown-elf-ld -e f hello_ppc.o -o hello_ppc</b> |
|
|
$ <b>file hello_ppc</b> |
|
|
hello_ppc: ELF 32-bit MSB executable, PowerPC or cisco 4500, |
|
|
version 1 (SYSV), statically linked, not stripped |
|
|
$ <b>gxemul -q -E testppc hello_ppc</b> |
|
|
Hello world |
|
|
</pre> |
|
|
|
|
|
<p> |
|
|
[ 2005-02-18: I haven't yet been able to build a GCC for ppc64 (only the |
|
|
binutils toolchain), because the gcc sources seem to include Linux header files |
|
|
that aren't present on my FreeBSD system. 32-bit PPC works ok, though. ] |
|
|
|
|
|
|
|
|
|
|
182 |
|
|
183 |
|
|
184 |
|
|
191 |
(just the CPU), or in a "test" mode where some simple devices are |
(just the CPU), or in a "test" mode where some simple devices are |
192 |
emulated. |
emulated. |
193 |
|
|
194 |
<p> |
<p>The test machines (<tt>testmips</tt>, <tt>testppc</tt>, etc) have the |
195 |
The <tt>testmips</tt> machine has the following experimental devices: |
following experimental devices: |
196 |
|
|
197 |
<p> |
<p> |
198 |
<center><table border="0" width="80%"> |
<center><table border="0" width="80%"> |
200 |
<tr> |
<tr> |
201 |
<td align="left" valign="top" width="200"> |
<td align="left" valign="top" width="200"> |
202 |
<b><tt>cons</tt>:</b> |
<b><tt>cons</tt>:</b> |
203 |
<p>This is a simple console device, for writing |
<p>A simple console device, for writing |
204 |
characters to the controlling terminal. |
characters to the controlling terminal |
205 |
|
and receiving keypresses. |
206 |
<p>Source code: <font color="#0000f0"><tt>src/devices/dev_cons.c</tt></font> |
<p>Source code: <font color="#0000f0"><tt>src/devices/dev_cons.c</tt></font> |
207 |
<br>Default physical address:  <font color="#0000f0">0x10000000</font> |
<br>Default physical address:  <font color="#0000f0">0x10000000</font> |
208 |
</td> |
</td> |
214 |
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
215 |
</tr> |
</tr> |
216 |
<tr> |
<tr> |
217 |
<td align="left" valign="top">0x0000</td> |
<td align="left" valign="top"><tt>0x00</tt></td> |
218 |
<td align="left" valign="top"> |
<td align="left" valign="top"> |
219 |
Read: <b><tt>getchar()</tt></b> (non-blocking)<br> |
Read: <b><tt>getchar()</tt></b> (non-blocking; returns |
220 |
|
<tt>0</tt> if no char was available)<br> |
221 |
Write: <b><tt>putchar(ch)</tt></b></td> |
Write: <b><tt>putchar(ch)</tt></b></td> |
222 |
</tr> |
</tr> |
223 |
<tr> |
<tr> |
224 |
<td align="left" valign="top">0x0010</td> |
<td align="left" valign="top"><tt>0x10</tt></td> |
225 |
<td align="left" valign="top">Read or write: <b><tt>halt()</tt></b><br> |
<td align="left" valign="top">Read or write: <b><tt>halt()</tt></b><br> |
226 |
(Useful for exiting the emulator.)</td> |
(Useful for exiting the emulator.)</td> |
227 |
</tr> |
</tr> |
249 |
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
250 |
</tr> |
</tr> |
251 |
<tr> |
<tr> |
252 |
<td align="left" valign="top">0x0000</td> |
<td align="left" valign="top"><tt>0x0000</tt></td> |
253 |
<td align="left" valign="top">Read: <b><tt>whoami()</tt></b>. |
<td align="left" valign="top">Read: <b><tt>whoami()</tt></b>. |
254 |
Returns the id of the CPU doing the read.</td> |
Returns the id of the CPU doing the read.</td> |
255 |
</tr> |
</tr> |
256 |
<tr> |
<tr> |
257 |
<td align="left" valign="top">0x0010</td> |
<td align="left" valign="top"><tt>0x0010</tt></td> |
258 |
<td align="left" valign="top">Read: <b><tt>ncpus()</tt></b>. |
<td align="left" valign="top">Read: <b><tt>ncpus()</tt></b>. |
259 |
Returns the number of CPUs in the system.</td> |
Returns the number of CPUs in the system.</td> |
260 |
</tr> |
</tr> |
261 |
<tr> |
<tr> |
262 |
<td align="left" valign="top">0x0020</td> |
<td align="left" valign="top"><tt>0x0020</tt></td> |
263 |
<td align="left" valign="top">Write: <b><tt>startupcpu(i)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>startupcpu(i)</tt></b>. |
264 |
Starts CPU i. It begins execution at the address |
Starts CPU i. It begins execution at the address |
265 |
set by a write to startupaddr (see below).</td> |
set by a write to startupaddr (see below).</td> |
266 |
</tr> |
</tr> |
267 |
<tr> |
<tr> |
268 |
<td align="left" valign="top">0x0030</td> |
<td align="left" valign="top"><tt>0x0030</tt></td> |
269 |
<td align="left" valign="top">Write: <b><tt>startupaddr(addr)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>startupaddr(addr)</tt></b>. |
270 |
Sets the starting address for CPUs.</td> |
Sets the starting address for CPUs.</td> |
271 |
</tr> |
</tr> |
272 |
<tr> |
<tr> |
273 |
<td align="left" valign="top">0x0040</td> |
<td align="left" valign="top"><tt>0x0040</tt></td> |
274 |
<td align="left" valign="top">Write: <b><tt>pause_addr(addr)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>pause_addr(addr)</tt></b>. |
275 |
Sets the pause address. (TODO: This is not |
Sets the pause address. (TODO: This is not |
276 |
used anymore?)</td> |
used anymore?)</td> |
277 |
</tr> |
</tr> |
278 |
<tr> |
<tr> |
279 |
<td align="left" valign="top">0x0050</td> |
<td align="left" valign="top"><tt>0x0050</tt></td> |
280 |
<td align="left" valign="top">Write: <b><tt>pause_cpu(i)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>pause_cpu(i)</tt></b>. |
281 |
Stops all CPUs <i>except</i> CPU i.</td> |
Stops all CPUs <i>except</i> CPU i.</td> |
282 |
</tr> |
</tr> |
283 |
<tr> |
<tr> |
284 |
<td align="left" valign="top">0x0060</td> |
<td align="left" valign="top"><tt>0x0060</tt></td> |
285 |
<td align="left" valign="top">Write: <b><tt>unpause_cpu(i)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>unpause_cpu(i)</tt></b>. |
286 |
Unpauses all CPUs <i>except</i> CPU i.</td> |
Unpauses all CPUs <i>except</i> CPU i.</td> |
287 |
</tr> |
</tr> |
288 |
<tr> |
<tr> |
289 |
<td align="left" valign="top">0x0070</td> |
<td align="left" valign="top"><tt>0x0070</tt></td> |
290 |
<td align="left" valign="top">Write: <b><tt>startupstack(addr)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>startupstack(addr)</tt></b>. |
291 |
Sets the startup stack address. (CPUs started with |
Sets the startup stack address. (CPUs started with |
292 |
startupcpu() above will have their stack pointer |
startupcpu() above will have their stack pointer |
293 |
set to this value.)</td> |
set to this value.)</td> |
294 |
</tr> |
</tr> |
295 |
<tr> |
<tr> |
296 |
<td align="left" valign="top">0x0080</td> |
<td align="left" valign="top"><tt>0x0080</tt></td> |
297 |
<td align="left" valign="top">Read: <b><tt>hardware_random()</tt></b>. |
<td align="left" valign="top">Read: <b><tt>hardware_random()</tt></b>. |
298 |
This produces a "random" number.</td> |
This produces a "random" number.</td> |
299 |
</tr> |
</tr> |
300 |
<tr> |
<tr> |
301 |
<td align="left" valign="top">0x0090</td> |
<td align="left" valign="top"><tt>0x0090</tt></td> |
302 |
<td align="left" valign="top">Read: <b><tt>memory()</tt></b>. |
<td align="left" valign="top">Read: <b><tt>memory()</tt></b>. |
303 |
Returns the number of bytes of RAM in the system.</td> |
Returns the number of bytes of RAM in the system.</td> |
304 |
</tr> |
</tr> |
305 |
<tr> |
<tr> |
306 |
<td align="left" valign="top">0x00a0</td> |
<td align="left" valign="top"><tt>0x00a0</tt></td> |
307 |
<td align="left" valign="top">Write: <b><tt>ipi_one((nr << 16) + cpuid)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>ipi_one((nr << 16) + cpuid)</tt></b>. |
308 |
Sends IPI <tt>nr</tt> to a specific CPU.</td> |
Sends IPI <tt>nr</tt> to a specific CPU.</td> |
309 |
</tr> |
</tr> |
310 |
<tr> |
<tr> |
311 |
<td align="left" valign="top">0x00b0</td> |
<td align="left" valign="top"><tt>0x00b0</tt></td> |
312 |
<td align="left" valign="top">Write: <b><tt>ipi_many((nr << 16) + cpuid)</tt></b>. |
<td align="left" valign="top">Write: <b><tt>ipi_many((nr << 16) + cpuid)</tt></b>. |
313 |
Sends IPI <tt>nr</tt> to all CPUs <i>except</i> |
Sends IPI <tt>nr</tt> to all CPUs <i>except</i> |
314 |
the specified one.</td> |
the specified one.</td> |
315 |
</tr> |
</tr> |
316 |
<tr> |
<tr> |
317 |
<td align="left" valign="top">0x00c0</td> |
<td align="left" valign="top">0x00c0</tt></td> |
318 |
<td align="left" valign="top">Read: <b><tt>ipi_read()</tt></b>. |
<td align="left" valign="top">Read: <b><tt>ipi_read()</tt></b>. |
319 |
Returns the next pending IPI. 0 is returned if there is no |
Returns the next pending IPI. 0 is returned if there is no |
320 |
pending IPI (so 0 shouldn't be used for valid IPIs). |
pending IPI (so 0 shouldn't be used for valid IPIs). |
346 |
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
347 |
</tr> |
</tr> |
348 |
<tr> |
<tr> |
349 |
<td align="left" valign="top">...</td> |
<td align="left" valign="top"><tt>0x00000-</tt><br><tt>0xe0fff</tt></td> |
350 |
<td align="left" valign="top">Read: read pixel values. |
<td align="left" valign="top">Read: read pixel values. |
351 |
<br>Write: write pixel values.</td> |
<br>Write: write pixel values.</td> |
352 |
</tr> |
</tr> |
354 |
</td> |
</td> |
355 |
</tr> |
</tr> |
356 |
|
|
357 |
|
<tr height="15"> |
358 |
|
<td height="15"> </td> |
359 |
|
</tr> |
360 |
|
|
361 |
|
<tr> |
362 |
|
<td align="left" valign="top"> |
363 |
|
<b><tt>disk</tt>:</b> |
364 |
|
<p>Disk controller, which can read from and write |
365 |
|
to disk images. It does not use interrupts; read and |
366 |
|
write operations finish instantaneously. |
367 |
|
<p>Source code: <font color="#0000f0"><tt>src/devices/dev_disk.c</tt></font> |
368 |
|
<br>Default physical address:  <font color="#0000f0">0x13000000</font> |
369 |
|
</td> |
370 |
|
<td></td> |
371 |
|
<td align="left" valign="top"> |
372 |
|
<table border="0"> |
373 |
|
<tr> |
374 |
|
<td align="left" valign="top"><i><u>Offset:</u></i> </td> |
375 |
|
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
376 |
|
</tr> |
377 |
|
<tr> |
378 |
|
<td align="left" valign="top"><tt>0x0000</tt></td> |
379 |
|
<td align="left" valign="top">Write: Set the offset (in bytes) from the beginning |
380 |
|
of the disk image. This offset will be used for the next read/write operation.</td> |
381 |
|
</tr> |
382 |
|
<tr> |
383 |
|
<td align="left" valign="top"><tt>0x0010</tt></td> |
384 |
|
<td align="left" valign="top">Write: Select the SCSI ID to be used in the next |
385 |
|
read/write operation.</td> |
386 |
|
</tr> |
387 |
|
<tr> |
388 |
|
<td align="left" valign="top"><tt>0x0020</tt></td> |
389 |
|
<td align="left" valign="top">Write: Start a read or write operation. |
390 |
|
(Writing <tt>0</tt> means a Read operation, a <tt>1</tt> means a |
391 |
|
Write operation.)</td> |
392 |
|
</tr> |
393 |
|
<tr> |
394 |
|
<td align="left" valign="top"><tt>0x0030</tt></td> |
395 |
|
<td align="left" valign="top">Read: Get status of the last operation. |
396 |
|
(Status 0 means failure, non-zero means success.)</td> |
397 |
|
</tr> |
398 |
|
<tr> |
399 |
|
<td align="left" valign="top"><tt>0x4000-</tt><br><tt>0x41ff</tt> </td> |
400 |
|
<td align="left" valign="top">Read/Write: 512 bytes data buffer.</td> |
401 |
|
</tr> |
402 |
|
</table> |
403 |
|
</td> |
404 |
|
</tr> |
405 |
|
|
406 |
|
<tr height="15"> |
407 |
|
<td height="15"> </td> |
408 |
|
</tr> |
409 |
|
|
410 |
|
<tr> |
411 |
|
<td align="left" valign="top"> |
412 |
|
<b><tt>ether</tt>:</b> |
413 |
|
<p>A simple ethernet controller, enough to send |
414 |
|
and receive packets on a simulated network. |
415 |
|
<p>Source code: <font color="#0000f0"><tt>src/devices/dev_ether.c</tt></font> |
416 |
|
<br>Default physical address:  <font color="#0000f0">0x14000000</font> |
417 |
|
</td> |
418 |
|
<td></td> |
419 |
|
<td align="left" valign="top"> |
420 |
|
<table border="0"> |
421 |
|
<tr> |
422 |
|
<td align="left" valign="top"><i><u>Offset:</u></i> </td> |
423 |
|
<td align="left" valign="top"><i><u>Effect:</u></i></td> |
424 |
|
</tr> |
425 |
|
<tr> |
426 |
|
<td align="left" valign="top"><tt>0x0000-</tt><br><tt>0x3fff</tt></td> |
427 |
|
<td align="left" valign="top">Read/write buffer for the packet to be sent/received.</td> |
428 |
|
</tr> |
429 |
|
<tr> |
430 |
|
<td align="left" valign="top"><tt>0x4000</tt></td> |
431 |
|
<td align="left" valign="top">Read: status word, one or more of these: |
432 |
|
<br><tt>0x01</tt> = something was received (because of |
433 |
|
the last command) |
434 |
|
<br><tt>0x02</tt> = more packets are available |
435 |
|
<br><i>NOTE:</i> Whenever the status word is non-zero, |
436 |
|
an interrupt is asserted. Reading the status word |
437 |
|
clears it, and deasserts the interrupt.</td> |
438 |
|
</tr> |
439 |
|
<tr> |
440 |
|
<td align="left" valign="top"><tt>0x4010</tt></td> |
441 |
|
<td align="left" valign="top">Read: get the Length of the received packet |
442 |
|
<br>Write: set the Length of the next packet to transmit</td> |
443 |
|
</tr> |
444 |
|
<tr> |
445 |
|
<td align="left" valign="top"><tt>0x4020</tt></td> |
446 |
|
<td align="left" valign="top">Write: command: |
447 |
|
<br><tt>0x00:</tt> receive a packet |
448 |
|
<br><tt>0x01:</tt> send a packet</td> |
449 |
|
</tr> |
450 |
|
</table> |
451 |
|
</td> |
452 |
|
</tr> |
453 |
|
|
454 |
</table></center> |
</table></center> |
455 |
|
|
456 |
<p> |
<p> |
458 |
intentionally made simpler to use. (An exception is the framebuffer; |
intentionally made simpler to use. (An exception is the framebuffer; |
459 |
some machines actually have simple linear framebuffers like this.) |
some machines actually have simple linear framebuffers like this.) |
460 |
|
|
461 |
<p> |
<p>If the physical address is <tt>0x10000000</tt>, then for MIPS that |
462 |
If the physical address is 0x10000000, then for MIPS that means that it |
means that it can be accessed at virtual address |
463 |
can be accessed at virtual address 0xffffffffb0000000. (Actually it can be |
<tt>0xffffffffb0000000</tt>. (Actually it can be accessed at |
464 |
accessed at 0xffffffff90000000 too, but devices should usually be accessed |
<tt>0xffffffff90000000</tt> too, but devices should usually be accessed in |
465 |
in a non-cached manner.) |
a non-cached manner.) |
466 |
|
|
467 |
<p> |
<p> (When using the PPC test machine (<tt>testppc</tt>), the addresses are |
468 |
(When using the PPC test machine (<tt>testppc</tt>), the addresses are |
<tt>0x10000000</tt>, <tt>0x11000000</tt> etc., so no need to add any |
469 |
0x10000000, 0x11000000 etc., so no need to add any virtual displacement.) |
virtual displacement.) |
470 |
|
|
471 |
<p>The <b><tt>mp</tt></b> device is agnostic when it comes to word-length. |
<p>The <b><tt>mp</tt></b>, <b><tt>disk</tt></b>, and <b><tt>ether</tt></b> |
472 |
For example, when reading offset 0x0000 of the <b><tt>mp</tt></b> device, |
devices are agnostic when it comes to word-length. For example, when |
473 |
you may use any kind of read (an 8-bit read will work just as well as a |
reading offset <tt>0x0000</tt> of the <b><tt>mp</tt></b> |
474 |
64-bit read, although the value will be truncated to 8 bits in the first |
device, you may use any kind of read (an 8-bit read will work just as well |
475 |
case). |
as a 64-bit read, although the value will be truncated to 8 bits in the |
476 |
|
first case). You can <i>not</i>, however, read one byte from <tt>0x0000</tt> |
477 |
|
and one from <tt>0x0001</tt>, and combine the result. The read from |
478 |
|
<tt>0x0001</tt> will be invalid. |
479 |
|
|
480 |
<p>The <b><tt>cons</tt></b> device should be accessed using 8-bit reads |
<p>The <b><tt>cons</tt></b> device should be accessed using 8-bit reads |
481 |
and writes. Doing a getchar() (ie reading from offset 0x0000) returns 0x00 |
and writes. Doing a getchar() (ie reading from offset <tt>0x00</tt>) |
482 |
if no character was available. |
returns <tt>0</tt> if no character was available. |
483 |
|
|
484 |
<p>On MIPS, the <b><tt>cons</tt></b> device is hardwired to interrupt 2 |
<p>On MIPS, the <b><tt>cons</tt></b> device is hardwired to interrupt 2 |
485 |
(the lowest hardware interrupt). Whenever a character is available, the |
(the lowest hardware interrupt). Whenever a character is available, the |
487 |
interrupt is deasserted. (Remember that the interrupt has to be enabled in |
interrupt is deasserted. (Remember that the interrupt has to be enabled in |
488 |
the status register of the system coprocessor.) |
the status register of the system coprocessor.) |
489 |
|
|
490 |
<p>The IPIs controlled by the <b><tt>mp</tt></b> device are hardwired to |
<p>The <b><tt>ether</tt></b> device is hardwired to interrupt 3. |
491 |
interrupt 6. Whenever an IPI is "sent", interrupt 6 is asserted on the |
|
492 |
target CPU(s), and the IPI number is added last in the IPI queue for that |
<p>The IPIs controlled by the <b><tt>mp</tt></b> device are hardwired to |
493 |
CPU. It is then up to that CPU to read from offset 0x00c0, to figure out |
interrupt 6. Whenever an IPI is "sent", interrupt 6 is asserted on the |
494 |
what kind of IPI it was. |
target CPU(s), and the IPI number is added last in the IPI queue for that |
495 |
|
CPU. It is then up to that CPU to read from offset <tt>0x00c0</tt>, to |
496 |
|
figure out what kind of IPI it was. |
497 |
|
|
498 |
|
<p>A simple tutorial on how to use the <tt>disk</tt> device, if not clear |
499 |
|
from the description above, can be found here: <a |
500 |
|
href="test_disk.c"><tt>test_disk.c</tt></a> |
501 |
|
|
502 |
|
|
503 |
|
|
517 |
<p> |
<p> |
518 |
<font color="#ff0000"> |
<font color="#ff0000"> |
519 |
NOTE: This is <i>not</i> a list of kernels that work in the emulator. |
NOTE: This is <i>not</i> a list of kernels that work in the emulator. |
520 |
It is a list of kernels that I experiment with. |
It is a list of kernels that I have experimented with. |
521 |
</font> |
</font> |
522 |
|
|
523 |
<p> |
<p> |
533 |
<li><a href="http://www.netbsd.org/Ports/pmax/">NetBSD/pmax</a>: |
<li><a href="http://www.netbsd.org/Ports/pmax/">NetBSD/pmax</a>: |
534 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.gz</a> |
535 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz</a> |
536 |
<br>gunzip the files, and run the emulator with <b><tt>-E dec -e 3max -q -N -XY2</tt></b> |
<br>gunzip the files, and run the emulator with <b><tt>-e 3max -q -N -XY2</tt></b> |
537 |
for a graphical framebuffer console. Remove <b><tt>-XY2</tt></b> and <b><tt>-N</tt></b> to use serial (stdin/stdout) console. |
for a graphical framebuffer console. Remove <b><tt>-XY2</tt></b> and <b><tt>-N</tt></b> to use serial (stdin/stdout) console. |
538 |
Read <a href="guestoses.html#netbsdinstall">this section</a> about how to install NetBSD/pmax onto a harddisk image. |
Read <a href="guestoses.html#netbsdinstall">this section</a> about how to install NetBSD/pmax onto a harddisk image. |
539 |
<p> |
<p> |
540 |
<li><a href="http://www.openbsd.org/pmax.html">OpenBSD/pmax</a>: |
<li><a href="http://www.openbsd.org/pmax.html">OpenBSD/pmax</a>: |
541 |
<br><a href="ftp://ftp.se.openbsd.org/pub/OpenBSD/2.8/pmax/bsd">ftp://ftp.se.openbsd.org/pub/OpenBSD/2.8/pmax/bsd</a> |
<br><a href="ftp://ftp.se.openbsd.org/pub/OpenBSD/2.8/pmax/bsd">ftp://ftp.se.openbsd.org/pub/OpenBSD/2.8/pmax/bsd</a> |
542 |
<br>This is an old OpenBSD kernel in a.out format. Try <b><tt>-E dec -e 3max</tt></b>. |
<br>This is an old OpenBSD kernel in a.out format. Try <b><tt>-e 3max</tt></b>. |
543 |
<br>Read <a href="guestoses.html#openbsdinstall">this section</a> about how to install OpenBSD/pmax onto a harddisk image. |
<br>Read <a href="guestoses.html#openbsdinstall">this section</a> about how to install OpenBSD/pmax onto a harddisk image. |
544 |
It's a bit more complicated than installing NetBSD/pmax, but |
It's a bit more complicated than installing NetBSD/pmax, but |
545 |
it usually works. |
it usually works. |
567 |
<br>Also important: This is broken right now. :-( |
<br>Also important: This is broken right now. :-( |
568 |
<br>Download <a href="http://lost-contact.mit.edu/afs/athena/user/d/a/daveg/Info/Links/Mach/src/release/">http://lost-contact.mit.edu/afs/athena/user/d/a/daveg/Info/Links/Mach/src/release</a>/<a href="http://lost-contact.mit.edu/afs/athena/user/d/a/daveg/Info/Links/Mach/src/release/pmax.tar.Z">pmax.tar.Z</a> |
<br>Download <a href="http://lost-contact.mit.edu/afs/athena/user/d/a/daveg/Info/Links/Mach/src/release/">http://lost-contact.mit.edu/afs/athena/user/d/a/daveg/Info/Links/Mach/src/release</a>/<a href="http://lost-contact.mit.edu/afs/athena/user/d/a/daveg/Info/Links/Mach/src/release/pmax.tar.Z">pmax.tar.Z</a> |
569 |
<br><tt><b>tar xfvz pmax.tar.Z pmax_mach/special/mach.boot.MK83.STD+ANY</b></tt> |
<br><tt><b>tar xfvz pmax.tar.Z pmax_mach/special/mach.boot.MK83.STD+ANY</b></tt> |
570 |
<br><tt><b>gxemul -E dec -e 3max -X pmax_mach/special/mach.boot.MK83.STD+ANY</b></tt> |
<br><tt><b>gxemul -e 3max -X pmax_mach/special/mach.boot.MK83.STD+ANY</b></tt> |
571 |
</ul> |
</ul> |
572 |
</li> |
</li> |
573 |
|
|
578 |
<li><a href="http://www.netbsd.org/Ports/sgimips/">NetBSD/sgimips</a>: |
<li><a href="http://www.netbsd.org/Ports/sgimips/">NetBSD/sgimips</a>: |
579 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz</a> |
580 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz</a> |
581 |
<br>gunzip, and try running with <b><tt>-E sgi -e ip32</tt></b>. |
<br>gunzip, and try running with <b><tt>-e ip32</tt></b>. |
582 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz</a> |
583 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz</a> |
584 |
<br>gunzip, and try running with <b><tt>-E sgi -e ip22</tt></b> (or <b><tt>ip24</tt></b> or <b><tt>ip20</tt></b>). |
<br>gunzip, and try running with <b><tt>-e ip22</tt></b> (or <b><tt>ip24</tt></b> or <b><tt>ip20</tt></b>). |
585 |
<p> |
<p> |
586 |
<li>Linux/SGI: |
<li>Linux/SGI: |
587 |
<br>Some kernels are available here: <a href="http://www.linux-mips.org/~glaurung/">http://www.linux-mips.org/~glaurung/</a> |
<br>Some kernels are available here: <a href="http://www.linux-mips.org/~glaurung/">http://www.linux-mips.org/~glaurung/</a> |
588 |
<br>Try running with <b><tt>-E sgi -e ip32 -X</tt></b> for a graphical framebuffer, or |
<br>Try running with <b><tt>-e ip32 -X</tt></b> for a graphical framebuffer, or |
589 |
<b><tt>-E sgi -e ip32 -o 'console=ttyS0'</tt></b> for serial console. |
<b><tt>-e ip32 -o 'console=ttyS0'</tt></b> for serial console. |
590 |
<br>Adding <b><tt>-b</tt></b> (bintrans) might work sometimes. |
<br>Adding <b><tt>-b</tt></b> (bintrans) might work sometimes. |
591 |
<br>(You need to add <b><tt>-CR5000</tt></b> if you're trying to run |
<br>(You need to add <b><tt>-CR5000</tt></b> if you're trying to run |
592 |
a kernel compiled for R5000, because Linux doesn't autodetect |
a kernel compiled for R5000, because Linux doesn't autodetect |
593 |
the CPU type at runtime.) |
the CPU type at runtime.) |
594 |
<br>Also: <a href="http://www.tal.org/~milang/o2/kernels/">http://www.tal.org/~milang/o2/kernels</a>/<a href="http://home.tal.org/~milang/o2/kernels/vmlinux64-2.6.8.1-IP32">vmlinux64-2.6.8.1-IP32</a> |
<br>Also: <a href="http://www.tal.org/~milang/o2/kernels/">http://www.tal.org/~milang/o2/kernels</a>/<a href="http://home.tal.org/~milang/o2/kernels/vmlinux64-2.6.8.1-IP32">vmlinux64-2.6.8.1-IP32</a> |
595 |
<br>Try <b><tt>-E sgi -e ip32 -b -X -CR5000 vmlinux64-2.6.8.1-IP32</tt></b>. |
<br>Try <b><tt>-e ip32 -X -CR5000 vmlinux64-2.6.8.1-IP32</tt></b>. |
596 |
<br>And also some IP27 kernels: |
<br>And also some IP27 kernels: |
597 |
<a href="http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040428">http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040428</a> |
<a href="http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040428">http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040428</a> |
598 |
and |
and |
599 |
<a href="http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040528.bz2">http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040528.bz2</a> |
<a href="http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040528.bz2">http://www.total-knowledge.com/progs/mips/kernels/vmlinux.ip27-20040528.bz2</a> |
600 |
(but unfortunately these lack symbols). |
(but unfortunately these lack symbols). |
601 |
<br>Try the IP27 kernels with <b><tt>-E sgi -e ip27 -t</tt></b>. |
<br>Try the IP27 kernels with <b><tt>-e ip27 -t</tt></b>. |
602 |
<p> |
<p> |
603 |
<li><a href="http://www.openbsd.org/sgi.html">OpenBSD/sgi</a>: |
<li><a href="http://www.openbsd.org/sgi.html">OpenBSD/sgi</a>: |
604 |
<br><a href="ftp://ftp.openbsd.org/pub/OpenBSD/3.7/sgi/bsd.rd">ftp://ftp.openbsd.org/pub/OpenBSD/3.7/sgi/bsd.rd</a> |
<br><a href="ftp://ftp.openbsd.org/pub/OpenBSD/3.7/sgi/bsd.rd">ftp://ftp.openbsd.org/pub/OpenBSD/3.7/sgi/bsd.rd</a> |
605 |
<br>More recent snapshots can be found at <a href="ftp://ftp.OpenBSD.org/pub/OpenBSD/snapshots/sgi/">ftp://ftp.OpenBSD.org/pub/OpenBSD/snapshots/sgi/</a>. |
<br>More recent snapshots can be found at <a href="ftp://ftp.OpenBSD.org/pub/OpenBSD/snapshots/sgi/">ftp://ftp.OpenBSD.org/pub/OpenBSD/snapshots/sgi/</a>. |
606 |
<br>Try <b><tt>gxemul -b -E sgi -e ip32 bsd.rd</tt></b> |
<br>Try <b><tt>gxemul -e ip32 bsd.rd</tt></b> |
607 |
<p> |
<p> |
608 |
<li><a href="http://www.freebsd.org/platforms/mips.html">FreeBSD/MIPS</a>: |
<li><a href="http://www.freebsd.org/platforms/mips.html">FreeBSD/MIPS</a>: |
609 |
I don't think public binary snapshots are available yet. |
I don't think public binary snapshots are available yet. |
611 |
<li>arcdiag: |
<li>arcdiag: |
612 |
<br>The NetBSD people have also made available an "arcdiag" for SGI-IP22: |
<br>The NetBSD people have also made available an "arcdiag" for SGI-IP22: |
613 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/arch/sgimips/arcdiag.ip22">ftp://ftp.netbsd.org/pub/NetBSD/arch/sgimips/arcdiag.ip22</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/arch/sgimips/arcdiag.ip22">ftp://ftp.netbsd.org/pub/NetBSD/arch/sgimips/arcdiag.ip22</a> |
614 |
<br>Try running <tt><b>gxemul -E sgi -e ip22 -x arcdiag.ip22</b></tt>. |
<br>Try running <tt><b>gxemul -e ip22 -x arcdiag.ip22</b></tt>. |
615 |
</ul> |
</ul> |
616 |
</li> |
</li> |
617 |
|
|
622 |
<li><a href="http://www.netbsd.org/Ports/arc/">NetBSD/arc</a>: |
<li><a href="http://www.netbsd.org/Ports/arc/">NetBSD/arc</a>: |
623 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.gz</a> |
624 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz</a> |
625 |
<br>gunzip, and try with <b><tt>-E arc -e rd94</tt></b>. |
<br>gunzip, and try with <b><tt>-e rd94</tt></b>. |
626 |
<br>(You may also try other ARC models.) |
<br>(You may also try other ARC models.) |
627 |
<br>Read <a href="guestoses.html#netbsdarcinstall">this section</a> about how |
<br>Read <a href="guestoses.html#netbsdarcinstall">this section</a> about how |
628 |
to install NetBSD/arc 1.6.2 onto a harddisk image. |
to install NetBSD/arc 1.6.2 onto a harddisk image. |
630 |
<p> |
<p> |
631 |
<li><a href="http://www.openbsd.org/arc.html">OpenBSD/arc</a>: |
<li><a href="http://www.openbsd.org/arc.html">OpenBSD/arc</a>: |
632 |
<br><a href="ftp://ftp.se.openbsd.org/pub/OpenBSD/2.3/arc/bsd.rd.elf">ftp://ftp.se.openbsd.org/pub/OpenBSD/2.3/arc/bsd.rd.elf</a> |
<br><a href="ftp://ftp.se.openbsd.org/pub/OpenBSD/2.3/arc/bsd.rd.elf">ftp://ftp.se.openbsd.org/pub/OpenBSD/2.3/arc/bsd.rd.elf</a> |
633 |
<br>Try running with <b><tt>-X -E arc -e pica</tt></b> or <b><tt>-X -E arc -e tyne</tt></b>. |
<br>Try running with <b><tt>-X -e pica</tt></b> or <b><tt>-X -e tyne</tt></b>. |
634 |
<br>Read <a href="guestoses.html#openbsdarcinstall">this section</a> about how |
<br>Read <a href="guestoses.html#openbsdarcinstall">this section</a> about how |
635 |
to install OpenBSD/arc onto a harddisk image. |
to install OpenBSD/arc onto a harddisk image. |
636 |
<p> |
<p> |
637 |
<li>Linux: |
<li>Linux: |
638 |
<br><a href="ftp://ftp.linux-mips.org/pub/linux/mips/mipsel-linux/boot/vmlinux-m700-2.1.131.gz">ftp://ftp.linux-mips.org/pub/linux/mips/mipsel-linux/boot/vmlinux-m700-2.1.131.gz</a> |
<br><a href="ftp://ftp.linux-mips.org/pub/linux/mips/mipsel-linux/boot/vmlinux-m700-2.1.131.gz">ftp://ftp.linux-mips.org/pub/linux/mips/mipsel-linux/boot/vmlinux-m700-2.1.131.gz</a> |
639 |
<br>gunzip, and run with <b><tt>-v -J -X -N -E arc -e m700</tt></b> (Olivetti M700) |
<br>gunzip, and run with <b><tt>-v -J -X -N -e m700</tt></b> (Olivetti M700) |
640 |
<br>(This probably doesn't work anymore.) |
<br>(This probably doesn't work anymore.) |
641 |
<p> |
<p> |
642 |
<li>Pandora: |
<li>Pandora: |
643 |
<br><a href="ftp://ftp.linux-mips.org/pub/linux/mips/ancient/milo/">ftp://ftp.linux-mips.org/pub/linux/mips/ancient/milo</a>/<a href="ftp://ftp.linux-mips.org/pub/linux/mips/ancient/milo/milo-0.27.1.tar.gz">milo-0.27.1.tar.gz</a> |
<br><a href="ftp://ftp.linux-mips.org/pub/linux/mips/ancient/milo/">ftp://ftp.linux-mips.org/pub/linux/mips/ancient/milo</a>/<a href="ftp://ftp.linux-mips.org/pub/linux/mips/ancient/milo/milo-0.27.1.tar.gz">milo-0.27.1.tar.gz</a> |
644 |
<br>A generic test/diagnostics program for ARC-based machines. |
<br>A generic test/diagnostics program for ARC-based machines. |
645 |
<br>Run with <b><tt>-E arc -e r94 milo-0.27.1/pandora</tt></b> |
<br>Run with <b><tt>-e r94 milo-0.27.1/pandora</tt></b> |
646 |
<p> |
<p> |
647 |
<li>arcdiag: |
<li>arcdiag: |
648 |
<br>Precompiled binary:<a href="ftp://ftp.netbsd.org/pub/NetBSD/arch/arc/arcdiag">ftp://ftp.netbsd.org/pub/NetBSD/arch/arc/arcdiag</a> |
<br>Precompiled binary:<a href="ftp://ftp.netbsd.org/pub/NetBSD/arch/arc/arcdiag">ftp://ftp.netbsd.org/pub/NetBSD/arch/arc/arcdiag</a> |
649 |
<br>(alternative: <a href="http://www.sensi.org/~alec/mips/arcdiag">http://www.sensi.org/~alec/mips/arcdiag</a>) |
<br>(alternative: <a href="http://www.sensi.org/~alec/mips/arcdiag">http://www.sensi.org/~alec/mips/arcdiag</a>) |
650 |
<br>A generic test/diagnostics program for ARC-based machines. |
<br>A generic test/diagnostics program for ARC-based machines. |
651 |
<br>Run with <b><tt>-E arc -e pica arcdiag</tt></b> (or some other ARC mode). |
<br>Run with <b><tt>-e pica arcdiag</tt></b> (or some other ARC mode). |
652 |
<br>Example arcdiag output (from real machines): |
<br>Example arcdiag output (from real machines): |
653 |
<br><a href="http://mail-index.netbsd.org/port-arc/2000/10/18/0001.html">http://mail-index.netbsd.org/port-arc/2000/10/18/0001.html</a> (Olivetti M700-10) |
<br><a href="http://mail-index.netbsd.org/port-arc/2000/10/18/0001.html">http://mail-index.netbsd.org/port-arc/2000/10/18/0001.html</a> (Olivetti M700-10) |
654 |
<br><a href="http://www.sensi.org/~alec/mips/arcdiag.txt">http://www.sensi.org/~alec/mips/arcdiag.txt</a> (PICA-61) |
<br><a href="http://www.sensi.org/~alec/mips/arcdiag.txt">http://www.sensi.org/~alec/mips/arcdiag.txt</a> (PICA-61) |
668 |
<br>I have tried this with the Swedish version, but it might |
<br>I have tried this with the Swedish version, but it might |
669 |
work with other versions too.<pre> |
work with other versions too.<pre> |
670 |
$ <b><tt>dd if=/dev/zero of=winnt_test.img bs=1024 count=1 seek=999000</tt></b> |
$ <b><tt>dd if=/dev/zero of=winnt_test.img bs=1024 count=1 seek=999000</tt></b> |
671 |
$ <b><tt>gxemul -X -b -Earc -epica -d winnt_test.img -d bc6:/dev/cd0c -j MIPS\\ARCINST</tt></b> |
$ <b><tt>gxemul -X -e pica -d winnt_test.img -d bc6:/dev/cd0c -j MIPS\\ARCINST</tt></b> |
672 |
$ <b><tt>gxemul -X -b -Earc -epica -d winnt_test.img -d bc6:/dev/cd0c -j MIPS\\SETUPLDR</tt></b> |
$ <b><tt>gxemul -X -e pica -d winnt_test.img -d bc6:/dev/cd0c -j MIPS\\SETUPLDR</tt></b> |
673 |
</pre> <br><tt>ARCINST</tt> tries to prepare the disk image for installation. (It <i>almost</i> works.) |
</pre> <br><tt>ARCINST</tt> tries to prepare the disk image for installation. (It <i>almost</i> works.) |
674 |
<br><tt>SETUPLDR</tt> should load some drivers from the cdrom, but then it crashes with a bluescreen. |
<br><tt>SETUPLDR</tt> should load some drivers from the cdrom, but then it crashes with a bluescreen. |
675 |
</ul> |
</ul> |
681 |
<ul> |
<ul> |
682 |
<li><a href="http://www.netbsd.org/Ports/hpcmips/">NetBSD/hpcmips</a>: |
<li><a href="http://www.netbsd.org/Ports/hpcmips/">NetBSD/hpcmips</a>: |
683 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/installation/">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/installation</a>/<a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/installation/netbsd.gz">netbsd.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/installation/">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/installation</a>/<a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/installation/netbsd.gz">netbsd.gz</a> |
684 |
<br>Try <b><tt>gxemul -X -b -E hpc -e mobilepro770 netbsd</tt></b> |
<br>Try <b><tt>gxemul -X -e mobilepro770 netbsd</tt></b> |
685 |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/binary/kernel/netbsd-GENERIC.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/binary/kernel/netbsd-GENERIC.gz</a> |
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/binary/kernel/netbsd-GENERIC.gz">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0/hpcmips/binary/kernel/netbsd-GENERIC.gz</a> |
686 |
<br>Try <b><tt>gxemul -X -b -E hpc -e mobilepro770 netbsd-GENERIC</tt></b> |
<br>Try <b><tt>gxemul -X -e mobilepro770 netbsd-GENERIC</tt></b> |
687 |
<p> |
<p> |
688 |
<li>Linux for BE300: |
<li>Linux for BE300: |
689 |
<br><a href="http://www.linux4.be/2004/linux4be20040908.zip">http://www.linux4.be/2004/linux4be20040908.zip</a> |
<br><a href="http://www.linux4.be/2004/linux4be20040908.zip">http://www.linux4.be/2004/linux4be20040908.zip</a> |
690 |
<br>Try <b><tt>gxemul -X -b -E hpc -e be300 vmlinux</tt></b> |
<br>Try <b><tt>gxemul -X -e be300 vmlinux</tt></b> |
691 |
<p> |
<p> |
692 |
<li>Linux for Agenda VR3: |
<li>Linux for Agenda VR3: |
693 |
<br>Download <a href="http://agenda-snow.sourceforge.net/kernel-old-versions/binary/">http://agenda-snow.sourceforge.net/kernel-old-versions/binary</a>/<a href="http://agenda-snow.sourceforge.net/kernel-old-versions/binary/root1.2.6.kernel-8.00">root1.2.6.kernel-8.00</a> |
<br>Download <a href="http://agenda-snow.sourceforge.net/kernel-old-versions/binary/">http://agenda-snow.sourceforge.net/kernel-old-versions/binary</a>/<a href="http://agenda-snow.sourceforge.net/kernel-old-versions/binary/root1.2.6.kernel-8.00">root1.2.6.kernel-8.00</a> |
694 |
<br>and <a href="http://vr3.uid0.sk/cd/Software/VR3_Distributions/H2O/">http://vr3.uid0.sk/cd/Software/VR3_Distributions/H2O</a>/<a href="http://vr3.uid0.sk/cd/Software/VR3_Distributions/H2O/root1.2.6.cramfs">root1.2.6.cramfs</a>. |
<br>and <a href="http://vr3.uid0.sk/cd/Software/VR3_Distributions/H2O/">http://vr3.uid0.sk/cd/Software/VR3_Distributions/H2O</a>/<a href="http://vr3.uid0.sk/cd/Software/VR3_Distributions/H2O/root1.2.6.cramfs">root1.2.6.cramfs</a>. |
695 |
<br>(or <a href="http://www.ipsec.info/~www/agenda/dream-1-noxip.cramfs">http://www.ipsec.info/~www/agenda/dream-1-noxip.cramfs</a>) |
<br>(or <a href="http://www.ipsec.info/~www/agenda/dream-1-noxip.cramfs">http://www.ipsec.info/~www/agenda/dream-1-noxip.cramfs</a>) |
696 |
<br>Try <b><tt>gxemul -b -X -E hpc -e vr3 -x 0xbf200000:root1.2.6.cramfs 0xbf000000:0:0xbf0005e0:root1.2.6.kernel-8.00</tt></b> |
<br>Try <b><tt>gxemul -X -e vr3 -x 0xbf200000:root1.2.6.cramfs 0xbf000000:0:0xbf0005e0:root1.2.6.kernel-8.00</tt></b> |
697 |
<br>(or replace root1.2.6.cramfs with dream-1-noxip.cramfs) |
<br>(or replace root1.2.6.cramfs with dream-1-noxip.cramfs) |
698 |
<br>Remove <b><tt>-X</tt></b> to try with serial console instead of X, and |
<br>Remove <b><tt>-X</tt></b> to try with serial console instead of X, and |
699 |
remove <b><tt>-b</tt></b> to try without (old) bintrans. |
remove <b><tt>-b</tt></b> to try without (old) bintrans. |
705 |
<li>Linux for MobilePro etc.: |
<li>Linux for MobilePro etc.: |
706 |
<br><a href="http://pc1.peanuts.gr.jp/~kei/Hard-Float/Kernels/">http://pc1.peanuts.gr.jp/~kei/Hard-Float/Kernels/</a> |
<br><a href="http://pc1.peanuts.gr.jp/~kei/Hard-Float/Kernels/">http://pc1.peanuts.gr.jp/~kei/Hard-Float/Kernels/</a> |
707 |
<br>Uncompress the archive to get a kernel, vmlinux-800 for example. |
<br>Uncompress the archive to get a kernel, vmlinux-800 for example. |
708 |
<br>Try <b><tt>./gxemul -b -X -o 'root=/dev/hda1' -d r:disk.img -d r:disk.img -Ehpc -e mobilepro800 vmlinux-800</tt></b> |
<br>Try <b><tt>./gxemul -X -o 'root=/dev/hda1' -d r:disk.img -d r:disk.img -e mobilepro800 vmlinux-800</tt></b> |
709 |
<br>where disk.img is an ext2fs filesystem with contents from |
<br>where disk.img is an ext2fs filesystem with contents from |
710 |
<a href="http://pc1.peanuts.gr.jp/~kei/Hard-Float/Miniroots/miniroot-20010330.tar.bz2">http://pc1.peanuts.gr.jp/~kei/Hard-Float/Miniroots/miniroot-20010330.tar.bz2</a> |
<a href="http://pc1.peanuts.gr.jp/~kei/Hard-Float/Miniroots/miniroot-20010330.tar.bz2">http://pc1.peanuts.gr.jp/~kei/Hard-Float/Miniroots/miniroot-20010330.tar.bz2</a> |
711 |
<br>(Note the double disk arguments.) |
<br>(Note the double disk arguments.) |
713 |
<p> |
<p> |
714 |
<li><a href="http://www.disorder.ru/openbsd/be300/">OpenBSD/be300</a>: |
<li><a href="http://www.disorder.ru/openbsd/be300/">OpenBSD/be300</a>: |
715 |
<br><a href="http://www.disorder.ru/openbsd/be300/bsd.rd">http://www.disorder.ru/openbsd/be300/bsd.rd</a> |
<br><a href="http://www.disorder.ru/openbsd/be300/bsd.rd">http://www.disorder.ru/openbsd/be300/bsd.rd</a> |
716 |
<br>Try <b><tt>gxemul -X -b -E hpc -e be300 bsd.rd</tt></b> |
<br>Try <b><tt>gxemul -X -e be300 bsd.rd</tt></b> |
717 |
<br>Note: -b might be buggy, so you can try without that if you want to. |
<br>Note: bintrans might be buggy, so you can try with -B if you want to. |
718 |
</ul> |
</ul> |
719 |
</li> |
</li> |
720 |
|
|
731 |
<li>Linux: |
<li>Linux: |
732 |
<br><a href="http://people.debian.org/~pm/mips-cobalt/nfsroot/vmlinux_raq-2800.gz">http://people.debian.org/~pm/mips-cobalt/nfsroot/vmlinux_raq-2800.gz</a> |
<br><a href="http://people.debian.org/~pm/mips-cobalt/nfsroot/vmlinux_raq-2800.gz">http://people.debian.org/~pm/mips-cobalt/nfsroot/vmlinux_raq-2800.gz</a> |
733 |
<br>gunzip, and run with <b><tt>-E cobalt</tt></b> |
<br>gunzip, and run with <b><tt>-E cobalt</tt></b> |
734 |
|
<p> |
735 |
|
<br><a href="http://dev.gentoo.org/~kumba/mips/cobalt/netboot/cobalt-netboot-20040428.img.gz">http://dev.gentoo.org/~kumba/mips/</a> |
736 |
|
<br> <a href="http://dev.gentoo.org/~kumba/mips/cobalt/netboot/cobalt-netboot-20040428.img.gz">cobalt/netboot/cobalt-netboot-20040428.img.gz</a> |
737 |
|
<br><b><tt>gxemul -E cobalt cobalt-netboot-20040428.img.gz</tt></b> |
738 |
<p> |
<p> |
739 |
<li>CoLo: |
<li>CoLo: |
740 |
<br><a href="http://www.colonel-panic.org/cobalt-mips/colo/colo-1.19.tar.gz">http://www.colonel-panic.org/cobalt-mips/colo/colo-1.19.tar.gz</a> |
<br><a href="http://www.colonel-panic.org/cobalt-mips/colo/colo-1.19.tar.gz">http://www.colonel-panic.org/cobalt-mips/colo/colo-1.19.tar.gz</a> |
762 |
</ul> |
</ul> |
763 |
</li> |
</li> |
764 |
|
|
765 |
|
<p> |
766 |
|
|
767 |
|
<li>EVBMIPS: |
768 |
|
<ul> |
769 |
|
<li><a href="http://www.netbsd.org/Ports/evbmips/">NetBSD/evbmips</a>: |
770 |
|
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel</a>/<a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz">netbsd-MALTA.gz</a> |
771 |
|
<br><b><tt>gxemul -e malta netbsd-MALTA</tt></b> |
772 |
|
<br>The default CPU is a 5Kc (MIPS64). Add |
773 |
|
<tt>-C 4Kc</tt> to use a MIPS32 CPU instead. |
774 |
|
<br>(NetBSD/evbmips runs in 32-bit mode on MIPS64 anyway...) |
775 |
|
<br>Read <a href="guestoses.html#netbsdevbmipsinstall">this |
776 |
|
section</a> on how to install NetBSD/evbmips onto a harddisk image. |
777 |
|
<br>or |
778 |
|
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel</a>/<a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/netbsd-PB1000.gz">netbsd-PB1000.gz</a> |
779 |
|
<br><b><tt>gxemul -e pb1000 netbsd-PB1000</tt></b> |
780 |
|
</ul> |
781 |
|
</li> |
782 |
|
|
783 |
</ul> |
</ul> |
784 |
|
|
785 |
<p> |
<p> |
830 |
|
|
831 |
<p> |
<p> |
832 |
|
|
|
<li>EVBMIPS: |
|
|
<ul> |
|
|
<li><a href="http://www.netbsd.org/Ports/evbmips/">NetBSD/evbmips</a>: |
|
|
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel</a>/<a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz">netbsd-MALTA.gz</a> |
|
|
<br><b><tt>gxemul -t -E evbmips -e malta netbsd-MALTA</tt></b> |
|
|
<br>or |
|
|
<br><a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/">ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel</a>/<a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/evbmips-mipseb/binary/kernel/netbsd-PB1000.gz">netbsd-PB1000.gz</a> |
|
|
<br><b><tt>gxemul -t -E evbmips -e pb1000 netbsd-PB1000</tt></b> |
|
|
</ul> |
|
|
</li> |
|
|
|
|
|
<p> |
|
|
|
|
833 |
<li>Walnut (evbppc): |
<li>Walnut (evbppc): |
834 |
<ul> |
<ul> |
835 |
<li><a href="http://www.netbsd.org/Ports/evbppc/">NetBSD/evbppc</a>: |
<li><a href="http://www.netbsd.org/Ports/evbppc/">NetBSD/evbppc</a>: |
923 |
</li> |
</li> |
924 |
</ul> |
</ul> |
925 |
|
|
|
<p> |
|
|
The URISC emulation mode is just for fun. (Read |
|
|
<a href="http://en.wikipedia.org/wiki/URISC">http://en.wikipedia.org/wiki/URISC</a> |
|
|
for more info.) |
|
|
|
|
|
<p> |
|
|
<ul> |
|
|
|
|
|
<li>URISC: |
|
|
<ul> |
|
|
<li>I've placed a small test program in the experiments directory. |
|
|
<br>Start like this: <tt><b>gxemul -E testurisc 0:urisc_test.bin</b></tt> |
|
|
<br>or, if you want to single-step: |
|
|
<b><tt>gxemul -V -E testurisc 0:urisc_test.bin</b></tt> |
|
|
<br>2005-03-01: All outputed characters are printed twice. I'll |
|
|
try to make a pseudo-device for outputing to "normal" devices |
|
|
later. |
|
|
</ul> |
|
|
</li> |
|
|
|
|
|
</ul> |
|
926 |
|
|
927 |
|
|
928 |
|
|