mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
revert some refactoring changes for now, cause more problems than they solve (nw)
This commit is contained in:
parent
10bb978312
commit
10b63ef454
@ -358,8 +358,10 @@ void xavix_state::xavix_lowbus_map(address_map &map)
|
|||||||
map(0x7986, 0x7987).ram().w(FUNC(xavix_state::rom_dmalen_w)).share("rom_dma_len");
|
map(0x7986, 0x7987).ram().w(FUNC(xavix_state::rom_dmalen_w)).share("rom_dma_len");
|
||||||
|
|
||||||
// IO Ports
|
// IO Ports
|
||||||
map(0x7a00, 0x7a01).rw("xavixio", FUNC(xavix_io_device::xav_7a0x_dat_r), FUNC(xavix_io_device::xav_7a0x_dat_w));
|
map(0x7a00, 0x7a00).rw(FUNC(xavix_state::io0_data_r), FUNC(xavix_state::io0_data_w));
|
||||||
map(0x7a02, 0x7a03).rw("xavixio", FUNC(xavix_io_device::xav_7a0x_dir_r), FUNC(xavix_io_device::xav_7a0x_dir_w));
|
map(0x7a01, 0x7a01).rw(FUNC(xavix_state::io1_data_r), FUNC(xavix_state::io1_data_w));
|
||||||
|
map(0x7a02, 0x7a02).rw(FUNC(xavix_state::io0_direction_r), FUNC(xavix_state::io0_direction_w));
|
||||||
|
map(0x7a03, 0x7a03).rw(FUNC(xavix_state::io1_direction_r), FUNC(xavix_state::io1_direction_w));
|
||||||
|
|
||||||
// IO Event Interrupt control
|
// IO Event Interrupt control
|
||||||
map(0x7a80, 0x7a80).rw(FUNC(xavix_state::ioevent_enable_r), FUNC(xavix_state::ioevent_enable_w));
|
map(0x7a80, 0x7a80).rw(FUNC(xavix_state::ioevent_enable_r), FUNC(xavix_state::ioevent_enable_w));
|
||||||
@ -1027,10 +1029,6 @@ void xavix_state::xavix(machine_config &config)
|
|||||||
|
|
||||||
PALETTE(config, m_palette, palette_device::BLACK, 256);
|
PALETTE(config, m_palette, palette_device::BLACK, 256);
|
||||||
|
|
||||||
XAVIXIO(config, m_xavio, 0);
|
|
||||||
m_xavio->read_0_callback().set_ioport("IN0");
|
|
||||||
m_xavio->read_1_callback().set_ioport("IN1");
|
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
|
|
||||||
//SPEAKER(config, "mono").front_center();
|
//SPEAKER(config, "mono").front_center();
|
||||||
@ -1049,9 +1047,6 @@ void xavix_i2c_state::xavix_i2c_24lc02(machine_config &config)
|
|||||||
{
|
{
|
||||||
xavix(config);
|
xavix(config);
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_state::read_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_state::write_io1));
|
|
||||||
|
|
||||||
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x100); // 24LC02 (taiko)
|
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x100); // 24LC02 (taiko)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1059,9 +1054,6 @@ void xavix_i2c_state::xavix_i2c_24c02(machine_config &config)
|
|||||||
{
|
{
|
||||||
xavix(config);
|
xavix(config);
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_state::read_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_state::write_io1));
|
|
||||||
|
|
||||||
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24C02
|
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24C02
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1069,9 +1061,6 @@ void xavix_i2c_state::xavix_i2c_24lc04(machine_config &config)
|
|||||||
{
|
{
|
||||||
xavix(config);
|
xavix(config);
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_state::read_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_state::write_io1));
|
|
||||||
|
|
||||||
// according to http://ww1.microchip.com/downloads/en/devicedoc/21708k.pdf 'the master transmits up to 16 data bytes' however this breaks the Nostalgia games
|
// according to http://ww1.microchip.com/downloads/en/devicedoc/21708k.pdf 'the master transmits up to 16 data bytes' however this breaks the Nostalgia games
|
||||||
// of note Galplus Phalanx on Namco Nostalgia 2, which will hang between stages unable to properly access the device, but with no page support it doesn't hang and scores save
|
// of note Galplus Phalanx on Namco Nostalgia 2, which will hang between stages unable to properly access the device, but with no page support it doesn't hang and scores save
|
||||||
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x200); // 24LC04 on Nostalgia games, 24C04 on others
|
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x200); // 24LC04 on Nostalgia games, 24C04 on others
|
||||||
@ -1081,9 +1070,6 @@ void xavix_i2c_state::xavix_i2c_24c08(machine_config &config)
|
|||||||
{
|
{
|
||||||
xavix(config);
|
xavix(config);
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_state::read_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_state::write_io1));
|
|
||||||
|
|
||||||
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x400); // 24C08 (Excite Fishing DX)
|
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x400); // 24C08 (Excite Fishing DX)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1152,9 +1138,6 @@ void xavix_i2c_state::xavix2000_i2c_24c04(machine_config &config)
|
|||||||
{
|
{
|
||||||
xavix2000(config);
|
xavix2000(config);
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_state::read_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_state::write_io1));
|
|
||||||
|
|
||||||
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24C04
|
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24C04
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1162,20 +1145,9 @@ void xavix_i2c_state::xavix2000_i2c_24c02(machine_config &config)
|
|||||||
{
|
{
|
||||||
xavix2000(config);
|
xavix2000(config);
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_state::read_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_state::write_io1));
|
|
||||||
|
|
||||||
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24C02
|
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24C02
|
||||||
}
|
}
|
||||||
|
|
||||||
void xavix_i2c_lotr_state::xavix2000_i2c_24c02_lotr(machine_config &config)
|
|
||||||
{
|
|
||||||
xavix2000_i2c_24c02(config);
|
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_lotr_state::read_lotr_io1));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void xavix_mtrk_state::xavix_mtrk(machine_config &config)
|
void xavix_mtrk_state::xavix_mtrk(machine_config &config)
|
||||||
{
|
{
|
||||||
xavix(config);
|
xavix(config);
|
||||||
@ -1216,13 +1188,10 @@ void xavix_i2c_cart_state::xavix_i2c_taiko(machine_config &config)
|
|||||||
SOFTWARE_LIST(config, "cart_list_japan_d").set_original("ekara_japan_d");
|
SOFTWARE_LIST(config, "cart_list_japan_d").set_original("ekara_japan_d");
|
||||||
SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
|
SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_cart_state::read_cart_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_cart_state::write_cart_io1));
|
|
||||||
|
|
||||||
// do any of the later G/P series carts with SEEPROM work with this too? check
|
// do any of the later G/P series carts with SEEPROM work with this too? check
|
||||||
}
|
}
|
||||||
|
|
||||||
void xavix_ekara_state::xavix_cart_ekara(machine_config &config)
|
void xavix_cart_state::xavix_cart_ekara(machine_config &config)
|
||||||
{
|
{
|
||||||
xavix_cart(config);
|
xavix_cart(config);
|
||||||
|
|
||||||
@ -1238,10 +1207,6 @@ void xavix_ekara_state::xavix_cart_ekara(machine_config &config)
|
|||||||
SOFTWARE_LIST(config, "cart_list_japan_en").set_original("ekara_japan_en");
|
SOFTWARE_LIST(config, "cart_list_japan_en").set_original("ekara_japan_en");
|
||||||
SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
|
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_web").set_original("ekara_japan_web");
|
||||||
|
|
||||||
m_xavio->write_0_callback().set(FUNC(xavix_ekara_state::write_ekara_io0));
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_ekara_state::read_ekara_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_ekara_state::write_ekara_io1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void xavix_cart_state::xavix_cart_popira(machine_config &config)
|
void xavix_cart_state::xavix_cart_popira(machine_config &config)
|
||||||
@ -1273,9 +1238,6 @@ void xavix_i2c_state::xavix2002_i2c_24c04(machine_config &config)
|
|||||||
{
|
{
|
||||||
xavix2002(config);
|
xavix2002(config);
|
||||||
|
|
||||||
m_xavio->read_1_callback().set(FUNC(xavix_i2c_state::read_io1));
|
|
||||||
m_xavio->write_1_callback().set(FUNC(xavix_i2c_state::write_io1));
|
|
||||||
|
|
||||||
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24C04
|
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24C04
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1611,10 +1573,10 @@ ROM_END
|
|||||||
|
|
||||||
CONS( 2004, epo_sdb, 0, 0, xavix2000_nv, epo_sdb, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Super Dash Ball (Japan)", MACHINE_IMPERFECT_SOUND )
|
CONS( 2004, epo_sdb, 0, 0, xavix2000_nv, epo_sdb, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Super Dash Ball (Japan)", MACHINE_IMPERFECT_SOUND )
|
||||||
|
|
||||||
CONS( 2005, ttv_sw, 0, 0, xavix2000_i2c_24c02_lotr, xavix, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Star Wars Saga Edition - Lightsaber Battle Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
CONS( 2005, ttv_sw, 0, 0, xavix2000_i2c_24c02, xavix, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Star Wars Saga Edition - Lightsaber Battle Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
||||||
CONS( 2005, ttv_lotr, 0, 0, xavix2000_i2c_24c02_lotr, xavix, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Lord Of The Rings - Warrior of Middle-Earth", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
CONS( 2005, ttv_lotr, 0, 0, xavix2000_i2c_24c02, xavix, xavix_i2c_lotr_state, init_xavix, "Tiger / SSD Company LTD", "Lord Of The Rings - Warrior of Middle-Earth", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
||||||
CONS( 2005, ttv_mx, 0, 0, xavix2000_i2c_24c04, ttv_mx, xavix_i2c_state, init_xavix, "Tiger / SSD Company LTD", "MX Dirt Rebel", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
CONS( 2005, ttv_mx, 0, 0, xavix2000_i2c_24c04, ttv_mx, xavix_i2c_state, init_xavix, "Tiger / SSD Company LTD", "MX Dirt Rebel", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
||||||
CONS( 2003, drgqst, 0, 0, xavix2000_i2c_24c02_lotr, xavix, xavix_i2c_lotr_state, init_xavix, "Square Enix / SSD Company LTD", "Kenshin Dragon Quest: Yomigaerishi Densetsu no Ken", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
CONS( 2003, drgqst, 0, 0, xavix2000_i2c_24c02, xavix , xavix_i2c_lotr_state, init_xavix, "Square Enix / SSD Company LTD", "Kenshin Dragon Quest: Yomigaerishi Densetsu no Ken", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
||||||
|
|
||||||
/* SuperXaviX (XaviX 2002 type CPU) hardware titles (3rd XaviX generation?)
|
/* SuperXaviX (XaviX 2002 type CPU) hardware titles (3rd XaviX generation?)
|
||||||
|
|
||||||
|
@ -77,7 +77,6 @@ public:
|
|||||||
m_mouse1x(*this, "MOUSE1X"),
|
m_mouse1x(*this, "MOUSE1X"),
|
||||||
m_mouse1y(*this, "MOUSE1Y"),
|
m_mouse1y(*this, "MOUSE1Y"),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_xavio(*this, "xavixio"),
|
|
||||||
m_nvram(*this, "nvram"),
|
m_nvram(*this, "nvram"),
|
||||||
m_screen(*this, "screen"),
|
m_screen(*this, "screen"),
|
||||||
m_lowbus(*this, "lowbus"),
|
m_lowbus(*this, "lowbus"),
|
||||||
@ -172,10 +171,10 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//virtual uint8_t read_io0(uint8_t direction);
|
virtual uint8_t read_io0(uint8_t direction);
|
||||||
//virtual uint8_t read_io1(uint8_t direction);
|
virtual uint8_t read_io1(uint8_t direction);
|
||||||
//virtual void write_io0(uint8_t data, uint8_t direction);
|
virtual void write_io0(uint8_t data, uint8_t direction);
|
||||||
//virtual void write_io1(uint8_t data, uint8_t direction);
|
virtual void write_io1(uint8_t data, uint8_t direction);
|
||||||
required_ioport m_in0;
|
required_ioport m_in0;
|
||||||
required_ioport m_in1;
|
required_ioport m_in1;
|
||||||
required_ioport_array<8> m_an_in;
|
required_ioport_array<8> m_an_in;
|
||||||
@ -184,10 +183,6 @@ protected:
|
|||||||
optional_ioport m_mouse1x;
|
optional_ioport m_mouse1x;
|
||||||
optional_ioport m_mouse1y;
|
optional_ioport m_mouse1y;
|
||||||
required_device<xavix_device> m_maincpu;
|
required_device<xavix_device> m_maincpu;
|
||||||
required_device<xavix_io_device> m_xavio;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
optional_device<nvram_device> m_nvram;
|
optional_device<nvram_device> m_nvram;
|
||||||
required_device<screen_device> m_screen;
|
required_device<screen_device> m_screen;
|
||||||
required_device<address_map_bank_device> m_lowbus;
|
required_device<address_map_bank_device> m_lowbus;
|
||||||
@ -309,6 +304,21 @@ private:
|
|||||||
DECLARE_WRITE8_MEMBER(spritefragment_dma_trg_w);
|
DECLARE_WRITE8_MEMBER(spritefragment_dma_trg_w);
|
||||||
DECLARE_READ8_MEMBER(spritefragment_dma_status_r);
|
DECLARE_READ8_MEMBER(spritefragment_dma_status_r);
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER(io0_data_r);
|
||||||
|
DECLARE_READ8_MEMBER(io1_data_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(io0_data_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(io1_data_w);
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER(io0_direction_r);
|
||||||
|
DECLARE_READ8_MEMBER(io1_direction_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(io0_direction_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(io1_direction_w);
|
||||||
|
|
||||||
|
uint8_t m_io0_data;
|
||||||
|
uint8_t m_io1_data;
|
||||||
|
uint8_t m_io0_direction;
|
||||||
|
uint8_t m_io1_direction;
|
||||||
|
|
||||||
uint8_t m_adc_inlatch;
|
uint8_t m_adc_inlatch;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(nmi_vector_lo_r);
|
DECLARE_READ8_MEMBER(nmi_vector_lo_r);
|
||||||
@ -599,8 +609,8 @@ public:
|
|||||||
hackaddress2 = 0x8524;
|
hackaddress2 = 0x8524;
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
DECLARE_READ8_MEMBER(read_io1);
|
virtual uint8_t read_io1(uint8_t direction) override;
|
||||||
DECLARE_WRITE8_MEMBER(write_io1);
|
virtual void write_io1(uint8_t data, uint8_t direction) override;
|
||||||
|
|
||||||
required_device<i2cmem_device> m_i2cmem;
|
required_device<i2cmem_device> m_i2cmem;
|
||||||
|
|
||||||
@ -632,10 +642,9 @@ public:
|
|||||||
: xavix_i2c_state(mconfig, type, tag)
|
: xavix_i2c_state(mconfig, type, tag)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void xavix2000_i2c_24c02_lotr(machine_config &config);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DECLARE_READ8_MEMBER(read_lotr_io1);
|
virtual uint8_t read_io1(uint8_t direction) override;
|
||||||
|
//virtual void write_io1(uint8_t data, uint8_t direction) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -681,6 +690,7 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
void xavix_cart(machine_config &config);
|
void xavix_cart(machine_config &config);
|
||||||
|
void xavix_cart_ekara(machine_config &config);
|
||||||
void xavix_cart_popira(machine_config &config);
|
void xavix_cart_popira(machine_config &config);
|
||||||
void xavix_cart_ddrfammt(machine_config &config);
|
void xavix_cart_ddrfammt(machine_config &config);
|
||||||
|
|
||||||
@ -842,8 +852,8 @@ public:
|
|||||||
void xavix_i2c_taiko(machine_config &config);
|
void xavix_i2c_taiko(machine_config &config);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DECLARE_READ8_MEMBER(read_cart_io1);
|
virtual uint8_t read_io1(uint8_t direction) override;
|
||||||
DECLARE_WRITE8_MEMBER(write_cart_io1);
|
virtual void write_io1(uint8_t data, uint8_t direction) override;
|
||||||
|
|
||||||
required_device<i2cmem_device> m_i2cmem;
|
required_device<i2cmem_device> m_i2cmem;
|
||||||
};
|
};
|
||||||
@ -861,16 +871,15 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
// void xavix_ekara(machine_config &config);
|
// void xavix_ekara(machine_config &config);
|
||||||
void xavix_cart_ekara(machine_config &config);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
required_ioport m_extra0;
|
required_ioport m_extra0;
|
||||||
required_ioport m_extra1;
|
required_ioport m_extra1;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(read_ekara_io1);
|
virtual uint8_t read_io1(uint8_t direction) override;
|
||||||
DECLARE_WRITE8_MEMBER(write_ekara_io0);
|
virtual void write_io0(uint8_t data, uint8_t direction) override;
|
||||||
DECLARE_WRITE8_MEMBER(write_ekara_io1);
|
virtual void write_io1(uint8_t data, uint8_t direction) override;
|
||||||
|
|
||||||
uint8_t m_extraioselect;
|
uint8_t m_extraioselect;
|
||||||
uint8_t m_extraiowrite;
|
uint8_t m_extraiowrite;
|
||||||
|
@ -488,15 +488,42 @@ WRITE8_MEMBER(xavix_state::dispctrl_posirq_y_w)
|
|||||||
|
|
||||||
/* Per Game IO port callbacks */
|
/* Per Game IO port callbacks */
|
||||||
|
|
||||||
READ8_MEMBER(xavix_i2c_state::read_io1)
|
uint8_t xavix_state::read_io0(uint8_t direction)
|
||||||
|
{
|
||||||
|
// no special handling
|
||||||
|
return m_in0->read();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t xavix_state::read_io1(uint8_t direction)
|
||||||
|
{
|
||||||
|
// no special handling
|
||||||
|
return m_in1->read();
|
||||||
|
}
|
||||||
|
|
||||||
|
void xavix_state::write_io0(uint8_t data, uint8_t direction)
|
||||||
|
{
|
||||||
|
// no special handling
|
||||||
|
}
|
||||||
|
|
||||||
|
void xavix_state::write_io1(uint8_t data, uint8_t direction)
|
||||||
|
{
|
||||||
|
// no special handling
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t xavix_i2c_state::read_io1(uint8_t direction)
|
||||||
{
|
{
|
||||||
uint8_t ret = m_in1->read();
|
uint8_t ret = m_in1->read();
|
||||||
ret &= ~0x08;
|
|
||||||
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
if (!(direction & 0x08))
|
||||||
|
{
|
||||||
|
ret &= ~0x08;
|
||||||
|
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(xavix_i2c_state::write_io1)
|
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
|
// 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)
|
// TODO: check if these writes shouldn't be happening (the first is a direct write, the 2nd is from a port direction change)
|
||||||
@ -505,28 +532,46 @@ WRITE8_MEMBER(xavix_i2c_state::write_io1)
|
|||||||
if ((m_maincpu->pc() == hackaddress1) || (m_maincpu->pc() == hackaddress2))
|
if ((m_maincpu->pc() == hackaddress1) || (m_maincpu->pc() == hackaddress2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_i2cmem->write_sda((data & 0x08) >> 3);
|
if (direction & 0x08)
|
||||||
m_i2cmem->write_scl((data & 0x10) >> 4);
|
{
|
||||||
|
m_i2cmem->write_sda((data & 0x08) >> 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (direction & 0x10)
|
||||||
|
{
|
||||||
|
m_i2cmem->write_scl((data & 0x10) >> 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// for taikodp
|
// for taikodp
|
||||||
READ8_MEMBER(xavix_i2c_cart_state::read_cart_io1)
|
uint8_t xavix_i2c_cart_state::read_io1(uint8_t direction)
|
||||||
{
|
{
|
||||||
uint8_t ret = m_in1->read();
|
uint8_t ret = m_in1->read();
|
||||||
ret &= ~0x08;
|
|
||||||
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
if (!(direction & 0x08))
|
||||||
|
{
|
||||||
|
ret &= ~0x08;
|
||||||
|
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(xavix_i2c_cart_state::write_cart_io1)
|
void xavix_i2c_cart_state::write_io1(uint8_t data, uint8_t direction)
|
||||||
{
|
{
|
||||||
m_i2cmem->write_sda((data & 0x08) >> 3);
|
if (direction & 0x08)
|
||||||
m_i2cmem->write_scl((data & 0x10) >> 4);
|
{
|
||||||
|
m_i2cmem->write_sda((data & 0x08) >> 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (direction & 0x10)
|
||||||
|
{
|
||||||
|
m_i2cmem->write_scl((data & 0x10) >> 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
READ8_MEMBER(xavix_i2c_lotr_state::read_lotr_io1)
|
uint8_t xavix_i2c_lotr_state::read_io1(uint8_t direction)
|
||||||
{
|
{
|
||||||
uint8_t ret = m_in1->read();
|
uint8_t ret = m_in1->read();
|
||||||
|
|
||||||
@ -534,13 +579,16 @@ READ8_MEMBER(xavix_i2c_lotr_state::read_lotr_io1)
|
|||||||
ret ^= (machine().rand() & 0x02);
|
ret ^= (machine().rand() & 0x02);
|
||||||
ret ^= (machine().rand() & 0x04);
|
ret ^= (machine().rand() & 0x04);
|
||||||
|
|
||||||
ret &= ~0x08;
|
if (!(direction & 0x08))
|
||||||
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
{
|
||||||
|
ret &= ~0x08;
|
||||||
|
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(xavix_ekara_state::read_ekara_io1)
|
uint8_t xavix_ekara_state::read_io1(uint8_t direction)
|
||||||
{
|
{
|
||||||
uint8_t extrainlatch0 = 0x00;
|
uint8_t extrainlatch0 = 0x00;
|
||||||
uint8_t extrainlatch1 = 0x00;
|
uint8_t extrainlatch1 = 0x00;
|
||||||
@ -587,18 +635,74 @@ READ8_MEMBER(xavix_ekara_state::read_ekara_io1)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(xavix_ekara_state::write_ekara_io0)
|
void xavix_ekara_state::write_io0(uint8_t data, uint8_t direction)
|
||||||
{
|
{
|
||||||
// is bit 0x80 an enable for something else? LED? Microphone? it doesn't seem related to the multiplexing
|
// is bit 0x80 an enable for something else? LED? Microphone? it doesn't seem related to the multiplexing
|
||||||
m_extraioselect = data;
|
m_extraioselect = data & direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(xavix_ekara_state::write_ekara_io1)
|
void xavix_ekara_state::write_io1(uint8_t data, uint8_t direction)
|
||||||
{
|
{
|
||||||
uint8_t extraiowrite = data;
|
uint8_t extraiowrite = data & direction;
|
||||||
m_extraiowrite = extraiowrite;
|
m_extraiowrite = extraiowrite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* General IO port handling */
|
||||||
|
|
||||||
|
READ8_MEMBER(xavix_state::io0_data_r)
|
||||||
|
{
|
||||||
|
uint8_t ret = read_io0(m_io0_direction) & ~m_io0_direction;
|
||||||
|
ret |= m_io0_data & m_io0_direction;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(xavix_state::io1_data_r)
|
||||||
|
{
|
||||||
|
uint8_t ret = read_io1(m_io1_direction) & ~m_io1_direction;
|
||||||
|
ret |= m_io1_data & m_io1_direction;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(xavix_state::io0_direction_r)
|
||||||
|
{
|
||||||
|
return m_io0_direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(xavix_state::io1_direction_r)
|
||||||
|
{
|
||||||
|
return m_io1_direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(xavix_state::io0_data_w)
|
||||||
|
{
|
||||||
|
m_io0_data = data;
|
||||||
|
write_io0(data, m_io0_direction);
|
||||||
|
LOG("%s: io0_data_w %02x\n", machine().describe_context(), data);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(xavix_state::io1_data_w)
|
||||||
|
{
|
||||||
|
m_io1_data = data;
|
||||||
|
write_io1(data, m_io1_direction);
|
||||||
|
LOG("%s: io1_data_w %02x\n", machine().describe_context(), data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(xavix_state::io0_direction_w)
|
||||||
|
{
|
||||||
|
m_io0_direction = data;
|
||||||
|
LOG("%s: io0_direction_w %02x\n", machine().describe_context(), data);
|
||||||
|
io0_data_w(space, 0, m_io0_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(xavix_state::io1_direction_w)
|
||||||
|
{
|
||||||
|
m_io1_direction = data;
|
||||||
|
LOG("%s: io1_direction_w %02x\n", machine().describe_context(), data);
|
||||||
|
io1_data_w(space, 0, m_io1_data); // requires this for i2cmem to work, is it correct tho?
|
||||||
|
}
|
||||||
|
|
||||||
/* Arena (Visible Area + hblank?) handling */
|
/* Arena (Visible Area + hblank?) handling */
|
||||||
|
|
||||||
READ8_MEMBER(xavix_state::arena_start_r)
|
READ8_MEMBER(xavix_state::arena_start_r)
|
||||||
@ -936,6 +1040,10 @@ void xavix_state::machine_start()
|
|||||||
save_item(NAME(m_extbusctrl));
|
save_item(NAME(m_extbusctrl));
|
||||||
save_item(NAME(m_ioevent_enable));
|
save_item(NAME(m_ioevent_enable));
|
||||||
save_item(NAME(m_ioevent_active));
|
save_item(NAME(m_ioevent_active));
|
||||||
|
save_item(NAME(m_io0_data));
|
||||||
|
save_item(NAME(m_io1_data));
|
||||||
|
save_item(NAME(m_io0_direction));
|
||||||
|
save_item(NAME(m_io1_direction));
|
||||||
save_item(NAME(m_adc_control));
|
save_item(NAME(m_adc_control));
|
||||||
save_item(NAME(m_sound_irqstatus));
|
save_item(NAME(m_sound_irqstatus));
|
||||||
save_item(NAME(m_soundreg16_0));
|
save_item(NAME(m_soundreg16_0));
|
||||||
@ -1019,6 +1127,12 @@ void xavix_state::machine_reset()
|
|||||||
|
|
||||||
//m_lowbus->set_bank(0);
|
//m_lowbus->set_bank(0);
|
||||||
|
|
||||||
|
m_io0_data = 0x00;
|
||||||
|
m_io1_data = 0x00;
|
||||||
|
|
||||||
|
m_io0_direction = 0x00;
|
||||||
|
m_io1_direction = 0x00;
|
||||||
|
|
||||||
m_irqsource = 0x00;
|
m_irqsource = 0x00;
|
||||||
|
|
||||||
m_timer_control = 0x00;
|
m_timer_control = 0x00;
|
||||||
|
Loading…
Reference in New Issue
Block a user