Remove All Ads from XDA

[OS][WM6.5.5] Latest Releases (23563), Porting, Tutorials, Tools, VM, etc.

3,317 posts
Thanks Meter: 1,560
By Da_G, Inactive Senior Recognized Developer / Moderator Emeritus on 5th August 2009, 01:26 AM
Post Reply Email Thread
Post 2: Virtual Memory and Windows Mobile 6.5
Post 3: Registry tips for Windows Mobile 6.5
Post 4: Tutorial on language porting with Visual Kitchen
(new!) Post 5: Description of all packages found in Rollup
(new!) Post 6: Description of the different branches of WM development.
ace10134's Post: Tutorial on porting a new build to "old style" kitchen
+ Que PPC's Post: Tutorial on porting a new build to Ervius Visual Kitchen
indagroove's Post: Tutorial on porting xip.bin for Ervius Visual Kitchen
rgb-rgb's .pdf: Tutorial on porting XIP/SYS to Da_G's Raphael Kitchen
CRACING's: Placing an Custom Image in the About Dialog/Window

WM 6.5.5 Build 23563 - All Langs, All DPI, All Resolutions

Edit: If this download link is dead, then search this thread or the stickied build thread for the build number and mirror.

Language Localization Packages

0401 SAU Arabic المملكة العربية السعودية
0403 ESP Catalan España
0404 CHT Chinese Traditional 台灣
0405 CSY Czech Česká republika
0406 DAN Danish Danmark
0407 DEU German Deutschland
0408 ELL Greek Ellas
0409 USA English United States
040B FIN Finnish Suomen tasavalta
040C FRA French République française
040D HEB Hebrew מְדִינַת יִשְׂרָאֵל
0410 ITA Italian Repubblica Italiana
0411 JPN Japanese 日本
0412 KOR Korean 한국
0413 NLD Dutch Nederland
0414 NOR Norwegian Bokmål
0415 PLK Polish Polska
0416 PTB Portuguese Brasil
0419 RUS Russian Россия
041D SVD Swedish Sverige
0804 CHS Chinese Simplified 中华人民共和国
0816 PTG Portugese Portugal
0c0a ESN Spanish España

images taken down to comply with DMCA notice

This thread is dedicated to porting past/current devices to WM 6.5/Windows Phone and future versions, The latest release of XIP/SYS, issues that might come up when porting it to pre-WM6.5 devices, compatibility with "OEM" Packages, etc.

This is intended as a followup to the thread Here, which contains a mountain of useful info, attachments, etc, but is getting very long in the tooth and is device-specific, whereas this thread will be used for all devices. (that one was anyway!)

The Native Kernel Partition (XIP)

This is generally Partition 2 in the Partition table (following ULDR, and preceeding OS). It is split up into 2 Major ROM Packages, and several possible Minor ROM Packages. OEMXIPKernel makes up the device-specific part of NK, and MSXIPKernel makes up the device-agnostic part of NK. When porting from your current WM version to 6.5, you want to keep OEMXIPKernel as is, and only change the MSXIPKernel files and modules. An important module to consider in OEMXIPKernel is nk.exe - this module is the Native Kernel for the device and handles Virtual Memory, which has changed for WM 6.5, and is discussed in the following post.

You can check to see if you have a 6.5 Native Kernel by dumping xip.bin, and opening nk.exe/s000 in a hex editor. Search for the ASCII string "platform" - near this string should be the build number this nk.exe was compiled against. WM 6.5 builds began around 21100, and nk.exe compiled against them can take advantage of the new memory model discussed below. WM 6.1 and previous builds will be <=21058. nk.exe compiled against these builds will not be able to use the new memory model.

The Operating System Partition (imgfs.bin)

In your kitchen, you want to use the new /SYS from the same build that matches the MSXIPKernel if possible. Occasionally the builds do not match up, this is normal. The /OEM folder generally does not change, but when coming from WM 6.1, you will need to update your initflashfiles.dat with the new shortcuts and folders introduced in WM 6.5.
The Following 5 Users Say Thank You to Da_G For This Useful Post: [ View ] Gift Da_G Ad-Free
5th August 2009, 01:27 AM |#2  
Da_G's Avatar
OP Inactive Senior Recognized Developer / Moderator Emeritus
Flag Riverside, CA
Thanks Meter: 1,560
Donate to Me
Virtual Memory in Windows Mobile 6.5 and how it differs from 6.1 and 6.0, important when porting to a device that does not have a WM 6.5 Native Kernel

