public override bool init(outDatum[] xgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime, long jumpPointClock) { this.vgmBuf = xgmBuf; this.chipRegister = chipRegister; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; this.jumpPointClock = jumpPointClock; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; if (!getXGMInfo(vgmBuf)) { return(false); } //Driverの初期化 musicPtr = musicDataBlockAddr; xgmpcm = new MDSound.XGMFunction.XGMPCM[] { new MDSound.XGMFunction.XGMPCM() , new MDSound.XGMFunction.XGMPCM() , new MDSound.XGMFunction.XGMPCM() , new MDSound.XGMFunction.XGMPCM() }; return(true); }
public override bool init(byte[] vgmBuf, ChipRegister chipRegister, enmModel model, enmUseChip[] useChip, uint latency, uint waitTime) { this.vgmBuf = vgmBuf; this.chipRegister = chipRegister; this.model = model; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; if (model == enmModel.RealModel) { Stopped = true; vgmCurLoop = 9999; return(true); } Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; GD3 = getGD3Info(vgmBuf, 0); nsfInit(); return(true); }
public override bool init(byte[] vgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime) { this.vgmBuf = vgmBuf; this.chipRegister = chipRegister; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; GD3 = getGD3Info(vgmBuf, 0); //if (GD3 == null) return false; if (!getInformationHeader()) { return(false); } //if (model == EnmModel.RealModel) //{ // chipRegister.setYM2612SyncWait(0, 1); // chipRegister.setYM2612SyncWait(1, 1); //} return(true); }
public override bool init(outDatum[] xgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime) { this.vgmBuf = xgmBuf; this.chipRegister = chipRegister; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; if (!getXGMInfo(vgmBuf)) { return(false); } //if (model == EnmModel.RealModel) //{ // chipRegister.setYM2612SyncWait(0, 1); // chipRegister.setYM2612SyncWait(1, 1); //} //Driverの初期化 musicPtr = musicDataBlockAddr; xgmpcm = new XGMPCM[] { new XGMPCM(), new XGMPCM(), new XGMPCM(), new XGMPCM() }; DACEnable = 0; return(true); }
public override bool init(byte[] vgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime) { this.vgmBuf = vgmBuf; this.chipRegister = chipRegister; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; //if (model == EnmModel.RealModel) //{ // Stopped = true; // vgmCurLoop = 9999; // return true; //} Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; GD3 = getGD3Info(vgmBuf, 0); SidInit(vgmBuf); initial = true; return(true); }
/// <summary> /// イニシャライズ /// </summary> /// <param name="buf"></param> /// <param name="chipRegister"></param> /// <param name="model"></param> /// <param name="useChip"></param> /// <param name="latency"></param> /// <param name="waitTime"></param> /// <returns></returns> public override bool init(byte[] buf, ChipRegister chipRegister, enmModel model, enmUseChip[] useChip, uint latency, uint waitTime) { this.vgmBuf = buf; this.chipRegister = chipRegister; this.model = model; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; pc88.ChipRegister = chipRegister; pc88.fmTimer = timerOPN; pc88.model = model; //デバッグ向け //if (model == enmModel.RealModel) return true; GD3 = getGD3Info(buf, 0); fnVoicedat = string.IsNullOrEmpty(fnVoicedat) ? "voice.dat" : fnVoicedat; LoadFMVoice(fnVoicedat); fnPcm = string.IsNullOrEmpty(fnPcm) ? "mucompcm.bin" : fnPcm; pcmdata = LoadPCM(fnPcm); //Compile ushort basicsize = StoreBasicSource(buf, 1, 1); //MUCOM88 初期化 muc88.CINT();//0x9600 //コンパイルコマンドのセット z80.HL = 0xf010; mem.LD_8(0xf010, 0x41);// 'A' mem.LD_8(0xf011, 0x00); mem.LD_8(0xf012, 0x00); //↓コンパイルが実施される int ret = muc88.COMPIL();//vector 0xeea8 //エラー発生時は0以外が返る if (ret != 0) { int errLine = mem.LD_16(0x0f32e);//ワークアドレスのERRLINE log.Write(string.Format("コンパイル時にエラーが発生したみたい(errLine:{0})", errLine)); return(false); } SaveMub(basicsize); setPCMData(pcmdata); music2.initMusic2(); music2.MSTART(); return(true); }
public YM3526(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(14) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.YM3526; name = "YM3526"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public C352(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(32) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.C352; name = "C352"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public RF5C164(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(8) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.RF5C164; name = "RF5C164"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public Conductor(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(2) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.Conductor; name = "CONDUCTOR"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public K053260(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(4) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.K053260; name = "K053260"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public QSound(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(16) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.QSound; name = "QSound"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public NES(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(5) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.NESAPU; name = "NES"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public SEGAPCM(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(16) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.SegaPCM; name = "SEGAPCM"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public MidiGM(ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) : base(99) { this.chipRegister = chipRegister; this.setting = setting; this.vgmBuf = vgmBuf; Use = true; Device = EnmZGMDevice.MIDIGM; name = "GeneralMIDI"; Model = EnmVRModel.None; Number = 0; Hosei = 0; }
public void InitDriver( string fileName , Action <ChipDatum> OPL4Write , Action <long, int> OPL4WaitSend , musicDriverInterface.MmlDatum[] mdrBuf , ChipRegister chipRegister ) { musicDriverInterface.Log.writeMethod = disp; musicDriverInterface.Log.off = 0; setting = Audio.setting; this.chipRegister = chipRegister; int jumpIndex = -1; if (compiler != null) { CompilerInfo ci = compiler.GetCompilerInfo(); if (ci.jumpClock != -1) { jumpIndex = ci.jumpClock; } } object addtionalMoonDriverDotNETOption = new object[] { fileName,//string srcFile; (Func <string, Stream>)appendFileReaderCallback, Common.SampleRate, jumpIndex }; object[] addOp = new object[] { fileName, //(Func<string, Stream>)appendFileReaderCallback, (double)Common.SampleRate, jumpIndex }; List <ChipAction> lca = new List <ChipAction>(); MoonDriverChipAction ca = new MoonDriverChipAction(OPL4Write); lca.Add(ca); driver.Init( //fileName //, OPL4Write lca , mdrBuf , appendFileReaderCallback //,OPL4WaitSend , addOp ); }
public bool init(MmlDatum[] mdrBuf , string mdrWorkPath , MoonDriverManager moonDriverManager , ChipRegister chipRegister , EnmChip[] enmChips , uint v1, uint v2 , string mdrFileName) { if (moonDriverManager == null) { return(false); } this.vgmBuf = null; this.mdrBuf = mdrBuf; this.chipRegister = chipRegister; //this.useChip = useChip; //this.latency = latency; //this.waitTime = waitTime; this.MoonDriverManager = moonDriverManager; chipYMF278B = chipRegister.YMF278B[0]; filename = mdrFileName; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; initPhase = true; pcmdata = new List <SoundManager.PackData>(); //Driverの初期化 moonDriverManager.InitDriver( System.IO.Path.Combine(mdrWorkPath, "dummy") , OPL4InitialWrite , OPL4WaitSend , mdrBuf , chipRegister ); moonDriverManager.StartRendering((int)Common.SampleRate, (int)YMF278BClockValue); moonDriverManager.MSTART(0); return(true); }
public override bool init(byte[] vgmBuf, ChipRegister chipRegister, enmModel model, enmUseChip[] useChip, uint latency, uint waitTime) { this.vgmBuf = vgmBuf; this.chipRegister = chipRegister; this.model = model; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; if (model == enmModel.RealModel) { Stopped = true; vgmCurLoop = 9999; return(true); } Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; silent_length = 0; playtime_detected = false; ld = new HESDetector(); ld.Reset(); GD3 = getGD3Info(vgmBuf, 0); m_hes = new m_hes(); m_hes.chipRegister = chipRegister; m_hes.ld = ld; nez_play = new m_hes.NEZ_PLAY(); if (m_hes.HESLoad(nez_play, vgmBuf, (UInt32)vgmBuf.Length) != 0) { return(false); } nez_play.song.songno = (UInt32)(this.song + 1); m_hes.HESHESReset(nez_play); return(true); }
public override bool init(byte[] vgmBuf, ChipRegister chipRegister, enmModel model, enmUseChip[] useChip, uint latency, uint waitTime) { this.vgmBuf = vgmBuf; this.chipRegister = chipRegister; this.model = model; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; //コントロールを送信してからウェイトするためここでは0をセットする //vgmFrameCounter = -latency - waitTime; vgmFrameCounter = 0; vgmSpeed = 1; vgmSpeedCounter = 0; GD3 = getGD3Info(vgmBuf, 0); //if (GD3 == null) return false; if (!getInformationHeader()) return false; //ポートごとに事前に送信するコマンドを作成する if (!MakeBeforeSendCommand()) return false; if (model == enmModel.RealModel) { chipRegister.setYM2612SyncWait(0, 1); chipRegister.setYM2612SyncWait(1, 1); } return true; }
public bool init(musicDriverInterface.MmlDatum[] mubBuf, string workPath, mucomManager mucomManager, ChipRegister chipRegister , EnmChip[] useChip , uint latency , uint waitTime , string fn ) { if (mucomManager == null) { return(false); } this.vgmBuf = null; this.mubBuf = mubBuf; this.chipRegister = chipRegister; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; this.mm = mucomManager; chipYM2608 = chipRegister.YM2608[0]; chipYM2608S = chipRegister.YM2608[1]; chipYM2610 = chipRegister.YM2610[0]; chipYM2610S = chipRegister.YM2610[1]; chipYM2151 = chipRegister.YM2151[0]; filename = fn; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; initPhase = true; pd[0] = new List <SoundManager.PackData>(); pd[1] = new List <SoundManager.PackData>(); pd[2] = new List <SoundManager.PackData>(); pd[3] = new List <SoundManager.PackData>(); pd[4] = new List <SoundManager.PackData>(); pdOPNB[0] = null; pdOPNB[1] = null; pdOPNB[2] = null; pdOPNB[3] = null; pdOPM[0] = null; pdOPM[1] = null; //Driverの初期化 mm.InitDriver( System.IO.Path.Combine(workPath, "dummy") , new List <Action <musicDriverInterface.ChipDatum> >() { OPNAWriteP , OPNAWriteS , OPNBWriteP , OPNBWriteS , OPMWriteP } , new List <Action <byte[], int, int> >() { null , null , OPNBWriteAdpcmP , OPNBWriteAdpcmS } , OPNAWaitSend , false, mubBuf, true, false); mm.StartRendering(Common.DataSequenceSampleRate, (int)YM2608ClockValue, (int)YM2610ClockValue, (int)YM2151ClockValue); mm.MSTART(0); return(true); }
public override bool init(outDatum[] vgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime, long jumpPointClock) { throw new NotImplementedException(); }
public void InitDriver( string fileName , Action <ChipDatum> oPNAWrite , Action <long, int> oPNAWaitSend , Func <ChipDatum, int> ppz8Write , Func <ChipDatum, int> ppsdrvWrite , Func <ChipDatum, int> p86Write , bool dummy_NotSoundBoard2 //参照しません , musicDriverInterface.MmlDatum[] mBuf , bool isLoadADPCM , bool loadADPCMOnly , ChipRegister chipRegister , bool isGIMICOPNA) { musicDriverInterface.Log.writeMethod = disp; musicDriverInterface.Log.off = 0; setting = Audio.setting; this.chipRegister = chipRegister; isNRM = setting.pmdDotNET.soundBoard == 0; isSPB = setting.pmdDotNET.soundBoard == 1; isVA = false; usePPS = setting.pmdDotNET.usePPSDRV; usePPZ = setting.pmdDotNET.usePPZ8; this.isGIMICOPNA = isGIMICOPNA; int jumpIndex = -1; if (compiler != null) { CompilerInfo ci = compiler.GetCompilerInfo(); if (ci.jumpClock != -1) { jumpIndex = ci.jumpClock; } } object[] addtionalPMDDotNETOption = new object[] { isLoadADPCM, //bool loadADPCMOnly, //bool setting.pmdDotNET.isAuto, //bool isAUTO; isVA, //bool isNRM, //bool usePPS, //bool usePPZ, //bool isSPB, //bool envPmd, //string[] 環境変数PMD envPmdOpt, //string[] 環境変数PMDOpt fileName, //string srcFile; "", //string PPCFileHeader無視されます(設定不要) (Func <string, Stream>)appendFileReaderCallback, jumpIndex }; string[] addtionalPMDOption = GetPMDOption(); List <ChipAction> lca = new List <ChipAction>(); PMDChipAction ca = new PMDChipAction(oPNAWrite, oPNAWaitSend); lca.Add(ca); driver.Init( lca //fileName //, oPNAWrite //, oPNAWaitSend , mBuf , null //ここのコールバックは未使用 , new object[] { addtionalPMDDotNETOption //PMDDotNET option , addtionalPMDOption // PMD option , ppz8Write , ppsdrvWrite , p86Write }); //AUTO指定の場合に構成が変わるので、構成情報を受け取ってから音量設定を行う isNRM = (bool)addtionalPMDDotNETOption[4]; //4 = isNrm isSPB = (bool)addtionalPMDDotNETOption[7]; //7 = isSPB isVA = (bool)addtionalPMDDotNETOption[3]; //3 = isVA usePPS = (bool)addtionalPMDDotNETOption[5]; //5 = usePPS usePPZ = (bool)addtionalPMDDotNETOption[6]; //6 = usePPZ string[] pmdOptionVol = SetVolume(); ////ユーザーがコマンドラインでDオプションを指定していない場合はpmdVolを適用させる //if (!pmdvolFound && pmdOptionVol != null && pmdOptionVol.Length > 0) //{ // ((PMDDotNET.Driver)driver).resetOption(pmdOptionVol);// //} }
public abstract bool init(byte[] vgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime);
public bool init(musicDriverInterface.MmlDatum[] mubBuf, string workPath, mucomManager mucomManager, ChipRegister chipRegister , EnmChip[] useChip , uint latency , uint waitTime , string fn ) { if (mucomManager == null) { return(false); } this.vgmBuf = null; this.mubBuf = mubBuf; this.chipRegister = chipRegister; this.useChip = useChip; this.latency = latency; this.waitTime = waitTime; this.mm = mucomManager; chipYM2608 = chipRegister.YM2608[0]; filename = fn; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; initPhase = true; pd = new List <SoundManager.PackData>(); //Driverの初期化 mm.InitDriver(System.IO.Path.Combine(workPath, "dummy"), OPNAInitialWrite, OPNAWaitSend, false, mubBuf, true, false); mm.StartRendering((int)Common.SampleRate, (int)YM2608ClockValue); mm.MSTART(0); return(true); }
public abstract bool init(byte[] vgmBuf, ChipRegister chipRegister, enmModel model, enmUseChip[] useChip, uint latency, uint waitTime);
public override bool init(outDatum[] vgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime, long jumpPointClock) { return(true); }
public bool init(MmlDatum[] mBuf , string mWorkPath , PMDManager pmdManager , ChipRegister chipRegister , EnmChip[] enmChips , uint v1, uint v2 , string mFileName , bool isGIMICOPNA) { if (pmdManager == null) { return(false); } this.vgmBuf = null; this.mBuf = mBuf; this.chipRegister = chipRegister; //this.useChip = useChip; //this.latency = latency; //this.waitTime = waitTime; this.pm = pmdManager; chipYM2608 = chipRegister.YM2608[0]; chipPPZ8 = chipRegister.PPZ8[0]; chipPPSDRV = chipRegister.PPSDRV[0]; chipP86 = chipRegister.P86[0]; filename = mFileName; Counter = 0; TotalCounter = 0; LoopCounter = 0; vgmCurLoop = 0; Stopped = false; vgmFrameCounter = -latency - waitTime; vgmSpeed = 1; vgmSpeedCounter = 0; YM2608_FMVolume = 0; YM2608_SSGVolume = 0; YM2608_RhythmVolume = 0; YM2608_AdpcmVolume = 0; GIMIC_SSGVolume = 0; initPhase = true; pd = new List <SoundManager.PackData>(); psd = new List <SoundManager.PackData>(); pzd = new List <SoundManager.PackData>(); p8d = new List <SoundManager.PackData>(); //Driverの初期化 pm.InitDriver( System.IO.Path.Combine(mWorkPath, "dummy") , OPNAInitialWrite , OPNAWaitSend , PPZ8Write , PPSDRVWrite , P86Write , false , mBuf , true , false , chipRegister , isGIMICOPNA ); YM2608_FMVolume = pm.YM2608_FMVolume; YM2608_SSGVolume = pm.YM2608_SSGVolume; YM2608_RhythmVolume = pm.YM2608_RhythmVolume; YM2608_AdpcmVolume = pm.YM2608_AdpcmVolume; GIMIC_SSGVolume = pm.GIMIC_SSGVolume; if (!Audio.setting.pmdDotNET.isAuto && Audio.setting.pmdDotNET.setManualVolume) { YM2608_FMVolume = Audio.setting.pmdDotNET.volumeFM; YM2608_SSGVolume = Audio.setting.pmdDotNET.volumeSSG; YM2608_RhythmVolume = Audio.setting.pmdDotNET.volumeRhythm; YM2608_AdpcmVolume = Audio.setting.pmdDotNET.volumeAdpcm; GIMIC_SSGVolume = Audio.setting.pmdDotNET.volumeGIMICSSG; } pm.StartRendering((int)Common.SampleRate, (int)YM2608ClockValue); pm.MSTART(0); return(true); }
public abstract bool init(outDatum[] vgmBuf, ChipRegister chipRegister, EnmChip[] useChip, uint latency, uint waitTime, long jumpPointClock);
public ZgmChip Create(uint chipIdentNo, ChipRegister chipRegister, Setting setting, outDatum[] vgmBuf) { switch (chipIdentNo) { case 0x0000_000C: return(new SN76489(chipRegister, setting, vgmBuf)); case 0x0000_0010: return(new YM2413(chipRegister, setting, vgmBuf)); case 0x0000_002c: return(new YM2612(chipRegister, setting, vgmBuf)); case 0x0000_0030: return(new YM2151(chipRegister, setting, vgmBuf)); case 0x0000_0038: return(new SEGAPCM(chipRegister, setting, vgmBuf)); case 0x0000_0040: return(null); // RF5C68 case 0x0000_0044: return(new YM2203(chipRegister, setting, vgmBuf)); case 0x0000_0048: return(new YM2608(chipRegister, setting, vgmBuf)); case 0x0000_004C: return(new YM2610(chipRegister, setting, vgmBuf)); case 0x0000_0050: return(null); // YM3812 case 0x0000_0054: return(null); // YM3526 case 0x0000_0058: return(null); // Y8950 case 0x0000_005C: return(null); // YMF262 case 0x0000_0060: return(null); // YMF278B case 0x0000_0064: return(null); // YMF271 case 0x0000_0068: return(null); // YMZ280B case 0x0000_006C: return(new RF5C164(chipRegister, setting, vgmBuf)); case 0x0000_0070: return(null); // PWM case 0x0000_0074: return(null); // AY8910 case 0x0000_0080: return(null); // GameBoy DMG case 0x0000_0084: return(null); // NES APU case 0x0000_0088: return(null); // MultiPCM case 0x0000_008C: return(null); // uPD7759 case 0x0000_0090: return(null); // OKIM6258 case 0x0000_0098: return(null); // OKIM6295 case 0x0000_009C: return(new K051649(chipRegister, setting, vgmBuf)); case 0x0000_00A0: return(null); // K054539 case 0x0000_00A4: return(new HuC6280(chipRegister, setting, vgmBuf)); case 0x0000_00A8: return(new C140(chipRegister, setting, vgmBuf)); case 0x0000_00AC: return(new K053260(chipRegister, setting, vgmBuf)); case 0x0000_00B0: return(null); // Pokey case 0x0000_00B4: return(new QSound(chipRegister, setting, vgmBuf)); case 0x0000_00B8: return(null); // SCSP case 0x0000_00C0: return(null); // WonderSwan case 0x0000_00C4: return(null); // Virtual Boy VSU case 0x0000_00C8: return(null); // SAA1099 case 0x0000_00CC: return(null); // ES5503 case 0x0000_00D0: return(null); // ES5505/ES5506 case 0x0000_00D8: return(null); // X1-010 case 0x0000_00DC: return(null); // C352 case 0x0000_00E0: return(null); // GA20 case 0x0001_0000: return(new Conductor(chipRegister, setting, vgmBuf)); case 0x0002_0001: return(new YM2609(chipRegister, setting, vgmBuf)); case 0x0003_0000: return(null); // XG MU50 case 0x0003_0001: return(null); // XG MU100 case 0x0003_0002: return(null); // XG MU128 case 0x0003_0003: return(null); // XG MU1000 case 0x0003_0004: return(null); // XG MU2000 case 0x0003_0005: return(null); // XG MU1000EX case 0x0003_0006: return(null); // XG MU2000EX case 0x0004_0000: return(null); // GS MT-32 LA case 0x0004_0001: return(null); // GS CM-64 LA case 0x0004_0002: return(null); // GS SC-55 case 0x0004_0003: return(null); // GS SC-55mkII case 0x0004_0004: return(null); // GS SC-88 case 0x0004_0005: return(null); // GS SC-88Pro case 0x0004_0006: return(null); // GS SC-8820 case 0x0004_0007: return(null); // GS SC-8850 case 0x0004_0008: return(null); // GS SD-90 case 0x0004_0009: return(null); // GS Integra-7 case 0x0005_0000: return(new MidiGM(chipRegister, setting, vgmBuf)); case 0x0006_0000: return(null); // CSTi General case 0x0007_0000: return(null); // Wave General default: throw new ArgumentException(); } }