cdp1861, cdp1862: Convert callbacks to devcb3 (nw)

This commit is contained in:
AJR 2018-08-17 20:45:20 -04:00
parent 85ada1a28b
commit 06559ae451
8 changed files with 40 additions and 80 deletions

View File

@ -54,13 +54,13 @@ READ_LINE_MEMBER( vp590_device::gd_r )
//-------------------------------------------------
MACHINE_CONFIG_START(vp590_device::device_add_mconfig)
MCFG_DEVICE_ADD(CDP1862_TAG, CDP1862, CPD1862_CLOCK)
MCFG_CDP1861_RD_CALLBACK(READLINE(DEVICE_SELF, vp590_device, rd_r))
MCFG_CDP1861_BD_CALLBACK(READLINE(DEVICE_SELF, vp590_device, bd_r))
MCFG_CDP1861_GD_CALLBACK(READLINE(DEVICE_SELF, vp590_device, gd_r))
MCFG_CDP1862_LUMINANCE(RES_R(510), RES_R(360), RES_K(1), RES_K(1.5)) // R3, R4, R5, R6
MCFG_CDP1862_CHROMINANCE(RES_K(3.9), RES_K(10), RES_K(2), RES_K(3.3)) // R7, R8, R9, R10
MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
CDP1862(config, m_cgc, 7.15909_MHz_XTAL);
m_cgc->rdata_cb().set(FUNC(vp590_device::rd_r));
m_cgc->bdata_cb().set(FUNC(vp590_device::bd_r));
m_cgc->gdata_cb().set(FUNC(vp590_device::gd_r));
m_cgc->set_luminance(RES_R(510), RES_R(360), RES_K(1), RES_K(1.5)); // R3, R4, R5, R6
m_cgc->set_chrominance(RES_K(3.9), RES_K(10), RES_K(2), RES_K(3.3)); // R7, R8, R9, R10
m_cgc->set_screen(SCREEN_TAG);
MACHINE_CONFIG_END

View File

@ -41,7 +41,7 @@ DEFINE_DEVICE_TYPE(CDP1861, cdp1861_device, "cdp1861", "RCA CDP1861")
cdp1861_device::cdp1861_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, CDP1861, tag, owner, clock)
, device_video_interface(mconfig, *this)
, m_write_irq(*this)
, m_write_int(*this)
, m_write_dma_out(*this)
, m_write_efx(*this)
, m_disp(0)
@ -59,7 +59,7 @@ cdp1861_device::cdp1861_device(const machine_config &mconfig, const char *tag, d
void cdp1861_device::device_start()
{
// resolve callbacks
m_write_irq.resolve_safe();
m_write_int.resolve_safe();
m_write_dma_out.resolve_safe();
m_write_efx.resolve_safe();
@ -93,7 +93,7 @@ void cdp1861_device::device_reset()
m_dmaout = 0;
m_dispon = 0;
m_write_irq(CLEAR_LINE);
m_write_int(CLEAR_LINE);
m_write_dma_out(CLEAR_LINE);
m_write_efx(CLEAR_LINE);
}
@ -114,7 +114,7 @@ void cdp1861_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));
@ -123,7 +123,7 @@ void cdp1861_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));
@ -230,7 +230,7 @@ WRITE_LINE_MEMBER( cdp1861_device::disp_off_w )
m_dispoff = state;
m_write_irq(CLEAR_LINE);
m_write_int(CLEAR_LINE);
m_write_dma_out(CLEAR_LINE);
}

View File

