Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/mame/mame.lst
Original file line number Diff line number Diff line change
Expand Up @@ -47128,6 +47128,7 @@ rad_tetr
sudelan
sudelan3
sudoku2p
vjstarzd

@source:tvgames/elan_eu3a14.cpp
batvgc
Expand Down
17 changes: 7 additions & 10 deletions src/mame/tvgames/elan_ep3a19a.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ void elan_ep3a19a_state::elan_ep3a19a(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &elan_ep3a19a_state::elan_ep3a19a_map);
m_maincpu->set_vblank_int("screen", FUNC(elan_ep3a19a_state::interrupt));

ADDRESS_MAP_BANK(config, "bank").set_map(&elan_ep3a19a_state::elan_ep3a19a_bank_map).set_options(ENDIANNESS_LITTLE, 8, 24, 0x8000);
ADDRESS_MAP_BANK(config, m_bank).set_map(&elan_ep3a19a_state::elan_ep3a19a_bank_map).set_options(ENDIANNESS_LITTLE, 8, 24, 0x8000);

PALETTE(config, m_palette).set_entries(256);

Expand All @@ -272,17 +272,14 @@ void elan_ep3a19a_state::elan_ep3a19a(machine_config &config)
m_gpio->read_2_callback().set_ioport("IN2");

ELAN_EP3A19A_SYS(config, m_sys, 0);
m_sys->set_cpu("maincpu");
m_sys->set_addrbank("bank");
m_sys->set_cpu(m_maincpu);
m_sys->set_addrbank(m_bank);

ELAN_EU3A05_VID(config, m_vid, 0);
m_vid->set_cpu("maincpu");
m_vid->set_addrbank("bank");
m_vid->set_palette("palette");
ELAN_EP3A19A_VID(config, m_vid, 0);
m_vid->set_cpu(m_maincpu);
m_vid->set_addrbank(m_bank);
m_vid->set_palette(m_palette);
m_vid->set_entries(256);
m_vid->set_is_pvmilfin();
m_vid->set_use_spritepages();
m_vid->set_force_basic_scroll();

/* sound hardware */
SPEAKER(config, "mono").front_center();
Expand Down
63 changes: 51 additions & 12 deletions src/mame/tvgames/elan_eu3a05.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,30 @@ static INPUT_PORTS_START( rad_tetr )

INPUT_PORTS_END

static INPUT_PORTS_START( vjstarzd )
// star shaped dance pad, with 5 points and a start/select button on each pad
// can't easily be mapped to directions, so just using buttons
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Right / Green") // moves right in menu
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Top / Red")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Bottom Right / Pink")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 Bottom Left / Yellow")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 Left / Blue") // moves left in menu
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) // connected to both start inputs?
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // makes a sound, but is not connected?
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SELECT ) // connected to both select inputs?

PORT_START("IN1") // these don't make a sound in menu, but do in game
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Right / Green")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Top / Red")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Bottom Right / Pink")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 Bottom Left / Yellow")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("P2 Left / Blue")
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )

