Mercurial > audlegacy-plugins
view src/console/nes_cpu_io.h @ 3162:e387614b9be9
alsa-ng: Import rewritten ALSA plugin. This is still woefully incomplete, but supports basic playback.
This driver uses the "safe" ALSA API subset, including use of blocking I/O.
Right now, it is hardcoded to use "default".
Do not complain about bugs in this plugin.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Thu, 14 May 2009 21:05:11 -0500 |
parents | 986f098da058 |
children |
line wrap: on
line source
#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 ) dprintf( "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 )