14 getCommandController(),
"debugoutput",
15 "name of the file the debugdevice outputs to",
16 config.getChildData(
"filename",
"stdout"))
19 reset(EmuTime::dummy());
30 const auto& newName = fileNameSetting.
getString();
31 if (newName != fileNameString) {
35 switch (port & 0x01) {
37 switch ((value & 0x30) >> 4) {
43 modeParameter = value & 0x0F;
47 modeParameter = value & 0x03;
53 (*outputStrm) <<
'\n' << std::flush;
61 outputSingleByte(value, time);
64 outputMultiByte(value);
73void DebugDevice::outputSingleByte(
byte value, EmuTime::param time)
75 if (modeParameter & 0x01) {
76 displayByte(value, HEX);
78 if (modeParameter & 0x02) {
79 displayByte(value, BIN);
81 if (modeParameter & 0x04) {
82 displayByte(value, DEC);
84 if (modeParameter & 0x08) {
85 (*outputStrm) <<
'\'';
86 byte tmp = ((value >=
' ') && (value != 127)) ? value :
'.';
87 displayByte(tmp, ASC);
88 (*outputStrm) <<
"' ";
90 Clock<3579545> zero(EmuTime::zero());
91 (*outputStrm) <<
"emutime: " << std::dec << zero.getTicksTill(time);
92 if ((modeParameter & 0x08) && ((value <
' ') || (value == 127))) {
93 displayByte(value, ASC);
95 (*outputStrm) <<
'\n' << std::flush;
98void DebugDevice::outputMultiByte(
byte value)
100 DisplayType dispType = [&] {
101 switch (modeParameter) {
109 displayByte(value, dispType);
112void DebugDevice::displayByte(
byte value, DisplayType type)
116 (*outputStrm) << std::hex << std::setw(2)
118 << int(value) <<
"h " << std::flush;
121 for (
byte mask = 0x80; mask; mask >>= 1) {
122 (*outputStrm) << ((value & mask) ?
'1' :
'0');
124 (*outputStrm) <<
"b " << std::flush;
128 (*outputStrm) << std::dec << std::setw(3)
130 << int(value) <<
' ' << std::flush;
133 (*outputStrm).put(narrow_cast<char>(value));
134 (*outputStrm) << std::flush;
139void DebugDevice::openOutput(std::string_view name)
141 fileNameString = name;
143 if (name ==
"stdout") {
144 outputStrm = &std::cout;
145 }
else if (name ==
"stderr") {
146 outputStrm = &std::cerr;
150 outputStrm = &debugOut;
154static constexpr std::initializer_list<enum_string<DebugDevice::DebugMode>> debugModeInfo = {
162template<
typename Archive>
165 ar.template serializeBase<MSXDevice>(*
this);
166 ar.serialize(
"mode", mode,
167 "modeParameter", modeParameter);
void reset(EmuTime::param time) override
This method is called on reset.
DebugDevice(const DeviceConfig &config)
void serialize(Archive &ar, unsigned version)
void writeIO(word port, byte value, EmuTime::param time) override
Write a byte to a given IO port at a certain time to this device.
zstring_view getString() const noexcept
An MSXDevice is an emulated hardware component connected to the bus of the emulated MSX.
string expandTilde(string path)
Expand the '~' character to the users home directory.
void openOfStream(std::ofstream &stream, zstring_view filename)
Open an ofstream in a platform-independent manner.
This file implemented 3 utility functions:
SERIALIZE_ENUM(CassettePlayer::State, stateInfo)
REGISTER_MSXDEVICE(ChakkariCopy, "ChakkariCopy")
uint16_t word
16 bit unsigned integer
#define INSTANTIATE_SERIALIZE_METHODS(CLASS)