Previous 199869 Revisions Next

r22703 Wednesday 8th May, 2013 at 12:51:58 UTC by Robbbert
(MESS) D6800: bit more work
[src/mess/drivers]d6800.c

trunk/src/mess/drivers/d6800.c
r22702r22703
9292   required_ioport m_io_shift;
9393private:
9494   UINT8 m_rtc;
95   bool m_screen_on;
95   bool m_ca1;
96   bool m_ca2;
97   bool m_cb1;
98   bool m_cb2;
99   UINT8 m_cass_data[3];
96100   UINT8 m_portb;
97101   virtual void machine_start();
98102   virtual void machine_reset();
r22702r22703
188192
189193      for (x = 0; x < 8; x++)
190194      {
191         if (m_screen_on)
195         if (m_cb2)
192196            gfx = m_videoram[ x | (y<<3)];
193197
194198         *p++ = BIT(gfx, 7);
r22702r22703
214218      m_rtc = 0;
215219
216220   UINT8 data = m_io_x0->read() & m_io_x1->read() & m_io_x2->read() & m_io_x3->read();
217   m_pia->ca1_w( (data == 255) ? 0 : 1);
218   data = m_io_shift->read();
219   m_pia->ca2_w( data );
220   m_pia->cb1_w((m_rtc) ? 1 : 0);
221   m_ca1 = (data == 255) ? 0 : 1;
222   m_ca2 = (bool)m_io_shift->read();
223   m_cb1 = (m_rtc) ? 1 : 0;
224
225   m_pia->ca1_w(m_ca1);
226   m_pia->ca2_w(m_ca2);
227   m_pia->cb1_w(m_cb1);
228
229   /* cassette - turn 1200/2400Hz to a bit */
230   m_cass_data[1]++;
231   UINT8 cass_ws = (m_cass->input() > +0.03) ? 1 : 0;
232
233   if (cass_ws != m_cass_data[0])
234   {
235      m_cass_data[0] = cass_ws;
236      m_cass_data[2] = ((m_cass_data[1] < 12) ? 0 : 128);
237      m_cass_data[1] = 0;
238   }
221239}
222240
223241
224242READ_LINE_MEMBER( d6800_state::d6800_rtc_pulse )
225243{
226   return (m_rtc) ? 1 : 0;
244   return m_cb1;
227245}
228246
229247READ_LINE_MEMBER( d6800_state::d6800_keydown_r )
230248{
231   UINT8 data = m_io_x0->read() & m_io_x1->read() & m_io_x2->read() & m_io_x3->read();
232
233   return (data == 255) ? 0 : 1;
249   return m_ca1;
234250}
235251
236252READ_LINE_MEMBER( d6800_state::d6800_fn_key_r )
237253{
238   return m_io_shift->read();
254   return m_ca2;
239255}
240256
241257WRITE_LINE_MEMBER( d6800_state::d6800_screen_w )
242258{
243   m_screen_on = state;
259   m_cb2 = state;
244260}
245261
246262READ8_MEMBER( d6800_state::d6800_cassette_r )
r22702r22703
252268   knows if the tone is 1200 or 2400 Hz. Input to PIA is bit 7.
253269   */
254270
255   return ((m_cass->input() > 0.03) ? 1 : 0) | m_portb;
271   return m_cass_data[2] | m_portb;
256272}
257273
258274WRITE8_MEMBER( d6800_state::d6800_cassette_w )
r22702r22703
266282
267283   m_cass->output(BIT(data, 0) ? -1.0 : +1.0);
268284   m_beeper->set_frequency(BIT(data, 0) ? 2400 : 1200);
269   m_beeper->set_state(BIT(data, 6) & m_screen_on);
285   m_beeper->set_state(BIT(data, 6) & m_cb2);
270286
271   m_portb = data;
287   m_portb = data & 0x7f;
272288}
273289
274290READ8_MEMBER( d6800_state::d6800_keyboard_r )
r22702r22703
329345{
330346   m_beeper->set_state(0);
331347   m_rtc = 0;
348   m_cass_data[0] = 0;
349   m_cass_data[1] = 0;
350   m_cass_data[2] = 128;
332351}
333352
334353/* Machine Drivers */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team