lib2.i contains general-purpose library routines that are not included
in the standard library.
The first section, with entry at lines (2000), (2010) and (2020),
was written for the Life program. Line (2000) is the entry point
for a decrement routine setting .1 <- .1 minus #1. This is very
similar to the increment routine (1020) in the system library,
which I also use. Line (2010) is the decrement and branch on zero
operation. It decrements .1, then if .1 is not zero returns to the
calling point, but if .1 is zero pops an additional entry off the
RESUME stack and returns to that point instead. Line (2020) is an
alternative entry point to the (1020) routine which performs an add
bit operation. It sets .1 <- .1 plus .2, where .2 is already known
to be either #0 or #1.
For the pi and primes programs I added the (2030) routine, which
performs a 16-bit division with remainder. It is faster than the
(1040) routine for two reasons: First, it is a true 16-bit version,
whereas the (1040) routine just shifts over its operands and then
calls the 32-bit division routine (1550). Second, the (1550) routine
generates a remainder as part of the computation, but then simply
throws it away. I needed the remainder, so I have my (2030) routine
return it in .4 and the quotient in .3. In other respects this is
just a 16-bit translation of the (1550) routine.
(2040) and (2049) are entry points to an exponentiation routine that
raises .1 to the .2 power and returns the answer in :1. If entered
through (2040) the routine dies with an error on overflow. If entered
through (2049) then .4 is set to #2 if there is an overflow, otherwise
.4 is set to #1. There is a more detailed description of how this
routine works on the web page.
Louis Howell
May 27, 1996