On Tue, 2003-11-18 at 14:06, Eric Smith wrote:
Tom Jennings wrote:
Strictly-speaking, Microchip's PICs are NOT
COMPUTERS. Of course I don't
make that distinction when working with them.
I strongly disagree with any definition of "computer" that *requires*
the machine to have a von Neumann architecture. In fact, most people
do not even define computer to necessarily be of the stored program
variety, although I'm willing to accept such a definition.
Oh I don't mean to be that insistent about it, especially in practical
terms, but it is the pivotal definition of computing machinery, the
machine that modifies itself, which is what makes it breathtakingly
unique. It's an important distinction to be ABLE to make, not
necessarily on objects we work with though, I agree.
The earliest PICs (eg. the NMOS PIC1654 from General
Instruments in
the 1970s, and the CMOS PIC16C54 from Microchip in the 1980s) do have
a strict Harvard architecture. Program memory is in an entirely
separate address space from data memory, and they have no way for the
program to be able to read or write an arbitrary location in program
memory. Table lookup works because there is a way to do a branch to
a computed address (though it is limited to only a portion of the program
address space), and there is a single instruction that loads the
accumulator with a constant and returns (RETLW).
Yup. There's a little blurriness in the Microchip PICs, in that they
have a stack that contains return addresses, but some machines, like the
ancient Signetics 8x300, didnt. It had what appeared to be "subroutine
calls" but they were basically numbered jumps managed by the assembler,
and there were a limited number available.
I cannot recall the mechanism used, and would really like to know if
anyone recalls, how the assembler managed the "return" jump tables!