tms9928a: Configuration modernization (nw)

- Replace callback configuration macros with devcb3 (slightly shortening function names in the process)
- Change configured clock to be twice the dot clock (as on hardware), rather than equal to it
- Allow the VDP to configure the screen in device_config_complete (taking into account 60 Hz/50 Hz variations), making MCFG_TMS9928A_SCREEN_ADD_NTSC/_PAL macros obsolete
- Add notes on clock outputs

msx.cpp: Use a template to simplify configuration of all the MSX1 VDP variants (nw)

bbcbc: Increase clock speed to a more plausible rate

WARNING: Withheld for now due to Vas's quibbles with the similar approach used in 577f198564.
This commit is contained in:
AJR 2018-08-21 11:12:59 -04:00
parent b3e306b985
commit 71da8e2ae2
34 changed files with 442 additions and 599 deletions

View File

@ -36,17 +36,16 @@ DEFINE_DEVICE_TYPE(A2BUS_ARCADEBOARD, a2bus_arcboard_device, "a2arcbd", "Third M
// device_add_mconfig - add device configuration
//-------------------------------------------------
MACHINE_CONFIG_START(a2bus_arcboard_device::device_add_mconfig)
MCFG_DEVICE_ADD( TMS_TAG, TMS9918A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000) // 16k of VRAM
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, a2bus_arcboard_device, tms_irq_w))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS_TAG, tms9918a_device, screen_update )
void a2bus_arcboard_device::device_add_mconfig(machine_config &config)
{
TMS9918A(config, m_tms, XTAL(10'738'635)).set_screen(SCREEN_TAG);
m_tms->set_vram_size(0x4000); // 16k of VRAM
m_tms->int_callback().set(FUNC(a2bus_arcboard_device::tms_irq_w));
SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD(AY_TAG, AY8910, 1022727)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
AY8910(config, m_ay, 1022727).add_route(ALL_OUTPUTS, "mono", 1.0);
}
//**************************************************************************
// LIVE DEVICE

View File

@ -40,13 +40,13 @@ DEFINE_DEVICE_TYPE(A2BUS_EZCGI_9958, a2bus_ezcgi_9958_device, "a2ezcgi5", "E-Z C
// device_add_mconfig - add device configuration
//-------------------------------------------------
MACHINE_CONFIG_START(a2bus_ezcgi_device::device_add_mconfig)
MCFG_DEVICE_ADD( TMS_TAG, TMS9918A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000) // 16k of VRAM
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, a2bus_ezcgi_device, tms_irq_w))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS_TAG, tms9918a_device, screen_update )
MACHINE_CONFIG_END
void a2bus_ezcgi_device::device_add_mconfig(machine_config &config)
{
TMS9918A(config, m_tms, XTAL(10'738'635)).set_screen(SCREEN_TAG);
m_tms->set_vram_size(0x4000); // 16k of VRAM
m_tms->int_callback().set(FUNC(a2bus_ezcgi_device::tms_irq_w));
SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
}
MACHINE_CONFIG_START(a2bus_ezcgi_9938_device::device_add_mconfig)
MCFG_V9938_ADD(TMS_TAG, SCREEN_TAG, 0x30000, XTAL(21'477'272)) // 192K of VRAM / typical 9938 clock, not verified

View File

@ -33,19 +33,17 @@ DEFINE_DEVICE_TYPE(A2BUS_SSPRITE, a2bus_ssprite_device, "a2ssprite", "Synetix Su
// device_add_mconfig - add device configuration
//-------------------------------------------------
MACHINE_CONFIG_START(a2bus_ssprite_device::device_add_mconfig)
MCFG_DEVICE_ADD( TMS_TAG, TMS9918A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000) // 16k of VRAM
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, a2bus_ssprite_device, tms_irq_w))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS_TAG, tms9918a_device, screen_update )
void a2bus_ssprite_device::device_add_mconfig(machine_config &config)
{
TMS9918A(config, m_tms, XTAL(10'738'635)).set_screen(SCREEN_TAG);
m_tms->set_vram_size(0x4000); // 16k of VRAM
m_tms->int_callback().set(FUNC(a2bus_ssprite_device::tms_irq_w));
SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD(AY_TAG, AY8912, 1022727)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_DEVICE_ADD(TMS5220_TAG, TMS5220, 640000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
AY8912(config, m_ay, 1022727).add_route(ALL_OUTPUTS, "mono", 1.0);
TMS5220(config, m_tms5220, 640000).add_route(ALL_OUTPUTS, "mono", 1.0);
}
//**************************************************************************
// LIVE DEVICE

View File

@ -23,14 +23,14 @@ WRITE_LINE_MEMBER(spc1000_vdp_exp_device::vdp_interrupt)
// device_add_mconfig
//-------------------------------------------------
MACHINE_CONFIG_START(spc1000_vdp_exp_device::device_add_mconfig)
MCFG_DEVICE_ADD("tms", TMS9928A, XTAL(10'738'635) / 2) // TODO: which clock?
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, spc1000_vdp_exp_device, vdp_interrupt))
MCFG_TMS9928A_SCREEN_ADD_NTSC("tms_screen")
MCFG_SCREEN_UPDATE_DEVICE("tms", tms9928a_device, screen_update)
MACHINE_CONFIG_END
void spc1000_vdp_exp_device::device_add_mconfig(machine_config &config)
{
TMS9928A(config, m_vdp, XTAL(10'738'635)); // TODO: which clock?
m_vdp->set_vram_size(0x4000);
m_vdp->int_callback().set(FUNC(spc1000_vdp_exp_device::vdp_interrupt));
m_vdp->set_screen("tms_screen");
SCREEN(config, "tms_screen", SCREEN_TYPE_RASTER);
}
//**************************************************************************

