Delta Engine Blog

All about multiplatform and game development

Windows XP x64 Experiences

I installed Windows XP Professional x64 Bit today and this post is about my experiences with it. I tried it a year ago, but most drivers were not available for 64 bit back then. Now most drivers are supported and most programs will work without a problem. However some drivers and programs will still make trouble. Most of the issues could be resolved one way or another.

Generally I would say Windows XP x64 works great and is even a little bit faster than 32 bit Windows.


No problems

Had to change my mainboard because my current one went dead yesterday, I could use the same Windows x64 version without reinstalling, thats nice. Windows 32 bit does not work anymore (some driver troubles I guess). I also noticed that about Vista, no more reinstalls required if you change your board and cpu.

Games worked great, no problems here. I guess Microsoft plays a lot of games and wants to make sure all of them work, hehe. Even 15 year old games like Raptor (my all time shoot'n'up favorite) or Wolfenstein 3D worked without problems. Starcraft, Quake3 and current games worked nice too. Daemon Tools also provides a x64 bit version for Windows XP x86 for emulating CDs or DVDs.

Visual Studio 2005, DirectX SDK and all other development tools like VS Express, SharpDevelop, CodeRush, Perforce, UltraEdit, PCalc, NSIS, etc. work great too. For running 32 bit IIS apps you might have to follow these instructions.

Virtual Server 2005 works nicely and you can run virtual x64 and x86 computers, I guess the performance is also good or even better than before, but maybe my system is just faster.

Most normal programs did work too, but since nearly 99% of all programs are still 32 bit, it does not really make sense to have a 64bit platform yet. For browsing IE 64 bit is available and for Firefox (which is 32bit again) there is a 64 bit port called Deer Park, which works nicely. Both of these browsers are useful if you need more than 2 GB memory for your crazy browsing. Some programs do provide a x64 bit version, which works just the same way as the 32 bit version (I guess they did just a recompile with different compiler settings). I would say more programs and tools will be tested for x64 in the future, especially for Vista, when more users might choose x64 for their operating system.


Programs with problems

Most .NET 2.0 tools I tested did not work, but all of them could be fixed by changing the build setting from Any CPU to x86 Platform. While .NET 2.0 has NO problem running in 32 or 64 bit, it is not that easy in the case you call any external code (and almost all my tools do that). For example my AbiTrafficMonitor tool uses SharpPcap, which again uses wpcap.dll, which is only available as a 32bit dll. By forcing 32 bit to the application everything works great, in 64 bit the dll is not found and can't be forced. It is not possible to load 32 bit dlls in 64 bit mode, you will get the following error message when attempting to do that. An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

So you have to make sure a 64 bit version of all used dlls exists, else DO NOT use the Any CPU or x64 Platform settings. so this has to do something with .NET 2.0 (just some stupid compiler setting, recompile works, but a smarter version would be cool).

Here is the new installer for AbiTrafficMonitor, which works on Windows XP x64 too (by forcing the x86 mode). It does obviously still work on a normal 32 bit (x86) windows platform.

.NET 1.1 games like my Arena Wars game worked too, also .NET 1.1 tools worked fine. All .NET 1.1 assemblies run automatically as 32bit applications by design. .NET 2.0 runs automatically in 64bit mode on x64 platforms if All CPU is selected.

However my .NET 2.0 game Rocket Commander could not be started. Actually this is the same problem as above (not allowed to call 32 bit dlls from 64 bit code). .NET 2.0 runs fine in 64 bit mode and DirectX provides also 64 bit dlls, BUT Managed DirectX does NOT support using 64 bit. There is no version available to do that right now, neither MDX 1.1 nor MDX 2.0 support x64. So again, force the platform to be x86 and everything works again.

I recompiled Rocket Commander and it is available at the default download location: www.RocketCommander.com download page
There were also a couple of discussions about this issue in the Rocket Commander boards.

Another issue are external tools or helper tools like TestDriven.NET, which support x64, but it seems the underlaying NUnit Framework does work only in 32 bit. Not funny at all if you have a x64 bit app or just run All CPU on a x64 platform and want to test your code. This issue can be resolved by testing in 32 bit mode and then later switch to 64 bit if you want a 64 bit version of your app.

