Previous 199869 Revisions Next

r19885 Friday 28th December, 2012 at 11:10:53 UTC by Jonathan Gevaryahu
s11, s11a, s11b: some more fixes to the IRQ generation for the main cpu in williams system 11 pinballs [Lord Nightmare]
[src/mame/drivers]s11.c s11a.c s11b.c

trunk/src/mame/drivers/s11b.c
r19884r19885
2121// This length is determined by the settings of the W14 and W15 jumpers
2222// It can be 0x300, 0x380, 0x700 or 0x780 cycles long.
2323// IRQ length is always 32 cycles
24#define S11_IRQ_CYCLES 0x700
24#define S11_IRQ_CYCLES 0x380
2525
2626class s11b_state : public genpin_class
2727{
r19884r19885
243243      if(param == 1)
244244      {
245245         m_maincpu->set_input_line(M6800_IRQ_LINE,ASSERT_LINE);
246         m_irq_timer->adjust(attotime::from_ticks(32,XTAL_4MHz/2),0);
246         m_irq_timer->adjust(attotime::from_ticks(32,XTAL_4MHz),0);
247247         m_pias->cb1_w(0);
248248         m_irq_active = true;
249249         m_pia28->ca1_w(BIT(ioport("DIAGS")->read(), 2));  // Advance
r19884r19885
252252      else
253253      {
254254         m_maincpu->set_input_line(M6800_IRQ_LINE,CLEAR_LINE);
255         m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
255         m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
256256         m_pias->cb1_w(1);
257257         m_irq_active = false;
258258         m_pia28->ca1_w(1);
r19884r19885
291291   if(state == CLEAR_LINE)
292292   {
293293      // restart IRQ timer
294      m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
294      m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
295295      m_irq_active = false;
296296   }
297297   else
r19884r19885
651651   membank("bgbank")->set_entry(0);
652652   m_invert = false;
653653   m_irq_timer = timer_alloc(TIMER_IRQ);
654   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
654   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
655655   m_irq_active = false;
656656}
657657
r19884r19885
667667   membank("bgbank")->set_entry(0);
668668   m_invert = true;
669669   m_irq_timer = timer_alloc(TIMER_IRQ);
670   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
670   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
671671   m_irq_active = false;
672672}
673673
trunk/src/mame/drivers/s11.c
r19884r19885
2626// This length is determined by the settings of the W14 and W15 jumpers
2727// It can be 0x300, 0x380, 0x700 or 0x780 cycles long.
2828// IRQ length is always 32 cycles
29#define S11_IRQ_CYCLES 0x700
29#define S11_IRQ_CYCLES 0x380
3030
3131class s11_state : public genpin_class
3232{
r19884r19885
235235      if(param == 1)
236236      {
237237         m_maincpu->set_input_line(M6800_IRQ_LINE,ASSERT_LINE);
238         m_irq_timer->adjust(attotime::from_ticks(32,XTAL_4MHz/2),0);
238         m_irq_timer->adjust(attotime::from_ticks(32,XTAL_4MHz),0);
239239         m_pias->cb1_w(0);
240240         m_irq_active = true;
241241         m_pia28->ca1_w(BIT(ioport("DIAGS")->read(), 2));  // Advance
r19884r19885
244244      else
245245      {
246246         m_maincpu->set_input_line(M6800_IRQ_LINE,CLEAR_LINE);
247         m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
247         m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
248248         m_pias->cb1_w(1);
249249         m_irq_active = false;
250250         m_pia28->ca1_w(1);
r19884r19885
279279   if(state == CLEAR_LINE)
280280   {
281281      // restart IRQ timer
282      m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
282      m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
283283      m_irq_active = false;
284284   }
285285   else
r19884r19885
591591   membank("bank0")->set_entry(0);
592592   membank("bank1")->set_entry(0);
593593   m_irq_timer = timer_alloc(TIMER_IRQ);
594   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
594   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
595595   m_irq_active = false;
596596}
597597
trunk/src/mame/drivers/s11a.c
r19884r19885
245245      if(param == 1)
246246      {
247247         m_maincpu->set_input_line(M6800_IRQ_LINE,ASSERT_LINE);
248         m_irq_timer->adjust(attotime::from_ticks(32,XTAL_4MHz/2),0);
248         m_irq_timer->adjust(attotime::from_ticks(32,XTAL_4MHz),0);
249249         m_pias->cb1_w(0);
250250         m_irq_active = true;
251251         m_pia28->ca1_w(BIT(ioport("DIAGS")->read(), 2));  // Advance
r19884r19885
254254      else
255255      {
256256         m_maincpu->set_input_line(M6800_IRQ_LINE,CLEAR_LINE);
257         m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
257         m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
258258         m_pias->cb1_w(1);
259259         m_irq_active = false;
260260         m_pia28->ca1_w(1);
r19884r19885
290290   if(state == CLEAR_LINE)
291291   {
292292      // restart IRQ timer
293      m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
293      m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
294294      m_irq_active = false;
295295   }
296296   else
r19884r19885
616616   membank("bank1")->set_entry(0);
617617   membank("bgbank")->set_entry(0);
618618   m_irq_timer = timer_alloc(TIMER_IRQ);
619   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz/2),1);
619   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,XTAL_4MHz),1);
620620   m_irq_active = false;
621621}
622622

Previous 199869 Revisions Next


© 1997-2024 The MAME Team