From: Alan Cox Date: Sat, 12 Aug 2017 18:47:00 +0000 (+0100) Subject: plus3: update README ready for doing some actual work on this port X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=fdaff002c79f981f5b8edf0209d9f22be05fa28e;p=FUZIX.git plus3: update README ready for doing some actual work on this port --- diff --git a/Kernel/platform-plus3/README.md b/Kernel/platform-plus3/README.md index 487fb62f..6e211ba7 100644 --- a/Kernel/platform-plus3/README.md +++ b/Kernel/platform-plus3/README.md @@ -1,4 +1,4 @@ -`An FUZIX target for ZX Spectrum +2A/+3` +`A FUZIX target for ZX Spectrum +2A/+3` The +2A and +3 have the following choice of memory configurations on top of the standard 128K spectrum @@ -11,18 +11,30 @@ conf2 [4] [5] [6] [3] conf3 [4] [7] [6] [3] ``` +We have an interesting limitation: unlike the 128K spectrum banks 4-7 are +all contended (slower). In addition pointing I into those banks will crash +the machine. Providing we keep RAM in the low 16K we can avoid IM2 however. + That gives us a conventional low 0/1 and 4/5 for user space with the kernel -using 2/3/6/7. +using 3/6/7. Given the memory napping limits it actually probably makes +more sense to eventually allow one 48K and one 32K mapping so most processes +can run two at a time but one big one is allowed. That implies we get our +chmem act together. -Kernel maps are then +We then map -3 = common (always mapped high) -2/6 = banked (at 0x8000) -7 = banked with screen (at 0x4000) +0/1/2/3 - user process 0: 48K, 16K common +4/5/6/3 - user process 1: 32K, 16K common, 16K is kernel reserved +4/7/6/3 - kernel: 48K minus screen, common 16K (some kernel in it) -although 7 does not appear to be part of the banks we cannot map 2 and 7 -together so it's effectively banked. +As an aside this only works for the +2A/+3. The various clones even with +lots of RAM clone the original 128K and add more pages of memory in the top +16K bank. Some allow the low 16K to become RAM (eg for CP/M) but have +4000-BFFF fixed. -Alternatively we could go with a single 64K swapping user space with -kernel mapped normally at 4-7 (with screen hole at C000) and user at 0-3 -and a small copied common in bank 3 and 7 +There are also various add in boards some of which can work on the +2A/+3 +that provide alternative RAM and ROM banks for the low 16K. We don't make +use of them in this configuration althogh in future it would make sense to +make the kernel mapping in such a case map DivMMC or similar RAM into the +low 16K when in kernel mapping so the kernel becomes mmc/7/3 and we leave 6 +free to allow a pair of 48K processes.