mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-04-02 10:42:14 -04:00
byuu says: Changelog: - added higan/emulator/platform.hpp (moved out Emulator::Platform from emulator/interface.hpp) - moved gmake build paramter to nall/GNUmakefile; both higan and icarus use it now - added build=profile mode - MD: added the region select I/O register - MD: started to add region selection support internally (still no external select or PAL support) - PCE: added cycle stealing when reading/writing to the VDC or VCE; and when using ST# instructions - PCE: cleaned up PSG to match the behavior of Mednafen (doesn't improve sound at all ;_;) - note: need to remove loadWaveSample, loadWavePeriod - HuC6280: ADC/SBC decimal mode consumes an extra cycle; does not set V flag - HuC6280: block transfer instructions were taking one cycle too many - icarus: added code to strip out PC Engine ROM headers - hiro: added options support to BrowserDialog The last one sure ended in failure. The plan was to put a region dropdown directly onto hiro::BrowserDialog, and I had all the code for it working. But I forgot one important detail: the system loads cartridges AFTER powering on, so even though I could technically change the system region post-boot, I'd rather not do so. So that means we have to know what region we want before we even select a game. Shit.
54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
#pragma once
|
|
|
|
//license: GPLv3
|
|
//started: 2012-03-19
|
|
|
|
#include <emulator/emulator.hpp>
|
|
#include <emulator/thread.hpp>
|
|
#include <emulator/scheduler.hpp>
|
|
|
|
#include <processor/arm/arm.hpp>
|
|
|
|
namespace GameBoyAdvance {
|
|
#define platform Emulator::platform
|
|
namespace File = Emulator::File;
|
|
using Scheduler = Emulator::Scheduler;
|
|
extern Scheduler scheduler;
|
|
|
|
enum : uint { //mode flags for bus read, write:
|
|
Nonsequential = 1, //N cycle
|
|
Sequential = 2, //S cycle
|
|
Prefetch = 4, //instruction fetch (eligible for prefetch)
|
|
Byte = 8, //8-bit access
|
|
Half = 16, //16-bit access
|
|
Word = 32, //32-bit access
|
|
Load = 64, //load operation
|
|
Store = 128, //store operation
|
|
Signed = 256, //sign extended
|
|
};
|
|
|
|
struct Thread : Emulator::Thread {
|
|
auto create(auto (*entrypoint)() -> void, double frequency) -> void {
|
|
Emulator::Thread::create(entrypoint, frequency);
|
|
scheduler.append(*this);
|
|
}
|
|
|
|
inline auto synchronize(Thread& thread) -> void {
|
|
if(clock() >= thread.clock()) scheduler.resume(thread);
|
|
}
|
|
|
|
inline auto step(uint clocks) -> void {
|
|
_clock += clocks;
|
|
}
|
|
};
|
|
|
|
#include <gba/memory/memory.hpp>
|
|
#include <gba/system/system.hpp>
|
|
#include <gba/cartridge/cartridge.hpp>
|
|
#include <gba/player/player.hpp>
|
|
#include <gba/cpu/cpu.hpp>
|
|
#include <gba/ppu/ppu.hpp>
|
|
#include <gba/apu/apu.hpp>
|
|
}
|
|
|
|
#include <gba/interface/interface.hpp>
|