diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
index 272aae7483..ecdd02e979 100644
--- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
+++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
@@ -258,6 +258,7 @@
+
diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs
new file mode 100644
index 0000000000..8e8965d7b0
--- /dev/null
+++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Abstraction/IPSG.cs
@@ -0,0 +1,66 @@
+using BizHawk.Common;
+using BizHawk.Emulation.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
+{
+ ///
+ /// Represents a PSG device (in this case an AY-3-891x)
+ ///
+ public interface IPSG : ISoundProvider
+ {
+ ///
+ /// Initlization routine
+ ///
+ ///
+ ///
+ void Init(int sampleRate, int tStatesPerFrame);
+
+ ///
+ /// Activates a register
+ ///
+ int SelectedRegister { get; set; }
+
+ ///
+ /// Writes to the PSG
+ ///
+ ///
+ void PortWrite(int value);
+
+ ///
+ /// Reads from the PSG
+ ///
+ int PortRead();
+
+ ///
+ /// Resets the PSG
+ ///
+ void Reset();
+
+ ///
+ /// Called at the start of a frame
+ ///
+ void StartFrame();
+
+ ///
+ /// called at the end of a frame
+ ///
+ void EndFrame();
+
+ ///
+ /// Updates the sound based on number of frame cycles
+ ///
+ ///
+ void UpdateSound(int frameCycle);
+
+ ///
+ /// IStatable serialization
+ ///
+ ///
+ void SyncState(Serializer ser);
+ }
+}
diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs
index e71a17d8f0..1bcbf2b022 100644
--- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs
+++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs
@@ -594,7 +594,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
_machine.Spectrum.OSD_TapePlayingAuto();
}
- _monitorTimeOut = 90;
+ _monitorTimeOut = 50;
}
}
else
diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs
index 7443c43dd3..f003ddd6f2 100644
--- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs
+++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/AY38912.cs
@@ -7,7 +7,7 @@ using System.Linq;
namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
{
- public class AY38912 : ISoundProvider
+ public class AY38912 : IPSG
{
private int _tStatesPerFrame;
private int _sampleRate;
diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs
index c4b241b898..258af9f579 100644
--- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs
+++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs
@@ -42,7 +42,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
///
/// Device representing the AY-3-8912 chip found in the 128k and up spectrums
///
- public AY38912 AYDevice { get; set; }
+ public IPSG AYDevice { get; set; }
///
/// The spectrum keyboard