From 4ae0363bbce58da7bcfa85e87b7d3378d2571857 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Tue, 4 Sep 2018 13:22:10 +0200 Subject: [PATCH 1/2] Added new Paradise ems card and a new 5150 ems card (from VARCem). Re-worked device handling a bit (from VARCem). --- src/device.c | 16 ++++++- src/isamem.c | 129 ++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 115 insertions(+), 30 deletions(-) diff --git a/src/device.c b/src/device.c index 4bfb35a77..cd24026d6 100644 --- a/src/device.c +++ b/src/device.c @@ -9,7 +9,7 @@ * Implementation of the generic device interface to handle * all devices attached to the emulator. * - * Version: @(#)device.c 1.0.9 2018/09/02 + * Version: @(#)device.c 1.0.10 2018/09/04 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -65,7 +65,7 @@ typedef struct clonedev { static device_t *devices[DEVICE_MAX]; static void *device_priv[DEVICE_MAX]; static device_t *device_current; -static clonedev_t *clones; +static clonedev_t *clones = NULL; #ifdef ENABLE_DEVICE_LOG @@ -91,7 +91,19 @@ device_log(const char *format, ...) void device_init(void) { + clonedev_t *ptr; + memset(devices, 0x00, sizeof(devices)); + + ptr = NULL; + while (clones != NULL) + { + ptr = clones->next; + free(clones); + clones = ptr; + } + + clones = NULL; } diff --git a/src/isamem.c b/src/isamem.c index 0229f6eac..2960b743c 100644 --- a/src/isamem.c +++ b/src/isamem.c @@ -32,7 +32,7 @@ * TODO: The EV159 is supposed to support 16b EMS transfers, but the * EMM.sys driver for it doesn't seem to want to do that.. * - * Version: @(#)isamem.c 1.0.1 2018/08/18 + * Version: @(#)isamem.c 1.0.2 2018/09/04 * * Author: Fred N. van Kempen, * @@ -83,6 +83,7 @@ #include "plat.h" #include "isamem.h" +#define ISAMEM_DEBUG 0 #define RAM_TOPMEM (640 << 10) /* end of low memory */ #define RAM_UMAMEM (384 << 10) /* upper memory block */ @@ -264,22 +265,20 @@ ems_read(uint16_t port, void *priv) /* Get the viewport page number. */ vpage = (port / EMS_PGSIZE); + port &= (EMS_PGSIZE - 1); - switch(port & 0x02ff) { - case 0x0208: /* page number register */ - case 0x0218: - case 0x0258: - case 0x0268: - case 0x02a8: - case 0x02b8: - case 0x02e8: + switch(port - dev->base_addr) { + case 0x0000: /* page number register */ ret = dev->ems[vpage].page; if (dev->ems[vpage].enabled) ret |= 0x80; break; + + case 0x0001: /* W/O */ + break; } -#if 0 +#if ISAMEM_DEBUG pclog("ISAMEM: read(%04x) = %02x)\n", port, ret); #endif @@ -296,19 +295,14 @@ ems_write(uint16_t port, uint8_t val, void *priv) /* Get the viewport page number. */ vpage = (port / EMS_PGSIZE); + port &= (EMS_PGSIZE - 1); -#if 0 +#if ISAMEM_DEBUG pclog("ISAMEM: write(%04x, %02x) page=%d\n", port, val, vpage); #endif - switch(port & 0x02ff) { - case 0x0208: /* page mapping registers */ - case 0x0218: - case 0x0258: - case 0x0268: - case 0x02a8: - case 0x02b8: - case 0x02e8: + switch(port - dev->base_addr) { + case 0x0000: /* page mapping registers */ /* Set the page number. */ dev->ems[vpage].enabled = (val & 0x80); dev->ems[vpage].page = (val & 0x7f); @@ -337,13 +331,7 @@ ems_write(uint16_t port, uint8_t val, void *priv) } break; - case 0x0209: /* page frame registers */ - case 0x0219: - case 0x0259: - case 0x0269: - case 0x02a9: - case 0x02b9: - case 0x02e9: + case 0x0001: /* page frame registers */ /* * The EV-159 EMM driver configures the frame address * by setting bits in these registers. The information @@ -354,7 +342,10 @@ ems_write(uint16_t port, uint8_t val, void *priv) * ----------------- * 80 c0 e0 E0000 */ - +#if ISAMEM_DEBUG + pclog("EMS: write(%02x) to register 1 !\n"); +#endif + dev->ems[vpage].frame = val; if (val) dev->flags |= FLAG_CONFIG; @@ -384,6 +375,7 @@ isamem_init(const device_t *info) tot = 0; switch(dev->board) { case 0: /* IBM PC/XT Memory Expansion Card */ + case 2: /* Paradise Systems 5-PAK */ dev->total_size = device_get_config_int("size"); dev->start_addr = device_get_config_int("start"); tot = dev->total_size; @@ -396,6 +388,13 @@ isamem_init(const device_t *info) dev->flags |= FLAG_WIDE; break; + case 3: /* Micro Mainframe EMS-5150(T) */ + dev->base_addr = device_get_config_hex16("base"); + dev->total_size = device_get_config_int("size"); + dev->frame_addr = 0xD0000; + dev->flags |= (FLAG_EMS | FLAG_CONFIG); + break; + case 10: /* Everex EV-159 RAM 3000 */ dev->base_addr = device_get_config_hex16("base"); dev->total_size = device_get_config_int("size"); @@ -692,6 +691,78 @@ static const device_t ibmat_device = { ibmat_config }; +static const device_config_t p5pak_config[] = + { + { + "size", "Memory Size", CONFIG_SPINNER, "", 128, + { { 0 } }, + { { 0 } }, + { 0, 384, 64 } + }, + { + "start", "Start Address", CONFIG_SPINNER, "", 512, + { { 0 } }, + { { 0 } }, + { 64, 576, 64 } + }, + { + "", "", -1 + } + }; + +static const device_t p5pak_device = { + "Paradise Systems 5-PAK", + DEVICE_ISA, + 2, + isamem_init, isamem_close, NULL, + NULL, NULL, NULL, + p5pak_config +}; + +static const device_config_t ems5150_config[] = +{ + { + "size", "Memory Size", CONFIG_SPINNER, "", 256, + { { 0 } }, + { { 0 } }, + { 0, 2048, 64 } + }, + { + "base", "Address", CONFIG_HEX16, "", 0, + { + { + "Disabled", 0 + }, + { + "Board 1", 0x0208 + }, + { + "Board 2", 0x020a + }, + { + "Board 3", 0x020c + }, + { + "Board 4", 0x020e + }, + { + "" + } + }, + }, + { + "", "", -1 + } +}; + +static const device_t ems5150_device = { + "Micro Mainframe EMS-5150(T)", + DEVICE_ISA, + 3, + isamem_init, isamem_close, NULL, + NULL, NULL, NULL, + ems5150_config +}; static const device_config_t ev159_config[] = { @@ -909,7 +980,9 @@ static const struct { { "None", "none", NULL, }, { "IBM PC/XT Memory Expansion", "ibmxt", &ibmxt_device, }, { "IBM PC/AT Memory Expansion", "ibmat", &ibmat_device, }, - { "Everex EV-159 RAM 3000 Deluxe", "ev159", &ev159_device, }, + { "Micro Mainframe EMS-5150(T)", "ems5150", &ems5150_device }, + { "Paradise Systems 5-PAK", "p5pak", &p5pak_device }, + { "Everex EV-159 RAM 3000 Deluxe", "ev159", &ev159_device, }, { "", "", NULL, }, }; From aee579c637b4e076c4db95147785ea374758b426 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Tue, 4 Sep 2018 13:33:03 +0200 Subject: [PATCH 2/2] Stupid conflicts...(nw) --- src/isamem.c | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/src/isamem.c b/src/isamem.c index 566afa8e2..fab98eb3a 100644 --- a/src/isamem.c +++ b/src/isamem.c @@ -83,8 +83,6 @@ #include "plat.h" #include "isamem.h" -#define ISAMEM_DEBUG 0 - #define RAM_TOPMEM (640 << 10) /* end of low memory */ #define RAM_UMAMEM (384 << 10) /* upper memory block */ #define RAM_EXTMEM (1024 << 10) /* start of high memory */ @@ -299,14 +297,7 @@ ems_read(uint16_t port, void *priv) break; } -<<<<<<< HEAD -#if ISAMEM_DEBUG - pclog("ISAMEM: read(%04x) = %02x)\n", port, ret); -======= -#if 0 isamem_log("ISAMEM: read(%04x) = %02x)\n", port, ret); ->>>>>>> e60c4e96156542ac06e50372af7269da966854e7 -#endif return(ret); } @@ -323,16 +314,9 @@ ems_write(uint16_t port, uint8_t val, void *priv) vpage = (port / EMS_PGSIZE); port &= (EMS_PGSIZE - 1); -<<<<<<< HEAD -#if ISAMEM_DEBUG - pclog("ISAMEM: write(%04x, %02x) page=%d\n", port, val, vpage); -======= -#if 0 isamem_log("ISAMEM: write(%04x, %02x) page=%d\n", port, val, vpage); ->>>>>>> e60c4e96156542ac06e50372af7269da966854e7 -#endif - - switch(port - dev->base_addr) { + + switch(port - dev->base_addr) { case 0x0000: /* page mapping registers */ /* Set the page number. */ dev->ems[vpage].enabled = (val & 0x80); @@ -373,9 +357,8 @@ ems_write(uint16_t port, uint8_t val, void *priv) * ----------------- * 80 c0 e0 E0000 */ -#if ISAMEM_DEBUG - pclog("EMS: write(%02x) to register 1 !\n"); -#endif + + isamem_log("EMS: write(%02x) to register 1 !\n"); dev->ems[vpage].frame = val; if (val)