|
|
|
@@ -1,6 +1,7 @@ |
|
|
|
#include <stddef.h> |
|
|
|
|
|
|
|
#include "nes.h" |
|
|
|
#include "port.h" |
|
|
|
|
|
|
|
|
|
|
|
void nes_init(nes* sys) { |
|
|
|
@@ -11,19 +12,54 @@ void nes_done(nes* sys) { |
|
|
|
// TODO: deallocate RAM, etc. |
|
|
|
} |
|
|
|
|
|
|
|
static int nes_vsync(nes* sys) { |
|
|
|
int status = 0; |
|
|
|
|
|
|
|
// TODO: PPU Set VBlank flag |
|
|
|
// TODO: APU Sync |
|
|
|
// TODO: APU Frame IRQ |
|
|
|
|
|
|
|
nes_Memory* mem = &sys->core.memory; |
|
|
|
if (0 == status && NULL != mem->mapper.vsync) { |
|
|
|
mem->mapper.vsync(&mem->mapper); |
|
|
|
status = nese_update_input(&sys->input); |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: NMI |
|
|
|
|
|
|
|
return status; |
|
|
|
} |
|
|
|
|
|
|
|
static int nes_hsync(nes* sys) { |
|
|
|
int status = 0; |
|
|
|
|
|
|
|
// TODO: APU sync |
|
|
|
|
|
|
|
// TODO: PPU Update H Bytes & Select Nametable |
|
|
|
// TODO: PPU draw line if visible |
|
|
|
|
|
|
|
// TODO: PPU update regs |
|
|
|
|
|
|
|
// TODO: Increment scanline |
|
|
|
sys->ppu.scanline++; |
|
|
|
if (nes_ppu_frame_end_line == sys->ppu.scanline) { |
|
|
|
sys->ppu.scanline = 0; |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: Scanline region updates |
|
|
|
// TODO: nese_vsync called in nes_vsync |
|
|
|
switch (sys->ppu.scanline) { |
|
|
|
case nes_ppu_prerender_line: |
|
|
|
// TODO: Reset PPU Status |
|
|
|
// TODO: Get Sprite 0 Hit |
|
|
|
break; |
|
|
|
|
|
|
|
return 0; |
|
|
|
case nes_ppu_postrender_line: |
|
|
|
status = nese_frame_ready(); |
|
|
|
break; |
|
|
|
|
|
|
|
case nes_ppu_vblank_line: |
|
|
|
status = nes_vsync(sys); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
return status; |
|
|
|
} |
|
|
|
|
|
|
|
int nes_loop(nes* sys) { |
|
|
|
@@ -37,9 +73,6 @@ int nes_loop(nes* sys) { |
|
|
|
dot += 3 * f6502_step(&sys->core, cpu_cycles); |
|
|
|
dot -= nes_ppu_scanline_dots; |
|
|
|
// TODO: Validate dot >= 0? |
|
|
|
|
|
|
|
// TODO: Frame IRQ |
|
|
|
|
|
|
|
nes_Memory* mem = &sys->core.memory; |
|
|
|
if (NULL != mem->mapper.hsync) { |
|
|
|
mem->mapper.hsync(&mem->mapper); |
|
|
|
|