summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2017-12-22 16:14:06 +0100
committer Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2017-12-22 16:14:06 +0100
commit3e42d06e57932c8c7ab2a74cd7ebcb4d4e648fd7 (patch)
treef94cb6cd1a4fbdf9583222a222851fe6591dda29
parent9fcb286b67232f010e3b43e0279d383d4968854f (diff)
myb3k_fdc.cpp: fixed and is now working
-rw-r--r--src/devices/bus/isa/myb3k_fdc.cpp32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/devices/bus/isa/myb3k_fdc.cpp b/src/devices/bus/isa/myb3k_fdc.cpp
index 204c559c8bd..7f7bea2894f 100644
--- a/src/devices/bus/isa/myb3k_fdc.cpp
+++ b/src/devices/bus/isa/myb3k_fdc.cpp
@@ -34,7 +34,7 @@
#define LOG_READ (1U << 1)
#define LOG_CMD (1U << 2)
-//#define VERBOSE (LOG_GENERAL | LOG_CMD | LOG_READ)
+//#define VERBOSE (LOG_GENERAL | LOG_CMD)
//#define LOG_OUTPUT_STREAM std::cout
#include "logmacro.h"
@@ -221,12 +221,12 @@ WRITE_LINE_MEMBER( isa8_myb3k_fdc4711_device::drq_w )
//-------------------------------------------------
uint8_t isa8_myb3k_fdc4710_device::dack_r(int line)
{
- return m_fdc->data_r();
+ return ~(m_fdc->data_r());
}
uint8_t isa8_myb3k_fdc4711_device::dack_r(int line)
{
- return m_fdc->data_r();
+ return ~(m_fdc->data_r());
}
//-------------------------------------------------
@@ -297,15 +297,16 @@ WRITE8_MEMBER( isa8_myb3k_fdc4711_device::myb3k_inv_fdc_data_w )
#define FDC_DRIVE_SEL 0x03
WRITE8_MEMBER( isa8_myb3k_fdc4710_device::myb3k_fdc_command )
{
+ data = ~data;
LOG("%s: %02x\n", FUNCNAME, data);
- LOGCMD(" - Drive %d\n", data & FDC_DRIVE_SEL);
- LOGCMD(" - Side %d\n", (data & FDC_SIDE_SEL) == 0 ? 0 : 1);
- LOGCMD(" - Motor %s\n", (data & FDC_MOTOR_ON) ? "ON" : "OFF");
+ LOGCMD(" - Drive %d\n", ~data & FDC_DRIVE_SEL);
+ LOGCMD(" - Side %d\n", (data & FDC_SIDE_SEL) ? 0 : 1);
+ LOGCMD(" - Motor %s\n", (data & FDC_MOTOR_ON) ? "OFF" : "ON");
LOGCMD(" - Density %s\n", (data & FDC_DDEN) ? "FM" : "MFM");
floppy_image_device *floppy = nullptr;
- switch(data & FDC_DRIVE_SEL)
+ switch(~data & FDC_DRIVE_SEL) // Y0-Y3 on a '139 maps to drive 4 to 1 respectively
{
case 0:floppy = m_fdd0->get_device(); break;
case 1:floppy = m_fdd1->get_device(); break;
@@ -315,8 +316,8 @@ WRITE8_MEMBER( isa8_myb3k_fdc4710_device::myb3k_fdc_command )
{
LOGCMD(" - Floppy found\n");
m_fdc->set_floppy(floppy);
- floppy->ss_w((data & FDC_SIDE_SEL) ? 1 : 0);
- floppy->mon_w((data & FDC_MOTOR_ON) ? 0 : 1);
+ floppy->ss_w((data & FDC_SIDE_SEL) ? 0 : 1);
+ floppy->mon_w((data & FDC_MOTOR_ON) ? 1 : 0); // Active low and inverter on incomming data line
}
else
{
@@ -327,15 +328,16 @@ WRITE8_MEMBER( isa8_myb3k_fdc4710_device::myb3k_fdc_command )
WRITE8_MEMBER( isa8_myb3k_fdc4711_device::myb3k_fdc_command )
{
+ data = ~data;
LOG("%s: %02x\n", FUNCNAME, data);
- LOGCMD(" - Drive %d\n", data & FDC_DRIVE_SEL);
- LOGCMD(" - Side %d\n", (data & FDC_SIDE_SEL) == 0 ? 0 : 1);
- LOGCMD(" - Motor %s\n", (data & FDC_MOTOR_ON) ? "ON" : "OFF");
+ LOGCMD(" - Drive %d\n", ~data & FDC_DRIVE_SEL);
+ LOGCMD(" - Side %d\n", (data & FDC_SIDE_SEL) ? 0 : 1);
+ LOGCMD(" - Motor %s\n", (data & FDC_MOTOR_ON) ? "OFF" : "ON");
LOGCMD(" - Density %s\n", (data & FDC_DDEN) ? "FM" : "MFM");
floppy_image_device *floppy = nullptr;
- switch(data & FDC_DRIVE_SEL)
+ switch(~data & FDC_DRIVE_SEL) // Y0-Y3 on a '139 maps to drive 4 to 1 respectively
{
case 0:floppy = m_fdd0->get_device(); break;
case 1:floppy = m_fdd1->get_device(); break;
@@ -347,8 +349,8 @@ WRITE8_MEMBER( isa8_myb3k_fdc4711_device::myb3k_fdc_command )
{
LOGCMD(" - Floppy found\n");
m_fdc->set_floppy(floppy);
- floppy->ss_w((data & FDC_SIDE_SEL) ? 1 : 0);
- floppy->mon_w((data & FDC_MOTOR_ON) ? 0 : 1);
+ floppy->ss_w((data & FDC_SIDE_SEL) ? 0 : 1);
+ floppy->mon_w((data & FDC_MOTOR_ON) ? 1 : 0); // Active low and inverter on incomming data line
}
else
{