Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!henry From: henry@utzoo.UUCP (Henry Spencer) Newsgroups: net.micro.atari16,net.micro.amiga,net.micro.68k Subject: Re: 68000 Memory Managment Message-ID: <7073@utzoo.UUCP> Date: Tue, 26-Aug-86 16:16:08 EDT Article-I.D.: utzoo.7073 Posted: Tue Aug 26 16:16:08 1986 Date-Received: Tue, 26-Aug-86 16:16:08 EDT References: <508@elmgate.UUCP> <767@ark.UUCP>, <3260@ism780c.UUCP> Organization: U of Toronto Zoology Lines: 24 Keywords: 68000 atari amiga 68k mmu > I have heard people claim that there is enough information around > after a bus error ( or address error ) to restart most instructions, > if the bus error handler is willing to be clever. However, I haven't > seen any actual code... Anyone know if this is true? If so, what > are the instructions that can't be restarted? Probably true. The 68000 is a sort of mutated PDP-11, and software on the 11 could backtrack well enough to restart most instructions. This is what Unix on the 11/40, 34, 23, 60, et al did/does. The major problem comes when an instruction modifies registers: which registers did it modify before it died? The larger 11s had an MMU which would tell you. The cut-down version of the MMU, which is what the 40 et al had/have, won't. So the software has to guess. It can usually guess right. The fundamentally intractable cases are where the instruction modifies the same register more than once, and you can't tell how many times it did it before the fault. The automatic stack growth on small-11 Unixes would generally fail if you used something like "cmp -(sp), -(sp)" to grow the stack two words; I believe the compiler never did this, and assembler programmers simply had to look out for themselves. On the 68000 it's worse, because important and useful instructions like move-multiple can modify the same register several times. -- Henry Spencer @ U of Toronto Zoology {allegra,ihnp4,decvax,pyramid}!utzoo!henry