Linux is fully usable. I'm currently running mutt/uemacs on it. Keyboard works. I still do not know how to handle LEDs and powersave serial ports, but basic functionality is there. My kernel is here, configured for 4bpp velo 1 with 4MB main and 8MB expanded memory. I'm using 4M ramdisk with telnetd, ftpd, busybox, uemacs, mutt and few other tools. It is able to mount bigger disk using nfs/tcp. Use this bootloader.

To boot, you need: configure kernel for Philips Velo 1; configure serial console tell pbsdboot1.exe it is sharp mobilon, and that it should enable serial (critical) make sure ce2.0 have lots of ram available.

Velo 1 support is merged into linux-vr cvs, get it from there if you are interesed in sources.

Don't dream about completely replacing winCE with linux. It will not work -- current version heavily depends on fact that winCE initialized hardware for us. We do not have enough knowledge to init hardware ourselves.


D. J. Rausch written very good description how to make it work. Thanx.


Current sources of bootloader - get pbsdboot1.uu (make sure you are getting file, not web page) and uudecode it. Use resulting pbsdboot1.exe to boot your velo. Then there's unofficial velo 1 homepage, but it is not too interesting as it talks about windows. Stefan has pictores of velo 500 opened, and velo 1 is probably very similar. Usefull list of handhelds with their technical info (with inaccurate info about velo 1 :-) and links to documentation. Then there's relevant part of BSD sources.

Velo 500 seems to have pr31700ABC, C9818 and UCB1200 chips. Velo 1 probably has pr31500, UCB1100, and they are compatible.

Redhat for mips can be get here, cross-compiler should be here. Manual for drawing horses can be found here.

Power consumption

I tried to measure power consuption of velo 1. I did not have good enough miliapermeter, so I used piece of wire in paralel to get at least relative readings. Later, thanx to erik, I got miliampermeter and tried to convert measurements. They are not what you'd call precise (I had to use 20A range).

System turned off		   2.6mA
Idle system with screen on       100mA .. 140mA (depending on display contrast)
idle linux, no screen, no serial  40mA (currently impossible, I do not know how to turn serial off)
idle linux, no screen, serial on, clocks down	20mA (this is possible!)
backlight			  80mA
screen				  46mA (depends heavily on display contrast)
serial ports			  75mA
touchscreen			 149mA
ne2k in magnavox box		 so much that system will not work from bateries when CPU is in use
                                 190mA (?) [in other test, it looked like it takes 1500mA. Yes, amper and half]

CPU crunching			 110mA .. 290mA
CPU crunching with sound	 310mA
sound record			 258mA
sound playback			  97mA

1bA = 16mA 

From manuals:

Power consumption of ucb1200, touch-screen only: 16mA
Power consumption of ucb1200, everythign:        24mA
Power consumption of ucb1200 powered off:	 100uA

MFIO pins

	I guessed few MFIO lines:

MFIOOutput:    0xf69d0fbc (serial closed)
MFIOOutput:    0x769c0fbc (ppp connected)
MFIOOutput:    0xf6980fbc (serial opened)
MFIOOutput:    0xf69c0fbc (serial opened, backlight)
MFIOOutput:    0xf49c0fbc (serial opened, no backlight)
MFIOOutput:    0xf6980f8c (serial opened, backlight, irda attempted)
MFIOOutput:    0xf6980fb8 (serial opened, backlight, ne2k inserted)

MFIODirection: 0xb61f0fb4 these MFIO pins are outputs...

0     0x00000001 input
      0x00000002 input: any key -- when any key goes down this is generated
      0x00000004 reset of motorola chip? leds blink _very_ shortly on this pin going up.
      0x00000008 input
4     0x00000010 irda?
      0x00000020 irda?
      0x00000040 input: spacebar or down arrow
      0x00000080 nothing visible
8     0x00000100 nothing visible
      0x00000200 nothing (?)
      0x00000400 nothing visible
      0x00000800 nothing visible
12          1000 input: mic button
            2000 input: changes when dtr from host changes; or not? or changes after lot of time?
            4000 input: changes sometimes, too.
            e000 input
16         10000 linux dead (crashed in cli?) -- if serial enabled. Else it toggles "offline/online in minicom" (only if serial was not turned off); 1 == minicom says "offline". Ouch, this might well be power to serial ports. It does 8mA difference. That's not enough for serial power.
           20000 power for display. 1 == display turned off
	   40000 nothing visible (serial! -- power to serial?)
           80000 nothing visible
20        100000 nothing visible
24     0x01e00000 input
	 2000000 backlight
         4000000 display goes crazy, toggling it back does not help. (Reset from betty?)
         8000000 input
