28 , ppiModeCallback(invalidPpiModeSetting)
46 return readPortA(time);
48 return readPortB(time);
50 return readPortC(time);
52 return readControlPort(time);
63 return peekPortA(time);
65 return peekPortB(time);
67 return peekPortC(time);
69 return readControlPort(time);
80 writePortA(value, time);
83 writePortB(value, time);
86 writePortC(value, time);
89 writeControlPort(value, time);
96 byte I8255::readPortA(EmuTime::param time)
98 switch (control &
MODE_A) {
102 return interface.
readA(time);
114 byte I8255::peekPortA(EmuTime::param time)
const
116 switch (control &
MODE_A) {
119 return interface.
peekA(time);
130 byte I8255::readPortB(EmuTime::param time)
132 switch (control &
MODE_B) {
136 return interface.
readB(time);
147 byte I8255::peekPortB(EmuTime::param time)
const
149 switch (control &
MODE_B) {
152 return interface.
peekB(time);
162 byte I8255::readPortC(EmuTime::param time)
164 byte tmp = readC1(time) | readC0(time);
165 switch (control &
MODE_A) {
174 switch (control &
MODE_B) {
185 byte I8255::peekPortC(EmuTime::param time)
const
187 return peekC1(time) | peekC0(time);
190 byte I8255::readC1(EmuTime::param time)
194 return interface.
readC1(time) << 4;
197 return latchPortC & 0xf0;
201 byte I8255::peekC1(EmuTime::param time)
const
204 return interface.
peekC1(time) << 4;
206 return latchPortC & 0xf0;
210 byte I8255::readC0(EmuTime::param time)
214 return interface.
readC0(time);
217 return latchPortC & 0x0f;
221 byte I8255::peekC0(EmuTime::param time)
const
224 return interface.
peekC0(time);
226 return latchPortC & 0x0f;
230 byte I8255::readControlPort(EmuTime::param )
const
235 void I8255::writePortA(
byte value, EmuTime::param time)
237 switch (control &
MODE_A) {
246 outputPortA(value, time);
249 void I8255::writePortB(
byte value, EmuTime::param time)
251 switch (control &
MODE_B) {
259 outputPortB(value, time);
262 void I8255::writePortC(
byte value, EmuTime::param time)
264 switch (control &
MODE_A) {
273 switch (control &
MODE_B) {
281 outputPortC(value, time);
284 void I8255::outputPortA(
byte value, EmuTime::param time)
289 interface.
writeA(value, time);
293 void I8255::outputPortB(
byte value, EmuTime::param time)
298 interface.
writeB(value, time);
302 void I8255::outputPortC(
byte value, EmuTime::param time)
307 interface.
writeC1(latchPortC >> 4, time);
311 interface.
writeC0(latchPortC & 15, time);
315 void I8255::writeControlPort(
byte value, EmuTime::param time)
323 outputPortA(latchPortA, time);
324 outputPortB(latchPortB, time);
325 outputPortC(latchPortC, time);
328 byte bitmask = 1 << ((value &
BIT_NR) >> 1);
331 latchPortC |= bitmask;
334 latchPortC &= ~bitmask;
336 outputPortC(latchPortC, time);
339 switch (control &
MODE_A) {
348 switch (control &
MODE_B) {
359 template<
typename Archive>
362 ar.serialize(
"latchPortA", latchPortA,
363 "latchPortB", latchPortB,
364 "latchPortC", latchPortC,
virtual byte peekB(EmuTime::param time) const =0
virtual void writeB(byte value, EmuTime::param time)=0
virtual nibble readC0(EmuTime::param time)=0
virtual byte readA(EmuTime::param time)=0
virtual void writeC1(nibble value, EmuTime::param time)=0
virtual byte readB(EmuTime::param time)=0
virtual void writeA(byte value, EmuTime::param time)=0
virtual nibble readC1(EmuTime::param time)=0
virtual void writeC0(nibble value, EmuTime::param time)=0
virtual byte peekA(EmuTime::param time) const =0
virtual nibble peekC1(EmuTime::param time) const =0
virtual nibble peekC0(EmuTime::param time) const =0
void reset(EmuTime::param time)
I8255(I8255Interface &interf, EmuTime::param time, StringSetting &invalidPpiModeSetting)
byte peek(byte port, EmuTime::param time) const
byte read(byte port, EmuTime::param time)
void serialize(Archive &ar, unsigned version)
void write(byte port, byte value, EmuTime::param time)
This file implemented 3 utility functions:
#define INSTANTIATE_SERIALIZE_METHODS(CLASS)