Think I've sorted it,
It does seem to be down to the cache not flushing before jumping to the newly relocated code.
Basically, I've defined in the board.h file
<CODE># define __HAVE_ARCH_MEMMOVE# define __HAVE_ARCH_MEMCPY
</CODE>
and then implemented my own assembler versions of these two functions in cache.s
and all seems to be good now. The assembler version incorporate the explicit dcache flush code as per the altera software manual page 7-5 on each byte moved. It's little bit cumbersome but seems to work fine. (If anyone has a similar problem and needs the code please email me)
thanks everyone.