From ce6c7e3d44e11cd8431546e4b90f88805e85b4a4 Mon Sep 17 00:00:00 2001 From: mamehaze <140764005+mamehaze@users.noreply.github.com> Date: Sat, 13 Jan 2024 21:01:03 +0000 Subject: [PATCH] tvgames/xavix.cpp: Added Hi-kara. Also added more e-kara and evio cartridge dumps. (#11920) * tvgames/xavix_m.cpp: Removed obsolete I2C I/O hack for Excite Fishing. * ekara_japan_s.xml: Verified dump of Saiten Cartridge: Challenge Idol vol.2 (Japan) (SC0008-SAI) from a second cartridge. * ekara_japan.xml: Fixed copy/paste errors in Enkamichi cartridge titles. New systems marked not working ------------------------- Takara Tomy / SSD Company LTD Hi-Kara (Japan) [David Haywood, Team Europe] New working software list items ------------------------- ekara_japan: Enkamichi Volume 9 (Japan) (EC0064-ENK) [David Haywood, Team Europe] ekara_japan_ac: Misora Hibari PR-06 (Japan) [David Haywood, Team Europe] ekara_japan_g: TV Pop Junior Volume 3 (Japan) (GC0009-TPJ) [David Haywood, Team Europe] ekara_japan_m: Kids Song Mini Volume 2 (Japan) (MC0008-KSM) [David Haywood, Team Europe] ekara_japan_sp: Super Cartridge: Best Hit (Japan) (SP-01) [David Haywood, Team Europe] evio: Concerto Selection [David Haywood, Team Europe] hikara: Best Hit Collection Volume 1: J-Pop 1 [David Haywood, Team Europe] hikara: Best Hit Collection Volume 2: J-Pop 2 [David Haywood, Team Europe] hikara: Best Hit Collection Volume 4: Anime 1 [David Haywood, Team Europe] hikara: Hi-kara 5-song capacity user cartridge (used, with 5 songs) [David Haywood, Team Europe] --- hash/ekara_japan.xml | 28 +++++--- hash/ekara_japan_ac.xml | 23 ++++++- hash/ekara_japan_g.xml | 14 +++- hash/ekara_japan_m.xml | 14 +++- hash/ekara_japan_s.xml | 6 +- hash/ekara_japan_sp.xml | 15 ++++- hash/evio.xml | 15 ++++- hash/hikara.xml | 111 ++++++++++++++++++++++++++++++++ src/mame/mame.lst | 1 + src/mame/tvgames/xavix.cpp | 72 +++++++++++++++++++-- src/mame/tvgames/xavix.h | 46 +++++++------ src/mame/tvgames/xavix_2000.cpp | 6 +- src/mame/tvgames/xavix_2002.cpp | 5 +- src/mame/tvgames/xavix_m.cpp | 28 ++++++-- 14 files changed, 326 insertions(+), 58 deletions(-) create mode 100644 hash/hikara.xml diff --git a/hash/ekara_japan.xml b/hash/ekara_japan.xml index 9f52bd132d3..492e2051d64 100644 --- a/hash/ekara_japan.xml +++ b/hash/ekara_japan.xml @@ -145,7 +145,7 @@ license:CC0-1.0 61 *EC0061-JPM J-Pop Mix Volume 27 62 *EC0062-JPM J-Pop Mix Volume 28 63 *EC0063-JPM J-Pop Mix Volume 29 - 64 EC0064-ENK Enkamichi Volume 9 + 64 *EC0064-ENK Enkamichi 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 @@ -263,7 +263,7 @@ license:CC0-1.0 Enkamichi Volume 1 (Japan) (EC0006-ENK) 2000 Takara - + @@ -378,7 +378,7 @@ license:CC0-1.0 Enkamichi Volume 2 (Japan) (EC0016-ENK) 2000 Takara - + @@ -538,7 +538,7 @@ license:CC0-1.0 Enkamichi Volume 3 (Japan) (EC0030-ENK) 2000 Takara - + @@ -621,7 +621,7 @@ license:CC0-1.0 Enkamichi Volume 4 (Japan) (EC0037-ENK) 2001 Takara - + @@ -691,7 +691,7 @@ license:CC0-1.0 Enkamichi Volume 5 (Japan) (EC0043-ENK) 2001 Takara - + @@ -753,7 +753,7 @@ license:CC0-1.0 Enkamichi Volume 6 (Japan) (EC0048-ENK) 2001 Takara - + @@ -801,7 +801,7 @@ license:CC0-1.0 Enkamichi Volume 7 (Japan) (EC0052-ENK) 2001 Takara - + @@ -923,7 +923,17 @@ license:CC0-1.0 - + + Enkamichi Volume 9 (Japan) (EC0064-ENK) + 2001 + Takara + + + + + + + J-Pop Mix Volume 30 (Japan) (EC0065-JPM) diff --git a/hash/ekara_japan_ac.xml b/hash/ekara_japan_ac.xml index 11831681235..bac9e311b83 100644 --- a/hash/ekara_japan_ac.xml +++ b/hash/ekara_japan_ac.xml @@ -7,6 +7,8 @@ license:CC0-1.0 - - Kirarin Revolution KR-1 (Japan) (AC0009-KIR) + + Kirarin Revolution KR-1 (Japan) 2007 Takara @@ -32,4 +37,16 @@ license:CC0-1.0 + + Misora Hibari PR-06 (Japan) + 2006 + Takara + + + + + + + + diff --git a/hash/ekara_japan_g.xml b/hash/ekara_japan_g.xml index e8ea96268d5..4e83b8498b7 100644 --- a/hash/ekara_japan_g.xml +++ b/hash/ekara_japan_g.xml @@ -23,7 +23,7 @@ license:CC0-1.0 G-6 *GC0006-BHT Best Hit Volume 3 G-7 *GC0007-BAT Best Artist Volume 3 G-8 *GC0008-MIN mini-moni - G-9 GC0009-TPJ TV Pop Junior Volume 3 (Volume 2 is 'P-2' in 'P' series) + G-9 *GC0009-TPJ TV Pop Junior Volume 3 (Volume 2 is 'P-2' in 'P' series) G-10 *GC0010-BAT Best Artist Volume 4 G-11 *GC0011-TPJ TV Pop Junior Volume 4 G-12 GC0012-BHT Best Hit Volume 5 (Volume 4 is 'P-1' in 'P' series) @@ -146,6 +146,18 @@ license:CC0-1.0 + + TV Pop Junior Volume 3 (Japan) (GC0009-TPJ) + 2000 + Takara + + + + + + + + + - Saiten Cartridge: Challenge Idol vol.2 (Japan) (SC0008-SAI) + Saiten Cartridge: Challenge Idol vol.2 (Japan) (SC0008-SAI) (broken master) 2001 Takara - + diff --git a/hash/ekara_japan_sp.xml b/hash/ekara_japan_sp.xml index 03f6d6adf8e..f4912c1c544 100644 --- a/hash/ekara_japan_sp.xml +++ b/hash/ekara_japan_sp.xml @@ -25,7 +25,7 @@ license:CC0-1.0 "please play this cartridge on e-kara series, popira, popira 2, taiko de popira or jumping popira" - SP-01 'Super Cartridge' SP-01 Best Hit + *SP-01 'Super Cartridge' SP-01 Best Hit *SP-02 'Super Cartridge' SP-02 Best Hit *SP-03 'Super Cartridge' SP-03 TV Pop Junior *SP-04 'Super Cartridge' SP-04 Best Hit @@ -37,6 +37,19 @@ license:CC0-1.0 --> + + Super Cartridge: Best Hit (Japan) (SP-01) + 2004 + Takara + + + + + + + + + Super Cartridge: Best Hit (Japan) (SP-02) 2004 diff --git a/hash/evio.xml b/hash/evio.xml index ef96540d051..63d21a343dd 100644 --- a/hash/evio.xml +++ b/hash/evio.xml @@ -25,7 +25,7 @@ license:CC0-1.0 *eM10 - Anime Special - Pocket Monsters (yellow) eM11 - Anime Mix 2 *eM12 - I Love Classic 2 (brown) - eM13 - Concerto Selection + *eM13 - Concerto Selection (dark blue) eM14 - Disney Special 1 *eM15 - evio Selection 04 (translucent red) *eM16 - Chisako Takashima Selection (cream/gold) @@ -179,6 +179,19 @@ license:CC0-1.0 + + Concerto Selection + 2003 + Tomy + + + + + + + + + evio Selection 04 2003 diff --git a/hash/hikara.xml b/hash/hikara.xml new file mode 100644 index 00000000000..caff1773d0c --- /dev/null +++ b/hash/hikara.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + Hi-kara 5-song capacity user cartridge (used, with 5 songs) (Japan) + 2008 + Takara Tomy + + + + + + + + + + + + Best Hit Collection Volume 1: J-Pop 1 (Japan) + 2008 + Takara Tomy + + + + + + + + + + + + + Best Hit Collection Volume 2: J-Pop 2 (Japan) + 2008 + Takara Tomy + + + + + + + + + + + + + Best Hit Collection Volume 4: Anime Song 1 + 2008 + Takara Tomy + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4524ccfd24b..18ae8b9c980 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -45035,6 +45035,7 @@ evio // gcslottv // gungunad // has_wamg // +hikara // jarajal // jpopira // ltv_tam // diff --git a/src/mame/tvgames/xavix.cpp b/src/mame/tvgames/xavix.cpp index 023068f16b5..ee48aa9fb9e 100644 --- a/src/mame/tvgames/xavix.cpp +++ b/src/mame/tvgames/xavix.cpp @@ -808,6 +808,41 @@ static INPUT_PORTS_START( ekara ) // no 40/80 due to multiplexer code INPUT_PORTS_END +static INPUT_PORTS_START( hikara ) + PORT_INCLUDE(xavix) + + PORT_MODIFY("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(xavix_hikara_state, ekara_multi0_r) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(xavix_hikara_state, ekara_multi1_r) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(xavix_hikara_state, ekara_multi2_r) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(xavix_hikara_state, ekara_multi3_r) + + PORT_START("EXTRA0") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("Key Down") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Key Up") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("Brightness Up") + + PORT_START("EXTRA1") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("BGM Down") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("Brightness Down") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("BGM Up") + + PORT_START("EXTRA2") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Cancel") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Tempo Up") + + PORT_START("EXTRA3") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Tempo Down") +INPUT_PORTS_END + + static INPUT_PORTS_START( ddrfammt ) PORT_INCLUDE(xavix) @@ -1304,16 +1339,20 @@ static GFXDECODE_START( gfx_xavix ) GFXDECODE_ENTRY( "bios", 0, char16layout8bpp, 0, 1 ) GFXDECODE_END - -void xavix_state::xavix(machine_config &config) +void xavix_state::set_xavix_cpumaps(machine_config &config) { - /* basic machine hardware */ - XAVIX(config, m_maincpu, MAIN_CLOCK); m_maincpu->set_addrmap(AS_PROGRAM, &xavix_state::xavix_map); m_maincpu->set_addrmap(5, &xavix_state::xavix_lowbus_map); m_maincpu->set_addrmap(6, &xavix_state::xavix_extbus_map); m_maincpu->set_vblank_int("screen", FUNC(xavix_state::interrupt)); m_maincpu->set_vector_callback(FUNC(xavix_state::get_vectors)); +} + +void xavix_state::xavix(machine_config &config) +{ + /* basic machine hardware */ + XAVIX(config, m_maincpu, MAIN_CLOCK); + set_xavix_cpumaps(config); TIMER(config, "scantimer").configure_scanline(FUNC(xavix_state::scanline_cb), "screen", 0, 1); @@ -1517,6 +1556,19 @@ void xavix_cart_state::xavix_cart_ekara(machine_config &config) SOFTWARE_LIST(config, "cart_list_japan_ac").set_original("ekara_japan_ac"); } +void xavix_cart_state::xavix_cart_hikara(machine_config &config) +{ + xavix_cart(config); + + // The songs seem too slow at regular clock. It is speculated that the later + // CPU types run at ~43Mhz, so maybe this is really a XaviX 2000/2003 type chip + // with a higher clock, even if no extra opcodes are used. + m_maincpu->set_clock(MAIN_CLOCK * 2); + + /* software lists */ + SOFTWARE_LIST(config, "cart_list").set_original("hikara"); +} + void xavix_cart_state::xavix_cart_popira(machine_config &config) { xavix_cart(config); @@ -1886,6 +1938,14 @@ ROM_START( ekaramix ) ROM_RELOAD(0x000000, 0x200000) ROM_END +ROM_START( hikara ) + ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) + ROM_LOAD( "hikara.u3", 0x000000, 0x100000, CRC(6b91102a) SHA1(684dcfeaa8ac2888da2055617603494ce5fed93c) ) + ROM_RELOAD(0x600000, 0x100000) + ROM_FILL(0xed19, 1, 0xf0) // temp, bypass unknown boot check + ROM_FILL(0xed1e, 1, 0xd0) +ROM_END + ROM_START( ddrfammt ) ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) ROM_LOAD( "ekara_ddr_ha010_81947.bin", 0x600000, 0x200000, CRC(737d5d1a) SHA1(a1043047056dd27bca69767ee2044461ec549465) ) @@ -2013,7 +2073,7 @@ CONS( 2000, epo_eppk, epo_epp, 0, xavix, epo_epp, xavix_state, CONS( 2006, epo_epp3, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Challenge Ai-chan! Excite Ping Pong (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) -CONS( 200?, epo_efdx, 0, 0, xavix_i2c_24c08, epo_efdx, xavix_i2c_state, init_epo_efdx, "Epoch / SSD Company LTD", "Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 200?, epo_efdx, 0, 0, xavix_i2c_24c08, epo_efdx, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) CONS( 2005, epo_guru, 0, 0, xavix_guru, epo_guru, xavix_guru_state, init_xavix, "Epoch / SSD Company LTD", "Gururin World (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) @@ -2068,3 +2128,5 @@ CONS( 2002, gcslottv, 0, 0, xavix_cart_gcslottv, gcslottv, xavix // Let’s!TVプレイ 超にんきスポット!ころがしほーだい たまごっちりぞーと (Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort) (only on the Japanese list? http://test.shinsedai.co.jp/english/products/Applied/list.html ) This also allows you to use an IR reciever to import a Tamagotchi from compatible games CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04_tam, ltv_tam,xavix_i2c_ltv_tam_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) + +CONS( 2008, hikara, 0, 0, xavix_cart_hikara, hikara, xavix_hikara_state, init_xavix, "Takara Tomy / SSD Company LTD", "Hi-Kara (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*| MACHINE_IS_BIOS_ROOT*/ ) diff --git a/src/mame/tvgames/xavix.h b/src/mame/tvgames/xavix.h index 02d56642bfe..10a1539d14d 100644 --- a/src/mame/tvgames/xavix.h +++ b/src/mame/tvgames/xavix.h @@ -189,6 +189,9 @@ protected: virtual uint8_t read_io1(uint8_t direction); virtual void write_io0(uint8_t data, uint8_t direction); virtual void write_io1(uint8_t data, uint8_t direction); + + void set_xavix_cpumaps(machine_config &config); + required_ioport m_in0; required_ioport m_in1; required_ioport_array<8> m_an_in; @@ -607,9 +610,7 @@ class xavix_i2c_state : public xavix_state public: xavix_i2c_state(const machine_config &mconfig, device_type type, const char *tag) : xavix_state(mconfig, type, tag), - m_i2cmem(*this, "i2cmem"), - hackaddress1(-1), - hackaddress2(-1) + m_i2cmem(*this, "i2cmem") { } void xavix_i2c_24lc04(machine_config &config); @@ -624,21 +625,10 @@ public: void xavix2002_i2c_24c04(machine_config &config); void xavix2002_i2c_mrangbat(machine_config& config); - void init_epo_efdx() - { - init_xavix(); - hackaddress1 = 0x958a; - hackaddress2 = 0x8524; - } - protected: virtual void write_io1(uint8_t data, uint8_t direction) override; required_device m_i2cmem; - -private: - int hackaddress1; - int hackaddress2; }; class xavix_i2c_ltv_tam_state : public xavix_i2c_state @@ -725,6 +715,7 @@ public: void xavix_cart_popira(machine_config &config); void xavix_cart_ddrfammt(machine_config &config); void xavix_cart_evio(machine_config &config); + void xavix_cart_hikara(machine_config &config); protected: @@ -969,10 +960,8 @@ public: m_extraiowrite(0) { } - int ekara_multi0_r(); - int ekara_multi1_r(); - -// void xavix_ekara(machine_config &config); + virtual int ekara_multi0_r(); + virtual int ekara_multi1_r(); protected: @@ -986,5 +975,26 @@ protected: uint8_t m_extraiowrite; }; +class xavix_hikara_state : public xavix_ekara_state +{ +public: + xavix_hikara_state(const machine_config &mconfig, device_type type, const char *tag) + : xavix_ekara_state(mconfig, type, tag), + m_extra2(*this, "EXTRA2"), + m_extra3(*this, "EXTRA3") + { } + + virtual int ekara_multi0_r() override; + virtual int ekara_multi1_r() override; + int ekara_multi2_r(); + int ekara_multi3_r(); + +protected: + + required_ioport m_extra2; + required_ioport m_extra3; + +}; + #endif // MAME_TVGAMES_XAVIX_H diff --git a/src/mame/tvgames/xavix_2000.cpp b/src/mame/tvgames/xavix_2000.cpp index 76f9ae14dbb..8938811eb01 100644 --- a/src/mame/tvgames/xavix_2000.cpp +++ b/src/mame/tvgames/xavix_2000.cpp @@ -189,11 +189,7 @@ void xavix_state::xavix2000(machine_config &config) xavix(config); XAVIX2000(config.replace(), m_maincpu, MAIN_CLOCK); - m_maincpu->set_addrmap(AS_PROGRAM, &xavix_state::xavix_map); - m_maincpu->set_addrmap(5, &xavix_state::xavix_lowbus_map); - m_maincpu->set_addrmap(6, &xavix_state::xavix_extbus_map); - m_maincpu->set_vblank_int("screen", FUNC(xavix_state::interrupt)); - m_maincpu->set_vector_callback(FUNC(xavix_state::get_vectors)); + set_xavix_cpumaps(config); m_palette->set_entries(512); } diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp index 7edb605b4ca..43661581063 100644 --- a/src/mame/tvgames/xavix_2002.cpp +++ b/src/mame/tvgames/xavix_2002.cpp @@ -324,11 +324,8 @@ void xavix_state::xavix2002(machine_config &config) xavix(config); XAVIX2002(config.replace(), m_maincpu, MAIN_CLOCK); - m_maincpu->set_addrmap(AS_PROGRAM, &xavix_state::xavix_map); + set_xavix_cpumaps(config); m_maincpu->set_addrmap(5, &xavix_state::superxavix_lowbus_map); // has extra video, io etc. - m_maincpu->set_addrmap(6, &xavix_state::xavix_extbus_map); - m_maincpu->set_vblank_int("screen", FUNC(xavix_state::interrupt)); - m_maincpu->set_vector_callback(FUNC(xavix_state::get_vectors)); m_palette->set_entries(512); diff --git a/src/mame/tvgames/xavix_m.cpp b/src/mame/tvgames/xavix_m.cpp index db0107dacba..6d9ed194ad9 100644 --- a/src/mame/tvgames/xavix_m.cpp +++ b/src/mame/tvgames/xavix_m.cpp @@ -416,6 +416,27 @@ int xavix_ekara_state::ekara_multi1_r() return 0x00; } +int xavix_hikara_state::ekara_multi0_r() +{ + return (m_extraioselect & m_extra0->read() & 0x0e) ? 0x01 : 0x00; +} + +int xavix_hikara_state::ekara_multi1_r() +{ + return (m_extraioselect & m_extra1->read() & 0x0e) ? 0x01 : 0x00; +} + +int xavix_hikara_state::ekara_multi2_r() +{ + return (m_extraioselect & m_extra2->read() & 0x0e) ? 0x01 : 0x00; +} + +int xavix_hikara_state::ekara_multi3_r() +{ + return (m_extraioselect & m_extra3->read() & 0x0e) ? 0x01 : 0x00; +} + + uint8_t xavix_state::read_io0(uint8_t direction) { // LOG("%s: read_io0\n", machine().describe_context()); @@ -444,13 +465,6 @@ void xavix_state::write_io1(uint8_t data, uint8_t direction) void xavix_i2c_state::write_io1(uint8_t data, uint8_t direction) { - // ignore these writes so that epo_edfx can send read requests to the ee-prom and doesn't just report an error - // TODO: check if these writes shouldn't be happening (the first is a direct write, the 2nd is from a port direction change) - // or if the i2cmem code is oversensitive, or if something else is missing to reset the state - if (hackaddress1 != -1) - if ((m_maincpu->pc() == hackaddress1) || (m_maincpu->pc() == hackaddress2)) - return; - if (direction & 0x08) { m_i2cmem->write_sda((data & 0x08) >> 3);