Subject: locore.s -> mmu handler
To: None <amiga-dev@netbsd.org>
From: Tim Newsham <newsham@uhunix.uhcc.Hawaii.Edu>
List: amiga-dev
Date: 09/14/1994 00:39:38
Hi,
  I'm reading through the buserror/addrerror fault handler in
locore.s (the '030 branch in particular) and I came across something
I dont quite understand.  The SSW is fetched and RB and RC are tested.
If RB is 1 then FB is set.  If RC is 1 then FC is set.  The reference
I have (which isn't the motorola refernce :(  says that in order
to rerun the instruction that caused the instruction alls that need
be done is an RTE.

Also the book I have doesnt mention the method of finding the
fault address so I dug through the code and this is what I
came up with.  Please let me know if you see any errors in
this:

  if short format trap
    if DF set in SSW 
       fault = fault address  (offset 16 from trap frame)
    else
       fault = pc (offset 2 from trap frame)
       if FB set in SSW
         fault += 4
       else if FC set in SSW
         fault += 2
  else
    fault = stage B address (offset 36)
    if FC set in SSW
      fault += 2

  fault contains fault address

Seems pretty complicated just to get the fault address that the
CPU could have shoved into a single register at the time of
the fault.  What does 'fault address' contain in the cases
it is not being used above?

                            Tim N.