Subject: Re: Booter
To: None <MGiovann@getinfo.org.ar>
From: Allen Briggs <briggs@cray-ymp.acm.stuorg.vt.edu>
List: macbsd-development
Date: 05/02/1994 20:43:34
> > Does anyone know what might be happening?  All that routine does is
> > copy a large block of code from some virtual address 'x' to virtual
> > address 0, then jump so some location (0x952).
> 
> The address 0x952 may well be into the cache...Try with a PFLUSHA
> instr...I apologize if this happens to be nonsense; I really *don't*
> know what is going on *inside* the booter... =)

Well, I've pounded on this a bit more...  It looks like it's dying in a
loop that looks something like this:

	move.l	from, A0	; This is something like 16MB of 20MB machine
	move.l	to, A1		; This is zero.
	move.l	len, D0		; This is 0x39000 or something close ;-)

@again:
	move.l	(A0)+, (A1)+
	subq.l	#1, D0
	bne	@again

The values all look alright (after all, it works on my SE/30 ;-).
As far as I can tell, it's dying somewhere near the beginning.
Right above that, it ORs 0x700 into the status register to knock
off any interrupts.  We *are* writing over the vector table, so if
we were getting some exception, we'd be rather hosed, but I can't
see how that's happening.  Then again, I can't see how it's not
happening.  I don't think I'm getting as far as the "jmp (A0)" that
follows the loop.  I've tried making that group of pages non-cacheable
by modifying the page tables.

Anyone have any other ideas?  Hmm.  I haven't tried this pflusha--I
can't see it helping, but I'll try that tonight, maybe...

Thanks,
-allen

-- 
Allen Briggs - end killing - allen.briggs@vt.edu ** MacBSD == NetBSD/Mac **
= Over the years you swam the ocean following feelings of your own [...]  =
== It's a shame to have to die to put the shadow on our eyes.  We don't  ==
=== want to care. Under the bridge. Over the phone. Wind on the Water.  ===

------------------------------------------------------------------------------