Wednesday, August 18, 2021

Running OpenMW On Period Hardware

 My favorite video game of all time is Morrowind. OpenMW is an awesome port of the old game. I wanted to get OpenMW to run on my 2002 gaming PC build just to see if I could.

My legacy gaming PC has the following specs, which would have been very typical for a PC gamer around the time Morrowind came out.

- Athlon XP-M overclocked to 2.4 ghz
- Radeon 9550XL
- 2GB DDR400 dual channel RAM

I've found out that this is an incredibly difficult processor to target because it lacks SSE2 instructions. SSE2 happens to haphazardly be built into many binaries because it's assumed to exist on all modern hardware, and has since the Pentium 4. SSE2 instructions have notably snuck their way into firefox, which makes that browser impossible to build for my machine.

My processor is also 32 bit. OpenMW has a 32 bit (aka x86). While OpenMW has 32 bit builds for Windows, but they contain SSE2. Actually building the x86 version yourself is not really supported. Furthermore, the whole Windows toolchain is based on the latest Visual Studio, which does not allow you to forego SSE2. 

Linux x86 binaries are no longer provided by the OpenMW team. Downloading the last x86 build, version 0.45, results in a segfault - probably due to missing SSE2 instructions again.

So I had to build OpenMW myself. I found a Gentoo package for OpenMW which would compile everything I needed. I decided to give Gentoo a shot because it might also let me compile my own compatible web browsers. This ended up being a very long process, as gentoo users are familiar with. I had to build and configure the whole operating from scratch, starting with the kernel.

if you want to bake an apple pie from scratch you must ...

I started up an i686 build of Gentoo in a virtual machine on my modern PC to be copied over to the old box after all the setup was complete. Compiling everything on the Athlon would likely take weeks. 

After walking through the Gentoo installation manual I had a working terminal in 32 bits, but there were many snags on the way to a full desktop environment (xfce4).

The first snag was rustc. There are several packages which depend on rust. Rustc is a self-compiling compiler, which means it has to be bootstrapped. The rust compiler targeted for i686 contains SSE2 instructions, as described in gentoo bug 741708, which means that my Athlon could never bootstrap. I wanted to treat my VM like the physical machine so as not to run into any problems in the future, so I decided to compile rustc myself elsewhere then sideload the compatible binary.

My config.toml looks like this, which allows rustc to target either i586 or i686. In the end I ended up targeting i686 anyway (I think i586 broke librsvg) but it's good to have the i586 support. And this is compiled to match my instruction set.

changelog-seen = 2
[llvm]
cflags = "-march=\"athlon-4\" -m32"
cxxflags = "-march=\"athlon-4\" -m32"
ldflags = "-lz"
[build]
host = ["i586-unknown-linux-gnu", "i686-unknown-linux-gnu"] extended = true
configure-args = ['--build=i586-unknown-linux-gnu', '--prefix=/opt']
[install]
prefix = "/mnt/disk2/rust/install/opt"
[rust]
[target.x86_64-unknown-linux-gnu]
[dist]

I also had to avoid spidermonkey, which is not only a gargantuan thing to compile, but seemed to crash during compilation whether I used my sideloaded rustc or the one from dev-lang/rust-bin (I'm not even sure if rust caused the problem, but I had no interest in compiling spidermonkey. This reddit post helped me replace it with a more lightweight library (duktape)).

I also had to patch Qt5 to make it compatible with non-SSE2.

Eventually I was able to build xfce4 and OpenMW, and I was able to get in the OpenMW launch in my x86 VM:



This gave me hope that I could transfer the OS over to my old computer and get playing. Astonishingly, all I had to do was create a tarball of the root on my VM, and then extract that tarball to a new partition on my old PC. I just had to update the fstab and network config, run update-grub, and the operating system born in a VM was not running on a physical machine.

xfce didn't quite work though. The window manager crashes, so you lose window borders and close buttons. Luckily this didn't stop me from launching a terminal and eventually launching OpenMW.


I wasn't able to start the game from the main menu, but I could start the game from a random cell, which allowed me to start a new game from there.

 



 

Water was completely transparent.

 

It ran at about 2 FPS at 800x600. For comparison, the original Morrowind binary runs at around 30 FPS at around 1024x768. So not surprisingly, either OpenMW is just not optimized for my ancient hardware, or I could have some problem with my drivers.


Tuesday, June 8, 2021

More PC building shenanigans

Delidding my main gaming PC 

Delidding my i7-4790k brought temps when gaming from 85C to around 70C.

Unfortunately with air cooling, I couldn't get it above 1.35 volts without reaching a thermal limit. But, I am stable at 1.285 volts, 4.8 ghz, which is a very good overclock for this chip (20%). About 7 years on, there is still plenty life in my Haswell for modern gaming. My 1080ti is dying (it's down to one HDMI port so VR is becoming difficult) but I may just upgrade to a modern graphics card and keep this beautiful processor.

