From f07601a449d106d52f1884a42a12d1fbdbe06e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Sat, 25 May 2013 15:20:10 +0000 Subject: [PATCH] improve cbaj sound --- src/mame/drivers/zn.c | 57 +++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/mame/drivers/zn.c b/src/mame/drivers/zn.c index 95860a15149..14140dae70d 100644 --- a/src/mame/drivers/zn.c +++ b/src/mame/drivers/zn.c @@ -97,6 +97,7 @@ public: DECLARE_MACHINE_RESET(coh1001l); DECLARE_MACHINE_RESET(coh1002v); DECLARE_MACHINE_RESET(coh1002m); + DECLARE_MACHINE_RESET(coh1002msnd); DECLARE_WRITE_LINE_MEMBER(irqhandler); INTERRUPT_GEN_MEMBER(qsound_interrupt); void atpsx_dma_read(UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); @@ -119,9 +120,9 @@ private: size_t m_nbajamex_eeprom_size; UINT8 *m_nbajamex_eeprom; - int m_cbaj_to_z80_status; - int m_cbaj_from_z80_status; - int m_latch_to_z80; + UINT8 m_cbaj_fifo_buffer[2][0x400]; + int m_cbaj_fifo_main_ptr[2]; + int m_cbaj_fifo_z80_ptr[2]; required_device m_gpu; required_device m_znsec0; @@ -2197,8 +2198,8 @@ static MACHINE_CONFIG_DERIVED(coh1001l, zn1_2mb_vram) MCFG_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) MCFG_YMZ280B_IRQ_HANDLER(WRITELINE(zn_state, coh1001l_ymz_irq)) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.37) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.37) + MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) + MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) MACHINE_CONFIG_END /* @@ -2423,27 +2424,20 @@ MACHINE_CONFIG_END READ8_MEMBER(zn_state::cbaj_from_z80_latch_r) { - machine().scheduler().synchronize(); - - m_cbaj_from_z80_status &= ~2; - return soundlatch2_byte_r(space,0); + UINT8 ret = m_cbaj_fifo_buffer[1][m_cbaj_fifo_main_ptr[1]]; + m_cbaj_fifo_main_ptr[1] = (m_cbaj_fifo_main_ptr[1] + 1) & 0x3ff; + return ret; } WRITE8_MEMBER(zn_state::cbaj_to_z80_latch_w) { - machine().scheduler().synchronize(); - - m_cbaj_to_z80_status |= 2; - m_latch_to_z80 = data; + m_cbaj_fifo_buffer[0][m_cbaj_fifo_main_ptr[0]] = data; + m_cbaj_fifo_main_ptr[0] = (m_cbaj_fifo_main_ptr[0] + 1) & 0x3ff; } READ8_MEMBER(zn_state::cbaj_from_z80_status_r) { - machine().scheduler().synchronize(); - - int ready = m_cbaj_from_z80_status; - m_cbaj_from_z80_status &= ~2; - return ready; + return (m_cbaj_fifo_main_ptr[1] != m_cbaj_fifo_z80_ptr[1]) ? 0x02 : 0x00; } static ADDRESS_MAP_START(coh1002msnd_map, AS_PROGRAM, 32, zn_state) @@ -2455,21 +2449,20 @@ ADDRESS_MAP_END READ8_MEMBER(zn_state::cbaj_to_z80_latch_r) { - m_cbaj_to_z80_status &= ~2; - return m_latch_to_z80; + UINT8 ret = m_cbaj_fifo_buffer[0][m_cbaj_fifo_z80_ptr[0]]; + m_cbaj_fifo_z80_ptr[0] = (m_cbaj_fifo_z80_ptr[0] + 1) & 0x3ff; + return ret; } WRITE8_MEMBER(zn_state::cbaj_from_z80_latch_w) { - m_cbaj_from_z80_status |= 2; - soundlatch2_byte_w(space, 0, data); + m_cbaj_fifo_buffer[1][m_cbaj_fifo_z80_ptr[1]] = data; + m_cbaj_fifo_z80_ptr[1] = (m_cbaj_fifo_z80_ptr[1] + 1) & 0x3ff; } READ8_MEMBER(zn_state::cbaj_to_z80_status_r) { - int ret = m_cbaj_to_z80_status; - m_cbaj_to_z80_status &= ~2; - return ret; + return (m_cbaj_fifo_main_ptr[0] != m_cbaj_fifo_z80_ptr[0]) ? 0x02 : 0x00; } static ADDRESS_MAP_START( cbaj_z80_map, AS_PROGRAM, 8, zn_state ) @@ -2484,6 +2477,13 @@ static ADDRESS_MAP_START( cbaj_z80_port_map, AS_IO, 8, zn_state ) AM_RANGE(0x91, 0x91) AM_READ(cbaj_to_z80_status_r) ADDRESS_MAP_END +MACHINE_RESET_MEMBER(zn_state,coh1002msnd) +{ + m_cbaj_fifo_main_ptr[0] = m_cbaj_fifo_main_ptr[1] = 0; + m_cbaj_fifo_z80_ptr[0] = m_cbaj_fifo_z80_ptr[1] = 0; + + MACHINE_RESET_CALL_MEMBER(coh1002m); +} static MACHINE_CONFIG_DERIVED( coh1002msnd, coh1002m ) MCFG_CPU_MODIFY("maincpu") @@ -2493,9 +2493,12 @@ static MACHINE_CONFIG_DERIVED( coh1002msnd, coh1002m ) MCFG_CPU_PROGRAM_MAP(cbaj_z80_map) MCFG_CPU_IO_MAP(cbaj_z80_port_map) + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1002msnd) + MCFG_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) + MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) MACHINE_CONFIG_END