PORT_START("IN2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END

static INPUT_PORTS_START( airblsjs )
PORT_START("IN0")
Expand Down Expand Up @@ -809,7 +833,7 @@ void elan_eu3a05_state::elan_eu3a05(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &elan_eu3a05_state::elan_eu3a05_map);
m_maincpu->set_vblank_int("screen", FUNC(elan_eu3a05_state::interrupt));

ADDRESS_MAP_BANK(config, "bank").set_map(&elan_eu3a05_state::elan_eu3a05_bank_map).set_options(ENDIANNESS_LITTLE, 8, 24, 0x8000);
ADDRESS_MAP_BANK(config, m_bank).set_map(&elan_eu3a05_state::elan_eu3a05_bank_map).set_options(ENDIANNESS_LITTLE, 8, 24, 0x8000);

PALETTE(config, m_palette).set_entries(256);

Expand All @@ -829,13 +853,13 @@ void elan_eu3a05_state::elan_eu3a05(machine_config &config)
m_gpio->read_2_callback().set_ioport("IN2");

ELAN_EU3A05_SYS(config, m_sys, 0);
m_sys->set_cpu("maincpu");
m_sys->set_addrbank("bank");
m_sys->set_cpu(m_maincpu);
m_sys->set_addrbank(m_bank);

ELAN_EU3A05_VID(config, m_vid, 0);
m_vid->set_cpu("maincpu");
m_vid->set_addrbank("bank");
m_vid->set_palette("palette");
m_vid->set_cpu(m_maincpu);
m_vid->set_addrbank(m_bank);
m_vid->set_palette(m_palette);
m_vid->set_entries(256);

/* sound hardware */
Expand Down Expand Up @@ -866,8 +890,16 @@ void elan_eu3a13_state::elan_eu3a13(machine_config& config)
{
elan_eu3a05(config);
m_maincpu->set_addrmap(AS_PROGRAM, &elan_eu3a13_state::elan_eu3a13_map);
m_vid->set_is_sudoku();
m_vid->set_use_spritepages();

ELAN_EU3A13_VID(config.replace(), m_vid, 0);
m_vid->set_cpu(m_maincpu);
m_vid->set_addrbank(m_bank);
m_vid->set_palette(m_palette);
m_vid->set_entries(256);

ELAN_EU3A13_SYS(config.replace(), m_sys, 0);
m_sys->set_cpu(m_maincpu);
m_sys->set_addrbank(m_bank);
m_sys->set_alt_timer(); // for Carl Edwards'
}

Expand All @@ -880,12 +912,9 @@ void elan_eu3a13_state::elan_eu3a13_pal(machine_config& config)

void elan_eu3a13_state::elan_eu3a13_pvmil8(machine_config& config)
{
elan_eu3a05(config);
elan_eu3a13_pal(config);
m_maincpu->set_addrmap(AS_PROGRAM, &elan_eu3a13_state::elan_eu3a13_map);
m_vid->set_is_pvmilfin();
m_sys->set_alt_timer();
m_sys->set_pal(); // TODO: also set PAL clocks
m_screen->set_refresh_hz(50);
}


Expand Down Expand Up @@ -967,6 +996,12 @@ ROM_START( sudelan3 )
ROM_RELOAD(0x300000,0x100000)
ROM_END

ROM_START( vjstarzd )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "ep1206a.u2", 0x00000, 0x80000, CRC(e5f39fa5) SHA1(5ac45bde6f4323998f2387cb62e1841ebe60e781) )
ROM_RELOAD(0x380000,0x80000) // for boot vectors
ROM_END

