Merge pull request #38 from retro-wertz/battery_ram

vrc3 update
This commit is contained in:
Twinaphex 2018-03-25 19:28:47 +02:00 committed by GitHub
commit 9c498f60a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 16 deletions

View File

@ -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:

View File

@ -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();

View File

@ -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 );