openMSX
|
VDP command engine by Alex Wulms. More...
#include <VDPCmdEngine.hh>
Public Member Functions | |
VDPCmdEngine (VDP &vdp, CommandController &commandController) | |
void | reset (EmuTime::param time) |
Reinitialize Renderer state. | |
void | sync (EmuTime::param time) |
Synchronizes the command engine with the VDP. | |
void | sync2 (EmuTime::param time) |
void | stealAccessSlot (EmuTime::param time) |
Steal a VRAM access slot from the CmdEngine. | |
byte | getStatus (EmuTime::param time) |
Gets the command engine status (part of S#2). | |
byte | readColor (EmuTime::param time) |
Use this method to transfer pixel(s) from VDP to CPU. | |
void | resetColor () |
unsigned | getBorderX (EmuTime::param time) |
Gets the X coordinate of a border detected by SRCH (intended behaviour, as documented in the V9938 technical data book). | |
void | setCmdReg (byte index, byte value, EmuTime::param time) |
Writes to a command register. | |
byte | peekCmdReg (byte index) const |
Read the content of a command register. | |
void | updateDisplayMode (DisplayMode mode, bool cmdBit, EmuTime::param time) |
Informs the command engine of a VDP display mode change. | |
bool | commandInProgress (EmuTime::param time) |
auto | getLastCommand () const |
Get the register-values for the last executed (or still in progress) command. | |
auto | getInprogressPosition () const |
Get the (source and destination) X/Y coordinates of the currently executing command. | |
template<typename Archive > | |
void | serialize (Archive &ar, unsigned version) |
Interface for logical operations. | |
Static Public Attributes | |
static constexpr byte | MXD = 0x20 |
static constexpr byte | MXS = 0x10 |
static constexpr byte | DIY = 0x08 |
static constexpr byte | DIX = 0x04 |
static constexpr byte | EQ = 0x02 |
static constexpr byte | MAJ = 0x01 |
VDP command engine by Alex Wulms.
Implements command execution unit of V9938/58.
Definition at line 23 of file VDPCmdEngine.hh.
openmsx::VDPCmdEngine::VDPCmdEngine | ( | VDP & | vdp, |
CommandController & | commandController | ||
) |
Definition at line 1762 of file VDPCmdEngine.cc.
|
inline |
Definition at line 129 of file VDPCmdEngine.hh.
References sync().
|
inline |
Gets the X coordinate of a border detected by SRCH (intended behaviour, as documented in the V9938 technical data book).
However, real VDP simply returns the current value of the ASX 'temporary source X' counter, regardless of the command that is being executed or was executed most recently
time | The moment in emulated time this get occurs. |
Definition at line 101 of file VDPCmdEngine.hh.
References sync().
|
inline |
Get the (source and destination) X/Y coordinates of the currently executing command.
For debugging purposes only.
Definition at line 144 of file VDPCmdEngine.hh.
|
inline |
Get the register-values for the last executed (or still in progress) command.
For debugging purposes only.
Definition at line 136 of file VDPCmdEngine.hh.
|
inline |
Gets the command engine status (part of S#2).
Bit 7 (TR) is set when the command engine is ready for a pixel transfer. Bit 4 (BD) is set when the boundary color is detected. Bit 0 (CE) is set when a command is in progress.
Definition at line 70 of file VDPCmdEngine.hh.
References sync().
Read the content of a command register.
This method is meant to be used by the debugger, there is no strict guarantee that the returned value is the correct value at exactly this moment in time (IOW this method does not sync the complete CmdEngine)
index | The register [0..14] to read from. |
Definition at line 1864 of file VDPCmdEngine.cc.
References UNREACHABLE.
|
inline |
Use this method to transfer pixel(s) from VDP to CPU.
This method implements V9938 S#7.
time | The moment in emulated time this read occurs. |
Definition at line 82 of file VDPCmdEngine.hh.
References sync().
void openmsx::VDPCmdEngine::reset | ( | EmuTime::param | time | ) |
Reinitialize Renderer state.
time | The moment in time the reset occurs. |
Definition at line 1785 of file VDPCmdEngine.cc.
References openmsx::VDP::getCmdBit(), openmsx::VDP::getDisplayMode(), setCmdReg(), and updateDisplayMode().
|
inline |
Definition at line 86 of file VDPCmdEngine.hh.
void openmsx::VDPCmdEngine::serialize | ( | Archive & | ar, |
unsigned | version | ||
) |
Interface for logical operations.
Definition at line 2617 of file VDPCmdEngine.cc.
References openmsx::Clock< FREQ_NUM, FREQ_DENOM >::getTime().
Writes to a command register.
index | The register [0..14] to write to. |
value | The new value for the specified register. |
time | The moment in emulated time this write occurs. |
Definition at line 1796 of file VDPCmdEngine.cc.
References openmsx::TclCallback::execute(), sync(), and UNREACHABLE.
Referenced by reset().
|
inline |
Steal a VRAM access slot from the CmdEngine.
Used when the CPU reads/writes VRAM.
time | The moment in time the CPU read/write is performed. |
Definition at line 56 of file VDPCmdEngine.hh.
References openmsx::VDPAccessSlots::D1.
Referenced by openmsx::VDPVRAM::cpuRead(), and openmsx::VDPVRAM::cpuWrite().
|
inline |
Synchronizes the command engine with the VDP.
Ideally this would be a private method, but the current design doesn't allow that.
time | The moment in emulated time to sync to. |
Definition at line 47 of file VDPCmdEngine.hh.
References sync2().
Referenced by commandInProgress(), openmsx::VDPVRAM::cpuRead(), openmsx::VDPVRAM::cpuWrite(), getBorderX(), getStatus(), readColor(), setCmdReg(), openmsx::VDPVRAM::sync(), openmsx::VDPVRAM::updateDisplayEnabled(), updateDisplayMode(), and openmsx::VDPVRAM::updateSpritesEnabled().
void openmsx::VDPCmdEngine::sync2 | ( | EmuTime::param | time | ) |
void openmsx::VDPCmdEngine::updateDisplayMode | ( | DisplayMode | mode, |
bool | cmdBit, | ||
EmuTime::param | time | ||
) |
Informs the command engine of a VDP display mode change.
mode | The new display mode. |
cmdBit | Are VDP commands allowed in non-bitmap mode. |
time | The moment in emulated time this change occurs. |
Definition at line 1889 of file VDPCmdEngine.cc.
References openmsx::DisplayMode::getBase(), openmsx::DisplayMode::GRAPHIC4, openmsx::DisplayMode::GRAPHIC5, openmsx::DisplayMode::GRAPHIC6, openmsx::DisplayMode::GRAPHIC7, and sync().
Referenced by reset(), and openmsx::VDPVRAM::updateDisplayMode().
|
staticconstexpr |
Definition at line 30 of file VDPCmdEngine.hh.
Referenced by openmsx::ImGuiBitmapViewer::paint().
|
staticconstexpr |
Definition at line 29 of file VDPCmdEngine.hh.
Referenced by openmsx::ImGuiBitmapViewer::paint().
|
staticconstexpr |
Definition at line 31 of file VDPCmdEngine.hh.
Referenced by openmsx::ImGuiBitmapViewer::paint().
|
staticconstexpr |
Definition at line 32 of file VDPCmdEngine.hh.
Referenced by openmsx::ImGuiBitmapViewer::paint().
|
staticconstexpr |
Definition at line 27 of file VDPCmdEngine.hh.
|
staticconstexpr |
Definition at line 28 of file VDPCmdEngine.hh.