Category Archives: Hardware

Biding Time

Until President Obama waves his hand and magically fixes the economy so I can find a job, I’ve been biding my time with several projects as usual. As mentioned in my post a couple months ago, I expected to complete a major overhaul of the content system by the end of last year and amazingly actually did so. I felt like the content pages were too bulky with the varying number of images and description lengths, and it didn’t look very clean. So I crafted a custom vertical tabview to organize the information into specific tabs for description, images (dynamically loaded with AJAX), changelog, and downloads (also AJAX). The default tab, called “Vitals”, is a combination of the other tabs, showing general information, a shortened description, one image, and the number of total downloads. The succinctness of the vitals tab helps keep the tabview height down and thus all the items on the page look uniform.

Of course, it all looks rather well until you go to test in Internet Explorer. Despite my attempts to keep everything within standards, IE6 still has issues such as flickering tab button background images and the always enjoyable broken box model. However, IE7 isn’t without its problems either and the tabviews seem to adversely affect my fixed positioning hack from last post.

I’ve also been redoing parts of the site to use more CSS and less inline formatting. Most of the web seems to be in love with CSS to the point that they blindly use only CSS, but I tend to be more pragmatic about it. Certainly, CSS is useful for centralizing style information that is to be used repeatedly or as part of an overarching theme. But the CSS standard is not quite complete enough to handle everything a developer might want to do. I frequently need a property that tells an element to be springy (i.e. fills up the remaining height or width of its parent), but there exists no such property in CSS2. A trick that I like to do with (100% height) tables is to use them to keep something vertically centered in a page or at the bottom of a window but able to expand. CSS has no way to do these things; its vertical-align property only works on inline elements (and don’t get me started on margin hacks). So I think I’ve made my point: it’s a good start, but it’s not there yet. (Plus: IE6. So even if it were there, we still couldn’t use it.)

But I haven’t just been diddling web development lately; I’ve also been back at VB.Net to release a public beta of my much slaved over alarm program cleverly named “Snake’s Alarm”. Not much has changed since I last worked on it in earnest in August 2007. I finally fixed any instability with the FMOD system playing two alarm sounds concurrently by just preventing it from doing so, figuring there wasn’t much use for two overlapping sounds playing. I have also perfected the snooze feature by adding options to control the max amount of snooze time allowed and to turn off the monitor when snoozing. There’s still a lot left in the TODO file, but this version is still completely functional and reliable.

In hardware news, I recently replaced my Radeon 9600XT with a GeForce 7300GT as a stopgap upgrade until I can finally afford a new system. It was seriously the best AGP nVidia card I could get on Newegg–they’re going like hot-cakes (whatever the hell that means). I had my eye on a 7600GS until it sold out when I went to buy. Now the 7300GT that I got is already sold out. I wrote a lengthy review on Newegg for the video card about a week before it sold out (albeit one person labeled it as helpful before then) that I’m going to republish below.

Pros: I haven’ t done a lot of benchmarks, but it looks to be about 60-120% faster than the Radeon 9600XT it replaced, depending on the game or benchmark of course. I chose to switch to nVidia because this card supposedly runs cooler and with less power than ATI’s final AGP offerings (and to prevent fanboy-ism). My tests with RivaTuner show the core runs a bit hot at idle (~116°F), but it only creeps up marginally in most games (~140°F). Video stress tests put it at about 166°F. Overall, the 7300GT’s performance is only somewhat noticeably better in most newer games compared to its predecessor.

Read More…

What’s silly is that I’ve mostly been playing Diablo 2 (an eight year old game) since getting this new video card. I convinced Kaylen to play it with me, being that it would run on just about any computer and she was in exile over winter break. Though it seems I got her hooked since we played all the way through with my Paladin and her Sorceress. Since the first completion, I’ve been poking around in the game’s data files for any changes I can make to perceived flaws.

