Previous 199869 Revisions Next

r23296 Thursday 30th May, 2013 at 13:57:04 UTC by Curt Coder
(MESS) abc1600: Fixed keyboard. (nw)
[src/mess/machine]abc99.c abc99.h

trunk/src/mess/machine/abc99.c
r23295r23296
6666#define I8035_Z5_TAG        "z5"
6767
6868
69enum
70{
71   LED_1 = 0,
72   LED_2,
73   LED_3,
74   LED_4,
75   LED_5,
76   LED_6,
77   LED_7,
78   LED_8,
79   LED_INS,
80   LED_ALT,
81   LED_CAPS_LOCK
82};
8369
84
85
8670//**************************************************************************
8771//  DEVICE DEFINITIONS
8872//**************************************************************************
r23295r23296
191175//-------------------------------------------------
192176
193177static ADDRESS_MAP_START( abc99_z5_io, AS_IO, 8, abc99_device )
194   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(z5_p1_r)
178/*   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(z5_p1_r)
195179   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(z5_p2_w)
196   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_WRITE(z5_t0_w)
197   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(z5_t1_r)
180   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_WRITENOP // Z2 CLK
181   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(z5_t1_r)*/
198182ADDRESS_MAP_END
199183
200184
r23295r23296
212196   MCFG_CPU_ADD(I8035_Z5_TAG, I8035, XTAL_6MHz)
213197   MCFG_CPU_PROGRAM_MAP(abc99_z5_mem)
214198   MCFG_CPU_IO_MAP(abc99_z5_io)
199   MCFG_DEVICE_DISABLE() // HACK fix for broken serial I/O
215200
216201   // sound hardware
217202   MCFG_SPEAKER_STANDARD_MONO("mono")
r23295r23296
237222
238223INPUT_CHANGED_MEMBER( abc99_device::keyboard_reset )
239224{
240   m_mousecpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE);
225   if (newval)
226   {
227      m_mousecpu->reset();
228   }
241229}
242230
243231
r23295r23296
457445
458446inline void abc99_device::serial_input()
459447{
460   m_maincpu->set_input_line(MCS48_INPUT_IRQ, (m_si | m_si_en) ? CLEAR_LINE : ASSERT_LINE);
448   m_maincpu->set_input_line(MCS48_INPUT_IRQ, (m_si || m_si_en) ? CLEAR_LINE : ASSERT_LINE);
461449   m_mousecpu->set_input_line(MCS48_INPUT_IRQ, m_si ? CLEAR_LINE : ASSERT_LINE);
462450}
463451
464452
465453//-------------------------------------------------
466//  serial_output -
467//-------------------------------------------------
468
469inline void abc99_device::serial_output()
470{
471   int so = m_so_z2 & m_so_z5;
472
473   if (m_so != so)
474   {
475      m_so = so;
476   }
477}
478
479
480//-------------------------------------------------
481454//  serial_clock -
482455//-------------------------------------------------
483456
r23295r23296
529502      m_mouseb(*this, "MOUSEB"),
530503      m_si(1),
531504      m_si_en(1),
532      m_so(1),
533505      m_so_z2(1),
534506      m_so_z5(1),
535507      m_keydown(0),
536508      m_t1_z2(0),
537509      m_t1_z5(0),
538510      m_led_en(0),
539      m_reset(0)
511      m_reset(1)
540512{
541513}
542514
r23295r23296
560532   // state saving
561533   save_item(NAME(m_si));
562534   save_item(NAME(m_si_en));
563   save_item(NAME(m_so));
564535   save_item(NAME(m_so_z2));
565536   save_item(NAME(m_so_z5));
566537   save_item(NAME(m_keydown));
r23295r23296
643614   */
644615
645616   // serial output
646   int so_z2 = BIT(data, 0);
617   m_so_z2 = BIT(data, 0);
647618
648   if (m_so_z2 != so_z2)
649   {
650      m_so_z2 = so_z2;
651      serial_output();
652   }
653
654619   // key down
655620   key_down(!BIT(data, 1));
656621
r23295r23296
783748   // Z2 reset
784749   int reset = BIT(data, 5);
785750
786   if (m_reset != reset)
751   if (!m_reset && reset)
787752   {
788      m_reset = reset;
789      m_maincpu->set_input_line(INPUT_LINE_RESET, m_reset ? CLEAR_LINE : ASSERT_LINE);
753      m_maincpu->reset();
790754   }
791755
756   m_reset = reset;
757
792758   // serial output
793   int so_z5 = BIT(data, 6);
759   m_so_z5 = BIT(data, 6);
794760
795   if (m_so_z5 != so_z5)
796   {
797      m_so_z5 = so_z5;
798      serial_output();
799   }
800
801761   // keyboard CPU T1
802762   m_t1_z2 = BIT(data, 7);
803763}
804764
805765
806766//-------------------------------------------------
807//  z5_t0_w -
808//-------------------------------------------------
809
810WRITE8_MEMBER( abc99_device::z5_t0_w )
811{
812   // clock output to Z2, not necessary to emulate
813}
814
815
816//-------------------------------------------------
817767//  z5_t1_r -
818768//-------------------------------------------------
819769
r23295r23296
832782   if (m_si != state)
833783   {
834784      m_si = state;
835
836785      serial_input();
837786   }
838787}
r23295r23296
844793
845794READ_LINE_MEMBER( abc99_device::txd_r )
846795{
847   return m_so;
796   return m_so_z2 && m_so_z5;
848797}
849
850
851//-------------------------------------------------
852//  reset_w -
853//-------------------------------------------------
854
855WRITE_LINE_MEMBER( abc99_device::reset_w )
856{
857   m_mousecpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
858}
trunk/src/mess/machine/abc99.h
r23295r23296
7575   DECLARE_READ8_MEMBER( z2_t1_r );
7676   DECLARE_READ8_MEMBER( z5_p1_r );
7777   DECLARE_WRITE8_MEMBER( z5_p2_w );
78   DECLARE_WRITE8_MEMBER( z5_t0_w );
7978   DECLARE_READ8_MEMBER( z5_t1_r );
8079
8180   DECLARE_WRITE_LINE_MEMBER( rxd_w );
8281   DECLARE_READ_LINE_MEMBER( txd_r );
83   DECLARE_WRITE_LINE_MEMBER( reset_w );
8482
8583protected:
8684   // device-level overrides
r23295r23296
9088   virtual void device_config_complete();
9189
9290private:
93   static const device_timer_id TIMER_SERIAL = 0;
94   static const device_timer_id TIMER_MOUSE = 1;
91   enum
92   {
93      TIMER_SERIAL,
94      TIMER_MOUSE
95   };
96   
97   enum
98   {
99      LED_1 = 0,
100      LED_2,
101      LED_3,
102      LED_4,
103      LED_5,
104      LED_6,
105      LED_7,
106      LED_8,
107      LED_INS,
108      LED_ALT,
109      LED_CAPS_LOCK
110   };
95111
96112   inline void serial_input();
97   inline void serial_output();
98113   inline void serial_clock();
99114   inline void key_down(int state);
100115   inline void scan_mouse();
r23295r23296
113128
114129   int m_si;
115130   int m_si_en;
116   int m_so;
117131   int m_so_z2;
118132   int m_so_z5;
119133   int m_keydown;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team