View File

@ -70,8 +70,27 @@ tms9928a_device::tms9928a_device(const machine_config &mconfig, device_type type
{
}
void tms9928a_device::device_config_complete()
{
if (!has_screen())
return;
tms9928a_device::tms9928a_device( const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock )
if (!screen().have_screen_update())
screen().set_screen_update(screen_update_rgb32_delegate(FUNC(tms9928a_device::screen_update), this));
if (!screen().refresh_attoseconds())
{
if (m_50hz)
screen().set_raw(clock() / 2, TOTAL_HORZ, HORZ_DISPLAY_START - 12, HORZ_DISPLAY_START + 256 + 12,
TOTAL_VERT_PAL, VERT_DISPLAY_START_PAL - 12, VERT_DISPLAY_START_PAL + 192 + 12);
else
screen().set_raw(clock() / 2, TOTAL_HORZ, HORZ_DISPLAY_START - 12, HORZ_DISPLAY_START + 256 + 12,
TOTAL_VERT_PAL, VERT_DISPLAY_START_NTSC - 12, VERT_DISPLAY_START_NTSC + 192 + 12);
}
}
tms9928a_device::tms9928a_device( const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: tms9928a_device(mconfig, TMS9928A, tag, owner, clock, false, true, true)
{
}
@ -111,6 +130,12 @@ tms9929a_device::tms9929a_device(const machine_config &mconfig, const char *tag,
{
}
void tms9928a_device::device_validity_check(validity_checker &valid) const
{
if (clock() < 6'000'000)
osd_printf_error("%d Hz clock is too slow!\n", clock());
}
device_memory_interface::space_config_vector tms9928a_device::memory_space_config() const
{
return space_config_vector {
@ -765,5 +790,6 @@ void tms9928a_device::device_reset()
m_line_timer->adjust( screen().time_until_pos( 0, HORZ_DISPLAY_START ) );
// TODO: Check clock freq settings in all drivers
if (!m_out_gromclk_cb.isnull() && m_99) m_gromclk_timer->adjust(attotime::zero, 0, attotime::from_hz(clock()/12));
if (!m_out_gromclk_cb.isnull() && m_99)
m_gromclk_timer->adjust(attotime::zero, 0, clocks_to_attotime(24));
}

View File

@ -21,6 +21,13 @@
TMS9128 YPbPr 60
TMS9129 YPbPr 50
EFO90501 ? 50? (uses 10.816 MHz XTAL; TI logo sometimes present)
XTAL inputs 10.738098 to 10.739172 MHz (10.738635 MHz typical)
Pixel clock (internal) XTAL ÷ 2
CPUCLK (N/A with TMS992x) XTAL ÷ 3 (3.58 MHz typical)
GROMCLK XTAL ÷ 24 (447.5 kHz typical)
*/
#ifndef MAME_VIDEO_TMS9928A_H
@ -31,34 +38,6 @@
#include "screen.h"
// MCFG_DEVICE_ADD(_tag, _variant, XTAL(10'738'635) / 2 )
#define MCFG_TMS9928A_VRAM_SIZE(_size) \
downcast<tms9928a_device &>(*device).set_vram_size(_size);
#define MCFG_TMS9928A_OUT_INT_LINE_CB(_devcb) \
downcast<tms9928a_device &>(*device).set_out_int_line_callback(DEVCB_##_devcb);
#define MCFG_TMS9928A_SET_SCREEN MCFG_VIDEO_SET_SCREEN
#define MCFG_TMS9928A_OUT_GROMCLK_CB(_devcb) \
downcast<tms9928a_device &>(*device).set_out_gromclk_callback(DEVCB_##_devcb);
#define MCFG_TMS9928A_SCREEN_ADD_NTSC(_screen_tag) \
MCFG_VIDEO_SET_SCREEN(_screen_tag) \
MCFG_SCREEN_ADD( _screen_tag, RASTER ) \
MCFG_SCREEN_RAW_PARAMS( XTAL(10'738'635) / 2, tms9928a_device::TOTAL_HORZ, tms9928a_device::HORZ_DISPLAY_START-12, tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_NTSC, tms9928a_device::VERT_DISPLAY_START_NTSC - 12, tms9928a_device::VERT_DISPLAY_START_NTSC + 192 + 12 )
#define MCFG_TMS9928A_SCREEN_ADD_PAL(_screen_tag) \
MCFG_VIDEO_SET_SCREEN(_screen_tag) \
MCFG_SCREEN_ADD(_screen_tag, RASTER ) \
MCFG_SCREEN_RAW_PARAMS( XTAL(10'738'635) / 2, tms9928a_device::TOTAL_HORZ, tms9928a_device::HORZ_DISPLAY_START-12, tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_PAL, tms9928a_device::VERT_DISPLAY_START_PAL - 12, tms9928a_device::VERT_DISPLAY_START_PAL + 192 + 12 )
DECLARE_DEVICE_TYPE(TMS9918, tms9918_device)
DECLARE_DEVICE_TYPE(TMS9918A, tms9918a_device)
DECLARE_DEVICE_TYPE(TMS9118, tms9118_device)
@ -90,10 +69,8 @@ public:
tms9928a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void set_vram_size(int vram_size) { m_vram_size = vram_size; }
template <class Object> devcb_base &set_out_int_line_callback(Object &&cb) { return m_out_int_line_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_out_gromclk_callback(Object &&cb) { return m_out_gromclk_cb.set_callback(std::forward<Object>(cb)); }
auto out_int_line_callback() { return m_out_int_line_cb.bind(); }
auto out_gromclk_callback() { return m_out_gromclk_cb.bind(); }
auto int_callback() { return m_out_int_line_cb.bind(); }
auto gromclk_callback() { return m_out_gromclk_cb.bind(); }
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@ -119,6 +96,8 @@ protected:
tms9928a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool is_50hz, bool is_reva, bool is_99);
// device-level overrides
virtual void device_config_complete() override;
virtual void device_validity_check(validity_checker &valid) const override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

View File

@ -1052,11 +1052,10 @@ MACHINE_CONFIG_START(adam_state::adam)
MCFG_QUANTUM_PERFECT_CPU(M6801_TAG)
// video hardware
MCFG_DEVICE_ADD(TMS9928A_TAG, TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, adam_state, vdc_int_w))
MCFG_TMS9928A_SCREEN_ADD_NTSC(SCREEN_TAG)
MCFG_SCREEN_UPDATE_DEVICE(TMS9928A_TAG, tms9928a_device, screen_update)
TMS9928A(config, m_vdc, XTAL(10'738'635)).set_screen("screen");
m_vdc->set_vram_size(0x4000);
m_vdc->int_callback().set(FUNC(adam_state::vdc_int_w));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
// sound hardware
SPEAKER(config, "mono").front_center();

View File

@ -448,11 +448,11 @@ MACHINE_CONFIG_START(arachnid_state::arachnid)
m_pia_u17->cb2_handler().set(FUNC(arachnid_state::pia_u17_pcb_w));
// video hardware
MCFG_DEVICE_ADD(TMS9118_TAG, TMS9118, 10.738635_MHz_XTAL / 2)
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE(M6809_TAG, INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS9118_TAG, tms9118_device, screen_update )
tms9118_device &vdp(TMS9118(config, TMS9118_TAG, 10.738635_MHz_XTAL));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
// sound hardware
SPEAKER(config, "mono").front_center();

View File

@ -119,22 +119,22 @@ static const z80_daisy_config bbcbc_daisy_chain[] =
MACHINE_CONFIG_START(bbcbc_state::bbcbc)
MCFG_DEVICE_ADD( "maincpu", Z80, MAIN_CLOCK / 8 )
MCFG_DEVICE_ADD("maincpu", Z80, 10.6875_MHz_XTAL / 3)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
MCFG_Z80_DAISY_CHAIN(bbcbc_daisy_chain)
MCFG_DEVICE_ADD("z80pio", Z80PIO, MAIN_CLOCK/8)
MCFG_DEVICE_ADD("z80pio", Z80PIO, 10.6875_MHz_XTAL / 3)
//MCFG_Z80PIO_OUT_PA_CB(???)
//MCFG_Z80PIO_IN_STROBE_CB(???)
MCFG_Z80PIO_IN_PB_CB(READ8(*this, bbcbc_state, input_r))
MCFG_Z80PIO_OUT_PB_CB(WRITE8(*this, bbcbc_state, input_select_w))
MCFG_DEVICE_ADD( "tms9129", TMS9129, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", 0))
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9129", tms9928a_device, screen_update )
tms9129_device &vdp(TMS9129(config, "tms9129", 10.6875_MHz_XTAL));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline("maincpu", 0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
// Software on ROM cartridges
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "bbcbc_cart")

View File

@ -800,11 +800,10 @@ MACHINE_CONFIG_START(by133_state::babypac)
MCFG_TIMER_DRIVER_ADD_PERIODIC("babypac2", by133_state, u11_timer, attotime::from_hz(634)) // 555 timer*2
/* video hardware */
MCFG_DEVICE_ADD( "crtc", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("videocpu", M6809_IRQ_LINE))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "crtc", tms9928a_device, screen_update )
TMS9928A(config, m_crtc, XTAL(10'738'635)).set_screen("screen");
m_crtc->set_vram_size(0x4000);
m_crtc->int_callback().set_inputline(m_videocpu, M6809_IRQ_LINE);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "speaker").front_center();
@ -823,16 +822,11 @@ MACHINE_CONFIG_START(by133_state::granny)
MCFG_DEVICE_ADD("videocpu", MC6809, XTAL(8'000'000)) // MC68B09P (XTAL value hard to read)
MCFG_DEVICE_PROGRAM_MAP(granny_map)
MCFG_DEVICE_REMOVE("screen")
TMS9928A(config, m_crtc2, XTAL(10'738'635)).set_screen("screen");
m_crtc2->set_vram_size(0x4000);
m_crtc2->int_callback().set_inputline(m_videocpu, M6809_IRQ_LINE);
MCFG_DEVICE_ADD( "crtc2", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("videocpu", M6809_IRQ_LINE))
MCFG_VIDEO_SET_SCREEN("screen")
MCFG_SCREEN_ADD( "screen", RASTER )
MCFG_SCREEN_RAW_PARAMS( XTAL(10'738'635) / 2, tms9928a_device::TOTAL_HORZ, tms9928a_device::HORZ_DISPLAY_START-12, tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_NTSC, tms9928a_device::VERT_DISPLAY_START_NTSC - 12, tms9928a_device::VERT_DISPLAY_START_NTSC + 192 + 12 )
MCFG_DEVICE_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(by133_state, screen_update_granny)
MACHINE_CONFIG_END

View File

@ -702,9 +702,9 @@ MACHINE_CONFIG_START(cliffhgr_state::cliffhgr)
MCFG_LASERDISC_OVERLAY_CLIP(tms9928a_device::HORZ_DISPLAY_START-12, tms9928a_device::HORZ_DISPLAY_START+32*8+12-1, tms9928a_device::VERT_DISPLAY_START_NTSC - 12, tms9928a_device::VERT_DISPLAY_START_NTSC+24*8+12-1)
/* start with the TMS9928a video configuration */
MCFG_DEVICE_ADD( "tms9928a", TMS9128, XTAL(10'738'635) / 2 ) /* TMS9128NL on the board */
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_NMI))
tms9128_device &vdp(TMS9128(config, "tms9928a", XTAL(10'738'635))); /* TMS9128NL on the board */
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
/* override video rendering and raw screen info */
MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", "laserdisc")

View File

@ -382,11 +382,11 @@ MACHINE_CONFIG_START(coleco_state::coleco)
MCFG_DEVICE_IO_MAP(coleco_io_map)
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, coleco_state, coleco_vdp_interrupt))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(coleco_state::coleco_vdp_interrupt));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -404,19 +404,16 @@ MACHINE_CONFIG_START(coleco_state::coleco)
MCFG_TIMER_DRIVER_ADD_PERIODIC("paddle_timer", coleco_state, paddle_update_callback, attotime::from_msec(20))
MACHINE_CONFIG_END
MACHINE_CONFIG_START(coleco_state::colecop)
void coleco_state::colecop(machine_config &config)
{
coleco(config);
/* video hardware */
MCFG_DEVICE_REMOVE("tms9928a")
MCFG_DEVICE_REMOVE("screen")
MCFG_DEVICE_ADD( "tms9928a", TMS9929A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, coleco_state, coleco_vdp_interrupt))
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
MACHINE_CONFIG_END
tms9929a_device &vdp(TMS9929A(config.replace(), "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(coleco_state::coleco_vdp_interrupt));
}
MACHINE_CONFIG_START(coleco_state::czz50)
coleco(config);
@ -426,19 +423,16 @@ MACHINE_CONFIG_START(coleco_state::czz50)
MCFG_DEVICE_PROGRAM_MAP(czz50_map)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(coleco_state::dina)
void coleco_state::dina(machine_config &config)
{
czz50(config);
/* video hardware */
MCFG_DEVICE_REMOVE("tms9928a")
MCFG_DEVICE_REMOVE("screen")
MCFG_DEVICE_ADD( "tms9928a", TMS9929A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, coleco_state, coleco_vdp_interrupt))
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
MACHINE_CONFIG_END
tms9929a_device &vdp(TMS9929A(config.replace(), "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(coleco_state::coleco_vdp_interrupt));
}
/* ROMs */

View File

@ -198,13 +198,12 @@ MACHINE_CONFIG_START(cortex_state::cortex)
control.q_out_cb<6>().set("beeper", FUNC(beep_device::set_state));
/* video hardware */
tms9929a_device &crtc(TMS9929A(config, "crtc", XTAL(10'738'635) / 2));
crtc.out_int_line_callback().set_inputline(m_maincpu, INT_9995_INT1);
crtc.out_int_line_callback().append(FUNC(cortex_state::vdp_int_w));
tms9929a_device &crtc(TMS9929A(config, "crtc", XTAL(10'738'635)));
crtc.set_screen("screen");
crtc.int_callback().set_inputline(m_maincpu, INT_9995_INT1);
crtc.int_callback().append(FUNC(cortex_state::vdp_int_w));
crtc.set_vram_size(0x4000);
device = &crtc; // FIXME: this line is needed because the following macro is nasty
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "crtc", tms9928a_device, screen_update )
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(PUT(cortex_state, kbd_put))

View File

@ -187,7 +187,7 @@ void laser2001_state::lasr2001_map(address_map &map)
INPUT_CHANGED_MEMBER( crvision_state::trigger_nmi )
{
m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE);
m_maincpu->set_input_line(m6502_device::NMI_LINE, newval ? CLEAR_LINE : ASSERT_LINE);
}
/*-------------------------------------------------
@ -786,29 +786,31 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START( ntsc )
-------------------------------------------------*/
MACHINE_CONFIG_START(crvision_state::ntsc)
void crvision_state::ntsc(machine_config &config)
{
creativision(config);
// video hardware
MCFG_DEVICE_ADD( TMS9929_TAG, TMS9918, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS9929_TAG, tms9918_device, screen_update )
MACHINE_CONFIG_END
tms9918_device &vdp(TMS9918(config, TMS9929_TAG, XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(M6502_TAG, m6502_device::IRQ_LINE);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
/*-------------------------------------------------
MACHINE_CONFIG_START( pal )
-------------------------------------------------*/
MACHINE_CONFIG_START(crvision_pal_state::pal)
void crvision_pal_state::pal(machine_config &config)
{
creativision(config);
// video hardware
MCFG_DEVICE_ADD( TMS9929_TAG, TMS9929, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_PAL( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS9929_TAG, tms9929_device, screen_update )
MACHINE_CONFIG_END
tms9929_device &vdp(TMS9929(config, TMS9929_TAG, XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(M6502_TAG, m6502_device::IRQ_LINE);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
/*-------------------------------------------------
MACHINE_CONFIG_START( lasr2001 )
@ -838,11 +840,11 @@ MACHINE_CONFIG_START(laser2001_state::lasr2001)
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
// video hardware
MCFG_DEVICE_ADD( TMS9929_TAG, TMS9929A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_PAL( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS9929_TAG, tms9929a_device, screen_update )
tms9929a_device &vdp(TMS9929A(config, TMS9929_TAG, XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(M6502_TAG, m6502_device::IRQ_LINE);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
// sound hardware
SPEAKER(config, "mono").front_center();

View File

@ -616,11 +616,10 @@ MACHINE_CONFIG_START(einstein_state::einstein)
MCFG_Z80DAISY_GENERIC_INT_CB(WRITELINE(*this, einstein_state, int_w<4>))
/* video hardware */
MCFG_DEVICE_ADD("vdp", TMS9129, 10.738635_MHz_XTAL / 2)
MCFG_TMS9928A_VRAM_SIZE(0x4000) // 16k RAM, provided by IC i040 and i041
MCFG_TMS9928A_SET_SCREEN("screen")
MCFG_TMS9928A_SCREEN_ADD_PAL("screen")
MCFG_SCREEN_UPDATE_DEVICE("vdp", tms9129_device, screen_update)
tms9129_device &vdp(TMS9129(config, "vdp", 10.738635_MHz_XTAL));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000); // 16k RAM, provided by IC i040 and i041
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -133,11 +133,11 @@ MACHINE_CONFIG_START(forte2_state::pesadelo)
MCFG_DEVICE_IO_MAP(io_mem)
/* video hardware */
MCFG_DEVICE_ADD("tms9928a", TMS9928A, XTAL(10'738'635)/2)
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC("screen")
MCFG_SCREEN_UPDATE_DEVICE("tms9928a", tms9928a_device, screen_update)
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -169,12 +169,11 @@ MACHINE_CONFIG_START(kingpin_state::kingpin)
MCFG_DEVICE_PERIODIC_INT_DRIVER(kingpin_state, irq0_line_hold, 1000) // unknown freq
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", 0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline("maincpu", 0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -1467,30 +1467,32 @@ MACHINE_CONFIG_END
// MACHINE_CONFIG_START( ntsc )
//-------------------------------------------------
MACHINE_CONFIG_START(m5_state::ntsc)
void m5_state::ntsc(machine_config &config)
{
m5(config);
// video hardware
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, 10.738635_MHz_XTAL / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, m5_state, sordm5_video_interrupt_callback))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
MACHINE_CONFIG_END
tms9928a_device &vdp(TMS9928A(config, "tms9928a", 10.738635_MHz_XTAL));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(m5_state::sordm5_video_interrupt_callback));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
//-------------------------------------------------
// MACHINE_CONFIG_START( pal )
//-------------------------------------------------
MACHINE_CONFIG_START(m5_state::pal)
void m5_state::pal(machine_config &config)
{
m5(config);
// video hardware
MCFG_DEVICE_ADD( "tms9928a", TMS9929A, 10.738635_MHz_XTAL / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, m5_state, sordm5_video_interrupt_callback))
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
MACHINE_CONFIG_END
tms9929a_device &vdp(TMS9929A(config, "tms9928a", 10.738635_MHz_XTAL));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(m5_state::sordm5_video_interrupt_callback));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
//-------------------------------------------------
// MACHINE_CONFIG( m5p_brno )
@ -1513,12 +1515,11 @@ MACHINE_CONFIG_START(brno_state::brno)
MCFG_DEVICE_REMOVE(UPD765_TAG)
// video hardware
MCFG_DEVICE_ADD("tms9928a", TMS9929A, 10.738635_MHz_XTAL / 2)
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, m5_state, sordm5_video_interrupt_callback))
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
tms9929a_device &vdp(TMS9929A(config, "tms9928a", 10.738635_MHz_XTAL));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(m5_state::sordm5_video_interrupt_callback));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
// floppy
MCFG_DEVICE_ADD(WD2797_TAG, WD2797, 1_MHz_XTAL)