My biggest complaint about Diablo 2 has always been that you level too frequently at the beginning and hardly ever later on. I did a huge spreadsheet with player experience, monster level, and level-to-area calculations trying to come up with the best solution for a balanced and steady leveling system. One of the most telling graphs of this data is at right, showing the percentage increase in experience needed to get to the next level compared to the last level. In vanilla Diablo 2, after level 11, the player needs 25% more experience to get to each subsequent level, which can lengthen the process significantly as one approaches level 27, where the experience difference levels out at a more respectable 9%. I created a modification to the leveling system that merely smooths out the experience difference from level 5 to 30 and balances the resultant increased difficulty by lowering monster stats according to how far behind in levels the player is.

I’m not sure if it’s all as complicated as it sounds, but when I finally release the mod, I’ll be sure to include the spreadsheet for others to marvel at. I’ve also done a number of smaller mods and have already uploaded three such mods as of this post. One fixes the ever-annoying game font where the 5’s look like 6’s–a huge confusion when looking at item stats. More will follow as soon as they’re thoroughly tested in our new Barbarian and Assassin game. 😛

Posted in Benchmarking, Hardware, Modding, Programming, Website | Tagged , , | Leave a comment

Lessons in Overclocking

As I mentioned in my last post a week ago, I had a hunch that the CPU was the source of all my locking issues in games. Originally, I suspected the clock was too high at ~100Mhz over stock, 2158 (166*13) @ 2262 (174*13). However, while researching Athlon XP’s on Wikipedia, I noticed that none of the Thoroughbred’s were set above 1.65 Volts, yet I had mine set to 1.70 Volts for years. I can’t recall now why I set the core voltage up .05v; it could have been that my original overclock demanded it for stability, there was a perceived need for increased voltage for better stability, or just my own ignorance at the time. It seems reasonable that the voltage is responsible partly, if not completely, for the instability. Increasing the voltage is often necessary to maintain higher clock rates, but they also add to the watts of thermal energy the CPU puts out (increasing the likelihood of overheating). It is also my speculation that increased voltage puts more demand on the capacitors that regulate the CPU power, potentially causing over-voltage failure, and it just so happens that I noticed a couple slightly burst capacitors recently (as seen in the photos below)–wondering if there’s a correlation.

Since I still couldn’t be sure if the problem was the core voltage or not, I was planning a battery of tests the day after Christmas to find a suitable CPU clock. I’d recently realized that my chipset and memory were both rated for a 200Mhz front-side bus, but I had been keeping it close to the CPU’s default of 166. Luckily, I got my 2700+ a couple months before AMD started locking the multiplier by default; therefore, I would be able to drop the multiplier and raise the FSB, roughly maintaining the CPU clock while increasing the memory bandwidth. I was hoping this strategy would allow me to lower the CPU clock as much as necessary and make up the performance with increased bandwidth. The only unknown factor was possible increased CPU latency due to the lower multiplier.

I spent five or more hours running through my test battery, which consisted of Sandra 2005 CPU Arithmetic, CPU Multimedia, and Memory Bandwidth tests; some or all of 3DMark 2005’s game and CPU tests; and the Half-Life 2 benchmark (which apparently is only available through Counter-Strike: Source now). 3DMark’s GPU tests were understandably unhelpful, except later on when I discovered that the Firefly test was extremely memory-intensive. As I tried to find the maximum stable FSB clock, this test proved most helpful. Half-Life 2 showed little responsiveness to the increased memory bandwidth and was only slightly more affected by the CPU clock, even when the video card wasn’t the bottleneck. Sandra’s tests were the most consistently telling of raw performance. As expected, memory bandwidth scaled quite linearly with increased FSB clock. And although the multimedia benchmark was mostly useless, the arithmetic benchmark showed slight performance degradation due to a lower CPU multiplier; but in the end, it was much more affected by CPU clock speed.

Tnews250he benchmarking sequence I took was to decrease the multiplier by .5 each time and then bring the FSB up until the CPU clock was about 2200Mhz. However, when I reached 11*200, I noticed that HL2 and the 3DMark were exhibiting strange crashing. I tried lowering the FSB until I brought these crashes under control (~190Mhz). However, at 11.5*190, the CPU clock was too low, so I raised the multiplier to 12 and set the FSB to 186Mhz for a comfortable 2232Mhz. This has proved to be very stable over the last week, so my next move is to bump up the FSB to 188, which would bring the CPU clock to nearly the same as it has been for the last few years and ultimately show that the core voltage was the problem all along. All these tests were run with a core voltage of 1.65v (stock).

