Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
 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;
 }
Beispiel #4
0
 public void Copy(PackData pack)
 {
     Chip.Move(pack.Chip);
     Type    = pack.Type;
     Address = pack.Address;
     Data    = pack.Data;
     ExData  = pack.ExData;
 }
Beispiel #5
0
 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;
 }
Beispiel #6
0
        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));
        }
Beispiel #7
0
 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;
 }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
            }
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
 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));
 }
Beispiel #12
0
 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));
 }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
                }
            }
        }