Previous 199869 Revisions Next

r19320 Wednesday 5th December, 2012 at 02:39:50 UTC by David Haywood
further neocd/scd code reduction (nw)
[src/mame/machine]megacd.c megacdcd.c megacdcd.h
[src/mess/drivers]ng_aes.c

trunk/src/mame/machine/megacd.c
r19319r19320
17581758
17591759   // timed reset of flags
17601760   scd_mode_dmna_ret_flags |= 0x0021;
1761
1761   
17621762   scd_dma_timer->adjust(attotime::from_hz(megadriv_framerate) / megadrive_total_scanlines);
17631763
17641764}
trunk/src/mame/machine/megacdcd.c
r19319r19320
441441   LC8951RegistersW[REG_W_WAL] = wa & 0xff; LC8951RegistersW[REG_W_WAH] = (wa >> 8) &0xff;
442442   LC8951RegistersR[REG_R_HEAD0] = 0x01;
443443   LC8951RegistersR[REG_R_STAT3] = 0x80;
444
445
444446}
445447
446448
r19319r19320
642644   case REG_W_DACH: LC8951RegistersW[REG_W_DACH] = data; break;
643645
644646   case REG_W_DTTRG:
645         if (LC8951RegistersW[REG_W_IFCTRL] & 0x02)
647         if (!is_neoCD)
646648         {
649            if (LC8951RegistersW[REG_W_IFCTRL] & 0x02)
650            {
651               LC8951RegistersR[REG_R_IFSTAT] &= ~0x08;
652               SET_CDC_DMA;
653               CDC_REG0 &= ~0x8000;
654            }
655         }
656         else
657         {
658            LC8951RegistersW[REG_W_DTTRG]  = ~0x00;
647659            LC8951RegistersR[REG_R_IFSTAT] &= ~0x08;
648            SET_CDC_DMA;
649            CDC_REG0 &= ~0x8000;
650660         }
651661         break;
652662
653   case REG_W_DTACK: LC8951RegistersR[REG_R_IFSTAT] |= 0x40; break;
663   case REG_W_DTACK:
664         //if (!is_neoCD)
665         {
666            LC8951RegistersR[REG_R_IFSTAT] |= 0x40;
667         }
668         //else
669         //{
670         //   LC8951RegistersW[REG_W_DTACK]  = ~0x00;
671         //   LC8951RegistersR[REG_R_IFSTAT] &= ~0x40;
672         //}
673         break;
654674   case REG_W_WAL: LC8951RegistersW[REG_W_WAL] = data; break;
655675   case REG_W_WAH:   LC8951RegistersW[REG_W_WAH] = data; break;
656676   case REG_W_CTRL0: LC8951RegistersW[REG_W_CTRL0] = data; break;
657   case REG_W_CTRL1: LC8951RegistersW[REG_W_CTRL1] = data; break;
677   case REG_W_CTRL1: LC8951RegistersW[REG_W_CTRL1] = data;
678      //LC8951UpdateHeader(); // NeoCD
679      break;
658680   case REG_W_PTL: LC8951RegistersW[REG_W_PTL] = data; break;
659681   case REG_W_PTH: LC8951RegistersW[REG_W_PTH] = data; break;
660682   case REG_W_CTRL2: LC8951RegistersW[REG_W_CTRL2] = data; break;
r19319r19320
662684   }
663685}
664686
687
688
665689void lc89510_temp_device::CDD_Process(running_machine& machine, int reason)
666690{
667691   CDD_Export();
r19319r19320
947971
948972
949973
950   if (segacd.cd)
951      printf("cd found\n");
974//   if (segacd.cd)
975//      printf("cd found\n");
952976}
953977
954978
955979
956
957980TIMER_DEVICE_CALLBACK_MEMBER( lc89510_temp_device::segacd_access_timer_callback )
958981{
959982   if (!is_neoCD)
r19319r19320
12921315   }
12931316}
12941317
1295void lc89510_temp_device::LC8951Reset()
1296{
1297   memset(LC8951RegistersR, 0, sizeof(LC8951RegistersR));
1298   memset(LC8951RegistersW, 0, sizeof(LC8951RegistersW));
1299   LC8951RegistersR[REG_R_IFSTAT] = 0xFF;
1300   LC8951RegistersR[REG_R_STAT3] = 0x80;
13011318
1302   LC8951UpdateHeader();
1303}
13041319
1305void lc89510_temp_device::reset_NeoCd(void)
1306{
1307   {
1308      cdrom_image_device *cddevice = machine().device<cdrom_image_device>("cdrom");
1309      if ( cddevice )
1310      {
1311         segacd.cd = cddevice->get_cdrom_file();
1312         if ( segacd.cd )
1313         {
1314            printf("found cd\n");
1315            segacd.toc = cdrom_get_toc( segacd.cd );
1316            cdda_set_cdrom( m_cdda, segacd.cd );
1317            cdda_stop_audio( m_cdda ); //stop any pending CD-DA
1318         }
1319      }
1320   }
1321}
13221320
13231321
1322
13241323/*
13251324 *  CD-ROM / DMA control
13261325 *
r19319r19320
15351534UINT16 lc89510_temp_device::nff0016_r(void) { return nff0016; }
15361535
15371536
1538void lc89510_temp_device::nLC8951_w(UINT16 byteValue)
1539{
1540   int regno = CDC_REG0 & 0xf;
1541
1542   switch (regno) {
1543      case 3:                                             // DBCH
1544         LC8951RegistersW[REG_W_DBCH]  = byteValue & 0x0F;
1545         break;
1546      case 6:                                             // DTTRG
1547         LC8951RegistersW[REG_W_DTTRG]  = ~0x00;
1548         LC8951RegistersR[REG_R_IFSTAT] &= ~0x08;
1549         break;
1550      case 7:                                             // DTACK
1551         LC8951RegistersW[REG_W_DTACK]  = ~0x00;
1552         LC8951RegistersR[REG_R_IFSTAT] &= ~0x40;
1553         break;
1554//          case 10:
1555//              LC8951RegistersW[regno] = byteValue;
1556//              bprintf(PRINT_NORMAL, _T("  - CTRL0 -> %02X (PC: 0x%06X)\n"), LC8951RegistersW[regno], byteValue, SekGetPC(-1));
1557//              break;
1558      case 11:
1559         LC8951RegistersW[REG_W_CTRL1]  = byteValue;                     // CTRL1
1560         LC8951UpdateHeader();
1561         break;
1562      case 15:
1563         LC8951Reset();
1564         break;
1565      default:
1566         LC8951RegistersW[regno] = byteValue;
1567   }
1568   CDC_REG0 = (regno + 1) & 0x0F;
1569}
1570
1571
trunk/src/mame/machine/megacdcd.h
r19319r19320
296296   void LC8951UpdateHeader();
297297   char* LC8915InitTransfer(int NeoCDDMACount);
298298   void LC8915EndTransfer();
299   void LC8951Reset();
299
300300   void neocd_cdd_tx_w(UINT8 data);
301301   UINT8 neocd_cdd_rx_r();
302302   void NeoCDCommsReset();
303303
304304   INT32 CDEmuLoadSector(INT32 LBA, char* pBuffer);
305   void reset_NeoCd(void);
306305
307   void nLC8951_w(UINT16 byteValue);
308306   UINT16 nff0016_r(void);
309307   void nff0016_set(UINT16 wordValue);
310308   void nff0002_set(UINT16 wordValue);
trunk/src/mess/drivers/ng_aes.c
r19319r19320
793793         m_tempcdc->segacd_cdc_mode_address_w(*curr_space, 0, byteValue, 0xffff);
794794         break;
795795      case 0x0102:
796         m_tempcdc->nLC8951_w(byteValue);
796         m_tempcdc->CDC_Reg_w(byteValue);
797797         break;
798798
799799      case 0x0104:
r19319r19320
14651465   // for custom vectors
14661466   machine().device("maincpu")->execute().set_irq_acknowledge_callback(neocd_int_callback);
14671467
1468   m_tempcdc->reset_NeoCd();
1468   m_tempcdc->reset_cd();
14691469   
14701470}
14711471

Previous 199869 Revisions Next


© 1997-2024 The MAME Team