Previous 199869 Revisions Next

r23708 Friday 14th June, 2013 at 11:45:49 UTC by Dirk Best
cs4031: Set DMA controller clocks via chipset configuration
[src/mess/machine]cs4031.c cs4031.h

trunk/src/mess/machine/cs4031.c
r23707r23708
8282   /* 1f */ "RESERVED"
8383};
8484
85const float cs4031_device::m_dma_clock_divider[] =
86{
87   10, 8, 6, 0, 0, 0, 0, 0, 5, 4, 3, 2.5, 2, 1.5, 0, 0
88};
89
8590//-------------------------------------------------
8691//  machine_config_additions - device-specific
8792//  machine configurations
r23707r23708
159164};
160165
161166static MACHINE_CONFIG_FRAGMENT( cs4031 )
162   MCFG_I8237_ADD("dma1", XTAL_14_31818MHz/3 /* todo: set to 0, instead set via config register */, dma1_config)
163   MCFG_I8237_ADD("dma2", XTAL_14_31818MHz/3 /* todo: set to 0, instead set via config register */, dma2_config)
167   MCFG_I8237_ADD("dma1", 0, dma1_config)
168   MCFG_I8237_ADD("dma2", 0, dma2_config)
164169   MCFG_PIC8259_ADD("intc1", WRITELINE(cs4031_device, intc1_int_w), VCC, READ8(cs4031_device, intc1_slave_ack_r))
165170   MCFG_PIC8259_ADD("intc2", DEVWRITELINE("intc1", pic8259_device, ir2_w), GND, NULL)
166171   MCFG_PIT8254_ADD("ctc", cs4031_pit_config)
r23707r23708
330335   update_read_regions();
331336   update_write_regions();
332337
338   // initialize dma controller clocks
339   update_dma_clock();
333340}
334341
335342//-------------------------------------------------
r23707r23708
430437   }
431438}
432439
440void cs4031_device::update_dma_clock()
441{
442   if (m_dma_clock_divider[m_registers[DMA_CLOCK] & 0x0f] != 0)
443   {
444      UINT32 dma_clock = clock() / m_dma_clock_divider[m_registers[DMA_CLOCK] & 0x0f];
433445
446      if (!BIT(m_registers[DMA_WAIT_STATE], 0))
447         dma_clock /= 2;
448
449      logerror("cs4031_device::update_dma_clock: dma clock is now %u\n", dma_clock);
450
451      m_dma1->set_unscaled_clock(dma_clock);
452      m_dma2->set_unscaled_clock(dma_clock);
453   }
454}
455
456
434457//**************************************************************************
435458//  INTERRUPTS
436459//**************************************************************************
r23707r23708
539562      // execute command
540563      switch (m_address)
541564      {
542      case 0x01: break;
565      case DMA_WAIT_STATE:
566         update_dma_clock();
567         break;
568
543569      case 0x05: break;
544570      case 0x06: break;
545571      case 0x07: break;
546572      case 0x08: break;
547573      case 0x09: break;
548      case 0x0a: break;
574
575      case DMA_CLOCK:
576         update_dma_clock();
577         break;
578
549579      case 0x10: break;
550580      case 0x11: break;
551581      case 0x12: break;
r23707r23708
556586      case 0x17: break;
557587      case 0x18: break;
558588
559      case 0x19:
589      case SHADOW_READ:
560590         update_read_regions();
561591         break;
562592
563      case 0x1a:
593      case SHADOW_WRITE:
564594         update_write_regions();
565595         break;
566596
567      case 0x1b:
597      case ROMCS:
568598         update_read_regions();
569599         update_write_regions();
570600         break;
571601
572      case 0x1c: break;
602      case SOFT_RESET_AND_GATEA20:
603         break;
573604      }
574605   }
575606
trunk/src/mess/machine/cs4031.h
r23707r23708
201201
202202   offs_t page_offset();
203203   void set_dma_channel(int channel, bool state);
204   void update_dma_clock();
204205   void nmi();
205206   void a20m();
206207
r23707r23708
248249
249250   // chipset configuration
250251   static const char* m_register_names[];
252   static const float m_dma_clock_divider[];
251253
252254   enum
253255   {

Previous 199869 Revisions Next


© 1997-2024 The MAME Team