On Fri, 3 Dec 2004, Tom Jennings wrote:
> I've been trying to recall, with no success, how subroutine
> calls were implemented in the 8x300. I used to write code for
On Fri, 3 Dec 2004, Peter C. Wallace wrote:
"The SMS300 has no subroutine or interrupt
handling logic" ... "subroutine
logic can be created with an XEQ instruction and an appropriate jump table,
but this is rather clumsy, in most cases it would be simpler to do without
subroutines"
Well yes, strictly speaking it doesn't really support
subroutines. The mechanism WAS clumsy, and there were a limited
number of "returns" available due to the jump table business
(basically copies a number from the table to the "PC"). If I
could find so much as the instruction set I could re-create it.
Isnt the 8X300 a predecessor to the PIC somehow?
Well Microchip's PICs are CISC relative to the SMS/Signetics
thing. Seven? instructions, 16 special registers.
The code I worked on was a real-time video processor, written
by a Real Programmer named Cal Hawke or Hawkes (Avco-Everett
Research Lab, my one sole defense job). He was a grad
student? maybe 3 yrs older than me.
There was a CCD camera mounted on a gymbal looking out the
side of a Boeing 707 or something. It flew around looking for
objects reentering the atmosphere, incandescing. The 8x300 code
was meant to (...) generate X, Y data to feed the error loop
of the servo driving the gymbal.
The code centroided a blob/bright spot and output coords in some
local system. Cal had also encoded a debugger! into the code
so that you could talk to it with a serial port as it worked.
There was 2K of data and over 1K of code, I think, with complex
and dangerous (to the programmer's brain) bank-switching using
ports. Code was tested by burning $20 bipolar fuse PROMs. It
ran at 4MHz, one instruction per clock.
THe code was spectacularly intricate, it's hard to explain just
how weird it was with all the interleaved user interface and
the video code. No stack, no interrupts, just one long thread
of code. I could barely hang on. Cal was leaving (as all grad
students do) and I took over maintaining it.
Back to the point, it used a lot of "subroutines".
Like a PIC, the instructions were wider (16?) than the data buss
(8 bits).
The instructions I remember are:
XMT r "transmit" a constant to reg r (same as movlw), also
does "jump"
ADD r aux + r --> aux
XEC ? execute instruction as "one instruction subroutine" not sure arg
Well that's about half of them!