public bool Deq(ref long Counter, ref Chip Chip, ref EnmDataType Type, ref int Address, ref int Data, ref object ExData) { lock (lockObj) { Counter = deqPos.Counter; Chip.Move(deqPos.pack.Chip); Type = deqPos.pack.Type; Address = deqPos.pack.Address; Data = deqPos.pack.Data; ExData = deqPos.pack.ExData; if (enqPos == deqPos) { bLength = 0; return(false); } bLength--; deqPos.Counter = 0; deqPos = deqPos.next; //debugDispBuffer(); return(true); } }
public void SendChipData(long counter, Chip chip, EnmDataType type, int address, int data, object exData) { Console.WriteLine("counter:{0} chip:{1} type:{2} address:{3} data:{4} exData:{5}", counter, chip, type, address, data, exData); int ch = 0; byte[] bs = (byte[])exData; if ((bs[0] & 0x80) != 0) { ch = bs[0] & 0xf; } SetDelta(ch, midi, counter); if (bs[0] == 0xf0) { midi.data[ch].Add(0xf0); midi.data[ch].Add((byte)bs.Length); } foreach (byte b in bs) { midi.data[ch].Add(b); } }
public void Copy(Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { this.Chip.Move(Chip); this.Type = Type; this.Address = Address; this.Data = Data; this.ExData = ExData; }
public void Copy(PackData pack) { Chip.Move(pack.Chip); Type = pack.Type; Address = pack.Address; Data = pack.Data; ExData = pack.ExData; }
public PackData(outDatum od, Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { this.od = od; this.Chip.Move(Chip); this.Type = Type; this.Address = Address; this.Data = Data; this.ExData = ExData; }
public new bool Enq(long Counter, Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { switch (Chip.Model) { case EnmModel.None: return(ringBuffer.Enq(Counter, Chip, Type, Address, Data, ExData)); case EnmModel.VirtualModel: return(ringBuffer.Enq(Counter + EmuDelay, Chip, Type, Address, Data, ExData)); case EnmModel.RealModel: return(ringBuffer.Enq(Counter + RealDelay, Chip, Type, Address, Data, ExData)); } return(ringBuffer.Enq(Counter, Chip, Type, Address, Data, ExData)); }
public void Copy(outDatum od, Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { this.od = null; if (od != null) { this.od = new outDatum(); this.od.args = od.args; this.od.linePos = od.linePos; this.od.type = od.type; this.od.val = od.val; } this.Chip.Move(Chip); this.Type = Type; this.Address = Address; this.Data = Data; this.ExData = ExData; }
public bool SetMMLParameter(ref outDatum od, ref long Counter, ref Chip Chip, ref EnmDataType Type, ref int Address, ref int Data, ref object ExData) { if (od == null) { if (Type != EnmDataType.Block) { return(true); } if (!(ExData is PackData[])) { return(true); } foreach (var o in (PackData[])ExData) { if (o.od == null) { continue; } SetMMLParameter2(ref o.od, ref Counter, ref Chip, ref o.Type, ref Address, ref Data, ref o.ExData, true); } return(true); } if (od.type == enmMMLType.unknown || od.linePos == null) { return(true); } if (Audio.chipRegister == null) { return(true); } if (!dicInst.ContainsKey(od.linePos.chip) || !dicInst[od.linePos.chip].ContainsKey(od.linePos.chipIndex) || !dicInst[od.linePos.chip][od.linePos.chipIndex].ContainsKey(od.linePos.chipNumber)) { //int chipIndex; SetupInstrument(od); } int cc = Audio.sm != null ? Audio.sm.CurrentClockCount : 0; dicInst[od.linePos.chip][od.linePos.chipIndex][od.linePos.chipNumber](od, cc, false); #if DEBUG //log.Write(string.Format("MML Param Chip:[{0}] Type:[{1}]",od.linePos.chip,od.type)); #endif return(true); }
public bool Enq(long Counter, Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { if (name != "") { log.Write( string.Format("[{0}]:Enqueue:Counter:{1}:Model:{2}:Device:{3}:Number:{4}:Type:{5}:Address:{6:x4}:Data:{7:x4}" , name, Counter, Chip.Model, Chip.Device, Chip.Number, Type, Address, Data)); } lock (lockObj) { if (enqPos.next == deqPos) { if (!AutoExtend) { return(false); } //自動拡張 try { CntPackData p = new CntPackData(); buf.Add(p); p.prev = enqPos; p.next = enqPos.next; enqPos.next = p; p.next.prev = p; } catch { return(false); } } bLength++; //データをセット enqPos.Counter = Counter; enqPos.pack.Copy(Chip, Type, Address, Data, ExData); if (Counter >= enqPos.prev.Counter) { enqPos = enqPos.next; //debugDispBuffer(); return(true); } CntPackData lastPos = enqPos.prev; //サーチ srcPos = enqPos.prev; while (Counter < srcPos.Counter && srcPos != deqPos) { srcPos = srcPos.prev; } if (Counter < srcPos.Counter && srcPos == deqPos) { srcPos = srcPos.prev; deqPos = enqPos; } //enqPosをリングから切り出す。 CntPackData nextPack = enqPos; enqPos.prev.next = enqPos.next; enqPos.next.prev = enqPos.prev; //enqPosを挿入する tmpPos = srcPos.next; tmpPos.prev = enqPos; srcPos.next = enqPos; enqPos.prev = srcPos; enqPos.next = tmpPos; enqPos = lastPos.next; //debugDispBuffer(); return(true); } }
public bool SetMMLParameter(ref outDatum od, ref long Counter, ref Chip Chip, ref EnmDataType Type, ref int Address, ref int Data, ref object ExData) { if (od == null || od.type == enmMMLType.unknown || od.linePos == null) { return(true); } if (!dicInst.ContainsKey(od.linePos.chip) || !dicInst[od.linePos.chip].ContainsKey(od.linePos.chipIndex) || !dicInst[od.linePos.chip][od.linePos.chipIndex].ContainsKey(od.linePos.chipNumber)) { Chip chip = null; int chipIndex = 0; switch (od.linePos.chip) { case "AY8910": if (Audio.chipRegister != null && Audio.chipRegister.AY8910 != null && od.linePos.chipIndex < Audio.chipRegister.AY8910.Count) { chip = Audio.chipRegister.AY8910[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.AY8910[zChip.Index]; chipIndex = zChip.Index; } AY8910 ay891 = new AY8910(chip); AY8910.Add(ay891); dicInstAdd(ay891, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(ay891, od.linePos.chipIndex, od.linePos.chipNumber); ay891.isTrace = isTrace; break; case "C140": if (Audio.chipRegister != null && Audio.chipRegister.C140 != null && od.linePos.chipIndex < Audio.chipRegister.C140.Count) { chip = Audio.chipRegister.C140[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.C140[zChip.Index]; chipIndex = zChip.Index; } C140 c140 = new C140(chip); C140.Add(c140); dicInstAdd(c140, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(c140, od.linePos.chipIndex, od.linePos.chipNumber); c140.isTrace = isTrace; break; case "CONDUCTOR": Conductor con = new Conductor(chip); Conductor.Add(con); dicInstAdd(con, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(con, od.linePos.chipIndex, od.linePos.chipNumber); con.isTrace = isTrace; break; case "HuC6280": if (Audio.chipRegister != null && Audio.chipRegister.HuC6280 != null && od.linePos.chipIndex < Audio.chipRegister.HuC6280.Count) { chip = Audio.chipRegister.HuC6280[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.HuC6280[zChip.Index]; chipIndex = zChip.Index; } HuC6280 huc = new HuC6280(chip); HuC6280.Add(huc); dicInstAdd(huc, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(huc, od.linePos.chipIndex, od.linePos.chipNumber); huc.isTrace = isTrace; break; case "K051649": if (Audio.chipRegister != null && Audio.chipRegister.K051649 != null && od.linePos.chipIndex < Audio.chipRegister.K051649.Count) { chip = Audio.chipRegister.K051649[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.K051649[zChip.Index]; chipIndex = zChip.Index; } K051649 k51 = new K051649(chip); K051649.Add(k51); dicInstAdd(k51, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(k51, od.linePos.chipIndex, od.linePos.chipNumber); k51.isTrace = isTrace; break; case "K053260": if (Audio.chipRegister != null && Audio.chipRegister.K053260 != null && od.linePos.chipIndex < Audio.chipRegister.K053260.Count) { chip = Audio.chipRegister.K053260[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.K053260[zChip.Index]; chipIndex = zChip.Index; } K053260 k53 = new K053260(chip); K053260.Add(k53); dicInstAdd(k53, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(k53, od.linePos.chipIndex, od.linePos.chipNumber); k53.isTrace = isTrace; break; case "QSound": if (Audio.chipRegister != null && Audio.chipRegister.QSound != null && od.linePos.chipIndex < Audio.chipRegister.QSound.Count) { chip = Audio.chipRegister.QSound[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.QSound[zChip.Index]; chipIndex = zChip.Index; } QSound qsnd = new QSound(chip); QSound.Add(qsnd); dicInstAdd(qsnd, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(qsnd, od.linePos.chipIndex, od.linePos.chipNumber); qsnd.isTrace = isTrace; break; case "RF5C164": if (Audio.chipRegister != null && Audio.chipRegister.RF5C164 != null && od.linePos.chipIndex < Audio.chipRegister.RF5C164.Count) { chip = Audio.chipRegister.RF5C164[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.RF5C164[zChip.Index]; chipIndex = zChip.Index; } RF5C164 rf5c = new RF5C164(chip); RF5C164.Add(rf5c); dicInstAdd(rf5c, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(rf5c, od.linePos.chipIndex, od.linePos.chipNumber); rf5c.isTrace = isTrace; break; case "SEGAPCM": if (Audio.chipRegister != null && Audio.chipRegister.SEGAPCM != null && od.linePos.chipIndex < Audio.chipRegister.SEGAPCM.Count) { chip = Audio.chipRegister.SEGAPCM[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.SEGAPCM[zChip.Index]; chipIndex = zChip.Index; } SegaPCM spcm = new SegaPCM(chip); SegaPCM.Add(spcm); dicInstAdd(spcm, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(spcm, od.linePos.chipIndex, od.linePos.chipNumber); spcm.isTrace = isTrace; break; case "SN76489": if (Audio.chipRegister != null && Audio.chipRegister.SN76489 != null && od.linePos.chipIndex < Audio.chipRegister.SN76489.Count) { chip = Audio.chipRegister.SN76489[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.SN76489[zChip.Index]; chipIndex = zChip.Index; } SN76489 dcsg = new SN76489(chip); SN76489.Add(dcsg); dicInstAdd(dcsg, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(dcsg, od.linePos.chipIndex, od.linePos.chipNumber); dcsg.isTrace = isTrace; break; case "YM2151": if (Audio.chipRegister != null && Audio.chipRegister.YM2151 != null && od.linePos.chipIndex < Audio.chipRegister.YM2151.Count) { chip = Audio.chipRegister.YM2151[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2151[zChip.Index]; chipIndex = zChip.Index; } YM2151 opm = new YM2151(chip); YM2151.Add(opm); dicInstAdd(opm, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opm, od.linePos.chipIndex, od.linePos.chipNumber); opm.isTrace = isTrace; break; case "YM2203": if (Audio.chipRegister != null && Audio.chipRegister.YM2203 != null && od.linePos.chipIndex < Audio.chipRegister.YM2203.Count) { chip = Audio.chipRegister.YM2203[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2203[zChip.Index]; chipIndex = zChip.Index; } YM2203 opn = new YM2203(chip); YM2203.Add(opn); dicInstAdd(opn, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opn, od.linePos.chipIndex, od.linePos.chipNumber); opn.isTrace = isTrace; break; case "YM2413": if (Audio.chipRegister != null && Audio.chipRegister.YM2413 != null && od.linePos.chipIndex < Audio.chipRegister.YM2413.Count) { chip = Audio.chipRegister.YM2413[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2413[zChip.Index]; chipIndex = zChip.Index; } YM2413 opll = new YM2413(chip); YM2413.Add(opll); dicInstAdd(opll, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opll, od.linePos.chipIndex, od.linePos.chipNumber); opll.isTrace = isTrace; break; case "YM2608": if (Audio.chipRegister != null && Audio.chipRegister.YM2608 != null && od.linePos.chipIndex < Audio.chipRegister.YM2608.Count) { chip = Audio.chipRegister.YM2608[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2608[zChip.Index]; chipIndex = zChip.Index; } YM2608 opna = new YM2608(chip); YM2608.Add(opna); dicInstAdd(opna, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opna, od.linePos.chipIndex, od.linePos.chipNumber); opna.isTrace = isTrace; break; case "YM2609": if (Audio.chipRegister != null && Audio.chipRegister.YM2609 != null && od.linePos.chipIndex < Audio.chipRegister.YM2609.Count) { chip = Audio.chipRegister.YM2609[od.linePos.chipIndex]; chipIndex = od.linePos.chipIndex; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2609[zChip.Index]; chipIndex = zChip.Index; } YM2609 opna2 = new YM2609(chip); YM2609.Add(opna2); dicInstAdd(opna2, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opna2, od.linePos.chipIndex, od.linePos.chipNumber); opna2.isTrace = isTrace; break; case "YM2610B": if (Audio.chipRegister != null && Audio.chipRegister.YM2610 != null && od.linePos.chipIndex < Audio.chipRegister.YM2610.Count) { chip = Audio.chipRegister.YM2610[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2610[zChip.Index]; chipIndex = zChip.Index; } YM2610B opnb = new YM2610B(chip); YM2610B.Add(opnb); dicInstAdd(opnb, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opnb, od.linePos.chipIndex, od.linePos.chipNumber); opnb.isTrace = isTrace; break; case "YM2612": if (Audio.chipRegister != null && Audio.chipRegister.YM2612 != null && od.linePos.chipIndex < Audio.chipRegister.YM2612.Count) { chip = Audio.chipRegister.YM2612[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2612[zChip.Index]; chipIndex = zChip.Index; } YM2612 opn2 = new YM2612(chip); YM2612.Add(opn2); dicInstAdd(opn2, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opn2, od.linePos.chipIndex, od.linePos.chipNumber); opn2.isTrace = isTrace; break; case "YM2612X": if (Audio.chipRegister != null && Audio.chipRegister.YM2612 != null && od.linePos.chipIndex < Audio.chipRegister.YM2612.Count) { chip = Audio.chipRegister.YM2612[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.YM2612[zChip.Index]; chipIndex = zChip.Index; } YM2612X opn2x = new YM2612X(chip); YM2612X.Add(opn2x); dicInstAdd(opn2x, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(opn2x, od.linePos.chipIndex, od.linePos.chipNumber); opn2x.isTrace = isTrace; break; case "GeneralMIDI": if (Audio.chipRegister != null && Audio.chipRegister.MIDI != null && od.linePos.chipIndex < Audio.chipRegister.MIDI.Count) { chip = Audio.chipRegister.MIDI[od.linePos.chipIndex]; } if (chip == null && od.linePos.chipIndex >= 0x80) { Driver.ZGM.ZgmChip.ZgmChip zChip = Audio.chipRegister.dicChipCmdNo[od.linePos.chipIndex]; chip = Audio.chipRegister.MIDI[zChip.Index]; chipIndex = zChip.Index; } GeneralMIDI gmidi = new GeneralMIDI(chip); GeneralMIDI.Add(gmidi); dicInstAdd(gmidi, od.linePos.chipIndex, od.linePos.chipNumber); instsAdd(gmidi, od.linePos.chipIndex, od.linePos.chipNumber); gmidi.isTrace = isTrace; break; } } int cc = Audio.sm != null ? Audio.sm.CurrentClockCount : 0; dicInst[od.linePos.chip][od.linePos.chipIndex][od.linePos.chipNumber](od, cc); return(true); }
public bool Deq(ref outDatum od, ref long Counter, ref Chip Chip, ref EnmDataType Type, ref int Address, ref int Data, ref object ExData) { return(ringBuffer.Deq(ref od, ref Counter, ref Chip, ref Type, ref Address, ref Data, ref ExData)); }
public bool Enq(outDatum od, long Counter, Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { return(ringBuffer.Enq(od, Counter, Chip, Type, Address, Data, ExData)); }
public bool SetMMLParameter(ref outDatum od, ref long Counter, ref Chip Chip, ref EnmDataType Type, ref int Address, ref int Data, ref object ExData) { if (od == null) { return(true); } if (od.type == enmMMLType.unknown || od.linePos == null) { #if DEBUG //log.Write(string.Format("Manager.cs:SetMMLParameter: {0}", od.type)); #endif return(true); } if (Audio.chipRegister == null) { return(true); } if (!dicInst.ContainsKey(od.linePos.chip) || !dicInst[od.linePos.chip].ContainsKey(od.linePos.chipIndex) || !dicInst[od.linePos.chip][od.linePos.chipIndex].ContainsKey(od.linePos.chipNumber)) { //int chipIndex; switch (od.linePos.chip) { case "AY8910": SetupAY8910(od); break; case "C140": SetupC140(od); break; case "C352": SetupC352(od); break; case "CONDUCTOR": SetupConductor(od); break; case "HuC6280": SetupHuC6280(od); break; case "K051649": SetupK051649(od); break; case "K053260": SetupK053260(od); break; case "QSound": SetupQSound(od); break; case "RF5C164": SetupRF5C164(od); break; case "SEGAPCM": SetupSEGAPCM(od); break; case "SN76489": SetupSN76489(od); break; case "YM2151": SetupYM2151(od); break; case "YM2203": SetupYM2203(od); break; case "YM2413": SetupYM2413(od); break; case "YM3526": SetupYM3526(od); break; case "Y8950": SetupY8950(od); break; case "YM3812": SetupYM3812(od); break; case "YMF262": SetupYMF262(od); break; case "YMF278B": SetupYMF278B(od); break; case "YMF271": SetupYMF271(od); break; case "YM2608": SetupYM2608(od); break; case "YM2609": SetupYM2609(od); break; case "YM2610B": SetupYM2610B(od); break; case "YM2612": SetupYM2612(od); break; case "YM2612X": SetupYM2612X(od); break; case "GeneralMIDI": SetupGeneralMIDI(od); break; case "PPZ8": SetupPPZ8(od); break; default: Console.WriteLine("Warning Unknown Chip {0}", od.linePos.chip); break; } } int cc = Audio.sm != null ? Audio.sm.CurrentClockCount : 0; dicInst[od.linePos.chip][od.linePos.chipIndex][od.linePos.chipNumber](od, cc); #if DEBUG //log.Write(string.Format("MML Param Chip:[{0}] Type:[{1}]",od.linePos.chip,od.type)); #endif return(true); }
public void SendChipData(long counter, Chip chip, EnmDataType type, int address, int data, object exData) { //Console.WriteLine("counter:{0} chip:{1} type:{2} address:{3} data:{4} exData:{5}", counter, chip, type, address, data, exData); if (chip.Model != EnmVRModel.VirtualModel) { return; } if (chip.Index != 0) { return; } if (chip.Device == Core.EnmZGMDevice.YM2608) { if (address == -1 && data == -1) { //Block data? if (exData == null) { return; } if (!(exData is PackData[])) { return; } foreach (PackData pd in (PackData[])exData) { WriteYM2608(chip.Number, (byte)(pd.Address >> 8), (byte)pd.Address, (byte)pd.Data); } } else { WriteYM2608(chip.Number, (byte)(address >> 8), (byte)address, (byte)data); } } else if (chip.Device == Core.EnmZGMDevice.YM2610B) { if (type == EnmDataType.Block) { //Block data? if (exData == null) { return; } if (exData is PackData[]) { foreach (PackData pd in (PackData[])exData) { WriteYM2610(chip.Number, (byte)(pd.Address >> 8), (byte)pd.Address, (byte)pd.Data); } } else { ; if (data == -1) { WriteYM2610_SetAdpcmA((byte)chip.Number, (byte[])exData); } else { WriteYM2610_SetAdpcmB((byte)chip.Number, (byte[])exData); } } } else { WriteYM2610(chip.Number, (byte)(address >> 8), (byte)address, (byte)data); } } else if (chip.Device == Core.EnmZGMDevice.YM2151) { if (address == -1 && data == -1) { //Block data? if (exData == null) { return; } if (!(exData is PackData[])) { return; } foreach (PackData pd in (PackData[])exData) { WriteYM2151(chip.Number, (byte)pd.Address, (byte)pd.Data); } } else { WriteYM2151(chip.Number, (byte)address, (byte)data); } } }