skeleton/easy_karaoke.cpp: Added the original IVL release of Easy Karaoke (KaraokeTV Star). (#11794) [Sean Riddle, David Haywood]

* This system used a (now long defunct) download service rather than cartridges for adding songs.
* Current dump does not appear to contain any downloaded songs.
* Also listed built-in songs in comments.

New systems marked not working
-------------------
IVL Technologies KaraokeTV Star (US, with 50 songs) [Sean Riddle, David Haywood]
This commit is contained in:
mamehaze 2023-12-10 23:45:41 +00:00 committed by GitHub
parent b442d7d243
commit 1a4287925e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 135 additions and 36 deletions

View File

@ -41456,6 +41456,7 @@ e100 //
@source:skeleton/easy_karaoke.cpp
easykara
karams
karatvst
@source:skeleton/elcirculo.cpp
elcirculo // (c) 1980 Inder

View File

@ -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
@ -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
@ -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);
@ -119,13 +120,41 @@ private:
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())
{
@ -133,12 +162,12 @@ void easy_karaoke_state::machine_start()
}
}
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");
@ -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();
}
void easy_karaoke_cartslot_state::easy_karaoke(machine_config &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_state::cart_load));
}
void easy_karaoke_state::easy_karaoke(machine_config &config)
{
easy_karaoke_base(config);
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.
@ -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 )