ROM_START( sudelan )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "klaussudoku.bin", 0x00000, 0x200000, CRC(afd2b06a) SHA1(21db956fb40b2e3d61fc2bac89000cf7f61fe99e) )
Expand Down Expand Up @@ -1066,6 +1101,10 @@ CONS( 2004, rad_sinv, 0, 0, elan_eu3a05, rad_sinv, elan_eu3a05_state, empty_init

CONS( 2004, rad_tetr, 0, 0, elan_eu3a05, rad_tetr, elan_eu3a05_state, empty_init, "Radica (licensed from Elorg / The Tetris Company)", "Tetris (Radica, Arcade Legends TV Game)", MACHINE_NOT_WORKING ) // "5 Tetris games in 1"

// it isn't clear if the ELAN is generating the music on this, or if one of the other globs is an audio MCU
// VJ Starz Dance Mat on box, VJ Starz Dancing Mat on screen
CONS( 2003, vjstarzd, 0, 0, elan_eu3a05, vjstarzd, elan_eu3a05_state, empty_init, "Kidz Biz / Jakks Pacific", "VJ Starz Dance Mat", MACHINE_NOT_WORKING )

// ROM contains the string "Credit:XiAn Hummer Software Studio(CHINA) Tel:86-29-84270600 Email:[email protected]" PCB has datecode of "050423" (23rd April 2005)
CONS( 2005, airblsjs, 0, 0, elan_eu3a05_pal, airblsjs, elan_eu3a05_state, empty_init, "Advance Bright Ltd", "Air-Blaster Joystick (AB1500, PAL)", MACHINE_NOT_WORKING )

Expand Down
13 changes: 11 additions & 2 deletions src/mame/tvgames/elan_eu3a05commonsys.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ elan_eu3a05commonsys_device::elan_eu3a05commonsys_device(const machine_config &m
m_bank(*this, finder_base::DUMMY_TAG),
m_is_pal(false),
m_allow_timer_irq(true),
m_bank_on_low_bank_writes(false),
m_whichtimer(0)
{
}
Expand Down Expand Up @@ -355,15 +356,23 @@ void elan_eu3a05commonsys_device::elan_eu3a05_rombank_w(offs_t offset, uint8_t d
{
//logerror("%s: elan_eu3a05_rombank_hi_w (set ROM bank) %02x\n", machine().describe_context(), data);
m_rombank_hi = data;

m_bank->set_bank(m_rombank_lo | (m_rombank_hi << 8));
}
else
{
//logerror("%s: elan_eu3a05_rombank_lo_w (select ROM bank) %02x\n", machine().describe_context(), data);
m_rombank_lo = data;

if (m_bank_on_low_bank_writes)
{
// rad_ftet writes only the low and expects bank to change
// however qix in rad_sinv disagrees. could this be an
// eu3a05 / eu3a13 difference?
m_bank->set_bank(m_rombank_lo | (m_rombank_hi << 8));
}
}

// rad_ftet writes only the low and expects bank to change
m_bank->set_bank(m_rombank_lo | (m_rombank_hi << 8));
}

uint8_t elan_eu3a05commonsys_device::elan_eu3a05_rombank_r(offs_t offset)
Expand Down
2 changes: 1 addition & 1 deletion src/mame/tvgames/elan_eu3a05commonsys.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ class elan_eu3a05commonsys_device : public device_t
uint8_t irq_vector_r(offs_t offset);

void set_alt_timer() { m_whichtimer = 1; }

protected:
// device-level overrides
virtual void device_start() override ATTR_COLD;
Expand All @@ -49,6 +48,7 @@ class elan_eu3a05commonsys_device : public device_t

bool m_is_pal; // this is usually a jumper connected to the chip that the software can read (clocks also differ on PAL units)
bool m_allow_timer_irq;
bool m_bank_on_low_bank_writes;
private:
uint8_t intmask_r(offs_t offset);
void intmask_w(offs_t offset, uint8_t data);
Expand Down
18 changes: 16 additions & 2 deletions src/mame/tvgames/elan_eu3a05sys.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,28 @@
// DMA size and destination are 16-bit here, they're 24-bit on EU3A14

DEFINE_DEVICE_TYPE(ELAN_EU3A05_SYS, elan_eu3a05sys_device, "elan_eu3a05sys", "Elan EU3A05 System")
DEFINE_DEVICE_TYPE(ELAN_EU3A13_SYS, elan_eu3a13sys_device, "elan_eu3a13sys", "Elan EU3A13 System")

elan_eu3a05sys_device::elan_eu3a05sys_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
elan_eu3a05commonsys_device(mconfig, ELAN_EU3A05_SYS, tag, owner, clock),
elan_eu3a05sys_device::elan_eu3a05sys_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
elan_eu3a05commonsys_device(mconfig, type, tag, owner, clock),
device_memory_interface(mconfig, *this),
m_space_config("regs", ENDIANNESS_NATIVE, 8, 5, 0, address_map_constructor(FUNC(elan_eu3a05sys_device::map), this))
{
}

elan_eu3a05sys_device::elan_eu3a05sys_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
elan_eu3a05sys_device(mconfig, ELAN_EU3A05_SYS, tag, owner, clock)
{
}

elan_eu3a13sys_device::elan_eu3a13sys_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
elan_eu3a05sys_device(mconfig, ELAN_EU3A13_SYS, tag, owner, clock)
{
// might be a difference on this hardware type, as rad_ftet (EU3A13) needs it, but rad_sinv (EU3A05) does not
m_bank_on_low_bank_writes = true;
}


device_memory_interface::space_config_vector elan_eu3a05sys_device::memory_space_config() const
{
return space_config_vector {
Expand Down
10 changes: 10 additions & 0 deletions src/mame/tvgames/elan_eu3a05sys.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class elan_eu3a05sys_device : public elan_eu3a05commonsys_device, public device_
virtual void map(address_map &map) override ATTR_COLD;

protected:
elan_eu3a05sys_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

// device-level overrides
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
Expand All @@ -30,6 +32,14 @@ class elan_eu3a05sys_device : public elan_eu3a05commonsys_device, public device_
uint8_t m_dmaparams[7];
};


class elan_eu3a13sys_device : public elan_eu3a05sys_device
{
public:
elan_eu3a13sys_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};

DECLARE_DEVICE_TYPE(ELAN_EU3A05_SYS, elan_eu3a05sys_device)
DECLARE_DEVICE_TYPE(ELAN_EU3A13_SYS, elan_eu3a13sys_device)

#endif // MAME_TVGAMES_ELAN_EU3A05SYS_H
Loading
Loading