What's new

An Incredulous Undertaking

BGNG

New member
Well, I've been piddling around with the Nintendo DS for the past week or so and I must say: I'm thoroughly impressed. I can hardly wait until enough information comes through in regards to its CPU Memory Map and the introduction of flash cards so I can begin developing for it.

So... Knowing all the things that I know... I have decided to undertake quite a humongous project that many will rebuke me for even considering, and many will give me their utmost support to the best of their ability (aka cheer me on)

I propose a series of emulators written for the Nintendo DS. Something similar to the PocketNES for Game Boy Advance which allows the user to make a GBA ROM out of NES ROMs and play the on a GBA. Except this particular project will incorporate a number of different emulators; including those for NES, SNES and the Game Boy series.

These are the systems I am confident I can create emulators for to use on the DS:
NES
Game Boy
SNES
Super Game Boy
Game Boy Color
Game Boy Advance (see "Wireless VS", "GBA Slot 2" and "Cheat Support" below)

And these are the features I intend to have in the system:

Debugger
Each emulator listed above will have a debugger complete with breakpointing, disassembler, sprite memory map and perhaps a few other things. These exist solely for the purpose of having them, as debugging one's programs with a PDA actually seems like a cool idea.

Wireless VS
The emulators will incorporate the NDS's wireless capabilities to play the games in multiplayer mode wirelessly. For the NES and SNES, this feature will cause all (probably just two) of the communicating DS units to respond simultaneously, where each unit corresponds to a controller plugged into the console.

For the Game Boy series, including Game Boy Advance, the wireless communication will form a substitue for the link cable. Even though the Game Boy Advance is supported directly by the DS hardware, it only supports single-player mode. With said emulator, all those 4-player games for Game Boy Advance are now wireless, including newer games like F-Zero Climax (Japan only).

GBA Slot 2
In addition to housing a menu of all ROMs loaded into the emulator suite, this project will also support loading the ROM out of a GBA card inserted into slot 2 of the Nintendo DS, and emulate it from there. Why bother? Because it will provide use of the wireless multiplayer feature that the Nintendo DS does not readily support.

Save Backups
All other projects of the like in the past allow you to make a ROM out of other ROMs, but if you want to change the list of games built into it, you lose ALL your save data. And if you have NES RPGs like Final Fantasy or Earthbound, you might want to be able to back these up. I plan for this particular project to be able to connect to a host server via the Nintendo DS's 802.11 support and upload individual (or all) saves from the DS card to a local computer or internet site. It will also be able to transfer the saves back into the DS card to resume play as-is.

Upgradable Emulation Cores
I will design the binary ROM file to have seperate cores availible for download and upgrade, in order to configure the DS emulator to one's heart's content. After all, if you have only NES ROMs in the thing, why bother taking up space with Game Boy and SNES emulator cores that won't even be used?

The cores will be provided as seperate files and can be upgraded independantly in order to construct a new ROM for the DS flash card or emlator that will be used to play it. Information about the current version of any given core can be seen in the main menu of the emulator project on the DS; including options supported (like iNES mappers or SNES expansion modules).

Cheat Support
These emulators will also come complete with the ability to import cheats, such as Game Genie, Action Replay, GameShark, etc. They will also make use of a trainer to be able to search for codes (the prize feature of all GameShark devices) as well as convert between different formats.

That means that for the GBA emulator, one can use this project as a substitute GameShark for the GBA; one that does not require special GameShark hardware. Since the Slot 2 feature will save memory to the game card instead of the emulator's battery, it is a full-fledged cheat device in itself.
__________

Like I said: some people will call me the stupidest person who ever lived, and other people will extol me and sing my praises throughout the day.

I have done my research. If I did not believe I am able to do this, I would not have brought it up. I cannot currently code for the DS, as there is not yet enough information available for me to do so, nor have I found any flash cards available for it. However, when such information is found, I will begin the programming for the DS in this project.

Until then, I will be writing emulators for each of the different consoles I mentioned so that I will have a good understanding of how to operate them and incorporate them into the Nintendo DS.
__________

As for this thread... Give me your feedback. Tell me I'm an idiot. Tell me I'm your new hero. Do whatever. I believe it can be done, so I will do it. This ought to be quite some news on the DS scene in the future.
 

aprentice

Moderator
Thats some incredibly high goals there, I don't think you will pull it off, unless you are porting someone elses emus, or plan to be coding for the next 10 years :p
 

Allnatural

New member
Moderator
Nothing like boasting before having presentable code. If you're like the others (and there have been many others), the project will go nowhere and you'll lose interest long after everyone else stopped caring.
 
OP
BGNG

BGNG

New member
Woah. Three hours and I've already got two "You're out of your mind"s.

