diff --git a/hash/ekara_japan.xml b/hash/ekara_japan.xml
index 61198c2eff6..580c23e2c6f 100644
--- a/hash/ekara_japan.xml
+++ b/hash/ekara_japan.xml
@@ -125,33 +125,33 @@
58 EC0058-ENK ENK Volume 8
59 EC0059-JPM J-Pop Mix Volume 25
- 60 EC0060-JPM J-Pop Mix Volume 26
+ 60 *EC0060-JPM J-Pop Mix Volume 26
61 *EC0061-JPM J-Pop Mix Volume 27
- 62 EC0062-JPM J-Pop Mix Volume 28
+ 62 *EC0062-JPM J-Pop Mix Volume 28
63 *EC0063-JPM J-Pop Mix Volume 29
64 EC0064-ENK ENK Volume 9
- 65 EC0065-JPM J-Pop Mix Volume 30
- 66 EC0066-JPM J-Pop Mix Volume 31
- 67 EC0067-JPM J-Pop Mix Volume 32
+ 65 *EC0065-JPM J-Pop Mix Volume 30
+ 66 *EC0066-JPM J-Pop Mix Volume 31
+ 67 *EC0067-JPM J-Pop Mix Volume 32
68 *EC0068-JPM J-Pop Mix Volume 33
- 69 EC0069- untranslated
+ 69 *EC0069-ETZ ETZ (custom presentation etc.)
70 *EC0070-JPM J-Pop Mix Volume 34
- 71 EC0071-JPM J-Pop Mix Volume 35
+ 71 *EC0071-JPM J-Pop Mix Volume 35
72 *EC0072-JPM J-Pop Mix Volume 36
- 73 EC0073- untranslated volume 1
- 74 EC0074-JPM J-Pop Mix Volume 37
- 75 EC0075-JPM J-Pop Mix Volume 38
+ 73 *EC0073-MKC MKC volume 1 (Japan)
+ 74 *EC0074-JPM J-Pop Mix Volume 37
+ 75 *EC0075-JPM J-Pop Mix Volume 38
76 *EC0076-JPM J-Pop Mix Volume 39
- 77 EC0077-ATS Artist Selection Volume 15 - unknown artist (should be Vol 15? sales sheet lists 5?)
- 78 EC0078- (unknown)
- 79 *EC0079-ETZ ETZ (custom presentation etc.)
- 80 EC0080- (unknown)
+ 77 *EC0077-ATS Artist Selection Volume 15 - unknown artist (should be Vol 15? sales sheet lists 5?)
+ 78 *EC0078-JPM J-Pop Mix Volume 40
+ 79 *EC0079-ETZ ETZ 2 (custom presentation etc.)
+ 80 *EC0080-JPM J-Pop Mix Volume 41
81 EC0081-JPM J-Pop Mix Volume 42
82 *EC0082-MBH Matthew's Best Hit Selection
83 EC0083-JPM J-Pop Mix Volume 43
84 EC0084- (unknown, seen)
- 85 EC0085- (unknown, seen)
+ 85 EC0085-ETZ ETZ 3 (custom presentation etc.) (guess)
(more? what's the highest regular number?)
@@ -711,8 +711,17 @@
-
-
+
+ J-Pop Mix Volume 26 (Japan) (EC0060-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
+
J-Pop Mix Volume 27 (Japan) (EC0061-JPM)
2001
@@ -724,8 +733,17 @@
-
-
+
+ J-Pop Mix Volume 28 (Japan) (EC0062-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
+
J-Pop Mix Volume 29 (Japan) (EC0063-JPM)
2001
@@ -739,11 +757,38 @@
-
-
-
-
-
+
+ J-Pop Mix Volume 30 (Japan) (EC0065-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
+
+
+ J-Pop Mix Volume 31 (Japan) (EC0066-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
+
+
+ J-Pop Mix Volume 32 (Japan) (EC0067-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
J-Pop Mix Volume 33 (Japan) (EC0068-JPM)
@@ -756,8 +801,17 @@
-
-
+
+ ETZ (Japan) (EC0069-ETZ)
+ 2001
+ Takara
+
+
+
+
+
+
+
J-Pop Mix Volume 34 (Japan) (EC0070-JPM)
2001
@@ -769,7 +823,16 @@
-
+
+ J-Pop Mix Volume 35 (Japan) (EC0071-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
J-Pop Mix Volume 36 (Japan) (EC0072-JPM)
@@ -782,11 +845,38 @@
-
+
+ MKC volume 1 (Japan) (EC0073-MKC)
+ 2001
+ Takara
+
+
+
+
+
+
-
-
-
+
+ J-Pop Mix Volume 37 (Japan) (EC0074-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
+
+
+ J-Pop Mix Volume 38 (Japan) (EC0075-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
J-Pop Mix Volume 39 (Japan) (EC0076-JPM)
@@ -798,13 +888,31 @@
-
-
-
-
+
+
+ Artist Selection Volume 15 - unknown artist (Japan) (EC0077-ATS)
+ 2001
+ Takara
+
+
+
+
+
+
+
+
+ J-Pop Mix Volume 40 (Japan) (EC0078-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
- ETZ (Japan) (EC0079-ETZ)
+ ETZ 2 (Japan) (EC0079-ETZ)
2002
Takara
@@ -814,7 +922,16 @@
-
+
+ J-Pop Mix Volume 41 (Japan) (EC0080-JPM)
+ 2001
+ Takara
+
+
+
+
+
+
diff --git a/hash/ekara_japan_bh.xml b/hash/ekara_japan_bh.xml
new file mode 100644
index 00000000000..a35b13a7c70
--- /dev/null
+++ b/hash/ekara_japan_bh.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+ BH-02 Best Hit Collection (Japan)
+ 2005
+ Takara
+
+
+
+
+
+
+
+
+ BH-03 Best Hit Collection (Japan)
+ 2005
+ Takara
+
+
+
+
+
+
+
+
+ BH-05 Best Hit Collection (Japan)
+ 2005
+ Takara
+
+
+
+
+
+
+
+
+ BH-06 Best Hit Collection (Japan)
+ 2005
+ Takara
+
+
+
+
+
+
+
+
diff --git a/hash/ekara_japan_d.xml b/hash/ekara_japan_d.xml
index 4b978607b12..117e86adab7 100644
--- a/hash/ekara_japan_d.xml
+++ b/hash/ekara_japan_d.xml
@@ -16,9 +16,9 @@
note BAT and BHT aren't the same series
- D-1 DC0001-BHT BHT (Best Artists?) Volume 8 (most other BHT carts are in G series, or P series)
+ *D-1 DC0001-BHT BHT (Best Artists?) Volume 8 (most other BHT carts are in G series, or P series)
*D-2 DC0002-BAT BAT Volume 6
- D-3 DC0003-BHT BHT (Best Artists?) Volume 9
+ *D-3 DC0003-BHT BHT (Best Artists?) Volume 9
D-4 DC0004-TPJ TV Pop Volume 8
*D-5 DC0005-TPJ TV Pop Volume 9
D-6 DC0006-BHT BHT (Best Artists?) Volume 10
@@ -29,6 +29,18 @@
-->
+
+ BHT Volume 8 (Japan) (DC0001-BHT)
+ 2003
+ Takara
+
+
+
+
+
+
+
+
BAT Volume 6 (Japan) (DC0002-BAT)
2003
@@ -41,6 +53,18 @@
+
+ BHT Volume 9 (Japan) (DC0003-BHT)
+ 2003
+ Takara
+
+
+
+
+
+
+
+
TV Pop Volume 9 (Japan) (DC0005-TPJ)
2004
diff --git a/hash/ekara_japan_g.xml b/hash/ekara_japan_g.xml
index 2ba3ed3c38c..6a0e12cfdaf 100644
--- a/hash/ekara_japan_g.xml
+++ b/hash/ekara_japan_g.xml
@@ -9,7 +9,7 @@
These are for use with 2 different units
1. e-Kara
- 2. Popira (and Popira 2?)
+ 2. Popira (and Popira 2? - earlier carts will run it as regular Popira, later carts have full Popira 2 support)
G-1 *GC0001-BAT BAT Volume 1 (Artist Selection?)
G-2 *GC0002-BHT BHT Volume 1 (Best Artists?)
@@ -17,17 +17,17 @@
G-4 *GC0004-BHT BHT Volume 2 (Best Artists?)
G-5 GC0005-TPJ TV Pop Volume 1
G-6 *GC0006-BHT BHT Volume 3 (Best Artists?)
- G-7 GC0007-BAT BAT Volume 3 (Artist Selection?)
- G-8 GC0008-MIN? untranslated (no volume)
+ G-7 *GC0007-BAT BAT Volume 3 (Artist Selection?)
+ G-8 *GC0008-MIN? untranslated (no volume)
G-9 GC0009-TPJ TV Pop Volume 3 (Volume 2 is 'P-2' in 'P' series)
G-10 *GC0010-BAT BAT Volume 4 (Artist Selection?)
G-11 GC0011-TPJ TV Pop Volume 4
G-12 GC0012-BHT BHT Volume 5 (Best Artists?) (Volume 4 is 'P-1' in 'P' series)
G-13 GC0013- (unknown) Volume 6
- G-14 GC0014-MIN? (unknown) Volume 2
+ G-14 *GC0014-MIN? (unknown) Volume 2
G-15 *GC0015-BAT BAT Volume 5 (Artist Selection?)
G-16 *GC0016-TPJ TV Pop Volume 5
- G-17 GC0017-TPJ TV Pop Volume 6
+ G-17 *GC0017-TPJ TV Pop Volume 6
G-18 GC0018-TPJ TV Pop Volume 7
(more? what's the G highest number?)
@@ -62,7 +62,7 @@
Takara
-
+
@@ -89,6 +89,39 @@
+
+ BAT Volume 3 (Japan) (GC0007-BAT)
+ 2000
+ Takara
+
+
+
+
+
+
+
+
+ Mini Moni Volume 1 (Japan) (GC0008-MIN) (set 1)
+ 2001
+ Takara
+
+
+
+
+
+
+
+
+ MIN Volume 1 (Japan) (GC0008-MIN) (set 2)
+ 2001
+ Takara
+
+
+
+
+
+
+
+ Popira 2 however can make use of these pins -->
+
BAT Volume 4 (Japan) (GC0010-BAT)
2002
Takara
-
+
@@ -113,6 +147,18 @@
+
+ Mini Moni Volume 2 (GC0014-MIN)
+ 2002
+ Takara
+
+
+
+
+
+
+
+
BAT Volume 5 (Japan) (GC0015-BAT)
@@ -137,5 +183,17 @@
+
+
+ TV Pop Volume 6 (Japan) (GC0017-TPJ)
+ 2002
+ Takara
+
+
+
+
+
+
+
diff --git a/hash/ekara_japan_gk.xml b/hash/ekara_japan_gk.xml
new file mode 100644
index 00000000000..bc3bd45d46c
--- /dev/null
+++ b/hash/ekara_japan_gk.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ GK-1 - Detective Conan (Japan)
+ 2004
+ Takara
+
+
+
+
+
+
+
+
diff --git a/hash/ekara_japan_m.xml b/hash/ekara_japan_m.xml
index a550d05c143..f46f458b793 100644
--- a/hash/ekara_japan_m.xml
+++ b/hash/ekara_japan_m.xml
@@ -8,17 +8,17 @@
M-1 *MC0001-ATM Artist Mini Volume 1 (untranslated artist)
M-2 MC0002-ATM Artist Mini Volume 2 (untranslated artist)
M-3 MC0003-ATM Artist Mini Volume 3 (untranslated artist)
- M-4 MC0004-ATM Artist Mini Volume 4 (w-inds)
+ M-4 *MC0004-ATM Artist Mini Volume 4 (w-inds)
M-5 MC0005- KSM? unknown Vol 1
- M-6 MC0006- KSM? TPM? unknown Vol 2 (TV)
+ M-6 *MC0006-KSM KSM Mini Volume 2
M-7 MC0007-ATM Artist Mini Volume 5 (SMAP, KinKi Kids)
M-8 MC0008- KSM? TPM? unknown Vol 3 (TV)
M-9 MC0009-KSM JPop Mix Mini Vol 1
M-10 MC0010-ATM Artist Mini Volume 6 (untranslated artist)
M-11 MC0011- KSM? unknown Vol 4
- M-12 MC0012-ATM Artist Mini Volume 7 (untranslated artist)
+ M-12 *MC0012-ATM Artist Mini Volume 7 (untranslated artist)
M-13 *MC0013-KSM KSM Mini Volume 5
- M-14 MC0014-ATM Artist Mini Volume 8 (BoA)
+ M-14 *MC0014-ATM Artist Mini Volume 8 (BoA)
M-15 MC0015- KSM? TPM? unknown Vol 6 (TV Pop)
M-16 MC0016-ATM Artist Mini Volume 9 (untranslated artist)
M-17 MC0017- KSM? TPM? TV Pop Mini Vol 7 (TV Pop)
@@ -34,7 +34,7 @@
- ATM Mini Volume 1 (Japan) (MC0001-ATM)
+ Artist Mini Volume 1 (untranslated artist) (Japan) (MC0001-ATM)
2003
Takara
@@ -44,8 +44,41 @@
+
+ Artist Mini Volume 4 (w-inds) (Japan) (MC0004-ATM)
+ 2003
+ Takara
+
+
+
+
+
+
+
+
+ KSM Mini Volume 2 (Japan) (MC0006-KSM)
+ 2003
+ Takara
+
+
+
+
+
+
+
+
+ Artist Mini Volume 7 (untranslated artist) (Japan) (MC0012-ATM)
+ 2003
+ Takara
+
+
+
+
+
+
+
- KSM Mini Volume 5 (Japan) (MC0005-KSM)
+ KSM Mini Volume 5 (Japan) (MC0013-KSM)
2003
Takara
@@ -54,5 +87,16 @@
+
+
+ Artist Mini Volume 8 (BoA) (Japan) (MC0014-ATM)
+ 2003
+ Takara
+
+
+
+
+
+
diff --git a/hash/ekara_japan_p.xml b/hash/ekara_japan_p.xml
index 66698518502..2995bb8d5b6 100644
--- a/hash/ekara_japan_p.xml
+++ b/hash/ekara_japan_p.xml
@@ -13,7 +13,7 @@
3. Konami DDR Family Mat
*P-1 BHT Volume 4 (Best Artists?) (1,2,3, 5 in G series)
- P-2 TV Pop Volume 2 (1,3,4 in G series)
+ *P-2 TV Pop Volume 2 (1,3,4 in G series)
*P-3 ENB Volume 1
*P-4 BHT Volume 7
-->
@@ -29,6 +29,28 @@
+
+ TV Pop Volume 2 (Japan) (PC0002-TPJ) (set 1)
+ 2001
+ Takara
+
+
+
+
+
+
+
+
+ TV Pop Volume 2 (Japan) (PC0002-TPJ) ('World Trade Center' image removed)
+ 2001
+ Takara
+
+
+
+
+
+
+
ENB Volume 1 (Japan) (PC0003-ENB)
2001
diff --git a/hash/ekara_japan_s.xml b/hash/ekara_japan_s.xml
index 0d8343e9ce8..38640f6e99d 100644
--- a/hash/ekara_japan_s.xml
+++ b/hash/ekara_japan_s.xml
@@ -12,7 +12,7 @@
S-1 SC0001- Hello Kitty Special
S-2 SC0002-SAI SAI (series 3) Volume 1
- S-3 SC0003- unknown(1) Volume 1
+ S-3 *SC0003- unknown(1) Volume 1
S-4 *SC0004-SAI SAI (series 1) Volume 1
S-5 *SC0005-SAI SAI (series 2) Volume 1 (same series as 6,9,19,21,22)
S-6 *SC0006-SAI SAI (series 2) Volume 2 (same series as 5,9,19,21,22)
@@ -27,7 +27,7 @@
S-15 SC0015- unknown(2) Volume 2
S-16 SC0016-SAI SAI (series 2) Volume 5
S-17 SC0017- unknown(1) Volume 2
- S-18 SC0018-SAI (unknown) Volume 1
+ S-18 *SC0018-SAI (unknown) Volume 1
S-19 *SC0019-SAI SAI (series 2) Volume 6 (same series as 5,6,9,21,22)
S-20 SC0020- SAI (series 3) Volume 5
S-21 *SC0021-SAI SAI (series 2) Volume 7 (same series as 5,6,9,19,22)
@@ -40,6 +40,17 @@
+
+ unknown(1) Volume 1 (Japan) (SC0003-xxx)
+ 2001
+ Takara
+
+
+
+
+
+
+
SAI (series 1) Volume 1 (Japan) (SC0004-SAI)
2001
@@ -106,9 +117,20 @@
+
+ (unknown) Volume 1 (SC0018-SAI)
+ 2002
+ Takara
+
+
+
+
+
+
+
SAI (series 2) Volume 6 (Japan) (SC0019-SAI)
- 2001
+ 2002
Takara
@@ -119,7 +141,7 @@
SAI (series 2) Volume 7 (Japan) (SC0021-SAI)
- 2001
+ 2002
Takara
@@ -130,7 +152,7 @@
SAI (series 2) Volume 8 (Japan) (SC0022-SAI)
- 2001
+ 2003
Takara
diff --git a/hash/ekara_japan_sp.xml b/hash/ekara_japan_sp.xml
index d9e1bc16492..e5f67af4a96 100644
--- a/hash/ekara_japan_sp.xml
+++ b/hash/ekara_japan_sp.xml
@@ -8,7 +8,7 @@
Japanese cart listing (by SP code) * = dumped
- These don't seem to have a secondary numbering scheme (eg SPxxxx-xxx)
+ A secondary 4-digit naming scheme SPxxxx (no extension) appears on a sticker on the cartridge PCB only
These are for use with 5 different units
1. e-Kara
@@ -21,13 +21,10 @@
"please play this cartridge on e-kara series, popira, popira 2, taiko de popira or jumping popira"
- gives 'memory error' if plugged into Popira (needs cartridge SEEPROM emulating)
- gives 'eep-rom error' if plugged into Taiko de Popira (same reason)
-
SP-01 (unknown)
*SP-02 'Super Cartridge' SP-2
- SP-03 (unknown)
- SP-04 (unknown)
+ *SP-03 'Super Cartridge' SP-3
+ *SP-04 'Super Cartridge' SP-4
SP-05
SP-06 (seen)
SP-07 (seen)
@@ -36,9 +33,9 @@
-->
-
+
SP-02 Super Cartridge (Japan)
- 2000
+ 2004
Takara
@@ -47,4 +44,29 @@
+
+
+ SP-03 Super Cartridge (Japan)
+ 2004
+ Takara
+
+
+
+
+
+
+
+
+
+ SP-04 Super Cartridge (Japan)
+ 2004
+ Takara
+
+
+
+
+
+
+
+
diff --git a/hash/ekara_japan_web.xml b/hash/ekara_japan_web.xml
index d0c1a75fd51..34e7103c6e6 100644
--- a/hash/ekara_japan_web.xml
+++ b/hash/ekara_japan_web.xml
@@ -27,5 +27,18 @@
+
+
+
+
+ e-kara Web cartridge 12M (used, with 7 Songs) (Japan)
+ 2003
+ Takara
+
+
+
+
+
+
diff --git a/hash/icanguit.xml b/hash/icanguit.xml
new file mode 100644
index 00000000000..5734a9cbda9
--- /dev/null
+++ b/hash/icanguit.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ Guitar Favorites
+ 2007
+ Fisher-Price / Mattel
+
+
+
+
+
+
+
diff --git a/hash/jpopira_jp.xml b/hash/jpopira_jp.xml
new file mode 100644
index 00000000000..f3dade22f25
--- /dev/null
+++ b/hash/jpopira_jp.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+ JP-01 (Japan)
+ 2004
+ Takara
+
+
+
+
+
+
+
+
+
+ JP-02 (Japan)
+ 2004
+ Takara
+
+
+
+
+
+
+
+
+
diff --git a/src/devices/bus/ekara/rom.cpp b/src/devices/bus/ekara/rom.cpp
index c167e07c546..9ebc85452eb 100644
--- a/src/devices/bus/ekara/rom.cpp
+++ b/src/devices/bus/ekara/rom.cpp
@@ -13,6 +13,7 @@ DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_BASE, ekara_rom_i2c_base_device, "ekara
DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24C08_EPITCH, ekara_rom_i2c_24c08_epitch_device, "ekara_rom_i2c_24c08", "EKARA Cartridge with I2C 24C08 (e-pitch)")
DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24LC04, ekara_rom_i2c_24lc04_device, "ekara_rom_i2c_24lc04", "EKARA Cartridge with I2C 24LC04")
DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02, ekara_rom_i2c_24lc02_device, "ekara_rom_i2c_24lc02", "EKARA Cartridge with I2C 24LC02")
+DEFINE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02_GC0010, ekara_rom_i2c_24lc02_gc0010_device, "ekara_rom_i2c_24lc02_gc0010", "EKARA Cartridge with I2C 24LC02 (GC0010 direct access)")
ekara_rom_plain_device::ekara_rom_plain_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
@@ -54,6 +55,11 @@ ekara_rom_i2c_24lc02_device::ekara_rom_i2c_24lc02_device(const machine_config &m
{
}
+ekara_rom_i2c_24lc02_gc0010_device::ekara_rom_i2c_24lc02_gc0010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ ekara_rom_i2c_base_device(mconfig, EKARA_ROM_I2C_24LC02_GC0010, tag, owner, clock)
+{
+}
+
/*-------------------------------------------------
mapper specific handlers
-------------------------------------------------*/
@@ -159,6 +165,50 @@ void ekara_rom_i2c_24lc02_device::device_add_mconfig(machine_config &config)
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x100); // 24LC02
}
+// i2c 24lc02 with direct IO port access
+
+bool ekara_rom_i2c_24lc02_gc0010_device::is_read_access_not_rom(void)
+{
+ return false;
+}
+
+bool ekara_rom_i2c_24lc02_gc0010_device::is_write_access_not_rom(void)
+{
+ return false;
+}
+
+READ8_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::read_extra)
+{
+ return 0;
+}
+
+WRITE8_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::write_extra)
+{
+}
+
+
+WRITE_LINE_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::write_sda)
+{
+ m_i2cmem->write_sda(state);
+}
+
+WRITE_LINE_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::write_scl)
+{
+ m_i2cmem->write_scl(state);
+}
+
+READ_LINE_MEMBER(ekara_rom_i2c_24lc02_gc0010_device::read_sda )
+{
+ return m_i2cmem->read_sda();
+}
+
+
+
+void ekara_rom_i2c_24lc02_gc0010_device::device_add_mconfig(machine_config &config)
+{
+ I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x100); // 24LC02
+}
+
/*-------------------------------------------------
slot interface
@@ -170,4 +220,6 @@ void ekara_cart(device_slot_interface &device)
device.option_add_internal("rom_24c08_epitch", EKARA_ROM_I2C_24C08_EPITCH);
device.option_add_internal("rom_24lc04", EKARA_ROM_I2C_24LC04);
device.option_add_internal("rom_24lc02", EKARA_ROM_I2C_24LC02);
+ device.option_add_internal("rom_24lc02_gc0010", EKARA_ROM_I2C_24LC02_GC0010);
+
}
diff --git a/src/devices/bus/ekara/rom.h b/src/devices/bus/ekara/rom.h
index 29487b2921c..76c5ed45e46 100644
--- a/src/devices/bus/ekara/rom.h
+++ b/src/devices/bus/ekara/rom.h
@@ -105,11 +105,32 @@ protected:
};
+// ======================> ekara_rom_i2c_24lc02_gc0010_device
+
+class ekara_rom_i2c_24lc02_gc0010_device : public ekara_rom_i2c_base_device
+{
+public:
+ // construction/destruction
+ ekara_rom_i2c_24lc02_gc0010_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ bool is_read_access_not_rom(void) override;
+ bool is_write_access_not_rom(void) override;
+ DECLARE_READ8_MEMBER(read_extra) override;
+ DECLARE_WRITE8_MEMBER(write_extra) override;
+ DECLARE_WRITE_LINE_MEMBER(write_sda) override;
+ DECLARE_WRITE_LINE_MEMBER(write_scl) override;
+ DECLARE_READ_LINE_MEMBER(read_sda ) override;
+};
+
// device type definition
DECLARE_DEVICE_TYPE(EKARA_ROM_PLAIN, ekara_rom_plain_device)
DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_BASE, ekara_rom_i2c_base_device)
DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24C08_EPITCH, ekara_rom_i2c_24c08_epitch_device)
DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24LC04, ekara_rom_i2c_24lc04_device)
DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02, ekara_rom_i2c_24lc02_device)
+DECLARE_DEVICE_TYPE(EKARA_ROM_I2C_24LC02_GC0010, ekara_rom_i2c_24lc02_gc0010_device)
#endif // MAME_BUS_EKARA_ROM_H
diff --git a/src/devices/bus/ekara/slot.cpp b/src/devices/bus/ekara/slot.cpp
index 26a72ab18f3..6748ee935cc 100644
--- a/src/devices/bus/ekara/slot.cpp
+++ b/src/devices/bus/ekara/slot.cpp
@@ -257,4 +257,21 @@ bool ekara_cart_slot_device::is_write_access_not_rom(void)
return m_cart->is_write_access_not_rom();
}
+/*-------------------------------------------------
+ direct seeprom access (popira2, gc0010)
+ -------------------------------------------------*/
+WRITE_LINE_MEMBER(ekara_cart_slot_device::write_sda)
+{
+ m_cart->write_sda(state);
+}
+
+WRITE_LINE_MEMBER(ekara_cart_slot_device::write_scl)
+{
+ m_cart->write_scl(state);
+}
+
+READ_LINE_MEMBER(ekara_cart_slot_device::read_sda )
+{
+ return m_cart->read_sda();
+}
diff --git a/src/devices/bus/ekara/slot.h b/src/devices/bus/ekara/slot.h
index d0bba77efaa..5a619b7d800 100644
--- a/src/devices/bus/ekara/slot.h
+++ b/src/devices/bus/ekara/slot.h
@@ -36,6 +36,11 @@ public:
virtual DECLARE_READ8_MEMBER(read_extra) { return 0xff; }
virtual DECLARE_WRITE8_MEMBER(write_extra) { }
+ virtual DECLARE_WRITE_LINE_MEMBER(write_sda) { }
+ virtual DECLARE_WRITE_LINE_MEMBER(write_scl) { }
+ //virtual DECLARE_WRITE_LINE_MEMBER( write_wc )
+ virtual DECLARE_READ_LINE_MEMBER( read_sda ) { return 0; }
+
virtual DECLARE_WRITE8_MEMBER(write_bus_control) { }
virtual bool is_read_access_not_rom(void) { return false; }
@@ -102,6 +107,11 @@ public:
virtual DECLARE_READ8_MEMBER(read_extra);
virtual DECLARE_WRITE8_MEMBER(write_extra);
+ virtual DECLARE_WRITE_LINE_MEMBER(write_sda);
+ virtual DECLARE_WRITE_LINE_MEMBER(write_scl);
+ //virtual DECLARE_WRITE_LINE_MEMBER( write_wc );
+ virtual DECLARE_READ_LINE_MEMBER( read_sda );
+
virtual DECLARE_WRITE8_MEMBER(write_bus_control);
virtual bool is_read_access_not_rom(void);
diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp
index 8e039393e9e..fa8140eaa7d 100644
--- a/src/mame/drivers/vii.cpp
+++ b/src/mame/drivers/vii.cpp
@@ -261,6 +261,28 @@ private:
uint8_t m_controller_input[8];
};
+class icanguit_state : public spg2xx_game_state
+{
+public:
+ icanguit_state(const machine_config &mconfig, device_type type, const char *tag)
+ : spg2xx_game_state(mconfig, type, tag)
+ , m_cart(*this, "cartslot")
+ , m_cart_region(nullptr)
+ { }
+
+ void icanguit(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+ //virtual void machine_reset() override;
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(icanguit_cart);
+
+ required_device m_cart;
+ memory_region *m_cart_region;
+};
+
+
/*************************
* Machine Hardware *
*************************/
@@ -952,6 +974,155 @@ static INPUT_PORTS_START( rad_crik )
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
+static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and some strings to map, must be multiplexed somehow?
+ PORT_START("P1")
+ PORT_DIPNAME( 0x0001, 0x0001, "P1" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START("P2")
+ PORT_DIPNAME( 0x0001, 0x0001, "P2" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START("P3")
+ PORT_DIPNAME( 0x0001, 0x0001, "P3" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) // Enter?
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // presumably power, kils the game
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( rad_fb2 ) // controls must be multiplexed somehow, as there's no room for P2 controls otherwise (unless P2 controls were never finished and it was only sold in a single mat version, Radica left useless P2 menu options in the mini Genesis consoles)
PORT_START("P1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) // 'left'
@@ -1104,6 +1275,37 @@ static INPUT_PORTS_START( lexizeus ) // how many buttons does this have? I acci
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
+void icanguit_state::machine_start()
+{
+ spg2xx_game_state::machine_start();
+
+ // if there's a cart, override the standard banking
+ if (m_cart && m_cart->exists())
+ {
+ std::string region_tag;
+ m_cart_region = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_bank->configure_entries(0, (m_cart_region->bytes() + 0x7fffff) / 0x800000, m_cart_region->base(), 0x800000);
+ m_bank->set_entry(0);
+ }
+}
+
+DEVICE_IMAGE_LOAD_MEMBER(icanguit_state, icanguit_cart)
+{
+ uint32_t size = m_cart->common_get_size("rom");
+
+ if (size < 0x800000)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
+ return image_init_result::FAIL;
+ }
+
+ m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
+ return image_init_result::PASS;
+}
+
+
void vii_state::machine_start()
{
@@ -1255,6 +1457,25 @@ void vii_state::vii(machine_config &config)
SOFTWARE_LIST(config, "vii_cart").set_original("vii");
}
+void icanguit_state::icanguit(machine_config &config)
+{
+ SPG24X(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen);
+
+ spg2xx_base(config);
+
+ m_spg->porta_in().set_ioport("P1");
+ m_spg->portb_in().set_ioport("P2");
+ m_spg->portc_in().set_ioport("P3");
+
+ GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "icanguit_cart");
+ m_cart->set_width(GENERIC_ROM16_WIDTH);
+ m_cart->set_device_load(device_image_load_delegate(&icanguit_state::device_image_load_icanguit_cart, this));
+ m_cart->set_must_be_loaded(true);
+
+ SOFTWARE_LIST(config, "icanguit_cart").set_original("icanguit");
+}
+
+
void spg2xx_game_state::wireless60(machine_config &config)
{
SPG24X(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen);
@@ -1627,6 +1848,12 @@ ROM_START( dreamlif )
ROM_LOAD16_WORD_SWAP( "dreamlife.bin", 0x000000, 0x800000, CRC(632e0237) SHA1(a8586e8a626d75cf7782f13cfd9f1b938af23d56) )
ROM_END
+ROM_START( icanguit )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ // no internal ROM, requires a cartridge
+ROM_END
+
+
/*
Wireless Air 60
(info provided with dump)
@@ -1842,7 +2069,9 @@ CONS( 2007, rad_fb2, 0, 0, rad_skat, rad_fb2, spg2xx_game_state, ini
CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, empty_init, "Mattel", "Mattel Classic Sports", MACHINE_IMPERFECT_SOUND )
// Hasbro games
-CONS( 2007, dreamlif, 0, 0, rad_skat, rad_crik, spg2xx_game_state, empty_init, "Hasbro ", "Dream Life", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2007, dreamlif, 0, 0, rad_skat, rad_crik, spg2xx_game_state, empty_init, "Hasbro", "Dream Life", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+
+CONS( 2007, icanguit, 0, 0, icanguit, icanguit, icanguit_state, empty_init, "Mattel / Fisher-Price", "I Can Play Guitar", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// might not fit here. First 0x8000 bytes are blank (not too uncommon for these) then rest of rom looks like it's probably encrypted at least
// could be later model VT based instead? even after decrypting (simple word xor) the vectors have a different format and are at a different location to the SunPlus titles
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index 0cb1a28880c..27ba1996c21 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -270,6 +270,9 @@ void xavix_state::xavix_map(address_map &map)
{
map(0x000000, 0x7fffff).r(FUNC(xavix_state::opcodes_000000_r));
map(0x800000, 0xffffff).r(FUNC(xavix_state::opcodes_800000_r));
+
+ map(0x000000, 0x003fff).w(FUNC(xavix_state::debug_mem_w));
+
}
// this is used by data reads / writes after some processing in the core to decide if data reads can see lowbus, zeropage, stack, bank registers etc. and only falls through to here on a true external bus access
@@ -851,6 +854,225 @@ static INPUT_PORTS_START( popira )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
+static INPUT_PORTS_START( popira2 ) // player 2 buttons have heavy latency, probably due to incorrect timer emulation, hence NOT WORKING flag right now
+ PORT_INCLUDE(xavix)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Pad 1") PORT_PLAYER(1)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Pad 2") PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Pad 3") PORT_PLAYER(1)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Pad 4") PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Select Previous") PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Select Next") PORT_PLAYER(1)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Start") PORT_PLAYER(1)
+
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xavix_popira2_cart_state,i2c_r, nullptr)
+ PORT_BIT( 0x30, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_MODIFY("AN0") // 00
+ PORT_DIPNAME( 0x0001, 0x0001, "AN0" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // buttons respond in a strange way if these are high
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Pad 1") PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Pad 2") PORT_PLAYER(2)
+
+ PORT_MODIFY("AN1") // 01
+ PORT_DIPNAME( 0x0001, 0x0001, "AN1" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // buttons respond in a strange way if these are high
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Pad 3") PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Pad 4") PORT_PLAYER(2)
+
+ PORT_MODIFY("AN2") // 02
+ PORT_DIPNAME( 0x0001, 0x0001, "AN2" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+
+ PORT_MODIFY("AN3") // 03
+ PORT_DIPNAME( 0x0001, 0x0001, "AN3" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+
+
+ PORT_MODIFY("AN4") // 10
+ PORT_DIPNAME( 0x0001, 0x0001, "AN4" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+
+ PORT_MODIFY("AN5") // 11
+ PORT_DIPNAME( 0x0001, 0x0001, "AN5" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_MODIFY("AN6") // 12
+ PORT_DIPNAME( 0x0001, 0x0001, "AN6" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+
+ PORT_MODIFY("AN7") // 13
+ PORT_DIPNAME( 0x0001, 0x0001, "AN7" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( rad_bassp )
PORT_INCLUDE(rad_bass)
@@ -1321,6 +1543,9 @@ void xavix_cart_state::xavix_cart_ekara(machine_config &config)
SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
SOFTWARE_LIST(config, "cart_list_japan_web").set_original("ekara_japan_web");
SOFTWARE_LIST(config, "cart_list_japan_a").set_original("ekara_japan_a");
+ SOFTWARE_LIST(config, "cart_list_japan_gk").set_original("ekara_japan_gk");
+ SOFTWARE_LIST(config, "cart_list_japan_bh").set_original("ekara_japan_bh");
+ SOFTWARE_LIST(config, "cart_list_jpopira_jp").set_original("jpopira_jp"); // NOTE, these are for Jumping Popira only, they don't work with the karaoke or regular popira units
}
void xavix_cart_state::xavix_cart_popira(machine_config &config)
@@ -1606,6 +1831,12 @@ ROM_START( popira )
ROM_RELOAD(0x000000, 0x100000)
ROM_END
+ROM_START( popira2 )
+ ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
+ ROM_LOAD( "popira2.bin", 0x600000, 0x200000, CRC(6acd8be0) SHA1(8b6c812d37e2dc2f2531b0e47d84ad8485729dc5) )
+ ROM_RELOAD(0x000000, 0x200000)
+ROM_END
+
ROM_START( taikodp )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "taikodepopira.bin", 0x600000, 0x200000, CRC(037a8472) SHA1(03cae465965935fc084fb906f8f5de7679f42dd1) )
@@ -1713,7 +1944,7 @@ CONS( 2001, ddrfammt, 0, 0, xavix_cart_ddrfammt,ddrfammt, xavix_cart_
CONS( 2000, popira, 0, 0, xavix_cart_popira,popira, xavix_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // The original Popira is a single yellow unit
-// Popira 2 is a Green unit and a Blue Unit linked together
+CONS( 2002, popira2, 0, 0, xavix_cart_popira,popira2, xavix_popira2_cart_state, init_xavix, "Takara / SSD Company LTD", "Popira 2 (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) // Popira 2 is a set of 2 blue & green linked units (2nd unit is just a controller, no CPU or TV out)
CONS( 2003, taikodp, 0, 0, xavix_i2c_taiko, taikodp, xavix_i2c_cart_state, init_xavix, "Takara / SSD Company LTD", "Taiko De Popira (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? are the drums analog?
diff --git a/src/mame/includes/xavix.h b/src/mame/includes/xavix.h
index d8004c00817..4bb1084ec1a 100644
--- a/src/mame/includes/xavix.h
+++ b/src/mame/includes/xavix.h
@@ -122,7 +122,6 @@ public:
DECLARE_WRITE_LINE_MEMBER(ioevent_trg04);
DECLARE_WRITE_LINE_MEMBER(ioevent_trg08);
-
int m_rgnlen;
uint8_t* m_rgn;
@@ -211,6 +210,11 @@ private:
virtual void video_start() override;
+ DECLARE_WRITE8_MEMBER(debug_mem_w)
+ {
+ m_mainram[offset] = data;
+ };
+
virtual uint8_t opcodes_000000_r(offs_t offset)
{
if (offset & 0x8000)
@@ -909,6 +913,20 @@ protected:
required_device m_i2cmem;
};
+class xavix_popira2_cart_state : public xavix_cart_state
+{
+public:
+ xavix_popira2_cart_state(const machine_config &mconfig, device_type type, const char *tag)
+ : xavix_cart_state(mconfig,type,tag)
+ { }
+
+ DECLARE_CUSTOM_INPUT_MEMBER(i2c_r);
+
+protected:
+ virtual void write_io1(uint8_t data, uint8_t direction) override;
+
+};
+
class xavix_ekara_state : public xavix_cart_state
{
diff --git a/src/mame/machine/xavix.cpp b/src/mame/machine/xavix.cpp
index a3bdb7994e0..ce8cac39de5 100644
--- a/src/mame/machine/xavix.cpp
+++ b/src/mame/machine/xavix.cpp
@@ -663,6 +663,25 @@ WRITE8_MEMBER(xavix_i2c_jmat_state::write_extended_io2)
LOG("%s: io2_data_w %02x\n", machine().describe_context(), data);
}
+// the cart pins Popira 2 uses for IO with cart gc0010 are not controllable by the CPU on other ekara systems
+
+CUSTOM_INPUT_MEMBER(xavix_popira2_cart_state::i2c_r)
+{
+ if (m_cartslot->has_cart())
+ return m_cartslot->read_sda();
+ else
+ return 0x0;
+}
+
+void xavix_popira2_cart_state::write_io1(uint8_t data, uint8_t direction)
+{
+ if (m_cartslot->has_cart())
+ {
+ m_cartslot->write_sda((data & 0x08) >> 3);
+ m_cartslot->write_scl((data & 0x10) >> 4);
+ }
+}
+
/* General IO port handling */
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 58794f5e61a..88edddcdcd7 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -38741,6 +38741,7 @@ rad_crik //
rad_fb2 //
mattelcs //
dreamlif //
+icanguit //
@source:vsmile.cpp
vsmile //
@@ -39919,6 +39920,7 @@ ekaraphs //
epitch //
ddrfammt //
popira //
+popira2 //
taikodp //
ttv_sw //
ttv_lotr //