Windows Phone 7 – Unlocked ROMs

Justin Angel picture


Hi Folks,

In the following blog post we’ll review a topic which has been widely discussed in mainstream tech journalism but languishes in obscurity within the WP7 developer community.
I am of course talking about the Windows Phone 7 Unlocked ROMs.

Windows Phone 7 Logo

Prior to starting this blog post, I’d like to call out this is the 1st blog post in a series of multiple advanced Windows Phone 7 blog posts.
Additional subsequent blog posts will include Windows Phone 7 Emulator Automation, Windows Phone 7 and TFS2010 Continuous Build integration and other topics.
I’ve been told on many occasions that blog posts should be shorter than 50 pages (nonsense if you ask me), so I’ve split up this massive Advanced Windows Phone 7 blog post into several short blog posts.


What’s in a ROM?

Windows Phone 7 Locked ROM

From Wikipedia:

“A […] ROM, is a computer file which contains a copy of the data from a read-only memory chip, often […] a computer's firmware.”

It’s vitally important that Windows Phone 7 developers realize that the Windows Phone Emulator is in fact not powered by magical Microsoft pixies. I’ve checked. 
The WP7 Emulator is in fact a mix between a virtualization software known as “XDE” (“Emulator Virtual TransportDevice“) and an Image.

Both XDE and the Image change with each public build Microsoft ships for WP7. 
Since Microsoft only shipped the Image for development purposes there is limited functionality enabled in them. Specifically: Custom Application support, and Internet Explorer for HTML support.

Through the ingenious work of Dan Ciprian Ardelean and numerous other XDA developers the various Images have been fully unlocked:     

Windows Phone 7 Mix10 Unlocked Rom and Locked ROM side by side

Compare and contrast these Print screens of the WP7 home screen from the locked ROM and the Unlocked ROM.

In this blog post I intend to show the benefits of the Unlocked ROMs for developers.
If this is the first time you’ve heard about the unlocked ROMs and want to see what they offer, there’re great resources online.


How do I get these unlocked ROMs?

It’s important to mention there are currently 2 Unlocked ROMs:

1. The 6077 build – Also known as the Mix10 WP7 ROM. Has unlocked Zune Marketplace functionality, lots of apps which has been dropped since and terrible performance.
2. The 6177 build – Also known as the April10 WP7 ROM. Has unlocked Office, lots of new functionality that has lighten up since Mix10 and considerably improved performance.

And there will probably be many more of these Unlocked ROMs as Microsoft ships more and more public bits for WP7.

Both of these work Side-by-side on the latest XDE emulator:

6076 Build Side-by-Side with the 6177 Build

The Mix10 WP7 ROM is available at (Copied from XDA developers thread)
The April10 WP7 ROM is available at  (Copied from XDA Developers thread)

To fire up the images copy the 2 BIN files into the XDE folder and execute them using the XDE emulator.
The XDE folder on a x64 machine is located at: C:\Program Files (x86)\Microsoft XDE\1.0

Executing the XDE Emulator

If your development machine does not have the latest Windows Phone 7 SDK installed, fear not, you can still install XDE as a stand-alone product.
Instructions can be found at this excellent post by MacHackPC.


How to replace the default Visual Studio ROM with the Unlocked ROM?


When debugging in Visual Studio the default ROM used will be the Locked ROM.
In this blog post we’ll explore why the unlocked ROM is so darn useful for developers when debugging applications.

In order to use the unlocked ROM as the default for VS2010 debugging:
1. Simply open up the default WP7 SDK Directory
2. Drop in the April10 Unlocked ROM BIN file
3. And rename it to “WM70C1.bin”

On a x64 machine the WP7 SDK Directory is located at: C:\Program Files (x86)\Microsoft SDKs\WindowsPhone\v7.0\Emulation\Images 

The Images


By replacing the original WM70C1.bin file with our unlocked ROM, Visual Studio 2010 will now open up the unlocked ROM for debugging.

Debugging with the unlocked ROM


Why should developers care about the Unlocked ROM?

There’s a plethora of reasons why the unlocked ROM is important for application develoeprs. Let’s go over them .


Advantage #1: Developers can see the native Look & Feel of WP7

The WP7 UI is not just a fancy version of “desktop” Silverlight 3 UI.
There are different patterns of user experience, different controls used and wildly divergent visual conventions.
Developers who build entire WP7 applications without even trying to use the platform will end up building atrocious user experiences. 


Panorama Control Switching between screens (Office)

Panorama Control main screenPanorama Control Switching between screens (Office)  


Line-Of-Business Form for creating new appointments:

Line-Of-Business Form for creating new appointments Changing Dates

Pivot Control: (Contacts page)

image image

There’s a lot of subtle details in how WP7 UI and UX work, and as developers on this brand new platform we should endeavour to fully understand it so we can recreate it in our applications.

For more information on WP7 UX feel free to read the weighty Windows Phone 7 Interaction and UI Guidelines.


