Disch wrote:
This reminds me of an idea someone on ZMD had to allow tiles for full PNGs to be blitted to the screen in place of typical pixel rendering.
I must say I'm strongly opposed to both ideas. An emulator's job is to emulate the hardware. It's hard enough to do the real job properly.. even without having to worry with all this "made-up" functionality.
Four words: Super Mario All-Stars.
Besides, most emulators emulate a PlayChoice, not an NES. Emulating a real NES would involve generating an NTSC signal, filtering it (0-2.7 MHz for luma and 2.7-4.5 MHz for chroma), and doing NTSC decoding on the result.
Quote:
I mean if you're just going to bypass all the NES hardware limitations and use modern PC media... why are you even bothering with the NES at all? Why not work on PC games?
Because many of them would be making ROM hacks for proprietary NES games without having the original games' commented source code, which would be required for a proper PC port. Besides, some people develop NES games, Super NES games, or GBA games because they prefer limited-color 2D graphics to the truecolor 3D graphics that are expected of most PC games. If I want to make a 2D game, critics like to tell me to develop only for a platform that doesn't support 3D so that my work will be more appreciated.
For graphics:
Let's see... If you're working on upgrading an NES game to a more PC level, I'd suggest making tiles 16x16 pixels and 16 colors, with color 0 as transparent (as before). Then, given that each of the 8 palettes in the NES is 3 colors, and each color is 6 bits, associate these 18 bits with a 16-color palette using a hash table.
It won't easily work with U*ROM games or A*ROM games or SNROM games or any other game with VRAM unless you hash the tile data itself, and that can get slow.
For sound:
CPU$3000-$3FFF might be a good place to put emulator-specific registers. This would act "normally" (that is, as a mirror of $2000-$2007) until the program unlocks it by writing a sequence of bytes to $3000 with the "slave PPU" bit set (which no commercial games use).
But in more of the spirit of emulating hardware that could actually be implemented, this could be designed as a Famicom sound chip, which would occupy a 256-byte area outside what other mappers use. Games would need to be trained (e.g. IPS) to use the extra sounds, and it would need a separate sample bank (.wav, .ogg, etc) which could be included in a zipfile (MAME style) or in a folder or even as a new chunk type in UNIF or iNES+UNIF.
$43x0 write: Control (enable, looping)
$43x1 read: Status (finished, stopped, etc)
$43x2-3 write: Sample number to play when this sample finishes
$43x4-5 Playback rate
$43x6 Left channel volume
$43x7 Right channel volume
$43x8-$43xF Reserved