Previous 15994 Revisions Next

r9159 Friday 17th September, 2010 at 11:13:44 UTC by Angelo Salese
[PCE]: Added the other sound fade in/out effects
[src/mess/machine]pce.c

src/mess/machine/pce.c
r9158r9159
153153   emu_timer   *adpcm_dma_timer;
154154
155155   emu_timer   *cdda_fadeout_timer;
156   emu_timer   *cdda_fadein_timer;
156157   double   cdda_volume;
157//   emu_timer   *cdda_fadeout_timer;
158   emu_timer   *adpcm_fadeout_timer;
159   emu_timer   *adpcm_fadein_timer;
160   double   adpcm_volume;
158161} pce_cd;
159162
160163/* MSM5205 ADPCM decoder definition */
r9158r9159
181184static void pce_cd_set_irq_line( running_machine *machine, int num, int state );
182185static TIMER_CALLBACK( pce_cd_adpcm_dma_timer_callback );
183186static TIMER_CALLBACK( pce_cd_cdda_fadeout_callback );
187static TIMER_CALLBACK( pce_cd_cdda_fadein_callback );
188static TIMER_CALLBACK( pce_cd_adpcm_fadeout_callback );
189static TIMER_CALLBACK( pce_cd_adpcm_fadein_callback );
184190
185
186191static WRITE8_HANDLER( pce_sf2_banking_w )
187192{
188193   memory_set_bankptr( space->machine, "bank2", memory_region(space->machine, "user1") + offset * 0x080000 + 0x080000 );
r9158r9159
12441249   timer_adjust_oneshot(pce_cd.data_timer, attotime_never, 0);
12451250   pce_cd.adpcm_dma_timer = timer_alloc(machine,  pce_cd_adpcm_dma_timer_callback , NULL);
12461251   timer_adjust_oneshot(pce_cd.adpcm_dma_timer, attotime_never, 0);
1252
12471253   pce_cd.cdda_fadeout_timer = timer_alloc(machine,  pce_cd_cdda_fadeout_callback , NULL);
12481254   timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, attotime_never, 0);
1255   pce_cd.cdda_fadein_timer = timer_alloc(machine,  pce_cd_cdda_fadein_callback , NULL);
1256   timer_adjust_oneshot(pce_cd.cdda_fadein_timer, attotime_never, 0);
1257
1258   pce_cd.adpcm_fadeout_timer = timer_alloc(machine,  pce_cd_adpcm_fadeout_callback , NULL);
1259   timer_adjust_oneshot(pce_cd.adpcm_fadeout_timer, attotime_never, 0);
1260   pce_cd.adpcm_fadein_timer = timer_alloc(machine,  pce_cd_adpcm_fadein_callback , NULL);
1261   timer_adjust_oneshot(pce_cd.adpcm_fadein_timer, attotime_never, 0);
12491262}
12501263
12511264WRITE8_HANDLER( pce_cd_bram_w )
r9158r9159
12721285
12731286static TIMER_CALLBACK( pce_cd_cdda_fadeout_callback )
12741287{
1275   pce_cd.cdda_volume-= 1.0; //TODO: step here could be wrong
1276   cdda_set_volume(machine->device("cdda"), pce_cd.cdda_volume);
1288   pce_cd.cdda_volume-= 0.1;
12771289
12781290   if(pce_cd.cdda_volume <= 0)
1291   {
1292      pce_cd.cdda_volume = 0.0;
1293      cdda_set_volume(machine->device("cdda"), 0.0);
12791294      timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, attotime_never, NULL);
1295   }
12801296   else
1297   {
1298      cdda_set_volume(machine->device("cdda"), pce_cd.cdda_volume);
12811299      timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(param), param);
1300   }
12821301}
12831302
1303static TIMER_CALLBACK( pce_cd_cdda_fadein_callback )
1304{
1305   pce_cd.cdda_volume+= 0.1;
1306
1307   if(pce_cd.cdda_volume >= 100.0)
1308   {
1309      pce_cd.cdda_volume = 100.0;
1310      cdda_set_volume(machine->device("cdda"), 100.0);
1311      timer_adjust_oneshot(pce_cd.cdda_fadein_timer, attotime_never, NULL);
1312   }
1313   else
1314   {
1315      cdda_set_volume(machine->device("cdda"), pce_cd.cdda_volume);
1316      timer_adjust_oneshot(pce_cd.cdda_fadein_timer, ATTOTIME_IN_USEC(param), param);
1317   }
1318}
1319
1320static TIMER_CALLBACK( pce_cd_adpcm_fadeout_callback )
1321{
1322   pce_cd.adpcm_volume-= 0.1;
1323
1324   if(pce_cd.adpcm_volume <= 0)
1325   {
1326      pce_cd.adpcm_volume = 0.0;
1327      msm5205_set_volume(machine->device("msm5205"), 0.0);
1328      timer_adjust_oneshot(pce_cd.adpcm_fadeout_timer, attotime_never, NULL);
1329   }
1330   else
1331   {
1332      msm5205_set_volume(machine->device("msm5205"), pce_cd.adpcm_volume);
1333      timer_adjust_oneshot(pce_cd.adpcm_fadeout_timer, ATTOTIME_IN_USEC(param), param);
1334   }
1335}
1336
1337static TIMER_CALLBACK( pce_cd_adpcm_fadein_callback )
1338{
1339   pce_cd.adpcm_volume+= 0.1;
1340
1341   if(pce_cd.adpcm_volume >= 100.0)
1342   {
1343      pce_cd.adpcm_volume = 100.0;
1344      msm5205_set_volume(machine->device("msm5205"), 100.0);
1345      timer_adjust_oneshot(pce_cd.adpcm_fadein_timer, attotime_never, NULL);
1346   }
1347   else
1348   {
1349      msm5205_set_volume(machine->device("msm5205"), pce_cd.adpcm_volume);
1350      timer_adjust_oneshot(pce_cd.adpcm_fadein_timer, ATTOTIME_IN_USEC(param), param);
1351   }
1352}
1353
1354
12841355WRITE8_HANDLER( pce_cd_intf_w )
12851356{
12861357   pce_cd_update(space->machine);
r9158r9159
14031474   case 0x0F:   /* ADPCM and CD audio fade timer */
14041475      printf("%02x FADE\n",data);
14051476
1406      if(data == 0x0c) //CD-DA short step (2500 msecs) fade out
1477      /* TODO: timers needs HW tests */
1478      switch(data & 0xf)
14071479      {
1408         pce_cd.cdda_volume = 100.0;
1409         timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(2500), 2500);
1480         case 0x00: //CD-DA / ADPCM enable (100 msecs)
1481            pce_cd.cdda_volume = 0.0;
1482            timer_adjust_oneshot(pce_cd.cdda_fadein_timer, ATTOTIME_IN_USEC(100), 100);
1483            pce_cd.adpcm_volume = 0.0;
1484            timer_adjust_oneshot(pce_cd.adpcm_fadein_timer, ATTOTIME_IN_USEC(100), 100);
1485            break;
1486         case 0x01: //CD-DA enable (100 msecs)
1487            pce_cd.cdda_volume = 0.0;
1488            timer_adjust_oneshot(pce_cd.cdda_fadein_timer, ATTOTIME_IN_USEC(100), 100);
1489            break;
1490         case 0x08: //CD-DA short (1500 msecs) fade out / ADPCM enable
1491            pce_cd.cdda_volume = 100.0;
1492            timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(1500), 1500);
1493            pce_cd.adpcm_volume = 0.0;
1494            timer_adjust_oneshot(pce_cd.adpcm_fadein_timer, ATTOTIME_IN_USEC(100), 100);
1495            break;
1496         case 0x09: //CD-DA long (5000 msecs) fade out
1497            pce_cd.cdda_volume = 100.0;
1498            timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(5000), 5000);
1499            break;
1500         case 0x0a: //ADPCM long (5000 msecs) fade out
1501            pce_cd.adpcm_volume = 100.0;
1502            timer_adjust_oneshot(pce_cd.adpcm_fadeout_timer, ATTOTIME_IN_USEC(5000), 5000);
1503            break;
1504         case 0x0c: //CD-DA short (1500 msecs) fade out / ADPCM enable
1505            pce_cd.cdda_volume = 100.0;
1506            timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(1500), 1500);
1507            pce_cd.adpcm_volume = 0.0;
1508            timer_adjust_oneshot(pce_cd.adpcm_fadein_timer, ATTOTIME_IN_USEC(100), 100);
1509            break;
1510         case 0x0d: //CD-DA short (1500 msecs) fade out
1511            pce_cd.cdda_volume = 100.0;
1512            timer_adjust_oneshot(pce_cd.cdda_fadeout_timer, ATTOTIME_IN_USEC(1500), 1500);
1513            break;
1514         case 0x0e: //ADPCM short (1500 msecs) fade out
1515            pce_cd.adpcm_volume = 100.0;
1516            timer_adjust_oneshot(pce_cd.adpcm_fadeout_timer, ATTOTIME_IN_USEC(1500), 1500);
1517            break;
14101518      }
1411
1412      if(data == 0x00) //CD-DA fade in (TODO)
1413      {
1414         pce_cd.cdda_volume = 100.0;
1415         cdda_set_volume(space->machine->device("cdda"), 100.0);
1416      }
14171519      break;
14181520   default:
14191521      return;

Previous 15994 Revisions Next


© 1998-2018 The MESS Team