OSLoader - Partially ported to HPC - Not Booting yet

Hasjim Williams futaris01@optusnet.com.au
Mon, 12 May 2003 13:32:36 +1000

This is a multi-part message in MIME format.

Content-Type: text/plain;
Content-Transfer-Encoding: 7bit


I've had a little fiddle with osloader and gotten it working on the
Jornada 820.  In case you don't know, OSLoader is what the Compaq
Handhelds group used to boot "bootldr" before they had completed their
flash loader, bootblaster.  I have attached a version that doesn't
really do much at the moment, besides dump registers and load "\My
Documents\wince-bootldr.bin" into memory at 0xC0022000 (Halfway in the
framebuffer - I didn't modify the address).  As there are no versions of
wince-bootldr that actually support the Jornada 820 yet, I haven't
gotten this code working.  Additionally, I think the older inline
assembly doesn't work.  The wince-bootldr.bin that supports the Jornada
720 should work, but I don't know where to find it.  The latest bootldr
at handhelds.org doesn't seem to support building wince-bootldr yet.
Perhaps if I checkout an older version of bootldr, we can build a
version for the Jornada 820, and use it to dump RAM, FLASH, etc.

The following code snippet should work on the SA-1100 too, no???:

#if defined(ARM)
	__emit( 0xe3a00000 );	// mov r0,#0 
	__emit( 0xee070f17  );	// mcr  15, 0, r0, cr7, cr7, {0}  flush
ID cache 
	__emit( 0xee010f10 );   // mcr  15, 0, r0, cr1, cr0, {0}  //
disable MMU 

	// Jump to 0xc0022000, trashes r1, r2
	__emit( 0xe3a02103 );   // mov     r2, #-1073741824 ; 0xc0000000
	__emit( 0xe2821a22 );	// add     r1, r2, #139264  ; 0x22000 
	__emit( 0xe1a0f001 );	// mov     pc, r1
