Porting Windows Phone 7 to HTC HD2 “10 times more complicated” than first thought

HTC HD2 Pin-out No-one thought posting Windows Phone 7 to the HTC HD2 would be easy, but in this post Da_G, who has been working on it, soldering iron and JTAG machine in hand, confirms that it is in fact turning out to be a herculean challenge.

Read his pretty technical post after the break:

Yup, RustyGrom pretty much has it covered. First, it’s called "CE" for Compact Edition, and this is not a misnomer in any way. The system is designed to be as compact as possible (There are build-time switches for everything, so you can toggle off nearly all the components to achieve a very "light" image) obviously, including drivers for components not present would be a waste of space, as they would never get used. So there are none included. On the PC side of things the BIOS provides a basic level of functionality using a standard interface so generic drivers are created to bring the platform up to that level, and from there vendor-specific drivers can be loaded.

If you want to put an embedded device in terms of a desktop computer and loading Windows 7 on it, you start out with a fully assembled computer (video card, motherboard, cpu, ram, etc.) – power it on. It loads up the BIOS which initializes the basic hardware and begins to load the rest from the hard drive. The embedded device loads up the NAND XLDR, which provides only flash read/write support. The XLDR then loads the "EBOOT" or "IPL" into ram on typical devices. HTC doesn’t use the EBOOT/IPL model as such (here already we’re breaking away from the "standard" even further) and instead has that split out into mARM AMSS (a custom designed RtOS that loads and runs the Modem ARM CPU) and SPL. Once the AMSS loads the SPL into ram and executes it, the SPL initializes the aARM (apps ARM CPU), does various checks (are we in update mode? do we need to expose a flash interface to update the rest of the OS? do we just boot up the os and move aside?)

Then finally you get past the highly device-specific code and on to the (slightly) more generic CE Kernel/drivers which get copied into ram by the SPL and executed (Native Kernel/XIP partition)

So, how different is CE7/WP7 from that model? (Which is the model we have now in CE5.x/WM6.x) – The mARM AMSS provides a different interface and initialization procedure. That means any of the WP7 drivers from a donor device we might port from would not work at all with our current AMSS. Which in turn means no boot without re-writing the drivers/kernel or AMSS.

So to compare it to a desktop PC once again, we need to write a BIOS, a Hardware Abstraction Layer, and a set of drivers for each component on the system (likely a good deal of the drivers would be usable once the rest is done)

Do I sound jaded yet? Yes, yes I am It’s probably a factor of 10 more complicated than I thought it would be initially.

Here’s the JTAG pin outs that need to be connected, btw. There are pins on both sides of the motherboard which also is truly a pain in my ****, as i originally intended to mount an external port on the HD2 so I could easily keep a JTAG connection with it, but you basically have to remove the entire motherboard to maintain a reliable connection, which really precludes running it on a live device.

Of course Da_G is continuing to work hack at his HTC HD2 (pictures of the innards of the device connected to a JTAG above), but one does wonder (and this may be sacrilege) with the progress of Android on the HTC HD2, do we still need Windows Phone 7 to keep out devices relevant over the next 12 months?

Let us know your opinion below.