Emulating a processor

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

Threaded View
Hi all,

I'm interested to understand the processor architecture in depth. So i
decided on emulating the processor itself (as my project). The best one
to start would be 386.

So i wud require some documents which explains on how to emulate any
processor or devices. ( Apart from the Intel Architecture documents
available).
How to emulate a 386 processor. I want to kno how usually this is done.
I wonder how bochs has been developed so elegantly...the resource
they've used.

It wud be appreciable if someone can guide me on any documents  or
reference books avaliable on Emulating processors and devices.

.
Wht are the resources I should have in hand to start up up this
project.

Thanks,
Gromer


Re: Emulating a processor
why not take a look at the Bochs source code?  Of course, it emulates
an entire PC system, not just the processor...


Re: Emulating a processor
basically you have two choices:

full emulation: you read a byte from (emulated) ram and
interpret/execute it (use a huge switch-statement). then advance to the
next byte and interpret/execute it, ...


the virtualpc/qemu-with-accelerator/vmware/...-way: run the code as
ring3-process. catch every exception and emulate the thing that caused
the exception (i/o ports, mmu-stuff, ...)


but i suggest starting with something similar to dosbox
(http://dosbox.sf.net /). create a real-mode-only-emulator first. messing
around with page-tables and exceptions makes emulation quite difficult
to get right...

regards,
simon


Gromer wrote:
Quoted text here. Click to load it

Re: Emulating a processor
["Followup-To:" nach comp.arch.embedded gesetzt.]


Quoted text here. Click to load it

VMWare does not work this way.

Markus

Re: Emulating a processor
Quoted text here. Click to load it

no? how does it work?

Re: Emulating a processor

Quoted text here. Click to load it

It does not emulate the processor, it just uses it.

Markus

Re: Emulating a processor
Quoted text here. Click to load it

Which is what he said.  It does emulate the IO (or a lot of it, anyway)
though, and provides emulated hardware like video cards, network cards
and the like.  Which is also what he said.

--
Nobby

Re: Emulating a processor

Quoted text here. Click to load it

IIRC, it does a kind of JIT rewrite.  Before first execution it scans
the code for privileged or problem instruction sequences and patches
in an equivalent code sequence or a trap to a handler.

The result is that most of the application runs without interference.

George
--
for email reply remove "/" from address

Re: Emulating a processor
Quoted text here. Click to load it

Yes, privileged instructions have to be replaced, although I don't know if
VMware uses breakpoints or some other scheme.
The main reason for this is that Intel made the error that not every
privileged instruction causes a general protection fault when executed in user
mode (ie. ring 3), although theoretically it should be that way.

Quoted text here. Click to load it

Actually, applications running on a protected mode operating system shouldn't
use privileged instructions anyway, so almost 100% of application code would
run directly on the processor. It's the operating systems and system software
(eg. drivers) where the code replacement is mainly needed.

--
M.I.K.e

Re: Emulating a processor
Quoted text here. Click to load it

how does it work then?

simon

Re: Emulating a processor
Quoted text here. Click to load it

Not if you want to finish the run in your lifetime... For a simple byte
code, like 8080, you use an array of pointers to functions, so you can
just branch without doing any compares. For a machine with prefix codes,
like x86, when you decode the prefix you add another level of
indirection, and jump through a pointer to array of pointer to function.
That pointer sort of converts the emulation to a state machine.

Note that if you just want to run the program and get the right results,
this is relatively simple, although you need emulated hardware to go
with the i/o instructions, or with more effort and per-byte flags memory
mapped i/o.

If you want to handle timing, cache, etc, it's a BIG project!

--
bill davidsen
   SBC/Prodigy Yorktown Heights NY data center
We've slightly trimmed the long signature. Click to see the full one.
Re: Emulating a processor
[F'up2 cut down --- OP neglected doing it.]


Quoted text here. Click to load it

I really wonder by what strange criteria the 386 could possibly come
out as "the best".  Actually, the x86 is almost certainly the single
worst possible CPU line to do any theoretical work on.  It's just too
plagued with silly exceptions due to its long history of compatibility
kept at almost any cost.

If you really want to learn something about CPU emulation, I'd
recommend Professor Knuth's work on the MIX and MMIX platforms ---
those are CPUs designed purely for educational purpose, and they only
ever existed as emulators, the original ones written by his Knuth-ness
in person.

--
Hans-Bernhard Broeker ( snipped-for-privacy@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.

Re: Emulating a processor
Hi Gromer

Why not to take an approach to vhdl.
Instead of emulating you can simulate and even synthesize.
If your aim is to better understand how a processor work this may give you a
deeper understanding.
Also there are numerous processor cores available as open source in vhdl,
mainly microcontrollers.


Quoted text here. Click to load it



Re: Emulating a processor

Quoted text here. Click to load it

Yikes.  Since you've never written an emulator, I would have
recommended starting with a decent architecture. Something like
a PDP-11 or 6809 or Z80.  The '386 is a really nasty bit of
work.  It's 3 or 4 badly designed processors rolled into one.

Quoted text here. Click to load it

Well, if you want to know how bochs as done, then look at the
bochs source code and documentation.

Quoted text here. Click to load it

--
Grant Edwards                   grante             Yow!  Yow! Are we in the
                                  at               perfect mood?
We've slightly trimmed the long signature. Click to see the full one.
Re: Emulating a processor

Quoted text here. Click to load it

Agreed.

I wrote a Z80 simulator (I believe that the correct term for this thread's
topic is "simulator" rather than "emulator".) 20 years ao in 8088 assembler
on an 8 MHz AT&T 6300 that, at the time, had two 5.25" floppies and no hard
disk!

I used a rather straight forward (brute force?) method of allocating data
structures for the internal registers and look up tables for the op-codes.
The tables where used to jump to functions that "executed" the op-codes.
An Intel hex file decoder read program files into the simulated Z80 memory
space.

As usual, the hardest part was the user interface, especially the displays
of registers, and memory and I/O spaces.  Interrupt generation was the
program's weak point and the thing I most planned to improve but never
got around to.

The greatest benefit of writing this program was the education concerning
the Z80's internals.  I was writing embedded Z80 systems so this was a
good thing!

I had long thought that I had lost the source to this program but, in a
office renovation, I recently came across a disk that appears to contain
it.  The trouble is that I no longer have a machine with a 5.25" floppy
drive. I might have to buy such a drive on eBay soon and see if the disk
is still readable!

--
========================================================================
          Michael Kesti            |  "And like, one and one don't make
We've slightly trimmed the long signature. Click to see the full one.
Re: Emulating a processor
Quoted text here. Click to load it
I did the same thing for the 68K processor.   I also simulated a simple
serial port and a few interrupts.   As you say, the most difficult part
was the user interface.  My simulator was done on a Macintosh and worked
well enough that I used it when I taught an introductory course on
computer architecture.   It turned out to be most useful in illustrating
what happens in memory when you use stack-based parameters for
subroutines.  It beat the heck out of keeping track of the stack with
paper and pencil!

My simulator would  interpret M68K assembly language in a text file--
stepping through the source code and showing  effects on registers
and memory.   It was cool at the time (mid 80's), but now you can
get a better simulator with just about every IDE designed to
do cross-compilation and debugging with an embedded processor.

Mark Borgerson



Re: Emulating a processor

Quoted text here. Click to load it

When I showed my simulator to the division engineering manager he asked
me if I could do a 68K version because we were about to embark on a 68K
project.  I told him that I probably wouldn't finish it before the project's
final testing phase and that it probably wouldn't be all that useful even
if it was available sooner than that.

Quoted text here. Click to load it

Yes, I can see that a classroom environment may be the best place for
serious use of such programs.

Quoted text here. Click to load it

It didn't occur to me to have my simulator also be an assembler, but I
can see that this would be cool.  How did you deal with forward references?

Quoted text here. Click to load it

I've used plenty of IDE-based cross compilers and debuggers but don't
recall any of them being equipped with simlators.  Can you provide some
examples of such?

--
========================================================================
          Michael Kesti            |  "And like, one and one don't make
We've slightly trimmed the long signature. Click to see the full one.
Re: Emulating a processor
Quoted text here. Click to load it

The whole source file was in memory,  so it was straightforward to do
multiple passes  to make up the symbol table,  count the code bytes,
and resolve the forward references.
 
Quoted text here. Click to load it


Perhaps they're not as common as I thought.  But I think that MPLab for
the PIC chips has a simulator.  Codewarrior PALMOS has a palm device
emulator.    I think that the Keil 8051 system that I used about
10 years ago had a simulator as part of the system.  I think the C-Spy
debugger for the IAR ARM development system also has a simulator
option--although I've not used it.

Mark Borgerson


Re: Emulating a processor
Quoted text here. Click to load it

Another use is testing code from a cross-compiler for a
processor that doesn't exist yet.  With this application,
you also get to deal with the vagaries of the documentation.
It teaches you that some people have unusual ideas as to
what constitutes a good processor design ["you don't need
no steenkin' signed arithmetic"].

Quoted text here. Click to load it

Re: Emulating a processor
...
Quoted text here. Click to load it

I beg your pardon, what's so bad about signed arithmetics?

Alex



Site Timeline