[comp.sys.transputer] More undocumented instructions

clare@tesun2.UUCP (Peter Clare) (03/20/90)

Further to the recent discussion on undocumented transputer instructions,
here are some more instructions that I am aware of (in addition to the
"testhardchan" instruction mentioned previously).  I know little more
about these instructions other than their operation codes and their
mnemonics:

    Operation code (hex)		Mnemonic
    --------------------		--------
		23			testlds
		24			testlde
		25			testldd
		26			teststs
		27			testste
		28			teststd
		2D			testhardchan
		80			fpsttest
		85			fpldtest
		A7			fpentry3
		A9			fpentry2

>From the mnemonics, one can guess at what some of these instructions might
do.  In particular, the two extra fpentry instructions look interesting.
If they work like the normal fpentry instruction then they could lead to
a whole load of extra floating point instructions.  If you are familiar
with the transputer instruction set then you will see that these extra
instructions fill in some of the "gaps" between the documented instructions.

Here are some questions.  Can anyone on the transputer grapevine provide
any answers?

    1)	Are there any more undocumented instructions?

    2)	What do these instructions do?  How do they affect registers and
	what are the cycle times?

    3)	Are any of these instructions of any real use other than for testing
	purposes?

    4)	Which instructions are supported on which types of transputer?


===============================================================================
Peter Clare
THORN EMI Central Research Laboratories
Dawley Road
Hayes
Middlesex
UB3 1HH

Tel:		01-848-6521
Fax:		01-848-6565
Eurokom:	Peter Clare THORN EMI
email:		clare@thorn-emi-crl.co.uk
===============================================================================

zenith-steven@cs.yale.edu (Steven Ericsson Zenith) (03/21/90)

In article <9003201450.AA01756@flay.thorn-emi-crl.co.uk>,
clare@tesun2.UUCP (Peter Clare) writes:
   I know little more
  about these instructions other than their operation codes and their
  mnemonics:

     Operation code (hex)		Mnemonic
     --------------------		--------
 		23			testlds
 		24			testlde
 		25			testldd
 		26			teststs
 		27			testste
 		28			teststd

...
 
     2)	What do these instructions do?  How do they affect registers and
	what are the cycle times? 

You mean the load and store Status Register, E Register and D Register?
Nah ... you don't want to know :-) (tease!). Maybe you should ask an
INMOS FAE... maybe he doesn't know. Maybe you should read my book when
it comes out (how to put the fear of god in INMOS :-) Nah! just kidding
guys ... honest!)

--
.                                                                        .
Steven Ericsson Zenith              *            email: zenith@cs.yale.edu
Department of Computer Science      |            voice: (203) 432 1278
Yale University 51 Prospect Street New Haven CT 06520 USA.
     "All can know beauty as beauty only because there is ugliness"

malc@bilbo.inmos.co.uk (Malcolm Boffey) (03/27/90)

This is in response to queries about undocumented instructions for loading and
storing the D, E, S registers.

In addition to the published registers :- A, B, C, I, W, queue pointers etc,
there are a few (D, E) that are used to hold intermediate values in some of
the instructions. As they are not saved during interrupts, there seems little
use for them in low priority, and they can only be used safely at high priority
if you know what instructions are able to corrupt them (which I don't). Anyway,
it is easier to use another local variable.
	The status register (S) holds miscellaneous bits of state like the Error
flag and the HaltOnError flag, for which there are already enough instructions
to access and alter them.
	There are one or two other instructions that are used for testing, none
of them terribly usefull or interesting. Also, it is more or less a certainty
that they will be discontinued in future transputers, or at least change their
function significantly.
	malc.
 Malcolm Boffey, Transputer Group, Inmos.   | Inmos Ltd,
UK:   malc@inmos.co.uk                      | 1000 Aztec West, Almondsbury,
US:   malc@inmos.com                        | Brisol BS12 4SQ. 
UUCP: ...uunet!mcsun!ukc!inmos!malc         | Tel. +44 454 616616 x522

nick@lfcs.ed.ac.uk (Nick Rothwell) (03/29/90)

In article <4918@ganymede.inmos.co.uk>, malc@bilbo (Malcolm Boffey) writes:
>This is in response to queries about undocumented instructions for loading and
>storing the D, E, S registers.
>
>In addition to the published registers :- A, B, C, I, W, queue pointers etc,
>there are a few (D, E) that are used ...
>	There are one or two other instructions that are used for testing, none
>of them terribly usefull or interesting. Also, it is more or less a certainty
>that they will be discontinued in future transputers, or at least change their
>function significantly.

> Malcolm Boffey, Transputer Group, Inmos.   | Inmos Ltd,

This is fascinating. Over in comp.sys.mac there is continual screaming
and shouting and wailing and gnashing of teeth over numerous
violations of the interface guidelines. For example, some of the good
ol' MicroSoft products only work if you run them first (they use the
top 8 bits of the address space for tags), there are programs which
only drive particular versions of some of the printers, there are
drawing programs which reference screen memory directly (and hence
break on the newer machines), and so on. Despite Apple documenting the
programming interface for the Mac, and giving (admittedly pricey)
developer technical support, and not documenting anything lower
down, hackers still turn out *commercial products* like this.

So, I'm surprised that someone from Inmos will quite happily chat away
about undocumented features of the Transputer. Be warned, some
programmers will happily use this stuff, and as the new transputers go
out into the world, many many pieces of software will go "kablowie"
and fall flat on the ground in perfect unison. I hope Inmos doesn't
end up with the blame (perhaps their role as hardware vendor makes
this a different situation).

Me, I'm still irritated that I asked Inmos for the (proper) transputer
instruction set back around 1985 and they said "No; go and program in OCCAM."

	Nick.
--
Nick Rothwell,	Laboratory for Foundations of Computer Science, Edinburgh.
		nick@lfcs.ed.ac.uk    <Atlantic Ocean>!mcsun!ukc!lfcs!nick
~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~
i l l  C l o u s e a u          kill clouseau          K  I  L  L     C  L

malc@bilbo.inmos.co.uk (Malcolm Boffey) (04/06/90)

In article <3159@castle.ed.ac.uk> nick@lfcs.ed.ac.uk (Nick Rothwell) writes:
>In article <2076@ifi.informatik.uni-stuttgart.de>, homeis@cs3 writes:
>>Inmos should give away more information about the instruction set, and this
>>should be done officially.
>
>Sure, or else state that some of the side-effects manifested by
>current hardware in some circumstances is, er, "officially
>undefined" and subject to change.
>
>>Dieter Homeister, Universitaet Stuttgart,
>
>		Nick.

As we have stated that the value of Creg is undefined when popping the stack,
whereas in many (but not all) cases it keeps its old value, we are not obliged
to keep the same behaviour in future transputers. In fact, it is quite likely
that on the H1, when we say undefined, the value will be next to impossible to
predict, and be different every time the program is run. It is not (just :->)
that we are being awkward, just that we are making the most of the instruction
set as currently defined.
	malc.

P.S. As with everything that I say, this is probably unrelated to official
Inmos policy. Standard disclaimers apply.
 Malcolm Boffey, Transputer Group, Inmos.   | Inmos Ltd,
UK:   malc@inmos.co.uk                      | 1000 Aztec West, Almondsbury,
US:   malc@inmos.com                        | Brisol BS12 4SQ. 
UUCP: ...uunet!mcsun!ukc!inmos!malc         | Tel. +44 454 616616 x522