4: User process
5: Mapped at 0x4000-0x7FFF (Kernel data/common)
6: User process
- 7: CODE3, Display + Video, Font (fairly full - font not needed
- however)
+ 7: CODE3, Display + Video (plenty of room)
Which gives us the ability to run 16K and 32K processes although we'd need
to do bank exchanges to keep 2 x 32K in memory at once (one in 2/3 one in
The other half of the problem on the ZX Spectrum128 is the fact binaries
must be linked with a different base (0xC000 for 16K, 0x8000 for 32K) so
-we need to sort out relocatables
+we need to sort out relocatables. Not only that but our RST based syscall
+vector is of course buried in ZX Spectrum ROM.
Big part of the code was taken from z80pack and msx1 ports.
-ZX Spectrum has a memory layout like follows:
-
-0000-3FFF ROM
-4000-57FF Screen pixel data (movable into bank 7 on the 128K)
-5800-5AFF Screen attributes data
-5B00-FFFF RAM
-
-1 memory bank exists at 0xC000, one of 6 16384-byte pages can be mapped there
-on the 128.
-
TODO:
Hook swap
Swap over IDE
-
Set vectors for syscalls somewhere safe and common (can't use the normal RST
ones). Need a reloc hack to pick syscall method ??
7 = banked with screen (at 0x4000)
although 7 does not appear to be part of the banks we cannot map 2 and 7
-together so it's effectively banked, but we can hack the linker to do smart
-optimisations for calls between banks 6 and 7.
+together so it's effectively banked.
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