Repository navigation
Expand file tree
/
Copy pathtodo.txt
More file actions
145 lines (107 loc) · 6.83 KB
/
Copy pathtodo.txt
File metadata and controls
145 lines (107 loc) · 6.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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.
- 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?), and fix the fact
that frames are 1/3 of a cpu cycle too short.
- 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 whatever is wrong with frame interrupts not happening at the right time or
at all that breaks a lot of games in the B's. (I think it's when the program is
spinning waiting for the APU frame IRQ during the frame, because if nothing tries
to write to the APU currently, it won't "catch up" to where the interrupt is
until the end of the frame.
e: That's not actually it... most of the broken games are waiting on the DMC
interrupt, which does actually fire but not always at the correct time.
e2: It's definitely the DMC interrupt... even when I force a sync with the APU
before every CPU cycle it's still not happening at the right time.
e3: Now fixed DMC interrupt and a CPU bug, some still broken.
- Find out if the StarsSE demo ever worked on real hardware or not.
- Check scanline counters interrupt in exactly the right spot
- 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
Fix remaining MMC3 derivatives to use more accurate scan line counters
(should be able to remove NotifyScanline entirely including the NSF player)
Occasional jittery line in VRC scanline ctr. games
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?
- 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?)