o cleanup
This commit is contained in:
210
tools/bsnes/snes/snes.cpp
Executable file
210
tools/bsnes/snes/snes.cpp
Executable file
@@ -0,0 +1,210 @@
|
||||
#include <../base.hpp>
|
||||
#include <../chip/chip.hpp>
|
||||
#include <../cart/cart.hpp>
|
||||
#define SNES_CPP
|
||||
|
||||
SNES snes;
|
||||
BUSCORE bus;
|
||||
CPUCORE cpu;
|
||||
SMPCORE smp;
|
||||
DSPCORE dsp;
|
||||
PPUCORE ppu;
|
||||
|
||||
BSXBase bsxbase;
|
||||
BSXCart bsxcart;
|
||||
BSXFlash bsxflash;
|
||||
SRTC srtc;
|
||||
SDD1 sdd1;
|
||||
SPC7110 spc7110;
|
||||
Cx4 cx4;
|
||||
DSP1 dsp1;
|
||||
DSP2 dsp2;
|
||||
DSP3 dsp3;
|
||||
DSP4 dsp4;
|
||||
OBC1 obc1;
|
||||
ST010 st010;
|
||||
|
||||
#include "scheduler/scheduler.cpp"
|
||||
#include "tracer/tracer.cpp"
|
||||
|
||||
#include "video/video.cpp"
|
||||
#include "audio/audio.cpp"
|
||||
#include "input/input.cpp"
|
||||
|
||||
void SNES::run() {
|
||||
}
|
||||
|
||||
void SNES::runtoframe() {
|
||||
scheduler.enter();
|
||||
}
|
||||
|
||||
void SNES::init() {
|
||||
bsxbase.init();
|
||||
bsxcart.init();
|
||||
bsxflash.init();
|
||||
srtc.init();
|
||||
sdd1.init();
|
||||
spc7110.init();
|
||||
cx4.init();
|
||||
dsp1.init();
|
||||
dsp2.init();
|
||||
dsp3.init();
|
||||
dsp4.init();
|
||||
obc1.init();
|
||||
st010.init();
|
||||
|
||||
video.init();
|
||||
audio.init();
|
||||
input.init();
|
||||
snesinterface.init();
|
||||
}
|
||||
|
||||
void SNES::term() {
|
||||
snesinterface.term();
|
||||
}
|
||||
|
||||
void SNES::power() {
|
||||
snes_region = max(0, min(2, snes.config.region));
|
||||
snes_expansion = max(0, min(1, snes.config.expansion_port));
|
||||
|
||||
if(snes_region == Autodetect) {
|
||||
snes_region = (cartridge.region() == Cartridge::NTSC ? NTSC : PAL);
|
||||
}
|
||||
|
||||
scheduler.init();
|
||||
|
||||
ppu.PPUcounter::reset();
|
||||
cpu.power();
|
||||
smp.power();
|
||||
dsp.power();
|
||||
ppu.power();
|
||||
bus.power();
|
||||
|
||||
if(expansion() == ExpansionBSX) bsxbase.power();
|
||||
if(cartridge.mode() == Cartridge::ModeBsx) bsxcart.power();
|
||||
if(cartridge.bsx_flash_loaded()) bsxflash.power();
|
||||
|
||||
if(cartridge.has_srtc()) srtc.power();
|
||||
if(cartridge.has_sdd1()) sdd1.power();
|
||||
if(cartridge.has_spc7110()) spc7110.power();
|
||||
if(cartridge.has_cx4()) cx4.power();
|
||||
if(cartridge.has_dsp1()) dsp1.power();
|
||||
if(cartridge.has_dsp2()) dsp2.power();
|
||||
if(cartridge.has_dsp3()) dsp3.power();
|
||||
if(cartridge.has_dsp4()) dsp4.power();
|
||||
if(cartridge.has_obc1()) obc1.power();
|
||||
if(cartridge.has_st010()) st010.power();
|
||||
|
||||
for(unsigned i = 0x2100; i <= 0x213f; i++) memory::mmio.map(i, ppu);
|
||||
for(unsigned i = 0x2140; i <= 0x217f; i++) memory::mmio.map(i, cpu);
|
||||
for(unsigned i = 0x2180; i <= 0x2183; i++) memory::mmio.map(i, cpu);
|
||||
for(unsigned i = 0x4016; i <= 0x4017; i++) memory::mmio.map(i, cpu);
|
||||
for(unsigned i = 0x4200; i <= 0x421f; i++) memory::mmio.map(i, cpu);
|
||||
for(unsigned i = 0x4300; i <= 0x437f; i++) memory::mmio.map(i, cpu);
|
||||
|
||||
if(expansion() == ExpansionBSX) bsxbase.enable();
|
||||
if(cartridge.mode() == Cartridge::ModeBsx) bsxcart.enable();
|
||||
if(cartridge.bsx_flash_loaded()) bsxflash.enable();
|
||||
|
||||
if(cartridge.has_srtc()) srtc.enable();
|
||||
if(cartridge.has_sdd1()) sdd1.enable();
|
||||
if(cartridge.has_spc7110()) spc7110.enable();
|
||||
if(cartridge.has_cx4()) cx4.enable();
|
||||
if(cartridge.has_dsp1()) dsp1.enable();
|
||||
if(cartridge.has_dsp2()) dsp2.enable();
|
||||
if(cartridge.has_dsp3()) dsp3.enable();
|
||||
if(cartridge.has_dsp4()) dsp4.enable();
|
||||
if(cartridge.has_obc1()) obc1.enable();
|
||||
if(cartridge.has_st010()) st010.enable();
|
||||
|
||||
input.port_set_device(0, snes.config.controller_port1);
|
||||
input.port_set_device(1, snes.config.controller_port2);
|
||||
input.update();
|
||||
video.update();
|
||||
}
|
||||
|
||||
void SNES::reset() {
|
||||
scheduler.init();
|
||||
|
||||
ppu.PPUcounter::reset();
|
||||
cpu.reset();
|
||||
smp.reset();
|
||||
dsp.reset();
|
||||
ppu.reset();
|
||||
bus.reset();
|
||||
|
||||
if(expansion() == ExpansionBSX) bsxbase.reset();
|
||||
if(cartridge.mode() == Cartridge::ModeBsx) bsxcart.reset();
|
||||
if(cartridge.bsx_flash_loaded()) bsxflash.reset();
|
||||
|
||||
if(cartridge.has_srtc()) srtc.reset();
|
||||
if(cartridge.has_sdd1()) sdd1.reset();
|
||||
if(cartridge.has_spc7110()) spc7110.reset();
|
||||
if(cartridge.has_cx4()) cx4.reset();
|
||||
if(cartridge.has_dsp1()) dsp1.reset();
|
||||
if(cartridge.has_dsp2()) dsp2.reset();
|
||||
if(cartridge.has_dsp3()) dsp3.reset();
|
||||
if(cartridge.has_dsp4()) dsp4.reset();
|
||||
if(cartridge.has_obc1()) obc1.reset();
|
||||
if(cartridge.has_st010()) st010.reset();
|
||||
|
||||
input.port_set_device(0, snes.config.controller_port1);
|
||||
input.port_set_device(1, snes.config.controller_port2);
|
||||
input.update();
|
||||
video.update();
|
||||
}
|
||||
|
||||
void SNES::scanline() {
|
||||
video.scanline();
|
||||
|
||||
if(ppu.vcounter() == 241) {
|
||||
input.update();
|
||||
video.update();
|
||||
scheduler.exit();
|
||||
}
|
||||
}
|
||||
|
||||
void SNES::frame() {
|
||||
}
|
||||
|
||||
SNES::Region SNES::region() const {
|
||||
return (SNES::Region)snes_region;
|
||||
}
|
||||
|
||||
SNES::ExpansionPortDevice SNES::expansion() const {
|
||||
return (SNES::ExpansionPortDevice)snes_expansion;
|
||||
}
|
||||
|
||||
SNES::SNES() : snes_region(NTSC), snes_expansion(ExpansionNone) {
|
||||
config.controller_port1 = Input::DeviceJoypad;
|
||||
config.controller_port2 = Input::DeviceJoypad;
|
||||
config.expansion_port = ExpansionBSX;
|
||||
config.region = Autodetect;
|
||||
|
||||
config.file.autodetect_type = false;
|
||||
config.file.bypass_patch_crc32 = false;
|
||||
|
||||
config.path.base = "";
|
||||
config.path.user = "";
|
||||
config.path.current = "";
|
||||
config.path.rom = "";
|
||||
config.path.save = "";
|
||||
config.path.patch = "";
|
||||
config.path.cheat = "";
|
||||
config.path.data = "";
|
||||
config.path.bsx = "";
|
||||
config.path.st = "";
|
||||
|
||||
config.cpu.version = 2;
|
||||
config.cpu.ntsc_clock_rate = 21477272;
|
||||
config.cpu.pal_clock_rate = 21281370;
|
||||
config.cpu.alu_mul_delay = 2;
|
||||
config.cpu.alu_div_delay = 2;
|
||||
config.cpu.wram_init_value = 0x55;
|
||||
|
||||
config.smp.ntsc_clock_rate = 32041 * 768;
|
||||
config.smp.pal_clock_rate = 32041 * 768;
|
||||
|
||||
config.ppu1.version = 1;
|
||||
config.ppu2.version = 3;
|
||||
}
|
||||
Reference in New Issue
Block a user