Beispiel #1
0
void PPU::render_scanline() {
  if(line >= 1 && line < (!overscan() ? 225 : 240)) {
    if(framecounter) return;
    render_line_oam_rto();
    render_line();
  }
}
Beispiel #2
0
void bPPU::enter() {
  loop:
  //H =    0 (initialize)
  scanline();
  if(ivcounter() == 0) frame();
  add_clocks(10);

  //H =   10 (OAM address reset)
  if(ivcounter() == (!overscan() ? 225 : 240)) {
    if(regs.display_disabled == false) {
      regs.oam_addr = regs.oam_baseaddr << 1;
      regs.oam_firstsprite = (regs.oam_priority == false) ? 0 : (regs.oam_addr >> 2) & 127;
    }
  }
Beispiel #3
0
void PPU::scanline() {
  display.width = !hires() ? 256 : 512;
  display.height = !overscan() ? 225 : 240;
  if(vcounter() == 0) frame();
  if(vcounter() == display.height && regs.display_disable == false) oam.address_reset();
}