Exemplo n.º 1
0
void lsi53c810_device::dmaop_block_move()
{
	UINT32 address;
	UINT32 count;
	INT32 dsps;

	address = FETCH();
	count = dcmd & 0x00ffffff;

	// normal indirect
	if (dcmd & 0x20000000)
		address = m_fetch_cb(address);

	// table indirect
	if (dcmd & 0x10000000)
	{
		dsps = (INT32)address&0xffffff;
		// sign extend
		if (dsps & 0x00800000)
		{
			dsps |= 0xff000000;
		}
		logerror("table offset: %x, DSA = %x\n", dsps, dsa);
		dsps += dsa;

		logerror("Loading from table at %x\n", dsps);
		count = m_fetch_cb(dsps);
		address = m_fetch_cb(dsps + 4);
	}

	logerror("block move: address %x count %x phase %x\n", address, count, (dcmd>>24)&7);

	if (scntl0 & 0x01)
	{
		/* target mode */
		fatalerror("LSI53C810: dmaop_block_move not implemented in target mode\n");
	}
	else
	{
		/* initiator mode */
		logerror("53c810: block_move not actually implemented\n");
	}
}
Exemplo n.º 2
0
UINT32 lsi53c810_device::FETCH()
{
	UINT32 r = m_fetch_cb(dsp);
	dsp += 4;
	return r;
}
Exemplo n.º 3
0
uint32_t lsi53c810_device::FETCH()
{
	uint32_t r = m_fetch_cb(dsp);
	dsp += 4;
	return r;
}