Verify Game 3.2 Released

This is a relatively minor update with a couple useful changes:

  • The new -t option can be used to specify the max number of threads.  As noted in the Technical Details, the default behavior of using all available threads can be problematic in certain situations.
  • I've worked on this script over a few years, and Redump has changed their DAT file naming scheme since I initially started.  I updated all of the DAT filenames in the script to match the current standard, which should make getting started easier for new users.

 

The two additional changes are pretty minor:

  • Add support fpr pc-fx, vita-psn[-dec]
  • Include support for both encrypted and decrypted PSN files

 

You can grab the latest version from the Verify Game page.

New Utility: Verify Game Released

Verify Game (verify_game.sh) is a Linux-native script to check and verify your video game backups (ROMs/ISOs/etc.) against trusted sources.  It's meant to fill the gap for this kind of utility under Linux.  It's intended to just verify games, so there are no additional ROM management features included such as renaming, but it does include a few handy features such as transparent decompression and parallel verification.

Please see the Verify Game page for details and the download link.

This is one of the many scripts I mentioned in my general update that I've been tinkering with for the last few years, hence the immediate jump to version 3.1.  :-)  Expect more to follow.

How to Strip and Inject XCI (Nintendo Switch ROM) Certificates under Linux

Note: I previously posted this to Reddit, but posting here as well for permanence.  This post is of a technical nature and focuses on messing with dumped Nintendo Switch game cartridges, so for most people reading this site it'll be of little interest.  For anyone else interested in the subject, by all means continue reading...

This won't be of much use to people running Windows, but it may be helpful for fellow Linux users (and potentially OSX users as well). This will show to to strip a certificate out of a dumped XCI ROM, as well as restore it to return the ROM back to its original state. XCI Explorer provides an easier way to do this from within Windows, I just don't run Windows. :-)

So here is a Cave Story+ ROM that I dumped with gcdumptool:

$ md5sum Cave\ Story+.xci
a311902acb6813bf61f9cde9e0139913  Cave Story+.xci

If I try to verify the ROM (using a home-grown scripts that checks against no-intro DAT files), we'll see it doesn't match because the certificate field is stripped in the No-Intro dumps:

$ verify_game.sh -p xci Cave\ Story+.xci
Warning: No match found for XCI game 'Cave Story+.xci'

Using the following dd and printf commands I can strip the certificate and copy it to a separate file. Note that the checksum of the new XCI is different from the original and, this time, matches against No-Intro:

# First, backup the certificate to a separate file
$ dd bs=1 skip=28672 count=512 if=Cave\ Story+.xci >Cave\ Story+.cert
512+0 records in
512+0 records out
512 bytes copied, 0.0010961 s, 467 kB/s

$ ls -l Cave\ Story+.cert
-rw-r--r-- 1 user user 512 2018-07-30 19:01 Cave Story+.cert

# Next, strip the certificate from a copy of the ROM file
$ cp Cave\ Story+.xci test.xci
$ printf '\xff%.0s' {1..512} | dd bs=1 seek=28672 count=512 conv=notrunc of=test.xci
512+0 records in
512+0 records out
512 bytes copied, 0.00115365 s, 444 kB/s

$ md5sum Cave\ Story+.xci test.xci
a311902acb6813bf61f9cde9e0139913  Cave Story+.xci
af8ac186efd0fa1a02d0c63c40dd2fd4  test.xci

$ verify_game.sh test.xci
Verified XCI game: Cave Story+ (USA).xci

So far, so good. Now, let's say something happened to my original dump of Cave Story+ and I wanted to inject my certificate back into the stripped copy to re-create the original. The following dd command will write the certificate back to the ROM. Note that the test.xci file then has the same checksum as the original.

$ cat Cave\ Story+.cert | dd bs=1 seek=28672 count=512 conv=notrunc of=test.xci
512+0 records in
512+0 records out
512 bytes copied, 0.000806952 s, 634 kB/s

$ md5sum Cave\ Story+.xci test.xci
a311902acb6813bf61f9cde9e0139913  Cave Story+.xci
a311902acb6813bf61f9cde9e0139913  test.xci

Hope someone finds this helpful.

Legroom General Update

Wanted to put out a short general update. I clearly haven't been putting much time into the legroom.net website in recent years. It honestly just hasn't been enough of a priority compared to other stuff going on. Heck, it's been over a year since my last post, about a major upgrade mentioning a few remaining issues that I still need to resolve... and those issues are still unresolved. Sigh

However, while I haven't posted much to the website, I've still been tinkering around with stuff, writing new scripts and whatnot that would be of interest to at least some people out there. I'm going to make an effort over the next few days to start publishing this stuff on the site so it's publicly available. To be clear, nothing here will be earth-shattering, but it'll include a few posts, scripts, tips & tricks and whatnot that some my find useful. So, you'll see a flurry of activity while I'm working on this, and then afterward I'll try to get back into the habit of posting new stuff here to share with the world.

