-devices/machine/msm6253: Removed MCFG macros and added devcb3 support, nw

-devices/machine/timer: Added device support to configure_scanline, nw

-devices/sound/2612intf: Removed MCFG macros.

-drivers/cegac2, segajw, segam1, segas18, segas24, segas32, segaufo, seta, shangha3: Removed MACHINE_CONFIG, mw
This commit is contained in:
mooglyguy 2018-12-27 00:17:16 +01:00
parent d582f7c4a0
commit 61a555c347
21 changed files with 1249 additions and 1303 deletions

View File

@ -25,13 +25,9 @@ DEFINE_DEVICE_TYPE(MSM6253, msm6253_device, "msm6253", "OKI MSM6253 A/D Converte
msm6253_device::msm6253_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, MSM6253, tag, owner, clock)
, m_analog_ports(*this, {finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG})
, m_analog_input_cb{{*this}, {*this}, {*this}, {*this}}
, m_shift_register(0)
{
m_analog_input_cb[0] = port_read_delegate(FUNC(msm6253_device::port_read<0>), this);
m_analog_input_cb[1] = port_read_delegate(FUNC(msm6253_device::port_read<1>), this);
m_analog_input_cb[2] = port_read_delegate(FUNC(msm6253_device::port_read<2>), this);
m_analog_input_cb[3] = port_read_delegate(FUNC(msm6253_device::port_read<3>), this);
}
//-------------------------------------------------
@ -41,37 +37,12 @@ msm6253_device::msm6253_device(const machine_config &mconfig, const char *tag, d
void msm6253_device::device_start()
{
for (int port = 0; port < 4; port++)
{
// resolve each callback
m_analog_input_cb[port].bind_relative_to(*owner());
// ensure that any configured ports truly are analog
if (m_analog_ports[port].found())
{
for (ioport_field &field : m_analog_ports[port]->fields())
if (!field.is_analog() && field.type() != IPT_UNKNOWN && field.type() != IPT_UNUSED)
throw emu_fatalerror("Port %s is not an analog port\n", m_analog_ports[port]->tag());
}
}
m_analog_input_cb[port].resolve_safe(0);
// save our state
save_item(NAME(m_shift_register));
}
//-------------------------------------------------
// port_read - helper to read configured ports
//-------------------------------------------------
template<int port>
ioport_value msm6253_device::port_read()
{
if (m_analog_ports[port].found())
return m_analog_ports[port]->read();
logerror("%s: Read from unassigned IN%d\n", machine().describe_context(), port);
return 0xff;
}
//-------------------------------------------------
// address_w - write from address bus to select
// one of four internal latches

View File

@ -23,38 +23,6 @@
#pragma once
//**************************************************************************
// CONFIGURATION MACROS
//**************************************************************************
#define MCFG_MSM6253_IN0_ANALOG_PORT(_input) \
downcast<msm6253_device &>(*device).set_input_tag<0>(_input);
#define MCFG_MSM6253_IN1_ANALOG_PORT(_input) \
downcast<msm6253_device &>(*device).set_input_tag<1>(_input);
#define MCFG_MSM6253_IN2_ANALOG_PORT(_input) \
downcast<msm6253_device &>(*device).set_input_tag<2>(_input);
#define MCFG_MSM6253_IN3_ANALOG_PORT(_input) \
downcast<msm6253_device &>(*device).set_input_tag<3>(_input);
#define MCFG_MSM6253_IN0_ANALOG_READ(_class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<0>(&_class::_method, #_class "::" #_method, this);
#define MCFG_MSM6253_IN1_ANALOG_READ(_class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<1>(&_class::_method, #_class "::" #_method, this);
#define MCFG_MSM6253_IN2_ANALOG_READ(_class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<2>(&_class::_method, #_class "::" #_method, this);
#define MCFG_MSM6253_IN3_ANALOG_READ(_class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<3>(&_class::_method, #_class "::" #_method, this);
#define MCFG_MSM6253_IN0_ANALOG_DEVREAD(_tag, _class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<0>(&_class::_method, #_class "::" #_method, _tag);
#define MCFG_MSM6253_IN1_ANALOG_DEVREAD(_tag, _class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<1>(&_class::_method, #_class "::" #_method, _tag);
#define MCFG_MSM6253_IN2_ANALOG_DEVREAD(_tag, _class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<2>(&_class::_method, #_class "::" #_method, _tag);
#define MCFG_MSM6253_IN3_ANALOG_DEVREAD(_tag, _class, _method) \
downcast<msm6253_device &>(*device).set_input_cb<3>(&_class::_method, #_class "::" #_method, _tag);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@ -64,23 +32,11 @@
class msm6253_device : public device_t
{
public:
typedef device_delegate<ioport_value ()> port_read_delegate;
// construction/destruction
msm6253_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// configuration
template <unsigned P> void set_input_tag(const char *tag) { m_analog_ports[P].set_tag(tag); }
template <unsigned P, typename... T> void set_input_cb(T &&... args) { m_analog_input_cb[P] = port_read_delegate(std::forward<T>(args)...); }
template <unsigned P> void set_input_cb(port_read_delegate callback) { m_analog_input_cb[P] = callback; }
template <unsigned P, class FunctionClass> void set_input_cb(const char *devname, ioport_value (FunctionClass::*callback)(), const char *name)
{
set_input_cb<P>(port_read_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
}
template <unsigned P, class FunctionClass> void set_input_cb(ioport_value (FunctionClass::*callback)(), const char *name)
{
set_input_cb<P>(port_read_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
}
template <unsigned Port> auto input() { return m_analog_input_cb[Port].bind(); }
// write handlers
WRITE8_MEMBER(address_w);
@ -96,12 +52,8 @@ protected:
virtual void device_start() override;
private:
// helpers
template<int port> ioport_value port_read();
// input configuration
optional_ioport_array<4> m_analog_ports;
port_read_delegate m_analog_input_cb[4];
devcb_read8 m_analog_input_cb[4];
// private data
u8 m_shift_register;

View File

@ -111,6 +111,11 @@ public:
{
configure_scanline(expired_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)), screen, first_vpos, increment);
}
template <class FunctionClass> void configure_scanline(const char *devname, void (FunctionClass::*callback)(timer_device &, void *, s32),
const char *name, const char *screen, int first_vpos, int increment)
{
configure_scanline(expired_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)), screen, first_vpos, increment);
}
template <typename Object> void set_callback(Object &&cb) { m_callback = std::forward<Object>(cb); }
template <class FunctionClass> void set_callback(void (FunctionClass::*callback)(timer_device &, void *, s32), const char *name)

View File

@ -6,9 +6,6 @@
#pragma once
#define MCFG_YM2612_IRQ_HANDLER(cb) \
downcast<ym2612_device &>(*device).set_irq_handler((DEVCB_##cb));
class ym2612_device : public device_t, public device_sound_interface
{
public:

View File

@ -54,11 +54,14 @@ public:
sega315_5124_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
sega315_5124_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t cram_size, uint8_t palette_offset, uint8_t reg_num_mask, int max_sprite_zoom_hcount, int max_sprite_zoom_vcount, const uint8_t *line_timing);
void set_signal_type(bool is_pal) { m_is_pal = is_pal; }
void set_is_pal(bool is_pal) { m_is_pal = is_pal; }
template <class Object> devcb_base &set_int_callback(Object &&cb) { return m_int_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_csync_callback(Object &&cb) { return m_csync_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_pause_callback(Object &&cb) { return m_pause_cb.set_callback(std::forward<Object>(cb)); }
auto irq() { return m_int_cb.bind(); }
auto csync() { return m_csync_cb.bind(); }
auto pause() { return m_pause_cb.bind(); }
DECLARE_READ8_MEMBER( data_read );
DECLARE_WRITE8_MEMBER( data_write );
@ -256,7 +259,7 @@ protected:
#define MCFG_SEGA315_5124_SET_SCREEN MCFG_VIDEO_SET_SCREEN
#define MCFG_SEGA315_5124_IS_PAL(_bool) \
downcast<sega315_5124_device &>(*device).set_signal_type(_bool);
downcast<sega315_5124_device &>(*device).set_is_pal(_bool);
#define MCFG_SEGA315_5124_INT_CB(_devcb) \
downcast<sega315_5124_device &>(*device).set_int_callback(DEVCB_##_devcb);
@ -271,7 +274,7 @@ protected:
#define MCFG_SEGA315_5246_SET_SCREEN MCFG_VIDEO_SET_SCREEN
#define MCFG_SEGA315_5246_IS_PAL(_bool) \
downcast<sega315_5246_device &>(*device).set_signal_type(_bool);
downcast<sega315_5246_device &>(*device).set_is_pal(_bool);
#define MCFG_SEGA315_5246_INT_CB(_devcb) \
downcast<sega315_5246_device &>(*device).set_int_callback(DEVCB_##_devcb);
@ -286,7 +289,7 @@ protected:
#define MCFG_SEGA315_5377_SET_SCREEN MCFG_VIDEO_SET_SCREEN
#define MCFG_SEGA315_5377_IS_PAL(_bool) \
downcast<sega315_5377_device &>(*device).set_signal_type(_bool);
downcast<sega315_5377_device &>(*device).set_is_pal(_bool);
#define MCFG_SEGA315_5377_INT_CB(_devcb) \
downcast<sega315_5377_device &>(*device).set_int_callback(DEVCB_##_devcb);

View File

@ -13,7 +13,7 @@
#define MCFG_SEGA315_5313_IS_PAL(_bool) \
downcast<sega315_5313_device &>(*device).set_signal_type(_bool);
downcast<sega315_5313_device &>(*device).set_is_pal(_bool);
#define MCFG_SEGA315_5313_INT_CB(_devcb) \
downcast<sega315_5313_device &>(*device).set_int_callback(DEVCB_##_devcb);
@ -34,10 +34,10 @@
downcast<sega315_5313_device &>(*device).set_alt_timing(_data);
#define MCFG_SEGA315_5313_PAL_WRITE_BASE(_data) \
downcast<sega315_5313_device &>(*device).set_palwrite_base(_data);
downcast<sega315_5313_device &>(*device).set_pal_write_base(_data);
#define MCFG_SEGA315_5313_PALETTE(_palette_tag) \
downcast<sega315_5313_device &>(*device).set_palette_tag(_palette_tag);
downcast<sega315_5313_device &>(*device).set_palette(_palette_tag);
// Temporary solution while 32x VDP mixing and scanline interrupting is moved outside MD VDP
@ -70,9 +70,13 @@ public:
template <class Object> devcb_base &set_sndirqline_callback(Object &&cb) { return m_sndirqline_callback.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_lv6irqline_callback(Object &&cb) { return m_lv6irqline_callback.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_lv4irqline_callback(Object &&cb) { return m_lv4irqline_callback.set_callback(std::forward<Object>(cb)); }
auto snd_irq() { return m_sndirqline_callback.bind(); }
auto lv6_irq() { return m_lv6irqline_callback.bind(); }
auto lv4_irq() { return m_lv4irqline_callback.bind(); }
void set_alt_timing(int use_alt_timing) { m_use_alt_timing = use_alt_timing; }
void set_palwrite_base(int palwrite_base) { m_palwrite_base = palwrite_base; }
template <typename T> void set_palette_tag(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); }
void set_pal_write_base(int palwrite_base) { m_palwrite_base = palwrite_base; }
template <typename T> void set_palette(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); }
template <typename Object> void set_md_32x_scanline(Object &&cb) { m_32x_scanline_func = std::forward<Object>(cb); }
template <typename Object> void set_md_32x_interrupt(Object &&cb) { m_32x_interrupt_func = std::forward<Object>(cb); }

View File

@ -563,7 +563,7 @@ WRITE8_MEMBER(segac2_state::prot_w)
m_sp_palbase = new_sp_palbase;
m_bg_palbase = new_bg_palbase;
recompute_palette_tables();
if (LOG_PALETTE) logerror("Set palbank: %d/%d (scan=%d)\n", m_bg_palbase, m_sp_palbase, m_screen->vpos());
if (LOG_PALETTE && m_screen) logerror("Set palbank: %d/%d (scan=%d)\n", m_bg_palbase, m_sp_palbase, m_screen->vpos());
}
}
@ -1542,15 +1542,16 @@ WRITE_LINE_MEMBER(segac2_state::vdp_lv4irqline_callback_c2)
}
MACHINE_CONFIG_START(segac2_state::segac)
void segac2_state::segac(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, XL2_CLOCK/6)
MCFG_DEVICE_PROGRAM_MAP(main_map)
MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(md_base_state,genesis_int_callback)
M68000(config, m_maincpu, XL2_CLOCK/6);
m_maincpu->set_addrmap(AS_PROGRAM, &segac2_state::main_map);
m_maincpu->set_irq_acknowledge_callback(FUNC(md_base_state::genesis_int_callback));
MCFG_MACHINE_START_OVERRIDE(segac2_state,segac2)
MCFG_MACHINE_RESET_OVERRIDE(segac2_state,segac2)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); // borencha requires 0xff fill or there is no sound (it lacks some of the init code of the borench set)
sega_315_5296_device &io(SEGA_315_5296(config, "io", XL2_CLOCK/6)); // clock divider guessed
@ -1564,36 +1565,36 @@ MACHINE_CONFIG_START(segac2_state::segac)
io.out_ph_callback().set(FUNC(segac2_state::io_porth_w));
/* video hardware */
MCFG_DEVICE_ADD("gen_vdp", SEGA315_5313, XL2_CLOCK, "maincpu")
MCFG_SEGA315_5313_IS_PAL(false)
MCFG_SEGA315_5313_SND_IRQ_CALLBACK(WRITELINE(*this, segac2_state, vdp_sndirqline_callback_c2));
MCFG_SEGA315_5313_LV6_IRQ_CALLBACK(WRITELINE(*this, segac2_state, vdp_lv6irqline_callback_c2));
MCFG_SEGA315_5313_LV4_IRQ_CALLBACK(WRITELINE(*this, segac2_state, vdp_lv4irqline_callback_c2));
MCFG_SEGA315_5313_ALT_TIMING(1);
MCFG_VIDEO_SET_SCREEN("megadriv")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
SEGA315_5313(config, m_vdp, XL2_CLOCK, m_maincpu);
m_vdp->set_is_pal(false);
m_vdp->snd_irq().set(FUNC(segac2_state::vdp_sndirqline_callback_c2));
m_vdp->lv6_irq().set(FUNC(segac2_state::vdp_lv6irqline_callback_c2));
m_vdp->lv4_irq().set(FUNC(segac2_state::vdp_lv4irqline_callback_c2));
m_vdp->set_alt_timing(1);
m_vdp->set_screen("megadriv");
m_vdp->add_route(ALL_OUTPUTS, "mono", 0.5);
MCFG_TIMER_DEVICE_ADD_SCANLINE("scantimer", "gen_vdp", sega315_5313_device, megadriv_scanline_timer_callback_alt_timing, "megadriv", 0, 1)
TIMER(config, "scantimer").configure_scanline("gen_vdp", FUNC(sega315_5313_device::megadriv_scanline_timer_callback_alt_timing), "megadriv", 0, 1);
MCFG_SCREEN_ADD("megadriv", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_SIZE(512, 262)
MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(segac2_state, screen_update_segac2_new)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, segac2_state, screen_vblank_megadriv))
screen_device &screen(SCREEN(config, "megadriv", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_size(512, 262);
screen.set_visarea(0, 32*8-1, 0, 28*8-1);
screen.set_screen_update(FUNC(segac2_state::screen_update_segac2_new));
screen.screen_vblank().set(FUNC(segac2_state::screen_vblank_megadriv));
MCFG_PALETTE_ADD("palette", 2048*3)
PALETTE(config, m_palette, 2048*3);
MCFG_VIDEO_START_OVERRIDE(segac2_state,segac2_new)
/* sound hardware */
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("ymsnd", YM3438, XL2_CLOCK/7)
MCFG_YM2612_IRQ_HANDLER(WRITELINE(*this, segac2_state, segac2_irq2_interrupt))
MCFG_SOUND_ROUTE(0, "mono", 0.50)
ym3438_device &ymsnd(YM3438(config, "ymsnd", XL2_CLOCK/7));
ymsnd.irq_handler().set(FUNC(segac2_state::segac2_irq2_interrupt));
ymsnd.add_route(0, "mono", 0.50);
/* right channel not connected */
MACHINE_CONFIG_END
}
void segac2_state::segac2(machine_config &config)

View File

@ -370,17 +370,18 @@ void segajw_state::ramdac_map(address_map &map)
map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w));
}
MACHINE_CONFIG_START(segajw_state::segajw)
void segajw_state::segajw(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu",M68000,8000000) // unknown clock
MCFG_DEVICE_PROGRAM_MAP(segajw_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segajw_state, irq4_line_hold)
M68000(config, m_maincpu, 8000000); // unknown clock
m_maincpu->set_addrmap(AS_PROGRAM, &segajw_state::segajw_map);
m_maincpu->set_vblank_int("screen", FUNC(segajw_state::irq4_line_hold));
MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) // unknown clock
MCFG_DEVICE_PROGRAM_MAP(segajw_audiocpu_map)
MCFG_DEVICE_IO_MAP(segajw_audiocpu_io_map)
Z80(config, m_audiocpu, 4000000); // unknown clock
m_audiocpu->set_addrmap(AS_PROGRAM, &segajw_state::segajw_audiocpu_map);
m_audiocpu->set_addrmap(AS_IO, &segajw_state::segajw_audiocpu_io_map);
MCFG_QUANTUM_TIME(attotime::from_hz(2000))
config.m_minimum_quantum = attotime::from_hz(2000);
NVRAM(config, "nvram", nvram_device::DEFAULT_NONE);
@ -399,19 +400,20 @@ MACHINE_CONFIG_START(segajw_state::segajw)
io1c.out_pg_callback().set(FUNC(segajw_state::coinlockout_w));
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_UPDATE_DEVICE("hd63484", hd63484_device, update_screen)
MCFG_SCREEN_SIZE(720, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 720-1, 0, 448-1)
MCFG_SCREEN_PALETTE("palette")
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_screen_update("hd63484", FUNC(hd63484_device::update_screen));
screen.set_size(720, 480);
screen.set_visarea(0, 720-1, 0, 448-1);
screen.set_palette("palette");
MCFG_PALETTE_ADD("palette", 16)
PALETTE(config, "palette", 16);
ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, "palette"));
ramdac.set_addrmap(0, &segajw_state::ramdac_map);
MCFG_HD63484_ADD("hd63484", 8000000, segajw_hd63484_map) // unknown clock
hd63484_device &hd63484(HD63484(config, "hd63484", 8000000));
hd63484.set_addrmap(0, &segajw_state::segajw_hd63484_map); // unknown clock
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -421,10 +423,10 @@ MACHINE_CONFIG_START(segajw_state::segajw)
GENERIC_LATCH_8(config, "soundlatch2");
MCFG_DEVICE_ADD("ymsnd", YM3438, 8000000) // unknown clock
MCFG_YM2612_IRQ_HANDLER(INPUTLINE("maincpu", 5))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
ym3438_device &ymsnd(YM3438(config, "ymsnd", 8000000)); // unknown clock
ymsnd.irq_handler().set_inputline("maincpu", 5);
ymsnd.add_route(ALL_OUTPUTS, "mono", 0.50);
}
/***************************************************************************

View File

@ -53,6 +53,8 @@ public:
segam1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_m1comm(*this, "m1comm")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_paletteram(*this, "paletteram")
@ -73,6 +75,8 @@ private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
required_device<z80_device> m_audiocpu;
required_device<z80_device> m_m1comm;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_shared_ptr<u16> m_paletteram;
@ -348,18 +352,18 @@ INPUT_PORTS_END
MACHINE_CONFIG_START(segam1_state::segam1)
void segam1_state::segam1(machine_config &config)
{
M68000(config, m_maincpu, XTAL(20'000'000)/2);
m_maincpu->set_addrmap(AS_PROGRAM, &segam1_state::segam1_map);
m_maincpu->set_vblank_int("screen", FUNC(segam1_state::irq4_line_hold));
MCFG_DEVICE_ADD("maincpu", M68000, XTAL(20'000'000)/2)
MCFG_DEVICE_PROGRAM_MAP(segam1_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segam1_state, irq4_line_hold)
Z80(config, m_audiocpu, 4000000); // unknown clock
m_audiocpu->set_addrmap(AS_PROGRAM, &segam1_state::segam1_sound_map);
m_audiocpu->set_addrmap(AS_IO, &segam1_state::segam1_sound_io_map);
MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) // unknown clock
MCFG_DEVICE_PROGRAM_MAP(segam1_sound_map)
MCFG_DEVICE_IO_MAP(segam1_sound_io_map)
MCFG_DEVICE_ADD("m1comm", Z80, 4000000) // unknown clock
MCFG_DEVICE_PROGRAM_MAP(segam1_comms_map)
Z80(config, m_m1comm, 4000000); // unknown clock
m_m1comm->set_addrmap(AS_PROGRAM, &segam1_state::segam1_comms_map);
sega_315_5296_device &io1(SEGA_315_5296(config, "io1", 0)); // unknown clock
io1.in_pa_callback().set_ioport("INA");
@ -372,7 +376,7 @@ MACHINE_CONFIG_START(segam1_state::segam1)
sega_315_5296_device &io2(SEGA_315_5296(config, "io2", 0)); // unknown clock
io2.in_pg_callback().set_ioport("ING");
MCFG_DEVICE_ADD("uart", I8251, 4000000) // unknown clock
I8251(config, "uart", 4000000); // unknown clock
mb8421_device &dpram(MB8421(config, "dpram"));
dpram.intl_callback().set_inputline("m1comm", 0);
@ -380,32 +384,31 @@ MACHINE_CONFIG_START(segam1_state::segam1)
S24TILE(config, m_tile, 0, 0x3fff).set_palette(m_palette);
S24MIXER(config, m_mixer, 0);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_RAW_PARAMS(16000000, 656, 0, 496, 424, 0, 384) // copied from segas24.cpp; may not be accurate
MCFG_SCREEN_UPDATE_DRIVER(segam1_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
m_screen->set_raw(16000000, 656, 0, 496, 424, 0, 384); // copied from segas24.cpp; may not be accurate
m_screen->set_screen_update(FUNC(segam1_state::screen_update));
m_screen->set_palette(m_palette);
MCFG_PALETTE_ADD("palette", 8192*2)
PALETTE(config, m_palette, 8192*2);
// sound hardware
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline("audiocpu", INPUT_LINE_NMI);
MCFG_DEVICE_ADD("ymsnd", YM3438, 8000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
//MCFG_YM2612_IRQ_HANDLER(WRITELINE(*this, segam1_state, ym3438_irq_handler))
MACHINE_CONFIG_END
YM3438(config, m_ymsnd, 8000000);
m_ymsnd->add_route(ALL_OUTPUTS, "mono", 0.40);
//m_ymsnd->irq_handler().set(FUNC(segam1_state::ym3438_irq_handler));
}
MACHINE_CONFIG_START(segam1_state::unkm1)
void segam1_state::unkm1(machine_config &config)
{
segam1(config);
MCFG_DEVICE_MODIFY("audiocpu")
MCFG_DEVICE_PROGRAM_MAP(unkm1_sound_map)
m_audiocpu->set_addrmap(AS_PROGRAM, &segam1_state::unkm1_sound_map);
MCFG_DEVICE_MODIFY("m1comm")
MCFG_DEVICE_DISABLE() // not dumped yet
MACHINE_CONFIG_END
m_m1comm->set_disable(); // not dumped yet
}
ROM_START( bingpty ) // 1994/05/01 string

View File

@ -1307,18 +1307,18 @@ WRITE_LINE_MEMBER(segas18_state::vdp_lv4irqline_callback_s18)
*
*************************************/
MACHINE_CONFIG_START(segas18_state::system18)
void segas18_state::system18(machine_config &config)
{
// basic machine hardware
MCFG_DEVICE_ADD("maincpu", M68000, 10000000)
MCFG_DEVICE_PROGRAM_MAP(system18_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas18_state, irq4_line_hold)
M68000(config, m_maincpu, 10000000);
m_maincpu->set_addrmap(AS_PROGRAM, &segas18_state::system18_map);
m_maincpu->set_vblank_int("screen", FUNC(segas18_state::irq4_line_hold));
MCFG_DEVICE_ADD("soundcpu", Z80, 8000000)
MCFG_DEVICE_PROGRAM_MAP(sound_map)
MCFG_DEVICE_IO_MAP(sound_portmap)
Z80(config, m_soundcpu, 8000000);
m_soundcpu->set_addrmap(AS_PROGRAM, &segas18_state::sound_map);
m_soundcpu->set_addrmap(AS_IO, &segas18_state::sound_portmap);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
NVRAM(config, m_nvram, nvram_device::DEFAULT_ALL_0);
SEGA_315_5195_MEM_MAPPER(config, m_mapper, 10000000, m_maincpu);
m_mapper->set_mapper(FUNC(segas18_state::memory_mapper), this);
@ -1336,28 +1336,28 @@ MACHINE_CONFIG_START(segas18_state::system18)
m_io->out_cnt1_callback().set(m_segaic16vid, FUNC(segaic16_video_device::set_display_enable));
m_io->out_cnt2_callback().set(FUNC(segas18_state::set_vdp_enable));
MCFG_DEVICE_ADD("gen_vdp", SEGA315_5313, 15000000, "maincpu") // ??? Frequency is a complete guess
MCFG_SEGA315_5313_IS_PAL(false)
MCFG_SEGA315_5313_SND_IRQ_CALLBACK(WRITELINE(*this, segas18_state, vdp_sndirqline_callback_s18));
MCFG_SEGA315_5313_LV6_IRQ_CALLBACK(WRITELINE(*this, segas18_state, vdp_lv6irqline_callback_s18));
MCFG_SEGA315_5313_LV4_IRQ_CALLBACK(WRITELINE(*this, segas18_state, vdp_lv4irqline_callback_s18));
MCFG_SEGA315_5313_ALT_TIMING(1);
MCFG_SEGA315_5313_PAL_WRITE_BASE(0x2000);
MCFG_SEGA315_5313_PALETTE("palette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.0)
SEGA315_5313(config, m_vdp, 15000000, m_maincpu); // ??? Frequency is a complete guess
m_vdp->set_is_pal(false);
m_vdp->snd_irq().set(FUNC(segas18_state::vdp_sndirqline_callback_s18));
m_vdp->lv6_irq().set(FUNC(segas18_state::vdp_lv6irqline_callback_s18));
m_vdp->lv4_irq().set(FUNC(segas18_state::vdp_lv4irqline_callback_s18));
m_vdp->set_alt_timing(1);
m_vdp->set_pal_write_base(0x2000);
m_vdp->set_palette(m_palette);
m_vdp->add_route(ALL_OUTPUTS, "mono", 0.0);
MCFG_TIMER_DEVICE_ADD_SCANLINE("scantimer", "gen_vdp", sega315_5313_device, megadriv_scanline_timer_callback_alt_timing, "screen", 0, 1)
TIMER(config, "scantimer").configure_scanline("gen_vdp", FUNC(sega315_5313_device::megadriv_scanline_timer_callback_alt_timing), "screen", 0, 1);
// video hardware
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(57.23) // verified on pcb
MCFG_SCREEN_SIZE(342,262)
MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(segas18_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(57.23); // verified on pcb
m_screen->set_size(342,262);
m_screen->set_visarea(0*8, 40*8-1, 0*8, 28*8-1);
m_screen->set_screen_update(FUNC(segas18_state::screen_update));
m_screen->set_palette(m_palette);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_segas18)
MCFG_PALETTE_ADD("palette", 2048*3+2048 + 64*3)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_segas18);
PALETTE(config, m_palette, 2048*3+2048 + 64*3);
SEGA_SYS16B_SPRITES(config, m_sprites, 0);
SEGAIC16VID(config, m_segaic16vid, 0, m_gfxdecode);
@ -1365,28 +1365,28 @@ MACHINE_CONFIG_START(segas18_state::system18)
// sound hardware
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("ym1", YM3438, 8000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
MCFG_YM2612_IRQ_HANDLER(INPUTLINE("soundcpu", INPUT_LINE_IRQ0))
ym3438_device &ym1(YM3438(config, "ym1", 8000000));
ym1.add_route(ALL_OUTPUTS, "mono", 0.40);
ym1.irq_handler().set_inputline("soundcpu", INPUT_LINE_IRQ0);
MCFG_DEVICE_ADD("ym2", YM3438, 8000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
ym3438_device &ym2(YM3438(config, "ym2", 8000000));
ym2.add_route(ALL_OUTPUTS, "mono", 0.40);
MCFG_DEVICE_ADD("rfsnd", RF5C68, 10000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_DEVICE_ADDRESS_MAP(0, pcm_map)
MACHINE_CONFIG_END
rf5c68_device &rfsnd(RF5C68(config, "rfsnd", 10000000));
rfsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
rfsnd.set_addrmap(0, &segas18_state::pcm_map);
}
MACHINE_CONFIG_START(segas18_state::system18_fd1094)
void segas18_state::system18_fd1094(machine_config &config)
{
system18(config);
// basic machine hardware
MCFG_DEVICE_REPLACE("maincpu", FD1094, 10000000)
MCFG_DEVICE_PROGRAM_MAP(system18_map)
MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas18_state, irq4_line_hold)
MACHINE_CONFIG_END
FD1094(config.replace(), m_maincpu, 10000000);
m_maincpu->set_addrmap(AS_PROGRAM, &segas18_state::system18_map);
m_maincpu->set_addrmap(AS_OPCODES, &segas18_state::decrypted_opcodes_map);
m_maincpu->set_vblank_int("screen", FUNC(segas18_state::irq4_line_hold));
}
void segas18_state::lghost_fd1094(machine_config &config)
{
@ -1436,33 +1436,33 @@ void segas18_state::wwally(machine_config &config)
m_upd4701[2]->set_porty_tag("TRACKY3");
}
MACHINE_CONFIG_START(segas18_state::system18_i8751)
void segas18_state::system18_i8751(machine_config &config)
{
system18(config);
// basic machine hardware
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_VBLANK_INT_REMOVE()
m_maincpu->set_vblank_int(device_interrupt_delegate(), nullptr);
m_mapper->mcu_int().set_inputline(m_mcu, INPUT_LINE_IRQ1);
MCFG_DEVICE_ADD("mcu", I8751, 8000000)
MCFG_DEVICE_IO_MAP(mcu_io_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas18_state, irq0_line_hold)
MACHINE_CONFIG_END
I8751(config, m_mcu, 8000000);
m_mcu->set_addrmap(AS_IO, &segas18_state::mcu_io_map);
m_mcu->set_vblank_int("screen", FUNC(segas18_state::irq0_line_hold));
}
MACHINE_CONFIG_START(segas18_state::system18_fd1094_i8751)
void segas18_state::system18_fd1094_i8751(machine_config &config)
{
system18_fd1094(config);
// basic machine hardware
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_VBLANK_INT_REMOVE()
m_maincpu->set_vblank_int(device_interrupt_delegate(), nullptr);
m_mapper->mcu_int().set_inputline(m_mcu, INPUT_LINE_IRQ1);
MCFG_DEVICE_ADD("mcu", I8751, 8000000)
MCFG_DEVICE_IO_MAP(mcu_io_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas18_state, irq0_line_hold)
MACHINE_CONFIG_END
I8751(config, m_mcu, 8000000);
m_mcu->set_addrmap(AS_IO, &segas18_state::mcu_io_map);
m_mcu->set_vblank_int("screen", FUNC(segas18_state::irq0_line_hold));
}

View File

@ -1916,17 +1916,17 @@ INPUT_PORTS_END
*
*************************************/
MACHINE_CONFIG_START(segas24_state::system24)
void segas24_state::system24(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu1_map);
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", segas24_state, irq_vbl, "screen", 0, 1)
TIMER(config, "scantimer").configure_scanline(FUNC(segas24_state::irq_vbl), "screen", 0, 1);
M68000(config, m_subcpu, MASTER_CLOCK/2);
m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::cpu2_map);
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
config.m_minimum_quantum = attotime::from_hz(6000);
sega_315_5296_device &io(SEGA_315_5296(config, "io", VIDEO_CLOCK/2));
io.in_pa_callback().set_ioport("P1");
@ -1940,22 +1940,22 @@ MACHINE_CONFIG_START(segas24_state::system24)
io.out_cnt1_callback().set(FUNC(segas24_state::cnt1));
io.out_cnt2_callback().set("ymsnd", FUNC(ym2151_device::reset_w));
MCFG_TIMER_DRIVER_ADD("irq_timer", segas24_state, irq_timer_cb)
MCFG_TIMER_DRIVER_ADD("irq_timer_clear", segas24_state, irq_timer_clear_cb)
MCFG_TIMER_ADD_NONE("frc_timer")
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_frc", segas24_state, irq_frc_cb, attotime::from_hz(FRC_CLOCK_MODE1))
TIMER(config, "irq_timer").configure_generic(FUNC(segas24_state::irq_timer_cb));
TIMER(config, "irq_timer_clear").configure_generic(FUNC(segas24_state::irq_timer_clear_cb));
TIMER(config, "frc_timer").configure_generic(timer_device::expired_delegate());
TIMER(config, "irq_frc").configure_periodic(FUNC(segas24_state::irq_frc_cb), attotime::from_hz(FRC_CLOCK_MODE1));
S24TILE(config, m_vtile, 0, 0xfff).set_palette("palette");
S24SPRITE(config, m_vsprite, 0);
S24MIXER(config, m_vmixer, 0);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK/2, 656, 0/*+69*/, 496/*+69*/, 424, 0/*+25*/, 384/*+25*/)
MCFG_SCREEN_UPDATE_DRIVER(segas24_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
m_screen->set_raw(VIDEO_CLOCK/2, 656, 0/*+69*/, 496/*+69*/, 424, 0/*+25*/, 384/*+25*/);
m_screen->set_screen_update(FUNC(segas24_state::screen_update));
m_screen->set_palette(m_palette);
MCFG_PALETTE_ADD("palette", 8192*2)
PALETTE(config, m_palette, 8192*2);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@ -1965,10 +1965,12 @@ MACHINE_CONFIG_START(segas24_state::system24)
ymsnd.add_route(0, "lspeaker", 0.50);
ymsnd.add_route(1, "rspeaker", 0.50);
MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) // unknown DAC
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
MACHINE_CONFIG_END
DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "lspeaker", 0.5).add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
vref.set_output(5.0);
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
}
void segas24_state::system24_rom(machine_config &config)
{
@ -1999,7 +2001,8 @@ void segas24_state::system24_floppy_rom(machine_config &config)
m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::rombd_cpu2_map);
}
MACHINE_CONFIG_START(segas24_state::system24_floppy_hotrod)
void segas24_state::system24_floppy_hotrod(machine_config &config)
{
system24_floppy(config);
m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::hotrod_cpu1_map);
m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::hotrod_cpu2_map);
@ -2012,14 +2015,14 @@ MACHINE_CONFIG_START(segas24_state::system24_floppy_hotrod)
upd2.set_portx_tag("DIAL3");
upd2.set_porty_tag("DIAL4");
MCFG_DEVICE_ADD("adc1", MSM6253, 0) // IC5 - 33k/33p R/C clock
MCFG_MSM6253_IN0_ANALOG_PORT("PEDAL1")
MCFG_MSM6253_IN1_ANALOG_PORT("PEDAL2")
MCFG_MSM6253_IN2_ANALOG_PORT("PEDAL3")
MCFG_MSM6253_IN3_ANALOG_PORT("PEDAL4")
msm6253_device &adc1(MSM6253(config, "adc1", 0)); // IC5 - 33k/33p R/C clock
adc1.input<0>().set_ioport("PEDAL1");
adc1.input<1>().set_ioport("PEDAL2");
adc1.input<2>().set_ioport("PEDAL3");
adc1.input<3>().set_ioport("PEDAL4");
MCFG_DEVICE_ADD("adc2", MSM6253, 0) // IC2 - 33k/33p R/C clock
MACHINE_CONFIG_END
MSM6253(config, "adc2", 0); // IC2 - 33k/33p R/C clock
}
void segas24_state::system24_floppy_fd1094(machine_config &config)
{
@ -2029,7 +2032,8 @@ void segas24_state::system24_floppy_fd1094(machine_config &config)
m_subcpu->set_addrmap(AS_OPCODES, &segas24_state::decrypted_opcodes_map);
}
MACHINE_CONFIG_START(segas24_state::system24_floppy_fd_upd)
void segas24_state::system24_floppy_fd_upd(machine_config &config)
{
system24_floppy_fd1094(config);
m_maincpu->set_addrmap(AS_PROGRAM, &segas24_state::roughrac_cpu1_map);
m_subcpu->set_addrmap(AS_PROGRAM, &segas24_state::roughrac_cpu2_map);
@ -2037,7 +2041,7 @@ MACHINE_CONFIG_START(segas24_state::system24_floppy_fd_upd)
upd4701_device &upd4701(UPD4701A(config, "upd4701")); // IC4 on 834-6510 I/O board
upd4701.set_portx_tag("DIAL1");
upd4701.set_porty_tag("DIAL2");
MACHINE_CONFIG_END
}
void segas24_state::dcclub(machine_config &config)
{

View File

@ -2306,12 +2306,12 @@ GFXDECODE_END
*************************************/
MACHINE_CONFIG_START(segas32_state::device_add_mconfig)
void segas32_state::device_add_mconfig(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", V60, MASTER_CLOCK/2)
MCFG_DEVICE_PROGRAM_MAP(system32_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas32_state, start_of_vblank_int)
V60(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_state::system32_map);
m_maincpu->set_vblank_int("screen", FUNC(segas32_state::start_of_vblank_int));
Z80(config, m_soundcpu, MASTER_CLOCK/4);
m_soundcpu->set_addrmap(AS_PROGRAM, &segas32_state::system32_sound_map);
@ -2334,39 +2334,39 @@ MACHINE_CONFIG_START(segas32_state::device_add_mconfig)
EEPROM_93C46_16BIT(config, "eeprom");
MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback)
MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback)
TIMER(config, "v60_irq0").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
TIMER(config, "v60_irq1").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
/* video hardware */
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_segas32)
MCFG_PALETTE_ADD("palette", 0x4000)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_segas32);
PALETTE(config, m_palette, 0x4000);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_SIZE(52*8, 262)
MCFG_SCREEN_VISIBLE_AREA(0*8, 52*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(segas32_state, screen_update_system32)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_size(52*8, 262);
m_screen->set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
m_screen->set_screen_update(FUNC(segas32_state::screen_update_system32));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("ym1", YM3438, MASTER_CLOCK/4)
MCFG_YM2612_IRQ_HANDLER(WRITELINE(*this, segas32_state, ym3438_irq_handler))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
ym3438_device &ym1(YM3438(config, "ym1", MASTER_CLOCK/4));
ym1.irq_handler().set(FUNC(segas32_state::ym3438_irq_handler));
ym1.add_route(0, "lspeaker", 0.40);
ym1.add_route(1, "rspeaker", 0.40);
MCFG_DEVICE_ADD("ym2", YM3438, MASTER_CLOCK/4)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
ym3438_device &ym2(YM3438(config, "ym2", MASTER_CLOCK/4));
ym2.add_route(0, "lspeaker", 0.40);
ym2.add_route(1, "rspeaker", 0.40);
MCFG_DEVICE_ADD("rfsnd", RF5C68, RFC_CLOCK/4)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.55)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.55)
MCFG_DEVICE_ADDRESS_MAP(0, rf5c68_map)
rf5c68_device &rfsnd(RF5C68(config, "rfsnd", RFC_CLOCK/4));
rfsnd.add_route(0, "lspeaker", 0.55);
rfsnd.add_route(1, "rspeaker", 0.55);
rfsnd.set_addrmap(0, &segas32_state::rf5c68_map);
S32COMM(config, m_s32comm, 0);
MACHINE_CONFIG_END
}
DEFINE_DEVICE_TYPE(SEGA_S32_REGULAR_DEVICE, segas32_regular_state, "segas32_pcb_regular", "Sega System 32 regular PCB")
@ -2386,18 +2386,18 @@ void segas32_state::system32_analog_map(address_map &map)
map(0xc00050, 0xc00057).mirror(0x0fff80).rw("adc", FUNC(msm6253_device::d7_r), FUNC(msm6253_device::address_w)).umask16(0x00ff);
}
MACHINE_CONFIG_START(segas32_analog_state::device_add_mconfig)
void segas32_analog_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_analog_map)
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_analog_state::system32_analog_map);
MCFG_DEVICE_ADD("adc", MSM6253, 0)
MCFG_MSM6253_IN0_ANALOG_PORT("ANALOG1")
MCFG_MSM6253_IN1_ANALOG_PORT("ANALOG2")
MCFG_MSM6253_IN2_ANALOG_PORT("ANALOG3")
MCFG_MSM6253_IN3_ANALOG_PORT("ANALOG4")
MACHINE_CONFIG_END
msm6253_device &adc(MSM6253(config, "adc", 0));
adc.input<0>().set_ioport("ANALOG1");
adc.input<1>().set_ioport("ANALOG2");
adc.input<2>().set_ioport("ANALOG3");
adc.input<3>().set_ioport("ANALOG4");
}
DEFINE_DEVICE_TYPE(SEGA_S32_ANALOG_DEVICE, segas32_analog_state, "segas32_pcb_analog", "Sega System 32 analog PCB")
@ -2425,11 +2425,11 @@ void segas32_trackball_state::system32_trackball_map(address_map &map)
map(0xc00050, 0xc00057).mirror(0x0fff80).rw("upd3", FUNC(upd4701_device::read_xy), FUNC(upd4701_device::reset_xy_w)).umask16(0x00ff);
}
MACHINE_CONFIG_START(segas32_trackball_state::device_add_mconfig)
void segas32_trackball_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_trackball_map)
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_trackball_state::system32_trackball_map);
upd4701_device &upd1(UPD4701A(config, "upd1"));
upd1.set_portx_tag("TRACKX1");
@ -2444,7 +2444,7 @@ MACHINE_CONFIG_START(segas32_trackball_state::device_add_mconfig)
upd3.set_porty_tag("TRACKY3");
// 837-8685 I/O board has an unpopulated space for a fourth UPD4701A
MACHINE_CONFIG_END
}
DEFINE_DEVICE_TYPE(SEGA_S32_TRACKBALL_DEVICE, segas32_trackball_state, "segas32_pcb_trackball", "Sega System 32 trackball PCB")
@ -2464,17 +2464,17 @@ void segas32_state::system32_4player_map(address_map &map)
map(0xc00060, 0xc00067).mirror(0x0fff80).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff);
}
MACHINE_CONFIG_START(segas32_4player_state::device_add_mconfig)
void segas32_4player_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_4player_map)
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_4player_state::system32_4player_map);
i8255_device &ppi(I8255A(config, "ppi"));
ppi.in_pa_callback().set_ioport("EXTRA1");
ppi.in_pb_callback().set_ioport("EXTRA2");
ppi.in_pc_callback().set_ioport("EXTRA3");
MACHINE_CONFIG_END
}
DEFINE_DEVICE_TYPE(SEGA_S32_4PLAYER_DEVICE, segas32_4player_state, "segas32_pcb_4player", "Sega System 32 4-player/fighting PCB")
@ -2499,18 +2499,18 @@ void segas32_state::ga2_main_map(address_map &map)
map(0xa00000, 0xa00fff).rw("dpram", FUNC(mb8421_device::right_r), FUNC(mb8421_device::right_w)).umask16(0x00ff);
}
MACHINE_CONFIG_START(segas32_v25_state::device_add_mconfig)
void segas32_v25_state::device_add_mconfig(machine_config &config)
{
segas32_4player_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(ga2_main_map)
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_v25_state::ga2_main_map);
MCFG_DEVICE_ADD("dpram", MB8421, 0)
MB8421(config, "dpram", 0);
/* add a V25 for protection */
MCFG_DEVICE_ADD("mcu", V25, 10000000)
MCFG_DEVICE_PROGRAM_MAP(v25_map)
MACHINE_CONFIG_END
v25_device &mcu(V25(config, "mcu", 10000000));
mcu.set_addrmap(AS_PROGRAM, &segas32_v25_state::v25_map);
}
DEFINE_DEVICE_TYPE(SEGA_S32_V25_DEVICE, segas32_v25_state, "segas32_pcb_v25", "Sega System 32 V25 PCB")
@ -2523,19 +2523,20 @@ segas32_v25_state::segas32_v25_state(const machine_config &mconfig, const char *
MACHINE_CONFIG_START(segas32_upd7725_state::device_add_mconfig)
void segas32_upd7725_state::device_add_mconfig(machine_config &config)
{
segas32_analog_state::device_add_mconfig(config);
/* add a upd7725; this is on the 837-8341 daughterboard which plugs into the socket on the master pcb's ROM board where an fd1149 could go */
MCFG_DEVICE_ADD("dsp", UPD7725, 8000000) // TODO: Find real clock speed for the upd7725; this is a canned oscillator on the 837-8341 pcb
MCFG_DEVICE_PROGRAM_MAP(upd7725_prg_map)
MCFG_DEVICE_DATA_MAP(upd7725_data_map)
MCFG_DEVICE_DISABLE() // TODO: disable for now, needs DMA pins and interrupts implemented in upd7725 core
upd7725_device &dsp(UPD7725(config, "dsp", 8000000)); // TODO: Find real clock speed for the upd7725; this is a canned oscillator on the 837-8341 pcb
dsp.set_addrmap(AS_PROGRAM, &segas32_upd7725_state::upd7725_prg_map);
dsp.set_addrmap(AS_DATA, &segas32_upd7725_state::upd7725_data_map);
dsp.set_disable(); // TODO: disable for now, needs DMA pins and interrupts implemented in upd7725 core
// TODO: find /INT source for upd7725
// TODO: figure out how the p0 and p1 lines from the upd7725 affect the mainboard; do they select one of four (or 8) latches to/from the mainboard?
// TODO: trace out the 837-8341 pcb
// See HLE of this dsp in /src/mame/machine/segas32.cpp : arescue_dsp_r and arescue_dsp_w
MACHINE_CONFIG_END
}
DEFINE_DEVICE_TYPE(SEGA_S32_UPD7725_DEVICE, segas32_upd7725_state, "segas32_pcb_upd7725", "Sega System 32 uPD7725 PCB")
@ -2589,26 +2590,26 @@ void segas32_cd_state::cdrom_config(device_t *device)
MCFG_SOUND_ROUTE( 1, "^^rspeaker", 0.30 )
}
MACHINE_CONFIG_START(segas32_cd_state::device_add_mconfig)
void segas32_cd_state::device_add_mconfig(machine_config &config)
{
segas32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(system32_cd_map)
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_cd_state::system32_cd_map);
mb89352_device &scsictrl(MB89352A(config, "mb89352", 8000000));
scsictrl.set_scsi_port("scsi");
scsictrl.irq_cb().set(FUNC(segas32_cd_state::scsi_irq_w));
scsictrl.drq_cb().set(FUNC(segas32_cd_state::scsi_drq_w));
MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "cdrom", SCSICD, SCSI_ID_0)
MCFG_SLOT_OPTION_MACHINE_CONFIG("cdrom", cdrom_config)
scsi_port_device &scsi(SCSI_PORT(config, "scsi"));
scsi.set_slot_device(1, "cdrom", SCSICD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
scsi.slot(1).set_option_machine_config("cdrom", cdrom_config);
cxd1095_device &cxdio(CXD1095(config, "cxdio", 0));
cxdio.out_porta_cb().set(FUNC(segas32_cd_state::lamps1_w));
cxdio.out_portb_cb().set(FUNC(segas32_cd_state::lamps2_w));
cxdio.in_portd_cb().set_constant(0xff); // Ports C-E used for IEEE-488 printer interface
MACHINE_CONFIG_END
}
DEFINE_DEVICE_TYPE(SEGA_S32_CD_DEVICE, segas32_cd_state, "segas32_pcb_cd", "Sega System 32 CD PCB")
@ -2620,15 +2621,16 @@ segas32_cd_state::segas32_cd_state(const machine_config &mconfig, const char *ta
MACHINE_CONFIG_START(sega_multi32_state::device_add_mconfig)
void sega_multi32_state::device_add_mconfig(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", V70, MULTI32_CLOCK/2)
MCFG_DEVICE_PROGRAM_MAP(multi32_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", segas32_state, start_of_vblank_int)
V70(config, m_maincpu, MULTI32_CLOCK/2);
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_state::multi32_map);
m_maincpu->set_vblank_int("screen", FUNC(segas32_state::start_of_vblank_int));
MCFG_DEVICE_ADD("soundcpu", Z80, MASTER_CLOCK/4)
MCFG_DEVICE_PROGRAM_MAP(multi32_sound_map)
MCFG_DEVICE_IO_MAP(multi32_sound_portmap)
Z80(config, m_soundcpu, MASTER_CLOCK/4);
m_soundcpu->set_addrmap(AS_PROGRAM, &sega_multi32_state::multi32_sound_map);
m_soundcpu->set_addrmap(AS_IO, &sega_multi32_state::multi32_sound_portmap);
sega_315_5296_device &io_chip_0(SEGA_315_5296(config, "io_chip_0", 0)); // unknown clock
io_chip_0.in_pa_callback().set_ioport("P1_A");
@ -2657,42 +2659,42 @@ MACHINE_CONFIG_START(sega_multi32_state::device_add_mconfig)
EEPROM_93C46_16BIT(config, "eeprom");
MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback)
MCFG_TIMER_DRIVER_ADD("v60_irq1", segas32_state, signal_v60_irq_callback)
TIMER(config, "v60_irq0").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
TIMER(config, "v60_irq1").configure_generic(FUNC(segas32_state::signal_v60_irq_callback));
/* video hardware */
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_segas32)
MCFG_PALETTE_ADD("palette", 0x8000)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_segas32);
PALETTE(config, m_palette, 0x8000);
config.set_default_layout(layout_dualhsxs);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_SIZE(52*8, 262)
MCFG_SCREEN_VISIBLE_AREA(0*8, 52*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(segas32_state, screen_update_multi32_left)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_size(52*8, 262);
m_screen->set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
m_screen->set_screen_update(FUNC(segas32_state::screen_update_multi32_left));
MCFG_SCREEN_ADD("screen2", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_SIZE(52*8, 262)
MCFG_SCREEN_VISIBLE_AREA(0*8, 52*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(segas32_state, screen_update_multi32_right)
screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_RASTER));
screen2.set_refresh_hz(60);
screen2.set_size(52*8, 262);
screen2.set_visarea(0*8, 52*8-1, 0*8, 28*8-1);
screen2.set_screen_update(FUNC(segas32_state::screen_update_multi32_right));
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("ymsnd", YM3438, MASTER_CLOCK/4)
MCFG_YM2612_IRQ_HANDLER(WRITELINE(*this, segas32_state, ym3438_irq_handler))
MCFG_SOUND_ROUTE(1, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(0, "rspeaker", 0.40)
ym3438_device &ymsnd(YM3438(config, "ymsnd", MASTER_CLOCK/4));
ymsnd.irq_handler().set(FUNC(segas32_state::ym3438_irq_handler));
ymsnd.add_route(1, "lspeaker", 0.40);
ymsnd.add_route(0, "rspeaker", 0.40);
MCFG_DEVICE_ADD("sega", MULTIPCM, MASTER_CLOCK/4)
MCFG_DEVICE_ADDRESS_MAP(0, multipcm_map)
MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(0, "rspeaker", 1.0)
MULTIPCM(config, m_multipcm, MASTER_CLOCK/4);
m_multipcm->set_addrmap(0, &sega_multi32_state::multipcm_map);
m_multipcm->add_route(1, "lspeaker", 1.0);
m_multipcm->add_route(0, "rspeaker", 1.0);
S32COMM(config, m_s32comm, 0);
MACHINE_CONFIG_END
}
DEFINE_DEVICE_TYPE(SEGA_MULTI32_DEVICE, sega_multi32_state, "segas32_pcb_multi", "Sega Multi 32")
@ -2717,25 +2719,25 @@ void sega_multi32_analog_state::multi32_analog_map(address_map &map)
map(0xc00060, 0xc00060).mirror(0x07ff80).w(FUNC(sega_multi32_analog_state::analog_bank_w));
}
MACHINE_CONFIG_START(sega_multi32_analog_state::device_add_mconfig)
void sega_multi32_analog_state::device_add_mconfig(machine_config &config)
{
sega_multi32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(multi32_analog_map)
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_analog_state::multi32_analog_map);
MCFG_DEVICE_ADD("adc", MSM6253, 0)
MCFG_MSM6253_IN0_ANALOG_PORT("ANALOG1")
MCFG_MSM6253_IN1_ANALOG_PORT("ANALOG2")
MCFG_MSM6253_IN2_ANALOG_READ(sega_multi32_analog_state, in2_analog_read)
MCFG_MSM6253_IN3_ANALOG_READ(sega_multi32_analog_state, in3_analog_read)
MACHINE_CONFIG_END
msm6253_device &adc(MSM6253(config, "adc", 0));
adc.input<0>().set_ioport("ANALOG1");
adc.input<1>().set_ioport("ANALOG2");
adc.input<2>().set(FUNC(sega_multi32_analog_state::in2_analog_read));
adc.input<3>().set(FUNC(sega_multi32_analog_state::in3_analog_read));
}
ioport_value sega_multi32_analog_state::in2_analog_read()
READ8_MEMBER(sega_multi32_analog_state::in2_analog_read)
{
return m_analog_ports[m_analog_bank * 4 + 2].read_safe(0);
}
ioport_value sega_multi32_analog_state::in3_analog_read()
READ8_MEMBER(sega_multi32_analog_state::in3_analog_read)
{
return m_analog_ports[m_analog_bank * 4 + 3].read_safe(0);
}
@ -2762,17 +2764,17 @@ void segas32_state::multi32_6player_map(address_map &map)
map(0xc00060, 0xc00067).mirror(0x07ff80).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask32(0x00ff00ff);
}
MACHINE_CONFIG_START(sega_multi32_6player_state::device_add_mconfig)
void sega_multi32_6player_state::device_add_mconfig(machine_config &config)
{
sega_multi32_state::device_add_mconfig(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(multi32_6player_map)
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_6player_state::multi32_6player_map);
i8255_device &ppi(I8255A(config, "ppi"));
ppi.in_pa_callback().set_ioport("EXTRA1");
ppi.in_pb_callback().set_ioport("EXTRA2");
ppi.in_pc_callback().set_ioport("EXTRA3");
MACHINE_CONFIG_END
}
DEFINE_DEVICE_TYPE(SEGA_MULTI32_6PLAYER_DEVICE, sega_multi32_6player_state, "segas32_pcb_multi_6player", "Sega Multi 32 6-player PCB")