Reason #2: All Tasks have been enabled

WP7 has quite a few tasks and choosers that allow developers to interact with various built-in phone functionality.
The majority of these tasks are enabled in the Unlocked WP7 ROM.

WP7 Tasks List from MSDN

Let’s review each of these tasks and choosers, how to invoke it and what’s the UX in the April 2010 Unlocked ROM.


Invoking CameraCaptureTask

new CameraCaptureTask().Show();

CameraCaptureTask - Camera snapshot window


Invoking EmailAddressChooserTask

new EmailAddressChooserTask().Show();

EmailAddressChooserTask - Select a contact window

(I’ve staged “Foo” and “Bar” contacts to give this dialog some substance).


Invoking EmailComposeTask

new EmailComposeTask()


    To = "",

    Subject = "Seriously?",

    Body = "They actually pay you to develop for Windows Phone 7? Cool!",

    Cc = ""


EmailComposeTask - compose email window


Invoking MarketplaceLauncher



                                     "Foo Fighters");

MarketplaceLauncher Exception

It is likely to assume that the MarketplaceLauncher task will be enabled in subsequent releases.


Invoking MediaPlayerLauncher

new MediaPlayerLauncher()


        Media = new Uri(@""),

        Controls = MediaPlaybackControls.All


MediaPlayerLauncher - video player


Invoking PhoneCallTask

new PhoneCallTask()


    DisplayName = "Hello World",

    PhoneNumber = "123 456 789"


PhoneCallTask - approve dialing phone number


Invoking PhoneNumberChooserTask

new PhoneNumberChooserTask().Show();

PhoneNumberChooserTask exception

It’s likely to assume this error would be fixed in subsequent versions.


Invoking PhotoChooserTask

            new PhotoChooserTask()


                ShowCamera = true,

                PixelHeight = 640,

                PixelWidth = 480


PhotoChooserTask - Camera Roll


Invoking SaveEmailAddressTask

new SaveEmailAddressTask() { Email = "" }.Show;

SaveEmailAddressTask - Add a contact SaveEmailAddressTask - Save contact email


Invoking SavePhoneNumberTask

 new SavePhoneNumberTask() { PhoneNumber = "123 456 7890" }.Show();

SavePhoneNumberTask - Add a contact SavePhoneNumberTask - save contact based on phone number


Invoking SearchTask

new SearchTask() { SearchQuery = "Windows Phone 7 prototypes, one for Shazam and one for Netflix" }.Show();

SearchTask Search Results


Invoking WebBrowserTask

 new WebBrowserTask() { URL = "" }.Show();

WebBrowserTask open webbrowser


Reason #3: Windows Phone 7 Task Manager

The Windows Phone 7 System Info provides useful insight for developers on how their applications are behaving.


Opening SystemInfo and the Task Manager View

Navigating to the SystemInfo program Task Manager view in SystemInfo

Details Summary view + Terminate Button

Details Window #1 Details Window Part #2

Threads and Heaps (Gen0, Gen1, Gen2, Gen 64k+) screens

Thread Window Heaps (Gen 0, Gen 1, Gen 2, Gen 64k) Window

Allocations and modules screens

Allocations Window Modules Window


Reason #4: Local Files and IsoStore View

Using the Shortcuts application developers can view their installed XAP files and IsoStore files.

Let’s start this demo off by writing a “Foo.txt” & “Foo.html” files into our main Isolated Storage directory.

using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())

using (var sw = new StreamWriter(isoStore.OpenFile("Foo.txt", FileMode.OpenOrCreate, FileAccess.Write)))


    sw.Write("Hello WP7!");



Open up Shortcuts application and set “Show All Files”

Selecting Shortcuts from the main applications window Clicking Options in the main Shortcuts screen Checking Show All Files


Navigate to the “\Applications” Local Device Path

clicking Up in the Windows Directory Entering the Applications directory The applications directory

Viewing the contents of an Installed XAP

\Applications\Install directory \Applications\Install\Guid directory

\Applications\Install\Guid\Install directory The contents of an Installed XAP


Opening files installed in the XAP and inspecting them on the device

Opening the WP7Manifest.xml file from the deployed XAP displaying the Background.jpg on the device


Opening the Isolated Storage for our application

\Applications Directory \Applications\Data\

\Applications\Data\Guid\IsolatedStorage Exploring the application's IsoStore


In this short blog post we’ve introduced the concept of Unlocked WP7 ROMs, how to best use them and what functionality they have to offer developers.
Specifically, they allow experimenting with native look & feel, using the built-in WP7 tasks, using0 the platform’s Task Manager and exploring local storage.

In subsequent blog posts we’ll talk about how to automate the Windows Phone 7 Emulator, Setup TFS2010 Windows Phone 7 Continuous Integration and other secrets the unlocked ROMs has to share with us.


Leave a Comment

Feel free to leave a comment with your take on the Windows Phone 7 Unlocked ROMs.



-- Justin Angel