text: /***************************************************************************
  
      Space Firebird hardware
  
  ****************************************************************************/
  
  #include "driver.h"
  #include "cpu/i8039/i8039.h"
  #include "sound/dac.h"
  #include "sound/samples.h"
  #include "includes/spacefb.h"
  
  
  
  static UINT8 spacefb_sound_latch;
  
  
  
  READ8_HANDLER( spacefb_audio_p2_r )
  {
  	return (spacefb_sound_latch & 0x18) << 1;
  }
  
  
  READ8_HANDLER( spacefb_audio_t0_r )
  {
  	return spacefb_sound_latch & 0x20;
  }
  
  
  READ8_HANDLER( spacefb_audio_t1_r )
  {
  	return spacefb_sound_latch & 0x04;
  }
  
  
  WRITE8_HANDLER( spacefb_port_1_w )
  {
  	cpunum_set_input_line(1, 0, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE);
  
  	/* enemy killed */
  	if (!(data & 0x01) && (spacefb_sound_latch & 0x01))  sample_start(0,0,0);
  
  	/* ship fire */
  	if (!(data & 0x40) && (spacefb_sound_latch & 0x40))  sample_start(1,1,0);
  
  	/*
       *  Explosion Noise
       *
       *  Actual sample has a bit of attack at the start, but these doesn't seem to be an easy way
       *  to play the attack part, then loop the middle bit until the sample is turned off
       *  Fortunately it seems like the recorded sample of the spaceship death is the longest the sample plays for.
       *  We loop it just in case it runs out
       */
  	if ((data & 0x80) != (spacefb_sound_latch & 0x80))
  	{
  		if (data & 0x80)
  			/* play decaying noise */
  			sample_start(2,3,0);
  		else
  			/* start looping noise */
  			sample_start(2,2,1);
  	}
  
  	spacefb_sound_latch = data;
  }
  
  
  static const char *spacefb_sample_names[] =
  {
  	"*spacefb",
  	"ekilled.wav",
  	"shipfire.wav",
  	"explode1.wav",
  	"explode2.wav",
  	0
  };
  
  
  static struct Samplesinterface spacefb_samples_interface =
  {
  	3,
  	spacefb_sample_names
  };
  
  
  MACHINE_DRIVER_START( spacefb_audio )
  	MDRV_SPEAKER_STANDARD_MONO("mono")
  
  	MDRV_SOUND_ADD(DAC, 0)
  	MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
  
  	MDRV_SOUND_ADD(SAMPLES, 0)
  	MDRV_SOUND_CONFIG(spacefb_samples_interface)
  	MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
  MACHINE_DRIVER_END
  