28    0x10000000 nothing visible, power consumption up 46mA
      0x20000000 nothing visible
      0x40000000 input: serial: depends on pin "RTS" on host
      0x80000000 serial: plays with pin "CTS" on host

      0x80050000 <-- lines affected by serial

IO pin 0x08 is output, but does nothing visible.


2000-5-26 Bought philips velo 1 for 8900Kc.

2000-6-1 Not backing up machine for long time makes linux boot (and destroy nicely-setup ce2). [I actually tried to backup, but windoze took a doze and fallen into suspend, interrupting session that took hour or so] It just booted, up-to Kernel panic: I have no root and I want to scream later that day I got minimal rom image, and started playing. I got my first oops before velo could give me shell. And now I know why: it thinks it has 16Meg of ram.

2000-6-5 I can see only 4meg of ram, but it is okay since I now have small-enough ramdisk First picture on LCD: 4 penguins are much better than no penguin at all.

2000-6-8 pbsdboot1 on ce1.0 dies with ...performed an illegal operation and will be shut down. Exception 0xc0000005 Address: 0 ce2.0 linux behaves much nicely if I tell him remote side is

2000-6-15 oops, you press character on serial and machine is dead :-(.

2000-6-16 tpanel needs entry like this: crw-r--r-- 1 0 0 10, 12 Jan 1 00:08 /dev/tp

2000-6-19 I got slip working (with some kernel hacks)! Ouch, I've actually made nfs mount over 9600 line with no flow control! It is not too fast :(. Tcpspray says 0.256KB/sec.

2000-6-20 Tried new version with 115200 but still no flow control. Its much better: Tcpspray says 2.4KB/sec. With 115200 and interrupts enabled while transmitting. Looks _much_ better: 10KB/sec, according to tcpspray. I still can not mount nfs using UDP, but tcp works well.

2000-6-28 I got rom dump, interesting part (keybddr.dll) and my attempt to dissassembly is here.

2000-6-30 MFIO bit 0x02000000 is backlight, and keyboard is on SPI I got keyboard to work! After noticing that in SPI register scancode of last key is left from windows, it was not that hard. (I thought that windows would leave keyboard in working state. They did not: they "powersaved" it, which made my guessing much harder.)

2000-7-6 keyboard now locks only sometimes :-). I have uemacs working on velo, and hopefully will upload romimage tommorow.

2000-7-7 I compiled mutt and sendmail, but they are pretty big (0.7MB and 0.5MB). Machine stayed up running linux with serial ports on for 5 hours.

2000-7-10 I got mutt+ftpd working on toy. Not much space left on ramdisk :-(. Velo seems to be slow at transmits: toshiba to velo 9.6KB/sec velo to toshiba 2.3KB/sec

2000-7-13 After freeing initial ramdisk, I have 1 Meg of space to play with. That make machine actually usefull for reading mail.

2000-8-28 I was able to make pcmcia ne2k work. it gives 34KB/sec in polling mode. Hmm, as a side note, windows can do 2KB/sec max over 10Mbit ethernet. Funny, eh?

2000-8-31 After some fixes, ne2k gives 450KB/sec in polling mode. I boot nfsroot. hmm, it seems that velo is now slow on both serial transmit and receive :-(.

      after fresh boot, intstatus1 = c0000080, int2 = 0, int3 = 0, int4 = 2, int5 = 20040204
      after pcmcia removal, intstatus4 = 0? Or was it power key?
      after pcmcia ain use, intstatus1 = c00000a0, int2 = 0, int3 =0, int4 = 2, int5 = e0c42034
      MFIOInput is 3ffc3fbf after pcmcia was used, originally it was 3ffc5fbf.
      I can use pcmcia ide card, however in polling mode only, which gives *very* bad performance. 40K/second?
      MFIOInput is bff83fbd, originaly fff87fbf

orig:	3ffc5fbf
after:	3ffc3fbf
            6000 <- diff

orig:	fff87fbf
after:	bff83fbd
        4   4002 <- diff

      PCMCIA ide now does slighlty more than 20K/second. Not good.
      Removing bottom steel from velo dock makes it slightly lighter. (It is glued,
      but it can be easily removed)
      nokia 2110 - small battery pack		100g
      nokia 2110 - big pack			160g
      nokia 2110				120g
      velo 1 (incl. batteries)			430g
      velo 1 batteries (>1.6Wh)			 50g
      velo 1 dock (without steel)		250g
      steel from velo 1 dock			180g
      computer-to-nokia cable			 20g
      toshiba satellite 4030cdt (inc. batt.)   3000g
      toshiba battery pack (40Wh)		420g
      toshiba power supply			570g
      velo power supply				 70g
      magnavox					~100g?

      PCMCIA ide now works fairly well, with 4mF condensator I'm able to boot with even pretty low battery.
      Speed of PCMCIA ide is "enough".

Pavel Machek