spinb.c : wip

This commit is contained in:
Robbbert 2014-09-18 02:42:12 +00:00
parent 06a14d3080
commit 66e0b0128b
2 changed files with 588 additions and 70 deletions

View File

@ -1,47 +1,565 @@
/***************************************************************************************************
#include "emu.h"
PINBALL
Spinball (previously Inder)
Hardware is much the same as Inder, except the digital display is replaced by a DMD controlled by
a i8031.
Status
- Verne's World has different hardware, does nothing
- The others make a horrible noise when 5 pressed, nothing else, no display.
- Code for inputs and outputs is wrong (copied from inder.c)
- There are 2 sound cards (one for effects and one for music), however looks like they
both receive the same commands? Diagram only shows J9 for sound control.
- The DMD uses a i8031 but no luck getting it to do anything so far.
- There are mistakes in the sound board schematic: IC14 pin12 goes to IC5 pin13 only. IC16 pin 22
is the CS0 line only. So, they are not joined but are separate tracks. Also, according to PinMAME,
the outputs of IC11 are all wrong. They should be (from top to bottom): A16, A17, A18, NC, NC,
CS2, CS1, CS0.
****************************************************************************************************/
#include "machine/genpin.h"
#include "cpu/z80/z80.h"
#include "cpu/mcs51/mcs51.h"
#include "machine/i8255.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
#include "machine/7474.h"
class spinb_state : public driver_device
class spinb_state : public genpin_class
{
public:
spinb_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu")
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_musiccpu(*this, "musiccpu")
, m_dmdcpu(*this, "dmdcpu")
, m_msm_a(*this, "msm_a")
, m_msm_m(*this, "msm_m")
, m_ic5a(*this, "ic5a")
, m_ic5m(*this, "ic5m")
, m_switches(*this, "SW")
{ }
protected:
// devices
required_device<cpu_device> m_maincpu;
// driver_device overrides
virtual void machine_reset();
public:
DECLARE_WRITE8_MEMBER(p1_w);
DECLARE_READ8_MEMBER(p3_r);
DECLARE_WRITE8_MEMBER(p3_w);
DECLARE_READ8_MEMBER(ppia_c_r);
DECLARE_WRITE8_MEMBER(ppia_a_w);
DECLARE_WRITE8_MEMBER(ppia_b_w);
DECLARE_WRITE8_MEMBER(ppia_c_w);
DECLARE_READ8_MEMBER(ppim_c_r);
DECLARE_WRITE8_MEMBER(ppim_a_w);
DECLARE_WRITE8_MEMBER(ppim_b_w);
DECLARE_WRITE8_MEMBER(ppim_c_w);
DECLARE_WRITE8_MEMBER(ppi60a_w);
DECLARE_WRITE8_MEMBER(ppi60b_w);
DECLARE_WRITE8_MEMBER(ppi64c_w);
DECLARE_READ8_MEMBER(sw_r);
DECLARE_WRITE8_MEMBER(sw_w);
DECLARE_READ8_MEMBER(sndcmd_r);
DECLARE_WRITE8_MEMBER(sndbank_a_w);
DECLARE_WRITE8_MEMBER(sndbank_m_w);
DECLARE_WRITE8_MEMBER(sndcmd_w);
DECLARE_WRITE8_MEMBER(lamp_w) { };
DECLARE_WRITE8_MEMBER(lamp1_w) { };
DECLARE_WRITE8_MEMBER(volume_w) { };
DECLARE_WRITE8_MEMBER(disp_w);
DECLARE_WRITE_LINE_MEMBER(ic5a_w);
DECLARE_WRITE_LINE_MEMBER(ic5m_w);
DECLARE_WRITE_LINE_MEMBER(vck_a_w);
DECLARE_WRITE_LINE_MEMBER(vck_m_w);
DECLARE_DRIVER_INIT(spinb);
private:
bool m_pc0a;
bool m_pc0m;
UINT8 m_game;
UINT8 m_portc_a;
UINT8 m_portc_m;
UINT8 m_row;
UINT8 m_segment[8];
UINT8 m_sndcmd;
UINT8 m_sndbank_a;
UINT8 m_sndbank_m;
UINT32 m_sound_addr_a;
UINT32 m_sound_addr_m;
UINT8 *m_p_audio;
UINT8 *m_p_music;
virtual void machine_reset();
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_musiccpu;
required_device<cpu_device> m_dmdcpu;
required_device<msm5205_device> m_msm_a;
required_device<msm5205_device> m_msm_m;
required_device<ttl7474_device> m_ic5a;
required_device<ttl7474_device> m_ic5m;
required_ioport_array<11> m_switches;
};
static ADDRESS_MAP_START( spinb_map, AS_PROGRAM, 8, spinb_state )
AM_RANGE(0x0000, 0xffff) AM_NOP
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x5fff) AM_RAM AM_SHARE("nvram") // 6164, battery-backed
AM_RANGE(0x6000, 0x6003) AM_MIRROR(0x13fc) AM_DEVREADWRITE("ppi60", i8255_device, read, write)
AM_RANGE(0x6400, 0x6403) AM_MIRROR(0x13fc) AM_DEVREADWRITE("ppi64", i8255_device, read, write)
AM_RANGE(0x6800, 0x6803) AM_MIRROR(0x13fc) AM_DEVREADWRITE("ppi68", i8255_device, read, write)
AM_RANGE(0x6c00, 0x6c03) AM_MIRROR(0x131c) AM_DEVREADWRITE("ppi6c", i8255_device, read, write)
AM_RANGE(0x6c20, 0x6c3f) AM_MIRROR(0x1300) AM_WRITE(sndcmd_w)
AM_RANGE(0x6c40, 0x6c45) AM_MIRROR(0x1300) AM_WRITE(lamp1_w)
AM_RANGE(0x6c60, 0x6c60) AM_MIRROR(0x1300) AM_WRITE(disp_w)
AM_RANGE(0x6ce0, 0x6ce0) AM_WRITENOP
ADDRESS_MAP_END
static ADDRESS_MAP_START( spinb_audio_map, AS_PROGRAM, 8, spinb_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x3fff) AM_RAM // 6164
AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("ppia", i8255_device, read, write)
AM_RANGE(0x6000, 0x6000) AM_WRITE(sndbank_a_w)
AM_RANGE(0x8000, 0x8000) AM_READ(sndcmd_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( spinb_music_map, AS_PROGRAM, 8, spinb_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x3fff) AM_RAM // 6164
AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("ppim", i8255_device, read, write)
AM_RANGE(0x6000, 0x6000) AM_WRITE(sndbank_m_w)
AM_RANGE(0x8000, 0x8000) AM_READ(sndcmd_r)
AM_RANGE(0xA000, 0xA000) AM_WRITE(volume_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START(dmd_mem, AS_PROGRAM, 8, spinb_state)
AM_RANGE(0x0000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START(dmd_io, AS_IO, 8, spinb_state)
AM_RANGE(0x0000, 0x1fff) AM_RAM
AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(p1_w)
AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(p3_r, p3_w)
ADDRESS_MAP_END
static INPUT_PORTS_START( spinb )
PORT_START("SW.0")
PORT_DIPNAME( 0x80, 0x80, "Balls")
PORT_DIPSETTING( 0x80, "3")
PORT_DIPSETTING( 0x00, "5")
PORT_DIPNAME( 0x30, 0x30, "Coin Slot 1")
PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C )) // slot 2: 1 moneda 4 partidas
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C )) // and 4c_3c; slot 2: 1 moneda 3 partidas
PORT_DIPNAME( 0x0c, 0x0c, "Points for free game")
PORT_DIPSETTING( 0x0c, "2600000")
PORT_DIPSETTING( 0x08, "3000000")
PORT_DIPSETTING( 0x04, "3400000")
PORT_DIPSETTING( 0x00, "3800000")
PORT_START("SW.1")
PORT_DIPNAME( 0x30, 0x30, "High Score") //"Handicap"
PORT_DIPSETTING( 0x30, "4800000")
PORT_DIPSETTING( 0x20, "5000000")
PORT_DIPSETTING( 0x10, "5200000")
PORT_DIPSETTING( 0x00, "5400000")
PORT_DIPNAME( 0x08, 0x08, "Especial en Picabolas")
PORT_DIPSETTING( 0x08, "1st Derribo")
PORT_DIPSETTING( 0x00, "2nd Derribo")
PORT_DIPNAME( 0x04, 0x04, "Bola Extra En Rampas")
PORT_DIPSETTING( 0x04, "4 dianas")
PORT_DIPSETTING( 0x00, "2 dianas")
PORT_BIT( 0xc3, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SW.2")
PORT_DIPNAME( 0x04, 0x04, "Quita bola extra en passillos 1,2,y 3")
PORT_DIPSETTING( 0x04, DEF_STR(No))
PORT_DIPSETTING( 0x00, DEF_STR(Yes))
PORT_BIT( 0xfb, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SW.3")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) // "Monedero A"
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) // "Monedero B"
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_TILT ) // "Falta"
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 ) // "Pulsador Partidas"
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE3 ) PORT_NAME("Reset") // "Puesta a cero"
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_NAME("Accounting info") // "Test economico"
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Test") // "Test tecnico"
PORT_START("SW.4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O)
PORT_START("SW.5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K)
PORT_START("SW.6")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
PORT_START("SW.7")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
PORT_START("SW.8")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("SW.9")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("SW.10")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
void spinb_state::machine_reset()
/*
d0 = / enable RAM
d1 = display enable
d2 = RDATA )
d3 = ROWCK ) to DMD
d4 = COLATCH )
d5 = part of the data input circuit
d6 = STAT0
d7 = STAT1
*/
WRITE8_MEMBER( spinb_state::p1_w )
{
}
DRIVER_INIT_MEMBER(spinb_state,spinb)
READ8_MEMBER( spinb_state::p3_r )
{
return 0;
}
/*
d0 = RXD - SDATA ) to DMD
d1 = TXD - DOTCK )
d2 = Interrupt Input when data is coming from maincpu
d6 = R/W of RAM
d7 = OE of RAM , also part of data input circuit
*/
WRITE8_MEMBER( spinb_state::p3_w )
{
}
READ8_MEMBER( spinb_state::sw_r )
{
return m_switches[m_row]->read();
}
WRITE8_MEMBER( spinb_state::sw_w )
{
m_row = offset;
}
WRITE8_MEMBER( spinb_state::sndcmd_w )
{
m_sndcmd = data;
}
READ8_MEMBER( spinb_state::sndcmd_r )
{
return m_sndcmd;
}
WRITE8_MEMBER( spinb_state::disp_w )
{
UINT8 i;
if (offset < 8)
m_segment[offset] = data;
else
// From here, only used on old cpu board
if (offset > 0x40)
{
offset = (offset >> 3) & 7;
for (i = 0; i < 5; i++)
output_set_digit_value(i*10+offset, m_segment[i]);
}
}
WRITE8_MEMBER( spinb_state::ppi60a_w )
{
if (data)
for (UINT8 i = 0; i < 8; i++)
if BIT(data, i)
m_row = i;
}
// always 0 but we'll support it anyway
WRITE8_MEMBER( spinb_state::ppi60b_w )
{
if (data & 7)
for (UINT8 i = 0; i < 3; i++)
if BIT(data, i)
m_row = i+8;
}
WRITE8_MEMBER( spinb_state::ppi64c_w )
{
UINT8 i;
data &= 15;
if BIT(data, 3) // 8 to 15
{
data ^= 15; // now 7 to 0
for (i = 0; i < 5; i++)
{
if ((m_game==1) && (i == 4)) // mundial,clown,250cc,atleta have credit and ball displays swapped
data ^= 4;
output_set_digit_value(i*10+data, m_segment[i]);
}
}
}
WRITE8_MEMBER( spinb_state::sndbank_a_w )
{
m_sndbank_a = data;
m_sound_addr_a = (m_sound_addr_a & 0xffff) | ((data & 7) << 16);
if (!BIT(data, 6))
m_sound_addr_a |= (1<<19);
else
if (!BIT(data, 5))
m_sound_addr_a |= (2<<19);
else
if BIT(data, 7)
m_sndbank_a = 0xff;
}
WRITE8_MEMBER( spinb_state::sndbank_m_w )
{
m_sndbank_m = data;
m_sound_addr_m = (m_sound_addr_m & 0xffff) | ((data & 7) << 16);
if (!BIT(data, 6))
m_sound_addr_m |= (1<<19);
else
if (!BIT(data, 5))
m_sound_addr_m |= (2<<19);
else
if BIT(data, 7)
m_sndbank_m = 0xff;
}
WRITE_LINE_MEMBER( spinb_state::vck_a_w )
{
m_ic5a->clock_w(0);
m_ic5a->clock_w(1);
if (m_sndbank_a != 0xff)
{
if (!m_pc0a)
m_msm_a->data_w(m_p_audio[m_sound_addr_a] & 15);
else
m_msm_a->data_w(m_p_audio[m_sound_addr_a] >> 4);
}
else
m_msm_a->data_w(0);
}
WRITE_LINE_MEMBER( spinb_state::vck_m_w )
{
m_ic5m->clock_w(0);
m_ic5m->clock_w(1);
if (m_sndbank_m != 0xff)
{
if (!m_pc0m)
m_msm_m->data_w(m_p_music[m_sound_addr_m] & 15);
else
m_msm_m->data_w(m_p_music[m_sound_addr_m] >> 4);
}
else
m_msm_m->data_w(0);
}
WRITE_LINE_MEMBER( spinb_state::ic5a_w )
{
m_pc0a = state;
m_ic5a->d_w(state);
}
WRITE_LINE_MEMBER( spinb_state::ic5m_w )
{
m_pc0m = state;
m_ic5m->d_w(state);
}
READ8_MEMBER( spinb_state::ppia_c_r )
{
return m_pc0a | m_portc_a;
}
READ8_MEMBER( spinb_state::ppim_c_r )
{
return m_pc0m | m_portc_m;
}
WRITE8_MEMBER( spinb_state::ppia_a_w )
{
m_sound_addr_a = (m_sound_addr_a & 0xfff00) | data;
}
WRITE8_MEMBER( spinb_state::ppim_a_w )
{
m_sound_addr_m = (m_sound_addr_m & 0xfff00) | data;
}
WRITE8_MEMBER( spinb_state::ppia_b_w )
{
m_sound_addr_a = (m_sound_addr_a & 0xf00ff) | (data << 8);
}
WRITE8_MEMBER( spinb_state::ppim_b_w )
{
m_sound_addr_m = (m_sound_addr_m & 0xf00ff) | (data << 8);
}
WRITE8_MEMBER( spinb_state::ppia_c_w )
{
// pc4 - READY line back to cpu board, but not used
if (BIT(data, 5) != BIT(m_portc_a, 5))
m_msm_a->set_prescaler_selector(m_msm_a, BIT(data, 5) ? MSM5205_S48_4B : MSM5205_S96_4B); // S1 pin
m_msm_a->reset_w(BIT(data, 6));
m_ic5a->clear_w(!BIT(data, 6));
m_portc_a = data & 0xfe;
}
WRITE8_MEMBER( spinb_state::ppim_c_w )
{
// pc4 - READY line back to cpu board, but not used
if (BIT(data, 5) != BIT(m_portc_m, 5))
m_msm_m->set_prescaler_selector(m_msm_m, BIT(data, 5) ? MSM5205_S48_4B : MSM5205_S96_4B); // S1 pin
m_msm_m->reset_w(BIT(data, 6));
m_ic5m->clear_w(!BIT(data, 6));
m_portc_m = data & 0xfe;
}
void spinb_state::machine_reset()
{
m_sound_addr_a = 0;
m_sound_addr_m = 0;
m_sndbank_a = 0xff;
m_sndbank_m = 0xff;
m_row = 0;
}
DRIVER_INIT_MEMBER( spinb_state, spinb )
{
m_p_audio = memregion("audiorom")->base();
m_p_music = memregion("musicrom")->base();
m_game = 0;
}
static MACHINE_CONFIG_START( spinb, spinb_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I8051, 16000000)
MCFG_CPU_ADD("maincpu", Z80, XTAL_5MHz / 2)
MCFG_CPU_PROGRAM_MAP(spinb_map)
MCFG_CPU_PERIODIC_INT_DRIVER(spinb_state, irq0_line_hold, 160) // NE556 adjustable (if faster, then jolypark has a stack problem)
MCFG_CPU_ADD("audiocpu", Z80, XTAL_5MHz / 2)
MCFG_CPU_PROGRAM_MAP(spinb_audio_map)
MCFG_CPU_ADD("musiccpu", Z80, XTAL_5MHz / 2)
MCFG_CPU_PROGRAM_MAP(spinb_music_map)
MCFG_CPU_ADD("dmdcpu",I8031, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP(dmd_mem)
MCFG_CPU_IO_MAP(dmd_io)
MCFG_NVRAM_ADD_1FILL("nvram")
/* Sound */
MCFG_FRAGMENT_ADD( genpin_audio )
MCFG_SPEAKER_STANDARD_MONO("msmavol")
MCFG_SOUND_ADD("msm_a", MSM5205, XTAL_384kHz)
MCFG_MSM5205_VCLK_CB(WRITELINE(spinb_state, vck_a_w))
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 4KHz 4-bit */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "msmavol", 1.0)
MCFG_SPEAKER_STANDARD_MONO("msmmvol")
MCFG_SOUND_ADD("msm_m", MSM5205, XTAL_384kHz)
MCFG_MSM5205_VCLK_CB(WRITELINE(spinb_state, vck_m_w))
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 4KHz 4-bit */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "msmmvol", 1.0)
/* Devices */
MCFG_DEVICE_ADD("ppi60", I8255A, 0 )
//MCFG_I8255_IN_PORTA_CB(READ8(spinb_state, ppi60a_r))
MCFG_I8255_OUT_PORTA_CB(WRITE8(spinb_state, ppi60a_w))
//MCFG_I8255_IN_PORTB_CB(READ8(spinb_state, ppi60b_r))
MCFG_I8255_OUT_PORTB_CB(WRITE8(spinb_state, ppi60b_w))
MCFG_I8255_IN_PORTC_CB(READ8(spinb_state, sw_r))
//MCFG_I8255_OUT_PORTC_CB(WRITE8(spinb_state, ppi60c_w))
MCFG_DEVICE_ADD("ppi64", I8255A, 0 )
//MCFG_I8255_IN_PORTA_CB(READ8(spinb_state, ppi64a_r))
//MCFG_I8255_OUT_PORTA_CB(WRITE8(spinb_state, ppi64a_w))
//MCFG_I8255_IN_PORTB_CB(READ8(spinb_state, ppi64b_r))
//MCFG_I8255_OUT_PORTB_CB(WRITE8(spinb_state, ppi64b_w))
//MCFG_I8255_IN_PORTC_CB(READ8(spinb_state, ppi64c_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(spinb_state, ppi64c_w))
MCFG_DEVICE_ADD("ppi68", I8255A, 0 )
//MCFG_I8255_IN_PORTA_CB(READ8(spinb_state, ppi68a_r))
//MCFG_I8255_OUT_PORTA_CB(WRITE8(spinb_state, ppi68a_w))
//MCFG_I8255_IN_PORTB_CB(READ8(spinb_state, ppi68b_r))
//MCFG_I8255_OUT_PORTB_CB(WRITE8(spinb_state, ppi68b_w))
//MCFG_I8255_IN_PORTC_CB(READ8(spinb_state, ppi68c_r))
//MCFG_I8255_OUT_PORTC_CB(WRITE8(spinb_state, ppi68c_w))
MCFG_DEVICE_ADD("ppi6c", I8255A, 0 )
//MCFG_I8255_IN_PORTA_CB(READ8(spinb_state, ppi6ca_r))
//MCFG_I8255_OUT_PORTA_CB(WRITE8(spinb_state, ppi6ca_w))
//MCFG_I8255_IN_PORTB_CB(READ8(spinb_state, ppi6cb_r))
//MCFG_I8255_OUT_PORTB_CB(WRITE8(spinb_state, ppi6cb_w))
//MCFG_I8255_IN_PORTC_CB(READ8(spinb_state, ppi6cc_r))
//MCFG_I8255_OUT_PORTC_CB(WRITE8(spinb_state, ppi6cc_w))
MCFG_DEVICE_ADD("ppia", I8255A, 0 )
MCFG_I8255_OUT_PORTA_CB(WRITE8(spinb_state, ppia_a_w))
MCFG_I8255_OUT_PORTB_CB(WRITE8(spinb_state, ppia_b_w))
MCFG_I8255_IN_PORTC_CB(READ8(spinb_state, ppia_c_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(spinb_state, ppia_c_w))
MCFG_DEVICE_ADD("ppim", I8255A, 0 )
MCFG_I8255_OUT_PORTA_CB(WRITE8(spinb_state, ppim_a_w))
MCFG_I8255_OUT_PORTB_CB(WRITE8(spinb_state, ppim_b_w))
MCFG_I8255_IN_PORTC_CB(READ8(spinb_state, ppim_c_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(spinb_state, ppim_c_w))
MCFG_DEVICE_ADD("ic5a", TTL7474, 0)
MCFG_7474_COMP_OUTPUT_CB(WRITELINE(spinb_state, ic5a_w))
MCFG_DEVICE_ADD("ic5m", TTL7474, 0)
MCFG_7474_COMP_OUTPUT_CB(WRITELINE(spinb_state, ic5m_w))
MACHINE_CONFIG_END
#if 0
static MACHINE_CONFIG_START( spinb, spinb_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I8031, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP(spinb_map)
MACHINE_CONFIG_END
#endif
/*-------------------------------------------------------------------
/ Bushido (1993) - ( Last game by Inder - before becoming Spinball - but same hardware)
@ -50,17 +568,17 @@ ROM_START(bushido)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("0-z80.bin", 0x0000, 0x2000, CRC(3ea1eb1d) SHA1(cceb6c68e481f36a5646ff4f38d3dfc4275b0c79))
ROM_LOAD("1-z80.old", 0x2000, 0x2000, CRC(648da72b) SHA1(1005a13b4746e302d979c8b1da300e943cdcab3d))
ROM_REGION(0x32001, "cpu2", 0)
ROM_REGION(0x32001, "dmdcpu", 0)
ROM_LOAD("g-disply.bin", 0x00000, 0x10000, CRC(9a1df82f) SHA1(4ad6a12ae36ec898b8ac5243da6dec3abcd9dc33))
ROM_REGION(0x10000, "cpu3", 0)
ROM_LOAD("a-sonido.bin", 0x00000, 0x2000, CRC(cf7d5399) SHA1(c79145826cfa6be2487e3add477d9b452c553762))
ROM_REGION(0x180000, "user1", 0)
ROM_LOAD("b-sonido.bin", 0x0000, 0x80000, CRC(cb4fc885) SHA1(569f389fa8f91f886b58f44f701d2752ef01f3fa))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("a-sonido.bin", 0x0000, 0x2000, CRC(cf7d5399) SHA1(c79145826cfa6be2487e3add477d9b452c553762))
ROM_REGION(0x180000, "audiorom", 0)
ROM_LOAD("b-sonido.bin", 0x00000, 0x80000, CRC(cb4fc885) SHA1(569f389fa8f91f886b58f44f701d2752ef01f3fa))
ROM_LOAD("c-sonido.bin", 0x80000, 0x80000, CRC(35a43dd8) SHA1(f2b1994f67f749c65a88c95d970b655990d85b96))
ROM_REGION(0x10000, "cpu4", 0)
ROM_LOAD("d-musica.bin", 0x00000, 0x2000, CRC(2cb9697c) SHA1(d5c66d616ccd5e299832704e494743429dafd569))
ROM_REGION(0x180000, "user2", 0)
ROM_LOAD("e-musica.bin", 0x0000, 0x80000, CRC(1414b921) SHA1(5df9e538ee109df28953ec8f162c60cb8c6e4d96))
ROM_REGION(0x10000, "musiccpu", 0)
ROM_LOAD("d-musica.bin", 0x0000, 0x2000, CRC(2cb9697c) SHA1(d5c66d616ccd5e299832704e494743429dafd569))
ROM_REGION(0x180000, "musicrom", 0)
ROM_LOAD("e-musica.bin", 0x00000, 0x80000, CRC(1414b921) SHA1(5df9e538ee109df28953ec8f162c60cb8c6e4d96))
ROM_LOAD("f-musica.bin", 0x80000, 0x80000, CRC(80f3a6df) SHA1(e09ad4660e511779c6e55559fa0c2c0b0c6600c8))
ROM_END
@ -68,17 +586,17 @@ ROM_START(bushidoa)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("0-cpu.bin", 0x0000, 0x2000, CRC(7f7e6642) SHA1(6872397eed7525f384b79cdea13531d273d8cf14))
ROM_LOAD("1-cpu.bin", 0x2000, 0x2000, CRC(a538d37f) SHA1(d2878ad0d31b4221b823812485c7faaf666ce185))
ROM_REGION(0x32001, "cpu2", 0)
ROM_REGION(0x32001, "dmdcpu", 0)
ROM_LOAD("g-disply.bin", 0x00000, 0x10000, CRC(9a1df82f) SHA1(4ad6a12ae36ec898b8ac5243da6dec3abcd9dc33))
ROM_REGION(0x10000, "cpu3", 0)
ROM_LOAD("a-sonido.bin", 0x00000, 0x2000, CRC(cf7d5399) SHA1(c79145826cfa6be2487e3add477d9b452c553762))
ROM_REGION(0x180000, "user1", 0)
ROM_LOAD("b-sonido.bin", 0x0000, 0x80000, CRC(cb4fc885) SHA1(569f389fa8f91f886b58f44f701d2752ef01f3fa))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("a-sonido.bin", 0x0000, 0x2000, CRC(cf7d5399) SHA1(c79145826cfa6be2487e3add477d9b452c553762))
ROM_REGION(0x180000, "audiorom", 0)
ROM_LOAD("b-sonido.bin", 0x00000, 0x80000, CRC(cb4fc885) SHA1(569f389fa8f91f886b58f44f701d2752ef01f3fa))
ROM_LOAD("c-sonido.bin", 0x80000, 0x80000, CRC(35a43dd8) SHA1(f2b1994f67f749c65a88c95d970b655990d85b96))
ROM_REGION(0x10000, "cpu4", 0)
ROM_LOAD("d-musica.bin", 0x00000, 0x2000, CRC(2cb9697c) SHA1(d5c66d616ccd5e299832704e494743429dafd569))
ROM_REGION(0x180000, "user2", 0)
ROM_LOAD("e-musica.bin", 0x0000, 0x80000, CRC(1414b921) SHA1(5df9e538ee109df28953ec8f162c60cb8c6e4d96))
ROM_REGION(0x10000, "musiccpu", 0)
ROM_LOAD("d-musica.bin", 0x0000, 0x2000, CRC(2cb9697c) SHA1(d5c66d616ccd5e299832704e494743429dafd569))
ROM_REGION(0x180000, "musicrom", 0)
ROM_LOAD("e-musica.bin", 0x00000, 0x80000, CRC(1414b921) SHA1(5df9e538ee109df28953ec8f162c60cb8c6e4d96))
ROM_LOAD("f-musica.bin", 0x80000, 0x80000, CRC(80f3a6df) SHA1(e09ad4660e511779c6e55559fa0c2c0b0c6600c8))
ROM_END
@ -89,19 +607,19 @@ ROM_START(jolypark)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("jpcpu0.rom", 0x0000, 0x2000, CRC(061967af) SHA1(45048e1d9f17efa3382460fd474a5aeb4191d617))
ROM_LOAD("jpcpu1.rom", 0x2000, 0x2000, CRC(ea99202f) SHA1(e04825e73fd25f6469b3315f063f598ea1ab44c7))
ROM_REGION(0x32001, "cpu2", 0)
ROM_REGION(0x32001, "dmdcpu", 0)
ROM_LOAD("jpdmd0.rom", 0x00000, 0x10000, CRC(b57565cb) SHA1(3fef66d298893029de78fdb6ecdb562c33d76180))
ROM_LOAD("jpdmd1.rom", 0x12000, 0x20000, CRC(40d1563f) SHA1(90dbea742202340da6fa950eedc2bceec5a2af7e))
ROM_REGION(0x10000, "cpu3", 0)
ROM_LOAD("jpsndc1.rom", 0x00000, 0x2000, CRC(0475318f) SHA1(7154bd5ca5b28019eb0ff598ec99bbe49260932b))
ROM_REGION(0x180000, "user1", 0)
ROM_LOAD("jpsndm4.rom", 0x0000, 0x80000, CRC(735f3db7) SHA1(81dc893f5194d6ac1af54b262555a40c5c3e0292))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("jpsndc1.rom", 0x0000, 0x2000, CRC(0475318f) SHA1(7154bd5ca5b28019eb0ff598ec99bbe49260932b))
ROM_REGION(0x180000, "audiorom", 0)
ROM_LOAD("jpsndm4.rom", 0x00000, 0x80000, CRC(735f3db7) SHA1(81dc893f5194d6ac1af54b262555a40c5c3e0292))
ROM_LOAD("jpsndm5.rom", 0x80000, 0x80000, CRC(769374bd) SHA1(8121369714c55cc06c493b15e5c2ca79b13aff52))
ROM_REGION(0x10000, "cpu4", 0)
ROM_LOAD("jpsndc0.rom", 0x00000, 0x2000, CRC(a97259dc) SHA1(58dea3f36b760112cfc32d306077da8cf6cdec5a))
ROM_REGION(0x180000, "user2", 0)
ROM_LOAD("jpsndm1.rom", 0x0000, 0x80000, CRC(fc91d2f1) SHA1(c838a0b31bbec9dbc96b46d692c8d6f1286fe46a))
ROM_LOAD("jpsndm2.rom", 0x80000, 0x80000, CRC(fb2d1882) SHA1(fb0ef9def54d9163a46354a0df0757fac6cbd57c))
ROM_REGION(0x10000, "musiccpu", 0)
ROM_LOAD("jpsndc0.rom", 0x0000, 0x2000, CRC(a97259dc) SHA1(58dea3f36b760112cfc32d306077da8cf6cdec5a))
ROM_REGION(0x180000, "musicrom", 0)
ROM_LOAD("jpsndm1.rom", 0x000000, 0x80000, CRC(fc91d2f1) SHA1(c838a0b31bbec9dbc96b46d692c8d6f1286fe46a))
ROM_LOAD("jpsndm2.rom", 0x080000, 0x80000, CRC(fb2d1882) SHA1(fb0ef9def54d9163a46354a0df0757fac6cbd57c))
ROM_LOAD("jpsndm3.rom", 0x100000, 0x80000, CRC(77e515ba) SHA1(17b635d107c437bfc809f8cc1a6cd063cef12691))
ROM_END
@ -112,16 +630,16 @@ ROM_START(mach2)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("m2cpu0.19", 0x0000, 0x2000, CRC(274c8040) SHA1(6b039b79b7e08f2bf2045bc4f1cbba790c999fed))
ROM_LOAD("m2cpu1.19", 0x2000, 0x2000, CRC(c445df0b) SHA1(1f346c1df8df0a3c4e8cb1186280d2f34959b3f8))
ROM_REGION(0x32001, "cpu2", 0)
ROM_REGION(0x32001, "dmdcpu", 0)
ROM_LOAD("m2dmdf.01", 0x00000, 0x10000, CRC(c45ccc74) SHA1(8362e799a76536a16dd2d5dde500ad3db273180f))
ROM_REGION(0x10000, "cpu3", 0)
ROM_LOAD("m2sndd.01", 0x00000, 0x2000, CRC(e789f22d) SHA1(36aa7eac1dd37a02c982d109462dddbd85a305cc))
ROM_REGION(0x180000, "user1", 0)
ROM_LOAD("m2snde.01", 0x0000, 0x80000, CRC(f5721119) SHA1(9082198e8d875b67323266c4bf8c2c378b63dfbb))
ROM_REGION(0x10000, "cpu4", 0)
ROM_LOAD("m2musa.01", 0x00000, 0x2000, CRC(2d92a882) SHA1(cead22e434445e5c25414646b1e9ae2b9457439d))
ROM_REGION(0x180000, "user2", 0)
ROM_LOAD("m2musb.01", 0x0000, 0x80000, CRC(6689cd19) SHA1(430092d51704dfda8bd8264875f1c1f4461c56e5))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("m2sndd.01", 0x0000, 0x2000, CRC(e789f22d) SHA1(36aa7eac1dd37a02c982d109462dddbd85a305cc))
ROM_REGION(0x180000, "audiorom", 0)
ROM_LOAD("m2snde.01", 0x00000, 0x80000, CRC(f5721119) SHA1(9082198e8d875b67323266c4bf8c2c378b63dfbb))
ROM_REGION(0x10000, "musiccpu", 0)
ROM_LOAD("m2musa.01", 0x0000, 0x2000, CRC(2d92a882) SHA1(cead22e434445e5c25414646b1e9ae2b9457439d))
ROM_REGION(0x180000, "musicrom", 0)
ROM_LOAD("m2musb.01", 0x00000, 0x80000, CRC(6689cd19) SHA1(430092d51704dfda8bd8264875f1c1f4461c56e5))
ROM_LOAD("m2musc.01", 0x80000, 0x80000, CRC(88851b82) SHA1(d0c9fa391ca213a69b7c8ae7ca52063503b5656e))
ROM_END
@ -132,24 +650,24 @@ ROM_START(vrnwrld)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("vwcpu0.rom", 0x0000, 0x4000, CRC(89c980e7) SHA1(09eeed0232255875cf119d59143d839ff40e30dd))
ROM_LOAD("vwcpu1.rom", 0x4000, 0x4000, CRC(a4db4e64) SHA1(fc55781295fc723741de24ad60311b7e33551830))
ROM_REGION(0x114000, "cpu2", 0)
ROM_REGION(0x114000, "dmdcpu", 0)
ROM_LOAD("vwdmd0.rom", 0x00000, 0x10000, CRC(40600060) SHA1(7ad619bcb5e5e50325360f4e946b5bfa072caead))
ROM_LOAD("vwdmd1.rom", 0x14000, 0x80000, CRC(de4a1060) SHA1(6b848dfd8aafdbcf7e1593f98bd1c3d69306aa11))
ROM_LOAD("vwdmd2.rom", 0x94000, 0x80000, CRC(29fc8da7) SHA1(2704f14a3338a63abda3bcbc56e9f984a679eb38))
ROM_REGION(0x10000, "cpu3", 0)
ROM_LOAD("vws2ic9.rom", 0x00000, 0x2000, CRC(ab8cb4c5) SHA1(92a702c11e2cef703992244529ba86079d5ab9b0))
ROM_REGION(0x180000, "user1", 0)
ROM_LOAD("vws3ic15.rom", 0x0000, 0x80000, CRC(d62c9443) SHA1(7c6b8662d88ba6592da8b83af11087647105e8dd))
ROM_REGION(0x10000, "cpu4", 0)
ROM_LOAD("vws4ic30.rom", 0x00000, 0x2000, CRC(ecd18a19) SHA1(558e687e0429d31fafe8db05954d9a8ad90d6aeb))
ROM_REGION(0x180000, "user2", 0)
ROM_LOAD("vws5ic25.rom", 0x0000, 0x80000, CRC(56d349f0) SHA1(e71d2d03c3e978c552e272de8850cc265255fbd1))
ROM_LOAD("vws6ic26.rom", 0x80000, 0x80000, CRC(bee399c1) SHA1(b2c6e4830641ed32b9643dc8c1fa08a2da5a7e9b))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("vws2ic9.rom", 0x0000, 0x2000, CRC(ab8cb4c5) SHA1(92a702c11e2cef703992244529ba86079d5ab9b0))
ROM_REGION(0x180000, "audiorom", 0)
ROM_LOAD("vws3ic15.rom", 0x00000, 0x80000, CRC(d62c9443) SHA1(7c6b8662d88ba6592da8b83af11087647105e8dd))
ROM_REGION(0x10000, "musiccpu", 0)
ROM_LOAD("vws4ic30.rom", 0x0000, 0x2000, CRC(ecd18a19) SHA1(558e687e0429d31fafe8db05954d9a8ad90d6aeb))
ROM_REGION(0x180000, "musicrom", 0)
ROM_LOAD("vws5ic25.rom", 0x000000, 0x80000, CRC(56d349f0) SHA1(e71d2d03c3e978c552e272de8850cc265255fbd1))
ROM_LOAD("vws6ic26.rom", 0x080000, 0x80000, CRC(bee399c1) SHA1(b2c6e4830641ed32b9643dc8c1fa08a2da5a7e9b))
ROM_LOAD("vws7ic27.rom", 0x100000, 0x80000, CRC(7335b29c) SHA1(4de6de09f069feecbad2e5ef50032e8d381ff9b1))
ROM_END
GAME(1993, bushido, 0, spinb, spinb, spinb_state, spinb, ROT0, "Inder/Spinball", "Bushido (set 1)", GAME_IS_SKELETON_MECHANICAL)
GAME(1993, bushidoa, bushido, spinb, spinb, spinb_state, spinb, ROT0, "Inder/Spinball", "Bushido (set 2)", GAME_IS_SKELETON_MECHANICAL)
GAME(1996, jolypark, 0, spinb, spinb, spinb_state, spinb, ROT0, "Spinball", "Jolly Park", GAME_IS_SKELETON_MECHANICAL)
GAME(1995, mach2, 0, spinb, spinb, spinb_state, spinb, ROT0, "Spinball", "Mach 2", GAME_IS_SKELETON_MECHANICAL)
GAME(1996, vrnwrld, 0, spinb, spinb, spinb_state, spinb, ROT0, "Spinball", "Verne's World", GAME_IS_SKELETON_MECHANICAL)
GAME(1993, bushido, 0, spinb, spinb, spinb_state, spinb, ROT0, "Inder/Spinball", "Bushido (set 1)", GAME_IS_SKELETON_MECHANICAL)
GAME(1993, bushidoa, bushido, spinb, spinb, spinb_state, spinb, ROT0, "Inder/Spinball", "Bushido (set 2)", GAME_IS_SKELETON_MECHANICAL)
GAME(1996, jolypark, 0, spinb, spinb, spinb_state, spinb, ROT0, "Spinball", "Jolly Park", GAME_IS_SKELETON_MECHANICAL)
GAME(1995, mach2, 0, spinb, spinb, spinb_state, spinb, ROT0, "Spinball", "Mach 2", GAME_IS_SKELETON_MECHANICAL)
GAME(1996, vrnwrld, 0, spinb, spinb, spinb_state, spinb, ROT0, "Spinball", "Verne's World", GAME_IS_SKELETON_MECHANICAL)

View File

@ -509,7 +509,7 @@ ROM_START(pz_l3)
ROM_END
/*--------------------
/ Slugfest baseball #60001,60021
/ Slugfest baseball #60001
/--------------------*/
ROM_START(sf_l1)
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)