From: duening@ibr.cs.tu-bs.de (Lars Duening)
Subject: Re: 68010
Reply-To: duening@ibr.cs.tu-bs.de (Lars Duening)
Organization: TU Braunschweig, Informatik (Bueltenweg), Germany
Date: Sat, 12 Sep 1992 11:22:15 GMT

In <1992Sep11.193814.58831@cc.usu.edu> slb1b@cc.usu.edu (Holographic Banana)
writes:

> In article <4444@equinox.unr.edu>, dollens@equinox.unr.edu (C Blake Dollens) writes:
>> Someone on a local BBS suggested to me recently that a 68010 processor
>> supports virtual memory.  My immediate response was no, because you
>> need a PMMU for that purpose.  On the other hand, I realize that I
>> know very little about the '010

> I was about to say NO when I pulled off Motorolla's Programmer's Reference
> Manual. Page 1-8 (in part, I'm not typing the whole thing!)

> "...The MC68010/MC68012 provides hardware support for virtual memory with the
> capability of suspending an instruction's execution when a bus error is
> signaled and then completing the instruction after the physical
> memory has been updated as necessary.

That's the important point: the 680x0 redo the failed access when
returning from bus error exception. The good ol' 68000 just threw it
away, thus aborting the whole program.

> "The MC68010/MC68012 uses instruction continueation rather than instruction
> restart to support virtual memory.... when a page fault occurs the processor 
> stores its internal state and then after the page fault is repaired, restores
> that internal state and continues execution of the instruction. In order for
> the MC68010/MC68012 to utilize instruction continuation, it stores
> its internal state on the supervisor stack when a bus cycle is
> terminated with a bus error signal. It then loads the program
> counter from vector table entry number tow (offset $008) and resumes
> program execution at the new address. When the bus error execption
> hander routine has completed execution, and RTE instruction is
> executed which reloads the MC68010/MC68012 with the internal state stored on
> the stack, re-runs the faulted bus cycle, and continues the
> suspended instruction....."

> This seems like a messy way to do it with MMUs available on the '020
> and better. 

It's not messy at all - it's a must for utilizing a MMU. Hidden
between the lines is that the bus error handler, a.k.a. swapper,
determines the memory page of the failed access and loads it into
memory (either by swapping it in from disk, or allocating it from
scratch). The swapper then remaps the MMU to let the virtual address
which caused the page fault point to the physical address space of the
loaded page, and exits then. The instruction in question will now be
continued, and since the memory accessed does now exist (at least
virtually), the program will happily go on.

Another way to do would be that the bus error handler modifies the
data dumped on the stack to allow continuation - but that's heavy and
very evil magic.

> But an interesting intelectual exercize.  Am I wrong in thinking that
> the entire 16Mb address area is mapped on the A500? If so, it would
> render the aforementioned capability useless.

Yes and no: with an additional MMU it's possible to 'unmap' the
address area.

> In a nutshell, VM is not available on the '010 in any practical sense.

Again yes and no: you need a MMU for real VM, and I am afraid that the
available PMMU can't be used with the 68010. You have to built one
yourself if you need it.

> ...
> This is got to be one of the most controversial subject: '010 replacement vs.
> leaving the bloody case on the A500 :-)

Add a 68010 and fast memory to your A500/A2000. If a program then runs from
hard disk without errors, chances are that it'll run on every amiga.

 -- Lars
Newsgroups: comp.sys.amiga.misc,comp,sys.amiga.programmer