Skip to content

Commit

Permalink
[coco] replace fnUartBUS with fnDwCom
Browse files Browse the repository at this point in the history
  • Loading branch information
a8jan committed Jun 1, 2024
1 parent 3e4a96f commit b1eb1c4
Show file tree
Hide file tree
Showing 12 changed files with 200 additions and 182 deletions.
4 changes: 1 addition & 3 deletions fujinet_pc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ set(SOURCES src/main.cpp
lib/utils/U8Char.h lib/utils/U8Char.cpp
lib/hardware/fnWiFi.h lib/hardware/fnDummyWiFi.h lib/hardware/fnDummyWiFi.cpp
lib/hardware/led.h lib/hardware/led.cpp
lib/hardware/fnUART.h lib/hardware/fnUART.cpp
lib/hardware/fnUART.h lib/hardware/fnUART.cpp
lib/hardware/fnUARTUnix.cpp lib/hardware/fnUARTWindows.cpp
lib/hardware/fnSystem.h lib/hardware/fnSystem.cpp lib/hardware/fnSystemNet.cpp
lib/FileSystem/fnDirCache.h lib/FileSystem/fnDirCache.cpp
Expand Down Expand Up @@ -344,8 +344,6 @@ if(FUJINET_TARGET STREQUAL "COCO")
lib/bus/drivewire/dwcom/dwport.h lib/bus/drivewire/dwcom/dwport.cpp
lib/bus/drivewire/dwcom/dwserial.h lib/bus/drivewire/dwcom/dwserial.cpp
lib/bus/drivewire/dwcom/dwbecker.h lib/bus/drivewire/dwcom/dwbecker.cpp
lib/hardware/fnUART.h lib/hardware/fnUARTUnix.cpp
lib/hardware/fnUART.h lib/hardware/fnUARTWindows.cpp

lib/media/drivewire/mediaTypeDSK.h lib/media/drivewire/mediaTypeDSK.cpp

Expand Down
17 changes: 17 additions & 0 deletions lib/bus/bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,68 +4,85 @@
#ifdef BUILD_ATARI
#include "sio/sio.h"
#define SYSTEM_BUS SIO
#ifdef ESP_PLATFORM
#define FN_BUS_PORT fnUartBUS
#else
#define FN_BUS_PORT fnSioCom
#endif
#endif

#ifdef BUILD_IEC
#include "iec/iec.h"
#include "iec/parallel.h"
#include "iec/ieee-488.h"
#define SYSTEM_BUS IEC
#define FN_BUS_PORT fnUartBUS // TBD
#endif

#ifdef BUILD_ADAM
#include "adamnet/adamnet.h"
#define SYSTEM_BUS AdamNet
#define FN_BUS_PORT fnUartBUS
#endif

#ifdef BUILD_LYNX
#include "comlynx/comlynx.h"
#define SYSTEM_BUS ComLynx
#define FN_BUS_PORT fnUartBUS
#endif

#ifdef NEW_TARGET
#include "new/adamnet.h"
#define SYSTEM_BUS AdamNet
#define FN_BUS_PORT fnUartBUS
#endif

#ifdef BUILD_APPLE
#include "iwm/iwm.h"
#define SYSTEM_BUS IWM
#define FN_BUS_PORT fnUartBUS // TBD
#endif

#ifdef BUILD_MAC
#include "mac/mac.h"
#define SYSTEM_BUS MAC
#define FN_BUS_PORT fnUartBUS
#endif

#ifdef BUILD_S100
#include "s100spi/s100spi.h"
#define SYSTEM_BUS s100Bus
#define FN_BUS_PORT fnUartBUS // TBD
#endif

#ifdef BUILD_RS232
#include "rs232/rs232.h"
#define SYSTEM_BUS RS232
#define FN_BUS_PORT fnUartBUS
#endif

#ifdef BUILD_CX16
#include "cx16_i2c/cx16_i2c.h"
#define SYSTEM_BUS CX16
#define FN_BUS_PORT fnUartBUS // TBD
#endif

#ifdef BUILD_RC2014
#include "rc2014bus/rc2014bus.h"
#define SYSTEM_BUS rc2014Bus
#define FN_BUS_PORT fnUartBUS
#endif

#ifdef BUILD_H89
#include "h89/h89.h"
#define SYSTEM_BUS H89Bus
#define FN_BUS_PORT fnUartBUS // TBD
#endif

#ifdef BUILD_COCO
#include "drivewire/drivewire.h"
#define SYSTEM_BUS DRIVEWIRE
#define FN_BUS_PORT fnDwCom
#endif

#endif // BUS_H
104 changes: 52 additions & 52 deletions lib/bus/drivewire/drivewire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,11 @@ void systemBus::op_readex()
drivewireDisk *d = nullptr;
uint16_t c1 = 0, c2 = 0;

drive_num = fnUartBUS.read();
drive_num = fnDwCom.read();

lsn = fnUartBUS.read() << 16;
lsn |= fnUartBUS.read() << 8;
lsn |= fnUartBUS.read();
lsn = fnDwCom.read() << 16;
lsn |= fnDwCom.read() << 8;
lsn |= fnDwCom.read();

Debug_printf("OP_READ: DRIVE %3u - SECTOR %8lu\n", drive_num, lsn);

Expand All @@ -121,74 +121,74 @@ void systemBus::op_readex()
if (!d)
{
Debug_printv("Invalid drive #%3u", drive_num);
fnUartBUS.write(0xF6);
fnUartBUS.flush();
fnUartBUS.flush_input();
fnDwCom.write(0xF6);
fnDwCom.flush();
fnDwCom.flush_input();

return;
}

if (!d->device_active)
{
Debug_printv("Device not active.");
fnUartBUS.write(0xF6);
fnUartBUS.flush();
fnUartBUS.flush_input();
fnDwCom.write(0xF6);
fnDwCom.flush();
fnDwCom.flush_input();
return;
}

if (d->read(lsn, sector_data))
{
Debug_printf("Read error\n");
fnUartBUS.write(0xF4);
fnUartBUS.flush();
fnUartBUS.flush_input();
fnDwCom.write(0xF4);
fnDwCom.flush();
fnDwCom.flush_input();
return;
}

fnUartBUS.write(sector_data, MEDIA_BLOCK_SIZE);
fnDwCom.write(sector_data, MEDIA_BLOCK_SIZE);

c1 = (fnUartBUS.read()) << 8;
c1 |= fnUartBUS.read();
c1 = (fnDwCom.read()) << 8;
c1 |= fnDwCom.read();

c2 = drivewire_checksum(sector_data, MEDIA_BLOCK_SIZE);

if (c1 != c2)
fnUartBUS.write(243);
fnDwCom.write(243);
else
fnUartBUS.write(0x00);
fnDwCom.write(0x00);
}