The processor and the tools for the job

Using an OwlTree vice, pried the integrated heat sink off of the processor

The processor with the crappy "toothpaste" thermal grease

I applied way too much liquid metal the first time around. It should not look like this! I put it in my PC and it did not boot up.

So I took it out and removed most of the liquid metal. There should be a very thin layer. Unlike traditional thermal paste, you want to spread evenly, but you don't have to worry too much about bubbles forming.


2002-2003 Build Functional Web Browsing

The hardest thing about using the Athlon XP processor is not just that it's 32 bit, but it lacks support for the SSE2 instruction set. This means most programs compiled after say 2008 are not going to work on it, even if they are 32 bit. I believe Microsoft even dropped support for disabling SSE2 in Visual Studio after a certain point, so it may not be possible to recompile many of these programs even if the source code is available.

If you want to get on the web, you have a few options:

1. Use an old version of FireFox

2. Use an off-brand browser. 

PaleMoon did have a non-SSE2 fork running for awhile, but I think this was discontinued around 2017. If you keep Googling non-SSE2 browsers, don't be mislead by anyone recommending PaleMoon.

K-Meleon for Windows works pretty well. It's not as good as Firefox, but is hypothetically more secure because it's actively maintained.

Few versions of Linux will work on an Athlon XP. LXLE does not install, likely because of the SSE2 problem. MX Linux does! I'm new to this distro but it's Debian based and works rather well.

On MX Linux, I was able to install NetSurf, which is still maintained yet a fairly old school browser. I was also able to run K-Meleon through Wine and browse the web just fine. With a modern operating system and an up-to-date browser, I'm actually able to use this ~18 year old computer for most tasks. I really hope this software continues to be maintained.

NetSurf and K-Meleon running in MX Linux

The case, with a new Athlon XP badge


Tuesday, June 1, 2021

Building a 2002-2003 Overclocking PC - Part 2



 Part 1 is here

Trying again to save the Radeon 9550

I had tried flashing the Radeon with several different BIOS ROMs that I had downloaded from techpowerup.com. Many of these would boot button  Windows would not recognize the drivers. I bought a working replacement off of eBay and harvested the BIOS from that. The dead Radeon booted with the new BIOS, but there were still artifacts.


Finally, as a last resort, I heard of some people reflowing their GPUs. Over time, a GPU may lose its reliability due to degradation between the chips and the PCBs. I read somewhere that most solders will melt at just over 200 degrees centigrade. So I shoved the card in my oven for about 10 minutes. Unfortunately it didn't help. I sadly could not repair this card and sent it off for recycling. But the replacement card from eBay will work in its place.


Pin mods and overclocking the CPU

As described in my last post I had a few ingredients to play with. For motherboards I had the BioStar M7NCD and the MSI K7N2. Both were based off the nVidia nForce2 chipset which was renowned at the time for stability, feature set and overclocking capability. For the CPUs I had an Athlon XP-M 2500+ (AXMH2500FQQ4C) and an Athlon XP-M 2800+ (AXMJ2800FHQ4C). The 2500+ is a historical overclocker. Most people from that era steered away from the 2800+ it seems, maybe due to price point. For that reason, I actually did most of my initial experimentation on the 2800+, thinking the 2500+ would fare better.

Voltage

I approached this like most CPU overclocking tasks and first found the highest stable voltage I could go, then increased the FSB or multiplier to reach the highest frequency at the given voltage.

