Greetings, dear humans. Where do I even begin? How about at the beginning…
It all started around Christmas of 1987, when my mother purchased our first Nintendo Entertainment System for my older brother and me to share. He and I had been begging for it for a while, ever since we saw Super Mario Bros. on display at a kiosk in our local Wal*Mart. We already had an Atari 2600, and all 4 members of my family had been playing it extensively for years. Some of my earliest memories are of my father playing (without resetting) Dig Dug or Pac-Man for hours on end. Many of the games for the 2600 had held my attention long enough to get quite good at — in fact, I beat the infamous E.T. game for the 2600 around that time. But I could tell that the NES was going to be what I would later call a quantum leap in video game experience. It was impressive how many rich and varied games were already available for the NES by late 1987; especially The Legend of Zelda. I had been fascinated by the game Adventure for the Atari 2600, and could probably tell that Zelda was a glorious extension of the same ideas. That game’s packaging made what already seemed like a treasure literally look like one.
But Zelda was too expensive for my parents to afford on top of the base console cost, so instead, my brother and I started off with 2 games — Super Mario Bros., of course, and Capcom’s original Commando. Commando was buggy as Hell and poorly designed, but I loved it anyway. I think I beat it fairly quickly, and was hungry for more games. I can’t remember which one came next, but it was probably Metroid or Kid Icarus. At some point, my brother and I began renting NES games from our local video tape rental store to supplement the games we actually owned. It was always a challenge to try to beat a game over the weekend, while we were away from school and could focus on it together.
While this was going on, I was also experimenting on a quite different system — my TRS-80 Color Computer Model II. Despite being only ~6 years old, I had been programming in BASIC and Logo for it for about a year. I was already keenly interested in programming my own video games, and had been doing things like loading a game from cassette tape, and then changing small sections of the source code before running the game to try to understand how it worked based on what broke or changed in the game. I suppose you could call it my earliest attempts at “ROM” hacking. Eventually, I began taking advantage of the fact that my mother was a book worm and frequented our local public library quite often. I would go to the Dewey Decimal System 00X area of the library, and grab as many books on computer programming as I could — especially those focused on game design. Soon I began writing my own video games from scratch based on those game design principles, complete with the best graphics and sound I could muster, which were understandably quite poor.
This was a very fulfilling activity, and it came to define a large part of my childhood. But it bothered me that I couldn’t create games that were anywhere near as good as the ones I had on my NES. A few years later, my parents purchased my first PC — an IBM XT Turbo Clone @ 10MHz with a CGA graphics card, monochrome green CRT monitor, and a single 720KiB 3.5″ floppy drive; there was no hard drive. I began programming for that system in earnest, learning GW-BASIC and MS-DOS simultaneously while my game design improved dramatically. However, I still couldn’t make games that were comparable to even the worst NES games. I began to suspect that there was something fundamentally different about the NES and “normal” computers, but I couldn’t tell what it was.
Was it the fact that NES games were always on cartridges? Was it because the graphics card in the PC wasn’t as good? Perhaps there wasn’t enough RAM in the PC?
…
Years went by, along with whole series of video games I programmed for my own enjoyment and to impress my family and friends. At the same time, my esteem for the NES and its library only increased, as I played and beat Mega Man 2/3, Rygar, Bionic Commando, Metal Gear… and before I knew it, I was a teenager getting involved in the earliest days of the NES(and SNES) emulation scene that revolved around the EFnet IRC network. I was too intimidated at the time to learn 6502 Assembly, so I contributed in the one way I knew how — graphics design. My friend Chris Hickman and I founded the Archaic Ruins website, with him primarily responsible for the HTML and me primarily responsible for the site’s graphics. I also made logos for Zophar’s Domain, snes9x, and ZSNES, among other projects.
Around this time, I started to learn some of the finer details of the NES’s hardware design, and finally began to understand what made the NES so special and capable of playing such wonderful games, despite ostensibly having very limited computing power.
In a nutshell, it is because the NES, unlike “normal” computers, has all the components chained together in a continuous, tightly timed pipeline that puts the graphics to the screen in a very coordinated fashion. It has only 2KiB of RAM on the actual motherboard, which turns out to be plenty, because the cartridges supply the graphics and code directly to the system whenever the system calls upon the data — it doesn’t need to be stored in RAM in the first place, unlike on a PC. The graphics chip (the “Picture Processing Unit”, or PPU) is designed to operate not on a framebuffer like the PC, but on grids of tiles called “nametables” — an arrangement that simultaneously allows a type of primitive data compression, while also letting the very slow 6502 CPU conduct just enough updates every frame so that more graphics are always available as the camera moves across a level. I had assumed that the reason the NES had such great games, given such limited hardware as was available in the 1980s, was because of the ingenious Assembly programmers in Japan that carefully stitched everything together. And that made it all the more intimidating to learn Assembly, so I never really tried…despite learning 10 other programming languages throughout the 1990s, 2000s, and 2010s.
It would be another ~20 years before I finally had the courage to learn Assembly (first x86, and then 6502), and begin to entertain the possibility of finally creating my own NES game. During those intervening 20 years, I pursued a PhD in Mathematics, studied Computer Science in my spare time (with the help of Dominic Muller, whom I will get to in a minute), and became a successful Software Engineer in industry. At the end of that journey, I found myself to be in possession of enough skills to start my own video game company, and enough money to get it off the ground.
Now, I had been churning on an idea in the back of my head for a Science Fiction story since around 2011, but I hadn’t come up with it with the intention of turning it into an NES game. It took place in the far future, and involved a genetically engineered sentient species, destruction of knowledge of its own origin, a brave young member of that species discovering that there was something wrong with his world, exploring caves and unlocking secrets of the ancient past… but it was just a story. In fact, a complicated enough one that it seemed like the modern gaming PC would be a much better platform than the NES, if it could even be turned into a video game at all.
But when Dominic(Nick), who by this time was my best friend, showed me his first program running on the NES (in an emulator, technically), I got extremely excited. I suddenly knew that not only did I have the skill level to develop commercial quality games, but that I had a willing partner who could complement my skill set, and make it possible to create something special for the NES, the system from which I had drawn so much joy over the course of my life.
So, I decided to form a company with Nick, and pursue the development of an original NES game as our first project. But as I explained to Nick very early on, the ideas I had in mind for this game were just too elaborate to be contained within the kinds of ROM sizes that NES games traditionally had. Why is that? Well, there is a somewhat complex history to that, which I will go over in my next post. =)
-Jared
My Assembly professor’s attitude was basically “No one likes it but you gotta learn it anyway for the degree.” I kinda wish I’d learned it from a gamer nerd now; I had no idea that’s what the NES used.
My deepest apologies for taking so long to approve of and respond to this comment. Unfortunately, I was new to Word Press when I set up this blog, so I didn’t know that the default settings required me to approve of each comment before it goes live. Oops!
Technically speaking, it isn’t required to use Assembly in order to program an NES game. But practically, it is…if you need anything high performance. There are a few NES games written in C, but they don’t push the limits of the system like we’re doing. On top of the decreased performance, compiled 6502 C code tends to be much longer in ROM than assembled 6502 Assembly code, so that’s probably another major reason why it wasn’t typically used in the NES’s heyday.
We are going to use C for a few specific parts of the code that don’t need to be very high performance that *also* require more abstract thinking, because it’s so much less tedious than thinking in Assembly. But the vast majority of the game will be coded in 6502 Assembly, and our chosen assembler is ca65.
-Jared
Simply Amazing! I just stumbled upon this site and the info that you’re making a game! So exciting dude and ambitious! That mapper idea sounds wild! I was wondering if you guys were thinking about possibly putting the game on a cart so that it could be played on a physical system? I know that’s probably an unbelievable undertaking with what your mapper idea is and then actually somehow being able to engineer a mapper board/chip (forgive me if my wording is wrong). Whatever it cost, I’d buy it in a heartbeat! Besides this page, is there any other place that I can go to, to check on progress? I’d love to read more of your blogs and follow! I’m super excited about this, so thank you for taking on such an extraordinary undertaking! It sounds like it’s going to be legendary! Can’t wait to see what lies ahead
I’m very sorry for taking so long to reply; it’s only because I was new to Word Press when I set up this blog, and I didn’t know that the defaults required comment approval.
At this point, I’ve probably already answered your questions elsewhere (such as our public Discord server), but I’ll go ahead and answer here as well in case anyone stumbles across this and might be curious.
This game is absolutely going to be released on physical NES cartridges, and will play correctly on any 100% compliant NTSC NES. This would include the frontloader (NES-001) and toploader (NES-101) systems at a minimum, and *probably* the Famicom (HVC-001), Twin Famicom (AN-505, AN-500R, AN-505-BK, or AN-505-RD), and AV Famicom (HVC-101). There’s a strong possibility that it will work just fine in a RetroUSB AVS or Analogue Nt Mini as well, but it might not work correctly in an original Analogue Nt because of the incorrect palette that comes stock on that system.
As it turns out, the circuit complexity of MXM-0 (the name of the mapper) in its current iteration is less than that of MMC5’s, so this would’ve been completely plausible as an ASIC back in 1989-1990 when Nintendo released MMC5. That might strike you as incredible, but it’s because we’re really not doing anything on a fundamentally crazier level than MMC5. It’s just that we’re able and willing to feed it more ROM than Nintendo was back then, so our feature set is informed by that fact. This game, and the mapper, are what flow from that simple shift.
I’m going to be creating a special splash page for somethingnerdy.com (that isn’t just this blog) as well as a Former Dawn page that has basic info on the game very soon. You can keep tabs on it by looking at those pages from time to time. I also encourage paying attention to our Discord server and Twitter feed for important updates.
I appreciate the kind words. Looking forward to sharing more details as we have them to share. =)
-Jared
Good day! Would you mind if I share your blog with my myspace group?
There’s a lot of people that I think would really appreciate your content.
Please let me know. Thank you
Hello Jared and co,
This is an amazing project, and I look forward to keeping in the loop with updates as they come.
I think it’s great that you’re planning on releasing the mapper code after the game release. While there’s still quite a high skill barrier to programming for this console, I think this will open up many possibilities for future development.
I really hope you’ll be giving this a physical release in Famicom carts as well.
Cheers