mirror of
https://github.com/holub/mame
synced 2025-07-05 09:57:47 +03:00
New games added or promoted from NOT_WORKING status
--------------------------------------------------- Tap a Tune [Phil Bennett, Mariusz Wojcieszek]
This commit is contained in:
parent
8a48b5878b
commit
2a9e72a7ca
@ -1,10 +1,11 @@
|
|||||||
/*
|
/***************************************************************************
|
||||||
|
|
||||||
Tap-A-Tune
|
Tap a Tune
|
||||||
1994 CES?
|
|
||||||
---------
|
|
||||||
|
|
||||||
Driver by Mariusz Wojcieszek and Phil Bennett
|
driver by Mariusz Wojcieszek and Phil Bennett
|
||||||
|
|
||||||
|
|
||||||
|
PCB Notes:
|
||||||
|
|
||||||
Top board notable:
|
Top board notable:
|
||||||
|
|
||||||
@ -18,7 +19,7 @@ Top board notable:
|
|||||||
|
|
||||||
Bottom board notable:
|
Bottom board notable:
|
||||||
|
|
||||||
- Zilog Z0840006PSC Z80 CPU (24 MHz crystal, clock unknown)
|
- Zilog Z0840006PSC Z80 CPU (24 MHz crystal)
|
||||||
- BSMT2000 custom audio IC
|
- BSMT2000 custom audio IC
|
||||||
- rom.u8 Z80 program
|
- rom.u8 Z80 program
|
||||||
- arom1.u16 BSMT2000 samples
|
- arom1.u16 BSMT2000 samples
|
||||||
@ -26,42 +27,64 @@ Bottom board notable:
|
|||||||
- red/green/yellow LEDs
|
- red/green/yellow LEDs
|
||||||
- many connectors for I/O
|
- many connectors for I/O
|
||||||
|
|
||||||
*/
|
The sound and I/O board is used by other redemption games such as
|
||||||
|
Colorama and Wheel 'Em In
|
||||||
|
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/m68000/m68000.h"
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "video/mc6845.h"
|
#include "machine/nvram.h"
|
||||||
#include "sound/bsmt2000.h"
|
|
||||||
#include "machine/ticket.h"
|
#include "machine/ticket.h"
|
||||||
|
#include "sound/bsmt2000.h"
|
||||||
|
#include "video/mc6845.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Driver state
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
class tapatune_state : public driver_device
|
class tapatune_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tapatune_state(const machine_config &mconfig, device_type type, const char *tag)
|
tapatune_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_videoram(*this, "videoram") ,
|
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_soundcpu(*this, "soundcpu") {}
|
m_soundcpu(*this, "soundcpu"),
|
||||||
|
m_bsmt(*this, "bsmt"),
|
||||||
UINT8 m_paletteram[0x300];
|
m_videoram(*this, "videoram") {}
|
||||||
UINT16 m_palette_write_address;
|
|
||||||
rgb_t m_pens[0x100];
|
|
||||||
|
|
||||||
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_device<cpu_device> m_soundcpu;
|
||||||
|
required_device<bsmt2000_device> m_bsmt;
|
||||||
required_shared_ptr<UINT16> m_videoram;
|
required_shared_ptr<UINT16> m_videoram;
|
||||||
|
|
||||||
|
UINT8 m_paletteram[0x300];
|
||||||
|
UINT16 m_palette_write_addr;
|
||||||
|
rgb_t m_pens[0x100];
|
||||||
UINT8 m_controls_mux;
|
UINT8 m_controls_mux;
|
||||||
UINT8 m_z80_to_68k_index;
|
UINT8 m_z80_to_68k_index;
|
||||||
UINT8 m_z80_to_68k_data;
|
UINT8 m_z80_to_68k_data;
|
||||||
|
|
||||||
UINT8 m_68k_to_z80_index;
|
UINT8 m_68k_to_z80_index;
|
||||||
UINT8 m_68k_to_z80_data;
|
UINT8 m_68k_to_z80_data;
|
||||||
|
UINT8 m_z80_data_available;
|
||||||
|
UINT8 m_68k_data_available;
|
||||||
|
UINT8 m_bsmt_data_l;
|
||||||
|
UINT8 m_bsmt_data_h;
|
||||||
|
bool m_bsmt_reset;
|
||||||
|
|
||||||
|
virtual void machine_start();
|
||||||
|
virtual void machine_reset();
|
||||||
|
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(crtc_vsync);
|
||||||
|
|
||||||
UINT16 m_bsmt_data;
|
|
||||||
DECLARE_WRITE16_MEMBER(palette_w);
|
DECLARE_WRITE16_MEMBER(palette_w);
|
||||||
DECLARE_READ16_MEMBER(read_from_z80);
|
DECLARE_READ16_MEMBER(read_from_z80);
|
||||||
DECLARE_WRITE16_MEMBER(write_to_z80);
|
DECLARE_WRITE16_MEMBER(write_to_z80);
|
||||||
DECLARE_READ16_MEMBER(irq_ack_r);
|
|
||||||
DECLARE_READ8_MEMBER(sound_irq_clear);
|
DECLARE_READ8_MEMBER(sound_irq_clear);
|
||||||
DECLARE_WRITE8_MEMBER(controls_mux);
|
DECLARE_WRITE8_MEMBER(controls_mux);
|
||||||
DECLARE_READ8_MEMBER(controls_r);
|
DECLARE_READ8_MEMBER(controls_r);
|
||||||
@ -69,252 +92,61 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(write_data_to_68k);
|
DECLARE_WRITE8_MEMBER(write_data_to_68k);
|
||||||
DECLARE_READ8_MEMBER(read_index_from_68k);
|
DECLARE_READ8_MEMBER(read_index_from_68k);
|
||||||
DECLARE_READ8_MEMBER(read_data_from_68k);
|
DECLARE_READ8_MEMBER(read_data_from_68k);
|
||||||
DECLARE_READ8_MEMBER(bsmt_status_r);
|
DECLARE_WRITE8_MEMBER(lamps_w);
|
||||||
|
DECLARE_READ8_MEMBER(status_r);
|
||||||
DECLARE_WRITE8_MEMBER(bsmt_data_lo_w);
|
DECLARE_WRITE8_MEMBER(bsmt_data_lo_w);
|
||||||
DECLARE_WRITE8_MEMBER(bsmt_data_hi_w);
|
DECLARE_WRITE8_MEMBER(bsmt_data_hi_w);
|
||||||
DECLARE_WRITE8_MEMBER(bsmt_reg_w);
|
DECLARE_WRITE8_MEMBER(bsmt_reg_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(crtc_vsync);
|
DECLARE_READ8_MEMBER(special_r);
|
||||||
virtual void video_start();
|
|
||||||
required_device<cpu_device> m_maincpu;
|
|
||||||
required_device<cpu_device> m_soundcpu;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
WRITE16_MEMBER(tapatune_state::palette_w)
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Initialization & interrupts
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
void tapatune_state::machine_start()
|
||||||
{
|
{
|
||||||
//logerror("Palette write: offset = %02x, data = %04x, mask = %04x\n", offset, data, mem_mask );
|
save_item(NAME(m_paletteram));
|
||||||
switch(offset)
|
save_item(NAME(m_palette_write_addr));
|
||||||
{
|
save_item(NAME(m_pens));
|
||||||
case 0: // address register
|
save_item(NAME(m_controls_mux));
|
||||||
m_palette_write_address = ((data >> 8) & 0xff) * 3;
|
save_item(NAME(m_z80_to_68k_index));
|
||||||
break;
|
save_item(NAME(m_z80_to_68k_data));
|
||||||
case 1: // palette data
|
save_item(NAME(m_68k_to_z80_index));
|
||||||
m_paletteram[m_palette_write_address++] = (data >> 8) & 0xff;
|
save_item(NAME(m_68k_to_z80_data));
|
||||||
break;
|
save_item(NAME(m_z80_data_available));
|
||||||
case 2: // unknown?
|
save_item(NAME(m_68k_data_available));
|
||||||
break;
|
save_item(NAME(m_bsmt_data_l));
|
||||||
}
|
save_item(NAME(m_bsmt_data_h));
|
||||||
|
save_item(NAME(m_bsmt_reset));
|
||||||
}
|
}
|
||||||
|
|
||||||
READ16_MEMBER(tapatune_state::read_from_z80)
|
|
||||||
{
|
|
||||||
//logerror("Reading data from Z80: index = %02x, data = %02x\n", m_z80_to_68k_index, m_z80_to_68k_data );
|
|
||||||
|
|
||||||
switch( offset )
|
void tapatune_state::machine_reset()
|
||||||
{
|
{
|
||||||
case 0:
|
// The BSMT2000 is held in reset until the Z80 writes to P1
|
||||||
return ((UINT16)m_z80_to_68k_data << 8) | (m_z80_to_68k_index);
|
m_bsmt_reset = true;
|
||||||
default:
|
m_z80_data_available = 0;
|
||||||
return 0;
|
m_68k_data_available = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE16_MEMBER(tapatune_state::write_to_z80)
|
|
||||||
{
|
|
||||||
switch( offset )
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
//if ( (data >> 8) & 0xff )
|
|
||||||
// logerror("Command to Z80: %04x\n", data);
|
|
||||||
m_68k_to_z80_index = data & 0xff;
|
|
||||||
m_68k_to_z80_data = (data >> 8) & 0xff;
|
|
||||||
m_maincpu->set_input_line(3, CLEAR_LINE);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
READ16_MEMBER(tapatune_state::irq_ack_r)
|
/*************************************
|
||||||
{
|
*
|
||||||
m_maincpu->set_input_line(2, CLEAR_LINE);
|
* Video hardware
|
||||||
return 0;
|
*
|
||||||
}
|
*************************************/
|
||||||
|
|
||||||
static ADDRESS_MAP_START( tapatune_map, AS_PROGRAM, 16, tapatune_state )
|
|
||||||
AM_RANGE(0x000000, 0x2fffff) AM_ROM // program rom and graphics roms
|
|
||||||
AM_RANGE(0x300000, 0x31ffff) AM_RAM AM_SHARE("videoram") // hardware video buffer
|
|
||||||
AM_RANGE(0x320000, 0x327fff) AM_RAM // workram
|
|
||||||
AM_RANGE(0x328000, 0x32ffff) AM_RAM
|
|
||||||
AM_RANGE(0x330000, 0x337fff) AM_RAM // ram used as system video buffer
|
|
||||||
AM_RANGE(0x338000, 0x33ffff) AM_RAM
|
|
||||||
AM_RANGE(0x400000, 0x400003) AM_READWRITE(read_from_z80, write_to_z80)
|
|
||||||
AM_RANGE(0x400010, 0x400011) AM_READ(irq_ack_r)
|
|
||||||
AM_RANGE(0x600000, 0x600005) AM_WRITE(palette_w)
|
|
||||||
AM_RANGE(0x800000, 0x800001) AM_DEVWRITE8("crtc", mc6845_device, address_w, 0xff00)
|
|
||||||
AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
|
|
||||||
ADDRESS_MAP_END
|
|
||||||
|
|
||||||
READ8_MEMBER(tapatune_state::sound_irq_clear)
|
|
||||||
{
|
|
||||||
m_soundcpu->set_input_line(0, CLEAR_LINE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(tapatune_state::controls_mux)
|
|
||||||
{
|
|
||||||
//logerror("Controls mux written with %02x\n", data);
|
|
||||||
m_controls_mux = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
READ8_MEMBER(tapatune_state::controls_r)
|
|
||||||
{
|
|
||||||
switch( m_controls_mux )
|
|
||||||
{
|
|
||||||
case 0x07: return ioport("DSW1")->read();
|
|
||||||
case 0x08: return ioport("DSW2")->read();
|
|
||||||
case 0x09: return ioport("IN0")->read();
|
|
||||||
default: return 0xff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(tapatune_state::write_index_to_68k)
|
|
||||||
{
|
|
||||||
m_z80_to_68k_index = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(tapatune_state::write_data_to_68k)
|
|
||||||
{
|
|
||||||
m_z80_to_68k_data = data;
|
|
||||||
//logerror("Writing data from Z80: index = %02x, data = %02x\n", m_z80_to_68k_index, m_z80_to_68k_data );
|
|
||||||
m_maincpu->set_input_line(3, ASSERT_LINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
READ8_MEMBER(tapatune_state::read_index_from_68k)
|
|
||||||
{
|
|
||||||
return m_68k_to_z80_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
READ8_MEMBER(tapatune_state::read_data_from_68k)
|
|
||||||
{
|
|
||||||
//if ( m_68k_to_z80_data != 0 )
|
|
||||||
// logerror("Load command from 68K: %02x %02x\n", m_68k_to_z80_index, m_68k_to_z80_data);
|
|
||||||
return m_68k_to_z80_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
READ8_MEMBER(tapatune_state::bsmt_status_r)
|
|
||||||
{
|
|
||||||
bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt");
|
|
||||||
return (bsmt->read_status() << 7) ^ 0x80;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(tapatune_state::bsmt_data_lo_w)
|
|
||||||
{
|
|
||||||
m_bsmt_data = (m_bsmt_data & 0xff00) | data;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(tapatune_state::bsmt_data_hi_w)
|
|
||||||
{
|
|
||||||
m_bsmt_data = (m_bsmt_data & 0x00ff) | (data << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(tapatune_state::bsmt_reg_w)
|
|
||||||
{
|
|
||||||
bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt");
|
|
||||||
|
|
||||||
|
|
||||||
//logerror("Writing BSMT reg: %02X data: %04X\n", data, m_bsmt_data);
|
|
||||||
bsmt->write_reg(data);
|
|
||||||
bsmt->write_data(m_bsmt_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tapatune_state )
|
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP
|
|
||||||
AM_RANGE(0xe000, 0xefff) AM_RAM
|
|
||||||
AM_RANGE(0xf000, 0xffff) AM_RAM
|
|
||||||
ADDRESS_MAP_END
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START ( sound_io_map, AS_IO, 8, tapatune_state )
|
|
||||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
|
||||||
AM_RANGE(0x00, 0x00) AM_WRITE(bsmt_data_lo_w)
|
|
||||||
AM_RANGE(0x08, 0x08) AM_WRITE(bsmt_data_hi_w)
|
|
||||||
AM_RANGE(0x10, 0x10) AM_WRITE(bsmt_reg_w)
|
|
||||||
AM_RANGE(0x18, 0x18) AM_WRITE(controls_mux)
|
|
||||||
AM_RANGE(0x20, 0x20) AM_READ(sound_irq_clear)
|
|
||||||
AM_RANGE(0x28, 0x28) AM_READ(bsmt_status_r)
|
|
||||||
AM_RANGE(0x30, 0x30) AM_READ(controls_r)
|
|
||||||
AM_RANGE(0x38, 0x38) AM_READ_PORT("COINS")
|
|
||||||
AM_RANGE(0x60, 0x60) AM_WRITE(write_index_to_68k)
|
|
||||||
AM_RANGE(0x61, 0x61) AM_WRITE(write_data_to_68k)
|
|
||||||
AM_RANGE(0x63, 0x63) AM_WRITENOP // leds? lamps?
|
|
||||||
AM_RANGE(0x68, 0x68) AM_READ(read_index_from_68k)
|
|
||||||
AM_RANGE(0x69, 0x69) AM_READ(read_data_from_68k)
|
|
||||||
AM_RANGE(0x6b, 0x6b) AM_READ_PORT("BUTTONS")
|
|
||||||
ADDRESS_MAP_END
|
|
||||||
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( tapatune )
|
|
||||||
PORT_START("DSW1")
|
|
||||||
PORT_DIPNAME( 0x01, 0x01, "Dispense" )
|
|
||||||
PORT_DIPSETTING( 0x01, "Tickets" )
|
|
||||||
PORT_DIPSETTING( 0x00, "Capsules" )
|
|
||||||
PORT_DIPNAME( 0x02, 0x02, "Award per" )
|
|
||||||
PORT_DIPSETTING( 0x02, "Game" )
|
|
||||||
PORT_DIPSETTING( 0x00, "Tune" )
|
|
||||||
PORT_DIPNAME( 0x1c, 0x1c, "Tickets per game/tune" )
|
|
||||||
PORT_DIPSETTING( 0x1c, "Disabled" )
|
|
||||||
PORT_DIPSETTING( 0x18, "1" )
|
|
||||||
PORT_DIPSETTING( 0x14, "2" )
|
|
||||||
PORT_DIPSETTING( 0x10, "3" )
|
|
||||||
PORT_DIPSETTING( 0x0c, "4" )
|
|
||||||
PORT_DIPSETTING( 0x08, "5" )
|
|
||||||
PORT_DIPSETTING( 0x04, "6" )
|
|
||||||
PORT_DIPSETTING( 0x00, "7" )
|
|
||||||
PORT_DIPNAME( 0x60, 0x60, "Tune bonus tickets" )
|
|
||||||
PORT_DIPSETTING( 0x60, "Disabled" )
|
|
||||||
PORT_DIPSETTING( 0x40, "1" )
|
|
||||||
PORT_DIPSETTING( 0x20, "3" )
|
|
||||||
PORT_DIPSETTING( 0x00, "5" )
|
|
||||||
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
|
|
||||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
|
||||||
|
|
||||||
PORT_START("DSW2")
|
|
||||||
PORT_DIPUNKNOWN( 0x01, 0x01 )
|
|
||||||
PORT_DIPUNKNOWN( 0x02, 0x02 )
|
|
||||||
PORT_DIPUNKNOWN( 0x04, 0x04 )
|
|
||||||
PORT_DIPUNKNOWN( 0x08, 0x08 )
|
|
||||||
PORT_DIPUNKNOWN( 0x10, 0x10 )
|
|
||||||
PORT_DIPUNKNOWN( 0x20, 0x20 )
|
|
||||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
|
|
||||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
|
||||||
PORT_DIPUNKNOWN( 0x80, 0x80 )
|
|
||||||
|
|
||||||
|
|
||||||
PORT_START("IN0")
|
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("SW2") PORT_CODE(KEYCODE_Q)
|
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("SW3") PORT_CODE(KEYCODE_W)
|
|
||||||
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
|
|
||||||
PORT_START("COINS")
|
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1)
|
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("ticket", ticket_dispenser_device, line_r)
|
|
||||||
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
|
|
||||||
|
|
||||||
PORT_START("BUTTONS")
|
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) // pink
|
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) // purple
|
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) // blue
|
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) // d. green
|
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) // l. green
|
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) // yellow
|
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) // orange
|
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) // red
|
|
||||||
|
|
||||||
INPUT_PORTS_END
|
|
||||||
|
|
||||||
const pen_t* get_pens(tapatune_state *state)
|
const pen_t* get_pens(tapatune_state *state)
|
||||||
{
|
{
|
||||||
offs_t i;
|
for (UINT32 i = 0; i < 0x100; i++)
|
||||||
|
|
||||||
for (i = 0; i < 0x100; i++)
|
|
||||||
{
|
{
|
||||||
int r, g, b;
|
int r = state->m_paletteram[3 * i + 0];
|
||||||
|
int g = state->m_paletteram[3 * i + 1];
|
||||||
r = state->m_paletteram[3 * i + 0];
|
int b = state->m_paletteram[3 * i + 2];
|
||||||
g = state->m_paletteram[3 * i + 1];
|
|
||||||
b = state->m_paletteram[3 * i + 2];
|
|
||||||
|
|
||||||
r = pal6bit(r);
|
r = pal6bit(r);
|
||||||
g = pal6bit(g);
|
g = pal6bit(g);
|
||||||
@ -326,27 +158,28 @@ const pen_t* get_pens(tapatune_state *state)
|
|||||||
return state->m_pens;
|
return state->m_pens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MC6845_BEGIN_UPDATE( begin_update )
|
static MC6845_BEGIN_UPDATE( begin_update )
|
||||||
{
|
{
|
||||||
tapatune_state *state = device->machine().driver_data<tapatune_state>();
|
tapatune_state *state = device->machine().driver_data<tapatune_state>();
|
||||||
/* create the pens */
|
|
||||||
|
// Create the pens
|
||||||
get_pens(state);
|
get_pens(state);
|
||||||
|
|
||||||
return state->m_pens;
|
return state->m_pens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MC6845_UPDATE_ROW( update_row )
|
static MC6845_UPDATE_ROW( update_row )
|
||||||
{
|
{
|
||||||
tapatune_state *state = device->machine().driver_data<tapatune_state>();
|
tapatune_state *state = device->machine().driver_data<tapatune_state>();
|
||||||
UINT32 *dest = &bitmap.pix32(y);
|
UINT32 *dest = &bitmap.pix32(y);
|
||||||
UINT16 x;
|
|
||||||
|
|
||||||
pen_t *pens = (pen_t *)param;
|
pen_t *pens = (pen_t *)param;
|
||||||
|
|
||||||
offs_t offs = (ma*2 + ra*0x40)*4;
|
offs_t offs = (ma*2 + ra*0x40)*4;
|
||||||
|
|
||||||
UINT8 *videoram = reinterpret_cast<UINT8 *>(state->m_videoram.target());
|
UINT8 *videoram = reinterpret_cast<UINT8 *>(state->m_videoram.target());
|
||||||
for (x = 0; x < x_count*4; x++)
|
|
||||||
|
for (UINT32 x = 0; x < x_count*4; x++)
|
||||||
{
|
{
|
||||||
UINT8 pix = videoram[BYTE_XOR_BE(offs + x)];
|
UINT8 pix = videoram[BYTE_XOR_BE(offs + x)];
|
||||||
dest[2*x] = pens[((pix >> 4) & 0x0f)];
|
dest[2*x] = pens[((pix >> 4) & 0x0f)];
|
||||||
@ -354,15 +187,330 @@ static MC6845_UPDATE_ROW( update_row )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tapatune_state::video_start()
|
|
||||||
|
WRITE16_MEMBER(tapatune_state::palette_w)
|
||||||
{
|
{
|
||||||
|
//logerror("Palette write: offset = %02x, data = %04x, mask = %04x\n", offset, data, mem_mask );
|
||||||
|
switch(offset)
|
||||||
|
{
|
||||||
|
case 0: // address register
|
||||||
|
m_palette_write_addr = ((data >> 8) & 0xff) * 3;
|
||||||
|
break;
|
||||||
|
case 1: // palette data
|
||||||
|
m_paletteram[m_palette_write_addr++] = (data >> 8) & 0xff;
|
||||||
|
break;
|
||||||
|
case 2: // unknown?
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(tapatune_state::crtc_vsync)
|
WRITE_LINE_MEMBER(tapatune_state::crtc_vsync)
|
||||||
{
|
{
|
||||||
m_maincpu->set_input_line(2, state ? ASSERT_LINE : CLEAR_LINE);
|
m_maincpu->set_input_line(2, state ? HOLD_LINE : CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* 68000 <-> Z80 comms
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
READ16_MEMBER(tapatune_state::read_from_z80)
|
||||||
|
{
|
||||||
|
m_z80_data_available = 0;
|
||||||
|
return ((UINT16)m_z80_to_68k_data << 8) | (m_z80_to_68k_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE16_MEMBER(tapatune_state::write_to_z80)
|
||||||
|
{
|
||||||
|
m_68k_to_z80_index = data & 0xff;
|
||||||
|
m_68k_to_z80_data = (data >> 8) & 0xff;
|
||||||
|
|
||||||
|
if (m_68k_data_available)
|
||||||
|
{
|
||||||
|
fatalerror("68000 overwrote old Z80 data");
|
||||||
|
}
|
||||||
|
m_68k_data_available = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Z80 <-> 68000 comms
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tapatune_state::write_index_to_68k)
|
||||||
|
{
|
||||||
|
m_z80_to_68k_index = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tapatune_state::write_data_to_68k)
|
||||||
|
{
|
||||||
|
m_z80_to_68k_data = data;
|
||||||
|
m_z80_data_available = 1;
|
||||||
|
m_maincpu->set_input_line(1, HOLD_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
READ8_MEMBER(tapatune_state::read_index_from_68k)
|
||||||
|
{
|
||||||
|
return m_68k_to_z80_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
READ8_MEMBER(tapatune_state::read_data_from_68k)
|
||||||
|
{
|
||||||
|
m_68k_data_available = 0;
|
||||||
|
|
||||||
|
return m_68k_to_z80_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Memory maps
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
static ADDRESS_MAP_START( tapatune_map, AS_PROGRAM, 16, tapatune_state )
|
||||||
|
AM_RANGE(0x000000, 0x2fffff) AM_ROM
|
||||||
|
AM_RANGE(0x300000, 0x31ffff) AM_RAM AM_SHARE("videoram")
|
||||||
|
AM_RANGE(0x320000, 0x33ffff) AM_RAM
|
||||||
|
AM_RANGE(0x400000, 0x400003) AM_READWRITE(read_from_z80, write_to_z80)
|
||||||
|
AM_RANGE(0x400010, 0x400011) AM_NOP // Watchdog?
|
||||||
|
AM_RANGE(0x600000, 0x600005) AM_WRITE(palette_w)
|
||||||
|
AM_RANGE(0x800000, 0x800001) AM_DEVWRITE8("crtc", mc6845_device, address_w, 0xff00)
|
||||||
|
AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
|
||||||
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tapatune_state )
|
||||||
|
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP
|
||||||
|
AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("nvram")
|
||||||
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
static ADDRESS_MAP_START ( sound_io_map, AS_IO, 8, tapatune_state )
|
||||||
|
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||||
|
AM_RANGE(0x00, 0x00) AM_WRITE(bsmt_data_lo_w)
|
||||||
|
AM_RANGE(0x08, 0x08) AM_WRITE(bsmt_data_hi_w)
|
||||||
|
AM_RANGE(0x10, 0x10) AM_WRITE(bsmt_reg_w)
|
||||||
|
AM_RANGE(0x18, 0x18) AM_WRITE(controls_mux)
|
||||||
|
AM_RANGE(0x20, 0x20) AM_READ(sound_irq_clear)
|
||||||
|
AM_RANGE(0x28, 0x28) AM_READ(status_r)
|
||||||
|
AM_RANGE(0x30, 0x30) AM_READ(controls_r)
|
||||||
|
AM_RANGE(0x38, 0x38) AM_READ_PORT("COINS")
|
||||||
|
AM_RANGE(0x60, 0x60) AM_WRITE(write_index_to_68k)
|
||||||
|
AM_RANGE(0x61, 0x61) AM_WRITE(write_data_to_68k)
|
||||||
|
AM_RANGE(0x63, 0x63) AM_WRITE(lamps_w)
|
||||||
|
AM_RANGE(0x68, 0x68) AM_READ(read_index_from_68k)
|
||||||
|
AM_RANGE(0x69, 0x69) AM_READ(read_data_from_68k)
|
||||||
|
AM_RANGE(0x6b, 0x6b) AM_READ(special_r)
|
||||||
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* I/O
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
READ8_MEMBER(tapatune_state::sound_irq_clear)
|
||||||
|
{
|
||||||
|
m_soundcpu->set_input_line(0, CLEAR_LINE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tapatune_state::controls_mux)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Input multiplexer select and outputs:
|
||||||
|
|
||||||
|
76543210
|
||||||
|
.......x Mux A
|
||||||
|
......x. Mux B (/Red LED)
|
||||||
|
.....x.. Mux C (/Yellow LED)
|
||||||
|
....x... Mux D (/Green LED)
|
||||||
|
...x.... DOUT1 - High current driver 0
|
||||||
|
..x..... DOUT2 - High current driver 1
|
||||||
|
.x...... DOUT3 - High current driver 2
|
||||||
|
x....... DOUT4 - Ticket dispenser
|
||||||
|
*/
|
||||||
|
|
||||||
|
m_controls_mux = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
READ8_MEMBER(tapatune_state::controls_r)
|
||||||
|
{
|
||||||
|
switch (m_controls_mux & 0xf)
|
||||||
|
{
|
||||||
|
case 0x07: return ioport("SW4")->read();
|
||||||
|
case 0x08: return ioport("SW5")->read();
|
||||||
|
case 0x09: return ioport("IN0")->read();
|
||||||
|
default:
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
READ8_MEMBER(tapatune_state::special_r)
|
||||||
|
{
|
||||||
|
// Not sure if this is actually correct
|
||||||
|
if (m_z80_data_available)
|
||||||
|
return m_68k_data_available ? 0x80 : 0;
|
||||||
|
else
|
||||||
|
return ioport("BUTTONS")->read();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tapatune_state::lamps_w)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Button Lamps:
|
||||||
|
|
||||||
|
7654 3210
|
||||||
|
.... ...x Pink
|
||||||
|
.... ..x. Purple
|
||||||
|
.... .x.. Blue
|
||||||
|
.... x... Dark Green
|
||||||
|
...x .... Light Green
|
||||||
|
..x. .... Yellow
|
||||||
|
.x.. .... Orange
|
||||||
|
x... .... Red
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* BSMT communications
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
READ8_MEMBER(tapatune_state::status_r)
|
||||||
|
{
|
||||||
|
return !m_bsmt->read_status() << 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tapatune_state::bsmt_data_lo_w)
|
||||||
|
{
|
||||||
|
m_bsmt_data_l = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tapatune_state::bsmt_data_hi_w)
|
||||||
|
{
|
||||||
|
m_bsmt_data_h = data;
|
||||||
|
|
||||||
|
if (m_bsmt_reset)
|
||||||
|
{
|
||||||
|
m_bsmt->reset();
|
||||||
|
m_bsmt_reset = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tapatune_state::bsmt_reg_w)
|
||||||
|
{
|
||||||
|
m_bsmt->write_reg(data);
|
||||||
|
m_bsmt->write_data((m_bsmt_data_h << 8) | m_bsmt_data_l);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Input definitions
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( tapatune )
|
||||||
|
PORT_START("SW4")
|
||||||
|
PORT_DIPNAME( 0x01, 0x01, "Dispense" ) PORT_DIPLOCATION("SW4:1")
|
||||||
|
PORT_DIPSETTING( 0x01, "Tickets" )
|
||||||
|
PORT_DIPSETTING( 0x00, "Capsules" )
|
||||||
|
PORT_DIPNAME( 0x02, 0x02, "Award per" ) PORT_DIPLOCATION("SW4:2")
|
||||||
|
PORT_DIPSETTING( 0x02, "Game" )
|
||||||
|
PORT_DIPSETTING( 0x00, "Tune" )
|
||||||
|
PORT_DIPNAME( 0x1c, 0x1c, "Tickets/capsules per game/tune" ) PORT_DIPLOCATION("SW4:3,4,5")
|
||||||
|
PORT_DIPSETTING( 0x1c, "Disabled" )
|
||||||
|
PORT_DIPSETTING( 0x18, "1" )
|
||||||
|
PORT_DIPSETTING( 0x14, "2" )
|
||||||
|
PORT_DIPSETTING( 0x10, "3" )
|
||||||
|
PORT_DIPSETTING( 0x0c, "4" )
|
||||||
|
PORT_DIPSETTING( 0x08, "5" )
|
||||||
|
PORT_DIPSETTING( 0x04, "6" )
|
||||||
|
PORT_DIPSETTING( 0x00, "7" )
|
||||||
|
PORT_DIPNAME( 0x60, 0x60, "Tune bonus tickets/capsules" ) PORT_DIPLOCATION("SW4:6,7")
|
||||||
|
PORT_DIPSETTING( 0x60, "Disabled" )
|
||||||
|
PORT_DIPSETTING( 0x40, "1" )
|
||||||
|
PORT_DIPSETTING( 0x20, "3" )
|
||||||
|
PORT_DIPSETTING( 0x00, "5" )
|
||||||
|
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW4:8")
|
||||||
|
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
|
||||||
|
PORT_START("SW5")
|
||||||
|
PORT_DIPNAME( 0x07, 0x03, "Tune Timer" ) PORT_DIPLOCATION("SW5:1,2,3")
|
||||||
|
PORT_DIPSETTING( 0x07, "5 secs" )
|
||||||
|
PORT_DIPSETTING( 0x06, "10 secs" )
|
||||||
|
PORT_DIPSETTING( 0x05, "15 secs" )
|
||||||
|
PORT_DIPSETTING( 0x04, "20 secs" )
|
||||||
|
PORT_DIPSETTING( 0x03, "25 secs" )
|
||||||
|
PORT_DIPSETTING( 0x02, "30 secs" )
|
||||||
|
PORT_DIPSETTING( 0x01, "35 secs" )
|
||||||
|
PORT_DIPSETTING( 0x00, "40 secs" )
|
||||||
|
PORT_DIPNAME( 0x18, 0x10, "Bad note penalty" ) PORT_DIPLOCATION("SW5:4,5")
|
||||||
|
PORT_DIPSETTING( 0x18, "0 secs" )
|
||||||
|
PORT_DIPSETTING( 0x10, "1 secs" )
|
||||||
|
PORT_DIPSETTING( 0x08, "5 secs" )
|
||||||
|
PORT_DIPSETTING( 0x00, "10 secs" )
|
||||||
|
PORT_DIPNAME( 0x20, 0x20, "Coins per game" ) PORT_DIPLOCATION("SW5:6")
|
||||||
|
PORT_DIPSETTING( 0x20, "1" )
|
||||||
|
PORT_DIPSETTING( 0x00, "2" )
|
||||||
|
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW5:7")
|
||||||
|
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x80, 0x80, "Burn in Mode" ) PORT_DIPLOCATION("SW5:8")
|
||||||
|
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
|
||||||
|
PORT_START("IN0")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Advance (SW3)") PORT_CODE(KEYCODE_F1)
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service (SW2)")
|
||||||
|
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
|
|
||||||
|
PORT_START("COINS")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("ticket", ticket_dispenser_device, line_r)
|
||||||
|
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
|
|
||||||
|
PORT_START("BUTTONS")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Pink")
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Purple")
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Blue")
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Dark Green")
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Light Green")
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Yellow")
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Orange")
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("Red")
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* 6845 interface
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
static MC6845_INTERFACE( h46505_intf )
|
static MC6845_INTERFACE( h46505_intf )
|
||||||
{
|
{
|
||||||
false, /* show border area */
|
false, /* show border area */
|
||||||
@ -378,31 +526,33 @@ static MC6845_INTERFACE( h46505_intf )
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( tapatune, tapatune_state )
|
/*************************************
|
||||||
|
*
|
||||||
|
* Machine driver
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
MCFG_CPU_ADD("maincpu", M68000, 24000000/2 )
|
static MACHINE_CONFIG_START( tapatune, tapatune_state )
|
||||||
|
/* basic machine hardware */
|
||||||
|
MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz / 2)
|
||||||
MCFG_CPU_PROGRAM_MAP(tapatune_map)
|
MCFG_CPU_PROGRAM_MAP(tapatune_map)
|
||||||
|
|
||||||
MCFG_CPU_ADD("soundcpu", Z80, 24000000/6 )
|
MCFG_CPU_ADD("soundcpu", Z80, XTAL_24MHz / 4)
|
||||||
MCFG_CPU_PROGRAM_MAP(sound_map)
|
MCFG_CPU_PROGRAM_MAP(sound_map)
|
||||||
MCFG_CPU_IO_MAP(sound_io_map)
|
MCFG_CPU_IO_MAP(sound_io_map)
|
||||||
MCFG_CPU_PERIODIC_INT_DRIVER(tapatune_state, irq0_line_assert, 183)
|
MCFG_CPU_PERIODIC_INT_DRIVER(tapatune_state, irq0_line_assert, XTAL_24MHz / 4 / 4 / 4096)
|
||||||
|
|
||||||
|
MCFG_QUANTUM_PERFECT_CPU("maincpu")
|
||||||
|
|
||||||
|
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||||
|
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_24MHz / 16, h46505_intf)
|
||||||
|
MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_REFRESH_RATE(60)
|
MCFG_SCREEN_RAW_PARAMS(XTAL_24MHz / 16 * 5, 500, 0, 320, 250, 0, 240)
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
|
||||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
|
||||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
|
||||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", h46505_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE("crtc", h46505_device, screen_update)
|
||||||
|
|
||||||
MCFG_PALETTE_LENGTH(16)
|
|
||||||
|
|
||||||
|
|
||||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 24000000/16, h46505_intf) /* H46505 */
|
|
||||||
|
|
||||||
MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW)
|
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||||
|
|
||||||
@ -411,6 +561,13 @@ static MACHINE_CONFIG_START( tapatune, tapatune_state )
|
|||||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* ROM definition(s)
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
ROM_START( tapatune )
|
ROM_START( tapatune )
|
||||||
ROM_REGION( 0x300000, "maincpu", 0 )
|
ROM_REGION( 0x300000, "maincpu", 0 )
|
||||||
ROM_LOAD16_BYTE("rom1.u12", 0x000000, 0x80000, CRC(1d3ed3f9) SHA1(a42997dffcd4a3e83a5cec75d5bb0c295bd18a8d) )
|
ROM_LOAD16_BYTE("rom1.u12", 0x000000, 0x80000, CRC(1d3ed3f9) SHA1(a42997dffcd4a3e83a5cec75d5bb0c295bd18a8d) )
|
||||||
@ -424,7 +581,18 @@ ROM_START(tapatune)
|
|||||||
ROM_LOAD( "rom.u8", 0x0000, 0x10000, CRC(f5c571d7) SHA1(cb5ef3b2bce9a579b54678962082d0e2fc0f1cd9) )
|
ROM_LOAD( "rom.u8", 0x0000, 0x10000, CRC(f5c571d7) SHA1(cb5ef3b2bce9a579b54678962082d0e2fc0f1cd9) )
|
||||||
|
|
||||||
ROM_REGION( 0x1000000, "bsmt", 0 )
|
ROM_REGION( 0x1000000, "bsmt", 0 )
|
||||||
ROM_LOAD( "arom1.u16", 0x000000, 0x80000, CRC(e51696bc) SHA1(b002f8705ad1877f91a860dddb0ae16b2e73dd15) )
|
ROM_LOAD( "arom1.u16", 0x000000, 0x20000, CRC(e51696bc) SHA1(b002f8705ad1877f91a860dddb0ae16b2e73dd15) )
|
||||||
|
ROM_CONTINUE( 0x040000, 0x20000 )
|
||||||
|
ROM_CONTINUE( 0x080000, 0x20000 )
|
||||||
|
ROM_CONTINUE( 0x0c0000, 0x20000 )
|
||||||
|
// U21 is not populated
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
GAME(1994, tapatune, 0, tapatune, tapatune, driver_device, 0, ROT0, "Creative Electronics And Software", "Tap-a-Tune", GAME_NOT_WORKING | GAME_NO_SOUND )
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Game driver(s)
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
GAME(1994, tapatune, 0, tapatune, tapatune, driver_device, 0, ROT0, "Moloney Manufacturing Inc. / Creative Electronics and Software", "Tap a Tune", 0 )
|
||||||
|
Loading…
Reference in New Issue
Block a user