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 //