summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit8486d3e0b3be1ac4ca8ebab54748b43f449df75c (patch)
treea1c58e0404cc58c8c526af591077b0928a808776
parentf5ef11f31a1d4c9803f50ec7d8e8c2753118be37 (diff)
Refactoring
-rw-r--r--src/emu/machine/segacdblock.c32
-rw-r--r--src/emu/machine/segacdblock.h1
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;