#define MEMORY ((int*)0) int _readb__ (int addr) { int waddr = addr & 0x3fffffff; int word = MEMORY[waddr]; if (addr < 0) { word = RHW(word); } if (addr << 1 < 0) { word = RBP(word); } return word & 0xff; } void _storeb__ (int value, int addr) { int waddr; int mask = -256; value &= 255; if (addr << 1 < 0) { value = RBP(value); mask = RBP(mask); } if (addr < 0) { value = RHW(value); mask = RHW(mask); } waddr = addr & 0x3fffffff; MEMORY[waddr] = value | (mask & MEMORY[waddr]); } int _readw__ (int addr) { int waddr = addr & 0x3fffffff; int word = MEMORY[waddr]; if (addr < 0) { word = RHW(word); } return word & 0xffff; } void _storew__ (int value, int addr) { int waddr; int mask = -65536; value &= 0xffff; if (addr < 0) { value = RHW(value); mask = RHW(mask); } waddr = addr & 0x3fffffff; MEMORY[waddr] = value | (mask & MEMORY[waddr]); } unsigned _lsl__ (unsigned val, int shift) { shift &= 31; if (shift >= 16) { val &= 0xffff; val = RHW(val); shift -= 16; } while(shift) { val <<= 1; shift--; } return val; } unsigned _lsr__ (unsigned val, int shift) { shift &= 31; if (shift >= 16) { val = RHW(val); val &= 0xffff; shift -= 16; } while(shift) { val >>= 1; shift--; } return val; } int _asr__ (int val, int shift) { shift &= 31; if (shift >= 16) { if (val < 0) { val = RHW(val); val |= 0xffff0000; } else { val = RHW(val); val &= 0xffff; } shift -= 16; } while(shift) { val >>= 1; shift--; } return val; }