[net.micro.68k] The 68010 and MMU's

phil@brl-tgr.ARPA (Phil Dykstra ) (07/08/84)

	Does anyone know what has happened to the MC68451
(the MMU that was supposed to work with the 68010)?  I have
heard rumors that the original release did not work do to
a design oversight.  Is this chip being made?  Is there
any other/better way to get memory management with a 68K
processor?  Does the 68010 offer anything over the plain
68000 (other than minor micro-code improvements) if it does
not have a MMU?

	Any comments on this matter would be *greatly*
appreciated.  Thanks.
				phil@brl

jds@rlgvax.UUCP (Jack Slingwine) (07/09/84)

The M68451 predates the M68010, should still be available and
is documented in "M68000 Programmer's Reference Manual (third
edition)" (for availability, see below).

I had (briefly) experimented with the M68010 using the M68451
and everything seemed to work fine.  Based on my experience with
the M68451, you should do your own MMU or wait for Motorola's
(rumored) demand paging MMU chip (the M68451 is not a demand
paging MMU, although it could support some form of virtual memory).

As far as differences between the M68000 and M68010: "M68000
(16/32-BIT MICROPROCESSOR -- Programmer's Reference Manual)
(forth edition)" is the book you want to consult, available
directly from:

	Prentice-Hall, Inc
	Englewood Cliffs, N.J.  07632
	(201) 767-9520

For ~$20 a crack.  This manual documents the M68000, M68008 and
M68010 (but NOT the M68451) (bleed tabs and revision bars indicate
the differences between the different microprocessors).  Differences
between the M68000 and M68010 include:

	Addition of VBR, SFC and DFC registers:

	-	The Vector Base Register holds the address of the
		start of the interrupt vectors (i.e. you can move them
		from "0").
	-	The Source Function Code and Destination Function Code
		registers (when used with the MOVES instruction) give
		you a "better" way of moving between address spaces (i.e.
		kernel to user and back).

	Ability to continue instructions and a "better" exception stack
	layout:

	-	Upon a bus or address error, certain words of the processor
		internal state are dumped onto the stack, allowing
		continuation upon subsequent RTE.
	-	The stacks for all exceptions have the same four words on
		the stack top, bus and address error have their additional
		information below this.

	Addition of new instructions:

	MOVEC	allows you to manipulate the VBR, SFC, DFC and USP.

	MOVES	allows you to move between the address spaces specified by
		the SFC and DFC.

	MOVE from CCR
		allows you to directly examine the condition codes (this
		was formerly done by "MOVE from SR" (see below)).

	RTD	Return and Deallocate -- new linkage primitive.

	Modification of instruction:

	MOVE from SR
		has been made privledged.  This prevents user mode programs
		from determining which mode they're running in (allowing you
		to test operating systems in user mode).

	Definition of eight "breakpoint" illegal instructions:

		0x4848-0x484f cause an illegal instruction exception to
		be generated with a "breakpoint" bus cycle prior to
		exception processing (FC0-2 held high, address lines low);
		this could allow you to trigger a logic analyser.

	Addition of "loop mode" to DBcc instruction:

		A DBcc together with certain one word instructions
		triggers a "loop mode" in which no program fetches are
		generated.  This can be used to effect a "block move"
		instruction with a:

			1$:  move.X (aX)+,(aY)+
			     dbf    dZ,1$

		sequence.

			Jack Slingwine
			{seismo,ihnp4,allegra}!rlgvax!jds

fair@dual.UUCP (Erik E. Fair) (07/21/84)

The 68451 is indeed working and available. This system is using one as
I type this followup. UniSoft Systems, the System V UNIX porting house
has done 26 ports of UNIX to 68000 systems with the 68451 MMU in them.
However, I agree with jds@rlgvax.UUCP (Jack Slingwine) that it isn't the
greatest MMU in the world, and that you might be better advised to wait
either for the new Motorola MMU or use the national semiconductor MMU.

	Erik E. Fair	ucbvax!fair	fair@ucb-arpa.ARPA

	dual!fair@BERKELEY.ARPA
	{ihnp4,ucbvax,hplabs,decwrl,cbosgd,sun,nsc,apple,pyramid}!dual!fair
	Dual Systems Corporation, Berkeley, California

mats@dual.UUCP (Mats Wichmann) (07/23/84)

As Erik pointed out, the 451 MMU exists - we have been shipping
product with this chip since May, 1982. As to whether it is a good
chip or not - not great, but it works. Who can afford to wait years
until someone `does it right' when the market windows are so small?
You have to come out with whatever is feasible at the time you
are designing the product, which is why we use a 451, Sun uses
something of their own design with TTL chips, most of the rest of
the micro-unix world uses one or the other of those schemes, and very 
few people are using the National MMU.

	    Mats Wichmann
	    Dual Systems Corp.
	    ...{ucbvax,amd,ihnp4,cbosgd,decwrl,fortune}!dual!mats

geoff@callan.UUCP (Geoff Kuenning) (07/27/84)

Jack Slingwine gave an excellent summary of the major 68010 differences in his
note.  However, I cannot resist sticking my nose in and pointing out a few
more things:

The 68010 has generally speeded-up instructions compared to the 68000;  we
find about a 15% improvement when running at the same clock speed.  The
speedups are mostly in the common instructions:  moves, adds, etc.  This
is probably the biggest payoff of having a 68010 in a non-MMU system.

The 68010 has more lenient bus-error timing.  This can be a factor in an ECC
memory design which reports ECC problems with bus errors, since ECC status is
typically available quite late in a memory cycle.

I was looking up some 68010 instruction execution times and discovered
something interesting:  the "loop mode" is still not the fastest way to
move memory.  The execution time for "movl a0@+,a1@+" in loop mode is
22 clocks (loop continued;  I am assuming a large block of memory).  On
the other hand, if you use move multiple (as discussed previously in this
newsgroup) you must execute four instructions:  "moveml a0@+,#mask" where
'mask' specifies 12 registers, "moveml #mask,a1@", "addl #12*4,a1", and
"dbra d0,loop".  This all takes  236 clocks per pass, compared with 264 clocks
for an equivalent amount of moving in loop mode.  On the other hand, you
have to do a divide instruction (122 cycles) to get the loop counter; this
only pays off if you have more than 60 longwords to move.

MMU's:

The 68451 is a great MMU if you have a segmented architecture with very few
(32 or less) segments.  Since the PDP-11 had only 8, Unix fits quite well on
such an MMU.  Unfortunately, the 451 introduces at least one wait state, so
you have to pay CPU performance unless you introduce a cache ahead of the MMU.
When you get to going virtual on a 68010, however, the 451 simply can't hack
it.  Not enough distinctly identifiable pages.

The 68881 Paged MMU has been formally announced, but no silicon has actually
seen the light of day.  I have seen some specs;  it is a pretty neat and
flexible little device--one of those satisfy-everybody (once you figure out
how to set it up) jobbies in the USART/PIO mold.  There is some doubt among
my rumormongers that the chip will ever actually come to fruition--but then
I heard that about the 020.
-- 

	Geoff Kuenning
	Callan Data Systems
	...!ihnp4!wlbr!callan!geoff