The only problem with using a multiplier of 12 instead of 13, is that most programs identify my CPU as a 2400+ instead of 2700+. But really, it’s more like a 3200+ in terms of performance.

I’ve been enjoying my new stability by playing through Half-Life 2 Episodes 1 and 2 in the last week. Yes, episode 2 was that good that I wanted to play it again. It was much easier to appreciate the game without random locking and with commentaries turned on. I was surprised how often Valve mentioned changing the game in response to the actions of playtesters. This seems like something more developers should pay better attention to.

Posted in Benchmarking, Hardware, Troubleshooting | Tagged , | Leave a comment

Cursor Lock 2.0 and Power Supply failures

I’ve been wanting to rewrite one of my VB.Net programs over in C++ recently, just to force myself to learn the language better. Since there was no way in hell I was going to tackle any program with a graphical user interface, I chose the locking portion of my Multi-Monitor Cursor Lock to port. Looking over the code for a recent feature-request update, it seemed like most of the code involved Windows API function calls and data types, which are actually easier to implement than in VB (you just have to include windows.h).

Really, the two most difficult to learn fundamentals of C (having come from a VB/Java/PHP background) are character strings and pointers. Pointers really aren’t that bad once you learn how the operators work, but you still have to stop and think about any redirections: “& returns an address, * returns a value”. The problem with strings is that there are a million types of them and getting them to play nice requires all sorts of tricks; there’s character arrays, pointers to characters, constant version of both of those (which I still don’t really get–how can something return a constant?), string class, cstring class, wide characters, ANSI characters, Unicode characters, multi-byte characters. Since I wasn’t using MFC or ATL, I decided to stick with the string class, which could be initialized from character arrays or character pointers. And although its c_str() function returns a const char *, you can use strdup() or strcpy() to easily get a char *, which many API functions require.

After trudging through the code for parsing the command line switches in and reading default values, the code for the actual locking portion just kind of rolled out (being comprised almost completely of API calls). Doing the code was fun, but the benefits that I

news241

Testing Cursor Lock compatibility required me to install Win98 in VMWare.

saw during performance testing blew me away. I ran the VB.Net and C++ versions for two minutes at 20ms poll rate to see the CPU usage. .Net used 8.6 seconds of CPU time compared to C++’s .3 seconds: a 29 times performance increase! This test couldn’t have been more definitive as the algorithms were virtually the same; remember, I said the locking portion was mostly system calls. Then, I tested memory efficiency, which was also delightful but the difference was less dramatic: ~16,000KB to ~1,500KB (~10x less memory) or ~7,000KB to ~400KB (~17x less) using the SetProcessWorkingSetSize(hProc, -1, -1) trick–not too shabby. Also, without the .Net “Just-in-Time” compiling, the C++ version doesn’t have a two to three second start and close delay.

Happy with my results, I started working on new documentation for Cursor Lock 2.0, so I could submit to some download sites. It was about complete when I decided to turn in for the night on Saturday. As I laid in bed, nearly asleep, I heard the fans in my computer spinning down, the silence cutting through my subconscious. Peering over at the tower, I noticed the power light still on, which was even odder than the system randomly powering down. I went over and tried to restart, but it wouldn’t stay on long enough to even begin to news242POST and blue smoke smell had already permeated the room. The next morning, I smelled around the tower and found the culprit to be the power supply, as I suspected. After taking the PSU apart and dissecting it on the kitchen table, I found an interestingly charred transformer coil. When I plugged the PSU in and shorted the power-on pin, a spark leapt from aforementioned transformer to a plastic insulation divider. Upon further inspection, it appeared the divider had actually melted to the transformer.

Obviously, this power supply was dead beyond anything I could repair, so I ordered a new 500W Thermaltake PSU from Newegg. I tried to get one that I could still use whenever I finally get to upgrade my core system components; the key to this was in the 20+4-pin ATX main connector that allows you to break the newest 4 pins away from it. In retrospect, I had probably been overloading the old PSU for a while now, which was leading to some system instabilities when gaming. It was rated for 350W, but most wattage calculations I had done put my usage at slightly above that. Anyways, here’s some pics of the new power supply. I should have gotten one with it inside the case, but oh well…some other time.

