X-Git-Url: http://git.subgeniuskitty.com/pdp11-memory-test/.git/blobdiff_plain/8c0bb8d8496fbd7d615562ddcce1c38c2c7cb79f..d1f2db4b4e16abf4a7e2b98f0f329d458ef9563e:/pdp11_mmu.c diff --git a/pdp11_mmu.c b/pdp11_mmu.c new file mode 100644 index 0000000..3fc8674 --- /dev/null +++ b/pdp11_mmu.c @@ -0,0 +1,52 @@ +// (c) 2020 Aaron Taylor +// See License.txt file for copyright and license details. + +#include +#include "pdp11_register.h" + +void +init_mmu(void) +{ + + /* + * First populate the relocation registers, all zero since we want an + * identity mapping, except the highest page that we remap to the physical MMIO + * range. + */ + SET(KISAR0,PAR_PAF,0000000); + SET(KISAR1,PAR_PAF,0000000); + SET(KISAR2,PAR_PAF,0000000); + SET(KISAR3,PAR_PAF,0000000); + SET(KISAR4,PAR_PAF,0000000); + SET(KISAR5,PAR_PAF,0000000); + SET(KISAR6,PAR_PAF,0000000); + SET(KISAR7,PAR_PAF,0177600); + + /* + * Now populate the page descriptor registers. See EK-KDJ1B-UG page 1-19 + * for details of each field. + */ + uint16_t data = 0; + SET(data,PDR_BYPASCACHE,0); + SET(data,PDR_PAGELEN,0177); + SET(data,PDR_PAGEWRITEN,0); + SET(data,PDR_EXPANDDIR,0); + SET(data,PDR_ACCESSCTRL,03); + + KISDR0 = data; + KISDR1 = data; + KISDR2 = data; + KISDR3 = data; + KISDR4 = data; + KISDR5 = data; + KISDR6 = data; + KISDR7 = data; + + /* + * Enable the MMU with a 22-bit mapping. + */ + SET(MMR3,MMR3_KRNSPLTID,0); + SET(MMR3,MMR3_EN_22BIT,1); + SET(MMR0,MMR0_EN_MMU,1); +} +