Subject: Re: Broken kernels?
To: Michael L. Hitch <>
From: Eduardo E. Horvath <>
List: amiga-dev
Date: 03/14/1994 08:59:09
On Sun, 13 Mar 1994, Michael L. Hitch wrote:

>   You could put a test in after pagetable_size is computed and check it for
> a reasonable amount.  If it's too large (or negative), set the screen color
> and hang in a loop.

OK, I tried adding this code:
  for (; 
       i < vstart + (UPAGES + 1)*AMIGA_PAGE_SIZE;
       i += AMIGA_PAGE_SIZE, pg_proto += AMIGA_PAGE_SIZE)
    *pg++ = pg_proto;

*((short*)0xdff180) = 0x050;

while( pg > 0x0600000 )
    *((short*)0xdff180) = 0x0f00;
while( pagetable_pa > 0x0600000 )
    *((short*)0xdff180) = 0x0f0;
/* it freezes right here ^^^^^^ */

while( pagetable_size > 0x0400000 )
    *((short*)0xdff180) = 0x0f;

while( pagetable_pa + pagetable_size > 0x0400000 )
    *((short*)0xdff180) = 0x0ff;

while( pagetable_pa + pagetable_size <= 0 )
    *((short*)0xdff180) = 0x0ff0;

  /* invalidate remainder of kernel PT */
  while (pg < ((u_int *) (pagetable_pa + pagetable_size)))
    *pg++ = PG_NV;

*((short*)0xdff180) = 0x0500;

When I try to boot, it flashes bright green for almost a second,
implying that pagetable_pa > 6MB, then goes bright red.  That should
not happen.  Here's the assembly code for that while loop:

	cmpl #6291456,d3
	jls L82
	movel #14676352,a0
	movew #240,a0@		| These two lines are the 
	jra L83			| 	infinite loop.
	cmpl #4194304,a6@(-20)

I see now way to exit that loop without some sort of asynchronous
event (i.e. interrupt).  Seems that whatever the problem is, it may
not be in amiga_init.c.  Any ideas now?

Eduardo Horvath
	"Trust me, I am cognizant of what I am doing." - Hammeroid