From 71259457a26c1b799402be6fa3956220bcf74255 Mon Sep 17 00:00:00 2001 From: qeed Date: Tue, 23 Jun 2009 13:44:45 +0000 Subject: [PATCH] Removed nintendulator read hack as the per cycle is fixed to the point where it can display what the hack displays, although the status bar still isn't correct --- src/ppu.cpp | 57 ++++++++++++++++++++++------------------------------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/src/ppu.cpp b/src/ppu.cpp index b0345aa9..7c282c22 100644 --- a/src/ppu.cpp +++ b/src/ppu.cpp @@ -469,8 +469,7 @@ static DECLFR(A2004) { if (newppu) { - if (0) - //if ((ppur.status.sl < 241) && PPUON) + if ((ppur.status.sl < 241) && PPUON) { /* from cycles 0 to 63, the * 32 byte OAM buffer gets init @@ -492,15 +491,17 @@ static DECLFR(A2004) + (spr_read.count << 2); else spr_read.ret = spr_read.count << 2; - spr_read.found_pos[spr_read.found] = spr_read.ret; + spr_read.found_pos[spr_read.found] = + spr_read.ret; spr_read.ret = SPRAM[spr_read.ret]; if (i & 1) //odd cycle { //see if in range - if ( (ppur.status.sl - 1 - spr_read.ret) - & ~(Sprite16 ? 0xF : 0x7) ) + if ( !((ppur.status.sl - 1 - + spr_read.ret) + & ~(Sprite16 ? 0xF : 0x7)) ) { ++spr_read.found; @@ -522,7 +523,7 @@ static DECLFR(A2004) } } break; - case 1: //sprite is in range fetch the next 4 bytes + case 1: //sprite is in range fetch next 3 bytes if (i & 1) { ++spr_read.fetch; @@ -558,10 +559,10 @@ static DECLFR(A2004) | spr_read.fetch]; if (i & 1) { - if ( (ppur.status.sl - 1 - - SPRAM[(spr_read.count << 2) | - spr_read.fetch]) - & ~(Sprite16 ? 0xF : 0x7) ) + if ( !((ppur.status.sl - 1 - + SPRAM[((spr_read.count << 2) + | spr_read.fetch)]) + & ~((Sprite16) ? 0xF : 0x7)) ) { spr_read.fetch = 1; spr_read.mode = 3; @@ -573,25 +574,29 @@ static DECLFR(A2004) spr_read.count = 0; spr_read.mode = 4; } - spr_read.fetch = (spr_read.fetch + 1) & 3; + spr_read.fetch = + (spr_read.fetch + 1) & 3; } } spr_read.ret = spr_read.count; break; case 3: //9th sprite overflow detected - spr_read.ret = SPRAM[spr_read.count | spr_read.fetch]; + spr_read.ret = SPRAM[spr_read.count + | spr_read.fetch]; if (i & 1) { if (++spr_read.fetch == 4) { - spr_read.count = (spr_read.count + 1) & 63; + spr_read.count = (spr_read.count + + 1) & 63; spr_read.mode = 4; } } break; case 4: //read OAM[n][0] until hblank if (i & 1) - spr_read.count = (spr_read.count + 1) & 63; + spr_read.count = + (spr_read.count + 1) & 63; spr_read.fetch = 0; spr_read.ret = SPRAM[spr_read.count << 2]; break; @@ -612,13 +617,15 @@ static DECLFR(A2004) } else if ((i & 7) < 4) { - spr_read.ret = SPRAM[spr_read.found_pos[spr_read.ret] - | spr_read.fetch++]; + spr_read.ret = + SPRAM[spr_read.found_pos[spr_read.ret] + | spr_read.fetch++]; if (spr_read.fetch == 4) spr_read.fetch = 0; } else - spr_read.ret = SPRAM[spr_read.found_pos[spr_read.ret | 3]]; + spr_read.ret = SPRAM[spr_read.found_pos + [spr_read.ret | 3]]; } else { @@ -633,22 +640,6 @@ static DECLFR(A2004) return spr_read.ret; } } - //hack from nintendulator to get micro machines working properly until - //the per cycle thing is debugged more - //thanks! - else if ((ppur.status.sl < 241) && PPUON) - { - if (ppur.status.cycle < 64) - return 0xFF; - else if (ppur.status.cycle < 192) - return SPRAM[((ppur.status.cycle - 64) << 1) & 0xFC]; - else if (ppur.status.cycle < 256) - return (ppur.status.cycle & 1) ? SPRAM[0xFC] : SPRAM[((ppur.status.cycle - 192) << 1) & 0xFC]; - else if (ppur.status.cycle < 320) - return 0xFF; - else - return SPRAM[0]; - } else return SPRAM[PPU[3]]; }