bsnes/higan/ms/vdp/vdp.hpp

150 lines
3.1 KiB
C++
Raw Normal View History

//Texas Instruments TMS9918A (derivative)
struct VDP : Thread {
static auto Enter() -> void;
auto main() -> void;
auto step(uint clocks) -> void;
auto refresh() -> void;
auto vlines() -> uint;
auto vblank() -> bool;
auto power() -> void;
//io.cpp
auto vcounter() -> uint8;
auto hcounter() -> uint8;
auto data() -> uint8;
auto status() -> uint8;
auto data(uint8) -> void;
auto control(uint8) -> void;
auto registerWrite(uint4 addr, uint8 data) -> void;
//background.cpp
struct Background {
auto run(uint8 hoffset, uint9 voffset) -> void;
auto graphics1(uint8 hoffset, uint9 voffset) -> void;
auto graphics2(uint8 hoffset, uint9 voffset) -> void;
auto graphics3(uint8 hoffset, uint9 voffset, uint vlines) -> void;
auto power() -> void;
Update to v102r10 release. byuu says: Changelog: - removed Emulator::Interface::Capabilities¹ - MS: improved the PSG emulation a bit - MS: added cheat code support - MS: added save state support² - MD: emulated the PSG³ ¹: there's really no point to it anymore. I intend to add cheat codes to the GBA core, as well as both cheat codes and save states to the Mega Drive core. I no longer intend to emulate any new systems, so these values will always be true. Further, the GUI doesn't respond to these values to disable those features anymore ever since the hiro rewrite, so they're double useless. ²: right now, the Z80 core is using a pointer for HL-\>(IX,IY) overrides. But I can't reliably serialize pointers, so I need to convert the Z80 core to use an integer here. The save states still appear to work fine, but there's the potential for an instruction to execute incorrectly if you're incredibly unlucky, so this needs to be fixed as soon as possible. Further, I still need a way to serialize array<T, Size> objects, and I should also add nall::Boolean serialization support. ³: I don't have a system in place to share identical sound chips. But this chip is so incredibly simple that it's not really much trouble to duplicate it. Further, I can strip out the stereo sound support code from the Game Gear portion, so it's even tinier. Note that the Mega Drive only just barely uses the PSG. Not at all in Altered Beast, and only for a tiny part of the BGM music on Sonic 1, plus his jump sound effect.
2017-02-22 21:25:01 +00:00
//serialization.cpp
auto serialize(serializer&) -> void;
struct Output {
uint4 color;
uint1 palette;
uint1 priority;
} output;
} background;
//sprite.cpp
struct Sprite {
auto setup(uint9 voffset) -> void;
auto run(uint8 hoffset, uint9 voffset) -> void;
auto graphics1(uint8 hoffset, uint9 voffset) -> void;
auto graphics2(uint8 hoffset, uint9 voffset) -> void;
auto graphics3(uint8 hoffset, uint9 voffset, uint vlines) -> void;
auto power() -> void;
Update to v102r10 release. byuu says: Changelog: - removed Emulator::Interface::Capabilities¹ - MS: improved the PSG emulation a bit - MS: added cheat code support - MS: added save state support² - MD: emulated the PSG³ ¹: there's really no point to it anymore. I intend to add cheat codes to the GBA core, as well as both cheat codes and save states to the Mega Drive core. I no longer intend to emulate any new systems, so these values will always be true. Further, the GUI doesn't respond to these values to disable those features anymore ever since the hiro rewrite, so they're double useless. ²: right now, the Z80 core is using a pointer for HL-\>(IX,IY) overrides. But I can't reliably serialize pointers, so I need to convert the Z80 core to use an integer here. The save states still appear to work fine, but there's the potential for an instruction to execute incorrectly if you're incredibly unlucky, so this needs to be fixed as soon as possible. Further, I still need a way to serialize array<T, Size> objects, and I should also add nall::Boolean serialization support. ³: I don't have a system in place to share identical sound chips. But this chip is so incredibly simple that it's not really much trouble to duplicate it. Further, I can strip out the stereo sound support code from the Game Gear portion, so it's even tinier. Note that the Mega Drive only just barely uses the PSG. Not at all in Altered Beast, and only for a tiny part of the BGM music on Sonic 1, plus his jump sound effect.
2017-02-22 21:25:01 +00:00
//serialization.cpp
auto serialize(serializer&) -> void;
struct Object {
uint8 x;
uint8 y;
uint8 pattern;
uint4 color;
};
struct Output {
uint4 color;
} output;
array<Object[8]> objects;
uint objectsValid;
} sprite;
Update to v102r10 release. byuu says: Changelog: - removed Emulator::Interface::Capabilities¹ - MS: improved the PSG emulation a bit - MS: added cheat code support - MS: added save state support² - MD: emulated the PSG³ ¹: there's really no point to it anymore. I intend to add cheat codes to the GBA core, as well as both cheat codes and save states to the Mega Drive core. I no longer intend to emulate any new systems, so these values will always be true. Further, the GUI doesn't respond to these values to disable those features anymore ever since the hiro rewrite, so they're double useless. ²: right now, the Z80 core is using a pointer for HL-\>(IX,IY) overrides. But I can't reliably serialize pointers, so I need to convert the Z80 core to use an integer here. The save states still appear to work fine, but there's the potential for an instruction to execute incorrectly if you're incredibly unlucky, so this needs to be fixed as soon as possible. Further, I still need a way to serialize array<T, Size> objects, and I should also add nall::Boolean serialization support. ³: I don't have a system in place to share identical sound chips. But this chip is so incredibly simple that it's not really much trouble to duplicate it. Further, I can strip out the stereo sound support code from the Game Gear portion, so it's even tinier. Note that the Mega Drive only just barely uses the PSG. Not at all in Altered Beast, and only for a tiny part of the BGM music on Sonic 1, plus his jump sound effect.
2017-02-22 21:25:01 +00:00
//serialization.cpp
auto serialize(serializer&) -> void;
private:
auto palette(uint5 index) -> uint12;
uint32 buffer[256 * 264];
uint8 vram[0x4000];
uint8 cram[0x40]; //SG + MS = 0x20, GG = 0x40
struct IO {
uint vcounter = 0; //vertical counter
uint hcounter = 0; //horizontal counter
uint lcounter = 0; //line counter
//interrupt flags
bool intLine = 0;
bool intFrame = 0;
//status flags
bool spriteOverflow = 0;
bool spriteCollision = 0;
uint5 fifthSprite;
//latches
bool controlLatch = 0;
uint16 controlData;
uint2 code;
uint14 address;
uint8 vramLatch;
//$00 mode control 1
bool externalSync = 0;
bool spriteShift = 0;
bool lineInterrupts = 0;
bool leftClip = 0;
bool horizontalScrollLock = 0;
bool verticalScrollLock = 0;
//$01 mode control 2
bool spriteDouble = 0;
bool spriteTile = 0;
bool frameInterrupts = 0;
bool displayEnable = 0;
//$00 + $01
uint4 mode;
//$02 name table base address
uint4 nameTableAddress;
//$03 color table base address
uint8 colorTableAddress;
//$04 pattern table base address
uint3 patternTableAddress;
//$05 sprite attribute table base address
uint7 spriteAttributeTableAddress;
//$06 sprite pattern table base address
uint3 spritePatternTableAddress;
//$07 backdrop color
uint4 backdropColor;
//$08 horizontal scroll offset
uint8 hscroll;
//$09 vertical scroll offset
uint8 vscroll;
//$0a line counter
uint8 lineCounter;
} io;
};
extern VDP vdp;