[NES] one last cpu bug

This commit is contained in:
zeromus 2011-06-07 01:31:06 +00:00
parent 00debfe6dd
commit d0ea2f7106
3 changed files with 24 additions and 14 deletions

View File

@ -664,8 +664,8 @@ FlagT = true;// this seems wrong
PendingCycles -= 2; TotalExecutedCycles += 2;
break;
case 0x81: // STA (addr,X)
temp16 = ReadWordPageWrap(ReadMemory(PC++));
value16 = (ushort)(temp16+X);
temp8 = (byte)(ReadMemory(PC++) + X);
value16 = ReadWordPageWrap(temp8);
WriteMemory(value16, A);
PendingCycles -= 6; TotalExecutedCycles += 6;
break;

View File

@ -1,32 +1,42 @@
look for tests here: http://wiki.nesdev.com/w/index.php/Emulator_tests
blargg's MMC3:
==blargg's tests==
MMC3:
FAIL for 4 and 6. i think 4 might not fail until some invisible PPU operations are correct. neither nintendulator or fceux pass these.
blargg's ppu tests:
ppu tests:
PASS for all but power_up_palette.nes which is lame
blargg's ppu_vbl_nmi:
ppu_vbl_nmi:
FAIL for 9. But hardly anyone passes this.....
blargg's sprite hit tests:
sprite hit tests:
FAIL for 9 and 10. fceux passes 10 (oldppu) and nintendulator passes both.
boath are not going to work any time soon due to sprite pattern decoding being separate from BG pattern fetching instead of interleaved.
both are not going to work any time soon due to sprite pattern decoding being separate from BG pattern fetching instead of interleaved.
cpu_timing_test.nes
PASS
official_only.nes
PASS
all_instrs.nes
FAIL (freezes emu??). I think this requires undocumented instructions.
instr_timing.nes
PASS
cpu_interrupts.nes
PASS
instr_misc.nes
PASS
instr_timing.nes
PASS
=============
nestest.nes
PASS
official_only.nes
PASS
NEStress.nes
FAIL in several cases, but this test is not highly regarded and may be inaccurate.

View File

@ -575,8 +575,8 @@ namespace M6502
w.WriteLine(Spaces + "PC += 2;");
break;
case AddrMode.IndirectX:
w.WriteLine(Spaces + "temp16 = ReadWordPageWrap(ReadMemory(PC++));");
w.WriteLine(Spaces + dest + " = (ushort)(temp16+X);");
w.WriteLine(Spaces + "temp8 = (byte)(ReadMemory(PC++) + X);");
w.WriteLine(Spaces + dest + " = ReadWordPageWrap(temp8);");
break;
case AddrMode.IndirectY:
w.WriteLine(Spaces + "temp16 = ReadWordPageWrap(ReadMemory(PC++));");