[This followup was posted to comp.os.cpm and a copy was sent to the
cited author.]
article <
0ce55c08-b464-4363...@googlegroups.com>,
dr_...@ntlworld.com says...
>
> I'm pretty sure the Superbrain is using an interrupt to refresh the
> screen, draw a clock (if enabled) and poll for keys
> (at least one of the BIOSes has a type ahead buffer). I'm not sure if
> this counts - it is definitely not calling the BDOS; all this is in
> BIOS space.
... <snip>...
Some miscellaneous facts and observations about interrupts in the
CBIOS and CP/M multi-tasking -
The Conkey CBIOS provided an interrupt-driven software real-time
clock, and a hook for a timer-driven (interrupting) user-space routine.
The CBIOS used timer-driven interrupts to buffer the console and
modem serial ports. The floppy-disk data transfers were NMI driven.
The CBIOS also has a feature that allowed the cold-boot entry to be
re-used as a warm-boot intercept, but it was never used by anything.
It would have enabled some background task and hooks to survive
through warm boots.
Some CP/M CBIOS's had to sync their console output to a hardware
screen-driver's vertical blanking timing. That vertical blanking
was a de-facto (or actual) CBIOS interrupt.
There was at least one CP/M background print-spooler shim that used
CBIOS and BDOS hooks to access and print from a file in a
multi-tasking fashion.
Various Modem and Kermit file transfer programs used the CBIOS I/O
status calls for user-space multi-tasking of keyboard, screen, modem,
and disk activity.
Of course UZI provided unix-like multi-taking on Z80 systems w/
timers and hard-disks. It had some provisions for running
(small TPA requirement) CP/M binaries (in parallel, w/ pipes, etc).
There was at least one program (w/ BDOS and CBIOS hooks, etc.)
that claimed to provide (emulate) piped I/O between running CP/M
binaries (i.e. task swapping).
Forth has its own cooperative multi-tasking system, which I
think works on CP/M versions of (fig) forth.
One problem that CP/M emulator programs often face is that
running CP/M binaries w/ I/O polling loops causes the emulator
to clog the host CPU usage. Work-arounds that free-up the
emulator CPU by slowing-down the I/O status checks could be
applied in a CBIOS to make some elbow room for multi-tasking.