Luckily, after that disaster, none of my other hardware had been fried (from an over-voltage or such), and I got to finish the documentation and polish of the new Cursor Lock. I submitted it to a few download sites, but it could be weeks before they get approved. What independent developer has $1000 for their premium services? Not to mention that there are thousand of good download sites on the web. Well, until it appears on other sites, the new version can be found right where it always was here.

Posted in Hardware, Programming | Tagged , , | Leave a comment

It’s 10:30, right? Ttssssss…I gotta take a news break.

A lot of stuff has happened since my last post: my sister got married, I had a birthday, and school started back. However, none of those are particularly interesting or tech-oriented, but here’s some things that are:

Since my last post about fixing my video card, the fan naturally died again. I should have expected this. Trick #2 to know about fans is that after they’ve failed once, they’ll probably fail again soon after fixing them. I overlooked this fact because I was too satisfied with my work. But after confirming the fan had died a second time, I went ahead and ordered a copper GPU HSF kit (VANTEC CCB-A1C) from Newegg.

The installation was mostly straight-forward except that I had to modify the 3-pin fan connector to fit the 2-pin header on the video card. I did this by putting the 3-pin wires (of which there were only 2; the third wire is typically for RPM monitoring) into the previous fan’s 2-pin connector (the plastic part). The thing about 2-pin and 3-pin connectors is that they don’t terminate the wires the same way, so I basically just had to force the wires down into the connector, hoping the pressure would keep them contacting the header pins. It’s pretty ghetto.

Kaylen’s a sweetie. She got me a Western Digital 320GB (3200AAKS) SATA drive for my birthday. Unfortunately, she (and I) overlooked the fact that this drive only has a SATA power connector, which my PSU lacks. In my defense, the Newegg page that I sent to her about it had no mention of what power connectors it offered. Newegg came to the rescue again, though, with a SATA power to 4-pin Molex adapter for a few bucks, which was shipped in an absurdly large box filled almost completely with packing peanuts.

The hard drive upgrade plan (which I devised a year or more ago) was to copy each current drive up to the next highest capacity drive and then remove the oldest drive, a near-failing Maxtor 40GB. Thus, the 40GB drive’s data would go to the 80GB, the 80 to the 160, and the 160 to the new 320 (in the reverse order, obviously). This process went rather smooth until I got to the 40GB drive, which held the OS and boot loader stuff. I knew I couldn’t just copy the drive within Windows and expect it to boot. There are just too many OS-locked system files, for one thing; but also, the Master Boot Record won’t be copied. I looked around for a while trying to find the right way to approach this. After a whole afternoon of failed WD Data Lifeguard bootable floppies, I finally found a program that would do everything I wanted, Acronis True Image. It will step you through a simple wizard that will even let you resize copied partitions and then force you to reboot into a Windows console (like Scandisk uses) that flies through the process. It even gives you time to unplug the source drive so that it can assign the correct drive letters to the destination. It worked flawlessly (after I converted the source drive from FAT32 to NTFS). I now have about 280GB free across 3 drives–I wonder how long it’ll take me to fill them all up.

news238Lastly, if you haven’t seen the new show on G4, Code Monkeys, then you really need to. Even if you don’t get that channel, you know there are plenty of sources for the episodes on eMule. Basically, it’s a show about 80s video games that looks like an 80s video game. The comedy is a good amount of raunchy and there are plenty of game references strewn about the sets. Seriously, if you’re a gamer or a programmer, you will love this show. /end plug

Posted in Hardware | Tagged , , | Leave a comment

Snake fixes his video card.

