diff --git a/Machines/Amiga/Chipset.cpp b/Machines/Amiga/Chipset.cpp index 5a18a0422..25f00d6f1 100644 --- a/Machines/Amiga/Chipset.cpp +++ b/Machines/Amiga/Chipset.cpp @@ -885,10 +885,9 @@ void Chipset::write(uint32_t address, uint16_t value, bool allow_conversion) { // Serial port. case 0x030: // SERDAT - LOG("TODO: serial data: " << PADHEX(4) << value); + serial_.set_data(value); break; case 0x032: // SERPER - LOG("TODO: serial control: " << PADHEX(4) << value); serial_.set_control(value); break; @@ -1133,9 +1132,7 @@ uint16_t Chipset::read(uint32_t address, bool allow_conversion) { return 0xffff; // Serial port. - case 0x018: // SERDATR - LOG("TODO: serial data and status"); - return 0x3000; // i.e. transmit buffer empty. + case 0x018: return serial_.get_status(); // DMA management. case 0x002: return dma_control_ | blitter_.get_status(); // DMACONR @@ -1253,3 +1250,15 @@ void Chipset::set_component_prefers_clocking(ClockingHint::Source *, ClockingHin void Chipset::flush() { } + +// MARK: - Serial port. + +void Chipset::SerialPort::set_control(uint16_t) { +} + +void Chipset::SerialPort::set_data(uint16_t) { +} + +uint16_t Chipset::SerialPort::get_status() { + return 0x3000; +} diff --git a/Machines/Amiga/Chipset.hpp b/Machines/Amiga/Chipset.hpp index 9a4144212..93529d5a3 100644 --- a/Machines/Amiga/Chipset.hpp +++ b/Machines/Amiga/Chipset.hpp @@ -208,7 +208,9 @@ class Chipset: private ClockingHint::Observer { class SerialPort { public: - void set_control(uint16_t) {} + void set_control(uint16_t); + void set_data(uint16_t); + uint16_t get_status(); private: uint16_t value = 0, reload = 0;