File diff suppressed because it is too large Load Diff

View File

@ -295,11 +295,11 @@ MACHINE_CONFIG_START(mtx_state::mtx512)
MCFG_MACHINE_RESET_OVERRIDE(mtx_state,mtx512)
/* video hardware */
MCFG_DEVICE_ADD( "tms9929a", TMS9929A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, mtx_state, mtx_tms9929a_interrupt))
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9929a", tms9929a_device, screen_update )
tms9929a_device &vdp(TMS9929A(config, "tms9929a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(mtx_state::mtx_tms9929a_interrupt));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -221,11 +221,11 @@ MACHINE_CONFIG_START(myvision_state::myvision)
MCFG_DEVICE_IO_MAP(myvision_io)
/* video hardware */
MCFG_DEVICE_ADD( "tms9918", TMS9918A, XTAL(10'738'635) / 2 ) /* Exact model not verified */
MCFG_TMS9928A_VRAM_SIZE(0x4000) /* Not verified */
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9918", tms9918a_device, screen_update )
tms9918a_device &vdp(TMS9918A(config, "tms9918", XTAL(10'738'635))); /* Exact model not verified */
vdp.set_screen("screen");
vdp.set_vram_size(0x4000); /* Not verified */
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -358,11 +358,12 @@ MACHINE_CONFIG_START(pachifev_state::pachifev)
m_maincpu->set_addrmap(AS_IO, &pachifev_state::pachifev_cru);
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, pachifev_state, vblank_w))
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.screen_vblank().set(FUNC(pachifev_state::vblank_w));
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -318,10 +318,10 @@ MACHINE_CONFIG_START(pencil2_state::pencil2)
MCFG_DEVICE_IO_MAP(io_map)
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9929A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
tms9929a_device &vdp(TMS9929A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
// sound hardware
SPEAKER(config, "mono").front_center();

View File

@ -234,11 +234,11 @@ MACHINE_CONFIG_START(pengadvb_state::pengadvb)
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pengadvb_state, pengadvb_ppi_port_c_w))
/* video hardware */
MCFG_DEVICE_ADD("tms9128", TMS9128, XTAL(10'738'635)/2)
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE("tms9128", tms9128_device, screen_update)
tms9128_device &vdp(TMS9128(config, "tms9128", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -394,11 +394,11 @@ MACHINE_CONFIG_START(pv2000_state::pv2000)
MCFG_DEVICE_IO_MAP(pv2000_io_map)
// video hardware
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, pv2000_state, pv2000_vdp_interrupt))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set(FUNC(pv2000_state::pv2000_vdp_interrupt));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
// sound hardware
SPEAKER(config, "mono").front_center();

