zxdiv48: Initial code for 48K ZX Spectrum with DivIDE plus or ZXCF
authorAlan Cox <alan@linux.intel.com>
Wed, 20 Feb 2019 23:05:38 +0000 (23:05 +0000)
committerAlan Cox <alan@linux.intel.com>
Wed, 20 Feb 2019 23:05:38 +0000 (23:05 +0000)
commitef66604c118702a3a839bcd1a19b9e88e42b27df
tree6872508916a4bb739b2338da565d14a4e6b03084
parent90a07255e8a7da029e107baa5ddc39cf754045c0
zxdiv48: Initial code for 48K ZX Spectrum with DivIDE plus or ZXCF

Queueing this up for weekend testing.

It seemed a shame that the classic squishy key machines were being left out
so there was only one thing left to do - fix it.

It's a curious combination of the 128K/DivIDE model and the single process
in memory model. The kernel is banked four ways in the low 16K using memory
from the DivIDE Plus or ZXCF card. The area between the screen and 0x8000 just
about fits enough data for a minimal system providing the disk buffers are
banked. From 0x800-0xFBFF is then used for the application space with FC00-FFFF
holding the stacks, udata and a 256 byte space we may yet need.

The rest of the 512/1024K of RAM on the interface is then used as swap.

Task switching is slow (two x 32K ldir) but that is no worse than the disk
load/save used by other single process in memory platforms.

The biggest problem is the limited amount of unbanked kernel RAM. With the
screen at 0x4000-0x5AFF we only have a shade over 8K for all our common,
our data, constants and bank switching stubs. To get it to fit we end up
limiting our user space to 31K (versus 31.5K on most other 32K switched bank
platforms).
28 files changed:
Kernel/platform-zxdiv48/Makefile [new file with mode: 0644]
Kernel/platform-zxdiv48/README [new file with mode: 0644]
Kernel/platform-zxdiv48/buffers.c [new file with mode: 0644]
Kernel/platform-zxdiv48/commonmem.s [new file with mode: 0644]
Kernel/platform-zxdiv48/config.h [new file with mode: 0644]
Kernel/platform-zxdiv48/crt0.s [new file with mode: 0644]
Kernel/platform-zxdiv48/devices.c [new file with mode: 0644]
Kernel/platform-zxdiv48/devrd.c [new file with mode: 0644]
Kernel/platform-zxdiv48/devtty.c [new file with mode: 0644]
Kernel/platform-zxdiv48/devtty.h [new file with mode: 0644]
Kernel/platform-zxdiv48/discard.c [new file with mode: 0644]
Kernel/platform-zxdiv48/divide.c [new file with mode: 0644]
Kernel/platform-zxdiv48/divrd.h [new file with mode: 0644]
Kernel/platform-zxdiv48/fuzix.lnk [new file with mode: 0644]
Kernel/platform-zxdiv48/ide.c [new file with mode: 0644]
Kernel/platform-zxdiv48/kernel.def [new file with mode: 0644]
Kernel/platform-zxdiv48/loader-zxcf.s [new file with mode: 0644]
Kernel/platform-zxdiv48/loader.s [new file with mode: 0644]
Kernel/platform-zxdiv48/main.c [new file with mode: 0644]
Kernel/platform-zxdiv48/platform_ide.h [new file with mode: 0644]
Kernel/platform-zxdiv48/rd_divideplus.s [new file with mode: 0644]
Kernel/platform-zxdiv48/rules.mk [new file with mode: 0644]
Kernel/platform-zxdiv48/target.mk [new file with mode: 0644]
Kernel/platform-zxdiv48/tricks.s [new file with mode: 0644]
Kernel/platform-zxdiv48/zx48.h [new file with mode: 0644]
Kernel/platform-zxdiv48/zx48.s [new file with mode: 0644]
Kernel/platform-zxdiv48/zxcf.c [new file with mode: 0644]
Kernel/platform-zxdiv48/zxvideo.s [new file with mode: 0644]