Previous 199869 Revisions Next

r19680 Wednesday 19th December, 2012 at 02:29:12 UTC by Barry Rodewald
s11, s11a: Fixed timer IRQ to main CPU
          Corrected main CPU type to M6802 (fixes factory setting display
          on first boot)
[src/mame/drivers]s11.c s11a.c

trunk/src/mame/drivers/s11a.c
r19679r19680
77
88
99ToDo:
10- Determine what drives the background sound (atm it's a guess)
1110- Can coin up but not start
11- Doesn't react to the Advance button very well
12- Some LEDs flicker
13- Diagnostic LED flips between 7 and 0 regularly
1214
1315*****************************************************************************************/
1416
r19679r19680
6668   DECLARE_READ_LINE_MEMBER(pia21_ca1_r);
6769   DECLARE_READ_LINE_MEMBER(pia28_ca1_r);
6870   DECLARE_READ_LINE_MEMBER(pia28_cb1_r);
71   DECLARE_READ8_MEMBER(pia28_w7_r);
6972   DECLARE_WRITE_LINE_MEMBER(pias_ca2_w);
7073   DECLARE_WRITE_LINE_MEMBER(pias_cb2_w);
7174   DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w);
r19679r19680
98101   required_device<pia6821_device> m_pia34;
99102   required_device<pia6821_device> m_pia40;
100103private:
101   UINT8 m_t_c;
102104   UINT8 m_sound_data;
103105   UINT8 m_strobe;
104106   UINT8 m_kbdrow;
107   UINT8 m_diag;
105108   UINT32 m_segment1;
106109   UINT32 m_segment2;
107110   bool m_ca1;
108111};
109112
110113static ADDRESS_MAP_START( s11a_main_map, AS_PROGRAM, 8, s11a_state )
111   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram")
112   AM_RANGE(0x2100, 0x2103) AM_DEVREADWRITE("pia21", pia6821_device, read, write) // sound+solenoids
113   AM_RANGE(0x2200, 0x2200) AM_WRITE(sol3_w) // solenoids
114   AM_RANGE(0x2400, 0x2403) AM_DEVREADWRITE("pia24", pia6821_device, read, write) // lamps
115   AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("pia28", pia6821_device, read, write) // display
116   AM_RANGE(0x2c00, 0x2c03) AM_DEVREADWRITE("pia2c", pia6821_device, read, write) // alphanumeric display
117   AM_RANGE(0x3000, 0x3003) AM_DEVREADWRITE("pia30", pia6821_device, read, write) // inputs
118   AM_RANGE(0x3400, 0x3403) AM_DEVREADWRITE("pia34", pia6821_device, read, write) // widget
114   AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram")
115   AM_RANGE(0x2100, 0x2103) AM_MIRROR(0x00fc) AM_DEVREADWRITE("pia21", pia6821_device, read, write) // sound+solenoids
116   AM_RANGE(0x2200, 0x2200) AM_MIRROR(0x01ff) AM_WRITE(sol3_w) // solenoids
117   AM_RANGE(0x2400, 0x2403) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia24", pia6821_device, read, write) // lamps
118   AM_RANGE(0x2800, 0x2803) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia28", pia6821_device, read, write) // display
119   AM_RANGE(0x2c00, 0x2c03) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia2c", pia6821_device, read, write) // alphanumeric display
120   AM_RANGE(0x3000, 0x3003) AM_MIRROR(0x03fc) AM_DEVREADWRITE("pia30", pia6821_device, read, write) // inputs
121   AM_RANGE(0x3400, 0x3403) AM_MIRROR(0x0bfc) AM_DEVREADWRITE("pia34", pia6821_device, read, write) // widget
119122   AM_RANGE(0x4000, 0xffff) AM_ROM
120123ADDRESS_MAP_END
121124
r19679r19680
209212   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, s11a_state, main_nmi, 1)
210213   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_0)
211214   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_9)
215   PORT_CONFNAME( 0x10, 0x10, "Language" )
216   PORT_CONFSETTING( 0x00, "German" )
217   PORT_CONFSETTING( 0x10, "English" )
212218INPUT_PORTS_END
213219
214220MACHINE_RESET_MEMBER( s11a_state, s11a )
215221{
216   m_t_c = 0;
217222   membank("bank0")->set_entry(0);
218223   membank("bank1")->set_entry(0);
219224}
r19679r19680
289294
290295READ_LINE_MEMBER( s11a_state::pia28_ca1_r )
291296{
292   return BIT(ioport("DIAGS")->read(), 2); // advance button
297   return BIT(ioport("DIAGS")->read(), 2) ? 1 : 0; // advance button
293298}
294299
295300READ_LINE_MEMBER( s11a_state::pia28_cb1_r )
296301{
297   return BIT(ioport("DIAGS")->read(), 3); // up/down switch
302   return BIT(ioport("DIAGS")->read(), 3) ? 1 : 0; // up/down switch
298303}
299304
300305WRITE8_MEMBER( s11a_state::dig0_w )
r19679r19680
302307   static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447
303308   data &= 0x7f;
304309   m_strobe = data & 15;
305   output_set_digit_value(60, patterns[data>>4]); // diag digit
310   m_diag = (data & 0x70) >> 4;
311   output_set_digit_value(60, patterns[m_diag]); // diag digit
306312   m_segment1 = 0;
307313   m_segment2 = 0;
308314}
r19679r19680
318324   }
319325}
320326
327READ8_MEMBER( s11a_state::pia28_w7_r)
328{
329   UINT8 ret = 0x80;
330
331   ret |= m_strobe;
332   ret |= m_diag << 4;
333
334   if(BIT(ioport("DIAGS")->read(), 4))  // W7 Jumper
335      ret &= ~0x80;
336
337   return ret;
338}
339
321340static const pia6821_interface pia28_intf =
322341{
323   DEVCB_NULL,      /* port A in */
342   DEVCB_DRIVER_MEMBER(s11a_state, pia28_w7_r),      /* port A in */
324343   DEVCB_NULL,      /* port B in */
325344   DEVCB_DRIVER_LINE_MEMBER(s11a_state, pia28_ca1_r),      /* line CA1 in */
326345   DEVCB_DRIVER_LINE_MEMBER(s11a_state, pia28_cb1_r),      /* line CB1 in */
r19679r19680
517536
518537TIMER_DEVICE_CALLBACK_MEMBER( s11a_state::irq)
519538{
520   if (m_t_c > 0x70)
521   {
522      m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE);
523      m_pias->cb1_w(0);
524   }
525   else
526      m_t_c++;
539   m_maincpu->set_input_line(M6800_IRQ_LINE, HOLD_LINE);
540   m_pias->cb1_w(0);
527541}
528542
529543static MACHINE_CONFIG_START( s11a, s11a_state )
530544   /* basic machine hardware */
531   MCFG_CPU_ADD("maincpu", M6800, 4000000)
545   MCFG_CPU_ADD("maincpu", M6802, 4000000)
532546   MCFG_CPU_PROGRAM_MAP(s11a_main_map)
533   MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11a_state, irq, attotime::from_hz(250))
547   MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11a_state, irq, attotime::from_hz(1000))
534548   MCFG_MACHINE_RESET_OVERRIDE(s11a_state, s11a)
535549
536550   /* Video */
r19679r19680
591605   ROM_LOAD("f14_u22.l1", 0x10000, 0x8000, CRC(c9dd7496) SHA1(de3cb855d87033274cc912578b02d1593d2d69f9))
592606
593607   ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF)
594   ROM_LOAD("f14_u4.l1", 0x00000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d))
608   ROM_LOAD("f14_u4.l1", 0x08000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d))
595609   ROM_LOAD("f14_u19.l1", 0x10000, 0x8000, CRC(d0de4a7c) SHA1(46ecd5786653add47751cc56b38d9db7c4622377))
596610ROM_END
597611
r19679r19680
605619   ROM_LOAD("f14_u22.l1", 0x10000, 0x8000, CRC(c9dd7496) SHA1(de3cb855d87033274cc912578b02d1593d2d69f9))
606620
607621   ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF)
608   ROM_LOAD("f14_u4.l1", 0x00000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d))
622   ROM_LOAD("f14_u4.l1", 0x08000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d))
609623   ROM_LOAD("f14_u19.l1", 0x10000, 0x8000, CRC(d0de4a7c) SHA1(46ecd5786653add47751cc56b38d9db7c4622377))
610624ROM_END
611625
r19679r19680
619633   ROM_LOAD("f14_u22.l1", 0x10000, 0x8000, CRC(c9dd7496) SHA1(de3cb855d87033274cc912578b02d1593d2d69f9))
620634
621635   ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF)
622   ROM_LOAD("f14_u4.l1", 0x00000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d))
636   ROM_LOAD("f14_u4.l1", 0x08000, 0x8000, CRC(43ecaabf) SHA1(64b50dbff03cd556130d0cff47b951fdf37d397d))
623637   ROM_LOAD("f14_u19.l1", 0x10000, 0x8000, CRC(d0de4a7c) SHA1(46ecd5786653add47751cc56b38d9db7c4622377))
624638ROM_END
625639
r19679r19680
656670   ROM_LOAD("mill_u22.l1", 0x10000, 0x8000, CRC(73735cfc) SHA1(f74c873a20990263e0d6b35609fc51c08c9f8e31))
657671
658672   ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF)
659   ROM_LOAD("mill_u4.l1", 0x00000, 0x8000, CRC(cf766506) SHA1(a6e4df19a513102abbce2653d4f72245f54407b1))
673   ROM_LOAD("mill_u4.l1", 0x08000, 0x8000, CRC(cf766506) SHA1(a6e4df19a513102abbce2653d4f72245f54407b1))
660674   ROM_LOAD("mill_u19.l1", 0x10000, 0x8000, CRC(e073245a) SHA1(cbaddde6bb19292ace574a8329e18c97c2ee9763))
661675ROM_END
662676
r19679r19680
673687   ROM_LOAD("pbot_u22.l1", 0x10000, 0x8000, CRC(a2d2c9cb) SHA1(46437dc54538f1626caf41a2818ddcf8000c44e4))
674688
675689   ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF)
676   ROM_LOAD("pbot_u4.l1", 0x00000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228))
690   ROM_LOAD("pbot_u4.l1", 0x08000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228))
677691   ROM_LOAD("pbot_u19.l1", 0x10000, 0x8000, CRC(40eb4e9f) SHA1(07b0557b35599a2dd5aa66a306fbbe8f50eed998))
678692ROM_END
679693
r19679r19680
687701   ROM_LOAD("pbot_u22.l1", 0x10000, 0x8000, CRC(a2d2c9cb) SHA1(46437dc54538f1626caf41a2818ddcf8000c44e4))
688702
689703   ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF)
690   ROM_LOAD("pbot_u4.l1", 0x00000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228))
704   ROM_LOAD("pbot_u4.l1", 0x08000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228))
691705   ROM_LOAD("pbot_u19.l1", 0x10000, 0x8000, CRC(40eb4e9f) SHA1(07b0557b35599a2dd5aa66a306fbbe8f50eed998))
692706ROM_END
693707
r19679r19680
701715   ROM_LOAD("pbot_u22.l1", 0x10000, 0x8000, CRC(a2d2c9cb) SHA1(46437dc54538f1626caf41a2818ddcf8000c44e4))
702716
703717   ROM_REGION(0x20000, "bgcpu", ROMREGION_ERASEFF)
704   ROM_LOAD("pbot_u4.l1", 0x00000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228))
718   ROM_LOAD("pbot_u4.l1", 0x08000, 0x8000, CRC(de5926bd) SHA1(3d111e27c5f0c8c0afc5fe5cc45bf77c12b69228))
705719   ROM_LOAD("pbot_u19.l1", 0x10000, 0x8000, CRC(40eb4e9f) SHA1(07b0557b35599a2dd5aa66a306fbbe8f50eed998))
706720ROM_END
707721
trunk/src/mame/drivers/s11.c
r19679r19680
101101   required_device<pia6821_device> m_pia34;
102102   required_device<pia6821_device> m_pia40;
103103private:
104   UINT8 m_t_c;
105104   UINT8 m_sound_data;
106105   UINT8 m_strobe;
107106   UINT8 m_kbdrow;
107   UINT8 m_diag;
108108   UINT32 m_segment1;
109109   UINT32 m_segment2;
110110   bool m_ca1;
r19679r19680
212212   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, s11_state, main_nmi, 1)
213213   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_0)
214214   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_9) PORT_TOGGLE
215   PORT_CONFNAME( 0x10, 0x00, "Language" )
215   PORT_CONFNAME( 0x10, 0x10, "Language" )
216216   PORT_CONFSETTING( 0x00, "German" )
217217   PORT_CONFSETTING( 0x10, "English" )
218218INPUT_PORTS_END
219219
220220MACHINE_RESET_MEMBER( s11_state, s11 )
221221{
222   m_t_c = 0;
223222   membank("bank0")->set_entry(0);
224223   membank("bank1")->set_entry(0);
225224}
r19679r19680
308307   static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447
309308   data &= 0x7f;
310309   m_strobe = data & 15;
310   m_diag = (data & 0x70) >> 4;
311311   output_set_digit_value(60, patterns[data>>4]); // diag digit
312312   m_segment1 = 0;
313313   m_segment2 = 0;
r19679r19680
326326
327327READ8_MEMBER( s11_state::pia28_w7_r)
328328{
329   UINT8 ret = 0x80;
330
331   ret |= m_strobe;
332   ret |= m_diag << 4;
333
329334   if(BIT(ioport("DIAGS")->read(), 4))  // W7 Jumper
330      return 0x00;
331   return 0x80;
335      ret &= ~0x80;
336
337   return ret;
332338}
333339
334340static const pia6821_interface pia28_intf =
r19679r19680
538544
539545TIMER_DEVICE_CALLBACK_MEMBER( s11_state::irq)
540546{
541   if (m_t_c > 0x70)
542   {
543      m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE);
544      m_pias->cb1_w(0);
545   }
546   else
547      m_t_c++;
547   m_maincpu->set_input_line(M6800_IRQ_LINE, HOLD_LINE);
548   m_pias->cb1_w(0);
548549}
549550
550551static MACHINE_CONFIG_START( s11, s11_state )
551552   /* basic machine hardware */
552   MCFG_CPU_ADD("maincpu", M6800, 4000000)
553   MCFG_CPU_ADD("maincpu", M6802, 4000000)
553554   MCFG_CPU_PROGRAM_MAP(s11_main_map)
554   MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11_state, irq, attotime::from_hz(500))
555   MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s11_state, irq, attotime::from_hz(1000))
555556   MCFG_MACHINE_RESET_OVERRIDE(s11_state, s11)
556557
557558   /* Video */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team