View File

@ -397,11 +397,11 @@ MACHINE_CONFIG_START(re900_state::re900)
MCFG_MCS51_PORT_P0_OUT_CB(WRITE8(*this, re900_state, cpu_port_0_w))
/* video hardware */
MCFG_DEVICE_ADD( "tms9128", TMS9128, XTAL(10'738'635) / 2 ) /* TMS9128NL on the board */
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9128", tms9128_device, screen_update )
tms9128_device &vdp(TMS9128(config, "tms9128", VDP_CLOCK)); /* TMS9128NL on the board */
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
//vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
MCFG_NVRAM_ADD_0FILL("nvram")

View File

@ -534,11 +534,11 @@ MACHINE_CONFIG_START(sg1000_state::sg1000)
MCFG_DEVICE_IO_MAP(sg1000_io_map)
/* video hardware */
MCFG_DEVICE_ADD( TMS9918A_TAG, TMS9918A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS9918A_TAG, tms9918a_device, screen_update )
tms9918a_device &vdp(TMS9918A(config, TMS9918A_TAG, XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -586,11 +586,11 @@ MACHINE_CONFIG_START(sc3000_state::sc3000)
MCFG_DEVICE_IO_MAP(sc3000_io_map)
/* video hardware */
MCFG_DEVICE_ADD( TMS9918A_TAG, TMS9918A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS9918A_TAG, tms9918a_device, screen_update )
tms9918a_device &vdp(TMS9918A(config, TMS9918A_TAG, XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -623,11 +623,11 @@ MACHINE_CONFIG_START(sf7000_state::sf7000)
MCFG_DEVICE_IO_MAP(sf7000_io_map)
/* video hardware */
MCFG_DEVICE_ADD( TMS9918A_TAG, TMS9918A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG )
MCFG_SCREEN_UPDATE_DEVICE( TMS9918A_TAG, tms9918a_device, screen_update )
tms9918a_device &vdp(TMS9918A(config, TMS9918A_TAG, XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -481,12 +481,11 @@ MACHINE_CONFIG_START(sg1000a_state::sg1000a)
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, sg1000a_state, sg1000a_coin_counter_w))
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();

View File

@ -71,10 +71,11 @@ public:
m_keyboard_row(0)
{}
void svi328n(machine_config &config);
void svi318(machine_config &config);
void svi328n(machine_config &config);
void svi318p(machine_config &config);
void svi318n(machine_config &config);
void svi328(machine_config &config);
void svi328p(machine_config &config);
private:
DECLARE_READ8_MEMBER( ppi_port_a_r );
@ -544,13 +545,6 @@ MACHINE_CONFIG_START(svi3x8_state::svi318)
MCFG_I8255_IN_PORTB_CB(READ8(*this, svi3x8_state, ppi_port_b_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, svi3x8_state, ppi_port_c_w))
// video hardware
MCFG_DEVICE_ADD("vdp", TMS9929A, XTAL(10'738'635) / 2)
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, svi3x8_state, intvdp_w))
MCFG_TMS9928A_SCREEN_ADD_PAL("screen")
MCFG_SCREEN_UPDATE_DEVICE("vdp", tms9929a_device, screen_update)
// sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.25);
@ -583,20 +577,29 @@ MACHINE_CONFIG_START(svi3x8_state::svi318)
MCFG_SVI_EXPANDER_EXCSW_HANDLER(WRITE8(*this, svi3x8_state, excs_w))
MACHINE_CONFIG_END
MACHINE_CONFIG_START(svi3x8_state::svi318n)
svi318(config);
MCFG_DEVICE_REMOVE("vdp")
MCFG_DEVICE_REMOVE("screen")
MCFG_DEVICE_ADD("vdp", TMS9928A, XTAL(10'738'635) / 2)
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(*this, svi3x8_state, intvdp_w))
MCFG_TMS9928A_SCREEN_ADD_NTSC("screen")
MCFG_SCREEN_UPDATE_DEVICE("vdp", tms9928a_device, screen_update)
MACHINE_CONFIG_END
void svi3x8_state::svi328(machine_config &config)
void svi3x8_state::svi318p(machine_config &config)
{
svi318(config);
// video hardware
TMS9929A(config, m_vdp, XTAL(10'738'635)).set_screen("screen");
m_vdp->set_vram_size(0x4000);
m_vdp->int_callback().set(FUNC(svi3x8_state::intvdp_w));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
void svi3x8_state::svi318n(machine_config &config)
{
svi318(config);
TMS9928A(config, m_vdp, XTAL(10'738'635)).set_screen("screen");
m_vdp->set_vram_size(0x4000);
m_vdp->int_callback().set(FUNC(svi3x8_state::intvdp_w));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
void svi3x8_state::svi328p(machine_config &config)
{
svi318p(config);
m_ram->set_default_size("64K");
}
@ -632,7 +635,7 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1983, svi318, 0, 0, svi318, svi318, svi3x8_state, empty_init, "Spectravideo", "SVI-318 (PAL)", MACHINE_SUPPORTS_SAVE )
COMP( 1983, svi318, 0, 0, svi318p, svi318, svi3x8_state, empty_init, "Spectravideo", "SVI-318 (PAL)", MACHINE_SUPPORTS_SAVE )
COMP( 1983, svi318n, svi318, 0, svi318n, svi318, svi3x8_state, empty_init, "Spectravideo", "SVI-318 (NTSC)", MACHINE_SUPPORTS_SAVE )
COMP( 1983, svi328, 0, 0, svi328, svi328, svi3x8_state, empty_init, "Spectravideo", "SVI-328 (PAL)", MACHINE_SUPPORTS_SAVE )
COMP( 1983, svi328, 0, 0, svi328p, svi328, svi3x8_state, empty_init, "Spectravideo", "SVI-328 (PAL)", MACHINE_SUPPORTS_SAVE )
COMP( 1983, svi328n, svi328, 0, svi328n, svi328, svi3x8_state, empty_init, "Spectravideo", "SVI-328 (NTSC)", MACHINE_SUPPORTS_SAVE )

View File

@ -940,47 +940,31 @@ void ti99_4x_state::ti99_4(machine_config& config)
/*
US version: 60 Hz, NTSC
*/
void ti99_4x_state::ti99_4_60hz(machine_config& config)
void ti99_4x_state::ti99_4_60hz(machine_config &config)
{
ti99_4(config);
TMS9918(config, m_video, XTAL(10'738'635) / 2);
m_video->out_int_line_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->out_gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
TMS9918(config, m_video, XTAL(10'738'635));
m_video->set_vram_size(0x4000);
m_video->int_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
m_video->set_screen(TI_SCREEN_TAG);
screen_device& screen(SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635) / 2, \
tms9928a_device::TOTAL_HORZ, \
tms9928a_device::HORZ_DISPLAY_START-12, \
tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_NTSC, \
tms9928a_device::VERT_DISPLAY_START_NTSC - 12, \
tms9928a_device::VERT_DISPLAY_START_NTSC + 192 + 12 );
screen.set_screen_update(TI_VDP_TAG, FUNC(tms9928a_device::screen_update));
SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER);
}
/*
European version: 50 Hz, PAL
*/
void ti99_4x_state::ti99_4_50hz(machine_config& config)
void ti99_4x_state::ti99_4_50hz(machine_config &config)
{
ti99_4(config);
TMS9929(config, m_video, XTAL(10'738'635) / 2);
m_video->out_int_line_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->out_gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
TMS9929(config, m_video, XTAL(10'738'635));
m_video->set_vram_size(0x4000);
m_video->int_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
m_video->set_screen(TI_SCREEN_TAG);
screen_device& screen(SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635) / 2, \
tms9928a_device::TOTAL_HORZ, \
tms9928a_device::HORZ_DISPLAY_START-12, \
tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_PAL, \
tms9928a_device::VERT_DISPLAY_START_PAL - 12, \
tms9928a_device::VERT_DISPLAY_START_PAL + 192 + 12 );
screen.set_screen_update(TI_VDP_TAG, FUNC(tms9928a_device::screen_update));
SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER);
}
/**********************************************************************
@ -1015,47 +999,31 @@ void ti99_4x_state::ti99_4a(machine_config& config)
/*
US version: 60 Hz, NTSC
*/
void ti99_4x_state::ti99_4a_60hz(machine_config& config)
void ti99_4x_state::ti99_4a_60hz(machine_config &config)
{
ti99_4a(config);
TMS9918A(config, m_video, XTAL(10'738'635) / 2);
m_video->out_int_line_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->out_gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
TMS9918A(config, m_video, XTAL(10'738'635));
m_video->set_vram_size(0x4000);
m_video->int_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
m_video->set_screen(TI_SCREEN_TAG);
screen_device& screen(SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635) / 2, \
tms9928a_device::TOTAL_HORZ, \
tms9928a_device::HORZ_DISPLAY_START-12, \
tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_NTSC, \
tms9928a_device::VERT_DISPLAY_START_NTSC - 12, \
tms9928a_device::VERT_DISPLAY_START_NTSC + 192 + 12 );
screen.set_screen_update(TI_VDP_TAG, FUNC(tms9928a_device::screen_update));
SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER);
}
/*
European version: 50 Hz, PAL
*/
void ti99_4x_state::ti99_4a_50hz(machine_config& config)
void ti99_4x_state::ti99_4a_50hz(machine_config &config)
{
ti99_4a(config);
TMS9929A(config, m_video, XTAL(10'738'635) / 2);
m_video->out_int_line_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->out_gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
TMS9929A(config, m_video, XTAL(10'738'635));
m_video->set_vram_size(0x4000);
m_video->int_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
m_video->set_screen(TI_SCREEN_TAG);
screen_device& screen(SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635) / 2, \
tms9928a_device::TOTAL_HORZ, \
tms9928a_device::HORZ_DISPLAY_START-12, \
tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_PAL, \
tms9928a_device::VERT_DISPLAY_START_PAL - 12, \
tms9928a_device::VERT_DISPLAY_START_PAL + 192 + 12 );
screen.set_screen_update(TI_VDP_TAG, FUNC(tms9928a_device::screen_update));
SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER);
}
/************************************************************************
@ -1071,26 +1039,18 @@ void ti99_4x_state::ti99_4a_50hz(machine_config& config)
US version: 60 Hz, NTSC
There were no European versions.
*/
void ti99_4x_state::ti99_4qi_60hz(machine_config& config)
void ti99_4x_state::ti99_4qi_60hz(machine_config &config)
{
ti99_4a(config);
m_model = MODEL_4QI;
TMS9918A(config, m_video, XTAL(10'738'635) / 2);
m_video->out_int_line_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->out_gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
TMS9918A(config, m_video, XTAL(10'738'635));
m_video->set_vram_size(0x4000);
m_video->int_callback().set(FUNC(ti99_4x_state::video_interrupt_in));
m_video->gromclk_callback().set(FUNC(ti99_4x_state::gromclk_in));
m_video->set_screen(TI_SCREEN_TAG);
screen_device& screen(SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635) / 2, \
tms9928a_device::TOTAL_HORZ, \
tms9928a_device::HORZ_DISPLAY_START-12, \
tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_NTSC, \
tms9928a_device::VERT_DISPLAY_START_NTSC - 12, \
tms9928a_device::VERT_DISPLAY_START_NTSC + 192 + 12 );
screen.set_screen_update(TI_VDP_TAG, FUNC(tms9928a_device::screen_update));
SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER);
}
/************************************************************************

View File

@ -842,47 +842,31 @@ void ti99_8_state::ti99_8(machine_config& config)
/*
TI-99/8 US version (NTSC, 60 Hz)
*/
void ti99_8_state::ti99_8_60hz(machine_config& config)
void ti99_8_state::ti99_8_60hz(machine_config &config)
{
ti99_8(config);
// Video hardware
tms9928a_device& video(TMS9118(config, TI_VDP_TAG, XTAL(10'738'635) / 2));
video.out_int_line_callback().set(FUNC(ti99_8_state::video_interrupt));
tms9118_device &video(TMS9118(config, TI_VDP_TAG, XTAL(10'738'635)));
video.set_vram_size(0x4000);
video.set_screen(TI_SCREEN_TAG);
video.int_callback().set(FUNC(ti99_8_state::video_interrupt));
video.set_screen("screen");
screen_device& screen(SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635) / 2, \
tms9928a_device::TOTAL_HORZ, \
tms9928a_device::HORZ_DISPLAY_START-12, \
tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_NTSC, \
tms9928a_device::VERT_DISPLAY_START_NTSC - 12, \
tms9928a_device::VERT_DISPLAY_START_NTSC + 192 + 12 );
screen.set_screen_update(TI_VDP_TAG, FUNC(tms9928a_device::screen_update));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
/*
TI-99/8 European version (PAL, 50 Hz)
*/
void ti99_8_state::ti99_8_50hz(machine_config& config)
void ti99_8_state::ti99_8_50hz(machine_config &config)
{
ti99_8(config);
// Video hardware
tms9928a_device& video(TMS9129(config, TI_VDP_TAG, XTAL(10'738'635) / 2));
video.out_int_line_callback().set(FUNC(ti99_8_state::video_interrupt));
tms9129_device &video(TMS9129(config, TI_VDP_TAG, XTAL(10'738'635)));
video.set_vram_size(0x4000);
video.set_screen(TI_SCREEN_TAG);
video.int_callback().set(FUNC(ti99_8_state::video_interrupt));
video.set_screen("screen");
screen_device& screen(SCREEN(config, TI_SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635) / 2, \
tms9928a_device::TOTAL_HORZ, \
tms9928a_device::HORZ_DISPLAY_START-12, \
tms9928a_device::HORZ_DISPLAY_START + 256 + 12, \
tms9928a_device::TOTAL_VERT_PAL, \
tms9928a_device::VERT_DISPLAY_START_PAL - 12, \
tms9928a_device::VERT_DISPLAY_START_PAL + 192 + 12 );
screen.set_screen_update(TI_VDP_TAG, FUNC(tms9928a_device::screen_update));
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
}
/*

View File

@ -891,10 +891,11 @@ MACHINE_CONFIG_START(tm990189_state::tm990_189_v)
MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189_v )
/* video hardware */
MCFG_DEVICE_ADD( "tms9918", TMS9918, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9918", tms9918_device, screen_update )
tms9918_device &vdp(TMS9918(config, "tms9918", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
config.set_default_layout(layout_tm990189v);
/* sound hardware */

View File

@ -753,10 +753,10 @@ MACHINE_CONFIG_START(tutor_state::tutor)
m_maincpu->set_addrmap(AS_IO, &tutor_state::tutor_io);
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
tms9928a_device &vdp(TMS9928A(config, "tms9928a", XTAL(10'738'635)));
vdp.set_screen("screen");
vdp.set_vram_size(0x4000);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound */
SPEAKER(config, "mono").front_center();

View File

@ -404,15 +404,7 @@ public:
void hbf700p(machine_config &config);
void msx(machine_config &config);
void msx_ntsc(machine_config &config);
void msx_tms9118(machine_config &config);
void msx_tms9128(machine_config &config);
void msx_tms9918(machine_config &config);
void msx_tms9918a(machine_config &config);
void msx_tms9928(machine_config &config);
void msx_pal(machine_config &config);
void msx_tms9129(machine_config &config);
void msx_tms9929(machine_config &config);
template<typename VDPType> void msx1(VDPType &vdp_type, machine_config &config);
void msx2(machine_config &config);
void msx2p(machine_config &config);
void msx2_pal(machine_config &config);