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

Diff of /trunk/doc/technical.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 12 by dpavlin, Mon Oct 8 16:18:38 2007 UTC revision 20 by dpavlin, Mon Oct 8 16:19:23 2007 UTC
# Line 10  Line 10 
10    
11  <!--  <!--
12    
13  $Id: technical.html,v 1.62 2005/08/16 05:15:24 debug Exp $  $Id: technical.html,v 1.67 2005/11/24 12:32:10 debug Exp $
14    
15  Copyright (C) 2004-2005  Anders Gavare.  All rights reserved.  Copyright (C) 2004-2005  Anders Gavare.  All rights reserved.
16    
# Line 64  SUCH DAMAGE. Line 64  SUCH DAMAGE.
64  <a name="speed"></a>  <a name="speed"></a>
65  <h3>Speed and emulation modes</h3>  <h3>Speed and emulation modes</h3>
66    
67  So, how fast is GXemul? There is no good answer to this. There is  So, how fast is GXemul? There is no short answer to this. There is
68  especially no answer to the question <b>What is the slowdown factor?</b>,  especially no answer to the question <b>What is the slowdown factor?</b>,
69  because the host architecture and emulated architecture can usually not be  because the host architecture and emulated architecture can usually not be
70  compared just like that.  compared just like that.
# Line 89  with the emulator. Typical examples woul Line 89  with the emulator. Typical examples woul
89  install NetBSD?", or "How long does it take to compile XYZ inside NetBSD  install NetBSD?", or "How long does it take to compile XYZ inside NetBSD
90  in the emulator?".  in the emulator?".
91    
92    <p>So, how fast is it? :-)&nbsp;&nbsp;&nbsp;Answer: it varies.
93    
94  <p>The emulation technique used varies depending on which processor type  <p>The emulation technique used varies depending on which processor type
95  is being emulated. (One of my main goals with GXemul is to experiment with  is being emulated. (One of my main goals with GXemul is to experiment with
96  different kinds of emulation, so these might change in the future.)  different kinds of emulation, so these might change in the future.)
# Line 106  different kinds of emulation, so these m Line 108  different kinds of emulation, so these m
108          line option.)          line option.)
109    <p>    <p>
110    <li><b>All other modes:</b><br>    <li><b>All other modes:</b><br>
111          These are under development, using a new dynamic translation          These use a kind of dynamic translation system. (This system does
112          system. This system does not use host-specific backends.          not use host-specific backends, so it is not "recompilation" or
113          Speed is slower than real binary translation, but faster than          anything like that.) Speed is slower than real binary translation,
114          traditional interpretation, and with some tricks it will hopefully          but faster than traditional interpretation, and with some tricks
115          still give reasonable speed. These modes don't really work yet,          it will hopefully still give reasonable speed. The ARM and PowerPC
116          and are not enabled by default in the stable release.          emulation modes uses this kind of translation.
117  </ul>  </ul>
118    
119    
# Line 316  a CDROM ISO image. You can use a read-wr Line 318  a CDROM ISO image. You can use a read-wr
318  files in both directions, but then you should be aware of the  files in both directions, but then you should be aware of the
319  fragmentation issue mentioned above.  fragmentation issue mentioned above.
320    
 <p>TODO: Write a section on how to connect multiple emulator instances.  
 (Using the <tt>local_port</tt> and <tt>add_remote</tt> configuration file  
 commands.)  
321    
322    
323    
# Line 329  commands.) Line 328  commands.)
328  <a name="devices"></a>  <a name="devices"></a>
329  <h3>Emulation of hardware devices</h3>  <h3>Emulation of hardware devices</h3>
330    
331  Each file in the <tt>src/device/</tt> directory is responsible for one  Each file called <tt>dev_*.c</tt> in the <tt>src/device/</tt> directory is
332  hardware device. These are used from <tt>src/machine.c</tt>, when  responsible for one hardware device. These are used from
333  initializing which hardware a particular machine model will be using, or  <tt>src/machine.c</tt>, when initializing which hardware a particular
334  when adding devices to a machine using the <tt>device()</tt> command in  machine model will be using, or when adding devices to a machine using the
335  configuration files.  <tt>device()</tt> command in configuration files.
   
 <p><font color="#ff0000">NOTE: The device registry subsystem is currently  
 in a state of flux, as it is being redesigned.</font>  
336    
337  <p>(I'll be using the name "<tt>foo</tt>" as the name of the device in all  <p>(I'll be using the name "<tt>foo</tt>" as the name of the device in all
338  these examples.  This is pseudo code, it might need some modification to  these examples.  This is pseudo code, it might need some modification to
# Line 372  actually compile and run.) Line 368  actually compile and run.)
368                    
369                  memory_device_register(devinit->machine->memory, devinit->name,                  memory_device_register(devinit->machine->memory, devinit->name,
370                      devinit->addr, DEV_FOO_LENGTH,                      devinit->addr, DEV_FOO_LENGTH,
371                      dev_foo_access, (void *)d, MEM_DEFAULT, NULL);                      dev_foo_access, (void *)d, DM_DEFAULT, NULL);
372                    
373                  /*  This should only be here if the device                  /*  This should only be here if the device
374                      has a tick function:  */                      has a tick function:  */
# Line 392  actually compile and run.) Line 388  actually compile and run.)
388                  /*  ...  */                  /*  ...  */
389          }          }
390  </pre><br>  </pre><br>
391            (There is an exception to this rule; ugly hacks which allow
392            code in <tt>src/machine.c</tt> to use some structures makes it
393            necessary to place the <tt>struct foo_data</tt> in
394            <tt>src/include/devices.h</tt> instead of in <tt>dev_foo.c</tt>
395            itself. This is useful for example for interrupt controllers.)
396      <p>
397    <li>If <tt>foo</tt> has a tick function (that is, something that needs to be    <li>If <tt>foo</tt> has a tick function (that is, something that needs to be
398          run at regular intervals) then <tt>FOO_TICKSHIFT</tt> and a tick          run at regular intervals) then <tt>FOO_TICKSHIFT</tt> and a tick
399          function need to be defined as well:          function need to be defined as well:
400  <pre>  <pre>
401          #define FOO_TICKSHIFT           10          #define FOO_TICKSHIFT           14
402    
403          void dev_foo_tick(struct cpu *cpu, void *extra)          void dev_foo_tick(struct cpu *cpu, void *extra)
404          {          {
# Line 410  actually compile and run.) Line 411  actually compile and run.)
411          }          }
412  </pre><br>  </pre><br>
413    
414      <li>Does this device belong to a standard bus?
415            <ul>
416              <li>If this device should be detectable as a PCI device, then
417                    glue code should be added to
418                    <tt>src/devices/bus_pci.c</tt>.
419              <li>If this is a legacy ISA device which should be usable by
420                    any machine which has an ISA bus, then the device should
421                    be added to <tt>src/devices/bus_isa.c</tt>.
422            </ul>
423      <p>
424    <li>And last but not least, the device should have an access function.    <li>And last but not least, the device should have an access function.
425          The access function is called whenever there is a load or store          The access function is called whenever there is a load or store
426          to an address which is in the device' memory mapped region.          to an address which is in the device' memory mapped region.

Legend:
Removed from v.12  
changed lines
  Added in v.20

  ViewVC Help
Powered by ViewVC 1.1.26