From: Alan Cox Date: Mon, 11 Jan 2016 19:05:48 +0000 (+0000) Subject: z80pack: add a network socket simulation helper X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=8fa06c1d5134961db58d3e270896d5391d873467;p=FUZIX.git z80pack: add a network socket simulation helper This just uses the 3rd network virtual serial. There's a small tweak to the cpmsim source also needed to report bit 2 as "carrier" --- diff --git a/Kernel/dev/z80pack/devatsim.c b/Kernel/dev/z80pack/devatsim.c new file mode 100644 index 00000000..b4befbb0 --- /dev/null +++ b/Kernel/dev/z80pack/devatsim.c @@ -0,0 +1,73 @@ +#include +#include +#include +#include + +/* + * Implement a very simple interface to serial 3 on Z80pack, with a + * small patch that sets bit 2 to indicate channel connected. + * + * This is used to debug the ATD ipaddr interface. + * + * Note: the interface *must* be hardware flow controlled and 8bit clean + */ + +__sfr __at 44 status; +__sfr __at 45 data; + +static uint8_t up; +static uint8_t poll; + +void netat_nowake(void) +{ + poll = 0; +} + +void netat_wake(void) +{ + poll = 1; +} + +uint8_t netat_byte(void) +{ + return data; +} + +uint8_t netat_ready(void) +{ + return (status & 0x01) ? 1 : 0; +} + +static void netat_drop(void) +{ + if (up) { + up = 0; + netat_hangup(); + } +} + + +void netat_poll(void) +{ + uint8_t st = status; + if (!(st & 4)) { + netat_drop(); + return; + } + up = 1; + while (poll && (st & 1)) + netat_event(); +} + +void netat_outbyte(uint8_t c) +{ + uint8_t st; + do { + st = status; + if (!(st & 4)) { + netat_drop(); + return; + } + } while (!(st & 2)); + data = c; +} diff --git a/Kernel/dev/z80pack/devatsim.h b/Kernel/dev/z80pack/devatsim.h new file mode 100644 index 00000000..b8f63f92 --- /dev/null +++ b/Kernel/dev/z80pack/devatsim.h @@ -0,0 +1 @@ +extern void netat_poll(void);