From 5e540cea988f0ae6b1ca051da1c937dfdd4b5341 Mon Sep 17 00:00:00 2001 From: Matt Burke Date: Tue, 30 Apr 2019 01:40:02 +0100 Subject: [PATCH] VAX440: Fixed memory sizing and DMA address mapping Fixes #687 --- VAX/is1000_sysdev.c | 2 -- VAX/vax440_defs.h | 8 +++++++- VAX/vax440_sysdev.c | 15 ++++++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/VAX/is1000_sysdev.c b/VAX/is1000_sysdev.c index 8e758731..6354fb01 100644 --- a/VAX/is1000_sysdev.c +++ b/VAX/is1000_sysdev.c @@ -89,8 +89,6 @@ CTAB is1000_cmd[] = { #define DMANMAPR 32768 /* number of map reg */ #define DMAMAP_VLD 0x80000000 /* valid */ #define DMAMAP_PAG 0x0000FFFF /* mem page */ -#define DMAMAP_RD (QBMAP_VLD | QBMAP_PAG) -#define DMAMAP_WR (QBMAP_VLD | QBMAP_PAG) #define CSR_XDONE 0x01 #define CSR_RDONE 0x02 diff --git a/VAX/vax440_defs.h b/VAX/vax440_defs.h index 257ab5f2..00c8ac20 100644 --- a/VAX/vax440_defs.h +++ b/VAX/vax440_defs.h @@ -113,6 +113,7 @@ #define INITMEMSIZE (1 << 24) /* initial memory size */ #define MEMSIZE (cpu_unit.capac) #define ADDR_IS_MEM(x) (((uint32) (x)) < MEMSIZE) +#if defined (VAX_46) || defined (VAX_47) #define MEM_MODIFIERS { UNIT_MSIZE, (1u << 23), NULL, "8M", &cpu_set_size }, \ { UNIT_MSIZE, (1u << 24), NULL, "16M", &cpu_set_size }, \ { UNIT_MSIZE, (1u << 24) + (1u << 23), NULL, "24M", &cpu_set_size }, \ @@ -122,7 +123,12 @@ { UNIT_MSIZE, (1u << 25) + (1u << 24) + (1u << 23), NULL, "56M", &cpu_set_size }, \ { UNIT_MSIZE, (1u << 26) + (1u << 23), NULL, "72M", &cpu_set_size }, \ { UNIT_MSIZE, (1u << 26) + (1u << 24), NULL, "80M", &cpu_set_size }, \ - { UNIT_MSIZE, (1u << 26) + (1u << 25) + (1u << 24), NULL, "104M", &cpu_set_size } + { UNIT_MSIZE, (1u << 26) + (1u << 25) + (1u << 23), NULL, "104M", &cpu_set_size } +#elif defined (VAX_48) +#define MEM_MODIFIERS { UNIT_MSIZE, (1u << 23), NULL, "8M", &cpu_set_size }, \ + { UNIT_MSIZE, (1u << 24), NULL, "16M", &cpu_set_size }, \ + { UNIT_MSIZE, (1u << 24) + (1u << 23), NULL, "24M", &cpu_set_size } +#endif /* DMA map */ diff --git a/VAX/vax440_sysdev.c b/VAX/vax440_sysdev.c index efe86cd4..a372a527 100644 --- a/VAX/vax440_sysdev.c +++ b/VAX/vax440_sysdev.c @@ -123,9 +123,11 @@ CTAB vax460_cmd[] = { #define DMANMAPR 32768 /* number of map reg */ #define DMAMAP_VLD 0x80000000 /* valid */ +#if defined (VAX_46) || defined (VAX_47) +#define DMAMAP_PAG 0x0003FFFF /* mem page */ +#elif defined (VAX_48) #define DMAMAP_PAG 0x0000FFFF /* mem page */ -#define DMAMAP_RD (QBMAP_VLD | QBMAP_PAG) -#define DMAMAP_WR (QBMAP_VLD | QBMAP_PAG) +#endif extern int32 tmr_int; extern DEVICE lk_dev, vs_dev; @@ -429,7 +431,6 @@ uint32 sc; #if defined (VAX_46) || defined (VAX_47) mem -= (1u << 23); /* 8MB on system board */ -#endif for (sc = 0; mem > 0; sc+=2) { if (mem >= (1u << 25)) { val |= (0x3 << sc); /* add two 16MB SIMMs */ @@ -438,9 +439,17 @@ for (sc = 0; mem > 0; sc+=2) { } else { val |= (0x3 << sc); /* add two 4MB SIMMs */ + val = (val & ~CFGT_SIM) | ((val & CFGT_SIM) << 2); /* must be installed before 16MB SIMMs */ mem -= (1u << 23); } } +#elif defined (VAX_48) +val |= 0x1; /* bit zero always set */ +for (sc = 1; mem > 0; sc++) { + val |= (0x1 << sc); /* add two 4MB SIMMs */ + mem -= (1u << 23); + } +#endif return val; }