On 17 Jan 2007 at 11:22, Don North wrote:
Lisa (and Macintosh) used the original 68000 which was
not capable of
recovering from an arbitrary access (page) fault in the middle of an
instruction (the updated 68010 fixed this, but Apple never used it).
The 68000 did lot leave enough info on the fault stack to indicate
which memory access within an instruction faulted, and which registers
might have been auto-incremented/decremented.
Exactly why I said that calling the Lisa architecture "virtual
memory" is misleading at best. One could not write a loop to move 2
megabytes using a simple MOVEM/SUBQ/BNE loop as if all of the memory
were seamlessly continuous and present.
I remember trying to make a list of 68K instructions that could be
restarted, wondering if it might be possible to construct a useful
subset. One of the gotchas was that the bus error handling in the
68K gave you a P-counter that was only guaranteed to be "in the
vicinity" of the failing instruction. I gave up after awhile.
Of course, it wasn't necessary to implement virtual memory in
hardware. JRT Pascal did it--on floppy yet. (an interesting aspect
of an otherwise miserable product).
Cheers,
Chuck
On the Lisa all accesses to memory that was not previously known
to be memory resident used a probe instruction (a TST.W (A0), IIRC)
that only did one memory access and did not alter the registers.
Lisa was a segmented memory architecture, not demand paged, so the
overhead was not too great. Stack extension also used this probe IIRC.