After looking for bugs in my code for a couple of days I came to the
conclusion that the compiler might be generating bad code (which shows
how humble I have become - back in the Burroughs Algol days I always
blamed the compiler first ;-)
In one case I have something like
[add: addr+1. test: (memory at: addr)] whileFalse.
and the loop kept going right past the iteration where 'test:' returned
true. Running the same thing step by step in the debugger worked.
Finally I decided to save a snapshot, quit the VM, restart everything
and then this started working.
In another case I have
word: (memory at: addr) && 16r0FFFF.
and I verified that "memory at: addr" is returning 16r01515 yet word is
being assigned 16r0FFFF. Single stepping makes it work. The
save/restore trick I used above didn't work in this case. In fact,
eliminating the "halt" and allowing it to continue after having single
stepped this a few times showed that it worked until it exited the
inner loop and then it went back to the broken behavior. So I would
guess that the NIC is generating correct code but the SIC isn't. The
obvious next step is to disable the SIC and see what happens, but I
will only be able to do that on Friday.
This is the 4.1.5 VM on a Ultra 5 running Solaris 2.8.