Only 10 years, aprentice? You really think I can do it that fast? (-:

And Allnatural, it's okay if you don't believe I can do it. I don't blame you. But taking the time to make a post to say "Shut up. You're incapable." like that is one of those universal internet etiquite taboo things.

But I understand where you're coming from. What's to say I'm not just like all the rest? Who am I to say I'm going to make a big, bad Nintendo DS program without even being able to do so?

You may have missed it or misinterperated it, but I made mention in my above post that I, until I am able to program for DS, will create said emulators so I can merely port them later. I started a Game Boy Advance emulator a while back in regards to a GBA programming project I was working on. And in light of this particular project, I have set aside the GBA emulator for later and am currently working on an NES emulator. (I have a whole opcode implemented! Woo!..... What? I just started it.)

But as not to disappoint you... Each of these emulators will be (and NES is currently being) coded for Windows and I will post updates when they are available. As early as next week, I may very well have a partially-functional NES emulator. The 6502 CPU is easy to implement, and the PPU needs only follow a strict set of regulations.

But I ask that you take my word for it that I know what I'm doing. You will not be disappointed.
 

Toasty

Sony battery
I'm new to emulation and I probably have goals greater than what I can (or at least what people think I can) accomplish, but I've always thought about things from the standpoint: "If it would be cool when it's done, do it! Or at least give it your best effort so no one can say you never tried." So, power to ya! Maybe you can do it; maybe you can't, but you'll never know unless you try. :) Either nothing will happen, and you'll have a little more coding experience under your belt, or you'll end up with a good line of emus for the DS - IMO, a win/win. Call me an ambitious newbie, but that's the way I look at stuff like that. Good luck!
 
OP
BGNG

BGNG

New member
Toasty: Optimism at its finest. Now THAT is what I call constructive feedback. Thank you.

bcrew1375: You understand the obvious. I appreciate that. That's more than I can say about most people.

Allnatural: When I went to bed last night, I had 44 of the 150 NES opcodes implemented, and all of them thoroughly hand-tested and function as they should. Ta da! A fraction of what I have proposed. Remember what happened to TJ Rappel in regards to Metroid Prime... "Can I have barbecue sauce with that?"

EDIT:
At the moment, I have 73 of the opcodes implemented. That's nearly half. And before I go onto the next half, I will revamp my current system. It will not only better optimize the performance of the existing code, but it will also make porting to Assembly very easy.
 
Last edited:

aprentice

Moderator
BGNG said:
At the moment, I have 73 of the opcodes implemented. That's nearly half. And before I go onto the next half, I will revamp my current system. It will not only better optimize the performance of the existing code, but it will also make porting to Assembly very easy.

The cpu is not even a fraction of the nes, its like less than 10% of the total emulator, and thats the easiest part of the nes too :p And for your info, the nes cpu only has 60 opcodes in total, and about 10 or 11 addressing modes :p
The nes is more than just a cpu, it is comprised of interrupts, io ports, complex video system (especially the scrolling), strict timing, mappers, and thats just the start :p

Now you say constructive feedback is when people tell you to go ahead with your plans, well this is not true, constructive feedback is also when you give someone good advice even if its telling them their plans are not realistic and I can't blame most of the people here for doubting you, epecially since you have not provided any code, and your name isn't exactly well known. Now, if your serious, you would've had something to show for before you started bragging :p

But anyway, this is my 2 cents, good luck on your project!

edit: Oh, and if you decide to flame me, i'd just like to remind you i've been around long enough to see many people make big claims like that and never deliver :p
 
Last edited:
OP
BGNG

BGNG

New member
Flaming's a universal internet taboo thing too. Tongued smileys don't cover it up.

Fret not; your attitude does not bother me. The ONLY thing I hold against you is that you opted to doubt me without justification. Yeah, I know there's a lot of "great ideas" that were failed from the start out there, especially in regards to emulators. I think it's pathetic as heck. But as I said before: if I was not completely confident I could pull this off, I wouldn't have even mentioned it in the first place.

I've done my homework. I've read through YOSHi's NES Tech document about a zillion times. I've looked up the iNES specification and 6502 Assembly instruction set. I can assure you that the CPU functionality (which incorporates interrupts, communication registers and mappers) is no less than a third of the necessary coding for an NES emulator.

When the animators at Dream Works said "Shrek will be 10 times as complex as Ants," did anyone say to them "I doubt it. You don't even have any videos to show us"? Probably not. It was part of their planning and was a goal they wanted to achieve. In the same manner, it is not fair to say "You can't do that. You don't have any code to show us" if the code doesn't even exist yet.

You want proof, but you are depriving me the opportunity to prove myself. Be patient, and in a few days (probably on Monday) I will release the up-to-date build and source code of my NES project, which will sport a fully-functional disassembler and complete functionality for execution of all opcodes (although execution will not be enabled because no output will be implemented). You CAN wait until Monday, can't you?

And some clarification: The NES has 150 opcodes, many of which are overloaded specifications of the same command. For example, the ADC statement has 8 prototypes, each for a different addressing mode. That's why you can say both ADC #$50 and ADC $8030, X
 