#  define JumpToC0022000()	\
{ \
	__emit( 0xe3a00000 );	\
	__emit( 0xee070f17 );	\
	__emit( 0xee010f10 );   \
	__emit( 0xe3a02103 );   \
	__emit( 0xe2821a22 );	\
	__emit( 0xe1a0f001 );	\
#  define JumpToC0022000()

I have also attached a copy of the regdump.txt that osloader spits out
into "\Windows".  There is another utility called "syswatch" that is in
the same directory as osloader.  This utility is probably a lot more
useful as it monitors the state of a device.  

It does this by saving all the registers periodically.  The user gets to
define the period to the nearest ms.  Currently it only saves the
differences for a maximum of 100 time deltas.  
eg. if I say to monitor every 1000ms I will get 100s worht of data. The
monitoring will cease when 100th period is reached and the details will
be written to a file (regdiff.txt).

See the source directories below for more info.

The original windowsce utilities are located at
cvs.handhelds.org:/cvs/windowsce You can view the directory via the web
at http://cvs.handhelds.org/cgi-bin/viewcvs.cgi/windowsce/

My non-booting version can be found at:


Content-Type: text/plain;
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;

UDC (serial port 0) (addr:  contents)
   0x80000000:    0x00000041
   0x80000004:    0x00000000
   0x80000008:    0x00000008
   0x8000000C:    0x00000008
   0x80000010:    0x00000000
   0x80000014:    0x00000000
   0x80000018:    0x00000001
   0x8000001C:    0x00000029
   0x80000020:    0x00000000
   0x80000024:    0x00000000
   0x80000028:    0x00000041
   0x8000002C:    0x00000000
   0x80000030:    0x00000000
UART (serial port 1) (addr:  contents)
   0x80010000:    0x0000000C
   0x80010004:    0x00000000
   0x80010008:    0x000000BF
   0x8001000C:    0x00000009
   0x80010010:    0x00000000
   0x80010014:    0x000000A9
   0x80010018:    0x00000000
   0x8001001C:    0x00000000
   0x80010020:    0x00000004
GPCLK (serial port 1) (addr:  contents)
   0x80020060:    0x00000000
   0x80020064:    0x00000000
   0x80020068:    0x00000000
   0x8002006C:    0x00000000
   0x80020070:    0x00000000
   0x80020074:    0x00000000
   0x80020078:    0x00000000
   0x8002007C:    0x00000000
   0x80020080:    0x00000000
   0x80020084:    0x00000000
ICP - UART (serial port 2) (addr:  contents)
   0x80030000:    0x00000008
   0x80030004:    0x00000000
   0x80030008:    0x00000017
   0x8003000C:    0x00000000
   0x80030010:    0x00000000
   0x80030014:    0x000000DB
   0x80030018:    0x00000000
   0x8003001C:    0x00000000
   0x80030020:    0x00000004
ICP - HSSP (serial port 2) (addr:  contents)
   0x80040060:    0x00000000
   0x80040064:    0x00000000
   0x80040068:    0x00000000
   0x8004006C:    0x00000000
   0x80040070:    0x00000000
   0x80040074:    0x00000000
   0x80040078:    0x00000000
UART (serial port 3 (addr:  contents)
   0x80050000:    0x00000008
   0x80050004:    0x00000000
   0x80050008:    0x00000017
   0x8005000C:    0x00000000
   0x80050010:    0x00000000
   0x80050014:    0x000000FE
   0x80050018:    0x00000000
   0x8005001C:    0x00000000
   0x80050020:    0x00000004
MCP (serial port 4) (addr:  contents)
   0x80060000:    0x00052821
   0x80060004:    0x00000000
   0x80060008:    0x00000000
   0x8006000C:    0x00000000
   0x80060010:    0x0000032D
   0x80060014:    0x00000000
   0x80060018:    0x00001504
   0x8006001C:    0x00000000
SSP (serial port 4) (addr:  contents)
   0x80070060:    0x00000387
   0x80070064:    0x00000000
   0x80070068:    0x00000000
   0x8007006C:    0x000000CF
   0x80070070:    0x00000000
   0x80070074:    0x00000012
OS Timer (addr:  contents)
   0x90000000:    0xAD763777
   0x90000004:    0x21212744
   0x90000008:    0x2110008C
   0x9000000C:    0x28101A03
   0x90000010:    0xAD753D15
   0x90000014:    0x0000000C
   0x90000018:    0x00000000
   0x9000001C:    0x00000001
Real-Time Clock (addr:  contents)
   0x90010000:    0x007C0920
   0x90010004:    0x00035193
   0x90010008:    0x01148003
   0x9001000C:    0x00000000
Power Mangement (addr:  contents)
   0x90020000:    0x00000000
   0x90020004:    0x00000000
   0x90020008:    0x00000000
   0x9002000C:    0x80008001
   0x90020010:    0x00000001
   0x90020014:    0x00000009
   0x90020018:    0x02000000
   0x9002001C:    0x00000001
Reset Controller (addr:  contents)
   0x90030000:    0x00000000
   0x90030004:    0x00000000
   0x90030008:    0xA0000400
GPIO (addr:  contents)
   0x90040000:    0x028AABFD
   0x90040004:    0x0ABA37FC
   0x90040008:    0x00000000
   0x9004000C:    0x00000000
   0x90040010:    0x0404C002
   0x90040014:    0x00048001
   0x90040018:    0x00000000
   0x9004001C:    0x08603FFC
Interrupt Controller (addr:  contents)
   0x90050000:    0x00000000
   0x90050004:    0x87C28801
   0x90050008:    0x00000000
   0x9005000C:    0x00000001
   0x90050010:    0x00000000
   0x90050014:    0x00000000
PPC (addr:  contents)
   0x90060000:    0x00005000
   0x90060004:    0x0001E8FF
   0x90060008:    0x00040000
   0x9006000C:    0x000AA000
   0x90060010:    0x0003D000
   0x90060014:    0x00000000
   0x90060018:    0x00000000
Memory Controller (addr:  contents)
   0xA0000000:    0x063D213F
   0xA0000004:    0x18C6301F
   0xA0000008:    0xFFFF0C63
   0xA000000C:    0xFFFFFFFF
   0xA0000010:    0x6738675A
   0xA0000014:    0x7DE89398
   0xA0000018:    0x294B294B
   0xA000001C:    0x00000000
   0xA0000020:    0x00000000
   0xA0000024:    0x00000000
   0xA0000028:    0x00000000
   0xA000002C:    0x00000000
   0xA0000030:    0x00000000
DMA Controller (addr:  contents)
   0xB0000000:    0x80C00571
   0xB0000004:    0x00000050
   0xB0000008:    0x00000050
   0xB000000C:    0x00000050
   0xB0000010:    0xC0050000
   0xB0000014:    0x00001000
   0xB0000018:    0xC0051000
   0xB000001C:    0x00001000
   0xB0000020:    0x80C00560
   0xB0000024:    0x00000000
   0xB0000028:    0x00000000
   0xB000002C:    0x00000000
   0xB0000030:    0xC0052000
   0xB0000034:    0x00000000
   0xB0000038:    0xC0053000
   0xB000003C:    0x00000000
   0xB0000040:    0xFFFDFF79
   0xB0000044:    0x00000000
   0xB0000048:    0x00000000
   0xB000004C:    0x00000000
   0xB0000050:    0xFFFFFFFF
   0xB0000054:    0x00001FFF
   0xB0000058:    0xFFFFFFFF
   0xB000005C:    0x00001FFF
   0xB0000060:    0x818002A8
   0xB0000064:    0x00000000
   0xB0000068:    0x00000000
   0xB000006C:    0x00000000
   0xB0000070:    0xC0057000
   0xB0000074:    0x00000000
   0xB0000078:    0xC0058000
   0xB000007C:    0x00000000
   0xB0000080:    0x81400591
   0xB0000084:    0x00000050
   0xB0000088:    0x00000050
   0xB000008C:    0x00000050
   0xB0000090:    0xC0058000
   0xB0000094:    0x00001000
   0xB0000098:    0xC0059000
   0xB000009C:    0x00001000
   0xB00000A0:    0x81400580
   0xB00000A4:    0x00000000
   0xB00000A8:    0x00000000
   0xB00000AC:    0x00000000
   0xB00000B0:    0xC005A000
   0xB00000B4:    0x00000000
   0xB00000B8:    0xC005B000
   0xB00000BC:    0x00000000
LCD Controller (addr:  contents)
   0xB0100000:    0x0000023D
   0xB0100004:    0x00000002
   0xB0100008:    0x0000023D
   0xB010000C:    0x00000002
   0xB0100010:    0xC0002E00
   0xB0100014:    0xC00249A0
   0xB0100018:    0xC0028800
   0xB010001C:    0xC004B4D0
   0xB0100020:    0x01010A70
   0xB0100024:    0x000000EF
   0xB0100028:    0x0000FF15
   0xB010002C:    0x0000FF15
   0xB0100030:    0xC0002E00
   0xB0100034:    0xC0003160