mirror of
https://github.com/libretro/QuickNES_Core.git
synced 2025-02-21 08:50:56 +00:00
commit
9c498f60a5
@ -36,7 +36,6 @@ static bool use_overscan_h;
|
||||
|
||||
const int videoBufferWidth = Nes_Emu::image_width + 16;
|
||||
const int videoBufferHeight = Nes_Emu::image_height + 2;
|
||||
bool has_battery_ram = false; // Returns TRUE if rom loaded has bettery enabled bit
|
||||
|
||||
void retro_init(void)
|
||||
{
|
||||
@ -439,7 +438,7 @@ void *retro_get_memory_data(unsigned id)
|
||||
switch (id)
|
||||
{
|
||||
case RETRO_MEMORY_SAVE_RAM:
|
||||
if (has_battery_ram)
|
||||
if (emu->has_battery_ram())
|
||||
return emu->high_mem();
|
||||
break;
|
||||
case RETRO_MEMORY_SYSTEM_RAM:
|
||||
@ -456,7 +455,7 @@ size_t retro_get_memory_size(unsigned id)
|
||||
switch (id)
|
||||
{
|
||||
case RETRO_MEMORY_SAVE_RAM:
|
||||
if (has_battery_ram)
|
||||
if (emu->has_battery_ram())
|
||||
return Nes_Emu::high_mem_size;
|
||||
break;
|
||||
case RETRO_MEMORY_SYSTEM_RAM:
|
||||
|
@ -26,12 +26,15 @@
|
||||
struct vrc3_state_t
|
||||
{
|
||||
bool irq_enable;
|
||||
uint8_t irq_pending;
|
||||
bool irq_awk;
|
||||
uint16_t irq_latch;
|
||||
uint16_t irq_counter;
|
||||
|
||||
uint8_t irq_pending;
|
||||
uint16_t next_time;
|
||||
};
|
||||
|
||||
BOOST_STATIC_ASSERT( sizeof ( vrc3_state_t ) == 6 );
|
||||
BOOST_STATIC_ASSERT( sizeof ( vrc3_state_t ) == 10 );
|
||||
|
||||
class Mapper_VRC3 : public Nes_Mapper, vrc3_state_t {
|
||||
public:
|
||||
@ -60,11 +63,11 @@ public:
|
||||
if ( counter > 0xFFFF )
|
||||
{
|
||||
irq_pending = true;
|
||||
irq_enable = false;
|
||||
counter = 0xFFFF;
|
||||
irq_enable = irq_awk;
|
||||
irq_counter = irq_latch;
|
||||
}
|
||||
|
||||
irq_counter = counter;
|
||||
else
|
||||
irq_counter = counter;
|
||||
}
|
||||
|
||||
next_time = end_time;
|
||||
@ -91,23 +94,34 @@ public:
|
||||
|
||||
void write_irq_counter( int shift, int data )
|
||||
{
|
||||
irq_counter &= ~( 0x0F << shift );
|
||||
irq_counter |= data << shift;
|
||||
irq_latch &= ~( 0xF << shift );
|
||||
irq_latch |= data << shift;
|
||||
}
|
||||
|
||||
void write( nes_time_t time, nes_addr_t addr, int data )
|
||||
{
|
||||
data &= 0xF;
|
||||
irq_pending = false;
|
||||
|
||||
switch ( addr >> 12 )
|
||||
{
|
||||
case 0xF: set_prg_bank( 0x8000, bank_16k, data ); break;
|
||||
case 0x8: write_irq_counter( 0, data ); break;
|
||||
case 0x9: write_irq_counter( 4, data ); break;
|
||||
case 0xA: write_irq_counter( 8, data ); break;
|
||||
case 0xB: write_irq_counter( 12, data ); break;
|
||||
case 0xC: irq_enable = data & 2; break;
|
||||
case 0xF: set_prg_bank( 0x8000, bank_16k, data ); break;
|
||||
case 0xC:
|
||||
irq_pending = false;
|
||||
irq_awk = data & 1;
|
||||
irq_enable = data & 2;
|
||||
|
||||
if ( irq_enable )
|
||||
irq_counter = irq_latch;
|
||||
|
||||
break;
|
||||
case 0xD:
|
||||
irq_pending = false;
|
||||
irq_enable = irq_awk;
|
||||
break;
|
||||
}
|
||||
|
||||
irq_changed();
|
||||
|
@ -63,7 +63,6 @@ void Nes_Core::close()
|
||||
disable_rendering();
|
||||
}
|
||||
|
||||
extern bool has_battery_ram;
|
||||
const char * Nes_Core::open( Nes_Cart const* new_cart )
|
||||
{
|
||||
close();
|
||||
@ -77,7 +76,6 @@ const char * Nes_Core::open( Nes_Cart const* new_cart )
|
||||
RETURN_ERR( ppu.open_chr( new_cart->chr(), new_cart->chr_size() ) );
|
||||
|
||||
cart = new_cart;
|
||||
has_battery_ram = cart->has_battery_ram();
|
||||
memset( impl->unmapped_page, unmapped_fill, sizeof impl->unmapped_page );
|
||||
reset( true, true );
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user