Allnatural

New member
Moderator
If anyone is wondering, aprentice has a macro programmed on his keyboard. Every press of the Enter key inserts a smilie. :p:p:p


;)
 

Slougi

New member
BGNG said:
When the animators at Dream Works said "Shrek will be 10 times as complex as Ants," did anyone say to them "I doubt it. You don't even have any videos to show us"? Probably not. It was part of their planning and was a goal they wanted to achieve. In the same manner, it is not fair to say "You can't do that. You don't have any code to show us" if the code doesn't even exist yet.

The difference is that Dreamworks _did_ have prior work to show, _and_ are well known. We have had our share of people who post their grand plans on this board, spit out rubbish for a while, and then disappear. Not everyone is like that, and I am not saying you are; and in any case, if you are dedicated enough to complete a project of this magnitude a few flames in the beginning will probably not drive you off.

So in conclusion: good luck, happy coding and a happy new year!
 

aprentice

Moderator
BGNG said:
Flaming's a universal internet taboo thing too. Tongued smileys don't cover it up.

I've done my homework. I've read through YOSHi's NES Tech document about a zillion times. I've looked up the iNES specification and 6502 Assembly instruction set. I can assure you that the CPU functionality (which incorporates interrupts, communication registers and mappers) is no less than a third of the necessary coding for an NES emulator.

If you've done your homework, then why are you still saying mappers are a part of the cpu? And I'm not flaming you, I'm just stating an opinion, which you whole heartily refuse to hear.

Btw slouigi, you are correct. That and I use the "aprentice" punctuation character set, which replaces periods, commas, and semi-colins with smilies :p
 
OP
BGNG

BGNG

New member
Take iNES mapper 1 (Nintendo MMC1) for example. It allows for ROM-VROM swapping and It supports SRAM. Both of which are strictly CPU-based concepts dispite the fact that they have nothing to do with the instruction set. On a technical level, they modify the CPU memory bus. But the way I'm writing this emulator, it's part of the CPU programming

But as not to clutter up this thread with... Apparently nothing... I shall consult you in [friendly] PMs, aprentice.

And thank you for the wishing of good luck, Slouigi. (Even though having a reputation or having productions on-hand did not contribute to Dream Works' level of experience)
 
Last edited:

cooliscool

Nintendo Zealot
I've got faith in you BGNG.. you've already shown some excellent work with your F-Zero X hacking.

I believe 100% that you can at "least" pull off a fraction of what you're proposing. ;)
 

-Shadow-

Banned
Wow, you'll have quite a lot work to do! You'll have to understand the emulated console's and also the DS' code structure completely! But i think you'll make something interesting in the next years, your fast understatement of the NES and your previous FZX-Hacking action is very promising ;)
 

zenogais

New member
I dunno I'm a bit skeptical at the moment. F-Zero X hacking is a long ways away from actually writing an emulator. Of course good luck to you, but I'm very doubtful much of this will come to fruition.
 
OP
BGNG

BGNG

New member
I understand, Shadow. In your position, I probably would be too. The only thing different is that I actually know what I'm doing. And unfortunately, I cannot prove that until I have enough code ready to show you. So this project will be in an eerie state of limbo until Monday, when everyone here will be able to inspect my code and see if they believe in me or not.

Shadow: "fast understatement"? I can't make heads or tails as to what that's supposed to mean.

cooliscool: I need not say anything to you. We've a PM conversation going. (But thanks regardless!)

EDIT:
To whom it may concern:

A vast amount of the misunderstanding in this thread probably comes from a lack of knowledge or personal difficulties regarding the matter.

For what it's worth, I learned Assembly in one day. They say that's impossible, but I just looked at a few lines of code, picked up an instruction set, learned a few tricks and POOF: I was a pro.

The only reason it took me so long to look it up is because everyone said it would be difficult. If you (whoever you are) think that Assembly is difficult, then there is not much one can do to bridge the gap of understanding between us, for I find it the number one easiest programming language to use despite its low fundemental functionality.

I have an incredible liking for the language, which is why I am completely confident I can create the emulators I speak of. Looking at technical documents for different videogame systems, I can see quite clearly how the program and hardware interact. It's like a second nature to my logic. It may simply be a gift of mine.

(Commence "What kind of a speech was that!?" comments)
 
Last edited:

-Shadow-

Banned
BGNG said:
Shadow: "fast understatement"? I can't make heads or tails as to what that's supposed to mean.

You got already a half of the NES' opcodes, that's what i meant with "fast"
 
OP
BGNG

BGNG

New member
Oh... Then what did you mean by "understatement"? (I'm only partially dunderhead. I think it's on my dad's side)

Also, I just finished re-writing my system to work with procedure callbacks and I have implemented ALL of the NES opcodes. I am now working on the disassembler output. The code will be ready for public review as scheduled.
 

Top