Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

begin to document the original IVL releases of Easy Karaoke (KaraokeTV Star) which use a (long gone) download service rather than carts for extra songs [Sean Riddle, David Haywood] #11794

Merged
merged 5 commits into from Dec 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions src/mame/mame.lst
Expand Up @@ -41424,6 +41424,7 @@ e100 //
@source:skeleton/easy_karaoke.cpp
easykara
karams
karatvst

@source:skeleton/elcirculo.cpp
elcirculo // (c) 1980 Inder
Expand Down
170 changes: 134 additions & 36 deletions src/mame/skeleton/easy_karaoke.cpp
Expand Up @@ -2,12 +2,19 @@
// copyright-holders:David Haywood
/******************************************************************************

Easy Karaoke (c)IVL Technologies
IVL Technologies Karaoke systems

A version of this was also released in France by Lexibook, with French songs
KaraokeTV Star (c) IVL Technologies

licensed out as

This uses
KaraokeStation (Japan) (c) Bandai
Easy Karaoke Groove Station (UK) (c) Easy Karaoke
KaraokeMicro Star (France) (c) Lexibook

-------------------------------------

Easy Karaoke uses

Clarity 4.3 ARM
SVI1186
Expand Down Expand Up @@ -63,6 +70,8 @@

------------------

KaraokeTV Star also uses the Clarity 4.1 but with "JVR043 0225" numbering

Packaging also shows 'On-Key Karaoke' logo on box, maybe this is the original US / Canada product name?

"Karaoke TV Star" appears to be a US product using this technology - advertises 50 built in songs, but
Expand All @@ -85,32 +94,24 @@

namespace {

class easy_karaoke_state : public driver_device
class ivl_karaoke_state : public driver_device
{
public:
easy_karaoke_state(const machine_config &mconfig, device_type type, const char *tag)
ivl_karaoke_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_screen(*this, "screen")
, m_cart(*this, "cartslot")
, m_cart_region(nullptr)
{ }

void easy_karaoke(machine_config &config);
void ivl_karaoke_base(machine_config &config);

private:
protected:
virtual void machine_start() override;
virtual void machine_reset() override;

void easy_karaoke_base(machine_config &config);

DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);

private:
required_device<cpu_device> m_maincpu;

required_device<screen_device> m_screen;
required_device<generic_slot_device> m_cart;
memory_region *m_cart_region;

uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);

Expand All @@ -119,26 +120,54 @@ class easy_karaoke_state : public driver_device
void arm_map(address_map &map);
};

uint32_t easy_karaoke_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
class easy_karaoke_cartslot_state : public ivl_karaoke_state
{
public:
easy_karaoke_cartslot_state(const machine_config &mconfig, device_type type, const char *tag)
: ivl_karaoke_state(mconfig, type, tag)
, m_cart(*this, "cartslot")
, m_cart_region(nullptr)
{ }

void easy_karaoke(machine_config &config);

protected:
virtual void machine_start() override;

private:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);

required_device<generic_slot_device> m_cart;
memory_region *m_cart_region;
};

uint32_t ivl_karaoke_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
return 0;
}

void easy_karaoke_state::machine_start()
void ivl_karaoke_state::machine_start()
{

}

void easy_karaoke_cartslot_state::machine_start()
{
ivl_karaoke_state::machine_start();

// if there's a cart, override the standard mapping
if (m_cart && m_cart->exists())
{
m_cart_region = memregion(std::string(m_cart->tag()) + GENERIC_ROM_REGION_TAG);
}
}

void easy_karaoke_state::machine_reset()
void ivl_karaoke_state::machine_reset()
{
m_maincpu->set_state_int(ARM7_R15, 0x04000000);
}

DEVICE_IMAGE_LOAD_MEMBER(easy_karaoke_state::cart_load)
DEVICE_IMAGE_LOAD_MEMBER(easy_karaoke_cartslot_state::cart_load)
{
uint32_t const size = m_cart->common_get_size("rom");

Expand All @@ -148,48 +177,110 @@ DEVICE_IMAGE_LOAD_MEMBER(easy_karaoke_state::cart_load)
return std::make_pair(std::error_condition(), std::string());
}

static INPUT_PORTS_START( easy_karaoke )
static INPUT_PORTS_START( ivl_karaoke )
INPUT_PORTS_END

uint32_t easy_karaoke_state::a000004_r()
uint32_t ivl_karaoke_state::a000004_r()
{
return machine().rand();
}

void easy_karaoke_state::arm_map(address_map &map)
void ivl_karaoke_state::arm_map(address_map &map)
{
map(0x00000000, 0x007fffff).ram();
map(0x04000000, 0x047fffff).rom().region("maincpu", 0);
map(0x0a000004, 0x0a000007).r(FUNC(easy_karaoke_state::a000004_r));
map(0x0a000004, 0x0a000007).r(FUNC(ivl_karaoke_state::a000004_r));
}


void easy_karaoke_state::easy_karaoke_base(machine_config &config)
void ivl_karaoke_state::ivl_karaoke_base(machine_config &config)
{
ARM9(config, m_maincpu, 72000000); // ARM 720 core
m_maincpu->set_addrmap(AS_PROGRAM, &easy_karaoke_state::arm_map);
m_maincpu->set_addrmap(AS_PROGRAM, &ivl_karaoke_state::arm_map);

SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_size(320, 262);
m_screen->set_visarea(0, 320-1, 0, 240-1);
m_screen->set_screen_update(FUNC(easy_karaoke_state::screen_update));
m_screen->set_screen_update(FUNC(ivl_karaoke_state::screen_update));

SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();

GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "easy_karaoke_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
m_cart->set_device_load(FUNC(easy_karaoke_state::cart_load));

}

void easy_karaoke_state::easy_karaoke(machine_config &config)
void easy_karaoke_cartslot_state::easy_karaoke(machine_config &config)
{
easy_karaoke_base(config);
ivl_karaoke_base(config);

GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "easy_karaoke_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
m_cart->set_device_load(FUNC(easy_karaoke_cartslot_state::cart_load));
SOFTWARE_LIST(config, "cart_list").set_original("easy_karaoke_cart");
}

/*
The 'karatvst' set has the following 50 songs built in, there don't appear to be any downloaded songs in this NAND dump

ABC Jackson 5
All I Have To Give Backstreet Boys
Always On My Mind Elvis Presley
America The Beautiful Standard
Baby Love Supremes
...Baby One More Time Britney Spears
Born To Make You Happy Britney Spears
Brick House The Commodores
Bye Bye Bye N'Sync
Dancing Queen Abba
Don't Let Me Get Me pink
Drive (For Daddy Gene) Alan Jackson
Fallin' Alicia Keys
Girlfriend N'Sync
Goodbye Earl Dixie Chicks
Hit 'Em Up Style Blu Cantrell
I Believe I Can Fly R. Kelly
I Heard It Through the Grapevine Marvin Gaye
I Should Be Sleeping Emerson Drive
I Wanna Know Joe
I Want It That Way Backstreet Boys
If You're Gone Matchbox 20
It's A Great Day To Be Alive Travis Tritt
Lady Marmalade Christina Aguilera
Love Shack B52's
Me And Bobby McGee Kris Kristofferson
My Girl Temptations
My Guy Mary Wells
New York New York Frank Sinatra
No More Drama Mary J. Blige
One Fine Day Chiffons
Oops...I Did It Again Britney Spears
Over The Rainbow Judy Garland
Overprotected Britney Spears
Stand By Your Man Tammy Wynette
Star Spangled Banner Public Domain
Stop In The Name Of Love Supremes
Stronger Britney Spears
Super Freak Rick James
Superman Five For Fighting
That's The Way (I Like It) KC And The Sunshine Band
The Greatest Love Of All Whitney Houston
The Loco-Motion Kylie Minogue
The One Backstreet Boys
There Is No Arizona Jamie O'Neal
We Wish You A Merry Xmas Traditional
What's Going On Marvin Gaye
Wild Thing The Troggs
Wrapped Around Brad Paisley
You Can't Hurry Love The Supremes

*/
ROM_START( karatvst )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "karaoke37vf010.bin", 0x000000, 0x20000, CRC(9d3020e4) SHA1(bce5d42ecff88b310a43599c9e47cba920c6b6e1) ) // bootloader

