//using System; //using System.Collections.Generic; //using System.Linq; //using System.Text; //using Cosmos.Hardware2; //using Cosmos.Hardware2.Audio.Devices.ES1370.Registers; //using Cosmos.Hardware2.Audio.Devices.ES1370.Components; //using Cosmos.Hardware2.Audio.Devices.ES1370.Managers; //namespace Cosmos.Hardware2.Audio.Devices.ES1370 //{ // /// // /// Driver for the soundcard Ensoniq 1370 AudioPCI (testing for QEMU audio emulation) // /// It should work also in Ensoniq 1371 all revision. // /// // public class ES1370 : GenericSoundCard // { // private InterruptStatusRegister isr; // private ControlRegister cr; // private SerialInterfaceRegister sir; // private UARTInterfaceRegister uir; // public int[] FixedRatesSupported={5512, 11025, 22050, 44100}; // public const int SRClock = 1411200; // public const int minClockDen=29; // public const int maxClockDen=353; // public const int clockStep=1; // public const byte DACPage = 0x0c; // public const byte UARTPage = 0x0e; // public const byte UART1Page = 0x0f; // public const byte DAC1SMPREG =0x70; // public const byte DAC2SMPREG=0x74; // public const byte DAC1VolSMPREG=0x7c; // public const byte DAC2VolSMPREG=0x7e; // public const byte TruncNumSMPREG=0x00; // public const byte INTRegsSMPREG=0x01; // public const byte AccumFrac=0x02; // public const byte VFreqFrac = 0x03; // public ES1370(PCIDevice device) : base(device) // { // isr=(InterruptStatusRegister.Load(getMemReference())); // sir = (SerialInterfaceRegister.Load(getMemReference())); // uir = (UARTInterfaceRegister.Load(getMemReference())); // cr=(ControlRegister.Load(getMemReference())); // //dacs.Add(new AK(new DACak4531(), cr.DAC1Enabled,(byte)MainRegister.Bit.SerialIntContr,MainRegister.Bit.Dac1FrameAddr, (byte)MainRegister.Bit.Dac1FrameSize)); // //dacs.Add(new DACManager(new DACak4531(), cr.DAC2Enabled, (byte)MainRegister.Bit.SerialIntContr, (byte)MainRegister.Bit.Dac2FrameAddr, (byte)MainRegister.Bit.Dac2FrameSize)); // } // /// // /// Retrieve all Ensoniq AudioPCI 1370 cards found on computer. // /// // /// // public static List FindAll() // { // List found = new List(); // foreach (PCIDevice device in Cosmos.Hardware2.PCIBus.Devices) // { // Console.WriteLine("VendorID: " + device.VendorID + " - DeviceID: " + device.DeviceID); // if (device.VendorID == 0x10EC && device.DeviceID == 0x8139) // found.Add(new ES1370(device)); // } // return found; // } // #region Power Management // public override bool Enable() // { // cr.PowerEnabled=true; // return cr.PowerEnabled; // } // public override bool Disable() // { // cr.PowerEnabled = false; // return cr.PowerEnabled; // } // public void InitializeDriver() // { // //Cosmos.Hardware2.Interrupts.IRQ05 = new Cosmos.Hardware2.Interrupts.InterruptDelegate(this.HandleAudioInterrupt); // //Cosmos.Hardware2.Interrupts.AddIRQHandler(5, this.HandleAudioInterrupt); // } // #endregion // public string Name // { // get { return "Generic ES1370 Audio device"; } // } // #region Interrupt (IRQ) // /// // /// (Should be) Called when the PCI audio card raises an Interrupt. // /// // //public void HandleAudioInterrupt(ref IRQContext aContext) // //{ // // Console.Write("IRQ detected: "); // // if (isr.IsCodecBusyIntEnabled) // // Console.WriteLine("Codec busy Interrupt! "); // // if(isr.IsCodecStatusIntEnabled) // // Console.WriteLine("Codec Enabled Interrupt! "); // // if (isr.IsCodecWriteInProgressEnabled) // // Console.WriteLine("Codec WriteInProgress Interrupt!"); // // if (isr.IsDAC1InterruptEnabled) // // Console.WriteLine("DAC1 Interrupt!"); // // if (isr.IsDAC2InterruptEnabled) // // Console.WriteLine("DAC2 Interrupt!"); // // if (isr.IsUARTInterruptEnabled) // // Console.WriteLine("UART Interrupt!"); // // if (isr.IsMCCBIntEnabled) // // Console.WriteLine("MCCB Interrupt!"); // // this.ResetAllIRQ(); // //} // private void ResetAllIRQ() // { // //Setting a bit to 1 will reset it. So we write 16 one's to reset entire getISR(). // isr.ISR = 0xFFFF; // } // /// // /// The IRQMaskRegister determines what kind of events which cause IRQ to be raised. // /// // #endregion // #region Debugging // public void DumpRegisters() // { // Console.WriteLine("Control Register: " + cr.ToString()); // Console.WriteLine("Status Register: " + isr.ToString()); // } // #endregion //#region I/O Helper routine // private void setDataOnDACCodec(AK4531Manager dacManager){ } // private byte getMemPageValueByNum(byte num) // { // return getMemReference().Read8((UInt32)(Registers.MainRegister.Bit.MemPageAddr+(byte)((num) & 0x0f))); // } // private void setMemPageValueByNum(byte num, byte value) // { // getMemReference().Write8((UInt32)(Registers.MainRegister.Bit.MemPageAddr + (byte)((num) & 0x0f)), value); // } // private int getDAC2DividendRatio(int num) // { // int offset = (((num) & 0x1fff) << 16); // return getMemReference().Read8((UInt32)(Registers.MainRegister.Bit.Control + (byte)offset)); // } // private void setDAC2ClockInDividendRatio(int num,byte value) // { // int offset = (((num) >> 16) & 0x1fff); // getMemReference().Write8((UInt32)(Registers.MainRegister.Bit.Control + (byte)offset),value); // } // private int getDAC1ClockDividendRatio(byte num) // { // int offset = (((num) & 0x03) << 12); // return getMemReference().Read8((UInt32)(((Registers.MainRegister.Bit.Control) + (byte)offset))); // } // private void setVoiceCodeFromCCBNum(byte num, byte value) // { // int offset = (((num) >> 5) & 0x03); // getMemReference().Write8((UInt32)(Registers.MainRegister.Bit.Status + (byte)offset), value); // } // private void setTxUARTInterruptInFromNum(int num, byte value){ // byte offset = (byte)(((num) >> 5) & 0x03); // getMemReference().Write8((UInt32)(MainRegister.Bit.UartInfo + (byte)offset), value); // } // private byte getTxUARTInterruptOutFromNum(byte num) // { // byte offset = (byte)(((num) & 0x03 ) << 5); // return getMemReference().Read8((UInt32)(MainRegister.Bit.UartInfo + (byte)offset)); // } // private byte controlOutFromNum(byte num) // { // return getMemReference().Read8((UInt32)(MainRegister.Bit.UartInfo + (byte)((num) & 0x03))); // } // private int SRClockDivideByNum(int n) // { // return (SRClock / n - 2); // } //#endregion // private void preparePlayBackOnDac(AK4531Manager dacManager) // { // //dacManager.setDACStateEnabled(true); // } // public override void playStream(PCMStream pcmStream) // { // for (int count = 0; count < pcmStream.getData().Length; count++) // { // } // } // } //}