In the process I'll likely clean up some other content on the site. Much of the content is dated and I've left it on here solely for archival reasons, but I mean really - how useful is my Installing Gentoo Linux page originally written in 2003 for a Pentium III-based system really going to be today? I'm not sure yet what will go and what will stay, but just a heads up that changes are coming. That's it for now. If anyone's still reading this site after being idle so long, well, buckle up. Going to get (comparatively) busy soon!

Major Website Upgrade

I've recently upgraded the Legroom.net website, as the new look of the site probably gave awway.. This was a major upgrade, with some significant changes:

  • I've upgraded from Drupal 6 to Drupal 8. I got most of the old content migrated over, but it's still a work in progress.  Currently:
    • Most visibly, I've switched to the default Drupal 8 theme, bartik.  It's not ideal, but it'll take quite some time to port over my old theme, so I'm not sure what I'm going to do about it yet.  At the very least I plan on tweaking bartik to better meet my needs, but I'm not sure how much of the old look and feel I'll be able to pull over.
    • Forum content is completely missing.  This appears to be due to a bug in the migration scripts.  I'll see if I can write a script to cover that myself, but honestly don't know if it's going to be worth the trouble considering they've been read-only for several years now.
    • Navigation/links/permissions may not be 100% correct at this point, though most things should work.  I need to tweak a few things to work with the new/different permissions available in this version of Drupal.
    • There are known rendering issues on several pages, especially wherever dates are shown.  I haven't had time to rewrite them to use the new Drupal API yet.
  • I've upgraded from PHP 5 to PHP 7.  This has affected a number of support scripts on the website, but I believe the user-facing scripts should be working as expected now.  Finding and fixing all issues in all scripts will likely be an ongoing process for some time.
  • I've switched to Let's Encrypt for TLS certificates instead of my own LegRoom CA.  This has two important implications:
    • From now on, the secure (HTTPS) version of my website should be trusted by any browser.
    • As a result, I'm forcing encryption on by default for all visitors.

I'll be tweaking the site much more and working out the kinks over the next few days.  In the meantime you see anything obviously wrong or missing, please let me know so I can add it to the list.

Convert to FLAC 2.1.4 Released

I just uploaded a minor update to Convert to FLAC. It adds support for converting Windows Media Audio (WMA) Lossless and Meridian Lossless Packing (MLP). MLP is a format commonly used on DVD-Audio and Blu-ray audio discs; note that you'll need some way to decrypt and rip the MLP files from the disc - they can't be copied directly.

For more information:
Convert to FLAC home page and downloads
Convert to FLAC ChangeLog

New Tutorial: How to Hack and Take Full Advantage of Your Wii

I picked up a Wii earlier this year and decided to hack it to see what benefits that would provide. The results were, to be honest, quite spectacular. After spending quite some time digging through various HOWTOs scattered across the internet with often conflicting or out of date information, testing different configurations and applications, and running through quite a bit of trial-and-error, I finally have a solid and extremely functional Wii that lets me do pretty much anything I want with it. Some of the highlights include:

* Boot directly to WiiFlow (a slick homebrew launcher application), bypassing the health and safety screen and main Wii menu
* Rip any Wii or GameCube game to an attached 500 GB USB drive
* Browse, select, and launch any previously ripped Wii game from the USB drive
* Browse, select, and launch any previously ripped GameCube game from the USB drive (note: this requires a GameCube-compatible Wii)
* Play older games via emulators (though, honestly, PC emulators provide a better experience)
* Run various and miscellaneous utilities such Wii and GameCube memory card management utilities, allowing me to copy/backup saved games from the Wii or GameCube memory card to my computer

The end result is that I have every one of my 27 Wii games and and 25 GameCube games ripped and stored on the USB drive, and I can play any one of them now by simply powering on the Wii, browsing to the desired game in WiiFlow, and pressing A on the controller. No more disc swapping, and no more worrying about where to even store all of the games so they're accessible (they're now all boxed up in a closet, along with my GameCube). It's a wonderful thing. :-)

For details on how to hack your own Wii, if you're interested in that sort of thing, please continue reading:

How to Hack and Take Full Advantage of Your Wii

HTPC Upgrade 2014

Note: I updated the post about my 2013 desktop upgrade based on some component changes and my thoughts/experiences after about year. Feel free to check it out if you're interested in such things.

I built a new Home Theater PC over the summer. I didn't get around to discussing the parts here as I usually do (though you can find the details on my hardware specs page), but I've been very happy with it so I thought I write a (relatively) quick post about it to share some details.

