aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd.c7
-rw-r--r--src/nio.c16
2 files changed, 23 insertions, 0 deletions
diff --git a/src/cmd.c b/src/cmd.c
index b463901..84829a2 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -33,6 +33,7 @@ static void do_quit(void);
static void do_quote(void);
static void do_topic(void);
static void do_ver(void);
+static void do_reset(void);
typedef struct {
char *cmd;
@@ -66,6 +67,7 @@ cmd_t command_defs[] = {
{ "QUIT", do_quit, 0 },
{ "QUOTE", do_quote, 1 },
{ "TOPIC", do_topic, 0 },
+ { "RESET", do_reset, 0 },
{ "VER", do_ver, 0 },
{ "VERSION", do_ver, 0 },
{ 0, 0 }
@@ -73,6 +75,11 @@ cmd_t command_defs[] = {
cmd_t *cmd_def;
+static void do_reset(void) {
+ extern unsigned char nreset(void);
+ nreset();
+}
+
static void cmd_chan_text(void) {
scr_activate(scr_current);
diff --git a/src/nio.c b/src/nio.c
index cdececb..399b06d 100644
--- a/src/nio.c
+++ b/src/nio.c
@@ -148,6 +148,22 @@ unsigned char nwrite(char* devicespec, unsigned char* buf, unsigned short len)
return OS.dcb.dstats; // Return SIO error or success.
}
+/* https://fujinet.online/wiki/?p=SIO-Command-%24FF-Reset-FujiNet */
+unsigned char nreset(void) {
+ OS.dcb.ddevic = 0x70;
+ OS.dcb.dunit = 1;
+ OS.dcb.dcomnd = 0xff; /* reset */
+ OS.dcb.dstats = DWRITE;
+ OS.dcb.dbuf = 0;
+ OS.dcb.dtimlo = TIMEOUT;
+ OS.dcb.dbyt = 0;
+ OS.dcb.daux = 0;
+ siov();
+
+ return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status
+}
+
+
/* IRC doesn't need this */
#if 0
unsigned char nlogin(char* devicespec, char *login, char *password)