From 36ae28b0ea9ed8e549a66c0d76bb9fec156b2e95 Mon Sep 17 00:00:00 2001 From: Thomas Cherryhomes Date: Sat, 22 Nov 2025 12:35:15 -0600 Subject: [PATCH 1/3] [msdos] clear register packs before use. --- msdos/src/bus/int_f5.c | 7 +++++-- msdos/src/bus/int_f5_read.c | 6 +++++- msdos/src/bus/int_f5_write.c | 5 ++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/msdos/src/bus/int_f5.c b/msdos/src/bus/int_f5.c index d8e78a1..1dae0ff 100644 --- a/msdos/src/bus/int_f5.c +++ b/msdos/src/bus/int_f5.c @@ -12,18 +12,21 @@ */ #include +#include unsigned char int_f5(unsigned char dev, unsigned char command, unsigned char aux1, unsigned char aux2) { union REGS r; - + + memset(&r,0,sizeof(union REGS)); + r.h.dl = 0x00; r.h.al = dev; r.h.ah = command; r.h.cl = aux1; r.h.ch = aux2; r.x.si = 0x00; - + int86(0xF5,&r,&r); return r.h.al; diff --git a/msdos/src/bus/int_f5_read.c b/msdos/src/bus/int_f5_read.c index 109ea8e..da49a29 100644 --- a/msdos/src/bus/int_f5_read.c +++ b/msdos/src/bus/int_f5_read.c @@ -14,19 +14,23 @@ */ #include +#include unsigned char int_f5_read(unsigned char dev, unsigned char command, unsigned char aux1, unsigned char aux2, void *buf, unsigned short len) { union REGS r; struct SREGS sr; + memset(&r,0,sizeof(union REGS)); + memset(&sr,0,sizeof(struct SREGS)); + r.h.dl = 0x40; r.h.al = dev; r.h.ah = command; r.h.cl = aux1; r.h.ch = aux2; r.x.si = 0x00; - + sr.es = FP_SEG(buf); r.x.bx = FP_OFF(buf); r.x.di = len; diff --git a/msdos/src/bus/int_f5_write.c b/msdos/src/bus/int_f5_write.c index 306ade3..680d7a6 100644 --- a/msdos/src/bus/int_f5_write.c +++ b/msdos/src/bus/int_f5_write.c @@ -20,13 +20,16 @@ unsigned char int_f5_write(unsigned char dev, unsigned char command, unsigned ch union REGS r; struct SREGS sr; + memset(&r,0,sizeof(union REGS)); + memset(&sr,0,sizeof(struct SREGS)); + r.h.dl = 0x80; r.h.al = dev; r.h.ah = command; r.h.cl = aux1; r.h.ch = aux2; r.x.si = 0x00; - + sr.es = FP_SEG(buf); r.x.bx = FP_OFF(buf); r.x.di = len; From 13413ff669347001161f2a731f81bfbdfb3d89cd Mon Sep 17 00:00:00 2001 From: Thomas Cherryhomes Date: Sat, 22 Nov 2025 12:41:33 -0600 Subject: [PATCH 2/3] [msdos] fix compilation warning. --- msdos/src/bus/int_f5_write.c | 1 + 1 file changed, 1 insertion(+) diff --git a/msdos/src/bus/int_f5_write.c b/msdos/src/bus/int_f5_write.c index 680d7a6..7ae28d9 100644 --- a/msdos/src/bus/int_f5_write.c +++ b/msdos/src/bus/int_f5_write.c @@ -14,6 +14,7 @@ */ #include +#include unsigned char int_f5_write(unsigned char dev, unsigned char command, unsigned char aux1, unsigned char aux2, void *buf, unsigned short len) { From 5cc3b97ae4e8ff63487edba3bb96e4abbd3f9051 Mon Sep 17 00:00:00 2001 From: Thomas Cherryhomes Date: Sat, 22 Nov 2025 15:47:01 -0600 Subject: [PATCH 3/3] [msdos] return proper error code for e.g. network_read() --- msdos/src/fn_network/network_status.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/msdos/src/fn_network/network_status.c b/msdos/src/fn_network/network_status.c index aba0841..3ddda46 100644 --- a/msdos/src/fn_network/network_status.c +++ b/msdos/src/fn_network/network_status.c @@ -2,6 +2,7 @@ #include #include #include +#include uint8_t network_status(const char *devicespec, uint16_t *bw, uint8_t *c, uint8_t *err) { @@ -14,6 +15,8 @@ uint8_t network_status(const char *devicespec, uint16_t *bw, uint8_t *c, uint8_t uint8_t err; } sr; + memset(&sr,0,sizeof(sr)); + ret = int_f5_read(device,'S',0x00,0x00,&sr,sizeof(sr)); if (bw) @@ -22,6 +25,6 @@ uint8_t network_status(const char *devicespec, uint16_t *bw, uint8_t *c, uint8_t *c = sr.c; if (err) *err = sr.err; - - return ret; + + return ret == 'C' ? FN_ERR_OK : FN_ERR_IO_ERROR; }