bsnes/higan/sfc/coprocessor/superfx/superfx.hpp

74 lines
1.8 KiB
C++
Raw Normal View History

Update to v098r01 release. byuu says: Changelog: - SFC: balanced profile removed - SFC: performance profile removed - SFC: code for handling non-threaded CPU, SMP, DSP, PPU removed - SFC: Coprocessor, Controller (and expansion port) shared Thread code merged to SFC::Cothread - Cothread here just means "Thread with CPU affinity" (couldn't think of a better name, sorry) - SFC: CPU now has vector<Thread*> coprocessors, peripherals; - this is the beginning of work to allow expansion port devices to be dynamically changed at run-time - ruby: all audio drivers default to 48000hz instead of 22050hz now if no frequency is assigned - note: the WASAPI driver can default to whatever the native frequency is; doesn't have to be 48000hz - tomoko: removed the ability to change the frequency from the UI (but it will display the frequency used) - tomoko: removed the timing settings panel - the goal is to work toward smooth video via adaptive sync - the model is broken by not being in control of the audio frequency anyway - it's further broken by PAL running at 50hz and WSC running at 75hz - it was always broken anyway by SNES interlace timing varying from progressive timing - higan: audio/ stub created (for now, it's just nall/dsp/ moved here and included as a header) - higan: video/ stub created - higan/GNUmakefile: now includes build rules for essential components (libco, emulator, audio, video) The audio changes are in preparation to merge wareya's awesome WASAPI work without the need for the nall/dsp resampler.
2016-04-09 03:40:12 +00:00
struct SuperFX : Processor::GSU, Cothread {
MappedRAM rom;
MappedRAM ram;
//superfx.cpp
static auto Enter() -> void;
auto main() -> void;
auto init() -> void;
auto load() -> void;
auto unload() -> void;
auto power() -> void;
auto reset() -> void;
//bus.cpp
struct CPUROM : Memory {
auto size() const -> uint;
auto read(uint24, uint8) -> uint8;
auto write(uint24, uint8) -> void;
};
struct CPURAM : Memory {
auto size() const -> uint;
auto read(uint24, uint8) -> uint8;
auto write(uint24, uint8) -> void;
};
//core.cpp
auto stop() -> void override;
auto color(uint8 source) -> uint8 override;
auto plot(uint8 x, uint8 y) -> void override;
auto rpix(uint8 x, uint8 y) -> uint8 override;
auto flushPixelCache(PixelCache& cache) -> void;
//memory.cpp
auto read(uint24 addr, uint8 data = 0x00) -> uint8 override;
auto write(uint24 addr, uint8 data) -> void override;
auto readOpcode(uint16 addr) -> uint8;
alwaysinline auto peekpipe() -> uint8;
alwaysinline auto pipe() -> uint8 override;
auto flushCache() -> void override;
auto readCache(uint16 addr) -> uint8;
auto writeCache(uint16 addr, uint8 data) -> void;
//mmio.cpp
auto readIO(uint24 addr, uint8 data) -> uint8;
auto writeIO(uint24 addr, uint8 data) -> void;
//timing.cpp
auto step(uint clocks) -> void override;
auto syncROMBuffer() -> void override;
auto readROMBuffer() -> uint8 override;
auto updateROMBuffer() -> void;
auto syncRAMBuffer() -> void override;
auto readRAMBuffer(uint16 addr) -> uint8 override;
auto writeRAMBuffer(uint16 addr, uint8 data) -> void override;
//serialization.cpp
auto serialize(serializer&) -> void;
CPUROM cpurom;
CPURAM cpuram;
private:
uint romMask;
uint ramMask;
};
extern SuperFX superfx;