Recently, I’ve been noticing increased GPU temperatures on my Radeon 9600 XT courtesy of ATITool and MBM. At idle, the GPU was already up to 140°F. At first, I just shook it off as a fluke or an overcompensation as I wasn’t seeing any real issues or graphical corruption. Looking back, I realize that the reason I hadn’t been seeing any problems was the games I (and Kaylen) had been playing: GTA3 (6 year old game), Alice (7 year old game), and Project64 (based off of 11 year old technology). None of these games even take advantage of some of the three year old technologies on my video card; so it wasn’t being stressed enough to fail.

Then I decided to play Dark Messiah since it’d been out long enough to get passed its initial release stability problems; I never had any problems with the demo version either. But once I got through the training mission, my system just locked up completely. I restarted and checked the BIOS hardware monitors and everything looked acceptable. Suspecting something else, I started playing again with the MBM dashboard open on the secondary monitor. When the system locked again almost immediately, I looked at the dashboard to see an insane 240°F (115°C) for the GPU core temperature–well beyond the boiling point for water. I was surprised to see it get that high before failing.

At this point, I acknowledged that the excessive temperatures reported indicated some cooling problems with the video card. I removed the card from the system so that I could get at the cooling apparatus better; and sure enough, there were some large chunks of dust clogging up several of the fins on the sides. I felt that the amount of dust was even capable of slowing the fan down enough for failure. After cleaning and replacing the card into the motherboard, I booted up and checked the temperatures–still ~140°F at idle. To see if there was any sort of improvement, I tried the “fuzzy spinning cube” stress test of ATITool. It got up to and then leveled out at 219°F, locking after a few minutes. There was still something wrong; however, cleaning the dust chunks out of the heatsink did seem to alleviate some of the heat stagnation.

news218

Testing the fan with a battery after oiling.

I let the system POST and then went into the BIOS so I could poke around in the computer case while it was on. I positioned a mirror and flashlight so I could see the GPU HSF, and as I had expected, the fan was not spinning at all. I took the card out again and moved it to the kitchen table so I could work on it. I removed the HSF from the GPU and then slid the wires out of the fan power connector. I was going to test the fan with some battery power; however I didn’t know what voltage the fan normally took. But I figured 9V was probably a safe bet and easiest to test with. I laid the exposed fan wires on the battery terminals and nothing happened. It was looking like the fan might just be burnt out and I would need to order a replacement, but I had one more trick up my sleeve.

news219

Curiously enough, the chip appears to say Radeon 9570 XT instead of 9600 XT.

As Kaylen looked on in amazement, I removed the sticker on top of the fan to reveal the mechanical access hole. As you may know, a couple drops of household oil into a ball-bearing fan can bring it back to top speed or even quiet it down. So, that’s what I did, followed by manually spinning the blades until the motion felt smooth. As you can probably guess, the fan buzzed right up. While I was at it (and because I had made a mess of what was already there), I replaced the questionable thermal compound that was used previously between the core and the HSF. It was a silver material, but not necessarily comparable to the quality of the Arctic Silver I replaced it with. Kaylen had fun snapping pictures while I did this. You can see them below.

And after I put everything back together, I did get to play Dark Messiah for five hours without any problems. It’s actually a lot better game than some of the reviews made it out to be. It reminds me of a cross between Enclave and Thief 3–the former for the combat style and the latter for the atmosphere. However, I will admit that the overabundance of convenient environmental traps to kick or cut detracts from the realism. But at the same time…fuck it, the game is still fun.

Posted in Gaming, Hardware, Troubleshooting | Tagged | Leave a comment

Dungeon Crawler II and other cool shit.

I’ve finally gotten my TI-8x calculator RPG into a playable beta state! There’s still plenty left to do on it yet, but one may try out the new map, key, and xp systems if they like. More information and the download can be found here. Here’s a few screenshots of screens I changed:

I cleaned up the About page some yesterday–updating hardware and site descriptions. I also got my much needed uninterruptible power supply (UPS) on Monday. It has a slight hum and is heavy as fuck, but these don’t matter so much now that it’s tucked behind my loud PC. I actually had it cut on briefly for the first time a couple hours ago. The power flickered but the computer was unaffected. There’s a picture of the UPS and power cord goodness below.

I also came into the company of a new cat recently–a male tabby which I think we’re calling Gordon and you can see why.

Posted in Hardware | Tagged , | Leave a comment