mirror of
https://github.com/holub/mame
synced 2025-06-04 11:56:28 +03:00
cdp1861, cdp1864: Hook in screens efficiently without using MCFG (nw)
This commit is contained in:
parent
06559ae451
commit
577f198564
@ -78,6 +78,14 @@ cdp1864_device::cdp1864_device(const machine_config &mconfig, const char *tag, d
|
||||
{
|
||||
}
|
||||
|
||||
cdp1864_device::cdp1864_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, screen_device &screen)
|
||||
: cdp1864_device(mconfig, tag, owner, clock)
|
||||
{
|
||||
set_screen(screen, DEVICE_SELF);
|
||||
screen.set_screen_update(screen_update_rgb32_delegate(FUNC(cdp1864_device::screen_update), this));
|
||||
screen.set_raw(clock, SCREEN_WIDTH, HBLANK_END, HBLANK_START, TOTAL_SCANLINES, SCANLINE_VBLANK_END, SCANLINE_VBLANK_START);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
|
@ -44,15 +44,6 @@
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#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
|
||||
//**************************************************************************
|
||||
@ -92,6 +83,7 @@ public:
|
||||
|
||||
// construction/destruction
|
||||
cdp1864_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
cdp1864_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, screen_device &screen);
|
||||
|
||||
auto inlace_cb() { return m_read_inlace.bind(); }
|
||||
auto int_cb() { return m_write_int.bind(); }
|
||||
|
@ -51,6 +51,14 @@ cdp1861_device::cdp1861_device(const machine_config &mconfig, const char *tag, d
|
||||
{
|
||||
}
|
||||
|
||||
cdp1861_device::cdp1861_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, screen_device &screen)
|
||||
: cdp1861_device(mconfig, tag, owner, clock)
|
||||
{
|
||||
set_screen(screen, DEVICE_SELF);
|
||||
screen.set_screen_update(screen_update_rgb32_delegate(FUNC(cdp1861_device::screen_update), this));
|
||||
screen.set_raw(clock, SCREEN_WIDTH, HBLANK_END, HBLANK_START, TOTAL_SCANLINES, SCANLINE_VBLANK_END, SCANLINE_VBLANK_START);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
|
@ -29,17 +29,6 @@
|
||||
#include "screen.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_CDP1861_SCREEN_ADD(_cdptag, _tag, _clock) \
|
||||
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)
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
@ -76,6 +65,7 @@ public:
|
||||
|
||||
// construction/destruction
|
||||
cdp1861_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
cdp1861_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, screen_device &screen);
|
||||
|
||||
auto int_cb() { return m_write_int.bind(); }
|
||||
auto dma_out_cb() { return m_write_dma_out.bind(); }
|
||||
|
@ -527,16 +527,13 @@ 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, 1.75_MHz_XTAL)
|
||||
MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG);
|
||||
CDP1864(config, m_cti, 1.75_MHz_XTAL, SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
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));
|
||||
|
@ -251,11 +251,11 @@ MACHINE_CONFIG_START(elf2_state::elf2)
|
||||
/* video hardware */
|
||||
config.set_default_layout(layout_elf2);
|
||||
|
||||
CDP1861(config, m_vdc, XTAL(3'579'545)/2).set_screen(SCREEN_TAG);
|
||||
|
||||
CDP1861(config, m_vdc, XTAL(3'579'545)/2, SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
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 */
|
||||
MCFG_DEVICE_ADD(MM74C923_TAG, MM74C923, 0)
|
||||
|
@ -318,13 +318,9 @@ MACHINE_CONFIG_START(eti660_state::eti660)
|
||||
m_maincpu->q_cb().set(FUNC(eti660_state::q_w));
|
||||
m_maincpu->dma_wr_cb().set(FUNC(eti660_state::dma_w));
|
||||
|
||||
/* video hardware */
|
||||
MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, XTAL(8'867'238)/5)
|
||||
MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update)
|
||||
|
||||
/* sound hardware */
|
||||
/* video/sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
CDP1864(config, m_cti, XTAL(8'867'238)/5).set_screen(SCREEN_TAG);
|
||||
CDP1864(config, m_cti, XTAL(8'867'238)/5, SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
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);
|
||||
|
@ -660,11 +660,10 @@ MACHINE_CONFIG_START(studio2_state::studio2)
|
||||
m_maincpu->dma_wr_cb().set(m_vdc, FUNC(cdp1861_device::dma_w));
|
||||
|
||||
/* video hardware */
|
||||
CDP1861(config, m_vdc, 1760000).set_screen(SCREEN_TAG);
|
||||
CDP1861(config, m_vdc, 1760000, SCREEN(config, m_screen, SCREEN_TYPE_RASTER));
|
||||
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 */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
@ -686,12 +685,11 @@ MACHINE_CONFIG_START(visicom_state::visicom)
|
||||
m_maincpu->dma_wr_cb().set(FUNC(visicom_state::dma_w));
|
||||
|
||||
/* video hardware */
|
||||
CDP1861(config, m_vdc, XTAL(3'579'545)/2);
|
||||
CDP1861(config, m_vdc, XTAL(3'579'545)/2, SCREEN(config, m_screen, SCREEN_TYPE_RASTER));
|
||||
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)
|
||||
m_screen->set_screen_update(FUNC(visicom_state::screen_update));
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
@ -716,15 +714,11 @@ MACHINE_CONFIG_START(mpt02_state::mpt02)
|
||||
m_maincpu->q_cb().set(FUNC(mpt02_state::q_w));
|
||||
m_maincpu->dma_wr_cb().set(FUNC(mpt02_state::dma_w));
|
||||
|
||||
/* video hardware */
|
||||
MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, 1.75_MHz_XTAL)
|
||||
MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update)
|
||||
|
||||
/* sound hardware */
|
||||
/* video/sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
BEEP(config, m_beeper, 300).add_route(ALL_OUTPUTS, "mono", 1.00);
|
||||
|
||||
CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG);
|
||||
CDP1864(config, m_cti, 1.75_MHz_XTAL, SCREEN(config, m_screen, SCREEN_TYPE_RASTER));
|
||||
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);
|
||||
|
@ -280,7 +280,8 @@ void tmc2000e_state::machine_reset()
|
||||
|
||||
/* Machine Drivers */
|
||||
|
||||
MACHINE_CONFIG_START(tmc2000e_state::tmc2000e)
|
||||
void tmc2000e_state::tmc2000e(machine_config &config)
|
||||
{
|
||||
// basic system hardware
|
||||
CDP1802(config, m_maincpu, 1.75_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &tmc2000e_state::tmc2000e_map);
|
||||
@ -292,13 +293,9 @@ MACHINE_CONFIG_START(tmc2000e_state::tmc2000e)
|
||||
m_maincpu->q_cb().set(FUNC(tmc2000e_state::q_w));
|
||||
m_maincpu->dma_wr_cb().set(FUNC(tmc2000e_state::dma_w));
|
||||
|
||||
// video hardware
|
||||
MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, 1.75_MHz_XTAL)
|
||||
MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update)
|
||||
|
||||
// sound hardware
|
||||
// video/sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG);
|
||||
CDP1864(config, m_cti, 1.75_MHz_XTAL, SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
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);
|
||||
@ -310,12 +307,11 @@ MACHINE_CONFIG_START(tmc2000e_state::tmc2000e)
|
||||
m_cti->add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||
|
||||
/* devices */
|
||||
MCFG_CASSETTE_ADD("cassette")
|
||||
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED)
|
||||
CASSETTE(config, m_cassette).set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED);
|
||||
|
||||
/* internal ram */
|
||||
RAM(config, RAM_TAG).set_default_size("8K").set_extra_options("40K");
|
||||
MACHINE_CONFIG_END
|
||||
}
|
||||
|
||||
/* ROMs */
|
||||
|
||||
|
@ -716,12 +716,12 @@ MACHINE_CONFIG_START(vip_state::vip)
|
||||
m_maincpu->tpb_cb().set(m_exp, FUNC(vip_expansion_slot_device::tpb_w));
|
||||
|
||||
// video hardware
|
||||
CDP1861(config, m_vdc, 3.52128_MHz_XTAL / 2).set_screen(SCREEN_TAG);
|
||||
screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
CDP1861(config, m_vdc, 3.52128_MHz_XTAL / 2, screen);
|
||||
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)
|
||||
screen.set_screen_update(FUNC(vip_state::screen_update));
|
||||
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
@ -36,13 +36,13 @@ uint32_t osc1000b_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm
|
||||
|
||||
/* Machine Drivers */
|
||||
|
||||
MACHINE_CONFIG_START(tmc1800_state::tmc1800_video)
|
||||
CDP1861(config, m_vdc, XTAL(1'750'000)).set_screen(SCREEN_TAG);
|
||||
void tmc1800_state::tmc1800_video(machine_config &config)
|
||||
{
|
||||
CDP1861(config, m_vdc, XTAL(1'750'000), SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
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
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START(osc1000b_state::osc1000b_video)
|
||||
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
|
||||
@ -52,12 +52,10 @@ MACHINE_CONFIG_START(osc1000b_state::osc1000b_video)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 199)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(tmc2000_state::tmc2000_video)
|
||||
MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, XTAL(1'750'000))
|
||||
MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update)
|
||||
|
||||
void tmc2000_state::tmc2000_video(machine_config &config)
|
||||
{
|
||||
SPEAKER(config, "mono").front_center();
|
||||
CDP1864(config, m_cti, XTAL(1'750'000)).set_screen(SCREEN_TAG);
|
||||
CDP1864(config, m_cti, XTAL(1'750'000), SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
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);
|
||||
@ -67,14 +65,12 @@ MACHINE_CONFIG_START(tmc2000_state::tmc2000_video)
|
||||
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)
|
||||
MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, XTAL(1'750'000))
|
||||
MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update)
|
||||
}
|
||||
|
||||
void nano_state::nano_video(machine_config &config)
|
||||
{
|
||||
SPEAKER(config, "mono").front_center();
|
||||
CDP1864(config, m_cti, XTAL(1'750'000)).set_screen(SCREEN_TAG);
|
||||
CDP1864(config, m_cti, XTAL(1'750'000), SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
|
||||
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);
|
||||
@ -84,4 +80,4 @@ MACHINE_CONFIG_START(nano_state::nano_video)
|
||||
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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user