public int read() { if (buffer_ptr < 4) { m_addr++; return(buffer[buffer_ptr++]); } if (((m_addr & 0x3) == 0) && ((m_end - m_addr) > 3)) { int i = CRunTime.memory[m_addr >> 2]; for (int j = 0; j < 4; j++) { int b = unchecked (i & 0xff); buffer[3 - j] = b; i = (unchecked (i >> 8)); } buffer_ptr = 1; m_addr++; return(buffer[0]); } if (m_addr < m_end) { return(CRunTime.memoryReadByteUnsigned(m_addr++)); } return(-1); }
/* The nasty lwl/lwr and swl/swr instructions */ public static int memoryReadWordLeft(int address) { int b0 = CRunTime.memoryReadByteUnsigned(address + 3); int b1 = CRunTime.memoryReadByteUnsigned(address + 2); int b2 = CRunTime.memoryReadByteUnsigned(address + 1); int b3 = CRunTime.memoryReadByteUnsigned(address + 0); return(b0 | (b1 << 8) | (b2 << 16) | (b3 << 24)); }