コード例 #1
0
    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);
    }
コード例 #2
0
    /* 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));
    }