From d28b18c4152a336948e5f1b85019641d15c73de5 Mon Sep 17 00:00:00 2001 From: mamehaze Date: Mon, 9 Mar 2015 00:05:41 +0000 Subject: it now attempts to do a whole bunch of 0x20 sized transfers from RAM (0xcfe8 - 0xd007) to DMA port 3 shortly after startup... (nw) --- src/emu/cpu/nec/v53.c | 37 +++++++++++++++++++++++++++++++++++-- src/emu/cpu/nec/v53.h | 4 ++++ src/emu/machine/am9517a.c | 1 + src/mame/audio/hng64.c | 6 +++++- 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/emu/cpu/nec/v53.c b/src/emu/cpu/nec/v53.c index 23b6b49ed0e..30e56d37ffc 100644 --- a/src/emu/cpu/nec/v53.c +++ b/src/emu/cpu/nec/v53.c @@ -402,7 +402,17 @@ WRITE_LINE_MEMBER(v53_base_device::dreq3_trampoline_w) } } - +WRITE_LINE_MEMBER(v53_base_device::hack_trampoline_w) +{ + if (!(m_SCTL & 0x02)) + { + m_dma_71071mode->hack_w(state); + } + else + { + printf("v53: hack_trampoline_w not in 71071mode\n"); + } +} /* General stuff */ @@ -441,13 +451,36 @@ static ADDRESS_MAP_START( v53_internal_port_map, AS_IO, 16, v53_base_device ) // AM_RANGE(0xfffe, 0xffff) // (reserved , 0xff00) // 0xffff ADDRESS_MAP_END +WRITE_LINE_MEMBER(v53_base_device::dma_hrq_changed) +{ + // pass this back to the driver? / expose externally? + m_dma_71071mode->hack_w(state); +} + +WRITE8_MEMBER(v53_base_device::dma_io_3_w) +{ + logerror("dma_io_3_w %02x\n", data); +} + +READ8_MEMBER(v53_base_device::dma_memin_r) +{ + UINT8 ret = rand(); + logerror("dma_memin_r offset %08x %02x\n", offset, ret); + return ret; +} + + static MACHINE_CONFIG_FRAGMENT( v53 ) MCFG_DEVICE_ADD("pit", PIT8254, 0) // functionality identical to uPD71054 MCFG_PIT8253_CLK0(16000000/2/8) //MCFG_PIT8253_OUT0_HANDLER(WRITELINE(v53_base_device, pit_out0)) MCFG_DEVICE_ADD("upd71071dma", UPD71071_V53, 4000000) - + MCFG_I8237_OUT_HREQ_CB(WRITELINE(v53_base_device, dma_hrq_changed)) + MCFG_I8237_OUT_IOW_3_CB(WRITE8(v53_base_device, dma_io_3_w)) + MCFG_I8237_IN_MEMR_CB(READ8(v53_base_device, dma_memin_r)) + + MACHINE_CONFIG_END diff --git a/src/emu/cpu/nec/v53.h b/src/emu/cpu/nec/v53.h index fb7c161ede6..8c93ec1637b 100644 --- a/src/emu/cpu/nec/v53.h +++ b/src/emu/cpu/nec/v53.h @@ -86,7 +86,11 @@ public: DECLARE_WRITE_LINE_MEMBER(dreq1_trampoline_w); DECLARE_WRITE_LINE_MEMBER(dreq2_trampoline_w); DECLARE_WRITE_LINE_MEMBER(dreq3_trampoline_w); + DECLARE_WRITE_LINE_MEMBER(hack_trampoline_w); + DECLARE_WRITE_LINE_MEMBER(dma_hrq_changed); + DECLARE_WRITE8_MEMBER(dma_io_3_w); + DECLARE_READ8_MEMBER(dma_memin_r); protected: // device-level overrides diff --git a/src/emu/machine/am9517a.c b/src/emu/machine/am9517a.c index 2863958ec77..c715a7618d8 100644 --- a/src/emu/machine/am9517a.c +++ b/src/emu/machine/am9517a.c @@ -1272,5 +1272,6 @@ WRITE8_MEMBER(upd71071_v53_device::write) } + trigger(1); } \ No newline at end of file diff --git a/src/mame/audio/hng64.c b/src/mame/audio/hng64.c index a21db1662cf..a16f7b8d369 100644 --- a/src/mame/audio/hng64.c +++ b/src/mame/audio/hng64.c @@ -149,9 +149,13 @@ ADDRESS_MAP_END WRITE16_MEMBER(hng64_state::hng64_sound_port_0008_w) { - printf("hng64_sound_port_0008_w %04x %04x\n", data, mem_mask); +// printf("hng64_sound_port_0008_w %04x %04x\n", data, mem_mask); // seems to one or more of the DMARQ on the V53, writes here when it expects DMA channel 3 to transfer ~0x20 bytes just after startup + + m_audiocpu->dreq3_trampoline_w(data&1); +// m_audiocpu->hack_trampoline_w(1); + } static ADDRESS_MAP_START( hng_sound_io, AS_IO, 16, hng64_state ) -- cgit v1.2.3