mirror of
https://github.com/DrBeef/Raze.git
synced 2024-12-15 23:21:21 +00:00
718112a8fe
Currently none of these is being used, but eventually they will, once more code gets ported over. So it's better to have them right away and avoid editing the project file too much, only to revert that later.
83 lines
1.7 KiB
C
83 lines
1.7 KiB
C
|
|
#include "Nsf_Emu.h"
|
|
|
|
#if !NSF_EMU_APU_ONLY
|
|
#include "Nes_Namco_Apu.h"
|
|
#endif
|
|
|
|
#include "blargg_source.h"
|
|
|
|
int Nsf_Emu::cpu_read( nes_addr_t addr )
|
|
{
|
|
int result;
|
|
|
|
result = cpu::low_mem [addr & 0x7FF];
|
|
if ( !(addr & 0xE000) )
|
|
goto exit;
|
|
|
|
result = *cpu::get_code( addr );
|
|
if ( addr > 0x7FFF )
|
|
goto exit;
|
|
|
|
result = sram [addr & (sizeof sram - 1)];
|
|
if ( addr > 0x5FFF )
|
|
goto exit;
|
|
|
|
if ( addr == Nes_Apu::status_addr )
|
|
return apu.read_status( cpu::time() );
|
|
|
|
#if !NSF_EMU_APU_ONLY
|
|
if ( addr == Nes_Namco_Apu::data_reg_addr && namco )
|
|
return namco->read_data();
|
|
#endif
|
|
|
|
result = addr >> 8; // simulate open bus
|
|
|
|
if ( addr != 0x2002 )
|
|
debug_printf( "Read unmapped $%.4X\n", (unsigned) addr );
|
|
|
|
exit:
|
|
return result;
|
|
}
|
|
|
|
void Nsf_Emu::cpu_write( nes_addr_t addr, int data )
|
|
{
|
|
{
|
|
nes_addr_t offset = addr ^ sram_addr;
|
|
if ( offset < sizeof sram )
|
|
{
|
|
sram [offset] = data;
|
|
return;
|
|
}
|
|
}
|
|
{
|
|
int temp = addr & 0x7FF;
|
|
if ( !(addr & 0xE000) )
|
|
{
|
|
cpu::low_mem [temp] = data;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( unsigned (addr - Nes_Apu::start_addr) <= Nes_Apu::end_addr - Nes_Apu::start_addr )
|
|
{
|
|
GME_APU_HOOK( this, addr - Nes_Apu::start_addr, data );
|
|
apu.write_register( cpu::time(), addr, data );
|
|
return;
|
|
}
|
|
|
|
unsigned bank = addr - bank_select_addr;
|
|
if ( bank < bank_count )
|
|
{
|
|
blargg_long offset = rom.mask_addr( data * (blargg_long) bank_size );
|
|
if ( offset >= rom.size() )
|
|
set_warning( "Invalid bank" );
|
|
cpu::map_code( (bank + 8) * bank_size, bank_size, rom.at_addr( offset ) );
|
|
return;
|
|
}
|
|
|
|
cpu_write_misc( addr, data );
|
|
}
|
|
|
|
#define CPU_READ( cpu, addr, time ) STATIC_CAST(Nsf_Emu&,*cpu).cpu_read( addr )
|
|
#define CPU_WRITE( cpu, addr, data, time ) STATIC_CAST(Nsf_Emu&,*cpu).cpu_write( addr, data )
|