|
|
|
@@ -6,6 +6,14 @@ |
|
|
|
|
|
|
|
void nes_init(nes* sys) { |
|
|
|
f6502_init(&sys->core); |
|
|
|
// TODO: Init PPU |
|
|
|
// TODO: Init APU |
|
|
|
} |
|
|
|
|
|
|
|
void nes_reset(nes* sys) { |
|
|
|
f6502_reset(&sys->core); |
|
|
|
// TODO: Reset PPU |
|
|
|
// TODO: Reset APU |
|
|
|
} |
|
|
|
|
|
|
|
void nes_done(nes* sys) { |
|
|
|
@@ -15,7 +23,11 @@ void nes_done(nes* sys) { |
|
|
|
static int nes_vsync(nes* sys) { |
|
|
|
int status = 0; |
|
|
|
|
|
|
|
// TODO: PPU Set VBlank flag |
|
|
|
sys->core.memory.ppu.status |= ppu_Status_VBlank; |
|
|
|
if (sys->core.memory.ppu.ctrl & ppu_Control_VBlank) { |
|
|
|
f6502_set_NMI(&sys->core, 1); |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: APU Sync |
|
|
|
// TODO: APU Frame IRQ |
|
|
|
|
|
|
|
@@ -25,8 +37,6 @@ static int nes_vsync(nes* sys) { |
|
|
|
status = nese_update_input(&sys->input); |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: NMI |
|
|
|
|
|
|
|
return status; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -56,6 +66,7 @@ static int nes_hsync(nes* sys) { |
|
|
|
|
|
|
|
switch (sys->ppu.scanline) { |
|
|
|
case nes_ppu_prerender_line: |
|
|
|
f6502_set_NMI(&sys->core, 0); |
|
|
|
sys->core.memory.ppu.status &= ~( ppu_Status_VBlank | |
|
|
|
ppu_Status_Hit); |
|
|
|
nes_ppu_find_hit_line(&sys->ppu, &sys->core.memory.ppu); |
|
|
|
|