There was one problem. The MSI allows for dual channel memory while the BioStar does not. Because of this, I decided the MSI was my favorite, and I would not do any potentially destructive experiments on the MSI board. The BioStar would be my guinea pig. However, the MSI allows you to select different voltages, but the BioStar does not. So I needed to do a pin mod to change the CPU voltage on the BioStar. The pin mod would also allow multipliers above 12.5x, which didn't end up being necessary as we'll soon see.

The pin mod guide from ocinside.de

A pin mod is a modification to your motherboard or CPU in which you short out certain contacts between CPU pins in order to change the recommended voltage, FSB or multiplier reported by the CPU to the motherboard. Some motherboards allow you to override all of these settings, and on these motherboards pin mods are useless. Other cheaper motherboards will just go with whatever the CPU reports. On these motherboards a pin mod can be necessary to override these settings. Note that pin mods are an antiquated concept and you probably can't do this in a modern computer.

I used the MSI board to find the max voltage for the 2800+ and the BioStar to explore the max frequencies. I used the pin mod to set the BioStar's voltage and multiplier to a sufficient amount (1.75 and 15x respectively) and played with the FSB to find a max frequency.

If you zoom in very close to the picture below you may be able to see the fine copper wires I placed between CPU pins.


Another consideration of the pin mod is that the voltage changes are only additive unless you cut the L11 bridge. This basically means taking a pocket knife to the right spot on your processor to un-short a few contacts on the PCB.



The 2800+ with the L11 bridges cut

Frequency

So with the bridges cut and the processor's voltage and multiplier set, I continued to experiment with the FSB to find the max frequency. This turned out to be 2.4 ghz for the 2800+ and 2.1 ghz out of the 2500+.

That was cool, but for all the hype I was expecting more out of the 2500+. This could only get up to 2.1ghz stable. So the cheaper 2800+ was actually more performant.

The 15x multiplier I was initially using ended up being useless. For awhile I thought that these processors were FSB limited (as had been my experience with modern Intel processors) but in reality they were just limited with their overall clock. So my best chip, the 2800+, is sitting pretty at 200mhz FSB and a 12x multiplier.

Overall I'm happy with the outcome. While some people in 2002-2003 were reporting excessive clock frequencies of 2.7ghz or more, I feel that with 2.4 ghz with this build, still outperforming the flagship Athlon 3200+ of this processor line, it is actually a very good overclock.

Burning Boards

Unfortunately there were some casualties along the way. After discovering the max clocks between the boards and chips that I had, I also decided to play with the coolers to see which was best. I snagged this super weird dual-fan cooler. It is loud as fuck and did not cool the CPUs any better than my $5 near-stock aluminum fins that I got from my PC recycler.


In this process I managed to burn both my BioStar motherboard and my 2500+. Long story short, if you're doing a pin mod, be really careful when replacing the CPU.

Overclocking the GPU

The Radeon 9550XL is a renowned overclocker for its time. Although my first pick died, my $25 eBay replacement worked great. So I started overclocking it.

The process for overclocking a 9550 or other similar Radeon 9xxx series card of the time is rather straightforward. These are cards that were intentionally downclocked in order to fit in a certain market segment. They have much more capability than what they are configured for. You can overclock them very easily, but the stock ATI drivers will reset the configuration. God forbid you get more performance than what you paid for. So there are certain utilities like ATITool from techpowerup that will allow you to overclock and also override the drivers. You can also reflash the BIOS to trick the computer into thinking that you have a totally different GPU with higher frequencies, but only if you find your card can support those frequencies. The 9550 or 9550XL could often be flashed to a 9600XT, but mine could not. You need to find the max supported frequencies first before flashing. 

Either way, when overclocking this card it is prudent to provide extra cooling. You want to cool both the GPU and the RAM.

Applying sticky heatsinks to the ram chips
I bought this ridiculous gpu cooler to fit into your back slot. Because the 9550 had no fans and we are about to overclock it to a fanned 9600XT model, I needed to add fans.


GPU Results

So I just cranked up the GPU as far as it would go in ATITool.

I went from the stock frequencies of 250mhz core/200mhz memory with 35 FPS average on the ATITool test to 425mhz core / 270mhz memory. That is about a 70% and a 35% overclock, respectively.



