[uClinux-dev] uClinux for Palm IIIc - Palmloader Analysis

Michael F. Sharp mikes at tbc.net
Thu Mar 13 11:55:49 EST 2003


Hi all,
In my relentless pursuit to get uClinux to boot on my Palm IIIc, I have 
made yet more discoveries. I put in some comments to Palmloader.c, and 
got as far as "Booting code..." Beyond that point, the PDA freezes. I 
wait at least 2 minutes before resets as well. Below is the code... if 
anybody can suggest a value for jmp, I'll give it a try.

Also, interesting note: Though the Palm IIIc is claimed to have 2M ROM, 
and 8M RAM, only 7.7M are avilable in RAM. So, I adjusted my values in 
PalmLoader.c, (see 0x75cff0 ( 7.7M - 16 )) crt0_ram.S, and ram.ld (see 
0x0075d000 ( 7.7M ))  accordingly. I'll just post the changes, no sense 
in uploading what we already know ;-)

Cheers,
Mike

**** /uClinux-dist/vendors/3com/palm-loader/PalmLoader.c: (Start line 
118 ) ****

printf("%d pages in 0x%.6lx bytes\n",i,(long)i*(long)4096);
printf("Ordering image pages...\n");
asm volatile ("movew #0x069d, 0xfffff116");
asm volatile ("movew #0x2700, %sr");
printf("Done...\n"); <--- Added comment
ptr = (void *)0;
for (i=0; blk[i]; i++) {
   for (j=i+1; blk[j]; j++) {
     if (blk[j] < blk[i]) {
       /* wrong order... swap */
       MC(tmp, blk[j], 4096);
       MC(blk[j], blk[i], 4096);
       MC(blk[i], tmp, 4096);
       ptr = blk[j];
       blk[j] = blk[i];
       blk[i] = ptr;
     }
   }
}
// printf("Done\n"); <--- Added comment

/* Ok!  Ints off, move the boot code to 0x400 and jump */
printf("Booting Code...\n"); <--- Added comment
asm volatile ("movew #0x2700, %sr; moveal #0x75cff0, %ssp");
printf("movew #0x2700...\n"); <---- Never make it to here...
asm volatile ("movew #0x069d, 0xfffff116");
printf("movew #0x069d... Booting done?...\n"); <--- Added comment
MC((void *)0x400, blk[0], 4096);
MC((void *)0x000, (void *) blk, 1024);
printf("jmp 0x800 next...\n"); <--- Added comment
asm volatile ("movel #0, %a0; jmp 0x800");
printf("Building Forms...\n"); <--- Added comment
}

**** 
/uClinux-dist/linux-2.0.x/arch/m68knommu/platform/68EZ328/PalmV/crt0_ram.S: 
(Start line 116 ) ****

#endif

	DEBUG('B');

	moveal	#0x007ffff0, %ssp
	move.l #0x0075d000, %a0
	move.l  %a0, _ramend
	moveal	#__bss_start, %a0
	moveal	#__bss_end, %a1

	/* Copy 0 to %a0 until %a0 >= %a1 */

**** 
/uClinux-dist/linux-2.0.x/arch/m68knommu/platform/68EZ328/PalmV/ram.ld 
(Start line 1 ) ****

MEMORY
	{
	romvec : ORIGIN = 0x10c10000, LENGTH = 0x00000400
	flash  : ORIGIN = 0x10c10400, LENGTH = 0x00200000 - 0x00010400
	eflash : ORIGIN = 0x10e00000, LENGTH = 0
	ramvec : ORIGIN = 0x00000000, LENGTH = 0x00000400
	bvec   : ORIGIN = 0x00000400, LENGTH = 0x00000400
	ram    : ORIGIN = 0x00000800, LENGTH = 0x0075d000 - 0x00000800
	eram   : ORIGIN = 0x0075d000, LENGTH = 0
	}




More information about the uClinux-dev mailing list