Xavix - basic timer, move ekara carts to a Softlist (#4227)

* change how colours scale a bit (nw)

* basic timer stuff (fixed frequency for now)

* ekara now uses a Software List

* (nw)
This commit is contained in:
David Haywood 2018-11-02 01:15:06 +00:00 committed by R. Belmont
parent 89ac45ebbe
commit cfb1fbd0be
6 changed files with 187 additions and 40 deletions

73
hash/ekara.xml Normal file
View File

@ -0,0 +1,73 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="ekara" description="Takara e-kara cartridges">
<!-- cartridges contain the ROM only, the XaviX CPU and BIOS are in the base unit -->
<!-- Each region has it's own set of cartridges (at least US, UK/EU and Japan)
The Japanese ones appear to have a number of different genres each with their own numbering -->
<!--
1. "Stronger" Britney Spears
2. "Bye Bye Bye" *N Sync
3. "Independent Woman Part 1" Destiny's Child
4. "I Want It That Way" Backstreet Boys
5. "Yellow Submarine" The Beatles
-->
<software name="us_strt">
<description>e-kara US 5-Songs Starter (US-M001)</description>
<year>2000</year>
<publisher>Takara</publisher>
<part name="cart" interface="ekara_cart">
<dataarea name="rom" size="0x080000">
<rom name="ekara_starter.bin" size="0x080000" crc="8c12c0c2" sha1="8cc1b098894af25a4bfccada884125b66f5fe8b2" offset="0" />
</dataarea>
</part>
</software>
<!--
1. "Oops!...I Did It Again" Britney Spears
2. "...Baby One More Time" Britney Spears
3. "Bye Bye Bye" *N Sync
4. "It's Gonna Be Me" *N Sync
5. "Take On Me" a1
6. "Aaron's Party (Come Get It)" Aaron Carter
7. "If Only" Hanson
8. "He Loves U Not" Dream
9. "The First Night" Monica
10. "I Need You" LeAnn Rimes
-->
<software name="us_vol1">
<description>e-kara US Volume 1 (US-E001)</description>
<year>2000</year>
<publisher>Takara</publisher>
<part name="cart" interface="ekara_cart">
<dataarea name="rom" size="0x100000">
<rom name="ekaravol1.bin" size="0x100000" crc="29df4aea" sha1="b95835aaf8630b61b47e5da0968cd4a1dd3bc517" offset="0" />
</dataarea>
</part>
</software>
<!--
1. "Larger Than Life" Backstreet Boys
2. "I'll Be There For You" Backstreet Boys
3. "My Everything" 98 Degrees
4. "Dizzy" 98 Degrees
5. "Independent Woman Part 1" Destiny's Child
6. "Waiting For Tonight" Jennifer Lopez
7. "Let Me Let Go" Faith Hill
8. "There's Your Trouble" Dixie Chicks
9. "5678" Steps
10. "Stomp" Steps
-->
<software name="us_vol2">
<description>e-kara US Volume 2 (US-E002)</description>
<year>2000</year>
<publisher>Takara</publisher>
<part name="cart" interface="ekara_cart">
<dataarea name="rom" size="0x100000">
<rom name="ekaravol2.bin" size="0x100000" crc="6c66772e" sha1="e1e719df1e51caaafd9b3af187059334f7abbba3" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -612,6 +612,14 @@ static INPUT_PORTS_START( rad_bass )
INPUT_PORTS_END
static INPUT_PORTS_START( ekara )
PORT_INCLUDE(xavix)
PORT_MODIFY("IN1")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
INPUT_PORTS_END
static INPUT_PORTS_START( rad_bassp )
PORT_INCLUDE(rad_bass)
@ -860,6 +868,39 @@ MACHINE_CONFIG_START(xavix_state::xavix2000_i2c_24c02)
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24C02
MACHINE_CONFIG_END
DEVICE_IMAGE_LOAD_MEMBER( xavix_ekara_state, ekara_cart )
{
uint32_t size = m_cart->common_get_size("rom");
std::vector<uint8_t> temp;
temp.resize(size);
m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(&temp[0], size, "rom");
memcpy(memregion("bios")->base(), &temp[0], size);
return image_init_result::PASS;
}
MACHINE_CONFIG_START(xavix_ekara_state::xavix_ekara)
xavix(config);
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "ekara_cart")
MCFG_GENERIC_EXTENSIONS("bin")
MCFG_GENERIC_WIDTH(GENERIC_ROM8_WIDTH)
MCFG_GENERIC_LOAD(xavix_ekara_state, ekara_cart)
/* software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","ekara")
MACHINE_CONFIG_END
void xavix_state::init_xavix()
{
m_rgnlen = memregion("bios")->bytes();
@ -979,34 +1020,12 @@ ROM_END
it etc.
*/
#define EKARA_BASE_ROM \
ROM_START( ekara )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "ekara.bin", 0x600000, 0x100000, CRC(9b27c4a2) SHA1(d75dda7434933135d2f7e353840a9384e9a0d586) )
ROM_START( eka_base )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
EKARA_BASE_ROM
ROM_RELOAD(0x000000, 0x100000)
ROM_END
ROM_START( eka_strt )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
EKARA_BASE_ROM
ROM_LOAD( "ekarastartcart.bin", 0x000000, 0x080000, CRC(8c12c0c2) SHA1(8cc1b098894af25a4bfccada884125b66f5fe8b2) )
ROM_END
ROM_START( eka_vol1 )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
EKARA_BASE_ROM
ROM_LOAD( "ekaravol1.bin", 0x000000, 0x100000, CRC(29df4aea) SHA1(b95835aaf8630b61b47e5da0968cd4a1dd3bc517) )
ROM_END
ROM_START( eka_vol2 )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
EKARA_BASE_ROM
ROM_LOAD( "ekaravol2.bin", 0x000000, 0x100000, CRC(6c66772e) SHA1(e1e719df1e51caaafd9b3af187059334f7abbba3) )
ROM_END
ROM_START( has_wamg )
ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "minigolf.bin", 0x000000, 0x400000, CRC(35cee2ad) SHA1(c7344e8ba336bc329638485ea571cd731ebf7649) )
@ -1052,13 +1071,7 @@ CONS( 200?, epo_efdx, 0, 0, xavix_i2c_24c08, xavix, xavix_state,
CONS( 200?, has_wamg, 0, 0, xavix, xavix, xavix_state, init_xavix, "Hasbro / Milton Bradley / SSD Company LTD", "TV Wild Adventure Mini Golf", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
CONS( 200?, eka_base, 0, 0, xavix, xavix, xavix_state, init_xavix, "Takara / Hasbro / SSD Company LTD", "e-kara (US?)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND|MACHINE_IS_BIOS_ROOT)
CONS( 200?, eka_strt, eka_base, 0, xavix, xavix, xavix_state, init_xavix, "Takara / Hasbro / SSD Company LTD", "e-kara Starter (US?)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
CONS( 200?, eka_vol1, eka_base, 0, xavix, xavix, xavix_state, init_xavix, "Takara / Hasbro / SSD Company LTD", "e-kara Volume 1 (US?)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND) // insert calls it 'HIT MIX Vol 1'
CONS( 200?, eka_vol2, eka_base, 0, xavix, xavix , xavix_state, init_xavix, "Takara / Hasbro / SSD Company LTD", "e-kara Volume 2 (US?)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND) // insert calls it 'HIT MIX Vol 2'
CONS( 200?, ekara, 0, 0, xavix_ekara, ekara, xavix_ekara_state, init_xavix, "Takara / Hasbro / SSD Company LTD", "e-kara (US?)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND|MACHINE_IS_BIOS_ROOT)
/* The 'XaviXPORT' isn't a real console, more of a TV adapter, all the actual hardware (CPU including video hw, sound hw) is in the cartridges and controllers
and can vary between games, see notes at top of driver.

View File

@ -11,6 +11,8 @@
#include "speaker.h"
#include "machine/bankdev.h"
#include "machine/i2cmem.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
class xavix_state : public driver_device
@ -314,4 +316,20 @@ void superxavix_lowbus_map(address_map &map);
optional_device<i2cmem_device> m_i2cmem;
};
class xavix_ekara_state : public xavix_state
{
public:
xavix_ekara_state(const machine_config &mconfig, device_type type, const char *tag)
: xavix_state(mconfig, type, tag),
m_cart(*this, "cartslot")
{ }
void xavix_ekara(machine_config &config);
protected:
required_device<generic_slot_device> m_cart;
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ekara_cart);
//READ8_MEMBER(cart_r) { return m_cart->read_rom(space, offset); }
};
#endif // MAME_INCLUDES_XAVIX_H

View File

@ -400,8 +400,39 @@ READ8_MEMBER(xavix_state::timer_status_r)
WRITE8_MEMBER(xavix_state::timer_control_w)
{
LOG("%s: timer_control_w %02x\n", machine().describe_context(), data);
/* timer is actively used by
ttv_lotr, ttv_sw, drgqst, has_wamg, rad_rh, eka_*, epo_efdx, rad_bass, rad_bb2
gets turned on briefly during the bootup of rad_crdn, but then off again
runs during rad_fb / rad_madf, but with IRQs turned off
disabled for rad_snow, rad_ping, rad_mtrk, rad_box, *nostalgia, ttv_mx, xavtenni
*/
//LOG("%s: timer_control_w %02x\n", machine().describe_context(), data);
m_timer_control = data;
if (data & 0x80) // tends to read+write address to ack interrupts, assume it's similar to other things and top bit will clear IRQ (usually gets written all the time when starting timer)
{
if (m_irqsource & 0x10)
{
m_irqsource &= ~0x10;
update_irqs();
}
}
// has_wamg, ttv_sw, eka_*, rad_bass set bit 0x02 too (maybe reload related?)
// rad_fb / rad_madf don't set bit 0x40 (and doesn't seem to have a valid interrupt handler for timer, so probably means it generates no IRQ?)
if (data & 0x01) // timer start?
{
m_freq_timer->adjust(attotime::from_usec(50000));
}
else
{
m_freq_timer->adjust(attotime::never, 0);
}
}
WRITE8_MEMBER(xavix_state::timer_baseval_w)
@ -449,7 +480,16 @@ WRITE8_MEMBER(xavix_state::timer_freq_w)
TIMER_CALLBACK_MEMBER(xavix_state::freq_timer_done)
{
if (m_timer_control & 0x40) // Timer IRQ enable?
{
m_irqsource |= 0x10;
m_timer_control |= 0x80;
update_irqs();
}
//logerror("freq_timer_done\n");
// reload
//m_freq_timer->adjust(attotime::from_usec(50000));
}

View File

@ -39532,10 +39532,7 @@ rad_fb //
epo_efdx //
rad_rh //
has_wamg //
eka_base //
eka_strt //
eka_vol1 //
eka_vol2 //
ekara //
xavtenni //
ttv_sw //
ttv_lotr //

View File

@ -86,14 +86,20 @@ void xavix_state::handle_palette(screen_device &screen, bitmap_ind16 &bitmap, co
//if (h_raw > 24)
// LOG("hraw >24 (%02x)\n", h_raw);
//if (l_raw > 17)
// LOG("lraw >17 (%02x)\n", l_raw);
//if (l_raw > 24)
// LOG("lraw >24 (%02x)\n", l_raw);
//if (s_raw > 7)
// LOG("s_raw >5 (%02x)\n", s_raw);
double l = (double)l_raw / 17.0f;
double l = (double)l_raw / 24.0f; // ekara and drgqst go up to 23 during fades, expect that to be brightest
l = l * (std::atan(1)*2); // does not appear to be a linear curve
l = std::sin(l);
double s = (double)s_raw / 7.0f;
s = s * (std::atan(1)*2); // does not appear to be a linear curve
s = std::sin(s);
double h = (double)h_raw / 24.0f; // hue values 24-31 render as transparent
double r, g, b;