I had previously given an overview of the changes in my processor
designs, but I have made yet some more changes since then. The most
significant one was hiding the register banks under a sliding window.
The 15 register window can be moved up or down by any number of
registers. This is backed up by two banks for 16 registers each. When
the window moves such that R0 is no longer in bank A, then the two banks
are adjusted so that it is. Register 15 reads as zero when explicitly
addressed as a source.
The original design had two prefix instructions to extend immediate
values from 4 to 16 (or 32) bits. But prefixes are more interesting when
used to get arbitrary sized values, not just two possible sizes. And
they had the problem that their bits had to be shifted before they could
be combined with the four bits in the base instruction. So I felt that
it would be better to reserve the immediate values of 14 and 15 to
indicate that the actual value is the following 16 or 32 bits. These
bits will be aligned correctly, which helps a lot. This freed up two
instructions which were used for "store byte", eliminating the tagged
pointers (but there are still tags for integer/objects) to make it
easier to adapt C compilers. There is no "load byte" but this isn't hard
to emulate with existing instructions.
The "jump and link" now doubles as "send" and as extension instructions.
Since the stack would have to be adjusted before and after every send
(though though such "change stack" instructions can be merged when back
to back) it is tempting to add this function to the "jump and link"
instruction itself in order to make the code shorter. But then a special
"return" instruction would be needed and the original state of the stack
would have to be saved somewhere. A good place for this would be the top
four bits of the PC. This would limit the code cache to 256MB, but
considering that the Transmeta chips only had 8MB this isn't as small as
it might seem. I haven't made this change, yet.
I have changed my internet connection (same ISP, though) and have been
having problems with my swiki pages since. They work just great on the
local network, and the regular pages at port 80 seem fine. But when you
make more than four simultaneous connnections to port 8080 it locks up
for some ten minutes. Each swiki page has a bunch of icons, so this
problem happens all the time.