Joined: 3/2/2010
Posts: 2178
Location: A little to the left of nowhere (Sweden)
I have been damn impressed with your progress each time I see the notification on IRC that you updated this topic and then me checking what you have done.
As a guy who's constantly advocates accuracy you have my biggest possible support and awe for the work you put in to this.
Keep it up!
Thanks a lot! I really like accuracy too, and I was always curious why NES emulation never really made into the realm of bsnes in terms of accuracy, despite the wealth of research done by NesDEv folks over the past few years. I think we're getting closer now though (at least with NTSC variants.) BizHawk was already really powerful, and my hope is that the accuracy improvements , combined with feos' numerous improvements to TASStudio, might bring in some runs that can be console verified. My personal goal is to have verifications of MegaMan, Punch Out, and Battletoads.
I'm making progress on APU Mixer tests. I'm using the full nonlinear mixer now, and DMC and Noise sound perfect. Triangle sounds strange but roughly matches punes, so not sure what to make of that one. Square is a mess. Audio is not my strong suite so it might take a while to track down what's going on, but either way 4 tests to go!
I've been wondering about this for a while too. Pretty impressive how SNES got to 100% accuracy before the NES, even though the latter is very well documented.
Anyway, only 4 tests to go? I'm confident you'll be able to pass them as well. ^-^
Yup it's normal. That square is sprite zero, so presumably it's used for timing, although I don't know how exactly.
I got square channel mostly worked out, although something seems off:
Right now it only works by counting up, not down as is clearly intended, so not sure what all that is about, but the test is much much closer to correct now.
Alyosha, I know of an NSF player by the name of NSFPlay which was reworked by someone called Rainwarrior. It is considered to be highly accurate, including for the mappers. Do you think that can be of some use to you?
Thanks for posting that, I looked over the code and even there they count up. Every over place I check also counts up, so I'm not really sure why the wiki says it counts down, counting up also gives correct test results, which is good enough for me!
Down to just 2 tests, scnaline and TVpassfail. I'm not really interested in the TV one since it's just a filter, maybe I'll do it eventually. Scanline is puzzling. Currently I get results similar to punes, and the test seems to rely a bit on start up state. I also don't see how FCEUX is able to pass it, I'm guessing a false positive.
EDIT: I finally fixed the Saint Seiya - Ougon Densetsu Kanketsu Hen glitch. This turned out to be a ppu $2007 write during rendering, for which you simply need to read from address the background renderer is using instead of the normal vram one. A simpler fix then I realized. I'm happy that this one is done, as it was one of the first things I tried fixing.
So it's not important then? I'd like if you could tell me more about TVpassfail (what we'd be missing out if it's not accurate). I like learning about those little things whenever possible.
Down to just 2 tests, scnaline and TVpassfail. I'm not really interested in the TV one since it's just a filter, maybe I'll do it eventually.
So it's not important then? I'd like if you could tell me more about TVpassfail (what we'd be missing out if it's not accurate). I like learning about those little things whenever possible.
Well it's important for proper appearence, but it's basically a post processing feature so it doesn't effect core emulation.
The test is looking for proper emulation of cross talk between components of the output color singal. I'm no expert so here is a picture of the comparison between 2 filters in punes, the left emulates NTSC video signal output to a real life TV, the right is just raw video output.
Bizhawk looks like the right, so at some point a filter needs to be put in to make it look like the left.
Thanks!
So at this point I think the core itself is in pretty good shape. There are still some things I would like to clean up but for now I'll take a break from the code and move on to other forms of testing.
I have taken jlun2's advice and started looking at console verified runs. SMB3 is the most obvious choice for me since it uses the DMC channel and that had a major timing change in my recent improvements. The game end glitch run still syncs as it did on 1.11.6 (you have to remove one frame at the beginning though.) Then I remembered something True had wrote from the warpless run console attempt:
True wrote:
Edit: The run went well. It desynced after 2-1, just as PRG1 did on emulator. This is both a good thing and a bad thing. I need SMB3 PRG0 or a donor to continue, but it may verify yet. I'll see what I can do.
Edit 2: I ran PRG0 SMB3 on console. It desycned as PRG1 did on console and emulator. This might (or might not?) be a helpful test in improving emulation.
I tried this on 1.11.6 and realized it desynced in a different spot, in 1-4. This was an excellent test point, so I tried the run on the current version and it instead de-synced after 2-1, just as True describes. This is defintely an improvement, as it behaves just as console does now. I think this is a good sign.
Over the next few days I'll re-test some of the longer runs, but they are already highly likely to sync since they were made on the much less accurate fceux to begin with. I'll also see if I can learn anything from other runs that failed to sync, if they desync in the same manner, this seems like a good path forward.
______________________________
Also, if anyone wants to download and test the current version, I am definitely in need of new test cases. So if you see something not quite right, or a game that doesn't work , I could really use a report about it.
Update on syncs:
SMB 2 warpless syncs. But I encountered an interesting timing issue. I originally deleted a frame at the begining of the movie, since an early vsync allows input a frame earlier. However it turns out that this thorugh the run off all the way at frame 50000. When i didn't remove the frame it synced just fine. This is strange since I would not expect this to be the case in general. It could just be that the run syncs on console through astounding luck. Anyway, that it syncs is good confirmation.
I also tried looking at some failed syncs. Looking at Punch out was first on my list. Adelikat's run syncs all the way through, even though it desyncs on console. I'll try looking into this a bit to see what's going on.
Good luck with the syncing, Alyosha.
By the way, will the updated (98% accurate) neshawk core be available on the next BizHawk release? :)
I want to do a few movies but I'd rather wait until the core gets updated.
Joined: 3/31/2010
Posts: 1466
Location: Not playing Puyo Tetris
Gamer Maiden Sonia wrote:
Good luck with the syncing, Alyosha.
By the way, will the updated (98% accurate) neshawk core be available on the next BizHawk release? :)
I want to do a few movies but I'd rather wait until the core gets updated.
It should be in the next release pending nothing is outright wrong.
When TAS does Quake 1, SDA will declare war.
The Prince doth arrive he doth please.
Joined: 4/17/2010
Posts: 11477
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
zeromus wrote:
Feos, be my guest. I don't like the way it looks, and it's a speedhack, but that part of the emulator core is not likely ever to change again, so its a fine time to speedhack it. Just don't do it for the mappers first, that's too big a job.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Try not creating a 64K delegates. Reuse a smaller number. I don't expect that will help much, but it isn't a fair comparison to fceux codebase until then.
Aww so it didn't help much after all, oh well, thanks for trying anyway feos. But I guess it's not surprising.
I do plan to return to this after 1.11.7 is released to clean things up and make performance improvements, maybe I can at least approach 1.11.6 performance levels again.
Joined: 4/17/2010
Posts: 11477
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
zeromus wrote:
Try not creating a 64K delegates. Reuse a smaller number.
Please elaborate.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Joined: 4/17/2010
Posts: 11477
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
Wouldn't I have to do all the ifs by address again to determine which one to call?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
ReadDelegates[addr] = new ReadMemoryDelegate(ReadRAMMirrors); //creates a new delegate
ReadDelegates[addr] = TheOnePreCreatedReadRAMMirrorsDelegate; //does not create a new delegate
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Console powerup, and to a lesser extent reset, is still a work in progress. For Time Lord in particular there needed to be VBlank flag set shortly after poweron or things go awry, and I believe the current implementation is at least pretty close to correct.
This is one of things I plan to look more deeply into in the next round of clean up and testing, but not until after the next release.
Thanks for posting though, I am definitely in need of more bugs / test cases to move developement along.
Joined: 4/17/2010
Posts: 11477
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
Well then, I don't think open bus is emulated.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.