PPU: Fixed NMI scanline in 239-line mode
This commit is contained in:
parent
cbd08a3767
commit
672e4422f7
1 changed files with 7 additions and 6 deletions
13
Core/Ppu.cpp
13
Core/Ppu.cpp
|
@ -72,9 +72,7 @@ void Ppu::Exec()
|
||||||
|
|
||||||
_rangeOver = false;
|
_rangeOver = false;
|
||||||
_timeOver = false;
|
_timeOver = false;
|
||||||
if(_scanline < (_overscanMode ? 240 : 224)) {
|
if(_scanline == (_overscanMode ? 240 : 225)) {
|
||||||
RenderScanline();
|
|
||||||
} else if(_scanline == (_overscanMode ? 241 : 225)) {
|
|
||||||
//Reset OAM address at the start of vblank?
|
//Reset OAM address at the start of vblank?
|
||||||
if(!_forcedVblank) {
|
if(!_forcedVblank) {
|
||||||
_internalOamAddress = (_oamRamAddress << 1);
|
_internalOamAddress = (_oamRamAddress << 1);
|
||||||
|
@ -101,7 +99,6 @@ void Ppu::Exec()
|
||||||
_mosaicStartScanline = 0;
|
_mosaicStartScanline = 0;
|
||||||
}
|
}
|
||||||
_console->GetDmaController()->InitHdmaChannels();
|
_console->GetDmaController()->InitHdmaChannels();
|
||||||
RenderScanline();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_regs->IsVerticalIrqEnabled() && !_regs->IsHorizontalIrqEnabled() && _scanline == _regs->GetVerticalTimer()) {
|
if(_regs->IsVerticalIrqEnabled() && !_regs->IsHorizontalIrqEnabled() && _scanline == _regs->GetVerticalTimer()) {
|
||||||
|
@ -117,7 +114,10 @@ void Ppu::Exec()
|
||||||
|
|
||||||
_cycle++;
|
_cycle++;
|
||||||
|
|
||||||
if(_cycle == 278 && _scanline < 225) {
|
if(_cycle == 278 && _scanline <= (_overscanMode ? 239 : 224)) {
|
||||||
|
if(_scanline > 0) {
|
||||||
|
RenderScanline();
|
||||||
|
}
|
||||||
_console->GetDmaController()->ProcessHdmaChannels();
|
_console->GetDmaController()->ProcessHdmaChannels();
|
||||||
} else if(_cycle == 134) {
|
} else if(_cycle == 134) {
|
||||||
//TODO Approximation
|
//TODO Approximation
|
||||||
|
@ -949,7 +949,8 @@ void Ppu::ApplyBrightness()
|
||||||
|
|
||||||
void Ppu::ApplyHiResMode()
|
void Ppu::ApplyHiResMode()
|
||||||
{
|
{
|
||||||
uint32_t screenY = _screenInterlace ? ((_frameCount & 0x01) ? ((_scanline << 1) + 1) : (_scanline << 1)) : _scanline;
|
uint16_t scanline = _scanline - 1;
|
||||||
|
uint32_t screenY = _screenInterlace ? ((_frameCount & 0x01) ? ((scanline << 1) + 1) : (scanline << 1)) : scanline;
|
||||||
|
|
||||||
if(_hiResMode || _bgMode == 5 || _bgMode == 6) {
|
if(_hiResMode || _bgMode == 5 || _bgMode == 6) {
|
||||||
ApplyBrightness<false>();
|
ApplyBrightness<false>();
|
||||||
|
|
Loading…
Add table
Reference in a new issue