void systemBus::op_write()
{
drivewireDisk *d = nullptr;
uint16_t c1 = 0, c2 = 0;

drive_num = fnUartBUS.read();
drive_num = fnDwCom.read();

lsn = fnUartBUS.read() << 16;
lsn |= fnUartBUS.read() << 8;
lsn |= fnUartBUS.read();
lsn = fnDwCom.read() << 16;
lsn |= fnDwCom.read() << 8;
lsn |= fnDwCom.read();

size_t s = fnUartBUS.readBytes(sector_data, MEDIA_BLOCK_SIZE);
size_t s = fnDwCom.readBytes(sector_data, MEDIA_BLOCK_SIZE);

if (s != MEDIA_BLOCK_SIZE)
{
Debug_printv("Insufficient # of bytes for write, total recvd: %u", s);
fnUartBUS.flush_input();
fnDwCom.flush_input();
return;
}

// Todo handle checksum.
c1 = fnUartBUS.read();
c1 |= fnUartBUS.read() << 8;
c1 = fnDwCom.read();
c1 |= fnDwCom.read() << 8;

c2 = drivewire_checksum(sector_data, MEDIA_BLOCK_SIZE);

// if (c1 != c2)
// {
// Debug_printf("Checksum error\n");
// fnUartBUS.write(243);
// fnDwCom.write(243);
// return;
// }

Expand All @@ -199,25 +199,25 @@ void systemBus::op_write()
if (!d)
{
Debug_printv("Invalid drive #%3u", drive_num);
fnUartBUS.write(0xF6);
fnDwCom.write(0xF6);
return;
}

if (!d->device_active)
{
Debug_printv("Device not active.");
fnUartBUS.write(0xF6);
fnDwCom.write(0xF6);
return;
}

if (d->write(lsn, sector_data))
{
Debug_print("Write error\n");
fnUartBUS.write(0xF5);
fnDwCom.write(0xF5);
return;
}

fnUartBUS.write(0x00); // success
fnDwCom.write(0x00); // success
}

