@@ -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+
177193void mscbar_state::p1_port_w (uint8_t data)
178194{
179195
180196m_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
184202void 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