View File

@ -777,15 +777,15 @@ void ufo_state::machine_start()
save_item(NAME(m_stepper));
}
MACHINE_CONFIG_START(ufo_state::newufo)
void ufo_state::newufo(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(16'000'000)/2);
m_maincpu->set_addrmap(AS_PROGRAM, &ufo_state::ufo_map);
m_maincpu->set_addrmap(AS_IO, &ufo_state::ufo_portmap);
MCFG_TIMER_DRIVER_ADD_PERIODIC("motor_timer", ufo_state, simulate_xyz, attotime::from_hz(MOTOR_SPEED))
MCFG_TIMER_DRIVER_ADD_PERIODIC("update_timer", ufo_state, update_info, attotime::from_hz(60))
TIMER(config, "motor_timer").configure_periodic(FUNC(ufo_state::simulate_xyz), attotime::from_hz(MOTOR_SPEED));
TIMER(config, "update_timer").configure_periodic(FUNC(ufo_state::update_info), attotime::from_hz(60));
SEGA_315_5296(config, m_io1, XTAL(16'000'000));
// all ports set to input
@ -819,11 +819,11 @@ MACHINE_CONFIG_START(ufo_state::newufo)
/* sound hardware */
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("ym", YM3438, XTAL(16'000'000)/2)
MCFG_YM2612_IRQ_HANDLER(INPUTLINE("maincpu", 0))
MCFG_SOUND_ROUTE(0, "mono", 0.40)
MCFG_SOUND_ROUTE(1, "mono", 0.40)
MACHINE_CONFIG_END
ym3438_device &ym(YM3438(config, "ym", XTAL(16'000'000)/2));
ym.irq_handler().set_inputline("maincpu", 0);
ym.add_route(0, "mono", 0.40);
ym.add_route(1, "mono", 0.40);
}
void ufo_state::ufomini(machine_config &config)
{

View File

@ -1304,10 +1304,10 @@ void segaybd_state::yboard(machine_config &config)
// FMCS and CKOT connect to CS and OSC IN on MSM6253 below
msm6253_device &adc(MSM6253(config, "adc", 0));
adc.set_input_tag<0>("ADC.0");
adc.set_input_tag<1>("ADC.1");
adc.set_input_tag<2>("ADC.2");
adc.set_input_cb<3>(FUNC(segaybd_state::analog_mux));
adc.input<0>().set_ioport("ADC.0");
adc.input<1>().set_ioport("ADC.1");
adc.input<2>().set_ioport("ADC.2");
adc.input<3>().set(FUNC(segaybd_state::analog_mux));
SEGA_315_5248_MULTIPLIER(config, "multiplier_main", 0);
SEGA_315_5248_MULTIPLIER(config, "multiplier_subx", 0);

File diff suppressed because it is too large Load Diff

View File

@ -445,29 +445,28 @@ static GFXDECODE_START( gfx_shangha3 )
GFXDECODE_END
MACHINE_CONFIG_START(shangha3_state::shangha3)
void shangha3_state::shangha3(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 48_MHz_XTAL/3) // TMP68HC000N-16
MCFG_DEVICE_PROGRAM_MAP(shangha3_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", shangha3_state, irq4_line_assert)
M68000(config, m_maincpu, 48_MHz_XTAL/3); // TMP68HC000N-16
m_maincpu->set_addrmap(AS_PROGRAM, &shangha3_state::shangha3_map);
m_maincpu->set_vblank_int("screen", FUNC(shangha3_state::irq4_line_assert));
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
// MCFG_SCREEN_REFRESH_RATE(60)
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
// MCFG_SCREEN_SIZE(24*16, 16*16)
// MCFG_SCREEN_VISIBLE_AREA(0*16, 24*16-1, 1*16, 15*16-1)
MCFG_SCREEN_RAW_PARAMS(48_MHz_XTAL/6,512,0,24*16,263,1*16,15*16) /* refresh rate is unknown */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
// m_screen->set_refresh_hz(60);
// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
// m_screen->set_size(24*16, 16*16);
// m_screen->set_visarea(0*16, 24*16-1, 1*16, 15*16-1);
m_screen->set_raw(48_MHz_XTAL/6, 512, 0, 24*16, 263, 1*16, 15*16); /* refresh rate is unknown */
m_screen->set_screen_update(FUNC(shangha3_state::screen_update));
m_screen->set_palette(m_palette);
MCFG_SCREEN_UPDATE_DRIVER(shangha3_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
GFXDECODE(config, m_gfxdecode, m_palette, gfx_shangha3);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_shangha3)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(RRRRRGGGGGBBBBBx)
MCFG_PALETTE_ENABLE_SHADOWS()
PALETTE(config, m_palette, 2048);
m_palette->set_format(PALETTE_FORMAT_RRRRRGGGGGBBBBBx);
m_palette->enable_shadows();
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -477,38 +476,36 @@ MACHINE_CONFIG_START(shangha3_state::shangha3)
aysnd.port_b_read_callback().set_ioport("DSW2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.30);
MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) // pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(shangha3_state::heberpop)
OKIM6295(config, m_oki, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH); // pin 7 not verified
m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
}
void shangha3_state::heberpop(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 48_MHz_XTAL/3) // TMP68HC000N-16 like the others??
MCFG_DEVICE_PROGRAM_MAP(heberpop_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", shangha3_state, irq4_line_assert)
M68000(config, m_maincpu, 48_MHz_XTAL/3); // TMP68HC000N-16 like the others??
m_maincpu->set_addrmap(AS_PROGRAM, &shangha3_state::heberpop_map);
m_maincpu->set_vblank_int("screen", FUNC(shangha3_state::irq4_line_assert));
MCFG_DEVICE_ADD("audiocpu", Z80, 48_MHz_XTAL/8) /* 6 MHz ??? */
MCFG_DEVICE_PROGRAM_MAP(heberpop_sound_map)
MCFG_DEVICE_IO_MAP(heberpop_sound_io_map) /* NMI triggered by YM3438 */
Z80(config, m_audiocpu, 48_MHz_XTAL/8); /* 6 MHz ??? */
m_audiocpu->set_addrmap(AS_PROGRAM, &shangha3_state::heberpop_sound_map);
m_audiocpu->set_addrmap(AS_IO, &shangha3_state::heberpop_sound_io_map); /* NMI triggered by YM3438 */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
// MCFG_SCREEN_REFRESH_RATE(60)
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
// MCFG_SCREEN_SIZE(24*16, 16*16)
// MCFG_SCREEN_VISIBLE_AREA(0*16, 24*16-1, 1*16, 15*16-1)
MCFG_SCREEN_RAW_PARAMS(48_MHz_XTAL/6,512,0,24*16,263,1*16,15*16) /* refresh rate is unknown */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
// m_screen->set_refresh_hz(60);
// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
// m_screen->set_size(24*16, 16*16);
// m_screen->set_visarea(0*16, 24*16-1, 1*16, 15*16-1);
m_screen->set_raw(48_MHz_XTAL/6, 512, 0, 24*16, 263, 1*16, 15*16); /* refresh rate is unknown */
m_screen->set_screen_update(FUNC(shangha3_state::screen_update));
m_screen->set_palette(m_palette);
MCFG_SCREEN_UPDATE_DRIVER(shangha3_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
GFXDECODE(config, m_gfxdecode, m_palette, gfx_shangha3);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_shangha3)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(RRRRRGGGGGBBBBBx)
MCFG_PALETTE_ENABLE_SHADOWS()
PALETTE(config, m_palette, 2048);
m_palette->set_format(PALETTE_FORMAT_RRRRRGGGGGBBBBBx);
m_palette->enable_shadows();
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -516,43 +513,41 @@ MACHINE_CONFIG_START(shangha3_state::heberpop)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0);
MCFG_DEVICE_ADD("ymsnd", YM3438, 48_MHz_XTAL/6) /* 8 MHz? */
MCFG_YM2612_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_SOUND_ROUTE(0, "mono", 0.40)
MCFG_SOUND_ROUTE(1, "mono", 0.40)
ym3438_device &ymsnd(YM3438(config, "ymsnd", 48_MHz_XTAL/6)); /* 8 MHz? */
ymsnd.irq_handler().set_inputline("audiocpu", INPUT_LINE_NMI);
ymsnd.add_route(0, "mono", 0.40);
ymsnd.add_route(1, "mono", 0.40);
MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) // pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(shangha3_state::blocken)
OKIM6295(config, m_oki, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH); // pin 7 not verified
m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
}
void shangha3_state::blocken(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 48_MHz_XTAL/3) // TMP68HC000N-16
MCFG_DEVICE_PROGRAM_MAP(blocken_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", shangha3_state, irq4_line_assert)
M68000(config, m_maincpu, 48_MHz_XTAL/3); // TMP68HC000N-16
m_maincpu->set_addrmap(AS_PROGRAM, &shangha3_state::blocken_map);
m_maincpu->set_vblank_int("screen", FUNC(shangha3_state::irq4_line_assert));
MCFG_DEVICE_ADD("audiocpu", Z80, 48_MHz_XTAL/8) /* 6 MHz? */
MCFG_DEVICE_PROGRAM_MAP(heberpop_sound_map)
MCFG_DEVICE_IO_MAP(heberpop_sound_io_map) /* NMI triggered by YM3438 */
Z80(config, m_audiocpu, 48_MHz_XTAL/8); /* 6 MHz? */
m_audiocpu->set_addrmap(AS_PROGRAM, &shangha3_state::heberpop_sound_map);
m_audiocpu->set_addrmap(AS_IO, &shangha3_state::heberpop_sound_io_map); /* NMI triggered by YM3438 */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
// MCFG_SCREEN_REFRESH_RATE(60)
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
// MCFG_SCREEN_SIZE(24*16, 16*16)
// MCFG_SCREEN_VISIBLE_AREA(0*16, 24*16-1, 1*16, 15*16-1)
MCFG_SCREEN_RAW_PARAMS(48_MHz_XTAL/6,512,0,24*16,263,1*16,15*16) /* refresh rate is unknown */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
// m_screen->set_refresh_hz(60);
// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
// m_screen->set_size(24*16, 16*16);
// m_screen->set_visarea(0*16, 24*16-1, 1*16, 15*16-1);
m_screen->set_raw(48_MHz_XTAL/6, 512, 0, 24*16, 263, 1*16, 15*16); /* refresh rate is unknown */
m_screen->set_screen_update(FUNC(shangha3_state::screen_update));
m_screen->set_palette(m_palette);
MCFG_SCREEN_UPDATE_DRIVER(shangha3_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
GFXDECODE(config, m_gfxdecode, m_palette, gfx_shangha3);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_shangha3)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(RRRRRGGGGGBBBBBx)
MCFG_PALETTE_ENABLE_SHADOWS()
PALETTE(config, m_palette, 2048);
m_palette->set_format(PALETTE_FORMAT_RRRRRGGGGGBBBBBx);
m_palette->enable_shadows();
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -560,15 +555,15 @@ MACHINE_CONFIG_START(shangha3_state::blocken)
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0);
MCFG_DEVICE_ADD("ymsnd", YM3438, 48_MHz_XTAL/6) /* 8 MHz? */
MCFG_YM2612_IRQ_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_SOUND_ROUTE(0, "mono", 0.40)
MCFG_SOUND_ROUTE(1, "mono", 0.40)
ym3438_device &ymsnd(YM3438(config, "ymsnd", 48_MHz_XTAL/6)); /* 8 MHz? */
ymsnd.irq_handler().set_inputline("audiocpu", INPUT_LINE_NMI);
ymsnd.add_route(0, "mono", 0.40);
ymsnd.add_route(1, "mono", 0.40);
MCFG_DEVICE_ADD("oki", OKIM6295, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_DEVICE_ADDRESS_MAP(0, blocken_oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
OKIM6295(config, m_oki, 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
m_oki->set_addrmap(0, &shangha3_state::blocken_oki_map);
m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
}

View File

@ -371,8 +371,8 @@ class sega_multi32_analog_state : public sega_multi32_state
public:
sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
ioport_value in2_analog_read();
ioport_value in3_analog_read();
DECLARE_READ8_MEMBER(in2_analog_read);
DECLARE_READ8_MEMBER(in3_analog_read);
DECLARE_WRITE8_MEMBER(analog_bank_w);
void multi32_analog_map(address_map &map);

View File

@ -124,7 +124,7 @@ public:
void init_eightfrc();
void init_pairlove();
DECLARE_PALETTE_INIT(palette_init_RRRRRGGGGGBBBBB_proms);
DECLARE_PALETTE_INIT(RRRRRGGGGGBBBBB_proms);
SETA001_SPRITE_GFXBANK_CB_MEMBER(setac_gfxbank_callback);

View File

@ -148,10 +148,10 @@ void model1io_device::device_add_mconfig(machine_config &config)
io.in_pg_callback().set(FUNC(model1io_device::io_pg_r));
msm6253_device &adc(MSM6253(config, "adc", 0));
adc.set_input_cb<0>(FUNC(model1io_device::analog0_r), this);
adc.set_input_cb<1>(FUNC(model1io_device::analog1_r), this);
adc.set_input_cb<2>(FUNC(model1io_device::analog2_r), this);
adc.set_input_cb<3>(FUNC(model1io_device::analog3_r), this);
adc.input<0>().set(FUNC(model1io_device::analog0_r));
adc.input<1>().set(FUNC(model1io_device::analog1_r));
adc.input<2>().set(FUNC(model1io_device::analog2_r));
adc.input<3>().set(FUNC(model1io_device::analog3_r));
}

View File

@ -182,10 +182,10 @@ MACHINE_CONFIG_START( model1io2_device::device_add_mconfig )
MB3773(config, m_watchdog, 0);
msm6253_device &adc(MSM6253(config, "adc", 32_MHz_XTAL / 16 / 4));
adc.set_input_cb<0>(FUNC(model1io2_device::analog0_r), this);
adc.set_input_cb<1>(FUNC(model1io2_device::analog1_r), this);
adc.set_input_cb<2>(FUNC(model1io2_device::analog2_r), this);
adc.set_input_cb<3>(FUNC(model1io2_device::analog3_r), this);
adc.input<0>().set(FUNC(model1io2_device::analog0_r));
adc.input<1>().set(FUNC(model1io2_device::analog1_r));
adc.input<2>().set(FUNC(model1io2_device::analog2_r));
adc.input<3>().set(FUNC(model1io2_device::analog3_r));
// diagnostic LCD display
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));

View File

@ -571,7 +571,7 @@ PALETTE_INIT_MEMBER(seta_state,zingzip)
}
// color prom
PALETTE_INIT_MEMBER(seta_state,palette_init_RRRRRGGGGGBBBBB_proms)
PALETTE_INIT_MEMBER(seta_state,RRRRRGGGGGBBBBB_proms)
{
const uint8_t *color_prom = memregion("proms")->base();
int x;
@ -587,7 +587,7 @@ PALETTE_INIT_MEMBER(setaroul_state,setaroul)
m_gfxdecode->gfx(0)->set_granularity(16);
m_gfxdecode->gfx(1)->set_granularity(16);
PALETTE_INIT_NAME(palette_init_RRRRRGGGGGBBBBB_proms)(palette);
palette_init_RRRRRGGGGGBBBBB_proms(palette);
}
PALETTE_INIT_MEMBER(usclssic_state,usclssic)