Example #1
0
        // Set the emulated SID model
        public override void model(sidplayfp.SidConfig.sid_model_t model)
        {
            reSID.siddefs.chip_model chipModel;
            switch (model)
            {
            case sidplayfp.SidConfig.sid_model_t.MOS6581:
                chipModel = reSID.siddefs.chip_model.MOS6581;
                break;

            case sidplayfp.SidConfig.sid_model_t.MOS8580:
                chipModel = reSID.siddefs.chip_model.MOS8580;
                break;

            /* MOS8580 + digi boost
             *      chipModel = (RESID_NS::MOS8580);
             *      m_sid.set_voice_mask(0x0f);
             *      m_sid.input(-32768);
             */
            default:
                m_status = false;
                m_error  = ERR_INVALID_CHIP;
                return;
            }

            m_sid.set_chip_model(chipModel);
            m_status = true;
        }
Example #2
0
        private void sidCreate(sidplayfp.sidbuilder builder, sidplayfp.SidConfig.sid_model_t defaultModel,
                               bool forced, ref List <UInt32> extraSidAddresses)
        {
            if (builder != null)
            {
                sidplayfp.SidTuneInfo tuneInfo = m_tune.getInfo();

                // Setup base SID
                sidplayfp.SidConfig.sid_model_t userModel = getSidModel(tuneInfo.sidModel(0), defaultModel, forced);
                sidemu s = builder.lock_(m_c64.getEventScheduler(), userModel);
                if (!builder.getStatus())
                {
                    throw new configError(builder.error());
                }

                m_c64.setBaseSid(s);
                m_mixer.addSid(s);

                // Setup extra SIDs if needed
                if (extraSidAddresses.Count != 0)
                {
                    // If bits 6-7 are set to Unknown then the second SID will be set to the same SID
                    // model as the first SID.
                    defaultModel = userModel;

                    UInt32 extraSidChips = (UInt32)extraSidAddresses.Count;

                    for (UInt32 i = 0; i < extraSidChips; i++)
                    {
                        sidplayfp.SidConfig.sid_model_t userModel_1 = getSidModel(tuneInfo.sidModel(i + 1), defaultModel, forced);

                        sidemu s1 = builder.lock_(m_c64.getEventScheduler(), userModel_1);
                        if (!builder.getStatus())
                        {
                            throw new configError(builder.error());
                        }

                        if (!m_c64.addExtraSid(s1, (Int32)extraSidAddresses[(Int32)i]))
                        {
                            throw new configError(ERR_UNSUPPORTED_SID_ADDR);
                        }

                        m_mixer.addSid(s1);
                    }
                }
            }
        }
Example #3
0
 /**
  * Set SID model.
  */
 public virtual void model(sidplayfp.SidConfig.sid_model_t model)
 {
 }
Example #4
0
        /**
         * Get the SID model.
         *
         * @param sidModel the tune requested model
         * @param defaultModel the default model
         * @param forced true if the default model shold be forced in spite of tune model
         */
        public sidplayfp.SidConfig.sid_model_t getSidModel(sidplayfp.SidTuneInfo.model_t sidModel, sidplayfp.SidConfig.sid_model_t defaultModel, bool forced)
        {
            sidplayfp.SidTuneInfo.model_t tuneModel = sidModel;

            // Use preferred speed if forced or if song speed is unknown
            if (forced || tuneModel == sidplayfp.SidTuneInfo.model_t.SIDMODEL_UNKNOWN || tuneModel == sidplayfp.SidTuneInfo.model_t.SIDMODEL_ANY)
            {
                switch (defaultModel)
                {
                case sidplayfp.SidConfig.sid_model_t.MOS6581:
                    tuneModel = sidplayfp.SidTuneInfo.model_t.SIDMODEL_6581;
                    break;

                case sidplayfp.SidConfig.sid_model_t.MOS8580:
                    tuneModel = sidplayfp.SidTuneInfo.model_t.SIDMODEL_8580;
                    break;

                default:
                    break;
                }
            }

            sidplayfp.SidConfig.sid_model_t newModel;

            switch (tuneModel)
            {
            default:
            case sidplayfp.SidTuneInfo.model_t.SIDMODEL_6581:
                newModel = sidplayfp.SidConfig.sid_model_t.MOS6581;
                break;

            case sidplayfp.SidTuneInfo.model_t.SIDMODEL_8580:
                newModel = sidplayfp.SidConfig.sid_model_t.MOS8580;
                break;
            }

            return(newModel);
        }