Monday, April 4, 2011

My Favorite Nostalgia Project

I've been working for a number of years now on a NES IDE. The genesis of this project goes waaay back to junior high school. My friend Stephen and I would spend hours, noses inches away from the television screen, transfixed by Mario, then Link, then Samus, etc. Part of that trance was induced by gameplay; most of it, at least for me, was induced by a desire to know how these games worked. We'd sit with our noses to the screen and graph paper at the ready, eager to trace out what we thought was the correct outline for a particular frame of a character's movement. We even made relatively good stabs at capturing the musical melodies of some games, with a Casio keyboard and a quick pause reflex.


We didn't have access to logic analyzers, ROM readers, or any other tool that would have made our task seem less dorky than it sounds to me now, describing it some 20+ years later. I had a two-fold scheme in mind; one, to replicate the NES games on my Commodore Amiga; two, to add my own twists and ideas to the games in the process.


It went fairly well. I had a walkable Zelda map implemented in Commodore Amiga BASIC (yes, this was even before I learned C). I still have the disks and my original Amiga in my basement but haven't tried to get back into it...too dusty and probably doesn't work any more.


Needless to say, my love of 2D videogaming began with my exposure to NES.


Fast forward a few years. Include: a degree in Computer Engineering with an emphasis on digital logic design and software architecture; interest in legacy hardware/firmware emulation; availability of information on-line -- people with similar interest that actually had access to hardware analysis tools (and a NES--I never owned one!) and could document the NES design quite readily; and a desire to create a NES game of my own.


It was the desire to create a NES game of my own that has brought me to create NESICIDE. Indirectly. I started by gathering lots of tools that I found online. Some tools let you peek at existing dumped NES ROMs (naughty naughty, but I figure not so much if you're not planning on burning and selling ROMs). Other tools let you create tilesets for playfields or sprites. There's a NES BASIC interpreter (for writing NES game logic in high-level language), NES assemblers (6502), NES music file players/creators, NES emulators/debuggers, etc. Quite an endless list of tailored tools with seemingly singular purpose and little collaboration.


I started out trying to just create tilesets and static playfields. I got pretty far with this but had to jig-together quite a few different tools in a Cygwin (UNIX-on-Windows) environment on my PC. Then I could actually write a Makefile that would take lots of individually created files as inputs and generate a NES ROM binary image that I could load into a NES emulator of my choosing and try out. This was cool...I could generate my own ROMs!


But it left me unsatisfied. I wasn't happy having to switch between many different Windows-based and UNIX-based tools to get the job done. I knew there was a better way.


Then it hit me. Integrated Development Environment. I spend most of my day-job working in Integrated Development Environments of one flavor or another. I've worked in DSP IDEs, C++ IDEs, etc. What about a NES IDE. I am, after all, an engineer.


I did a quick search on-line and didn't come up with much more than a few people suggesting there be one and a few others saying they would get to it after they finished such-and-so.


Then I took it upon myself. It has been one of the most rewarding projects I have ever embarked upon under my own steam. I decided to do the framework in Microsoft Visual C++ using MFC/GDI. I tend to throw everything I can think of into projects like these because I can then use them as springboards to learn more about things like MFC/GDI, Visual C++, etc. It's even taken me beyond MFC into the cross-platformy world of Qt Creator, OpenGL, and SDL!


The NES IDE I am creating (it is, of course, nowhere near done), is intended to be the one-stop-shop for NES ROM creation.

This blog is just my way of describing what I've done and what I'm doing. I intend to complete this project, yet have no idea when.