Case
nMediapc HTPC 7000B ($80 - Newegg)

For me, the case is what makes the HTPC a home theater PC as opposed to just a PC that you have connected to your TV. While I've never found an HTPC case that meets 100% of my desires, I found the HTPC 7000B a while back and was quite taken with it. It's taller than I would care for and looks slightly more "PC-ish" than I would prefer, but it has a number of great features going for it:

  • The looks - while not perfect, it still looks pretty damn good sitting right under my Blu-ray drive next to the rest of my home theater system. At first glance from across the room, you really don't notice it's a PC until you start looking a little closer.
  • The depth - it's much shallower than typically PC (even HTPC) cases, so it fits in with the rest of my components much better. For example, desktops are generally in the 18-21" range, most HTPC cases I've found are 15"+, but this one is only 12.7" - for comparison, that's just about the same depth as the Oppo blu-ray player it's sitting under.
  • The height - while I listed this as a con above, it's also a plus - this case is just tall enough, and not any taller, to allow the use of a full-sized video card while not being any taller. For the short term, this is critical as I need to use my old Nvidia card in this case for component video out (more details below).
  • Built-in small window in the front of the case to add an infrared receiver so you can use a remote with this system without requiring a hardware mod or external receiver

After building it and using it for a few months, I can happily report that I'm overall very satisfied with it. It looks good, it fits everything I need, and the airflow and cooling is reasonably (though not exceptional) and quiet.

The one and only complain I have is that they placed the IR window directly in front of the optical drive support beam. I could not physically install the IR receiver because the support beam was right where the receiver needed to be. The only thing I could do to fix that was bend the support beam out of the way, but then that makes it useless for the optical drive. Fortunately, I'm not using an optical drive in this system, but I'd like the capability to add it if I need one in the future, but because of this design that's no longer possible. Still, everything else about the case is just wonderful, and since I'm not actually using the optical drive it's not really an issue, so I can give it a pass on that.

Overall, big thumbs up and highly recommend.

Motherboard
ASRock H87M Pro4 ($90 - Newegg)

The case requires a microATX motherboard, and after narrowing down the options I went with the ASRock board above due to price and the relatively modest selection of features I wanted for this system. Final verdict? I f*ing love it. It's stable, easy to setup UEFI-wise, boots almost as fast as it takes for my TV and receiver to fully power on, and has been very, very stable and reliable. It puts both of my recent desktop motherboards to shame, and I'm now sorry I didn't go for as ASRock for it when I had the chance.

Unfortunately, ASRock boards always seem to be available in only limited supplies for some reason, but if you see one that seems to fit your needs, grab it. I seriously can't recommend this highly enough. After the hell I've gone through with my desktop boards, working with this one has been pure, unmitigated joy.

CPU
Intel Core i5-4690s ($215 - Newegg)

I wanted a powerful but low-power/cool processor for this system, and the i5-4690S fit the bill perfectly. It's pricey, but for a fast quad-core processor w/ turbo (though unfortunately no hyperthreading) and perfectly capable embedded graphics for a HTPC running at just 65 W, it's worth it for me.

CPU Cooler
Noctua NH-U12S ($70 - Newegg)

I was so pleased with the Noctua cooler I added to my last desktop that I decided to add a similar, lower profile version to this system, and once again I'm very happy with it. It's super quiet and does a great job of cooling the CPU. Highly recommended.

I really don't have anything else to say about it, but just a word of caution - it's a tight fit in this case and with the motherboard I used. I had to play around with the orientation of the cooler quite a bit until I found a position that works, and even then the tips of the heatpipes came so close to the case fans that they would actually come in contact causing a rattle whenever someone walked across the floor and caused the case to vibrate just a bit. I ended up propping the cooler up a little bit by wedging a cable between it and one of the DIMMs, which solved the rattling problem. Just wanted to give everyone else a heads up - if you use these same components in your build, be prepared to play with it a bit to get it just right; otherwise, you may want to look for a more compact cooler.

Memory
G.Skill Ares F3-1600C9D-8GAO, 8GB DDR3-1600 ($80 - Newegg)

Not much to say here. 8 GB is more than enough for this system, the RAM itself is low-latency and low profile, and I've been happy with the brand for some time. It just works.

Power Supply
Seasonic SSR-450RM, ATX, 460W, 80 Plus Gold ($140 - Newegg)

Not much to say here, either. Like the Noctua cooler, I was very happy with the Seasonic PSU I picked up for my last desktop, so I used one here as well, and it doesn't disappoint. Recommended.

Hard Drive
Crucial M4 CT128M4SSD2, 128GB SSD (Newegg)