void systemBus::op_fuji()
Expand All @@ -235,7 +235,7 @@ void systemBus::op_cpm()
void systemBus::op_net()
{
// Get device ID
uint8_t device_id = (uint8_t)fnUartBUS.read();
uint8_t device_id = (uint8_t)fnDwCom.read();

// If device doesn't exist, create it.
if (!_netDev.contains(device_id))
Expand All @@ -253,10 +253,10 @@ void systemBus::op_unhandled(uint8_t c)
{
Debug_printv("Unhandled opcode: %02x", c);

while (fnUartBUS.available())
Debug_printf("%02x ", fnUartBUS.read());
while (fnDwCom.available())
Debug_printf("%02x ", fnDwCom.read());

fnUartBUS.flush_input();
fnDwCom.flush_input();
}

void systemBus::op_time()
Expand All @@ -268,12 +268,12 @@ void systemBus::op_time()

Debug_printf("Returning %02d/%02d/%02d %02d:%02d:%02d\n", now->tm_year, now->tm_mon, now->tm_mday, now->tm_hour, now->tm_min, now->tm_sec);

fnUartBUS.write(now->tm_year - 1900);
fnUartBUS.write(now->tm_mon);
fnUartBUS.write(now->tm_mday);
fnUartBUS.write(now->tm_hour);
fnUartBUS.write(now->tm_min);
fnUartBUS.write(now->tm_sec);
fnDwCom.write(now->tm_year - 1900);
fnDwCom.write(now->tm_mon);
fnDwCom.write(now->tm_mday);
fnDwCom.write(now->tm_hour);
fnDwCom.write(now->tm_min);
fnDwCom.write(now->tm_sec);
}

void systemBus::op_init()
Expand All @@ -284,35 +284,35 @@ void systemBus::op_init()
void systemBus::op_dwinit()
{
Debug_printv("OP_DWINIT - Sending feature byte 0x%02x", DWINIT_FEATURES);
fnUartBUS.write(DWINIT_FEATURES);
fnDwCom.write(DWINIT_FEATURES);
}

void systemBus::op_getstat()
{
Debug_printv("OP_GETSTAT: 0x%02x", fnUartBUS.read());
Debug_printv("OP_GETSTAT: 0x%02x", fnDwCom.read());
}

void systemBus::op_setstat()
{
Debug_printv("OP_SETSTAT: 0x%02x", fnUartBUS.read());
Debug_printv("OP_SETSTAT: 0x%02x", fnDwCom.read());
}

void systemBus::op_serread()
{
// TODO: Temporary until modem and network are working
fnUartBUS.write(0x00);
fnUartBUS.write(0x00);
fnDwCom.write(0x00);
fnDwCom.write(0x00);
}

void systemBus::op_print()
{
_printerdev->write(fnUartBUS.read());
_printerdev->write(fnDwCom.read());
}

// Read and process a command frame from DRIVEWIRE
void systemBus::_drivewire_process_cmd()
{
uint8_t c = fnUartBUS.read();
uint8_t c = fnDwCom.read();

fnLedManager.set(eLed::LED_BUS, true);

Expand Down Expand Up @@ -411,7 +411,7 @@ void systemBus::service()
}
}

if (fnUartBUS.available())
if (fnDwCom.available())
_drivewire_process_cmd();

// dload.dload_process();
Expand Down Expand Up @@ -484,7 +484,7 @@ void systemBus::setup()
#endif /* FORCE_UART_BAUD */
#else
// Setup SIO ports: serial UART and NetSIO
fnUartBUS.set_port(Config.get_serial_port().c_str()); // UART
fnDwCom.set_serial_port(Config.get_serial_port().c_str()); // UART
std::string baudString = Config.get_serial_port_baud();
if (baudString.empty())
{
Expand All @@ -496,8 +496,8 @@ void systemBus::setup()
}
#endif

fnUartBUS.begin(_drivewireBaud);
fnUartBUS.flush_input();
fnDwCom.begin(_drivewireBaud);
fnDwCom.flush_input();
Debug_printv("DRIVEWIRE MODE");
}

Expand Down
4 changes: 3 additions & 1 deletion lib/bus/drivewire/drivewire.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@

#include <forward_list>
#include <map>
#include <fnUART.h>
// fnUartBUS (Serial only) was replaced with fnDwCom (Serial|TCP/Becker)
//#include <fnUART.h>
#include "drivewire/dwcom/fnDwCom.h"

#define DRIVEWIRE_BAUDRATE 57600

Expand Down
Loading

0 comments on commit b1eb1c4

Please sign in to comment.