This patch provided by Jay Kulpinski of General Dynamics Advanced Information Systems. Description from provider: The issue is that GET() uses the AS field in the status word to compute the physical address of the desired word. If you update the status word before fetching the new value of the instruction counter, the IC will be fetched using the new address space instead of the old. $ diff -uNr orig/sim1750-2.3b/src/cpu.c sim1750-2.3b/src/cpu.c --- orig/sim1750-2.3b/src/cpu.c 1997-02-10 04:12:24.000000000 -0500 +++ sim1750-2.3b/src/cpu.c 2012-10-20 23:48:07.000000000 -0400 @@ -1916,8 +1916,8 @@ { GET (DATA, source, (short *) &source); GET (DATA, source, (short *) &simreg.mk); - GET (DATA, source + 1, (short *) &simreg.sw); GET (DATA, source + 2, (short *) &simreg.ic); + GET (DATA, source + 1, (short *) &simreg.sw); } return (nc_LSTI); @@ -1940,8 +1940,8 @@ else { GET (DATA, (ushort) source, (short *) &simreg.mk); - GET (DATA, (ushort) source + 1, (short *) &simreg.sw); GET (DATA, (ushort) source + 2, (short *) &simreg.ic); + GET (DATA, (ushort) source + 1, (short *) &simreg.sw); } return (nc_LST);