I picked up one of these on sale at Amazon for $80 a while back, which was a hell of a deal. It's not very big, but it's fast, I don't need much space for this system (in fact, I'm only using 6.5 GB on it, as all of my data is stored on my NAS), and, most importantly of all, I already had it and didn't need it for anything else. :-) This is a good drive, but honestly you'll want to pick up something more recently if shopping for SSDs today.

Video Card
EVGA e-GeForce 8800GTS 320MB Superclocked 320-P2-N815-AR (Newegg)

This is a ridiculously old card now, released back in 2007, but it's a critical component for my HTPC as it's the only video card I have that will support component video out, and as far as I can tell no cards on the market today support this feature. I'm still using a TV and receiver from before HDMI existed on appliances, so I absolutely need this feature right now. I'm planning on upgrading my home theater in the next year or so, at which point I'll probably switch over to using the embedded Intel HD Graphics 4600 controller with HDMI, but in the meantime this seven year old card is still kicking and still working great.

Other
I'm using the embedded sound card (Realtek ALC892 HD Audio codec and embedded NIC (Intel i217-V on my motherboard. Both work fine for my needs, but aren't particularly noteworthy.

For input I'm using a couple of controllers. The first is an Esky Mini i8 wireless mini keyboard/touchpad. It's actually not too bad for what it is, though for anything that requires a lot of typing I'll just SSH in from may laptop.

The second is a universal remote controller using the RC6/MCE protocol with an internal USB IR receiver. This works and makes navigating XBMC convenient, but it's not without it's flaws.

For one, the design of the board is just stupid, with the receiver sticking up perpendicular to the board. This requires that the entire board be placed sticking away from the IR window, which is likely to cause problems because there usually isn't going to be that much free space behind the front panel of a case (see my case comments above for more on this). Having the IR receiver by parallel to the board would've made much more sense as I could then just mount the board flush against the front of the case.

Second, something (I don't know if it's the board, the protocol, or just the Linux driver) prevents the multiple signals from the remote from being processed properly. If I hit down twice rapidly, it'll only register one press. If I hit down, say, four times rapidly, it'll register something like six presses. If I want to press any button two or three times, I have to purposely press them slowly to get it to register. This quickly gets very irritating. I don't think this board is necessarily the cause of this, but it definitely keeps me from loving it like I thought I would.

Third, despite my best efforts, I can't get this to power on the system from an off (S0) state. I can get the Esky keyboard to do that, so the system is obviously capable of this, but the IR receiver apparently won't send the correct signal to power the computer on.

All in all I'm reasonably happy with the IR receiver for the investment I made, but I'll probably look into switching it out at some point for something that'll hopefully address some of the above issues a little better.

Closing Thoughts
On the whole, I'm very, very, very, very, very happy with my HTPC. I'm running Gentoo Linux on it and have it set to boot directly into XBMC, which I use as the main user interface. It boots fast, runs fast, operates very quietly, and looks quite good mixed in with my other home theater components. If you decide to build your own HTPC, I hope this will give you some inspiration and useful tips.

Hey, what do you know? This actually did end up (relatively) short, by my standards. :-)

Website Upgrades

I just upgraded a number of components on both my website and server, as well as made a few backend configuration changes. If you notice anything not working correctly, please let me know.

How to Install and Configure MS-DOS 6.22 (Yes, Really)

I just posted an extensive new HOWTO regarding How to Install and Configure MS-DOS 6.22. I'm sure you're probably thinking, "WTF?", and you have every right to, so let me paste a bit from the HOWTO introduction that explains why I bothered to take the time (quite a lot of time, actually) to write this up:

This walkthrough covers installing MS-DOS 6.22 from the original installation diskettes. Why write this in 2013? That's a very valid question, to which there are a few answers:

  • Setting up a fully working DOS system will give you great appreciation for how far computing has come. For old-timers, it will be a walk down memory lane; for youngsters who've never used nor even seen DOS before, it should be quite an eye-opening experience to experience first hand both how primitive DOS was and yet how capable it could be.
  • A working physical DOS system is the most authentic way to (re-)experience classic PC games. DOSBox does an amazing job of supporting DOS games on modern platforms, but for perfect accuracy, including the full memory management experience (which can be a game unto itself), a real DOS system can't be beat.
  • There is a dearth of detailed information about MS-DOS on the internet. This makes sense as MS-DOS predates the web as we know it today, but I don't want knowledge of this system to be lost to time. I did a significant amount of research for this project, and I want to document and share what I've discovered and re-learned for future reference.
  • Perhaps most importantly, why not? This project was inspired by a previous project to resurrect my old Packard Bell, my first computer that, not coincidentally, ran MS-DOS 6.2 and Windows for Workgroups 3.11. Rebuilding and enhancing it from a hardware perspective was a fun experience, and now I'm doing the same from a software perspective.

If you're curious, please continue reading, but take heed: geeky content ahead.