diff options
author | angelosa <salese_corp_ltd@email.it> | 2015-07-13 20:44:38 +0200 |
---|---|---|
committer | angelosa <salese_corp_ltd@email.it> | 2015-07-13 20:44:38 +0200 |
commit | 8486d3e0b3be1ac4ca8ebab54748b43f449df75c (patch) | |
tree | a1c58e0404cc58c8c526af591077b0928a808776 | |
parent | f5ef11f31a1d4c9803f50ec7d8e8c2753118be37 (diff) |
Refactoring
-rw-r--r-- | src/emu/machine/segacdblock.c | 32 | ||||
-rw-r--r-- | src/emu/machine/segacdblock.h | 1 |
2 files changed, 21 insertions, 12 deletions
diff --git a/src/emu/machine/segacdblock.c b/src/emu/machine/segacdblock.c index c56076aabe3..f2262631936 100644 --- a/src/emu/machine/segacdblock.c +++ b/src/emu/machine/segacdblock.c @@ -522,26 +522,34 @@ void segacdblock_device::TOCRetrieve() // set_flag(DRDY); } -void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +/*! + @todo Of course DMA needs steps ... + */ +void segacdblock_device::dma_setup() { - assert(id < CD_TIMER+1); - - if(id == CMD_TIMER) - SH1CommandExecute(); - else if(id == PERI_TIMER) + switch(sourcetype) { - if(sourcetype == SOURCE_TOC) - { - /*! - @todo DMA timing into account ... - */ + case SOURCE_TOC: memcpy(m_DMABuffer,tocbuf,102*4); m_dma_size = 102*4; m_dma_src = 0; xfertype = CDDMA_INPROGRESS; set_flag(DRDY); sourcetype = SOURCE_NONE; - } + break; + } +} + +void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + assert(id < CD_TIMER+1); + + if(id == CMD_TIMER) + SH1CommandExecute(); + else if(id == PERI_TIMER) + { + if(sourcetype != SOURCE_NONE) + dma_setup(); if(m_isDiscInTray == true) m_cd_state = CD_STAT_PAUSE; diff --git a/src/emu/machine/segacdblock.h b/src/emu/machine/segacdblock.h index a1c61dd4481..34d1f225fdf 100644 --- a/src/emu/machine/segacdblock.h +++ b/src/emu/machine/segacdblock.h @@ -111,6 +111,7 @@ private: sourceT sourcetype; UINT32 m_dma_src,m_dma_size; + void dma_setup(); UINT8 tocbuf[102*4]; /**< @todo Subchannel Q of lead-in */ UINT8 *m_DMABuffer; |