Пример #1
0
static void IntReq(int num)
{
	UINT32 IntEn=program_read_dword_32le(0x01800c08);
	UINT32 IntPend=program_read_dword_32le(0x01800c0c);
	if(IntEn&(1<<num))
	{
		IntPend|=(1<<num);
		program_write_dword_32le(0x01800c0c,IntPend);
		cpunum_set_input_line(0,SE3208_INT,ASSERT_LINE);
	}
#ifdef IDLE_LOOP_SPEEDUP
	FlipCntRead=0;
	cpunum_resume(0,SUSPEND_REASON_SPIN);
#endif
}
Пример #2
0
INLINE UINT32 read_dword_unaligned(UINT32 address)
{
	if (address & 3)
		return program_read_byte_32le(address) | program_read_byte_32le(address+1)<<8 | program_read_byte_32le(address+2)<<16 | program_read_byte_32le(address+3)<<24;
	else
		return program_read_dword_32le(address);
}
Пример #3
0
INLINE UINT32 READLONG(offs_t address)
{
	/* aligned reads are easy */
	if (!(address & 3))
		return program_read_dword_32le(address);

	/* misaligned reads are tricky */
	return program_read_dword_32le(address & ~3) >> (address & 3);
}
Пример #4
0
static READ32_HANDLER(FlipCount_r)
{
#ifdef IDLE_LOOP_SPEEDUP
	UINT32 IntPend=program_read_dword_32le(0x01800c0c);
	FlipCntRead++;
	if(FlipCntRead>=16 && !IntPend && FlipCount!=0)
		cpunum_suspend(0,SUSPEND_REASON_SPIN,1);
#endif
	return ((UINT32) FlipCount)<<16;
}
Пример #5
0
INLINE UINT32 cpu_read32( int addr )
{
	UINT32 result = program_read_dword_32le(addr&ADDRESS_MASK);

	/* Unaligned reads rotate the word, they never combine words */
	if (addr&3) {
		if (ARM_DEBUG_CORE && addr&1)
			logerror("%08x: Unaligned byte read %08x\n",R15,addr);

		if ((addr&3)==1)
			return ((result&0x000000ff)<<24)|((result&0xffffff00)>> 8);
		if ((addr&3)==2)
			return ((result&0x0000ffff)<<16)|((result&0xffff0000)>>16);
		if ((addr&3)==3)
			return ((result&0x00ffffff)<< 8)|((result&0xff000000)>>24);
	}

	return result;
}
Пример #6
0
INLINE UINT32 arm7_cpu_read32( int addr )
{
    UINT32 result = 0;

    /*Handle through normal 32 bit handler */
    result = program_read_dword_32le(addr);

    /* Unaligned reads rotate the word, they never combine words */
    if (addr&3) {
#if ARM7_DEBUG_CORE
        if(addr&1)
            LOG(("%08x: Unaligned byte read %08x\n",R15,addr));
#endif

        if ((addr&3)==3)
            return ((result&0x000000ff)<<24)|((result&0xffffff00)>> 8);
        if ((addr&3)==2)
            return ((result&0x0000ffff)<<16)|((result&0xffff0000)>>16);
        if ((addr&3)==1)
            return ((result&0x00ffffff)<< 8)|((result&0xff000000)>>24);
    }
    return result;
}
Пример #7
0
INLINE void WWORD(offs_t addr, UINT16 data)
{
	if (addr & 1) fprintf(stderr, "Unaligned word write @ %06X, PC=%06X\n", addr, dsp32.PC);
	program_read_dword_32le((addr), data);
}