void Nes_Core::close() { cart = NULL; delete mapper; mapper = NULL; ppu.close_chr(); disable_rendering(); }
void Nes_Core::load_state( Nes_State_ const& in ) { require( cart ); disable_rendering(); error_count = 0; if ( in.nes_valid ) nes = in.nes; // always use frame count ppu.burst_phase = 0; // avoids shimmer when seeking to same time over and over nes.frame_count = in.nes.frame_count; if ( (frame_count_t) nes.frame_count == invalid_frame_count ) nes.frame_count = 0; if ( in.cpu_valid ) cpu::r = *in.cpu; if ( in.joypad_valid ) joypad = *in.joypad; if ( in.apu_valid ) { impl->apu.load_state( *in.apu ); // prevent apu from running extra at beginning of frame impl->apu.end_frame( -(int) nes.timestamp / ppu_overclock ); } else { impl->apu.reset(); } ppu.load_state( in ); if ( in.ram_valid ) memcpy( cpu::low_mem, in.ram, in.ram_size ); sram_present = false; if ( in.sram_size ) { sram_present = true; memcpy( impl->sram, in.sram, min( (int) in.sram_size, (int) sizeof impl->sram ) ); enable_sram( true ); // mapper can override (read-only, unmapped, etc.) } if ( in.mapper_valid ) // restore last since it might reconfigure things mapper->load_state( *in.mapper ); }
void Nes_Core::close() { // check that nothing modified unmapped page #ifndef NDEBUG //if ( cart && mem_differs( impl->unmapped_page, unmapped_fill, sizeof impl->unmapped_page ) ) // dprintf( "Unmapped code page was written to\n" ); #endif cart = NULL; delete mapper; mapper = NULL; ppu.close_chr(); disable_rendering(); }