Skip to content

Commit 2e6ec79

Browse files
author
David Haywood
committed
start trying to improve superxavix IO
1 parent 045a09b commit 2e6ec79

File tree

3 files changed

+46
-37
lines changed

3 files changed

+46
-37
lines changed

src/mame/tvgames/xavix2002_io.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,11 @@ void xavix2002_io_device::pio_out_w(offs_t offset, uint8_t data)
7070
{
7171
m_sx_pio_out[offset] = data;
7272

73-
// TODO: look at direction register
74-
75-
uint8_t outdata = m_sx_pio_out[offset] & m_sx_pio_dir[offset];
76-
7773
switch (offset)
7874
{
79-
case 0: m_out0_cb(outdata); break;
80-
case 1: m_out1_cb(outdata); break;
81-
case 2: m_out2_cb(outdata); break;
75+
case 0: m_out0_cb(0, m_sx_pio_out[offset], m_sx_pio_dir[offset]); break;
76+
case 1: m_out1_cb(0, m_sx_pio_out[offset], m_sx_pio_dir[offset]); break;
77+
case 2: m_out2_cb(0, m_sx_pio_out[offset], m_sx_pio_dir[offset]); break;
8278
default: break;
8379
}
8480
}
@@ -107,13 +103,14 @@ uint8_t xavix2002_io_device::pio_in_r(offs_t offset)
107103

108104
switch (offset)
109105
{
110-
case 0: ret = m_in0_cb(); break;
111-
case 1: ret = m_in1_cb(); break;
112-
case 2: ret = m_in2_cb(); break;
106+
case 0: ret = m_in0_cb(0, m_sx_pio_dir[offset]); break;
107+
case 1: ret = m_in1_cb(0, m_sx_pio_dir[offset]); break;
108+
case 2: ret = m_in2_cb(0, m_sx_pio_dir[offset]); break;
113109
default: ret = 0x00; break;
114110
}
115111

116-
// mask with direction register before returning
112+
ret &= ~m_sx_pio_dir[offset];
113+
ret |= m_sx_pio_out[offset] & m_sx_pio_dir[offset];
117114

118115
return ret;
119116
}

src/mame/tvgames/xavix_2002.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -298,42 +298,49 @@ INPUT_PORTS_END
298298

299299
/* SuperXavix IO port handliner (per game) */
300300

301-
uint8_t superxavix_i2c_jmat_state::read_extended_io0()
301+
uint8_t superxavix_i2c_jmat_state::read_extended_io0(offs_t offset, uint8_t mem_mask)
302302
{
303303
LOG("%s: read_extended_io0\n", machine().describe_context());
304304
return 0x00;
305305
}
306306

307-
uint8_t superxavix_i2c_jmat_state::read_extended_io1()
307+
uint8_t superxavix_i2c_jmat_state::read_extended_io1(offs_t offset, uint8_t mem_mask)
308308
{
309309
LOG("%s: read_extended_io1\n", machine().describe_context());
310310

311+
uint8_t ret = 0x00;
312+
311313
// reads this by reading the byte, then shifting right 4 times to place value into carry flag
312-
return m_i2cmem->read_sda() << 3;
313-
//return 0x00;
314+
if (!(mem_mask & 0x08))
315+
ret |= m_i2cmem->read_sda() << 3;
316+
317+
return ret;
314318
}
315319

316-
uint8_t superxavix_i2c_jmat_state::read_extended_io2()
320+
uint8_t superxavix_i2c_jmat_state::read_extended_io2(offs_t offset, uint8_t mem_mask)
317321
{
318322
LOG("%s: read_extended_io2\n", machine().describe_context());
319323
return 0x00;
320324
}
321325

322-
void superxavix_i2c_jmat_state::write_extended_io0(uint8_t data)
326+
void superxavix_i2c_jmat_state::write_extended_io0(offs_t offset, uint8_t data, uint8_t mem_mask)
323327
{
324328
LOG("%s: io0_data_w %02x\n", machine().describe_context(), data);
325329
}
326330

