newppu: improve timing. fix vice project doom
This commit is contained in:
parent
f6b541ce2f
commit
83f30885a2
16
src/ppu.cpp
16
src/ppu.cpp
|
@ -1808,14 +1808,16 @@ int FCEUX_PPU_Loop(int skip) {
|
|||
}
|
||||
|
||||
{
|
||||
//vblank
|
||||
PPU_status |= 0x80;
|
||||
if(VBlankON) TriggerNMI();
|
||||
|
||||
//TRICKY:
|
||||
//even though the timing doc says that every scanline is 1364 except for the first dummy scanline,
|
||||
//i need these to be 1360 in order to get marble madness and pirates! to work.
|
||||
runppu(20*1360);
|
||||
runppu(1*1360);
|
||||
PPU_status |= 0x80;
|
||||
runppu(48);
|
||||
if(VBlankON) TriggerNMI();
|
||||
runppu(19*1360-48);
|
||||
|
||||
|
||||
//no longer in vblank
|
||||
PPU_status &= ~0x80;
|
||||
|
@ -1902,7 +1904,6 @@ int FCEUX_PPU_Loop(int skip) {
|
|||
pixelcolor = PALRAM[pixel];
|
||||
|
||||
//look for a sprite to be drawn
|
||||
if(renderspritenow) {
|
||||
bool havepixel = false;
|
||||
for(int s=0;s<oamcount;s++) {
|
||||
uint8* oam = oams[renderslot][s];
|
||||
|
@ -1917,6 +1918,8 @@ int FCEUX_PPU_Loop(int skip) {
|
|||
oam[4] >>= 1;
|
||||
oam[5] >>= 1;
|
||||
|
||||
if(!renderspritenow) continue;
|
||||
|
||||
//bail out if we already have a pixel from a higher priority sprite
|
||||
if(havepixel) continue;
|
||||
|
||||
|
@ -1943,7 +1946,6 @@ int FCEUX_PPU_Loop(int skip) {
|
|||
pixelcolor = PALRAM[0x10+spixel];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//fceu rendering system requires that this be set
|
||||
//(so that it knows there is a valid pixel there?)
|
||||
|
@ -2083,7 +2085,7 @@ int FCEUX_PPU_Loop(int skip) {
|
|||
|
||||
//idle for one line
|
||||
//why 1360? see the note up top at vblank
|
||||
runppu(1360);
|
||||
runppu(1364);
|
||||
|
||||
framectr++;
|
||||
|
||||
|
|
Loading…
Reference in New Issue