Previous 199869 Revisions Next

r20837 Friday 8th February, 2013 at 15:04:46 UTC by Miodrag Milanović
Cleanup (nw)
[src/mame/drivers]gottlieb.c
[src/mame/includes]gottlieb.h

trunk/src/mame/includes/gottlieb.h
r20836r20837
318318   inline void audio_end_state();
319319   void audio_process_clock(int logit);
320320   void audio_handle_zero_crossing(attotime zerotime, int logit);
321   void laserdisc_audio_process(laserdisc_device &device, int samplerate, int samples, const INT16 *ch0, const INT16 *ch1);
321322};
322323
323324/*----------- defined in audio/gottlieb.c -----------*/
trunk/src/mame/drivers/gottlieb.c
r20836r20837
583583}
584584
585585
586static void laserdisc_audio_process(device_t *dummy, laserdisc_device &device, int samplerate, int samples, const INT16 *ch0, const INT16 *ch1)
586void gottlieb_state::laserdisc_audio_process(laserdisc_device &device, int samplerate, int samples, const INT16 *ch0, const INT16 *ch1)
587587{
588   gottlieb_state *state = device.machine().driver_data<gottlieb_state>();
589   int logit = LOG_AUDIO_DECODE && device.machine().input().code_pressed(KEYCODE_L);
588   int logit = LOG_AUDIO_DECODE && machine().input().code_pressed(KEYCODE_L);
590589   attotime time_per_sample = attotime::from_hz(samplerate);
591   attotime curtime = state->m_laserdisc_last_time;
590   attotime curtime = m_laserdisc_last_time;
592591   int cursamp;
593592
594593   if (logit)
r20836r20837
597596   /* if no data, reset it all */
598597   if (ch1 == NULL)
599598   {
600      state->m_laserdisc_last_time = curtime + time_per_sample * samples;
599      m_laserdisc_last_time = curtime + time_per_sample * samples;
601600      return;
602601   }
603602
r20836r20837
611610         logerror("%s: %d", (curtime + time_per_sample + time_per_sample).as_string(6), sample);
612611
613612      /* if we are past the "break in transmission" time, reset everything */
614      if ((curtime - state->m_laserdisc_last_clock) > attotime::from_usec(400))
615         state->audio_end_state();
613      if ((curtime - m_laserdisc_last_clock) > attotime::from_usec(400))
614         audio_end_state();
616615
617616      /* if this sample reinforces that the previous one ended a zero crossing, count it */
618      if ((sample >= 256 && state->m_laserdisc_last_samples[1] >= 0 && state->m_laserdisc_last_samples[0] < 0) ||
619         (sample <= -256 && state->m_laserdisc_last_samples[1] <= 0 && state->m_laserdisc_last_samples[0] > 0))
617      if ((sample >= 256 && m_laserdisc_last_samples[1] >= 0 && m_laserdisc_last_samples[0] < 0) ||
618         (sample <= -256 && m_laserdisc_last_samples[1] <= 0 && m_laserdisc_last_samples[0] > 0))
620619      {
621620         attotime zerotime;
622621         int fractime;
623622
624623         /* compute the fractional position of the 0-crossing, between the two samples involved */
625         fractime = (-state->m_laserdisc_last_samples[0] * 1000) / (state->m_laserdisc_last_samples[1] - state->m_laserdisc_last_samples[0]);
624         fractime = (-m_laserdisc_last_samples[0] * 1000) / (m_laserdisc_last_samples[1] - m_laserdisc_last_samples[0]);
626625
627626         /* use this fraction to compute the approximate actual zero crossing time */
628627         zerotime = curtime + time_per_sample * fractime / 1000;
629628
630629         /* determine if this is a clock; if it is, process */
631         state->audio_handle_zero_crossing(zerotime, logit);
630         audio_handle_zero_crossing(zerotime, logit);
632631      }
633632      if (logit)
634633         logerror(" \n");
635634
636635      /* update our sample tracking and advance time */
637      state->m_laserdisc_last_samples[0] = state->m_laserdisc_last_samples[1];
638      state->m_laserdisc_last_samples[1] = sample;
636      m_laserdisc_last_samples[0] = m_laserdisc_last_samples[1];
637      m_laserdisc_last_samples[1] = sample;
639638      curtime += time_per_sample;
640639   }
641640
642641   /* remember the last time */
643   state->m_laserdisc_last_time = curtime;
642   m_laserdisc_last_time = curtime;
644643}
645644
646645
r20836r20837
17451744   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
17461745
17471746   MCFG_LASERDISC_PR8210_ADD("laserdisc")
1748   MCFG_LASERDISC_AUDIO(laserdisc_audio_delegate(FUNC(laserdisc_audio_process), device))
1747   MCFG_LASERDISC_AUDIO(laserdisc_audio_delegate(FUNC(gottlieb_state::laserdisc_audio_process), (gottlieb_state*)owner))
17491748   MCFG_LASERDISC_OVERLAY_DRIVER(GOTTLIEB_VIDEO_HCOUNT, GOTTLIEB_VIDEO_VCOUNT, gottlieb_state, screen_update_gottlieb)
17501749   MCFG_LASERDISC_OVERLAY_CLIP(0, GOTTLIEB_VIDEO_HBLANK-1, 0, GOTTLIEB_VIDEO_VBLANK-8)
17511750   MCFG_SOUND_ROUTE(0, "mono", 1.0)
r20836r20837
18361835   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
18371836
18381837   MCFG_LASERDISC_PR8210_ADD("laserdisc")
1839   MCFG_LASERDISC_AUDIO(laserdisc_audio_delegate(FUNC(laserdisc_audio_process), device))
1838   MCFG_LASERDISC_AUDIO(laserdisc_audio_delegate(FUNC(gottlieb_state::laserdisc_audio_process), (gottlieb_state*)owner))
18401839   MCFG_LASERDISC_OVERLAY_DRIVER(GOTTLIEB_VIDEO_HCOUNT, GOTTLIEB_VIDEO_VCOUNT, gottlieb_state, screen_update_gottlieb)
18411840   MCFG_LASERDISC_OVERLAY_CLIP(0, GOTTLIEB_VIDEO_HBLANK-1, 0, GOTTLIEB_VIDEO_VBLANK-8)
18421841   MCFG_SOUND_ROUTE(0, "mono", 1.0)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team