327-
void superxavix_i2c_jmat_state::write_extended_io1(uint8_t data)
331+
void superxavix_i2c_jmat_state::write_extended_io1(offs_t offset, uint8_t data, uint8_t mem_mask)
328332
{
329333
LOG("%s: io1_data_w %02x\n", machine().describe_context(), data);
330334

331-
m_i2cmem->write_sda((data & 0x08) >> 3);
332-
m_i2cmem->write_scl((data & 0x10) >> 4);
335+
if (mem_mask & 0x08)
336+
m_i2cmem->write_sda((data & 0x08) >> 3);
337+
338+
if (mem_mask & 0x10)
339+
m_i2cmem->write_scl((data & 0x10) >> 4);
333340

334341
}
335342

336-
void superxavix_i2c_jmat_state::write_extended_io2(uint8_t data)
343+
void superxavix_i2c_jmat_state::write_extended_io2(offs_t offset, uint8_t data, uint8_t mem_mask)
337344
{
338345
LOG("%s: io2_data_w %02x\n", machine().describe_context(), data);
339346
}

src/mame/tvgames/xavix_2002.h

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ class superxavix_i2c_jmat_state : public superxavix_i2c_state
2222
void init_xavmusic();
2323

2424
private:
25-
uint8_t read_extended_io0();
26-
uint8_t read_extended_io1();
27-
uint8_t read_extended_io2();
28-
void write_extended_io0(uint8_t data);
29-
void write_extended_io1(uint8_t data);
30-
void write_extended_io2(uint8_t data);
25+
uint8_t read_extended_io0(offs_t offset, uint8_t mem_mask);
26+
uint8_t read_extended_io1(offs_t offset, uint8_t mem_mask);
27+
uint8_t read_extended_io2(offs_t offset, uint8_t mem_mask);
28+
void write_extended_io0(offs_t offset, uint8_t data, uint8_t mem_mask);
29+
void write_extended_io1(offs_t offset, uint8_t data, uint8_t mem_mask);
30+
void write_extended_io2(offs_t offset, uint8_t data, uint8_t mem_mask);
3131
};
3232

3333
class superxavix_super_tv_pc_state : public superxavix_state
@@ -49,18 +49,23 @@ class superxavix_super_tv_pc_state : public superxavix_state
4949
uint8_t stvpc_anport0_r() { return (m_mouse0x->read()^0x7f)+1; }
5050
uint8_t stvpc_anport1_r() { return (m_mouse0y->read()^0x7f)+1; }
5151

52-
uint8_t read_extended_io0() { return 0x00; }
53-
uint8_t read_extended_io1() { return 0x00; }
54-
uint8_t read_extended_io2() { return 0x00; }
55-
void write_extended_io0(uint8_t data) { logerror("%s: extio0_w %02x\n", machine().describe_context(), data); }
56-
void write_extended_io1(uint8_t data) { logerror("%s: extio1_w %02x\n", machine().describe_context(), data); }
57-
void write_extended_io2(uint8_t data)
52+
uint8_t read_extended_io0(offs_t offset, uint8_t mem_mask) { return 0x00; }
53+
uint8_t read_extended_io1(offs_t offset, uint8_t mem_mask) { return 0x00; }
54+
uint8_t read_extended_io2(offs_t offset, uint8_t mem_mask) { return 0x00; }
55+
void write_extended_io0(offs_t offset, uint8_t data, uint8_t mem_mask) { logerror("%s: extio0_w %02x\n", machine().describe_context(), data); }
56+
void write_extended_io1(offs_t offset, uint8_t data, uint8_t mem_mask) { logerror("%s: extio1_w %02x\n", machine().describe_context(), data); }
57+
void write_extended_io2(offs_t offset, uint8_t data, uint8_t mem_mask)
5858
{
5959
logerror("%s: extio2_w %02x\n", machine().describe_context(), data);
60-
if (data & 0x04)
61-
m_rombank->set_entry(1);
62-
else
63-
m_rombank->set_entry(0);
60+
{
61+
if (mem_mask & 0x04)
62+
{
63+
if (data & 0x04)
64+
m_rombank->set_entry(1);
65+
else
66+
m_rombank->set_entry(0);
67+
}
68+
}
6469
}
6570

6671
virtual void xavix_extbus_map(address_map &map) override;

0 commit comments

Comments
 (0)