From 199c0e27e09d98f83f4d99091b205537f143e28d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 7 Jul 2016 07:16:36 -0400 Subject: [PATCH] Mostly just random guesses now, to be honest. It's approaching the end of my window for the morning. --- Machines/Commodore/1540/Commodore1540.hpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Machines/Commodore/1540/Commodore1540.hpp b/Machines/Commodore/1540/Commodore1540.hpp index 732318a9b..fdf79761d 100644 --- a/Machines/Commodore/1540/Commodore1540.hpp +++ b/Machines/Commodore/1540/Commodore1540.hpp @@ -34,9 +34,10 @@ class SerialPortVIA: public MOS::MOS6522, public MOS::MOS6522IRQD if(port) { std::shared_ptr<::Commodore::Serial::Port> serialPort = _serialPort.lock(); if(serialPort) { + printf("1540 output: %02x\n", value); // serialPort->set_output(::Commodore::Serial::Line::Attention, !(value&0x10)); - serialPort->set_output(::Commodore::Serial::Line::Clock, (::Commodore::Serial::LineLevel)(value&0x08)); - serialPort->set_output(::Commodore::Serial::Line::Data, (::Commodore::Serial::LineLevel)(value&0x02)); + serialPort->set_output(::Commodore::Serial::Line::Clock, (::Commodore::Serial::LineLevel)!(value&0x08)); + serialPort->set_output(::Commodore::Serial::Line::Data, (::Commodore::Serial::LineLevel)!(value&0x02)); } // printf("1540 serial port VIA port B: %02x\n", value); } @@ -48,11 +49,11 @@ class SerialPortVIA: public MOS::MOS6522, public MOS::MOS6522IRQD // printf("1540 Serial port line %d: %s\n", line, value ? "on" : "off"); switch(line) { default: break; - case ::Commodore::Serial::Line::Data: _portB = (_portB & ~0x01) | (value ? 0x01 : 0x00); break; - case ::Commodore::Serial::Line::Clock: _portB = (_portB & ~0x04) | (value ? 0x04 : 0x00); break; + case ::Commodore::Serial::Line::Data: _portB = (_portB & ~0x01) | (value ? 0x00 : 0x01); break; + case ::Commodore::Serial::Line::Clock: _portB = (_portB & ~0x04) | (value ? 0x00 : 0x04); break; case ::Commodore::Serial::Line::Attention: - _portB = (_portB & ~0x80) | (value ? 0x80 : 0x00); - set_control_line_input(Port::A, Line::One, value); + _portB = (_portB & ~0x80) | (value ? 0x00 : 0x80); + set_control_line_input(Port::A, Line::One, !value); break; } }