UltraEdit, WinZip and WinRar work fine, but all of them are 32 bit. So whats the problem? They all provide shell extensions for the Windows Explorer, which do not work in the 64bit version of the Explorer. There are 2 solutions for this.

  • Start the Windows Explorer 32 bit with the command line. Command:
    c:\windows\syswow64\explorer.exe /separate
    This didn't work very well for me, some of the shell commands did not work properly and it is really annoying to start the windows explorer this way. Often you might open a folder or jump to a containing folder, then of course the default 64 bit Windows Explorer is used.

  • Add your own shell commands in the registry. This works great for Open with UltraEdit or Extract files here, but if you need smarter commands like Extract to subfolder this doesn't help. Anyways, here is the solution. Add this file to your registry to add the following lines (change them to whatever you need):

    Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\*\shell]

    [HKEY_CLASSES_ROOT\*\shell\Extract here]
    @="Extract here"
    [HKEY_CLASSES_ROOT\*\shell\Extract here\command]
    @="C:\\Program Files (x86)\\WinRAR\\winrar x \"%1\""

    [HKEY_CLASSES_ROOT\*\shell\Ultra Edit]
    @="Open with UltraEdit"
    [HKEY_CLASSES_ROOT\*\shell\Ultra Edit\command]
    @="c:\\Program Files (x86)\\ULTRAEDIT-32\\uedit32.exe \"%1\""


Programs and drivers that do not work

Some old setups like for the Panorama Wallpaper changer do not at all (wrong windows version error message), but I managed to install some of the manually (copying files and setting registry settings).

My on board network drivers do not work at all, neither does my old TV card, but I had many driver problems in Vista Beta 2 x64 too. I found a old 1Gbit network card that works and I never watch TV anyways. All other drivers (board, gfx, sound, mouse, keyboard) work just fine.

Update 2008-08-19: My onboard sound really sucks and I tried to install my old PCI Soundcard (XFire 1024), but since the vendor does not provide 64 bit drivers, there is no way I can use that card. The onboard network adapter (Marvell 88E1111) also stopped working and does not even show up. Another old VIA VT6120 1gbit card could be installed, but didn't work either. Maybe I have to try out deactivating the other cards and then it should work, a 64 bit driver is installed.

Now to my main issue: You cannot use ANY new keyboard layouts at all! I really need my own AbiKeyboardV9 layout to type efficiently. I tried like 10 different other keyboard layouts too, all of them can be installed, but as soon as you try to use a new layout you always get a error message like "Windows could not load the x keyboard layout.". Not funny at all and I found absolutely NOTHING for either vista or x64 Windows to fix this problem on the internet. I used the Microsoft Keyboard Layout Creator, which works great on Windows XP 32 bit and lower. But this tool was last updated 2003 and the support for future windows version or x64 is just not-existant. Other tools I tried (keytrans, klm, etc.) suck even more and usually cost a lot of money, none of them worked on 64 bit or provide any useful features for me. All of them work only in 32bit.

More links on that topic (all of them have x64 bit problems and are unresolved)
http://www.planetamd64.com/lofiversion/index.php/t15929.html
http://blogs.msdn.com/michkap/archive/2006/01/26/517728.aspx
http://blogs.msdn.com/michkap/archive/2005/10/06/477930.aspx

I found some information on Marks Blog from Sysinternals in which he provides a solution to his Cap2Ctrl tool (which just maps the Caps Lock key to Ctrl). Similar to that I found out which keys have which codes with help of the scancode.doc doc from Microsoft for keyboard developers and wrote my own keyboard remapping code.

While the normal keys worked great and were changed in a couple of minutes all the special keys are messed up because I had different meanings for pressing shift with special keys. I found no solution to that so I updated my keyboard layout, there were some minor changes I wanted to do anyways. This is my new keyboard layout, which now works on all windows versions (finally I can use Vista too ^^). Some keys are not optimal, but to support both the german and US keyboards some '/" have to be used twice (scan code 2B) and some keys like -/_ had to be moved to worse positions (relative to my old layout, not much of a difference compared on the US layout). This can't be fixed with scancode remapping. I've used my new layout for a couple of hours now and it seems fine. The most annoying changes are <>, (), \|- and -_, everything else stays, but I guess I will manage.

This is my new Keyboard Layout:

  • AbiKeyboardLayout v10
  • To install you can use the following file: abi keyboard installer.reg
  • And uninstall it again with this file: abi keyboard uninstall.reg
  • This is the content of abi keyboard installer.reg:

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
    "Scancode Map"=hex:00,00,00,00, 00,00,00,00, 19,00,00,00, 2A,00,3A,00, 2B,00,0C,00, 0C,00,0D,00, 0D,00,10,00, 19,00,12,00, 15,00,14,00, 10,00,15,00, 22,00,16,00, 20,00,17,00, 21,00,18,00, 25,00,19,00, 28,00,2B,00, 18,00,1F,00, 12,00,20,00, 16,00,21,00, 17,00,22,00, 1F,00,24,00, 14,00,25,00, 31,00,26,00, 26,00,27,00, 27,00,28,00, 0C,00,56,00, 24,00,30,00, 30,00,31,00, 00,00,00,00

    To understand the scan codes and how this binary code is formated please read this document: scancode.doc.

So far so good, I will stick with x64 and you guys know now how complicated my computer is ^^