cdp1864: Partial MCFG elimination (all callbacks are now devcb3) (nw)

This commit is contained in:
AJR 2018-08-17 20:14:49 -04:00
parent c4c6a68d4b
commit 85ada1a28b
7 changed files with 82 additions and 64 deletions

View File

@ -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;

View File

@ -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<cdp1864_device *>(device)->set_inlace_callback(DEVCB_##_inlace); \
downcast<cdp1864_device *>(device)->set_irq_callback(DEVCB_##_irq); \
downcast<cdp1864_device *>(device)->set_dma_out_callback(DEVCB_##_dma_out); \
downcast<cdp1864_device *>(device)->set_efx_callback(DEVCB_##_efx); \
downcast<cdp1864_device *>(device)->set_hsync_callback(DEVCB_##_hsync); \
downcast<cdp1864_device *>(device)->set_rdata_callback(DEVCB_##_rdata); \
downcast<cdp1864_device *>(device)->set_bdata_callback(DEVCB_##_bdata); \
downcast<cdp1864_device *>(device)->set_gdata_callback(DEVCB_##_gdata);
#define MCFG_CDP1864_CHROMINANCE(_r, _b, _g, _bkg) \
downcast<cdp1864_device *>(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 <class Object> void set_inlace_callback(Object &&inlace) { m_read_inlace.set_callback(std::forward<Object>(inlace)); }
template <class Object> void set_irq_callback(Object &&irq) { m_write_irq.set_callback(std::forward<Object>(irq)); }
template <class Object> void set_dma_out_callback(Object &&dma_out) { m_write_dma_out.set_callback(std::forward<Object>(dma_out)); }
template <class Object> void set_efx_callback(Object &&efx) { m_write_efx.set_callback(std::forward<Object>(efx)); }
template <class Object> void set_hsync_callback(Object &&hsync) { m_write_hsync.set_callback(std::forward<Object>(hsync)); }
template <class Object> void set_rdata_callback(Object &&rdata) { m_read_rdata.set_callback(std::forward<Object>(rdata)); }
template <class Object> void set_bdata_callback(Object &&bdata) { m_read_bdata.set_callback(std::forward<Object>(bdata)); }
template <class Object> void set_gdata_callback(Object &&gdata) { m_read_gdata.set_callback(std::forward<Object>(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;

View File

@ -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)

View File

@ -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);

View File

@ -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

View File

@ -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")

View File

@ -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