What is Virtual Memory?

Virtual Memory as it applies to the Windows CE 5.2 Kernel

There's a 32 bit address space available - a total of 4GB potential memory on WM. This total 4gb address space is split in half - 2gb to the Kernel, 2gb to the User. Kernel address space is only accessible by processes/threads with kernel level access, whereas user address space is accessible by all processes/threads. The user address space is from 0x00000000 to 0x7FFFFFFF, and the kernel address space is from 0x80000000 to 0xFFFFFFFF.

The user address space is split into 64 slots of 32mb a piece. (64x32=2048, or 2gb) - The first 33 slots (slot 0 and 1-32) are used for processes, and the remaining slots for object store, memory mapped files, and resources.

Each slot is easy to visualize in hex, you just increment a digit. Slot 0: 0x00000000 to 0x01FFFFFF, Slot 1: 0x02000000 to 0x03FFFFFF, Slot 2: 0x04000000 to 0x05FFFFFF, and so on. Each process gets assigned it's own slot, there are 33 total, minus the kernel process which is always running, so that's where you get the 32 process limit (which is always lower in practice, since there are always processes running in windows mobile to support the OS) - this is also the reason for a 32mb limit per process - you can see that's all the address space available in one slot.

How does that all apply to our situation with modules? When you create a module, you are telling Windows Mobile that you want that module to be memory-mapped, so that each time it loads, it's loading to the same, known area of ram - saving space in slot 0 - this is done on the computer-side, during 'cooking' and is the job of wmreloc, g'reloc, bepe's Platform Rebuilder, etc. Virtual allocations are aligned to a 64KB border, so if you memory map a .dll that's only 3Kb large, it's still going to eat up 64KB of memory space.

There are also pages that can be allocated to these slots, that are aligned to a 4KB boundry, and process/general allocations that take place during normal operation. The way the system handles this is that modules allocated on rom build-time (modules we allocate with g'reloc et. al.) are allocated from top-down (for slot 1 for example, starting at 0x03FFFFFF for the first module, taking up space to the nearest 64kb boundry, then the next module, in a line down to the 0x02000000 address, which is the beginning of the slot) - General allocations that take place during normal system operations are allocated in the remaining space, from the bottom-up (so again with slot 1 as an example, starting at 0x02000000 and ending at 0x03FFFFFF) - As you fill up these slots more and more with modules, that leaves less space for windows to dynamically allocate other, general allocations, which can, and does result in out of memory errors (even when the device has plenty of physical memory left, it cannot address this memory when virtual memory is full)

Here's where the kicker comes in for the difference between 6.0/6.1/6.5 - There are a total of 4 slots that can be used for module allocation, slot 0, 1, 60, and 61. 63 is also available to modules that contain no code (resource only modules, like .mui's)

WinMo 6 could allocate slot 0, 1 - (in order of 1 first, 0 last) for a total of 64mb of vm space for modules/files (and the running process is always mapped to slot 0, so once you encroach on this memory space, you are removing available memory to each application running) - you can see how tight this is.

WinMo 6.1 improved on this by opening up slot 60 and 61 (now the allocation order is 61, 60, 1, 0) - but modules could not be allocated here, only files. So for our relocation tools, this was essentially no change. (still only slot 1, 0 for modules) WM 6.1 also introduces the process initvmmap.exe in the MSXIPKernel, NK partition (xip.bin). This process draws a map of all virtual memory, and uses the following registry key from the boot hive (boot.hv):

This tells the system that the module dllname.dll is only required when filename.exe is running, or filename2.exe is running - and whenever these processes are not running, the virtual memory space is available, and can be dynamically allocated to by the system.

WinMo 6.5 improves on this by opening up Slots 60 and 61 to Modules - yielding an extra 64mb of potential Virtual Memory space. (the allocation order is now 1, 61, 60, 0 for modules, 60, 61, 0 for files) - In order for the Kernel to recognize these new Slots as being mappable for Modules, it must be updated to the 6.5 codebase. This is where the 6.5 nk.exe comes in, and why it's so important.