ROM_REGION( 0x840000, "nand", ROMREGION_ERASEFF ) // NAND with main program, graphics, built in songs (and potentially user downloads)
ROM_LOAD( "karaoketc58v64bft.bin", 0x000000, 0x840000, CRC(8cf42f20) SHA1(fae09ab08035e8c894fe00dcb23746ea78391d7f) )
ROM_END

/*
The 'easykara' set has the following 10 songs built in.

Expand Down Expand Up @@ -273,6 +364,13 @@ ROM_END

} // anonymous namespace

// This is the original US release, there's no cartridge slot, but it has a NAND Flash inside, and in addition to 50 built-in songs, advertises
// use of a (now defunct) www.onkeysongs.com service for downloading additional songs to the microphone via bundled PC software.
CONS( 2002, karatvst, 0, 0, ivl_karaoke_base, ivl_karaoke, ivl_karaoke_state, empty_init, "IVL Technologies", "KaraokeTV Star (US, with 50 songs)", MACHINE_IS_SKELETON )
// There is also a 35 song US version
// The "Memorex Star Singer Karaoke / MKS4001" is also made by IVL and boasts 50 built in songs, the casing is different, so it could differ from the standard version.
// There is a Japanese version, KaraokeStation, put out by Bandai in 2002 with similar internals to the US version ( http://www.akihito.spawn.jp/20021026.karaokestation/ )

CONS( 2004, easykara, 0, 0, easy_karaoke, easy_karaoke, easy_karaoke_state, empty_init, "IVL Technologies", "Easy Karaoke Groove Station (UK)", MACHINE_IS_SKELETON )
CONS( 2003, karams, easykara, 0, easy_karaoke, easy_karaoke, easy_karaoke_state, empty_init, "IVL Technologies (Lexibook license)", "KaraokeMicro Star (France)", MACHINE_IS_SKELETON )
// The European releases take cartridges rather than relying on a download service
CONS( 2004, easykara, karatvst, 0, easy_karaoke, ivl_karaoke, easy_karaoke_cartslot_state, empty_init, "IVL Technologies (Easy Karaoke license)", "Easy Karaoke Groove Station (UK)", MACHINE_IS_SKELETON )
CONS( 2003, karams, karatvst, 0, easy_karaoke, ivl_karaoke, easy_karaoke_cartslot_state, empty_init, "IVL Technologies (Lexibook license)", "KaraokeMicro Star (France)", MACHINE_IS_SKELETON )