From c798a6849bcaee752c24f01152f15bd5de5c5f93 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 19:53:25 -0500 Subject: [PATCH 01/11] Stubs for 16650-16950 UARTs --- src/device/serial.c | 36 ++++++++++++++++++++++++++++++++++++ src/include/86box/serial.h | 11 ++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/device/serial.c b/src/device/serial.c index 15527fad4..7f93edb53 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -757,3 +757,39 @@ const device_t ns16550_device = { { NULL }, serial_speed_changed, NULL, NULL }; + +const device_t ns16650_device = { + "Startech Semiconductor 16650(-compatible) UART", + 0, + SERIAL_16650, + serial_init, serial_close, NULL, + { NULL }, serial_speed_changed, NULL, + NULL +}; + +const device_t ns16750_device = { + "Texas Instruments 16750(-compatible) UART", + 0, + SERIAL_16750, + serial_init, serial_close, NULL, + { NULL }, serial_speed_changed, NULL, + NULL +}; + +const device_t ns16850_device = { + "Exar Corporation NS16850(-compatible) UART", + 0, + SERIAL_16850, + serial_init, serial_close, NULL, + { NULL }, serial_speed_changed, NULL, + NULL +}; + +const device_t ns16950_device = { + "Oxford Semiconductor NS16950(-compatible) UART", + 0, + SERIAL_16950, + serial_init, serial_close, NULL, + { NULL }, serial_speed_changed, NULL, + NULL +}; diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index 576c0c12e..25512f2c8 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -6,7 +6,8 @@ * * This file is part of the 86Box distribution. * - * Definitions for the NS8250/16450/16550 UART emulation. + * Definitions for the NS8250/16450/16550/16650/16750/16850/16950 + * UART emulation. * * * @@ -26,6 +27,10 @@ #define SERIAL_8250_PCJR 1 #define SERIAL_NS16450 2 #define SERIAL_NS16550 3 +#define SERIAL_16650 4 +#define SERIAL_16750 5 +#define SERIAL_16850 6 +#define SERIAL_16950 7 #define SERIAL_FIFO_SIZE 16 @@ -93,6 +98,10 @@ extern const device_t i8250_device; extern const device_t i8250_pcjr_device; extern const device_t ns16450_device; extern const device_t ns16550_device; +extern const device_t ns16650_device; +extern const device_t ns16750_device; +extern const device_t ns16850_device; +extern const device_t ns16950_device; #endif /*EMU_SERIAL_H*/ From 9d1898e9f354c7a148682a7a12cafd5926c1133f Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 19:54:02 -0500 Subject: [PATCH 02/11] Fix a prior derp cleanly --- src/include/86box/serial.h | 2 -- src/machine/m_pcjr.c | 2 +- src/machine/m_xt_zenith.c | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index 25512f2c8..a8009f5f9 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -44,8 +44,6 @@ #define SERIAL4_ADDR 0x02e8 #define SERIAL4_IRQ 3 -#define MAX_SERIAL 4 - struct serial_device_s; struct serial_s; diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 482c26ed6..a29d23f0c 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -867,7 +867,7 @@ machine_pcjr_init(const machine_t *model) device_add(&fdc_pcjr_device); device_add(&i8250_pcjr_device); - serial_set_next_inst(MAX_SERIAL); /* So that serial_standalone_init() won't do anything. */ + serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ return ret; } diff --git a/src/machine/m_xt_zenith.c b/src/machine/m_xt_zenith.c index 791ebdcd1..7dc211bf7 100644 --- a/src/machine/m_xt_zenith.c +++ b/src/machine/m_xt_zenith.c @@ -154,7 +154,7 @@ machine_xt_z184_init(const machine_t *model) lpt2_remove(); lpt1_init(0x278); device_add(&i8250_device); - serial_set_next_inst(MAX_SERIAL); /* So that serial_standalone_init() won't do anything. */ + serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ device_add(&cga_device); From 85eaaf9d2d120d9c0a4a67cdbe510f9ff2abe9d0 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 19:54:23 -0500 Subject: [PATCH 03/11] Default UART to 16550 --- src/device/serial.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/serial.c b/src/device/serial.c index 7f93edb53..0186a997f 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -718,7 +718,7 @@ serial_set_next_inst(int ni) void serial_standalone_init(void) { for ( ; next_inst < 4; ) - device_add_inst(&i8250_device, next_inst + 1); + device_add_inst(&ns16550_device, next_inst + 1); }; From 89726bc1555844fffa7d8af36a7aaccaceb4e7a5 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 19:54:54 -0500 Subject: [PATCH 04/11] XT UART to 8250 --- src/machine/m_xt.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 1e4e7bd39..bd0f8dac0 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -8,6 +8,7 @@ #include <86box/pit.h> #include <86box/mem.h> #include <86box/device.h> +#include <86box/serial.h> #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/fdc_ext.h> @@ -30,6 +31,10 @@ machine_xt_common_init(const machine_t *model) device_add(&fdc_xt_device); nmi_init(); + + device_add_inst(&i8250_device, 1); + device_add_inst(&i8250_device, 2); + standalone_gameport_type = &gameport_device; } From 8c4cd92490dec1956b4d894995bb14db7946011a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 19:55:05 -0500 Subject: [PATCH 05/11] AT UART to 16450 --- src/machine/m_at.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/machine/m_at.c b/src/machine/m_at.c index dc47b6207..61f6f4752 100644 --- a/src/machine/m_at.c +++ b/src/machine/m_at.c @@ -47,6 +47,7 @@ #include <86box/dma.h> #include <86box/mem.h> #include <86box/device.h> +#include <86box/serial.h> #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/fdc_ext.h> @@ -79,6 +80,9 @@ machine_at_common_init_ex(const machine_t *model, int type) else if (type == 0) device_add(&at_nvr_device); + device_add_inst(&ns16450_device, 1); + device_add_inst(&ns16450_device, 2); + standalone_gameport_type = &gameport_device; } From 4f8d1a9ede79537a02d72dfc179bf10df061657e Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 20:22:11 -0500 Subject: [PATCH 06/11] Revert "AT UART to 16450" This reverts commit 8c4cd92490dec1956b4d894995bb14db7946011a. --- src/machine/m_at.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/machine/m_at.c b/src/machine/m_at.c index 61f6f4752..dc47b6207 100644 --- a/src/machine/m_at.c +++ b/src/machine/m_at.c @@ -47,7 +47,6 @@ #include <86box/dma.h> #include <86box/mem.h> #include <86box/device.h> -#include <86box/serial.h> #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/fdc_ext.h> @@ -80,9 +79,6 @@ machine_at_common_init_ex(const machine_t *model, int type) else if (type == 0) device_add(&at_nvr_device); - device_add_inst(&ns16450_device, 1); - device_add_inst(&ns16450_device, 2); - standalone_gameport_type = &gameport_device; } From 948624b6f41631203ae0cf6192631cf13b042905 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 19:54:23 -0500 Subject: [PATCH 07/11] Default UART to 16550 --- src/device/serial.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/serial.c b/src/device/serial.c index 7f93edb53..0186a997f 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -718,7 +718,7 @@ serial_set_next_inst(int ni) void serial_standalone_init(void) { for ( ; next_inst < 4; ) - device_add_inst(&i8250_device, next_inst + 1); + device_add_inst(&ns16550_device, next_inst + 1); }; From 149666b54b3b2848a3d31e9fd64501fbafc36ce8 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 21:21:34 -0500 Subject: [PATCH 08/11] Consistency and naming --- src/device/serial.c | 26 +++++++++++++------------- src/include/86box/serial.h | 10 +++++----- src/machine/m_at_commodore.c | 2 +- src/machine/m_pcjr.c | 2 +- src/machine/m_xt_zenith.c | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/device/serial.c b/src/device/serial.c index 0186a997f..a4c0decf6 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -129,7 +129,7 @@ serial_update_ints(serial_t *dev) } if (stat && (dev->irq != 0xff) && ((dev->mctrl & 8) || (dev->type == SERIAL_8250_PCJR))) { - if (dev->type >= SERIAL_NS16450) + if (dev->type >= SERIAL_16450) picintlevel(1 << dev->irq); else picint(1 << dev->irq); @@ -151,9 +151,9 @@ serial_clear_timeout(serial_t *dev) static void write_fifo(serial_t *dev, uint8_t dat) { - serial_log("write_fifo(%08X, %02X, %i, %i)\n", dev, dat, (dev->type >= SERIAL_NS16550) && dev->fifo_enabled, dev->rcvr_fifo_pos & 0x0f); + serial_log("write_fifo(%08X, %02X, %i, %i)\n", dev, dat, (dev->type >= SERIAL_16550) && dev->fifo_enabled, dev->rcvr_fifo_pos & 0x0f); - if ((dev->type >= SERIAL_NS16550) && dev->fifo_enabled) { + if ((dev->type >= SERIAL_16550) && dev->fifo_enabled) { /* FIFO mode. */ timer_disable(&dev->timeout_timer); /* Indicate overrun. */ @@ -189,7 +189,7 @@ write_fifo(serial_t *dev, uint8_t dat) void serial_write_fifo(serial_t *dev, uint8_t dat) { - serial_log("serial_write_fifo(%08X, %02X, %i, %i)\n", dev, dat, (dev->type >= SERIAL_NS16550) && dev->fifo_enabled, dev->rcvr_fifo_pos & 0x0f); + serial_log("serial_write_fifo(%08X, %02X, %i, %i)\n", dev, dat, (dev->type >= SERIAL_16550) && dev->fifo_enabled, dev->rcvr_fifo_pos & 0x0f); if (!(dev->mctrl & 0x10)) write_fifo(dev, dat); @@ -371,7 +371,7 @@ serial_write(uint16_t addr, uint8_t val, void *p) dev->int_status &= ~SERIAL_INT_TRANSMIT; serial_update_ints(dev); - if ((dev->type >= SERIAL_NS16550) && dev->fifo_enabled && (dev->xmit_fifo_pos < 16)) { + if ((dev->type >= SERIAL_16550) && dev->fifo_enabled && (dev->xmit_fifo_pos < 16)) { /* FIFO mode, begin transmitting. */ timer_on_auto(&dev->transmit_timer, dev->transmit_period); dev->transmit_enabled |= 1; /* Start moving. */ @@ -396,7 +396,7 @@ serial_write(uint16_t addr, uint8_t val, void *p) serial_update_ints(dev); break; case 2: - if (dev->type >= SERIAL_NS16550) { + if (dev->type >= SERIAL_16550) { if ((val ^ dev->fcr) & 0x01) serial_reset_fifo(dev); dev->fcr = val & 0xf9; @@ -500,7 +500,7 @@ serial_write(uint16_t addr, uint8_t val, void *p) serial_update_ints(dev); break; case 7: - if (dev->type >= SERIAL_NS16450) + if (dev->type >= SERIAL_16450) dev->scratch = val; break; } @@ -522,7 +522,7 @@ serial_read(uint16_t addr, void *p) break; } - if ((dev->type >= SERIAL_NS16550) && dev->fifo_enabled) { + if ((dev->type >= SERIAL_16550) && dev->fifo_enabled) { /* FIFO mode. */ serial_clear_timeout(dev); @@ -722,8 +722,8 @@ serial_standalone_init(void) { }; -const device_t i8250_device = { - "Intel 8250(-compatible) UART", +const device_t ns8250_device = { + "National Semiconductor 8250(-compatible) UART", 0, SERIAL_8250, serial_init, serial_close, NULL, @@ -732,7 +732,7 @@ const device_t i8250_device = { }; const device_t i8250_pcjr_device = { - "Intel 8250(-compatible) UART for PCjr", + "National Semiconductor 8250(-compatible) UART for PCjr", DEVICE_PCJR, SERIAL_8250_PCJR, serial_init, serial_close, NULL, @@ -743,7 +743,7 @@ const device_t i8250_pcjr_device = { const device_t ns16450_device = { "National Semiconductor NS16450(-compatible) UART", 0, - SERIAL_NS16450, + SERIAL_16450, serial_init, serial_close, NULL, { NULL }, serial_speed_changed, NULL, NULL @@ -752,7 +752,7 @@ const device_t ns16450_device = { const device_t ns16550_device = { "National Semiconductor NS16550(-compatible) UART", 0, - SERIAL_NS16550, + SERIAL_16550, serial_init, serial_close, NULL, { NULL }, serial_speed_changed, NULL, NULL diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index a8009f5f9..5203c17f8 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -23,10 +23,10 @@ # define EMU_SERIAL_H -#define SERIAL_8250 0 +#define SERIAL_8250 0 #define SERIAL_8250_PCJR 1 -#define SERIAL_NS16450 2 -#define SERIAL_NS16550 3 +#define SERIAL_16450 2 +#define SERIAL_16550 3 #define SERIAL_16650 4 #define SERIAL_16750 5 #define SERIAL_16850 6 @@ -92,8 +92,8 @@ extern void serial_standalone_init(void); extern void serial_set_clock_src(serial_t *dev, double clock_src); extern void serial_reset_port(serial_t *dev); -extern const device_t i8250_device; -extern const device_t i8250_pcjr_device; +extern const device_t ns8250_device; +extern const device_t ns8250_pcjr_device; extern const device_t ns16450_device; extern const device_t ns16550_device; extern const device_t ns16650_device; diff --git a/src/machine/m_at_commodore.c b/src/machine/m_at_commodore.c index 7d00e51bb..8aa75059f 100644 --- a/src/machine/m_at_commodore.c +++ b/src/machine/m_at_commodore.c @@ -112,7 +112,7 @@ machine_at_cmdpc_init(const machine_t *model) if (fdc_type == FDC_INTERNAL) device_add(&fdc_at_device); - cmd_uart = device_add(&i8250_device); + cmd_uart = device_add(&ns8250_device); cbm_io_init(); diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index a29d23f0c..80c982bee 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -866,7 +866,7 @@ machine_pcjr_init(const machine_t *model) device_add(&fdc_pcjr_device); - device_add(&i8250_pcjr_device); + device_add(&ns8250_pcjr_device); serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ return ret; diff --git a/src/machine/m_xt_zenith.c b/src/machine/m_xt_zenith.c index 7dc211bf7..f820bfd2e 100644 --- a/src/machine/m_xt_zenith.c +++ b/src/machine/m_xt_zenith.c @@ -153,7 +153,7 @@ machine_xt_z184_init(const machine_t *model) lpt1_remove(); /* only one parallel port */ lpt2_remove(); lpt1_init(0x278); - device_add(&i8250_device); + device_add(&ns8250_device); serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ device_add(&cga_device); From b80de956b35e7598dd35ad7569bf68266a05685a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 21:21:55 -0500 Subject: [PATCH 09/11] Revert "Merge branch 'uart' of https://github.com/jriwanek-forks/86Box into uart" This reverts commit 3eb3f0eb1e7169bebdc50e97369f502514e27001, reversing changes made to 149666b54b3b2848a3d31e9fd64501fbafc36ce8. --- src/machine/m_xt.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index bd0f8dac0..1e4e7bd39 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -8,7 +8,6 @@ #include <86box/pit.h> #include <86box/mem.h> #include <86box/device.h> -#include <86box/serial.h> #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/fdc_ext.h> @@ -31,10 +30,6 @@ machine_xt_common_init(const machine_t *model) device_add(&fdc_xt_device); nmi_init(); - - device_add_inst(&i8250_device, 1); - device_add_inst(&i8250_device, 2); - standalone_gameport_type = &gameport_device; } From 70056c9ed01c546f40cacabe091749c228ef9e20 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 21:22:38 -0500 Subject: [PATCH 10/11] Revert "Default UART to 16550" This reverts commit 85eaaf9d2d120d9c0a4a67cdbe510f9ff2abe9d0. --- src/device/serial.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/serial.c b/src/device/serial.c index a4c0decf6..5d1c422af 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -718,7 +718,7 @@ serial_set_next_inst(int ni) void serial_standalone_init(void) { for ( ; next_inst < 4; ) - device_add_inst(&ns16550_device, next_inst + 1); + device_add_inst(&i8250_device, next_inst + 1); }; From 055c0ecd6949f4e048ae8809e3a1f14c8b70e6e6 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Sun, 19 Dec 2021 21:30:24 -0500 Subject: [PATCH 11/11] Mistake --- src/device/serial.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/serial.c b/src/device/serial.c index 5d1c422af..d9178e566 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -718,7 +718,7 @@ serial_set_next_inst(int ni) void serial_standalone_init(void) { for ( ; next_inst < 4; ) - device_add_inst(&i8250_device, next_inst + 1); + device_add_inst(&ns8250_device, next_inst + 1); }; @@ -731,7 +731,7 @@ const device_t ns8250_device = { NULL }; -const device_t i8250_pcjr_device = { +const device_t ns8250_pcjr_device = { "National Semiconductor 8250(-compatible) UART for PCjr", DEVICE_PCJR, SERIAL_8250_PCJR,