Пример #1
0
        private void LoadOne(string f)
        {
            _current = new Result {
                Filename = f
            };
            bool result;

            try
            {
                result = _ldr.LoadRom(f, _comm, null);
            }
            catch (Exception e)
            {
                _current.Status = Result.EStatus.ExceptOnLoad;
                _current.Messages.Add(e.ToString());
                _results.Add(_current);
                _current = null;
                return;
            }

            _current.Fullname = _ldr.CanonicalFullPath;
            if (_current.Status == Result.EStatus.ErrorOnLoad)
            {
                _results.Add(_current);
                _current = null;
                return;
            }

            if (result == false)
            {
                _current.Status = Result.EStatus.FalseOnLoad;
                _results.Add(_current);
                _current = null;
                return;
            }

            using (IEmulator emu = _ldr.LoadedEmulator)
            {
                _current.Game     = _ldr.Game;
                _current.CoreType = emu.GetType();
                var controller = new Controller(emu.ControllerDefinition);
                _current.BoardName = emu.HasBoardInfo() ? emu.AsBoardInfo().BoardName : null;

                _current.Frames       = 0;
                _current.LaggedFrames = 0;

                for (int i = 0; i < _numFrames; i++)
                {
                    try
                    {
                        emu.FrameAdvance(controller, true);

                        // some cores really really really like it if you drain their audio every frame
                        if (emu.HasSoundProvider())
                        {
                            emu.AsSoundProvider().GetSamplesSync(out _, out _);
                        }

                        _current.Frames++;
                        if (emu.CanPollInput() && emu.AsInputPollable().IsLagFrame)
                        {
                            _current.LaggedFrames++;
                        }
                    }
                    catch (Exception e)
                    {
                        _current.Messages.Add(e.ToString());
                        _current.Status = Result.EStatus.ExceptOnAdv;
                        _results.Add(_current);
                        _current = null;
                        return;
                    }
                }
            }
            _current.Status = Result.EStatus.Success;
            _results.Add(_current);
            _current = null;
        }
Пример #2
0
        void LoadOne(string f)
        {
            current = new Result {
                Filename = f
            };
            bool result = false;

            try
            {
                result = ldr.LoadRom(f, Comm);
            }
            catch (Exception e)
            {
                current.Status = Result.EStatus.ExceptOnLoad;
                current.Messages.Add(e.ToString());
                Results.Add(current);
                current = null;
                return;
            }
            current.Fullname = ldr.CanonicalFullPath;
            if (current.Status == Result.EStatus.ErrorOnLoad)
            {
                Results.Add(current);
                current = null;
                return;
            }
            if (result == false)
            {
                current.Status = Result.EStatus.FalseOnLoad;
                Results.Add(current);
                current = null;
                return;
            }

            using (IEmulator emu = ldr.LoadedEmulator)
            {
                current.GI        = ldr.Game;
                current.CoreType  = emu.GetType();
                emu.Controller    = new Controller(emu.ControllerDefinition);
                current.BoardName = emu.BoardName;
                // hack
                if (emu is Emulation.Cores.Nintendo.GBA.VBANext)
                {
                    current.BoardName = (emu as Emulation.Cores.Nintendo.GBA.VBANext).GameCode;
                }

                current.Frames       = 0;
                current.LaggedFrames = 0;

                for (int i = 0; i < numframes; i++)
                {
                    try
                    {
                        int     nsamp;
                        short[] samp;
                        emu.FrameAdvance(true, true);

                        // some cores really really really like it if you drain their audio every frame
                        if (emu.HasSoundProvider())
                        {
                            emu.AsSoundProvider().GetSamplesSync(out samp, out nsamp);
                        }

                        current.Frames++;
                        if (emu.CanPollInput() && emu.AsInputPollable().IsLagFrame)
                        {
                            current.LaggedFrames++;
                        }
                    }
                    catch (Exception e)
                    {
                        current.Messages.Add(e.ToString());
                        current.Status = Result.EStatus.ExceptOnAdv;
                        Results.Add(current);
                        current = null;
                        return;
                    }
                }
            }
            current.Status = Result.EStatus.Success;
            Results.Add(current);
            current = null;
            return;
        }