this function (here reorganized to avoid the register allocation
problem) was the problem: if *buf were a d10 already, i don't
think you'd have seen this problem.
int32
Map_WriteB (uint32 ba, int32 bc, uint8 *buf)
{
uint32 lim;
a10 pa10;
d10 mask, shift;
lim = ba + bc;
for ( ; ba < lim; ba++) { /* by
bytes */
pa10 = Map_Addr10 (ba, 1); /* map addr */
if ((pa10 < 0) || MEM_ADDR_NXM (pa10)) { /* inv map or
NXM? */
ubcs[1] |= UBCS_TMO; /* UBA times
out */
return lim - ba; /*
return bc */
}
mask = 0377;
shift = ubashf[ba & 3];
M[pa10] = M[pa10] & ~(mask << shift);
M[pa10] |= (d10)*buf++ << shift;
}
return 0;
}
- erik