Skip to content

Commit 84ce387

Browse files
authored
add meter counter code from marywu
currently not tested.
1 parent ace9f9c commit 84ce387

1 file changed

Lines changed: 29 additions & 5 deletions

File tree

src/mame/misc/mscbar.cpp

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class mscbar_state : public driver_device
7171
, m_inputs(*this, { "KEYS1", "KEYS2", "DSW", "PUSHBUTTONS" })
7272
, m_oki(*this, "oki")
7373
, m_hopper(*this, "hopper")
74+
, m_p1(*this, "P1")
7475

7576
{ }
7677

@@ -87,15 +88,17 @@ class mscbar_state : public driver_device
8788
void ay1_port_b_w(uint8_t data);
8889
void ay2_port_a_w(uint8_t data);
8990
void ay2_port_b_w(uint8_t data);
90-
void p3_port_w(uint8_t data);
91-
void p1_port_w(uint8_t data);
9291

92+
void p1_port_w(uint8_t data);
93+
void p3_port_w(uint8_t data);
94+
uint8_t p1_port_r();
9395
uint8_t keyboard_r();
9496
void mscbar_data_map(address_map &map) ATTR_COLD;
9597
void mscbar_program_map(address_map &map) ATTR_COLD;
9698

9799
uint8_t m_selected_7seg_module = 0;
98-
100+
uint8_t m_p1_out = 0xff;
101+
99102
output_finder<32> m_digits;
100103
output_finder<34> m_leds;
101104
required_ioport_array<4> m_inputs;
@@ -174,11 +177,26 @@ void mscbar_state::ay2_port_b_w(uint8_t data)
174177
for (uint8_t i = 0; i < 6; i++)
175178
m_leds[i + 24] = BIT(~data, i);
176179
}
180+
181+
uint8_t mscbar_state::p1_port_r()
182+
{
183+
// meter feedback is read here. Fails with error 02 if it doesn't get the expected value.
184+
uint8_t const ioport_val = m_p1->read();
185+
uint8_t meter_fb = 0x00;
186+
187+
if (!BIT(m_p1_out, 0))
188+
meter_fb = (BIT(m_p1_out, 1) << 4) | (BIT(m_p1_out, 2) << 5);
189+
190+
return (ioport_val & 0xcf) | meter_fb;
191+
}
192+
177193
void mscbar_state::p1_port_w(uint8_t data)
178194
{
179195

180196
m_hopper->motor_w(BIT(data, 3));
181-
machine().bookkeeping().coin_counter_w(0, data & 0x80);
197+
// machine().bookkeeping().coin_counter_w(0, data & 0x80);
198+
m_p1_out = data;
199+
182200
}
183201

184202
void mscbar_state::p3_port_w(uint8_t data) // bit 3 and 5 are used.
@@ -246,10 +264,14 @@ void mscbar_state::mscbar(machine_config &config)
246264
i80c51_device &maincpu(I80C51(config, "maincpu", XTAL(10'738'000))); // actual cpu is at89c51
247265
maincpu.set_addrmap(AS_PROGRAM, &mscbar_state::mscbar_program_map);
248266
maincpu.set_addrmap(AS_DATA, &mscbar_state::mscbar_data_map);
267+
268+
249269
maincpu.port_in_cb<1>().set_ioport("P1");
270+
maincpu.port_in_cb<1>().set(FUNC(mscbar_state::p1_port_r));
250271
maincpu.port_out_cb<1>().set(FUNC(mscbar_state::p1_port_w));
251-
maincpu.port_out_cb<3>().set(FUNC(mscbar_state::p3_port_w));
252272
maincpu.port_in_cb<3>().set_ioport("P3");
273+
maincpu.port_out_cb<3>().set(FUNC(mscbar_state::p3_port_w));
274+
253275

254276
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
255277
HOPPER(config, m_hopper, attotime::from_msec(100));
@@ -282,6 +304,8 @@ void mscbar_state::machine_start()
282304
{
283305
m_digits.resolve();
284306
m_leds.resolve();
307+
save_item(NAME(m_selected_7seg_module));
308+
save_item(NAME(m_p1_out));
285309

286310
}
287311

0 commit comments

Comments
 (0)