Previous 15994 Revisions Next

r14731 Friday 9th March, 2012 at 21:47:14 UTC by Barry Rodewald
pic8259,fmtowns: PIC/timers fix [Carl]
[src/emu/machine]pic8259.c
[src/mess/drivers]fmtowns.c
[src/mess/includes]fmtowns.h

src/emu/machine/pic8259.c
r14730r14731
277277            pic8259->icw4_needed      = (data & 0x01) ? 1 : 0;
278278            pic8259->vector_addr_low   = (data & 0xe0);
279279            pic8259->state         = STATE_ICW2;
280            pic8259->out_int_func(0);
280281         }
281282         else if (pic8259->state == STATE_READY)
282283         {
r14730r14731
308309                        if (pic8259->isr & mask)
309310                        {
310311                           pic8259->isr &= ~mask;
311                           if (pic8259->level_trig_mode)
312                              pic8259->irr = pic8259->irq_lines;
313                           pic8259->irr &= ~mask;
314312                           break;
315313                        }
316314                     }
r14730r14731
344342                     if( pic8259->isr & mask )
345343                     {
346344                        pic8259->isr &= ~mask;
347                        if (pic8259->level_trig_mode)
348                           pic8259->irr = pic8259->irq_lines;
349                        pic8259->irr &= ~mask;
350345                        pic8259->prio = (pic8259->prio + 1) & 7;
351346                     }
352347                     break;
src/mess/includes/fmtowns.h
r14730r14731
174174   UINT8 m_towns_scsi_status;
175175   UINT8 m_towns_spkrdata;
176176   UINT8 m_towns_speaker_input;
177   UINT8 m_timer0;
178   UINT8 m_timer1;
177179
178180   emu_timer* m_towns_wait_timer;
179181   struct towns_cdrom_controller m_towns_cd;
src/mess/drivers/fmtowns.c
r14730r14731
732732
733733   if(data & 0x80)
734734   {
735      towns_pic_irq(dev,0);
735      //towns_pic_irq(dev,0);
736      m_timer0 = 0;
737      pic8259_ir0_w(dev, m_timer0 || m_timer1);
736738   }
737739   m_towns_timer_mask = data & 0x07;
738740
r14730r14731
20222024
20232025   if(tstate->m_towns_timer_mask & 0x01)
20242026   {
2025      pic8259_ir0_w(dev, state);
2027      tstate->m_timer0 = state;
20262028      if(IRQ_LOG) logerror("PIC: IRQ0 (PIT Timer ch0) set to %i\n",state);
20272029   }
2030   else
2031      tstate->m_timer0 = 0;
2032
2033   pic8259_ir0_w(dev, tstate->m_timer0 || tstate->m_timer1);
20282034}
20292035
20302036static WRITE_LINE_DEVICE_HANDLER( towns_pit_out1_changed )
r14730r14731
20342040
20352041   if(tstate->m_towns_timer_mask & 0x02)
20362042   {
2037      pic8259_ir0_w(dev, state);
2043      tstate->m_timer1 = state;
20382044      if(IRQ_LOG) logerror("PIC: IRQ0 (PIT Timer ch1) set to %i\n",state);
20392045   }
2046   else
2047      tstate->m_timer1 = 0;
2048
2049   pic8259_ir0_w(dev, tstate->m_timer0 || tstate->m_timer1);
20402050}
20412051
20422052WRITE_LINE_MEMBER( towns_state::pit_out2_changed )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team