[HN Gopher] Pre-emptive Z80 multitasking explainer
___________________________________________________________________
Pre-emptive Z80 multitasking explainer
Author : chorlton2080
Score : 48 points
Date : 2025-10-27 12:39 UTC (10 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| chorlton2080 wrote:
| Accompanying video:
| https://youtu.be/tMYGlYO3v9U?si=e0UUzCVyMtc6L2-L
| timonoko wrote:
| Funniest 8080-era multitasker was made by Siemens in 1976.
| Instead of allocating memory from common RAM, they just switched
| small RAMs mechanically. You only needed to dump registers at
| each switch. Particularly economical in 8080 which is not good
| for indexed memory models like Z80.
| rwmj wrote:
| "mechanically" with relays or something? Do you know the model
| number?
| PaulHoule wrote:
| It wasn't unusual for larger-scale microcomputers to have
| bank switching in the late 1970s to the mid-1980s.
|
| RAM chips usually have a "chip enable" pin, you might have
| chips that have 4k of addresses that are 8 bits wide [1] and
| fill out the 64k address space by having 16 RAM chips,
| feeding the least significant 12 bits to the RAM chips and
| the most 4 bits to a multiplexer that goes to the 16 RAM
| chips. All of the RAM chips are on the bus but only the one
| with CE set responds.
|
| The same kind of thinking could be applied to extend the
| address space past 16 bits, for instance you poke at some
| hardware register and that determines which chip enable pin
| get sets, there is really no limit on how much RAM you could
| attach to an 8-bit machine.
|
| A really advanced bank switching scheme for an 8-bitter was
| on the TRS-80 Color Computer 3
|
| https://www.chibiakumas.com/6809/coco3.php
|
| where the 64k address space was divided into 8k blocks and
| which might be backed by 128kB (minimum), 512kB (max from
| radio shack) or more RAM and you poked into a table which
| mapped virtual blocks to physical blocks. That wasn't too
| different from a modern memory management system greatly
| scaled down with the exception that systems like that rarely
| if ever had a true "executive" mode so nothing stopped user
| mode software from poking to change the memory map. The CoCo
| for instance had a multitasking OS called OS-9 that did
| muiltitasking like described in the explained if you had the
| orginal Color Computer, you could get Level II that supported
| more memory and if you never poked at those registers, some
| memory protection.
|
| [1] at least you did in 1979.
| whaleofatw2022 wrote:
| > 128MB (minimum), 512MB (max from radio shack)
|
| I think you meant KB here but now im also wondering how
| many MB you -could- actually scale tp and what the overhead
| would be due to the numbers of banks to switch between...
| PaulHoule wrote:
| I fixed the mistake... thanks!
| timonoko wrote:
| "Mechanically" is funnier expression. But kinda true because
| it switched also trunk lines in some small PBX. 8080 was
| bloody expensive in 1976 and RAMs were too. I only heard
| about because I was employed to design something similar for
| Telenokia.
| dcminter wrote:
| Unless you mean that a physically moving part caused the
| banks to switch then "mechanically" is the _wrong_ word
| here.
|
| If that _is_ how the bank switching was done then that 's
| fascinating and very _very_ surprising and I would love to
| hear more about it.
| timonoko wrote:
| Forgot this is HN where everything is taken literally.
| Humour is [Flagged].
|
| I myself made a Coin-Operated Telephone server, but in
| 1978 the processor was already cheaper and faster 8085.
| dcminter wrote:
| Low effort humour is discouraged, it's in the site
| guidelines and since it wasn't amusing, just confusing,
| perhaps you should skip the humour and consult them.
| rbanffy wrote:
| I think the big problem is that "mechanically" gives the
| wrong idea.
| magicalhippo wrote:
| Writing my own pre-emptive multitasker in Turbo Pascal on our x86
| as a self-taught teenager was a core memory thing.
|
| I recall spending a few days mulling over the exact sequence of
| instructions to save the state of the previous task without
| clobbering the flags or any registers.
|
| The result was that I could register functions (procedures) as
| tasks with their own little stack, and it would switch
| preemptively between them in a round-robin fashion.
|
| I'm not familiar with Z80 asm but from what I can gather it looks
| very similar to what I had. I was running in real mode so also
| had very limited resources for each task, and a hardcoded upper
| limit on the number of tasks.
|
| While I'm wildly more productive these days, I kinda miss how not
| having internet made accomplishments so much greater. It's like
| walking up a mountain on your own vs taking a tour bus to the
| summit.
| deepspace wrote:
| Ah, that brings back memories. I was using Intel iRMX on a
| commercial system in the mid 80s, and wanted to write a
| multitasking program on my IBM XT.
|
| So I wrote a pre-emptive multitasking iRMX clone in C and a bit
| of assembler. Ended up using it to develop a mildly successful
| POS system running on a single PC with several VT100 terminals
| attached.
| LarsDu88 wrote:
| So now we can do timeshare Nintendo Gameboy? /s
| gxd wrote:
| I actually wrote my first toy multitasker on a Gameboy Advance,
| although that's ARM7... Great little project. It's a joy to
| develop on an emulator with good debugging tools.
| juancn wrote:
| It made me think of https://en.wikipedia.org/wiki/SymbOS which is
| a quite impressive Z80 multitasking OS.
| PaulHoule wrote:
| If you look at old issues of Byte magazines you see a huge number
| of ads for high-end S100 system vendors that sold systems that
| could run MP/M, a multitasking OS for the Z80
|
| https://en.wikipedia.org/wiki/MP/M
| jandrese wrote:
| It's hard to imagine getting work done on a shared Z80 machine
| with everybody sharing the same 64kB of memory. Z80s were
| already plenty slow and the working memory tight. Sharing that
| with other users sounds miserable.
| PaulHoule wrote:
| Often they had bank switching to access more memory.
| facorreia wrote:
| It would usually be lightweight data entry, and it would work
| as fast as people could type (which was pretty fast for
| dedicated data entry workers).
| peterfirefly wrote:
| I had after school computer classes on a shared 8080 system
| running MP/M. Worked very, very well.
| deepspace wrote:
| We had shared S100 8080 systems in our EE lab at
| university. 7 terminals per CPU. Worked just fine for
| editing programs. But when everyone started a (Pascal)
| compile run at the same time, things got plenty slow.
| PaulHoule wrote:
| I'd note those competed with minicomputers, my high
| school had a PDP-8 circa 1981 when I was taking a few
| classes there while still in elementary school. The PDP-8
| could support three terminals of interactive BASIC or
| could be brought up in a single user mode where you got
| more memory and could run bigger programs like the
| Crowther & Woods ADVENTURE. A bigger school has a PDP-11
| with about 20 terminals. By 1985 or so my school got a
| VAX-11/730 which is basically like a modern computer.
| nickdothutton wrote:
| You had bank switching. So for example the MP/M system I used
| (Altos) would allow several terminals (serial) of which each
| would get a command processor in a bank. I think it had
| 256KB, maybe 512. You know, I never ever remember thing thing
| crashing, even with multiple terminals/sessions.
| phire wrote:
| Multiuser machines could get away with surprisingly little
| memory; They had some major advantages over home computers:
|
| Users were all connected via CRT terminals over serial, so
| you didn't need to waste any memory on screen buffers. This
| also reduced CPU usage as the user wouldn't get any CPU time
| until they pressed a key, and the scheduler might queue up
| multiple key presses before even switching to the user's task
| (while still showing immediate feedback)
|
| They also had superior IO. Home computers were connected to
| slow floppy drives (at best, some were still using tape) so
| they typically tried to keep the whole working set in memory.
| But multi-user machines had relatively fast hard drives and
| could afford to shuffle the working set in and out of memory
| as needed, with DMAs handling the actual transfer in the
| background.
|
| As others have pointed out, these machines had bank
| switching. But I doubt such machines were ever configured
| with more than 256k of memory, with 128k being more typical.
| Wikipedia claims 32k was the absolute minimum, but with very
| little free memory, so I suspect 64k would be enough for
| smaller offices with 4-6 users.
| Martin_Silenus wrote:
| Did this on my Atari ST 68000 back in the 90s... I did not even
| heard about the word "preemptive" at the time (guys, I did not
| even know the Amiga OS did this natively), it was just an idea.
| Task switching every 10 or 20 HBL or so. I was so glad to have
| two routines running, each one changing color index 0 register to
| red and blue so I can see it realtime.
| gttalbot wrote:
| What are the 5 NOPs for before the RETI?
___________________________________________________________________
(page generated 2025-10-27 23:01 UTC)