i8089: add support for DMA_WAIT_FOR_SOURCE_DRQ
This commit is contained in:
parent
3db351f5c9
commit
cf7eb6a396
@ -51,10 +51,13 @@ const device_type I8089_CHANNEL = &device_creator<i8089_channel>;
|
||||
i8089_channel::i8089_channel(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, I8089_CHANNEL, "Intel 8089 I/O Channel", tag, owner, clock, "i8089_channel", __FILE__),
|
||||
m_write_sintr(*this),
|
||||
m_iop(NULL),
|
||||
m_icount(0),
|
||||
m_xfer_pending(false),
|
||||
m_dma_value(0),
|
||||
m_dma_state(DMA_IDLE)
|
||||
m_dma_state(DMA_IDLE),
|
||||
m_drq(0),
|
||||
m_prio(PRIO_IDLE)
|
||||
{
|
||||
}
|
||||
|
||||
@ -74,6 +77,7 @@ void i8089_channel::device_start()
|
||||
save_item(NAME(m_xfer_pending));
|
||||
save_item(NAME(m_dma_value));
|
||||
save_item(NAME(m_dma_state));
|
||||
save_item(NAME(m_drq));
|
||||
save_item(NAME(m_prio));
|
||||
|
||||
for (int i = 0; i < ARRAY_LENGTH(m_r); i++)
|
||||
@ -246,11 +250,13 @@ int i8089_channel::execute_run()
|
||||
break;
|
||||
|
||||
case DMA_WAIT_FOR_SOURCE_DRQ:
|
||||
fatalerror("%s('%s'): wait for source drq not supported\n", shortname(), tag());
|
||||
if (m_drq)
|
||||
m_dma_state = DMA_FETCH;
|
||||
break;
|
||||
|
||||
case DMA_FETCH:
|
||||
if (VERBOSE_DMA)
|
||||
logerror("%s('%s'): entering state: DMA_FETCH", shortname(), tag());
|
||||
logerror("%s('%s'): entering state: DMA_FETCH\n", shortname(), tag());
|
||||
|
||||
// source is 16-bit?
|
||||
if (BIT(m_r[PSW].w, 1))
|
||||
@ -834,5 +840,7 @@ WRITE_LINE_MEMBER( i8089_channel::ext_w )
|
||||
WRITE_LINE_MEMBER( i8089_channel::drq_w )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s('%s'): ext_w: %d\n", shortname(), tag(), state);
|
||||
logerror("%s('%s'): drq_w: %d\n", shortname(), tag(), state);
|
||||
|
||||
m_drq = state;
|
||||
}
|
||||
|
@ -186,6 +186,7 @@ private:
|
||||
bool m_xfer_pending;
|
||||
UINT16 m_dma_value;
|
||||
int m_dma_state;
|
||||
bool m_drq;
|
||||
|
||||
// dma state
|
||||
enum
|
||||
|
Loading…
Reference in New Issue
Block a user