@ -33,18 +33,7 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_CDP1861_IRQ_CALLBACK(_write) \
downcast<cdp1861_device &>(*device).set_irq_wr_callback(DEVCB_##_write);
#define MCFG_CDP1861_DMA_OUT_CALLBACK(_write) \
downcast<cdp1861_device &>(*device).set_dma_out_wr_callback(DEVCB_##_write);
#define MCFG_CDP1861_EFX_CALLBACK(_write) \
downcast<cdp1861_device &>(*device).set_efx_wr_callback(DEVCB_##_write);
#define MCFG_CDP1861_SCREEN_ADD(_cdptag, _tag, _clock) \
MCFG_VIDEO_SET_SCREEN(_tag) \
MCFG_SCREEN_ADD(_tag, RASTER) \
MCFG_SCREEN_UPDATE_DEVICE(_cdptag, cdp1861_device, screen_update) \
MCFG_SCREEN_RAW_PARAMS(_clock, cdp1861_device::SCREEN_WIDTH, cdp1861_device::HBLANK_END, cdp1861_device::HBLANK_START, cdp1861_device::TOTAL_SCANLINES, cdp1861_device::SCANLINE_VBLANK_END, cdp1861_device::SCANLINE_VBLANK_START)
@ -88,9 +77,9 @@ public:
// construction/destruction
cdp1861_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <class Object> devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_dma_out_wr_callback(Object &&cb) { return m_write_dma_out.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_efx_wr_callback(Object &&cb) { return m_write_efx.set_callback(std::forward<Object>(cb)); }
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(); }
DECLARE_WRITE8_MEMBER( dma_w );
DECLARE_WRITE_LINE_MEMBER( disp_on_w );
@ -114,7 +103,7 @@ private:
TIMER_DMA
};
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;

View File

@ -29,35 +29,6 @@
//**************************************************************************
// MACROS / CONSTANTS
//**************************************************************************
#define CPD1862_CLOCK XTAL(7'159'090)
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_CDP1861_RD_CALLBACK(_read) \
downcast<cdp1862_device &>(*device).set_rd_rd_callback(DEVCB_##_read);
#define MCFG_CDP1861_BD_CALLBACK(_read) \
downcast<cdp1862_device &>(*device).set_bd_rd_callback(DEVCB_##_read);
#define MCFG_CDP1861_GD_CALLBACK(_read) \
downcast<cdp1862_device &>(*device).set_gd_rd_callback(DEVCB_##_read);
#define MCFG_CDP1862_LUMINANCE(_r, _b, _g, _bkg) \
downcast<cdp1862_device &>(*device).set_luminance(_r, _b, _g, _bkg);
#define MCFG_CDP1862_CHROMINANCE(_r, _b, _g, _bkg) \
downcast<cdp1862_device &>(*device).set_chrominance(_r, _b, _g, _bkg);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@ -71,9 +42,9 @@ public:
// construction/destruction
cdp1862_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <class Object> devcb_base &set_rd_rd_callback(Object &&cb) { return m_read_rd.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_bd_rd_callback(Object &&cb) { return m_read_bd.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_gd_rd_callback(Object &&cb) { return m_read_gd.set_callback(std::forward<Object>(cb)); }
auto rdata_cb() { return m_read_rd.bind(); }
auto bdata_cb() { return m_read_bd.bind(); }
auto gdata_cb() { return m_read_gd.bind(); }
void set_luminance(double r, double b, double g, double bkg) { m_lum_r = r; m_lum_b = b; m_lum_g = g; m_lum_bkg = bkg; }
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; }

View File

@ -251,10 +251,10 @@ MACHINE_CONFIG_START(elf2_state::elf2)
/* video hardware */
config.set_default_layout(layout_elf2);
MCFG_DEVICE_ADD(CDP1861_TAG, CDP1861, XTAL(3'579'545)/2)
MCFG_CDP1861_IRQ_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT))
MCFG_CDP1861_DMA_OUT_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT))
MCFG_CDP1861_EFX_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1))
CDP1861(config, m_vdc, XTAL(3'579'545)/2).set_screen(SCREEN_TAG);
m_vdc->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT);
m_vdc->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT);
m_vdc->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1);
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, XTAL(3'579'545)/2)
/* devices */

View File

@ -660,10 +660,10 @@ MACHINE_CONFIG_START(studio2_state::studio2)
m_maincpu->dma_wr_cb().set(m_vdc, FUNC(cdp1861_device::dma_w));
/* video hardware */
MCFG_DEVICE_ADD(CDP1861_TAG, CDP1861, 1760000)
MCFG_CDP1861_IRQ_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT))
MCFG_CDP1861_DMA_OUT_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT))
MCFG_CDP1861_EFX_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1))
CDP1861(config, m_vdc, 1760000).set_screen(SCREEN_TAG);
m_vdc->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT);
m_vdc->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT);
m_vdc->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1);
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, 1760000)
/* sound hardware */
@ -686,10 +686,10 @@ MACHINE_CONFIG_START(visicom_state::visicom)
m_maincpu->dma_wr_cb().set(FUNC(visicom_state::dma_w));
/* video hardware */
MCFG_DEVICE_ADD(CDP1861_TAG, CDP1861, XTAL(3'579'545)/2)
MCFG_CDP1861_IRQ_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT))
MCFG_CDP1861_DMA_OUT_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT))
MCFG_CDP1861_EFX_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1))
CDP1861(config, m_vdc, XTAL(3'579'545)/2);
m_vdc->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT);
m_vdc->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT);
m_vdc->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1);
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, XTAL(3'579'545)/2)
MCFG_SCREEN_UPDATE_DRIVER(visicom_state, screen_update)

View File

@ -716,10 +716,10 @@ MACHINE_CONFIG_START(vip_state::vip)
m_maincpu->tpb_cb().set(m_exp, FUNC(vip_expansion_slot_device::tpb_w));
// video hardware
MCFG_DEVICE_ADD(CDP1861_TAG, CDP1861, 3.52128_MHz_XTAL / 2)
MCFG_CDP1861_IRQ_CALLBACK(WRITELINE(*this, vip_state, vdc_int_w))
MCFG_CDP1861_DMA_OUT_CALLBACK(WRITELINE(*this, vip_state, vdc_dma_out_w))
MCFG_CDP1861_EFX_CALLBACK(WRITELINE(*this, vip_state, vdc_ef1_w))
CDP1861(config, m_vdc, 3.52128_MHz_XTAL / 2).set_screen(SCREEN_TAG);
m_vdc->int_cb().set(FUNC(vip_state::vdc_int_w));
m_vdc->dma_out_cb().set(FUNC(vip_state::vdc_dma_out_w));
m_vdc->efx_cb().set(FUNC(vip_state::vdc_ef1_w));
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, 3.52128_MHz_XTAL / 2)
MCFG_SCREEN_UPDATE_DRIVER(vip_state, screen_update)

View File

@ -37,10 +37,10 @@ uint32_t osc1000b_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm
/* Machine Drivers */
MACHINE_CONFIG_START(tmc1800_state::tmc1800_video)
MCFG_DEVICE_ADD(CDP1861_TAG, CDP1861, XTAL(1'750'000))
MCFG_CDP1861_IRQ_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT))
MCFG_CDP1861_DMA_OUT_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT))
MCFG_CDP1861_EFX_CALLBACK(INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1))
CDP1861(config, m_vdc, XTAL(1'750'000)).set_screen(SCREEN_TAG);
m_vdc->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT);
m_vdc->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT);
m_vdc->efx_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_EF1);
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, XTAL(1'750'000))
MACHINE_CONFIG_END