Thursday, May 13, 2021

Building a 2002-2003 32-bit overclocking PC - Part 1

Inspiration

I have gotten back into overclocking lately. The concept fascinated me since I started building computers as a preteen. The process of tuning a machine is both rewarding and relaxing, and the engineering that goes into cooling, overvolting and modding hardware has become an art form in itself. It also appeals to my frugality. When I own a computer, I don't usually want the best parts - I usually want the best performance out of the parts that I have.

With the recent silicon shortage, there are two different ways that PC builders are reacting. One group is moaning about price hikes, scalpers and wait times. Another group is taking matters into their own hands and squeezing every bit of juice that they can out of their parts. You can tell which group I admire. If you head over to reddit's overclocking forum you will see how often necessity has become the mother of invention. My absolute favorite posts are zombie cards like this one - where people combine components from multiple video cards into one. 

So I started with my main personal/gaming PC, which I will cover in another post. I've tuned that as far as it can get, and it handles modern games very well. But I wanted to keep tinkering, and wasn't willing to build a new modern PC. So I decided to go back in time.

The Plan

There are many ways to demarcate different eras in PC building. Hardware changed rapidly throughout the 90's and 2000's. I chose 2002-2003 for this build mainly because I wanted to experiment with hardware that I never really owned before. This was about a year or two before I really got into PC building. I also wanted to play games from that era (SimCity 4, Half Life 2, etc) on period hardware.

Note that the goal is not to build the best computer with 2003 parts that I can. This is more about tinkering and amusement.

The overclocking king at the time was the Athlon XP-M. These are processors meant for laptops that you could actually purchase and put in a desktop motherboard. There were two reasons why these were great overclocking chips:

1. They were rated for decent speeds at low wattage, so when you cranked up the wattage to desktop levels, you could reach much higher speeds than the chips were intended for.

2. They had unlocked core multipliers to support AMD's PowerNow! frequency scaling, a power-saving technique for laptops. Unlocked clock multipliers are highly appealing to overclockers who would otherwise be limited to manipulating the front side bus.

So I decided to build this around a Socket A/462 motherboard, with an Athlon XP-M inside. I also wanted to get an good overclocking graphics card, which I'll cover in another post.

The Parts

Power Supply - 400w basic power supply from RE-PC, my local PC recycler $10

Storage - 500gb IDE ATA/133 - RE-PC $22

DVD-ROM/Floppy - $10

Case - I found a cool aluminum case that is probably not quite the right vintage (it has a Core2Duo sticker on it) but I liked it, so I bought it - RE-PC $30


RAM - I'm using basic PC3200 DDR400 memory. Two sticks, 2GB total. They are working in dual channel mode with my current motherboard.

