diff --git a/src/devices/sound/cdp1864.cpp b/src/devices/sound/cdp1864.cpp index 07a52d4d8a5..a229d61d619 100644 --- a/src/devices/sound/cdp1864.cpp +++ b/src/devices/sound/cdp1864.cpp @@ -65,7 +65,7 @@ cdp1864_device::cdp1864_device(const machine_config &mconfig, const char *tag, d m_read_rdata(*this), m_read_bdata(*this), m_read_gdata(*this), - m_write_irq(*this), + m_write_int(*this), m_write_dma_out(*this), m_write_efx(*this), m_write_hsync(*this), @@ -90,7 +90,7 @@ void cdp1864_device::device_start() m_read_rdata.resolve_safe(0); m_read_bdata.resolve_safe(0); m_read_gdata.resolve_safe(0); - m_write_irq.resolve_safe(); + m_write_int.resolve_safe(); m_write_dma_out.resolve_safe(); m_write_efx.resolve_safe(); m_write_hsync.resolve_safe(); @@ -135,7 +135,7 @@ void cdp1864_device::device_reset() m_disp = 0; m_dmaout = 0; - m_write_irq(CLEAR_LINE); + m_write_int(CLEAR_LINE); m_write_dma_out(CLEAR_LINE); m_write_efx(CLEAR_LINE); m_write_hsync(CLEAR_LINE); @@ -157,7 +157,7 @@ void cdp1864_device::device_timer(emu_timer &timer, device_timer_id id, int para { if (m_disp) { - m_write_irq(ASSERT_LINE); + m_write_int(ASSERT_LINE); } m_int_timer->adjust(screen().time_until_pos(SCANLINE_INT_END, 0)); @@ -166,7 +166,7 @@ void cdp1864_device::device_timer(emu_timer &timer, device_timer_id id, int para { if (m_disp) { - m_write_irq(CLEAR_LINE); + m_write_int(CLEAR_LINE); } m_int_timer->adjust(screen().time_until_pos(SCANLINE_INT_START, 0)); @@ -302,7 +302,7 @@ READ8_MEMBER( cdp1864_device::dispoff_r ) { m_disp = 0; - m_write_irq(CLEAR_LINE); + m_write_int(CLEAR_LINE); m_write_dma_out(CLEAR_LINE); return 0xff; diff --git a/src/devices/sound/cdp1864.h b/src/devices/sound/cdp1864.h index e1aec5babea..928196e62e1 100644 --- a/src/devices/sound/cdp1864.h +++ b/src/devices/sound/cdp1864.h @@ -44,39 +44,15 @@ -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define CDP1864_CLOCK XTAL(1'750'000) - - - //************************************************************************** // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_CDP1864_ADD(_tag, _screen_tag, _clock, _inlace, _irq, _dma_out, _efx, _hsync, _rdata, _bdata, _gdata) \ - MCFG_DEVICE_ADD(_tag, CDP1864, _clock) \ - MCFG_VIDEO_SET_SCREEN(_screen_tag) \ - downcast(device)->set_inlace_callback(DEVCB_##_inlace); \ - downcast(device)->set_irq_callback(DEVCB_##_irq); \ - downcast(device)->set_dma_out_callback(DEVCB_##_dma_out); \ - downcast(device)->set_efx_callback(DEVCB_##_efx); \ - downcast(device)->set_hsync_callback(DEVCB_##_hsync); \ - downcast(device)->set_rdata_callback(DEVCB_##_rdata); \ - downcast(device)->set_bdata_callback(DEVCB_##_bdata); \ - downcast(device)->set_gdata_callback(DEVCB_##_gdata); - -#define MCFG_CDP1864_CHROMINANCE(_r, _b, _g, _bkg) \ - downcast(device)->set_chrominance_resistors(_r, _b, _g, _bkg); - #define MCFG_CDP1864_SCREEN_ADD(_tag, _clock) \ MCFG_SCREEN_ADD(_tag, RASTER) \ MCFG_SCREEN_RAW_PARAMS(_clock, cdp1864_device::SCREEN_WIDTH, cdp1864_device::HBLANK_END, cdp1864_device::HBLANK_START, cdp1864_device::TOTAL_SCANLINES, cdp1864_device::SCANLINE_VBLANK_END, cdp1864_device::SCANLINE_VBLANK_START) - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -117,15 +93,16 @@ public: // construction/destruction cdp1864_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template void set_inlace_callback(Object &&inlace) { m_read_inlace.set_callback(std::forward(inlace)); } - template void set_irq_callback(Object &&irq) { m_write_irq.set_callback(std::forward(irq)); } - template void set_dma_out_callback(Object &&dma_out) { m_write_dma_out.set_callback(std::forward(dma_out)); } - template void set_efx_callback(Object &&efx) { m_write_efx.set_callback(std::forward(efx)); } - template void set_hsync_callback(Object &&hsync) { m_write_hsync.set_callback(std::forward(hsync)); } - template void set_rdata_callback(Object &&rdata) { m_read_rdata.set_callback(std::forward(rdata)); } - template void set_bdata_callback(Object &&bdata) { m_read_bdata.set_callback(std::forward(bdata)); } - template void set_gdata_callback(Object &&gdata) { m_read_gdata.set_callback(std::forward(gdata)); } - void set_chrominance_resistors(double r, double b, double g, double bkg) { m_chr_r = r; m_chr_b = b; m_chr_g = g; m_chr_bkg = bkg; } + auto inlace_cb() { return m_read_inlace.bind(); } + auto int_cb() { return m_write_int.bind(); } + auto dma_out_cb() { return m_write_dma_out.bind(); } + auto efx_cb() { return m_write_efx.bind(); } + auto hsync_cb() { return m_write_hsync.bind(); } + auto rdata_cb() { return m_read_rdata.bind(); } + auto bdata_cb() { return m_read_bdata.bind(); } + auto gdata_cb() { return m_read_gdata.bind(); } + + void set_chrominance(double r, double b, double g, double bkg) { m_chr_r = r; m_chr_b = b; m_chr_g = g; m_chr_bkg = bkg; } DECLARE_READ8_MEMBER( dispon_r ); DECLARE_READ8_MEMBER( dispoff_r ); @@ -167,7 +144,7 @@ private: devcb_read_line m_read_rdata; devcb_read_line m_read_bdata; devcb_read_line m_read_gdata; - devcb_write_line m_write_irq; + devcb_write_line m_write_int; devcb_write_line m_write_dma_out; devcb_write_line m_write_efx; devcb_write_line m_write_hsync; diff --git a/src/mame/drivers/cosmicos.cpp b/src/mame/drivers/cosmicos.cpp index 38baca884dd..b9de4711ef9 100644 --- a/src/mame/drivers/cosmicos.cpp +++ b/src/mame/drivers/cosmicos.cpp @@ -508,7 +508,7 @@ QUICKLOAD_LOAD_MEMBER( cosmicos_state, cosmicos ) MACHINE_CONFIG_START(cosmicos_state::cosmicos) /* basic machine hardware */ - CDP1802(config, m_maincpu, XTAL(1'750'000)); + CDP1802(config, m_maincpu, 1.75_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &cosmicos_state::cosmicos_mem); m_maincpu->set_addrmap(AS_IO, &cosmicos_state::cosmicos_io); m_maincpu->wait_cb().set(FUNC(cosmicos_state::wait_r)); @@ -527,7 +527,7 @@ MACHINE_CONFIG_START(cosmicos_state::cosmicos) MCFG_TIMER_DRIVER_ADD_PERIODIC("digit", cosmicos_state, digit_tick, attotime::from_hz(100)) MCFG_TIMER_DRIVER_ADD_PERIODIC("interrupt", cosmicos_state, int_tick, attotime::from_hz(1000)) - MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, XTAL(1'750'000)) + MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, 1.75_MHz_XTAL) MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update) /* sound hardware */ @@ -536,9 +536,16 @@ MACHINE_CONFIG_START(cosmicos_state::cosmicos) MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), WRITELINE(*this, cosmicos_state, dmaout_w), WRITELINE(*this, cosmicos_state, efx_w), NOOP, CONSTANT(1), CONSTANT(1), CONSTANT(1)) - MCFG_CDP1864_CHROMINANCE(RES_K(2), 0, 0, 0) // R2 - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG); + m_cti->inlace_cb().set_constant(0); + m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); + m_cti->dma_out_cb().set(FUNC(cosmicos_state::dmaout_w)); + m_cti->efx_cb().set(FUNC(cosmicos_state::efx_w)); + m_cti->rdata_cb().set_constant(1); + m_cti->gdata_cb().set_constant(1); + m_cti->bdata_cb().set_constant(1); + m_cti->set_chrominance(RES_K(2), 0, 0, 0); // R2 + m_cti->add_route(ALL_OUTPUTS, "mono", 0.25); /* devices */ MCFG_QUICKLOAD_ADD("quickload", cosmicos_state, cosmicos, "bin", 0) diff --git a/src/mame/drivers/eti660.cpp b/src/mame/drivers/eti660.cpp index 04cfbce090e..ca2b570a449 100644 --- a/src/mame/drivers/eti660.cpp +++ b/src/mame/drivers/eti660.cpp @@ -324,9 +324,16 @@ MACHINE_CONFIG_START(eti660_state::eti660) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(8'867'238)/5, CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, eti660_state, rdata_r), READLINE(*this, eti660_state, bdata_r), READLINE(*this, eti660_state, gdata_r)) - MCFG_CDP1864_CHROMINANCE(RES_K(2.2), RES_K(1), RES_K(4.7), RES_K(4.7)) // R7, R5, R6, R4 - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + CDP1864(config, m_cti, XTAL(8'867'238)/5).set_screen(SCREEN_TAG); + m_cti->inlace_cb().set_constant(0); + m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); + m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT); + m_cti->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1); + m_cti->rdata_cb().set(FUNC(eti660_state::rdata_r)); + m_cti->bdata_cb().set(FUNC(eti660_state::bdata_r)); + m_cti->gdata_cb().set(FUNC(eti660_state::gdata_r)); + m_cti->set_chrominance(RES_K(2.2), RES_K(1), RES_K(4.7), RES_K(4.7)); // R7, R5, R6, R4 + m_cti->add_route(ALL_OUTPUTS, "mono", 0.25); /* devices */ PIA6821(config, m_pia, 0); diff --git a/src/mame/drivers/studio2.cpp b/src/mame/drivers/studio2.cpp index f6ae594df74..4c75fe9099e 100644 --- a/src/mame/drivers/studio2.cpp +++ b/src/mame/drivers/studio2.cpp @@ -706,7 +706,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(mpt02_state::mpt02) /* basic machine hardware */ - CDP1802(config, m_maincpu, CDP1864_CLOCK); + CDP1802(config, m_maincpu, 1.75_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mpt02_state::mpt02_map); m_maincpu->set_addrmap(AS_IO, &mpt02_state::mpt02_io_map); m_maincpu->wait_cb().set_constant(1); @@ -717,17 +717,23 @@ MACHINE_CONFIG_START(mpt02_state::mpt02) m_maincpu->dma_wr_cb().set(FUNC(mpt02_state::dma_w)); /* video hardware */ - MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, CDP1864_CLOCK) + MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, 1.75_MHz_XTAL) MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update) /* sound hardware */ SPEAKER(config, "mono").front_center(); BEEP(config, m_beeper, 300).add_route(ALL_OUTPUTS, "mono", 1.00); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, CDP1864_CLOCK, CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, mpt02_state, rdata_r), READLINE(*this, mpt02_state, bdata_r), READLINE(*this, mpt02_state, gdata_r)) - MCFG_CDP1864_CHROMINANCE(RES_K(4.7), RES_K(8.2), RES_K(4.7), RES_K(22)) - - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG); + m_cti->inlace_cb().set_constant(0); + m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); + m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT); + m_cti->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1); + m_cti->rdata_cb().set(FUNC(mpt02_state::rdata_r)); + m_cti->bdata_cb().set(FUNC(mpt02_state::bdata_r)); + m_cti->gdata_cb().set(FUNC(mpt02_state::gdata_r)); + m_cti->set_chrominance(RES_K(4.7), RES_K(8.2), RES_K(4.7), RES_K(22)); + m_cti->add_route(ALL_OUTPUTS, "mono", 0.25); studio2_cartslot(config); MACHINE_CONFIG_END diff --git a/src/mame/drivers/tmc2000e.cpp b/src/mame/drivers/tmc2000e.cpp index 4f3ef9fbd52..10247f13a4d 100644 --- a/src/mame/drivers/tmc2000e.cpp +++ b/src/mame/drivers/tmc2000e.cpp @@ -293,14 +293,21 @@ MACHINE_CONFIG_START(tmc2000e_state::tmc2000e) m_maincpu->dma_wr_cb().set(FUNC(tmc2000e_state::dma_w)); // video hardware - MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, XTAL(1'750'000)) + MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, 1.75_MHz_XTAL) MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update) // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, tmc2000e_state, rdata_r), READLINE(*this, tmc2000e_state, bdata_r), READLINE(*this, tmc2000e_state, gdata_r)) - MCFG_CDP1864_CHROMINANCE(RES_K(2.2), RES_K(1), RES_K(5.1), RES_K(4.7)) // unverified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG); + m_cti->inlace_cb().set_constant(0); + m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); + m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT); + m_cti->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1); + m_cti->rdata_cb().set(FUNC(tmc2000e_state::rdata_r)); + m_cti->bdata_cb().set(FUNC(tmc2000e_state::bdata_r)); + m_cti->gdata_cb().set(FUNC(tmc2000e_state::gdata_r)); + m_cti->set_chrominance(RES_K(2.2), RES_K(1), RES_K(5.1), RES_K(4.7)); // unverified + m_cti->add_route(ALL_OUTPUTS, "mono", 0.25); /* devices */ MCFG_CASSETTE_ADD("cassette") diff --git a/src/mame/video/tmc1800.cpp b/src/mame/video/tmc1800.cpp index 631bf1595ab..ea0bee59b31 100644 --- a/src/mame/video/tmc1800.cpp +++ b/src/mame/video/tmc1800.cpp @@ -57,9 +57,16 @@ MACHINE_CONFIG_START(tmc2000_state::tmc2000_video) MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update) SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, READLINE(*this, tmc2000_state, rdata_r), READLINE(*this, tmc2000_state, bdata_r), READLINE(*this, tmc2000_state, gdata_r)) - MCFG_CDP1864_CHROMINANCE(RES_K(1.21), RES_K(2.05), RES_K(2.26), RES_K(3.92)) // RL64, RL63, RL61, RL65 (also RH62 (2K pot) in series, but ignored here) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + CDP1864(config, m_cti, XTAL(1'750'000)).set_screen(SCREEN_TAG); + m_cti->inlace_cb().set_constant(0); + m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); + m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT); + m_cti->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1); + m_cti->rdata_cb().set(FUNC(tmc2000_state::rdata_r)); + m_cti->bdata_cb().set(FUNC(tmc2000_state::bdata_r)); + m_cti->gdata_cb().set(FUNC(tmc2000_state::gdata_r)); + m_cti->set_chrominance(RES_K(1.21), RES_K(2.05), RES_K(2.26), RES_K(3.92)); // RL64, RL63, RL61, RL65 (also RH62 (2K pot) in series, but ignored here) + m_cti->add_route(ALL_OUTPUTS, "mono", 0.25); MACHINE_CONFIG_END MACHINE_CONFIG_START(nano_state::nano_video) @@ -67,7 +74,14 @@ MACHINE_CONFIG_START(nano_state::nano_video) MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update) SPEAKER(config, "mono").front_center(); - MCFG_CDP1864_ADD(CDP1864_TAG, SCREEN_TAG, XTAL(1'750'000), CONSTANT(0), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1), NOOP, CONSTANT(1), CONSTANT(1), CONSTANT(1)) - MCFG_CDP1864_CHROMINANCE(RES_K(1.21), RES_INF, RES_INF, 0) // R18 (unconfirmed) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + CDP1864(config, m_cti, XTAL(1'750'000)).set_screen(SCREEN_TAG); + m_cti->inlace_cb().set_constant(0); + m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); + m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT); + m_cti->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1); + m_cti->rdata_cb().set_constant(1); + m_cti->bdata_cb().set_constant(1); + m_cti->gdata_cb().set_constant(1); + m_cti->set_chrominance(RES_K(1.21), RES_INF, RES_INF, 0); // R18 (unconfirmed) + m_cti->add_route(ALL_OUTPUTS, "mono", 0.25); MACHINE_CONFIG_END