Disclaimer: I am not responsible if you brick your phone. This is only a guide. These instructions have worked for me, but there is no guarantee that they will for you as well. Follow this guide at your own risk.
Feel free to print off this guide if it makes things easier to follow. Please do not, however, steal this guide and claim it as your own. Updates to this guide will be posted here - http://www.karrderized.com/romguide/ - link, but don't steal. Thanks.
Got all that? Good.
Now, before we start, back up. I'm of the opinion that you can never have too many backups. Take a copy of everything on your phone's SD card, make sure your contacts etc are synced, any apps you want that you can't easily get back from the Market are backed up, all that stuff.
Another thing you should note are the APN settings for your particular provider. These are in Settings, Wireless Controls, Mobile Networks, Access Point Names. You may have multiple APNs listed - go into each one and note down all the settings. You'll likely need to re-enter these manually once you've installed your new firmware.
Once you're satisfied you've got everything backed up, we can start setting up our environment.
Download the latest release of the Android SDK - here at the time of writing - for your relevant OS. I'll be using Windows from here on in. Extract the .ZIP file to somewhere convenient - I've got mine on my C: drive under C:\android-sdk-windows-1.5_r3. We need the SDK for the tools it provides in the tools subfolder, fastboot in particular, as well as the USB drivers for your phone.
As of this writing, there are two distinct versions of the HTC Magic - PVT32A and PVT32B. The primary differences between these two versions is the amount of RAM (288MB on the 32A, 192MB on the 32B) and the radio (Qualcomm MSM7200a for the 32A, Qualcomm MSM7201a for the 32B). Generally, if your phone is HTC branded, it's a 32A, and if it's carrier branded (Google, Vodafone, etc) it's a 32B. Mine's a PVT32B from Vodafone NZ. But let's find out for sure what yours is.
Grab your phone and turn it off. Now, while holding the Back button down, power it back on. Your phone should now boot to a screen with a white background, some lines of text, and some skateboarding androids at the bottom. Welcome to fastboot.
The first few lines on the screen, in green, are what we're looking for. Mine reads as follows:
SAPPHIRE PVT 32B SHIP S-ON G HBOOT-1.33.0004 (SAP10000) CPLD-10 RADIO-220.127.116.11I Apr 9 2009,23:30:40
Yours will likely differ slightly. The first number we're looking for is in that very first line - PVT 32B in my case. Make a note of this. The next item we're looking for is the second line, which indicates your SPL version. Some SPL versions do not allow ROM flashing, notably those of T-Mobile's myTouch3G variant of the HTC Magic. At this writing, HBOOT-1.33.0006 and HBOOT-1.33.0010 are the two known "perfect SPL" versions that do not allow flashing. If you have either of those versions, stop now. There is a complicated procedure you will need to follow first.
Otherwise, for now you can turn your phone back off (by pressing MENU).
Head to this thread and download the recovery ROM for your particular phone version, as we determined in step 4. Save it in the tools subdirectory of the Android SDK (in my case, C:\android-sdk-windows-1.5_r3\tools).
If you have a 32A, this thread should help you find a signed ROM (I'd suggest Fatality's Hero ROM): here
If you have a 32B like me, try Qteknology's Hero port here - the swap version is the fastest Hero ROM I've found so far. It does however require you to repartition your SD card in order to provide swap space to speed the ROM up - a guide for this is available from the linked forum post.
Note I have only tested the one I linked for the 32B as that's the version I have. Download whichever ROM you need to somewhere handy, and rename it to update.zip. Please note: if you have file extension display turned off (default in XP) then just rename the file to update instead - the .zip extension will already be set. Once you've done this, copy it to the root directory of your phone's SD card. You can do this using the standard USB connection system that the phone provides, or if you prefer using a card reader.
Start your phone in fastboot mode as we did in step 4 (hold down Back while turning the phone on). Once the fastboot screen is up on the phone, plug the phone into your computer with the USB cable.
At this stage, my computer asked for drivers for the phone - these are included with the Android SDK, in the usb_driver subdirectory. Users with 32-bit versions of Windows should use the drivers in the x86 subdirectory under that, and 64-bit versions should use those in the amd64 subdirectory. Once the drivers have installed, leave the phone attached to your PC - you're ready to proceed with booting the recovery ROM.
We're going to use the Android SDK's fastboot utility in combination with fastboot mode on the phone to perform a one-off boot of the recovery ROM so that we can back up the existing setup, wipe the phone and then load the new ROM. At this stage, it would be wise to make sure you've synced contacts and backed up whatever you want to hold onto.
Open a command prompt window on your PC (Start, Run, cmd) and change to the tools subdirectory of where you installed the Android SDK, for example:
The prompt should change to indicate you're now in that directory. Now we make sure the phone is properly configured to communicate through fastboot. Type the following:
If you see your device listed, we're about ready to go. Let's boot into the recovery ROM:
fastboot boot recovery-RAv1.2.0G.img
If the recovery ROM you downloaded is named differently, substitute it's name for recovery-RAv1.2.0G.img.
All going well, your phone should kick into the recovery ROM now - you'll come to a pretty green texted menu with the HTC logo in the background. This ROM is being loaded via the fastboot software and is NOT on your phone, just in it's memory. We have yet to make any modifications to your phone at all.
Let's make one more backup to be safe. The recovery ROM we booted into provides us with Nandroid backup and restore, which we can use to backup the firmware and data currently on the phone to the SD card.
On your phone, use the trackball to scroll down to Nandroid v2.2 backup and click. This will start the backup process, and you'll see some yellow text start to appear at the bottom of the phone's screen. Once it's complete, you have a backup.
Use the trackball to select the Reboot system now option and click. It should load back into it's normal firmware. You can now mount the SD card as usual and copy the nandroid directory from the SD card to your computer. This is also a prime opportunity to back up your entire SD card.
WARNING: This is the absolute LAST point at which you can back out of this procedure. After this, it's all or nothing. Proceed at your own risk.
Boot your phone back into fastboot with USB attached (see step 4) and then load the recovery ROM again:
fastboot boot recovery-RAv1.2.0G.img
Use the trackball to move down to Wipe data/factory reset. This will erase all the data on your phone, ready for you to install the new ROM. Click. Congratulations, you have just wiped your phone! You are now ready to load your new ROM.
Still in the recovery ROM menu, scroll to Apply sdcard:update.zip. This process extracts the ROM from the update.zip file we placed on your SD card earlier and installs it onto your phone. It may take a little while so be patient. It'll tell you when it's done.
Select the Reboot system now option and click. Your phone will now restart with it's shiny new ROM! First boots can take a while, so bear with it. You'll probably see a new splash screen or two on startup, and eventually you'll get into your phone. You may or may not be prompted with a request about giving an app root access on your first boot - you can safely Always Allow this, as it's writing a swap file to your SD card in an effort to speed things up. You'll also need to go through the setup process on the phone again as if it were new, because for all intents and purposes it is. This includes setting up your Google account syncing, as well as the new Hero functionality such as your Facebook, Flickr and Twitter integration (if you so desire).
And from here on out, it's all up to you! Enjoy your new firmware, make it your own. There's some great new functionality in Hero over the standard Magic firmware.
This firmware isn't perfect. I'm loving it and see myself using it from here on in, but there are some quirks. These may or may not be fixed with your particular versions of ROM, especially once this guide has aged a little, but I'll try and keep it up to date.
The main thing you'll likely notice (especially if you're using a 32B like me) is the slowness. There's a lot going on with this new ROM so lag is fairly common. The phone will speed up a bit once you've used it some more, so bear with it. Your initial setups and playing around will be slow because of initial caching and your non-typical use of the phone, but this should clear up. Various ROMs have tried for workarounds for this, for example Qteknology's Hero port uses a swap partition on your SD card to help speed things up. CompCache is also a popular method, but my own experience with CompCache hasn't been very successful.
There are also reports of SMS messages sometimes not arriving on the latest Qteknology ROM - I mostly didn't experience this until recently, but it seems to be an occasional issue. The ROM builders are working hard on the issues they come across so fingers crossed for resolution on this one.
This guide wouldn't exist without the xda-developers forum. The bits and pieces I gathered from thereabouts are what I used to run this procedure on my phone, and hence build this guide. The people there are much more experts at this than I am, so I defer to their wisdom.
I must also give props to Jesse of Radix's Gadget Blog. His instructions were incredibly helpful in getting my head around what exactly to do.
And also to papalazarou, whose forum thread prompted me to write this guide.
Version 1.2 - 13 August 2009
Version 1.1 - 29 July 2009