Profiling Virtual Memory is an important job for an OEM - the less available in Slot 0, the sooner a device will kick back out of memory errors (even if it's not truly out of memory) - and the worse the user experience will be. Some ROM's I have seen have less than 20MB available in slot 0 (and the user experience is as bad as you might imagine) - There are many more intricacies to the whole process - like balancing the load between services.exe and device.exe to best utilize the 32mb VM space available to each, and storing all resource-only dlls as modules so they can be allocated to Slot 63, etc.

This is also why it's important that the re-alloc tools be updated to support the new slots - g'reloc will not ever try to allocate modules to slot 60/61 because as far as it's aware, this is not possible. For the moment I know of 2 tools that will realloc to slot 60/61, wmreloc 2.0, and bepe's Platform Rebuilder (used by ervius vk)

What's the take-home message about VM?

Keep Slot 0 as free as possible. WM 6.5 NK allows you to use more modules without taking up SLOT 0 space, so allows more flexibility to use modules (which are faster to load)
The Following 3 Users Say Thank You to Da_G For This Useful Post: [ View ] Gift Da_G Ad-Free
5th August 2009, 01:27 AM |#3  
Da_G's Avatar
OP Inactive Senior Recognized Developer / Moderator Emeritus
Flag Riverside, CA
Thanks Meter: 1,560
Donate to Me
Registry tips for WM 6.5

* Start menu icons

Sizes (for png icons):

240x240 96 DPI 45x45
240x320 96 DPI 45x45
240x400 96 DPI 45x45
320x320 128 DPI 60x60
480x480 192 DPI 90x90
480x640 192 DPI 90x90
480x800 192 DPI 90x90
480x854 192 DPI 90x90

All icon entries go under the following key:

Create a sub-key matching the folder name or shortcut name the icon will go with, for example:

[HKEY_LOCAL_MACHINE\Security\Shell\StartInfo\Start\Google Maps.lnk]
There are 4 possible values you can set under this key:

Originally Posted by MSFT

Name REG_SZ Specifies the display name of the item. If the value is not specified, the file name will be displayed without the extension.
Group REG_DWORD Specifies whether the item is a folder. The value can be set to TRUE or FALSE. Set the value to TRUE to indicate that the item is a folder. If the value is not specified, the system will determine the Group value by verifying whether the registry key has any subkeys.
Icon REG_SZ Specifies the path and file name where the icon is located. The icon can consist of a PNG file or an embedded icon resource module. If this value is not specified, the default icon of the shell will be used.
Rank REG_DWORD Specifies the rank of the item. An item that specifies a larger value for Rank will be displayed before items that specify a lower value. If this item is not specified, the Rank will be set to 0.

To determine icon spacing, you'll need to examine the Rank value for existing icons, you can find the stock values in the following file: Base_Lang_xxxx\mxipinit_startmenu_001.provxml, where xxxx matches your Language ID code. A higher number = higher up in the chain, a lower number = lower down the chain. Any icons without a rank will be displayed at the bottom.

* Restore hidden settings items

Remove the "Redirect" value under the following keys:

* Allow in call recording with the native dialer

* Disable built-in magnifier on double-tap

* Override default Lock Screen notification launchers

"Application Command Line"="\Program Files\OEMApp\OEMApp.exe"
"Application Command Line"="\Program Files\OEMApp\OEMApp.exe"
"Application Command Line"="\Program Files\OEMApp\OEMApp.exe"
"Application Command Line"="\Program Files\OEMApp\OEMApp.exe"
"Application Command Line"="\Program Files\OEMApp\OEMApp.exe"
The Following User Says Thank You to Da_G For This Useful Post: [ View ] Gift Da_G Ad-Free
5th August 2009, 01:27 AM |#4  
Da_G's Avatar
OP Inactive Senior Recognized Developer / Moderator Emeritus
Flag Riverside, CA
Thanks Meter: 1,560
Donate to Me
* Porting languages in Ervius Visual Kitchen using the posted language packs

First, a quick overview of the relevant file structure in VK:

Possible values for the %VARIABLES% above:

%DEVICENAME%: Name of your device (Hermes, Raphael, Diamond, etc.)

%LOCALE_ID%: The 4 digit number matching your locale (list of supported id's found in first post) - a full list can be found here. It is possible to port WM to a language that is not supported, you would have to use a PE Resource editing program to translate all the various strings found in the .mui (Multilingual User Interface) files. Note that these change periodically as the builds get updated so you would also need to update your altered .mui's.

%BUILDNUMBER%: The build version in use (23022 for example)

%DPI%: DPI of the device (92, 128, 192)

%RESH%: Horizontal resolution of the device, in pixels (portrait)

%RESV%: Vertical resolution of the device, in pixels (portrait)
* Porting \SYS

The first thing you would want to do is grab the language pack matching your language. Extract it and you'll have several folders inside. Essentially what you want to do, is grab the folders that match your target device for the variables above, and copy those into the kitchen, in their respective folders.

As an example, if you were porting to Italian, on a 96 DPI, 240 by 320 device, and you had the following folder:


and place it in:


Go through each of the folders in the language pack and match it up with a destination folder this way. Compare to the existing 0409 layout to help with the structure. Note that there will be some files you are not going to use (you won't use 96 or 128 dpi files on a 192 dpi device, for example)

Once you have completed matching up each applicable folder in the language pack to a destination in \SYS this way, you're complete with that folder.

* Porting \ROM

The relevant folder here is \Erv\ROM\%DEVICENAME%\%BUILDNUMBER%\OEMXipKernel - inside you want to edit boot.rgu. The relevant keys to edit are:

NOTE: For anyone not using Ervius VK, you will need to compile boot.rgu to boot.hv when done. Use the HV attached to this thread for that. For anyone using Ervius VK, this is automatically compiled into boot.hv during cooking, and no further action is required.

* Porting \OEM

The relevant folder here is \Erv\OEM\%DEVICENAME%\%LOCALE_ID%\OEM_Lang_%LOCALE_ID% - you need an initflashfiles.dat that matches your language. All the folder names inside here will need to be translated to your language. I will try and make translated initflashfiles.dat for each language available soon.

You will also need to translate any other language-specific packages in \OEM and \EXT. If you don't want to bother translating the 3rd party apps, you can simply rename their .mui files to match your %LOCALE_ID%. The programs will work, but remain in their original language. You can translate these with a PE Resource editing program if you cannot find programs in your local language.
5th August 2009, 01:35 AM |#5  
Da_G's Avatar
OP Inactive Senior Recognized Developer / Moderator Emeritus
Flag Riverside, CA
Thanks Meter: 1,560
Donate to Me
Branches of WM Development: Here is what all these different version numbers relate to, and a summary of their features.

212xx = AKU1, all builds leading up to and including WM 6.5
213xx = MOT motorola
214xx = ???
215xx = SAM samsung
216xx = HTC htc
217xx = COM1, continuing dev of -
218xx = COM2, continuing dev of
219xx = MD, feature test branch, pretty much dead now. (unstable features are added here, this tree is based on COM1, so older base OS code, but the UI/UX code is newer)
22xxx = SEMC sony ericsson
*230xx = COM3, continuing development
*234xx = COM4, appears to be abandoned.
*235xx = COM5, more GUI changes here. New Outlook Interface.
*236xx = LG Electronics Branch
*24xxx = Possible HTC branch
*25xxx = SEMC - Sony Ericsson
*280xx, 282xx = WMD. This is a continuation of com3 from 23090. Most of the changes appear to be with IE
235xx is the only branch that has threaded email natively

Thanks to a1d2catz and Cotulla.

Post or PM DaveShaw (or any other mod on this thread) with updates
5th August 2009, 01:35 AM |#6  
Da_G's Avatar
OP Inactive Senior Recognized Developer / Moderator Emeritus
Flag Riverside, CA
Thanks Meter: 1,560
Donate to Me
* Package Descriptions
*note: in the case of *Modules vs. *Files, the difference is simply what area of memory these objects go to when loaded (FILES or MODULES section) - other than that, no difference. Essentially, if you're using a native 6.5 kernel, you want *Modules, otherwise not.

ADC - Automatic Data Configuration
AdobeFlash - Adobe Flash
AdobeFlashCodecs - Adobe Flash Video Playback Codecs
AlarmSounds - Alarm Sounds
AUTOUPDATE - Device-Side Auto Update - Not Required
Base - Required - but what is it?
BaseApps - Required - but what is it?
BaseAppsFiles - Microsoft Camera + Camera Integration Support - replaces BaseAppsModules
BaseAppsModules - Microsoft Camera + Camera Integration Support -replaces BaseAppsFiles
Bluetooth - Bluetooth Support (for microsoft BT stack, dependant on build-time switch)
bronze - Required - Components for CHome
BronzeAH - Components for CHome (Arabic language)
BronzeEA - Components for CHome (east-asia languages)
BronzeNonEA - Components for CHome (Non east-asia languages)
BROWSING - IE 5 Components
BROWSINGCORE - IE 6on6 Scripting Components (dependant on build-time switch)
browsingie - IE 6on6 UI and RenderCore (dependant on build-time switch)
BTDUN - Bluetooth dial-up networking
Bth_A2DP - Bluetooth A2DP
Bth_HID - Bluetooth HID (Human Interface Device) profile support
Bth_Watch - Support for the Sony Erricssion Wrist Watch
CHome - Titanium, the WM Pro version of Sliding Panels
CommonEA - Common settings specific to east asia builds, replaces CommonNonEA
CommonNonEA - Common settings specific to non-east asia builds, replaces CommonEA
COMPLEXSCRIPT_FONTS - System fonts for Arabic builds, replaces SYSTEM_DEFAULT_FONTS
ConfettiCore - HW Accelerated RenderCore for 6.5 Chrome
DRM - Digital Rights Management Support (dependant on build-time switch) - Required for Video playback of 3gp and mp4
Enterprise - IPSec, l2TP and Winscard support?
Entertainment - Games
FWUPDATE - ImageUpdate Support
gb18030 - East Asian Font support - Excluded from non-EA images
GPSID - GPS Intermediate Driver, facilitates multiple applications using one serial port simultaneously
INTERNETSHARING - Provides a NAT Router for WWAN <--> USB/Bluetooth communication
IRDA - IR Port Support
LangDB - wince.nls for your language (0404, 0411, 0412, 0804, WWE)
Livesearch - Windows Live Search/Bing Search
Lockscreen - WM6.5 Lockscreen
LockscreenEA - Lockscreen east-asia components - replaces LockscreenNonEA
LockscreenNonEA - Lockscreen Non east-asia components - replaces LockscreenEA
MediaOS - Windows Media Player - Needed for MP3 Ringtone support?
MediaOSFiles - Windows Mobile Player Decoder DMO - replaces MediaOSModules
MediaOSModules - Windows Mobile Player Decoder DMO - replaces MediaOSFiles
Metadata - Required - Registry Hives, Package Info
MODEMLINK - Old-style internet sharing support (DUN) (dependant on build-time switch)
MSIMAR - SIP support for Arabic builds - excluded from non-arabic builds
MSTag - Microsoft Tag Reader (dependant on build-time switch)
MSXIPKernel - Microsoft Native Kernel Components
MSXIPKernelLTK - Empty ImageUpdate Package - Requirement for future expansion
NetCF - Microsoft .NET Compact Framework
NonPhone - Non-Phone (PDA) Components - excluded from phone builds
OEMXIPKernel - OEM Native Kernel Components
Office - Microsoft Office 6 Mobile
OneNote - Microsoft OneNote 6 Mobile
OS - Required - Description?
OSFiles - Required - MS WMV DMO - replaces OSModules
OSModules - Required - MS WMV DMO - replaces OSFiles
Perf - Debug Performance Monitor
Perfbox - Debug Performance Monitor
Phone - Required - Phone support, not in PDA builds
PhoneRedist - Required - Phone support, not in PDA builds
ppgprov - OMA Provisioning Support, not in PDA builds
Redist - ?
RemoteDesktopMobile - Remote Desktop
Riched20 - Rich HTML Editor support - WWE builds - replaces Riched20_CS
Riched20_CS - Rich HTML Editor support - Arabic builds - replaces Riched20
RIL710MUX - CellCore Component (optional)
RingsAndAlerts - Rings and Alerts
RMGR - Roaming Manager (optional)
RUNTIMES - C Runtimes
SipAR - SIP Support for Arabic builds (excluded from non-arabic builds)
SampleMusic - Sample Music (dependant on build-time switch)
Shell - Required
SIM_TKit - SIM Tool Kit, omitted from CDMA builds
Skybox - Microsoft MyPhone, Syncs a phone's info with Microsoft (dependant on build-time switch)
Skymarket - WM MarketPlace isn't live yet - Just a link (dependant on build-time switch)
SMIME - Required - Crypto Support
SMS_Providers - Required - SMS Support
SQLCE - SQL Server for CE (dependant on build-time switch)
SQM - Systems Quality Metrics (customer experience feedback)
SqlCeMobile - Not Required - Unless you need SqlCeMobile
SYSTEM_DEFAULT_FONTS - Required - Non Complex-Script Font Support - replaces COMPLEXSCRIPT_FONTS
Themes - Extra Themes
Transcriber - Transcriber - Not available in every language
UNISCRIBE - SIP Support for select non-WWE langs - replaces Transcriber
VoiceCommand - Voice Command - (0407, 0409, 040C, 0809)
VoIPOS - VoIP Part 2
Webview - IE 6on6 RenderCore component for OS use, WWE - replaces Webview_CS
Webview_CS - IE 6on6 RenderCore component for OS use, arabic - replaces Webview
WelcomeCenter - The WM6.5 Welcome Center - Required for "Help"
WindowsLive - Windows Live Mobile
WindowsLiveIM - Windows Live Instant Messaging
WMLiveSearchWidget - MS Live Search Widget
WMMoneyWidget - MS Money Widget
WMWeatherWidget - MS Weather Widget
WMWidgets - MS Widgets Support (Requires IE 6on6)
WWAN - WWAN Support (not in PDA Builds)
5th August 2009, 01:38 AM |#7  
jmckeejr's Avatar
Senior Member
Flag Altoona, Pa
Thanks Meter: 60
Donate to Me
OK, So since I got a post on the first page I suppose I could keep some useful info here from the thread as well. Just in case someone missed it With every new build comes a new issue, so post your fixes if you have them.

- Here are some helpful programs. First is an awesome ROM Sorting tool. This this is awesome for organizong SYS and it cleans up unwanted files left in module folders. Link HERE
- And second is just a plug for my FlashBack package which you can use to backup and restore(automatically) lots of personal info and program settings Can also set manila to load automatically if you prefer it to "Windows Default", and choice to autorestore or not within program. Saves me a lot of setup time. After a flash all I need to do is restore contacts. Check it out and offer suggestions HERE

-Alter shellres.xx.dll to work with new Toolbar zoom in 23028 build. Video HERE

-Add your own shortcuts and icons to settings items. Post HERE and HERE

-A tool to remove duplicate files from modules. Post HERE

-Editing .tsk file for use in 23025+ builds. For adding Pivot images and Toolbar images. Post HERE

Some more registry keys. If anyone has details on what these do please post.
Transparent quickmenu for HTC taskmanager(for use with 2302x builds)
5th August 2009, 08:42 AM |#8  
bobsbbq's Avatar
Senior Member
Flag Covington, LA
Thanks Meter: 357
Donate to Me
Great work Da_G as always. I think most people will be happy with the SYS and XIP. That is all I use, and there are so many cooks which are providing ROM's that you should use your time wisely.

On another note I we all should help to contribute to this thread. I know there are others out there with resources to new ROM's, I hope they will be as giving and share as Da_G has.

Thanks again and I will bookmark this thread and follow for new releases of SYS\XIP.
The Following User Says Thank You to bobsbbq For This Useful Post: [ View ] Gift bobsbbq Ad-Free
5th August 2009, 09:30 AM |#9  
d_train's Avatar
Senior Member
Thanks Meter: 15
Donate to Me
Anyone got the 23019 that ConFlipper mentioned - or was he just toying with us

5th August 2009, 10:22 AM |#10  
Z7Z's Avatar
Junior Member
Thanks Meter: 1
Da_G can I use the Portuguese language packages from 23001 in the 23016/21935?
5th August 2009, 10:32 AM |#11  
Da_G's Avatar
OP Inactive Senior Recognized Developer / Moderator Emeritus
Flag Riverside, CA
Thanks Meter: 1,560
Donate to Me
Oh noes! I forgot the pizza party posts o.O


This should work fine for 23016, but not for 21935. I hope to have a new version to post soon, I will try and post all langs for it
Post Reply Subscribe to Thread


Guest Quick Reply (no urls or BBcode)
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes