MultiPatch 1.6 and project updates
MultiPatch version 1.6 has been released. A bug fix for UPS patch creation was contributed via GitHub, which is the primary reason for the new release. But I didn't want to post a new release just for a small fix, so I made some additional changes as well. Drag and drop is now supported, so you can drag files into the window instead of browsing for them. Also, the file extension for patch files is no longer case sensitive.
You can download the new release here.
I received several requests for updates to MP3Gain Express over the past 2 years. Last summer I began working on a re-write of a major portion of that so it would be easier to add much of the requested functionality. I only worked on it for a short amount of time before I went back to other things, so it's currently sitting about a third of the way done. I hope to have another release of that out sometime this year which should include several requested features.
MultiPatch has been updated to version 1.5. I received a report that IPS patch creation wasn't working correctly. This was broken in version 1.4, and is now fixed in 1.5. Additionally, the application is now signed for gatekeeper so you don't need to right-click it to run it for the first time. Finally, some changes were made to modernize the codebase to better align it with current development tools.
You can get the update here.
Reverse Engineering Games
Back around 2002 to 2006, I used to make codes for cheat devices on various platforms. One of the most interesting things to me back then was discovering and playing around with unused or debug content in games. Some people may recall when I discovered and released a cheat device code to access a test level in the US Gamecube version of Sonic Adventure 2 Battle, or the unused kart racing stages present in the first game, as examples. One aspect of finding interesting things like this (other than trial and error) was being able to trace though the game's assembly code to try and figure out how things worked. At the time, I wasn't very good at that and so any changes I made were usually single instruction changes if they involved assembly code at all. With time (especially after writing the HC11 emulator that I mentioned in the previous post) I became better and reading through assembly code for various processors and understanding the larger scope of what various logic was doing.
Recently I wanted to revisit some of the things that I couldn't do back when I was actively making codes back then. For example, I recently posted a cheat device code for the UK Dreamcast version of Shenmue 2 that allows the save file import feature to import files from the US version of the first game. (The Dreamcast version was cancelled in the US a few months before release, so most people including me had imported the English version from the UK) This required disassembling the game, locating the function that verifies the validity of the save file and modifying it to ignore the logic that checks the game region. Stuff like this is made easier using tools like disassemblers which can help by tracing the flow of assembly code, keeping a list of functions and their locations, and keeping track of text strings along with where they're referenced. But when it comes to disassembly of game console binaries, there wasn't really much choice when it comes to tools to do that. For example, with Dreamcast's SH4 processor the only option for a graphical dissembler was IDA Pro, which costs $1,129 USD. That's completely out of reach for anyone who wants to do this stuff as a hobby. The only other option was to compile some open source code that would disassemble into a massive text file, which doesn't give you any tracing or other advanced features.
A few years ago I found out about Hopper Disassembler, a much cheaper disassembly tool for Mac OS X and Linux. It costs less than $90 USD which is a fraction of the cost of IDA, and out of the box it supports both disassembly AND decompiling of both x86 and ARM assembly. The decompiler was an interesting feature too, because IDA charges an extra $2,350 per processor for theirs and Hopper has that feature included with its normal licenses. It also has a plug-in SDK to add support for additional processors, which is why I'm writing about it now. During the past few months, I released 3 plug-ins for Hopper to help with analysis of older games:
HopperSH4-Plugin adds support for the Sega Dreamcast's Hitachi SH-4 processor.
HopperPPC-Plugin adds support for the PowerPC processor used in the Gamecube and Wii consoles. There's also an additional plug-in in that repository to load Gamecube DOL files.
Both plug-ins are relatively basic at this point in time, but as I use them I'll be adding any features and fixing anything that will make them more useful to me. I hope someone else out there is able to use them as well. That's the only news I have for now, but I hope to update some of my older projects or start a new one in the near future.
Fall 2015 Update
I've decided to start looking through my backlog of past projects that might be worth releasing the source code to. The biggest one that came to mind is one that I wrote during 2006 and 2007. When I learned assembly language in college, we were taught on development boards using 68HC11 processors typically used in embedded systems. At that point, I had been interested in emulators for several years and had wanted to try and write one from scratch. This was the first time I knew enough about specific hardware to actually do it, so I took the opportunity to try and do it since the hardware was fairly simple. The end result was a mostly complete emulator which was helpful for developing basic assembly language programs. There are some inaccuracies that need correcting, 2 CPU instructions that I didn't implement (both of which are usually used for hardware testing and not useful in actual code) and some hardware features like interrupts are missing. But the debugger is pretty neat. In addition to read, write, and execute breakpoints, (which are pretty common) it's the only debugger I know of that explains what each instruction is doing. That's very useful when you're trying to debug code and aren't familiar with the instruction set yet.
I've posted the source to the 68HC11 emulator on Github. Please note that this will not be useful to almost everyone. The 6811 is a really old processor from the 80's that nobody really uses anymore, and it was primarily hooked up to other devices like card readers or keypads. The emulator was designed against a very specific development board, the only people who will have stuff to run against it are those who have developed for it themselves. Having said that, here is a link to the code. I hope someday it might be useful to someone.
I will look through other old projects in the future and release the code if it seems appropriate to do so.
For news that may interest more people, I thought it would be a good idea to mention the BizHawk emulator. It's a multi-system emulator written in C#. I learned about the project in 2012, and started working on the Mac OS X port of it later that year. The OS X port is very rough, mostly because the user interface is a wrapper around the original windows code, but it's good enough to use for playing games. At some point I hope to complete a native UI for OS X that will solve some of the problems it currently has. I would recommend that anyone interested in helping the project try and get involved, especially if you're interested in helping on the OS X or Linux side of things. You can find a forum post where I link to the latest OS X build here.
I've released a new version of GDIBuilder for Windows and Mac.
New in this release is the ability to generate a truncated image. Normal valid GDI images will always be 1.11GB, however some people wanted the ability to make smaller images to save space. This option produces an image that while not technically valid, will usually still work for most situations. RAW mode is now enabled by default since this option is more commonly used and better supported on hardware. You can download the new version here.
New Application, MP3Gain Express updated
MP3Gain Express has been updated to version 1.2. The new version adds drag and drop support for files. As usual, you can find it here.
I've also released a new tool, GDIBuilder, which can be used to help build Dreamcast .gdi images from scratch. You can find it here. The tool is available for both Windows and Mac OS X.
New site design
After several years of delays, I've finally customized the layout of this main site. Earlier this week the site was down for a few days while I upgraded all of the software on the web server. As part of the upgrade process for this site, I couldn't use the layout that had been used for the past several years so I customized a new one to match the layout I had mocked up a few years ago. I think it's one of the nicest ones so far, so I hope most people agree.
Visual Studio 2012/2013 UI Themes
This post won't interest the majority of people, but I'm writing it so the people who do care are able to find it via search engines. Starting with Visual Studio 2012, Microsoft switched the UI of their development environment to match the flat, blocky style of Windows 8. The new look used very few colors, making it hard to discern where one UI element started and ended. They must have received a lot of complaints, because with the release of Visual Studio 2013 they included a new Blue theme that resembles a flat version of the UI in Visual Studio 2010. Both 2012 and 2013 have UI theme editor add-on's available, but for some reason after almost 2 years there was still not a good source of third party themes.
Over the past 6 months I've privately released a few color themes, which are now publicly available on the following page:
These themes offer alternatives to the flat UI designs included by default with VS2012 and 2013. You just need to make sure you've installed the Color Theme plug-in from the Extensions Manager inside Visual Studio, then import one of the vstheme files. I am making these themes available in hopes that some other people might enjoy the themes more than the ones included with the program. At this time, I don't know of anywhere else to submit or download VS themes. (These are not to be confused with VS Text Editor Color Schemes, which there are a few sources for) If there becomes a need to organize a complete list of other themes available, I would be glad to link to other developer's themes as well.
MP3Gain Express 1.1.1
MP3Gain Express has been updated to version 1.1.1, with a critical bug fix and some new features. Some users reported file corruption caused by the previous version. This only happened when the path to the files processed (folder and file names) had specific characteristics, such as long folder names with several spaces. This is why when someone sent me a file that didn't work for them it worked fine for me because I would usually put the files on my desktop. I never ran into the problem myself because I usually kept my own music in folders with short names.
New features include automatic clipping prevention, subfolder processing, and the ability to undo which restores previously processed files to the original volume. It also fixes a problem with automatic update, so this version needs to be manually installed. From this release onward, automatic update should work correctly.
You can download the new version here. When I first released MP3Gain Express, I wasn't expecting to ever add some of these features. But it turns out that it's the most popular project I've ever worked on, so I will continue to revisit feature requests every once and awhile.