bsnes/higan/sfc/chip/event/event.cpp

71 lines
1.0 KiB
C++
Raw Normal View History

Update to v091r05 release. [No prior releases were posted to the WIP thread. -Ed.] byuu says: Super Famicom mapping system has been reworked as discussed with the mask= changes. offset becomes base, mode is gone. Also added support for comma-separated fields in the address fields, to reduce the number of map lines needed. <?xml version="1.0" encoding="UTF-8"?> <cartridge region="NTSC"> <superfx revision="2"> <rom name="program.rom" size="0x200000"/> <ram name="save.rwm" size="0x8000"/> <map id="io" address="00-3f,80-bf:3000-32ff"/> <map id="rom" address="00-3f:8000-ffff" mask="0x8000"/> <map id="rom" address="40-5f:0000-ffff"/> <map id="ram" address="00-3f,80-bf:6000-7fff" size="0x2000"/> <map id="ram" address="70-71:0000-ffff"/> </superfx> </cartridge> Or in BML: cartridge region=NTSC superfx revision=2 rom name=program.rom size=0x200000 ram name=save.rwm size=0x8000 map id=io address=00-3f,80-bf:3000-32ff map id=rom address=00-3f:8000-ffff mask=0x8000 map id=rom address=40-5f:0000-ffff map id=ram address=00-3f,80-bf:6000-7fff size=0x2000 map id=ram address=70-71:0000-ffff As a result of the changes, old mappings will no longer work. The above XML example will run Super Mario World 2: Yoshi's Island. Otherwise, you'll have to write your own. All that's left now is to work some sort of database mapping system in, so I can start dumping carts en masse. The NES changes that FitzRoy asked for are mostly in as well. Also, part of the reason I haven't released a WIP ... but fuck it, I'm not going to wait forever to post a new WIP. I've added a skeleton driver to emulate Campus Challenge '92 and Powerfest '94. There's no actual emulation, except for the stuff I can glean from looking at the pictures of the board. It has a DSP-1 (so SR/DR registers), four ROMs that map in and out, RAM, etc. I've also added preliminary mapping to upload high scores to a website, but obviously I need the ROMs first.
2012-10-09 08:25:32 +00:00
#include <sfc/sfc.hpp>
#define EVENT_CPP
namespace SuperFamicom {
Event event;
void Event::Enter() { event.enter(); }
void Event::enter() {
while(true) {
if(scheduler.sync == Scheduler::SynchronizeMode::All) {
scheduler.exit(Scheduler::ExitReason::SynchronizeEvent);
}
}
step(1);
synchronize_cpu();
}
void Event::init() {
}
void Event::load() {
}
void Event::unload() {
rom[0].reset();
rom[1].reset();
rom[2].reset();
rom[3].reset();
ram.reset();
}
void Event::power() {
}
void Event::reset() {
create(Event::Enter, 1);
}
//DSP-1
uint8 Event::sr(unsigned addr) {
return 0;
}
//DSP-1
void Event::dr(unsigned addr, uint8 data) {
}
//is there bank-switching?
uint8 Event::rom_read(unsigned addr) {
return cpu.regs.mdr;
}
//is there read-protection?
uint8 Event::ram_read(unsigned addr) {
return cpu.regs.mdr;
}
//is there write-protection?
void Event::ram_write(unsigned addr, uint8 data) {
}
void Event::serialize(serializer &s) {
Thread::serialize(s);
s.array(ram.data(), ram.size());
}
}