MoonShell extend link application converted by Moonlight.
----------------------------------------------------------

Title:			NesterDS
Version:		0.3
Author:			Rich Whitehouse
Date:			2006-11-23
Homepage:		http://www.telefragged.com/thefatal/
Additional thanks:	Darren Ranalli (original author of Nester)
			Author of NesterDC (in case I used anything from that, I see
			it is in my old NesterGBA source folder)
			Authors of NDSLib and DSEmu
			Everyone else who has constributed to the wealth of knowledge
			available for DS homebrewing
-------------------------------------------------------------------------------------
Version 0.3 notes:
------------------
New this version:

-Vastly improved compatibility by fixing several mapper problems.
-Got rid of alternate-line rendering.
-Lots of speed-ups (better DTCM management, changed screen writes to occur during
 actual scanline routines, lots of other stuff).
-Converted code-base to pure C, moved to devkitARM r19b.

There were lots of changes that I've forgotten about in here, this was sitting
around on my hard drive half-finished for months. I was also working on converting
expensive PPU routines to ARM, but that was also unfinished. The included source has
some of the ARM routines that I did finish.


Version 0.2 notes:
------------------
New this version:

-Sound. Sound processing is done almost entirely on the arm7 and so comes with no
 noticeable performance penalty, and the actual sound processing is still faithful
 to the original nester core.
-General performance improvements, and decent code cleanup.
-Scanline speed hack disabled by default, makes lots of games work that were broken
 before. Said hack is still available as a toggle option.
-Reset option (X+start).
-Hardware scaling to fit output to DS screen resolution.
-All options are now listed and updated when changed on the sub screen.
-Made auto-framerate option work better.
-Other things I was too lazy to make notes of.
-50% more ninjas.

Things I would like done but am currently too lazy to do:

-Sound output is poppy when not at 44100, but defaults to 22050 because the arm7
 cannot handle the nester APU at 44100. Ideally, fix the poppiness.
-SRAM support (should be fairly trivial to implement in existing code).
-PPU has tons of code that could be hand-tweaked to provide massive speedups.
 Might also be worthwhile to render each scanline to a smaller chunk of faster
 memory and draw it to the screen buffer as the logic is performed, but this
 could be tricky to get right with vsync.
-Support for extra mappers and sound processing.
-Binaries are bloated due to bad use of global arrays tossed about. Fix.
-Exponential increase in amount of ninjas.

That will be all.


Version 0.1 notes:
------------------
This is a DS port of Nester. As you might've guessed. There are a ton of issues, and
it still bothers me that I'm storing the NES ROM over in ewram. I need to look into
that gbfs stuff apparently. There is no sound (the APU stuff is hooked up and runs
fine on the DS, it just needs the DS to actually do something with the output), but
the games I've tried run ok speed-wise. There is some "scanline"-type rendering
optimizaton in place because that's all still very slow and I haven't taken
advantage of any DS-specific hardware features to speed it up.

For compiling the actual code, I'm using DevKitARM R13, and there are some issues with
the way the default ds_arm9 linker script shoves things into memory. For whatever
reason, the default handling of non-static global variables is pretty wacked, and
if you have more than 16k or so I've found that everything goes to hell (silent
data collision, I'm guessing) and stuff just stops working, and some of the standard
C runtime functions stop working. Just general bad things. So I had to manually change
the linker script to move my .data into ewram and that seemed to solve everything.
If you want to compile this yourself, be sure to change the batch files and makefile
to use your own paths. Mine are all hardcoded because I'm a terrible person. Also,
the code itself is all very messy, and torn apart. It's based on an old GBA port of
Nester I made, and I ported it to the DS over a single weekend (so it hasn't had the
tender loving care it deserves).

To use the thing, you can use the crappy primitive ROM insertion tool included in the
archive to put in the NES ROM of your choice. Currently only one ROM at a time is
supported. If I ever stop being lazy and load ROM files from image ROM like I should
be doing, that will be changing.

Currently there aren't any emulators that really do a good job of running this. Out
of them all IDeaS seems to do the best job. It probably goes without saying, but I
have tested everything on actual DS hardware (using the wifime method) and it all
works happily.

So that's that, enjoy.
