Todo List For HalfNES:

 - Add FDS support

 - Add rest of the expansion sound for MMC5 (PCM out is not working right)

 - Work on audio filtering (Yes it's better now, but could still use some work.)
 Need a FIR or IIR filter of some sort but also have to decimate by a non
 integer amount WITHOUT upsampling, because 2 million samples a second is too hard
 to process as is. Not sure how to write one of those.
 Best solution is probably FFT based somehow.
 Real NES uses very simple RC lowpass and highpass filters, that's mostly
 what I do now but the amt of filtering is sample rate dependent/other problems etc.

-If run on my laptop while it's having the sound problem, the audio buffer write
 call blocks forever and nothing will run. Is there anything I can do about that?
 actually it looks like the bug is not in my own code
 See https://community.oracle.com/thread/2381571

 - Fix occasional single scanline errors, random horizontal
 glitches in Slalom, Rad Racer, 3D World Runner etc.
 I did move to a pixel based renderer but the CPU is still only cycle accurate
 and plenty of other things are still only approximate. 

 - Fix the frame limiter so that it won't underrun the audio buffer every time
 there's a lag spike - also deal with audio popping in fullscreen mode (I think
 this is caused by the framerate being fixed by the buffer waiting at 60.0 so
 not enough audio samples are generated but I'm not sure)
 This is dealt with by increasing the audio buffer size for now.

 - Deal better with non 60 hz display refresh rates (Every recent Intel laptop is set to
50 hz on battery by default.)

 - Add more graphics filters (HQ2x), develop an OpenGL rendering path, rewrite the
 NTSC shader in shader language for speed. Also try incl. scanlines and CRT
 phosphor decay effects.

 - Add Savestates, someday (once class structure is pretty much settled).

 - Also stuff with controller wiring and interrupts, and if there's a Zapper in use
 the controller ports need to have access to the display as it's being drawn,
 and all of this needs to support catch up operation in some way.

 - Some games freeze when reset with Ctrl+R (missing mapper reset function)
 Action 52 needed this. What else?

 - Use better synchronization with less method calls (options?)

 - Add a different key listener for some of the menu options (like Pause and Fast 
 Forward) and also the toggles so they don't toggle on and off really quickly
 when I hold the key down. (why did you think fast forward was control - space?)
 Also fix inability to pause/single step in fullscreen nowadays

 - Fix DMC interrupt timing for Bee 52, Big Nose Freaks Out

 - Find out if the original ver StarsSE demo ever really worked on real hardware
Maybe make a version of Chris Covell's Stars SE demo that uses the
sweep workaround to change the high bits of the pitch during the arpeggios
to get rid of the unwanted phasing effects?

 - Change all scanline counters to go off PPU clocks so i can deprecate NotifyScanline

 - Make the NTSC filter run on the GPU!

Things I can't do without adding a CRC database:

 - implement the WRAM disable bit for Mapper 4 (three different implementations!)
 (fixed for now: Low G Man is special cased to have no PRG RAM on the board,
 since it never did anyway. Everything else is probably fine since the main reason
 for WRAM write protection, which is the CPU overwriting SRAM when jumping off
 somewhere strange due to a bad connection on the cartridge slot, can't happen
 on the emulator.)

 - Same for Mapper 1. Making SOROM work was hard enough.


 - Sorting out the mappers that are really multiple mappers in one number
 (codemasters one especially!)

 - Need to add iNES 2.0 submapper support

 - UNIF

Things I probably can't fix at all:

 - DMC samples shouldn't always steal 4 cycles (depending on the current instruction
 being executed), and should only take 2 cycles during sprite DMA. (The belief
 used to be that it would read wrong data during sprite DMA, but it doesn't.)
 This is what's breaking The Guardian Legend when there are too many enemies on
 screen.
 (THINK I fixed the broken bit there when changing things to pass DMC test.)


Broken Games To Fix:
 - Laser Invasion (white screen on scrolling sometimes. otherwise looks better than it was)
 - Metal Slader Glory
 - Batman:ROTJ title screen (FME - 7 now has accurate scanline counter but this remains)
 - Caltron 6 in 1 (Very slow text scroll in Cosmo Cop)
this has to do with reading $2002 in a loop and the NMI.

 - Need to make the CPU cycle accurate to pass all of blargg's timing tests
 (as opposed to doing all reads and writes the opcode needs on the same cycle.)
 I have a hack in place for Battletoads, but it's not good long term.
 Need a coroutine library that doesn't break my workflow, or function templates

Codemasters games broken by DMC IRQ:
 - Bee 52
 - MIG - 29 Soviet Fighter (needs better dmc timing!)
 - Fire Hawk (maybe this is freezing on Sprite 0 now.)
 - Big Nose Freaks Out (glitchy in 035, completely broken in 036, back to glitchy in 049.)


 - Bandit Kings of Ancient China doesn't redraw map properly (broken ExGrafix?)
no it needs to map RAM to 0x8000, there's a note in the mapper docs
but I still can't get it working correctly.
 - Just Breed freezes during intro (fine if you skip it)
 - Metal Slader Glory is all iknds of messed up.
 - Huge Insect depends on obscure behavior of modifying OAM address during rendering

 - Region autodetect is not going to work on most iNES 1.0 ROMs unless I have a database

 - Until tonight I hadn't heard most of Strobe - Zberia or Strobe - Return to the Blip
They break in Nestopia the way they do in my emu; in Nintendulator they are MUCH longer.
Well that's because they have bad headers. And now I've catered to the brokenness.

 - Emulate obscure sprite overflow behaviors

 - Madara sound test doesn't work unless I get ingame and reset (forgotten initialization?)

 - At least 3 Codemasters games depend on $2004 reads tracking internal sprite eval state
 (Micro Machines, Dizzy the Adventurer, Bee 52, big nose freaks out)

Big nose also uses DPCM IRQs and some godawful mess of sprite 0 hit and writing to 2007 while rendering.

need to rewrite for Huge Insect anyway.

Possibility of massive bugs when PC is zero (but how would you execute off the
end of memory in any practical NES program?)