andyr@inmos.com (Andy Rabagliati) (03/09/90)
This is a piece of OCCAM code that may help Klaus and others
in their reset problems. It is really a job for network loaders -
I find it useful when using the INMOS toolset products.
It puts a Transputer into the state just before boot - the
user will not be able to tell if the Transputer has REALLY
been reset or whether it is faking it ...
It will however only boot down bootchan - you could put an
ALT here if you wish but I find it more convenient the way it is.
This means that if you wish to subsequently load a transputer
with bootable code reset need not be asserted.
Cheers, Andy Rabagliati - INMOS Central Applications US.
--{{{ stop
VAL bootchan IS ? :
-- THIS CODE MUST BE ABOVE MINT + 256 to work
--{{{ HARD chan DECLs
[4]CHAN OF ANY INPUT :
PLACE INPUT AT 4 :
--}}}
SEQ
--{{{ reset channels
SEQ i = 1 FOR 3
VAL thischan IS (i+bootchan)\4 :
CHAN OF ANY inchan IS INPUT[thischan] :
CHAN OF ANY outchan IS OUTPUT[thischan] :
SEQ
GUY
LDLP inchan
RESETCH
LDLP outchan
RESETCH
--}}}
INT memstart :
BYTE len :
[4]BYTE bootstart :
SEQ
--{{{ find memstart as we might be on T414 or T800 so look
GUY
MINT
LDNLP 18 -- memstart ?
STL memstart
LDL memstart
LDLP bootstart
LDC 4
MOVE
-- PLACE WHAT IS KNOWN TO BE START OF BOOT CODE HERE
VAL [4]BYTE STARTBOOT IS [$22(BYTE), $BA(BYTE), $90(BYTE), $60(BYTE)] :
-- This works for toolset code (currently - otherwise look)
-- VAL [4]BYTE STARTBOOT IS [$25(BYTE), $0A(BYTE), $21(BYTE), $F5(BYTE)] :
-- THIS WORKS FOR CHECK code
IF
IF i = 0 FOR 4
STARTBOOT[i]<>bootstart[i]
SEQ
GUY
LDL memstart
LDNLP 10
STL memstart
TRUE
SKIP
--}}}
--{{{ boot
COMMAND ? len
GUY
LDL memstart
LDLP COMMAND
LDL len
IN
LDLP COMMAND -- boot link
LDL len
ADC 3 -- round up to word
LDC 1
BCNT
NOT
ADC 1
AND
LDL memstart
ADD -- Wptr
LDL memstart -- for GCALL
REV
GAJW
REV -- memstart
GCALL
--}}}
--}}}