Motherboards - Most of the discussion from the era seems to prefer nForce2 chipsets over VIA, so I went for nForce2. nForce2 tends to have slightly better overclocking options available in the BIOS. However, unlocking multipliers above 12.5x will probably still require a pin mod. (Hopefully I actually get to use this pin mod technique though because it's really cool).

BioStar M7NCD - eBay $50 - Came with 1.5gb RAM and an Athlon 2000+ and a crappy GeForce FX5200 graphics card, sold untested and as-is. Everything worked out of the box. Although I'm only using the RAM and graphics card from this purchase, it's nice to have the rest of the parts as a backup.


MSI K7N2 - eBay $45 - This is what I'm using currently. Seems to be slightly more capable than the BioStar as more overclocking options are available in the BIOS.


CPUs

AMD Athlon XP-M 2800+ 2.13GHZ Mobile Processor (AXMJ2800FHQ4C) - eBay $18

AXMH2500FQQ4C - Compaq (HP) 1.87GHZ Processor (Athlon XP-M 2500+ with Powernow) - eBay $22

Athlon 2000+ - Not using, came with the BioStar motherboard.

The Athlon 2000+ next to the 2500+. The 2500+ looks like it's never been used.

The 2500+ is the most coveted overclocker from that product line, cited by Tom's Hardware as one of the top 14 legendary overclocking chips, and covered by plenty of press at the time. It's likely that AMD never intended for this to be a hobbyist chip, but who knows.

I bought both the 2800+ and the 2500+ to see how they would compare, and to have a backup so I'm not afraid to fry anything. I'm starting with the 2800+.

Cooling

I picked up a $4 basic Socket 462 cooler from RE-PC which I'm still using. The fan wouldn't start up unless you reached in the case and gave it some encouragement, so I replaced the fan with a new one. It's working OK.

I also ordered this oddball cooler - AOC Majesty Twins - $28 from eBay. It looks cool, and with two fans maybe it will perform better than the near-stock cooler.


I couldn't find any radiator-style air coolers for the Socket A, nor any liquid cooling. Radiator-style coolers may not have been available or popular at the time. Now we know it's all about surface area. There is a Zalman floating around on eBay - Zalmans were the best coolers at the time - but I'm not sure if it will fit the motherboards I have. This may be the best I can do for a little while.

Graphics Cards

I spent some time (maybe an hour) picking the AGP graphics card bin at RE-PC and found a 256mb Radeon 9550 XL for $3. I was overjoyed when I got home and read that the card had great overclocking potential, as you could generally double the core clock and bring it up to a 9600XT, as long as you had the right cooling. 


I also had the FX5200 and that's where I'd start.

Unsuccessfully Reviving the Bargain Bin Radeon

When I booted up with the Radeon, I was met with some pretty extreme artifacts:


I wanted to try everything in my power to fix this card. The problem could be a corrupted BIOS, a short somewhere, a blown cap, or a fried IC. My power is pretty much limited to soldering blown caps or flashing the BIOS. The caps looked fine, so I tried flashing the BIOS. 

Flashing the BIOS using command-line tools proved to be exceptionally difficult when you can't see what you're typing. Eventually I could run the tools by running them from the command line, remotely, over a VNC connection, but the tools never discovered the card.

At that point you have two options to flash the BIOS. One is the "Pin 1-8 mod" where you short out the BIOS chip, disabling it during startup so that the flashing tool will recognize the right card is installed, and then cut the short while the machine is running to allow writes.

The other technique is to use a solder less clip-based flash chip interface to flash the BIOS chip. I decided to try this. Luckily these flashing tools are really cheap and could be useful again someday.

The BIOS chip

The clip flasher attached to the BIOS chip. I had to Dremel away some of the clip as the capacitor was in the way.

Techpowerup.com still maintains a library of old and new video card BIOS roms. I found a few for the 9550 and started flashing. No luck, it’s still glitchy as fuck. 

I accepted defeat and ordered a replacement card (only $26). 

I am also considering getting a Quadro FX 3000. They can apparently overclock as high as the GeForce 5900/5950U which were the best performing graphics cards in their day.

Overclocking the 2800+

Waiting for the replacement graphics card to ship, I tried overclocking the XP-M 2800+ with the stock cooler.

The chip is rated for 2.13 ghz. I can get up to 2.3 ghz stable so far. This is my best stable configuration:

FSB: 185mhz - CPU Multiplier: 12.5 - CPU power: 1.7volts

I'd really like to get an FSB of 200mhz or higher. In my experience, RAM tends to have better performance with higher clock speeds and equivalently longer timings. But so far, 200mhz is an unstable FSB speed.

Since FSB seems to be the limiting factor right now and the multiplier is maxed out, I am going to try the pin mod to unlock the multiplier even higher (probably on the other backup motherboard first).

Monday, April 12, 2021

Color of Umphrey's Poster

Back in May 2015 I wrote a little program to sequence an Umphrey's light show into a cool looking image. I finally got around to picking up that old code. I sequenced the whole concert and put it together in a nifty poster.

You can get prints at lightshowdna.com and I'll add more shows there eventually. All proceeds go to the Jacqueline Rush Foundation.

First draft:



With arcs (I like this one better)






Red Rocks 2012:



Sunday, February 14, 2021

Doomguy hardware monitor

This isn't my invention, I just replicated something another guy made and posted to Reddit. I had to change a bunch of code to make it work with my display. Doomguy turns bloody when temps exceed 60 degrees. Really cool addition to my gaming rig. Yes my desk is a disaster.
reddit post: https://old.reddit.com/r/pcmasterrace/comments/li9m39/lets_doom_pc_status_display/