Page 1 of 1

CF Card Upgrade and Windows 7 Install on 01+

Posted: Thu Feb 23, 2023 12:01 am
by warhol
In the interest of SCIENCE! I wanted to see what would happen by loading Windows 7 onto the 01+ in combination with a CF card. Would it be even remotely useable?

Narrator: No, not really, but it was fun anyway.

You'll need a CF to 1.8" 50 Pin IDE adapter, sometimes referred to as a "Toshiba" interface. They are available for cheap (~$7) on Amazon, they're all the same from any vendor, and their build quality is universally trash across the board. Make sure you check the soldering on the adapter when you get it, and also make sure you understand how to locate Pin 1 on your CF card and on the original hard drive to determine orientation. I couldn't get my OQO to see the drive until I flipped the card around, so don't feel dumb if it happens to you, too.

Selecting the right CF card was the first challenge. Initially I went with a Lexar Professional 1066x but after tremendous effort it became clear that the Lexar card was not capable of operating in Fixed Disk Mode (true IDE mode) and therefore incapable of booting into Windows. The internet was not very helpful in tracking down a modern CF card that supported Fixed Disk Mode (largely because this is such an obscure use case) and most recommendations pointed to the Transcend Industrial line of cards that max out at 170x or 300x, with some speculation that the PhotoFast 533x cards would also be recognized as a fixed disk. Eventually I discovered the Silicon Power CFI320 which advertised read/write speeds of 115MB/s and 90MB/s, respectively. This would make it a 766x card (150kbps * 766 = 115MB/s) and, by far, the fastest option available. I scooped up one from Amazon for ~$27 in the 32gb flavor.

Actually getting Windows 7 installed and booting turned out to be rather tedious, and there are likely easier/better ways to accomplish it. I will outline what I did, though:

The 01+ only supports booting from an external CD drive or PXE. I attempted to use a USB DVD drive with no luck, the system simply would not recognize the drive. This may be due to the fact that it was a cheap shitty one from Amazon that used USB 3.0 and the controller wasn't fully backwards compatible with the USB 1.1 spec supported by the OQO. An older USB CD drive may work well, or possibly a Firewire one since the OQO has a dedicated 1394 port.

Next, I attempted to use the PXE boot interface while running an instance of Serva for the PXE server. It's entirely possible that I built out the Windows 7 files incorrectly, but while I was able to successfully get the Serva bootloader up and transfer the initial pre-boot files for Windows, it would then fail with a stop error (0xc00000d, I believe, but I could be mis-remembering in the event you get something different).

Eventually I used a USB CF adapter, formatted the card with a flat NTFS partition, and installed Windows 7 on the card via VMWare Workstation. If you aren't familiar with VMWare I'm not well-equipped to give a tutorial, unfortunately. I basically fumbled through it and I assume you could do something similar with VirtualBox or a different freeware alternative. But in my case I created a new virtual machine and set it up with the option to install the OS at a later time. For the actual settings I used "LSI Logic", "Virtual Disk Type: IDE", and most importantly "Use a Physical Disk", wherein I specified the physical device of the Compact Flash card. Once the VM was configured I made sure to specify that the Windows 7 x86 SP1 Install ISO would be mounted as a virtual CD drive on boot, and then fired up the VM.

My original hope was that I'd be able to fully install W7 within VMWare, including software, the post SP1 update rollups, drivers, etc. and then just plug the card into the OQO. This, unfortunately, resulted in boot issues. The OQO would fail to load Windows with a 0x7b stop error, which indicates issues with the storage drivers or MBR, etc. I could successfully load the Recovery Console which would then attempt to perform startup repair without any success. Within the Recovery Console CLI I attempted the following (which didn't work but are listed here for informational purposes, YMMV):

Using DISKPART I ensured the volume and partition were visible and the partition was set to active.
With BOOTREC I then ran "bootrec/rebuildbcd" which would search for Windows installations and find zero.

In order, I then performed:
bcdedit /export c:\bcdbackup
attrib c:\boot\bcd -h -r -s
ren c:\boot\bcd bcd.old
bootrec /rebuildbcd

The second attempt at rebuilding the BCD would then successfully find a valid Windows installation with the message:
"Successfully scanned Windows installations. Total identified Windows installations: 1"

Even after adding that installation to the boot list and rebooting I was still getting the 0x7b STOP error.

At this point I shifted gears, but you may find that you can get it to work by booting back into the Recovery Console, opening "regedit.exe" from the CLI, and setting the various storage controller drivers to load at boot. The registry sub-keys you'd need to change would be located in HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\

The ULi M5229 PCI Bus Master IDE Controller used by the OQO (at least as recognized by Windows 7) uses the following drivers. All of these would need their START DWORD values set to "0" and not "3" (if so configured).

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aliide
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ataport
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\pciidex

Instead of continuing to fuck around with the above, I went ahead and re-deployed Windows 7 in VMWare. I blew away the single partition I originally manually created and instead let the installer format the disk (this will create two partitions, a SYSTEM RESERVED partition with the bootloader and then the actual OS partition). During the install process the installer will run through five steps (copying files, expanding files, installing features, installing updates, completing installation) and the it triggers a reboot that would then normally boot into the final Windows setup (adding the user account, product key, hostname, etc). At this point I shut down the VM and removed the CF card and loaded it into the OQO. From there, the OQO would successfully boot into Windows 7 and I could finish the install process.

After booting into the OS I was able to load most of the drivers (the Transmeta Persistent Translations driver failed). However, the system would frequently freeze without crashing: the mouse/keyboard would stop responding (including to CTRL+ALT+DEL), the fan would throttle down, and the desktop would hang (any animations would cease). A hard boot would fix the issue until it froze again.

The nature of this failure, to me, indicated a low level hardware issue. I suspected possibly a thermal overload being tripped on the CPU or something. With the back panel of the OQO off and the heat sink sitting on an ice pack the behavior was the same, however. This may be related to the Persistent Translations service not working correctly, may be related to Windows 7 not properly interoperating with the Transmeta, which only supports the MMX instruction set. Windows 7 SP1 contains KB980358, which enables support for Pentium MMX, although the OS was originally designed to only operate with SSE/SSE2.

I'll continue to investigate this to see if I can identify the root cause of the freezing. Initial performance after tweaking Windows 7 to disable unnecessary services/processes seemed promising, at least in the experimental sense. CrystalDiskMark saw read speeds around 95MB/s but I couldn't complete the entire test before the system would hang.