15 , cassettePort(getMotherBoard().getCassettePort())
16 , renshaTurbo(getMotherBoard().getRenShaTurbo())
17 , i8255(*this, getCurrentTime(), config.getGlobalSettings().getInvalidPpiModeSetting())
20 config.getMotherBoard(),
21 config.getMotherBoard().getScheduler(),
22 config.getMotherBoard().getCommandController(),
23 config.getMotherBoard().getReactor().getEventDistributor(),
24 config.getMotherBoard().getMSXEventDistributor(),
25 config.getMotherBoard().getStateChangeDistributor(),
51 return i8255.
read(port & 0x03, time);
56 return i8255.
peek(port & 0x03, time);
61 i8255.
write(port & 0x03, value, time);
67 byte MSXPPI::readA(EmuTime::param time)
71 byte MSXPPI::peekA(EmuTime::param )
const
81 void MSXPPI::writeA(
byte value, EmuTime::param )
86 byte MSXPPI::readB(EmuTime::param time)
90 byte MSXPPI::peekB(EmuTime::param time)
const
92 auto& keyb =
const_cast<Keyboard&
>(keyboard);
93 if (selectedRow != 8) {
94 return keyb.getKeys()[selectedRow];
96 return keyb.getKeys()[8] | (renshaTurbo.
getSignal(time) ? 1:0);
99 void MSXPPI::writeB(
byte , EmuTime::param )
104 nibble MSXPPI::readC1(EmuTime::param time)
108 nibble MSXPPI::peekC1(EmuTime::param )
const
112 nibble MSXPPI::readC0(EmuTime::param time)
116 nibble MSXPPI::peekC0(EmuTime::param )
const
120 void MSXPPI::writeC1(
nibble value, EmuTime::param time)
122 if ((prevBits ^ value) & 1) {
123 cassettePort.
setMotor((value & 1) == 0, time);
125 if ((prevBits ^ value) & 2) {
128 if ((prevBits ^ value) & 4) {
131 if ((prevBits ^ value) & 8) {
132 click.
setClick((value & 8) != 0, time);
136 void MSXPPI::writeC0(
nibble value, EmuTime::param )
142 template<
typename Archive>
145 ar.template serializeBase<MSXDevice>(*
this);
146 ar.serialize(
"i8255", i8255);
149 byte portC = (prevBits << 4) | (selectedRow << 0);
150 ar.serialize(
"portC", portC);
152 selectedRow = (portC >> 0) & 0xF;
153 nibble bits = (portC >> 4) & 0xF;
156 ar.serialize(
"keyboard", keyboard);