Previous 199869 Revisions Next

r31672 Sunday 17th August, 2014 at 03:12:12 UTC by Robbbert
st_mp100: fixed display, 4 games marked as working.
[src/mame/drivers]st_mp100.c
[src/mame/layout]st_mp100.lay

trunk/src/mame/drivers/st_mp100.c
r31671r31672
66
77
88ToDo:
9- Display to fix
109- Dips, Inputs, Solenoids vary per game
1110- Mechanical
1211- Sound board - an enormous mass of discrete circuitry
r31671r31672
4039      , m_io_x4(*this, "X4")
4140   { }
4241
43   DECLARE_DRIVER_INIT(st_mp100);
4442   DECLARE_READ8_MEMBER(u10_a_r);
4543   DECLARE_WRITE8_MEMBER(u10_a_w);
4644   DECLARE_READ8_MEMBER(u10_b_r);
r31671r31672
5452   DECLARE_WRITE_LINE_MEMBER(u11_cb2_w);
5553   DECLARE_INPUT_CHANGED_MEMBER(activity_test);
5654   DECLARE_INPUT_CHANGED_MEMBER(self_test);
57   TIMER_DEVICE_CALLBACK_MEMBER(u10_timer);
55   TIMER_DEVICE_CALLBACK_MEMBER(timer_x);
5856   TIMER_DEVICE_CALLBACK_MEMBER(u11_timer);
5957private:
60   UINT8 m_u10;
61   UINT8 m_u10_a;
62   UINT8 m_u10_b;
63   UINT8 m_u11_a;
64   UINT8 m_u11_b;
58   UINT8 m_u10a;
59   UINT8 m_u10b;
60   UINT8 m_u11a;
61   UINT8 m_u11b;
6562   bool m_u10_ca2;
6663   bool m_u10_cb2;
67   bool m_u10_timer;
64   bool m_u11_cb2;
65   bool m_timer_x;
6866   bool m_u11_timer;
6967   UINT8 m_digit;
70   UINT8 m_segment;
68   UINT8 m_counter;
7169   virtual void machine_reset();
7270   required_device<m6800_cpu_device> m_maincpu;
7371   required_device<pia6821_device> m_pia_u10;
r31671r31672
9088   AM_RANGE(0x0000, 0x007f) AM_RAM // internal to the cpu
9189   AM_RANGE(0x0088, 0x008b) AM_DEVREADWRITE("pia_u10", pia6821_device, read, write)
9290   AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("pia_u11", pia6821_device, read, write)
93   AM_RANGE(0x00a0, 0x00bf) AM_WRITENOP // to sound board
94   AM_RANGE(0x00c0, 0x00df) // to sound board
91   AM_RANGE(0x00a0, 0x00a7) AM_WRITENOP // to sound board
92   AM_RANGE(0x00c0, 0x00c7) // to sound board
9593   AM_RANGE(0x0200, 0x02ff) AM_RAM AM_SHARE("nvram")
9694   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("roms", 0 )
9795ADDRESS_MAP_END
r31671r31672
496494WRITE_LINE_MEMBER( st_mp100_state::u10_ca2_w )
497495{
498496   m_u10_ca2 = state;
497   if (!state)
498      m_counter = 0;
499499}
500500     
501501WRITE_LINE_MEMBER( st_mp100_state::u10_cb2_w )
r31671r31672
509509
510510WRITE_LINE_MEMBER( st_mp100_state::u11_cb2_w )
511511{
512   m_u11_cb2 = state;
512513}
513514
514515READ8_MEMBER( st_mp100_state::u10_a_r )
515516{
516   return m_u10_a;
517   return m_u10a;
517518}
518519
519520WRITE8_MEMBER( st_mp100_state::u10_a_w )
520521{
521522   static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543
522   m_segment = data >> 4;
523   m_u10_a = data;
524   m_u10 = (data & 15) | (BIT(m_u11_a, 0) << 4);
523   m_u10a = data;
525524
526525   if (!m_u10_ca2)
527526   {
528      switch (m_u10)
529      {
530      case 0x10:
531         output_set_digit_value(m_digit, patterns[m_segment]);
532         break;
533      case 0x1d:
534         output_set_digit_value(8+m_digit, patterns[m_segment]);
535         break;
536      case 0x1b:
537         output_set_digit_value(16+m_digit, patterns[m_segment]);
538         break;
539      case 0x07:
540         output_set_digit_value(24+m_digit, patterns[m_segment]);
541         break;
542      case 0x0f:
543         output_set_digit_value(32+m_digit, patterns[m_segment]);
544         break;
545      default:
546         break;
547      }
527      m_counter++;
528      UINT8 segment = data >> 4;
529
530      if (m_counter==1)
531         output_set_digit_value(m_digit, patterns[segment]);
532
533      if (m_counter==3)
534         output_set_digit_value(10+m_digit, patterns[segment]);
535      else
536      if (m_counter==5)
537         output_set_digit_value(20+m_digit, patterns[segment]);
538      else
539      if (m_counter==8)
540         output_set_digit_value(30+m_digit, patterns[segment]);
541      else
542      if (m_counter==10)
543         output_set_digit_value(40+m_digit, patterns[segment]);
548544   }
549545}
550546
r31671r31672
552548{
553549   UINT8 data = 0;
554550
555   if (BIT(m_u10_a, 0))
551   if (BIT(m_u10a, 0))
556552      data |= m_io_x0->read();
557553
558   if (BIT(m_u10_a, 1))
554   if (BIT(m_u10a, 1))
559555      data |= m_io_x1->read();
560556
561   if (BIT(m_u10_a, 2))
557   if (BIT(m_u10a, 2))
562558      data |= m_io_x2->read();
563559
564   if (BIT(m_u10_a, 3))
560   if (BIT(m_u10a, 3))
565561      data |= m_io_x3->read();
566562
567   if (BIT(m_u10_a, 4))
563   if (BIT(m_u10a, 4))
568564      data |= m_io_x4->read();
569565
570   if (BIT(m_u10_a, 5))
566   if (BIT(m_u10a, 5))
571567      data |= m_io_dsw0->read();
572568
573   if (BIT(m_u10_a, 6))
569   if (BIT(m_u10a, 6))
574570      data |= m_io_dsw1->read();
575571
576   if (BIT(m_u10_a, 7))
572   if (BIT(m_u10a, 7))
577573      data |= m_io_dsw2->read();
578574
579575   if (m_u10_cb2)
r31671r31672
584580
585581WRITE8_MEMBER( st_mp100_state::u10_b_w )
586582{
587   m_u10_b = data;
583   m_u10b = data;
588584}
589585
590586READ8_MEMBER( st_mp100_state::u11_a_r )
591587{
592   return m_u11_a;
588   return m_u11a;
593589}
594590
595591WRITE8_MEMBER( st_mp100_state::u11_a_w )
596592{
597   m_u11_a = data;
593   m_u11a = data;
598594
599   m_digit = 0xff;
600   if BIT(data, 2)
601      m_digit = 4;
602   else
603   if BIT(data, 3)
604      m_digit = 3;
605   else
606   if BIT(data, 4)
607      m_digit = 2;
608   else
609   if BIT(data, 5)
610      m_digit = 1;
611   else
612   if BIT(data, 6)
613      m_digit = 0;
614   else
615   if BIT(data, 7)
616      m_digit = 5;
595   if (!m_u10_ca2)
596   {
597      if BIT(data, 2)
598         m_digit = 5;
599      else
600      if BIT(data, 3)
601         m_digit = 4;
602      else
603      if BIT(data, 4)
604         m_digit = 3;
605      else
606      if BIT(data, 5)
607         m_digit = 2;
608      else
609      if BIT(data, 6)
610         m_digit = 1;
611      else
612      if BIT(data, 7)
613         m_digit = 0;
614
615      m_counter++;
616   }
617617}
618618
619619WRITE8_MEMBER( st_mp100_state::u11_b_w )
620620{
621   m_u11_b = data;
622   switch (data & 15)
621   m_u11b = data;
622   if (!m_u11_cb2)
623623   {
624      case 0x0: // chime 10
625         m_samples->start(1, 1);
626         break;
627      case 0x1: // chime 100
628         m_samples->start(2, 2);
629         break;
630      case 0x2: // chime 1000
631         m_samples->start(3, 3);
632         break;
633      case 0x3: // chime 10000
634         m_samples->start(0, 4);
635         break;
636      case 0x4: // chime 10000
637         m_samples->start(0, 4);
638         break;
639      case 0x5: // knocker
640         m_samples->start(0, 6);
641         break;
642      case 0x6: // outhole
643         m_samples->start(0, 5);
644         break;
645      // from here, vary per game
646      case 0x7:
647      case 0x8:
648      case 0x9:
649         //m_samples->start(0, 5);
650         break;
651      case 0xa:
652         m_samples->start(0, 0);
653         break;
654      case 0xb:
655         m_samples->start(0, 0);
656         break;
657      case 0xc:
658         m_samples->start(0, 0);
659         break;
660      case 0xd:
661         //m_samples->start(0, 0);
662         break;
663      case 0xe:
664         //m_samples->start(0, 5);
665         break;
666      case 0xf: // not used
667         break;
624      switch (data & 15)
625      {
626         case 0x0: // chime 10
627            m_samples->start(1, 1);
628            break;
629         case 0x1: // chime 100
630            m_samples->start(2, 2);
631            break;
632         case 0x2: // chime 1000
633            m_samples->start(3, 3);
634            break;
635         case 0x3: // chime 10000
636            m_samples->start(0, 4);
637            break;
638         case 0x4: // chime 10000
639            m_samples->start(0, 4);
640            break;
641         case 0x5: // knocker
642            m_samples->start(0, 6);
643            break;
644         case 0x6: // outhole
645            m_samples->start(0, 5);
646            break;
647         // from here, vary per game
648         case 0x7:
649         case 0x8:
650         case 0x9:
651            //m_samples->start(0, 5);
652            break;
653         case 0xa:
654            m_samples->start(0, 0);
655            break;
656         case 0xb:
657            m_samples->start(0, 0);
658            break;
659         case 0xc:
660            m_samples->start(0, 0);
661            break;
662         case 0xd:
663            //m_samples->start(0, 0);
664            break;
665         case 0xe:
666            //m_samples->start(0, 5);
667            break;
668         case 0xf: // not used
669            break;
670      }
668671   }
669672}
670673
671674void st_mp100_state::machine_reset()
672675{
673   m_u10_a = 0;
674   m_u10_b = 0;
676   m_u10a = 0;
677   m_u10b = 0;
675678   m_u10_cb2 = 0;
676   m_u11_a = 0;
677   m_u11_b = 0;
679   m_u11a = 0;
680   m_u11b = 0;
678681}
679682
680DRIVER_INIT_MEMBER(st_mp100_state,st_mp100)
681{
682}
683
684683// zero-cross detection
685TIMER_DEVICE_CALLBACK_MEMBER( st_mp100_state::u10_timer )
684TIMER_DEVICE_CALLBACK_MEMBER( st_mp100_state::timer_x )
686685{
687   m_u10_timer ^= 1;
688   m_pia_u10->cb1_w(m_u10_timer);
686   m_timer_x ^= 1;
687   m_pia_u10->cb1_w(m_timer_x);
689688}
690689
691690// 555 timer for display refresh
r31671r31672
718717   MCFG_PIA_CB2_HANDLER(WRITELINE(st_mp100_state, u10_cb2_w))
719718   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line))
720719   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line))
721   MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_z", st_mp100_state, u10_timer, attotime::from_hz(120)) // mains freq*2
720   MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_x", st_mp100_state, timer_x, attotime::from_hz(120)) // mains freq*2
722721
723722   MCFG_DEVICE_ADD("pia_u11", PIA6821, 0)
724723   MCFG_PIA_READPA_HANDLER(READ8(st_mp100_state, u11_a_r))
r31671r31672
841840ROM_END
842841
843842// chimes
844GAME(1977,  pinball,    0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Pinball",              GAME_IS_SKELETON_MECHANICAL)
845GAME(1977,  stingray,   0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Stingray",             GAME_IS_SKELETON_MECHANICAL)
846GAME(1978,  stars,      0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Stars",                GAME_IS_SKELETON_MECHANICAL)
847GAME(1978,  memlane,    0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Memory Lane",          GAME_IS_SKELETON_MECHANICAL)
843GAME(1977,  pinball,    0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Pinball", GAME_MECHANICAL)
844GAME(1977,  stingray,   0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Stingray", GAME_MECHANICAL)
845GAME(1978,  stars,      0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Stars", GAME_MECHANICAL)
846GAME(1978,  memlane,    0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Memory Lane", GAME_MECHANICAL)
848847
849848// sound unit B-521
850GAME(1978,  lectrono,   0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Lectronamo",           GAME_IS_SKELETON_MECHANICAL)
851GAME(1978,  wildfyre,   0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Wildfyre",             GAME_IS_SKELETON_MECHANICAL)
852GAME(1978,  nugent,     0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Nugent",               GAME_IS_SKELETON_MECHANICAL)
853GAME(1979,  dracula,    0,      st_mp100,   mp100, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Dracula",              GAME_IS_SKELETON_MECHANICAL)
849GAME(1978,  lectrono,   0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Lectronamo", GAME_MECHANICAL | GAME_NO_SOUND )
850GAME(1978,  wildfyre,   0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Wildfyre", GAME_MECHANICAL | GAME_NO_SOUND )
851GAME(1978,  nugent,     0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Nugent", GAME_MECHANICAL | GAME_NO_SOUND )
852GAME(1979,  dracula,    0,      st_mp100,   mp100, driver_device, 0,   ROT0,   "Stern", "Dracula", GAME_MECHANICAL | GAME_NO_SOUND )
854853
855854// different inputs
856GAME(1979,  trident,    0,      st_mp100,   mp200, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Trident",              GAME_IS_SKELETON_MECHANICAL)
857GAME(1979,  hothand,    0,      st_mp100,   mp200, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Hot Hand",             GAME_IS_SKELETON_MECHANICAL)
858GAME(1979,  magic,      0,      st_mp100,   mp200, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Magic",                GAME_IS_SKELETON_MECHANICAL)
859GAME(1979,  princess,   0,      st_mp100,   mp200, st_mp100_state,   st_mp100,   ROT0,   "Stern",    "Cosmic Princess",      GAME_IS_SKELETON_MECHANICAL)
855GAME(1979,  trident,    0,      st_mp100,   mp200, driver_device, 0,   ROT0,   "Stern", "Trident", GAME_MECHANICAL | GAME_NO_SOUND )
856GAME(1979,  hothand,    0,      st_mp100,   mp200, driver_device, 0,   ROT0,   "Stern", "Hot Hand", GAME_MECHANICAL | GAME_NO_SOUND )
857GAME(1979,  magic,      0,      st_mp100,   mp200, driver_device, 0,   ROT0,   "Stern", "Magic", GAME_MECHANICAL | GAME_NO_SOUND )
858GAME(1979,  princess,   0,      st_mp100,   mp200, driver_device, 0,   ROT0,   "Stern", "Cosmic Princess", GAME_MECHANICAL | GAME_NO_SOUND )
trunk/src/mame/layout/st_mp100.lay
r31671r31672
3737
3838      <!-- Player 1 Score -->
3939
40      <bezel name="digit5" element="digit">
40      <bezel name="digit0" element="digit">
4141         <bounds left="10" top="45" right="44" bottom="84" />
4242      </bezel>
43      <bezel name="digit4" element="digit">
43      <bezel name="digit5" element="digit">
4444         <bounds left="54" top="45" right="88" bottom="84" />
4545      </bezel>
46      <bezel name="digit3" element="digit">
46      <bezel name="digit4" element="digit">
4747         <bounds left="98" top="45" right="132" bottom="84" />
4848      </bezel>
49      <bezel name="digit2" element="digit">
49      <bezel name="digit3" element="digit">
5050         <bounds left="142" top="45" right="176" bottom="84" />
5151      </bezel>
52      <bezel name="digit1" element="digit">
52      <bezel name="digit2" element="digit">
5353         <bounds left="186" top="45" right="220" bottom="84" />
5454      </bezel>
55      <bezel name="digit0" element="digit">
55      <bezel name="digit1" element="digit">
5656         <bounds left="230" top="45" right="264" bottom="84" />
5757      </bezel>
5858
5959      <!-- Player 2 Score -->
60      <bezel name="digit13" element="digit">
60      <bezel name="digit10" element="digit">
6161         <bounds left="10" top="105" right="44" bottom="144" />
6262      </bezel>
63      <bezel name="digit12" element="digit">
63      <bezel name="digit15" element="digit">
6464         <bounds left="54" top="105" right="88" bottom="144" />
6565      </bezel>
66      <bezel name="digit11" element="digit">
66      <bezel name="digit14" element="digit">
6767         <bounds left="98" top="105" right="132" bottom="144" />
6868      </bezel>
69      <bezel name="digit10" element="digit">
69      <bezel name="digit13" element="digit">
7070         <bounds left="142" top="105" right="176" bottom="144" />
7171      </bezel>
72      <bezel name="digit9" element="digit">
72      <bezel name="digit12" element="digit">
7373         <bounds left="186" top="105" right="220" bottom="144" />
7474      </bezel>
75      <bezel name="digit8" element="digit">
75      <bezel name="digit11" element="digit">
7676         <bounds left="230" top="105" right="264" bottom="144" />
7777      </bezel>
7878
7979      <!-- Player 3 Score -->
80      <bezel name="digit21" element="digit">
80      <bezel name="digit20" element="digit">
8181         <bounds left="10" top="165" right="44" bottom="204" />
8282      </bezel>
83      <bezel name="digit20" element="digit">
83      <bezel name="digit25" element="digit">
8484         <bounds left="54" top="165" right="88" bottom="204" />
8585      </bezel>
86      <bezel name="digit19" element="digit">
86      <bezel name="digit24" element="digit">
8787         <bounds left="98" top="165" right="132" bottom="204" />
8888      </bezel>
89      <bezel name="digit18" element="digit">
89      <bezel name="digit23" element="digit">
9090         <bounds left="142" top="165" right="176" bottom="204" />
9191      </bezel>
92      <bezel name="digit17" element="digit">
92      <bezel name="digit22" element="digit">
9393         <bounds left="186" top="165" right="220" bottom="204" />
9494      </bezel>
95      <bezel name="digit16" element="digit">
95      <bezel name="digit21" element="digit">
9696         <bounds left="230" top="165" right="264" bottom="204" />
9797      </bezel>
9898
9999      <!-- Player 4 Score -->
100      <bezel name="digit28" element="digit">
100      <bezel name="digit35" element="digit">
101101         <bounds left="10" top="225" right="44" bottom="264" />
102102      </bezel>
103      <bezel name="digit27" element="digit">
103      <bezel name="digit34" element="digit">
104104         <bounds left="54" top="225" right="88" bottom="264" />
105105      </bezel>
106      <bezel name="digit26" element="digit">
106      <bezel name="digit33" element="digit">
107107         <bounds left="98" top="225" right="132" bottom="264" />
108108      </bezel>
109      <bezel name="digit25" element="digit">
109      <bezel name="digit32" element="digit">
110110         <bounds left="142" top="225" right="176" bottom="264" />
111111      </bezel>
112      <bezel name="digit24" element="digit">
112      <bezel name="digit31" element="digit">
113113         <bounds left="186" top="225" right="220" bottom="264" />
114114      </bezel>
115      <bezel name="digit29" element="digit">
115      <bezel name="digit30" element="digit">
116116         <bounds left="230" top="225" right="264" bottom="264" />
117117      </bezel>
118118
119119      <!-- Credits and Balls -->
120      <bezel name="digit35" element="digit">
120      <bezel name="digit44" element="digit">
121121         <bounds left="10" top="345" right="44" bottom="384" />
122122      </bezel>
123      <bezel name="digit34" element="digit">
123      <bezel name="digit43" element="digit">
124124         <bounds left="54" top="345" right="88" bottom="384" />
125125      </bezel>
126      <bezel name="digit32" element="digit">
126      <bezel name="digit41" element="digit">
127127         <bounds left="186" top="345" right="220" bottom="384" />
128128      </bezel>
129      <bezel name="digit37" element="digit">
129      <bezel name="digit40" element="digit">
130130         <bounds left="230" top="345" right="264" bottom="384" />
131131      </bezel>
132132

Previous 199869 Revisions Next


© 1997-2024 The MAME Team