Interview: Paul Robson, programmer of the NESA emulator
The first Famicom/NES emulators began to appear around 1996. By most accounts, PasoFamicom, developed by Nobuaki Andou, was the first. Unfortunately, it wasn’t user-friendly for most Westerners – the documentation and GUI were in Japanese, it required a licensing fee, and its split ROM format was difficult for non-technical types to wrap their head around. As a result, PasoFami was rampantly pirated, so much so that Andou cut off non-Japanese support and even started injecting malicious, HD-formatting code to punish illegitimate users.
A number of alternatives began to pop up. iNES, which is still in active development, emerged as the shareware frontrunner thanks to its reliability, ease of use, and the introduction of the .NES file format. Meanwhile, British programmer Paul Robson released his MS-DOS emulator NESA (Nintendo Entertainment System in Assembler), which gained its own following. NESA’s key differentiator was price (free) and licensing (open source). By 1997, NESA was discontinued in favor of TNES for Windows/DOS, which was more robust, feature-rich, and offered better mapper support. However, Paul’s NESA source would live on in a number of subsequent emulators.
Paul was kind enough to answer a few questions for me via email regarding the development of NESA and the early NES emulation scene. Since many sites documenting emulation in the 1990s are full of broken links and dead ends, it is important that scholars and historians make efforts to preserve the work of independent programmers like Paul. Without their early work on the behaviors and quirks of the NES, today’s emulators would not be as accurate as they are.
My questions are bolded, with Paul’s answers below. I’ve added a few links where necessary, since many non-European readers may not be familiar with the machines Paul references.
When did you begin work on NESA?
Just before the first release, early September 1996. I code very fast. :)
Was the NES the first console you tried to emulate?
No, I did the Chip-8 first, itself an emulator of a virtual machine, then the Atari VCS. Which is jumping in the deep end as that requires incredible precision that you just don’t need on a NES.:)
Why specifically did you choose the NES versus another console, especially since the NES doesn’t seem to have the same massive appeal in Europe as it does in the U.S. or Japan?
Annoyance. The other NES emulators were pay things. Even though the NES wasn’t the big thing it was elsewhere it was reasonably well known. I wrote the 2600/VCS emulator because none of the others would run on my hardware. There are lot of reasons people do it.
At the time, were you aware of any other NES emulators?
Marat Fayzullin’s iNes and Pasofami. At that time Marat wanted $35 for iNes/Windows, I think, and Pasofami cost money too.
Did you use existing emulators as a model or point of comparison for what features you wanted to include?
More as a technical reference. The documentation was pretty sparse (Marat wrote it) so you could see what would work by writing bits of code to run on the emulators. Only iNes, I never used Pasofami at all.
The furthest back I’ve seen any references to NES emulators are PasoFami in 1996. Can you recall any other NES emulators or active development before 1996?
No. No idea when the others started. :) It wouldn’t go back that far because unless you were very rich you had 486SX-20s and the like which were on the limits of speed for emulators. You have to have some raw power in the CPU (unless you dynamically recompile which is challenging and required lots of memory) to emulate the opcodes. Marat created the NES format so I suspect he was first.
What technical information or documentation did you rely upon? How much was known about how the NES functioned at the time?
Marat’s document and various 6502 documents. The information was vague – enough to start but incomplete. I discovered how Mike Tyson’s Punch Out worked, for example, more or less through educated guesswork. You could figure things out by running games and finding out why they didn’t work. I sent some amendments and clarifications to Marat for his document.
At the time, what was the most difficult hardware component to emulate properly?
The Graphics Processor, though that wasn’t that hard – it’s just a tile and sprite system. Emulators at that time didn’t do scanline tricks much. It was really just a case of writing the bits and plugging them together. The 6502 emulator came from the VCS emulator so I knew it more or less worked properly. The VCS is much more difficult because of the lunatic coding tricks.
The hard bit was getting the video rendered quickly enough. Most emus at that time had a frame skip so that instead of doing 50/60 frames a second they could do 10 – it was the only way to get the code running fast enough.
What programming language/environment did you use to code NESA?
A shareware assembler called A26; hence all 16 bit code and a text editor called QEdit.
NESA used the iNES format, correct? Did you consider other alternatives? Why iNES?
Most of the ROMs were already in that format and it was documented properly. It was the only sensible choice because of the different mappers – you couldn’t just have a binary dump of the ROMs, you had to have some form of system for saying how it was wired up. There’s umpteen “mappers” for the NES.
Did NESA include any features that we now see in modern emulators (like save states, palette editors, debugging, etc.)?
Only very basically. Debugging was just dumping the CPU status to the console. SaveStates are easy if you design it properly. The GUI was limited, obviously. :) No DirectX stuff or similar, you had to scale it yourself. I remember the Gameboy emulators hacked the VGA card to get a resolution similar to that of the Gameboy.
When NESticle was released, how did it affect the development of NESA/TNES? Did it inspire any new features? Were you surprised that NESticle caught on so quickly?
No. It’s the nature of things. People produce better emulators as time goes on and people abandon ship to the latest and greatest. My VCS code lives on in Z26, even though there’s virtually none of my code left. NESA was dead by then. The only emulators still used of mine as is are the obscure things, because there is no demand for them except amongst a few strange people. Nobody is going to want to play any RCA Studio 2 game. Even my version of Space Invaders is limited. :)
What sort of community was involved in NES emulation development at the time? In general, was it competitive or friendly?
Always friendly amongst the developers. Didn’t know anyone who wasn’t willing to answer questions. Most of the discussions were done on newsgroups comp.emulators.misc and comp.emulators.game-consoles; they’re probably still there on dejanews. I helped other emulator authors; many emulator users fed back about which ROMs didn’t work or provided other help. There were a few idiots like there are and people who just wanted something for nothing.
Why are you interested in emulation?
I like doing something new and challenging.
I got far more pleasure from resurrecting the Jupiter ACE or the Atari Lynx than producing a better SNES emulator (I had a 90% working one that I just couldn’t be bothered to complete).
It is a bit like digital archiving; machines which died and vanished live on in emulator form. I’m now into doing emulators on hardware – I have a “Mark 8” emulator (8008 based machine using Video TTY) working on an Arduino running BASIC. The main problem is the keyboard – lots of switches and doing USB and/or PS2 interfacing and video generation on the same chip has challenging timing issues.
Some things are also interesting technical puzzles (if you have a full hardware description it is just handle turning). I got the Emerson Arcadia emulator working with a pile of ROMs, a few screenshots, a 3 sheet description of the 2650 CPU and a bloke in Australia with a full 2650 book who answered questions as long as there were only a few. Everything else – sound, graphics I got from intelligent guesswork and looking at the ROM code to see what it did. It is a bit like a huge jigsaw puzzle. Now all the documents for the 2560 CPU and 2637 Graphics chip are online, this makes it easy to do and modern PCs and Graphics cards can cope with the speed requirements easily.
The RCA Studio 2 was easier to emulate but getting the ROM out involved wiring an Atmel MCU board up to the machine, disabling the 1802 and getting the MCU to pretend it was a 1802.
You get a kick when something boots up with “CBM COMPUTER. 7167 BYTES FREE” or whatever as well.
Why do you think emulation is important?
As above, it preserves stuff that would otherwise have gone for good; once you announce “I have a Nascom 1 emulator” all kinds of people pop up offering documentation or software. The current owner of the Jupiter Ace got in touch but was quite happy about it. Psion were happy for their ROMs (for the Organiser) to be distributed. Most people are chuffed that their work is worth the effort. Clive Sinclair did describe my MK14 emulator as “Mad” which is a good character reference.
Overall, do you think emulators have been good or bad for videogames?
For consoles, probably bad up to the point where the hardware became un-emulatable. Some emulators were running when the target machine and software were still being sold, leading to piracy issues. Despite all the claims about piracy by pirates it does harm producers albeit not as much as they claim. If you can get stacks of games for free you are less likely to buy them. Modern consoles (XBox360, PS3) are horribly difficult to emulate and have enormous “ROM images” (DVD images etc.)
Computers have the preservation thing; once the Atari St/Amiga vanishes, those sort of computers are more or less gone for good, unfortunately.
Right now, my list of released or in-development emulators in 1996 includes LandyNES, VeNES, qNES, dNESe, iNES, NESA, and PasoFami. Anything I’m missing?
No idea, sorry. A lot of Emulators didn’t really exist or never got finished. People would announce that they were writing an emulator and they clearly had no real idea of how to do it and how challenging it was – even for something simple it is not something for a rookie; they’d write a few lines of C or Pascal and give up quickly.