This may not be entirely related, but I've been building an open-source kernel in z80 assembly for three and a half years now: <a href="https://github.com/KnightOS/kernel" rel="nofollow">https://github.com/KnightOS/kernel</a><p>I might chime in with a perspective of someone working on 70s hardware without memory protection, ring modes, or enough RAM to page it around. In my system, all processes run as root (since we can't stop them from doing so on a z80), and share one big memory block. The kernel takes up the first 0x500 bytes of memory (which can be changed at kernel compile time), and the remaining 0x7A00 bytes of memory is distributed among the "userspace". Programs allocate memory here in a first-come, first-serve basis, and their own program memory, stack, and allocated space are all thrown together in this big userland memory space.<p>Not sure if that's a valuable perspective, but thought you might find it interesting. Here's some links:<p><a href="https://github.com/KnightOS/kernel/blob/master/docs/memory.md" rel="nofollow">https://github.com/KnightOS/kernel/blob/master/docs/memory.m...</a><p><a href="https://github.com/KnightOS/kernel/blob/master/src/00/memory.asm" rel="nofollow">https://github.com/KnightOS/kernel/blob/master/src/00/memory...</a>