The Affinity Y0SHi/Riff Interview on qNES
Alan Dykes - Nov. 24, 1996
Please state your name and affliliates.
I'm part of Damaged Cybernetics, DAC, MTDS, and OldSkoOL
You are currently writing an emulator correct?
Yup, that's correct
What is it called, and what system does it emulate?
We call it qNES (quickNES) -- it emulates the standard 6502 CPU used by the Nintendo Entertainment System and a few other gaming consoles.
What all exactly is involved in programming an emulator?
Well, it takes a lot of time -- time is the biggest restraint in itself... The most difficult part though, probably has to be tolerance. It all starts from scratch, as everyone knows; since qNES is in pure assembly, it takes a lot of intelligence and understanding how the CPU itself works -- both the x86 and the 6502. Even today, where the 6502 is *YEARS* old, there still are some small aspects of the chip which are... shall I say, incognito. Primarily with decimal mode. But, I won't get into that unless desired :-)
Sounds like a task. How far are you currently in programming qNES?
Well, Riff and I have accomplished the first task in writing an emulator: Getting the actual opcodes up and working. :-) I had to write a 6000+ line assembly program in 6502 just to test the validity of our 6502 emulation... And it passed with flying colours, but not without bugs in the very beginning! I am just now beginning to work on the register emulation (for those who don't know, the registers are what games on the NES use to control the NES in certain ways) qNES also has one small (very small, but may play a role in the future; nothing to boast about) advantage over other emulators -- we support decimal mode, which no other emulators seem to support. In the process of register emulation, I will be implementing graphics and the like. Our first target game is Mario Brothers, so... :-)
You keep talking about decimal mode, could you explain in a nutshell what it is?
Sure, i'd be happy to. Basically, the 6502 has two "modes" for subtraction and addition; binary mode (the standard) and decimal mode. To make it short and sweet, in binary mode, if you add 2 to 8, you get 10 (or 0x0A in hex). But, in decimal mode, adding 2 + 8 results in 0x10 hex, which is actually 15... Decimal mode, which is rarely used, can be used to handle score and other interesting things in games. Personally i've never seen it used, but as part of 6502 emulation, we have to support it :-) Riff's the genius here; he's the guy who implemented it :-)
About how long will it be before you have a working demo to show?
Riff and I get asked this question almost constantly... All we can really say is, it'll be out when it's out... Riff is a college student, so he's usually at classes the like - tests and what not :-). Myself, I work a full-time job, so qNES is something I work on in my spare time, or (sometimes, if i'm a sneaky bastard) at work. So, we're trying our best to do what we can in such small amounts of time. :-)
Well, that's about all. Do you have anything you would like to add?
Yeah, I need to address the issue of qNES and VeNES... There's some seriously wacked-out rumours spreading in the emulation scene about qNES & VeNES... Some of the rumours are that my roommate, Mr. Snazz, and I are at war, therefore we are writing our own emulators... Another rumour i've heard went to the extreme to say Mr. Snazz and I had lost our friendship and gone our own ways... Both rumours are untrue, as well as others, such as that qNES was started due to me hating Mr. Snazz and the like... qNES was created originally by me, solely because Mr. Snazz and I have coding discrepencies... I don't agree with the way he goes about doing things in VeNES...In summary, Mr. Snazz and I are still roommates, and still friends. We're just two different style of coders, that's all :-) As it's been stated, VeNES is in Pascal with tidbits of assembly, and qNES is in pure 386 assembly.
The other issue i'd like to address is just as important :-) I'd like to thank everyone for the help they've given Riff and I -- especially Alex Krasivsky (Landy). He's a lifesaver.
Oh!
And one final issue I almost forgot:
qNES is not really a competition NES emulator -- Riff and I converse with Landy, and TaNdRuM (author of DNESE) whenever they are around, just to discuss NES stuff or anything we want. We're all in it this together -- to have fun and learn.
Thanks for the interview Y0SHi, and we at Affinity wish you the best of luck!
Thanks; I wish you the best of luck too :-)
Please state your name and affiliations.
Mike Perry. Programmer at large (no affiliations)
You are working on a NES emu with Y0SHi of DC correct?
Correct.
Y0SHi said that you do A LOT of programming, what do you program for this EMU?
So far I have programmed the core emulation routines for the 6502 processor that the NES uses.
Sounds like of tough job, since you are programming the core, what does it take to program an EMU (ie: what kind of knowledge, and what goes into it?)
Ideally one should have a strong background knowlege of computer architecture and computer system organization. Also knowing how video displays work helps a bit. I'm just starting to learn more about that aspect myself. The most important information you need to have is information on the hardware of the system itself. Either that or you need to be able to figure it out yourself.
Sounds like a tough job! About how far is qNES in your opinion?
No opinions necessary. So far qNES consists of a simple .NES image loader and a fetch-decode-execute loop which grabs opcode bytes and executes the proper code for emulating the instructions. Currently all 151 of the 6502 opcodes are implemented and working. Unfortunately decimal mode has not been added yet. This will be a simple addition though.
Sounds like you are well on your way! About what is your estimate of when qNES will be finished?
I cannot provide anything more than upper and lower bounds. In fact, I can't really give a lower bound. I can't picture qNES taking longer than 6 months to finish :) Something playable should be ready a lot earlier than that. I don't know what the plans are for prerelease versions. That is pretty much up to Yoshi.Realize also that qNES will probably be enhanced well beyond that range also.
Sounds like you and Y0SHi are hard at work. We wish you luck with your EMU here at AFT! Do you have anything you would like to add?
Sure. I'll be hard at work on an emulator for the arcade game Juno First (Konami, 1983) soon. If anyone can provide schematics, memory maps, screenshots, or WHATEVER, then I would be very grateful. Plus if someone would buy me an NES I'd like that too :) Ok, so I missed out on the real thing.
Thanks for your time in telling us a bit about your emulator!
No problem.