http://wotug.ukc.ac.uk/parallel/vendors/inmos/archive-server/checkocc/testt32a.occ
In simple terms what does STEP do?
Gavin
STEP Prefix für OPCODES (GUY)
=========================
STEP PrimaryInstruction (incl. pfix, nfix, opr, …). Operand ignored.
-> ( Opcode & 0xF0 ) + 0x10800
STEP AJW 35 = 0xB0+0x10800 = 0x108B0 = 0x21 0x20 0x28 0x2B 0xF0
STEP SecondaryInstruction
-> Opcode + 0x800
STEP LDDEVID = 0x17C+0x800 = 0x97C = 0x29 0x27 0xFC
IIRC - most of them are type specific and not of general (not even
specific) interest. I think they are a form of single-stepping the
microcode, but maybe I'm totally wrong.
-Mike
I’ve done a bit of further digging on the intranet and in the ‘occam-2
language implementation manual’ SW-0044-4 (Inmos Ltd) it discusses -
Inline transputer code insertion. In section 12.1 GUY Construct, it
states:
The STEP form is provided to allow testing of transputer instructions.
It can be replaced by use of the OPR primary instruction so is
obsolete.
Thus it looks simply like it was part of the old GUY syntax to support
the creation of any transputer instruction code. Superseded by ASM
with OPR (i.e. PFIX #n, PFIX #m, OPR #o).
Gavin
STEP GT (from from t425a.occ) -- Force NOT ZbusSubLessThan0;
is the same as OPR GT? What should that mean? There is a hidden
preprocessor which replaces GT with 9? This sounds very strange to me.
GT is OPR #9 with MemoryCode #F9
STEP GT is OPR #809 with MemoryCode #28 #20 #F9
OPR >= #800 is:
Step MOVEformWriteCount OPR #AA4 1010 1010 0100
Step MOVEintr OPR #8E2 1000 1110 0010
MOVE OPR #4A 0100 1010
Step WCNTshiftPos OPR #865 1000 0110 0101
Step WCNTtestSign OPR #AE3 1010 1110 0011
WCNT OPR #3F 11 1111
Step DIVloopAdd OPR #929 1001 0010 1001
Step DIVloopSub OPR #92B 1001 0010 1011
DIV OPR #2C 0010 1100
Step MulinitLoop OPR #A89 1010 1000 1001
Step MULshift OPR #909 1001 0000 1001
MUL OPR #53 1010 0011
For me this looks like entrypoints in the microcode steps.
Also the text (also from t425a.occ)
-- cannot force IncOregCarryOut through single stepping,
because
-- Oreg is used to form microword address; this is observable
through
-- move1.hex to move12.hex.
-- If IncOregCarryOut is asserted in a single-stepped
microword, then
-- the Oregister is loaded both from the incrementer and from
the
-- next operand at the same time (ie Gnd and Vdd shorted
through 2 NEs).
confirms my speculation.
STEP WCNTshiftPos is different between first and later generations.
test222a.occ OPR #8E9
test222b.occ OPR #8E9
test414a.occ OPR #8E9
test425a.occ OPR #865
test800a.occ OPR #865
test801a.occ OPR #865
But - It's only speculation. Maybe the result of WCNT and STEP WCNT is
the same, but that’s not the purpose of the STEP - prefix.
-Mike