コード例 #1
0
        private void InitSaveRamBuff()
        {
            int size = 0;

            LibQuickNES.ThrowStringError(QN.qn_battery_ram_size(Context, ref size));
            _saveRamBuff = new byte[size];
        }
コード例 #2
0
        private void InitSaveStateBuff()
        {
            int size = 0;

            LibQuickNES.ThrowStringError(QN.qn_state_size(Context, ref size));
            _saveStateBuff = new byte[size];
        }
コード例 #3
0
            private static byte[] GetDefaultColors()
            {
                IntPtr src = QN.qn_get_default_colors();

                byte[] ret = new byte[1536];
                Marshal.Copy(src, ret, 0, 1536);
                return(ret);
            }
コード例 #4
0
        static QuickNES()
        {
            var resolver = new DynamicLibraryImportResolver(
                $"libquicknes{(OSTailoredCode.IsUnixHost ? ".dll.so.0.7.0" : ".dll")}", hasLimitedLifetime: false);

            QN = BizInvoker.GetInvoker <LibQuickNES>(resolver, CallingConventionAdapters.Native);
            QN.qn_setup_mappers();
        }
コード例 #5
0
        public PutSettingsDirtyBits PutSettings(QuickNESSettings o)
        {
            _settings = o;
            QN.qn_set_sprite_limit(Context, _settings.NumSprites);
            RecalculateCrops();
            CalculatePalette();

            return(PutSettingsDirtyBits.None);
        }
コード例 #6
0
        public bool PutSettings(QuickNESSettings o)
        {
            _settings = o;
            QN.qn_set_sprite_limit(Context, _settings.NumSprites);
            RecalculateCrops();
            CalculatePalette();

            return(false);
        }
コード例 #7
0
 public void SaveStateBinary(System.IO.BinaryWriter writer)
 {
     CheckDisposed();
     LibQuickNES.ThrowStringError(QN.qn_state_save(Context, SaveStateBuff, SaveStateBuff.Length));
     writer.Write(SaveStateBuff.Length);
     writer.Write(SaveStateBuff);
     // other variables
     writer.Write(IsLagFrame);
     writer.Write(LagCount);
     writer.Write(Frame);
 }
コード例 #8
0
        public bool PutSettings(QuickNESSettings o)
        {
            _settings = o;
            QN.qn_set_sprite_limit(Context, _settings.NumSprites);
            RecalculateCrops();
            CalculatePalette();

            CoreComm.ScreenLogicalOffsetX = o.ClipLeftAndRight ? 8 : 0;
            CoreComm.ScreenLogicalOffsetY = o.ClipTopAndBottom ? 8 : 0;

            return(false);
        }
コード例 #9
0
        unsafe void InitMemoryDomains()
        {
            List <MemoryDomain> mm = new List <MemoryDomain>();

            for (int i = 0; ; i++)
            {
                IntPtr data     = IntPtr.Zero;
                int    size     = 0;
                bool   writable = false;
                IntPtr name     = IntPtr.Zero;

                if (!QN.qn_get_memory_area(Context, i, ref data, ref size, ref writable, ref name))
                {
                    break;
                }

                if (data != IntPtr.Zero && size > 0 && name != IntPtr.Zero)
                {
                    mm.Add(MemoryDomain.FromIntPtr(Marshal.PtrToStringAnsi(name), size, MemoryDomain.Endian.Little, data, writable));
                }
            }
            // add system bus
            mm.Add(new MemoryDomain
                   (
                       "System Bus",
                       0x10000,
                       MemoryDomain.Endian.Unknown,
                       delegate(long addr)
            {
                if (addr < 0 || addr >= 0x10000)
                {
                    throw new ArgumentOutOfRangeException();
                }

                return(QN.qn_peek_prgbus(Context, (int)addr));
            },
                       delegate(long addr, byte val)
            {
                if (addr < 0 || addr >= 0x10000)
                {
                    throw new ArgumentOutOfRangeException();
                }

                QN.qn_poke_prgbus(Context, (int)addr, val);
            }
                   ));

            _memoryDomains = new MemoryDomainList(mm);
            (ServiceProvider as BasicServiceProvider).Register <IMemoryDomains>(_memoryDomains);
        }
コード例 #10
0
        public IDictionary <string, RegisterValue> GetCpuFlagsAndRegisters()
        {
            int[] regs = new int[6];
            var   ret  = new Dictionary <string, RegisterValue>();

            QN.qn_get_cpuregs(Context, regs);
            ret["A"]  = (byte)regs[0];
            ret["X"]  = (byte)regs[1];
            ret["Y"]  = (byte)regs[2];
            ret["SP"] = (ushort)regs[3];
            ret["PC"] = (ushort)regs[4];
            ret["P"]  = (byte)regs[5];
            return(ret);
        }
コード例 #11
0
ファイル: QuickNES.cs プロジェクト: Gorialis/BizHawk
        public QuickNES(CoreComm comm, byte[] file, object settings, object syncSettings)
        {
            FP = OSTailoredCode.IsUnixHost
                                ? (IFPCtrl) new Unix_FPCtrl()
                                : new Win32_FPCtrl();

            using (FP.Save())
            {
                ServiceProvider = new BasicServiceProvider(this);
                CoreComm        = comm;

                Context = QN.qn_new();
                if (Context == IntPtr.Zero)
                {
                    throw new InvalidOperationException($"{nameof(QN.qn_new)}() returned NULL");
                }

                try
                {
                    file = FixInesHeader(file);
                    LibQuickNES.ThrowStringError(QN.qn_loadines(Context, file, file.Length));

                    InitSaveRamBuff();
                    InitSaveStateBuff();
                    InitAudio();
                    InitMemoryDomains();

                    int    mapper     = 0;
                    string mappername = Marshal.PtrToStringAnsi(QN.qn_get_mapper(Context, ref mapper));
                    Console.WriteLine("QuickNES: Booted with Mapper #{0} \"{1}\"", mapper, mappername);
                    BoardName = mappername;
                    PutSettings((QuickNESSettings)settings ?? new QuickNESSettings());

                    _syncSettings     = (QuickNESSyncSettings)syncSettings ?? new QuickNESSyncSettings();
                    _syncSettingsNext = _syncSettings.Clone();

                    SetControllerDefinition();
                    ComputeBootGod();

                    ConnectTracer();
                }
                catch
                {
                    Dispose();
                    throw;
                }
            }
        }
コード例 #12
0
        public void LoadStateBinary(System.IO.BinaryReader reader)
        {
            CheckDisposed();
            int len = reader.ReadInt32();

            if (len != SaveStateBuff.Length)
            {
                throw new InvalidOperationException("Unexpected savestate buffer length!");
            }
            reader.Read(SaveStateBuff, 0, SaveStateBuff.Length);
            LibQuickNES.ThrowStringError(QN.qn_state_load(Context, SaveStateBuff, SaveStateBuff.Length));
            // other variables
            IsLagFrame = reader.ReadBoolean();
            LagCount   = reader.ReadInt32();
            Frame      = reader.ReadInt32();
        }
コード例 #13
0
        private void DrainAudio()
        {
            _numSamples = QN.qn_read_audio(Context, _monoBuff, _monoBuff.Length);
            unsafe
            {
                fixed(short *_src = &_monoBuff[0], _dst = &_stereoBuff[0])
                {
                    short *src = _src;
                    short *dst = _dst;

                    for (int i = 0; i < _numSamples; i++)
                    {
                        *dst++ = *src;
                        *dst++ = *src++;
                    }
                }
            }
        }
コード例 #14
0
 public byte[] GetPalRam()
 {
     Marshal.Copy(QN.qn_get_palmem(Context), palrambuf, 0, 0x20);
     return(palrambuf);
 }
コード例 #15
0
ファイル: MHController.cs プロジェクト: xtaje25/GH
        public ActionResult Add()
        {
            var id   = Request.Form["mhid"];
            var sort = Request.Form["sort"]; // 章节ID
            var name = Request.Form["name"];

            var        gid        = 0;
            Tab_User   u          = null;
            HttpCookie authCookie = Request.Cookies["a"]; // 获取cookie

            if (authCookie != null)
            {
                try
                {
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value); // 解密
                    var user = SerializeHelper.FromJson <Tab_User>(ticket.UserData);
                    u = _us.GetUser(user.F_Name, user.F_Password);
                    if (u != null)
                    {
                    }
                    else
                    {
                        return(RedirectToAction("SignOut", "Home"));
                    }
                }
                catch (Exception ex)
                {
                    return(RedirectToAction("SignOut", "Home"));
                }
            }
            var gzh = _gzhs.GetGZH(u.F_Id);

            if (gzh != null)
            {
                gid = gzh.F_Id;
            }

            if (gid == 0)
            {
                // IE浏览器对非ajax请求Content-Type:是json的不友好所以使用View而非Json
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "账号没有关联公众号"
                }));
            }

            int mhid = 0;

            if (id == null || !int.TryParse(id, out mhid) || mhid == 0)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "漫画ID无效"
                }));
            }

            int zjid = 0;

            if (sort == null || !int.TryParse(sort, out zjid) || zjid == 0)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "章节ID无效"
                }));
            }

            if (name == null || name.Length > 50)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "章节名称长度必须小于50字符"
                }));
            }

            var img = "";

            if (Request.Files.Count > 0 &&
                Request.Files[0].ContentLength > 0 &&
                new string[] { ".gif", ".jpeg", ".jpg", ".png" }.Contains(System.IO.Path.GetExtension(Request.Files[0].FileName.ToLower())))
            {
                var key   = QN.MHimg(gid, mhid);
                var token = QN.GetUploadToken(QN.BUCKET, key);

                FormUploader fu     = new FormUploader();
                HttpResult   result = fu.UploadStream(Request.Files[0].InputStream, key, token);
                if (result.Code == 200)
                {
                    img = key;
                }
            }
            else
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "请为章节内容添加图片"
                }));
            }

            Tab_MHImg m = new Tab_MHImg();

            m.F_Name   = name;
            m.F_Img    = img != "" ? img : null;
            m.F_MHId   = mhid;
            m.F_Sort   = zjid;
            m.F_UserId = u.F_Id;

            var i = _mhs.AddImg(m);

            if (i == 1)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.OK, message = "成功"
                }));
            }
            else if (i == 2)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "章节重复"
                }));
            }
            else
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "失败"
                }));
            }
        }
コード例 #16
0
 public byte[] GetOam()
 {
     Marshal.Copy(QN.qn_get_oammem(Context), oambuf, 0, 0x100);
     return(oambuf);
 }
コード例 #17
0
 private void Blit()
 {
     QN.qn_blit(Context, _videoOutput, _videoPalette, _cropLeft, _cropTop, _cropRight, _cropBottom);
 }
コード例 #18
0
 public byte[] GetPPUBus()
 {
     QN.qn_peek_ppubus(Context, ppubusbuf);
     return(ppubusbuf);
 }
コード例 #19
0
 public byte[] CloneSaveRam()
 {
     LibQuickNES.ThrowStringError(QN.qn_battery_ram_save(Context, _saveRamBuff, _saveRamBuff.Length));
     return((byte[])_saveRamBuff.Clone());
 }
コード例 #20
0
 public byte PeekPPU(int addr)
 {
     return(QN.qn_peek_ppu(Context, addr));
 }
コード例 #21
0
 public void StoreSaveRam(byte[] data)
 {
     LibQuickNES.ThrowStringError(QN.qn_battery_ram_load(Context, data, data.Length));
 }
コード例 #22
0
        public ActionResult Edit()
        {
            var name  = Request.Form["name"];
            var about = Request.Form["about"];

            var        gid        = 0;
            Tab_User   u          = null;
            HttpCookie authCookie = Request.Cookies["a"]; // 获取cookie

            if (authCookie != null)
            {
                try
                {
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value); // 解密
                    var user = SerializeHelper.FromJson <Tab_User>(ticket.UserData);
                    u = _us.GetUser(user.F_Name, user.F_Password);
                    if (u != null)
                    {
                    }
                    else
                    {
                        return(RedirectToAction("SignOut", "Home"));
                    }
                }
                catch (Exception ex)
                {
                    return(RedirectToAction("SignOut", "Home"));
                }
            }
            var gzh = _gzhs.GetGZH(u.F_Id);

            if (gzh != null)
            {
                gid = gzh.F_Id;
            }

            if (gid == 0)
            {
                // IE浏览器对非ajax请求Content-Type:是json的不友好所以使用View而非Json
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "账号没有关联公众号"
                }));
            }

            if (name != null && name.Length > 200)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "公号名称长度必须小于200字符"
                }));
            }

            if (about != null && about.Length > 4000)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "公号简介长度必须小于4000字符"
                }));
            }

            var logo = "";

            if (Request.Files.Count > 0 &&
                Request.Files[0].ContentLength > 0 &&
                new string[] { ".gif", ".jpeg", ".jpg", ".png" }.Contains(System.IO.Path.GetExtension(Request.Files[0].FileName.ToLower())))
            {
                var key   = QN.GZHLogo(gid);
                var token = QN.GetUploadToken(QN.BUCKET, key);

                FormUploader fu     = new FormUploader();
                HttpResult   result = fu.UploadStream(Request.Files[0].InputStream, key, token);
                if (result.Code == 200)
                {
                    logo = key;
                }
            }

            Tab_GongZhongHao g = new Tab_GongZhongHao();

            g.F_About = (about != null && about.Length > 0) ? about : null;
            g.F_Logo  = logo != "" ? logo : null;
            g.F_Id    = gid;

            var i = _gzhs.UpdateGZHInfo(g);

            if (i == 1)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.OK, message = "成功"
                }));
            }
            else
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "失败"
                }));
            }
        }
コード例 #23
0
ファイル: MHController.cs プロジェクト: xtaje25/ManHua
        public ActionResult Edit()
        {
            var name  = Request.Form["name"];
            var id1   = Request.Form["gid"];
            var id2   = Request.Form["id"];
            var about = Request.Form["about"];

            if (name == null || name.Length < 1 || name.Length > 50)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "长度必须大于1个字符小于50字符"
                }));
            }

            var gid = 0;

            if (!int.TryParse(id1, out gid) || gid == 0)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "公众号不存在"
                }));
            }

            var id = 0;

            if (!int.TryParse(id2, out id) || id == 0)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "漫画不存在"
                }));
            }

            if (about == null || about.Length > 2000)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "漫画简介必须小于2000字符"
                }));
            }

            var logo = "";

            if (Request.Files.Count > 0 &&
                Request.Files[0].ContentLength > 0 &&
                new string[] { ".gif", ".jpeg", ".jpg", ".png" }.Contains(System.IO.Path.GetExtension(Request.Files[0].FileName.ToLower())))
            {
                var key   = QN.MHLogo(gid, id);
                var token = QN.GetUploadToken(QN.BUCKET, key);

                FormUploader fu     = new FormUploader();
                HttpResult   result = fu.UploadStream(Request.Files[0].InputStream, key, token);
                if (result.Code == 200)
                {
                    logo = key;
                }
            }

            Tab_MHCatalog m = new Tab_MHCatalog();

            m.F_Catalog = name;
            m.F_GZHId   = gid;
            m.F_Logo    = logo != "" ? logo : null;
            m.F_Id      = id;
            m.F_About   = about;

            int i = _ms.UpdateMH(m);

            if (i == 1)
            {
                return(View(new DWZJson {
                    statusCode = (int)DWZStatusCode.OK, message = "成功"
                }));
            }
            else
            {
                return(View(new DWZJson {
                    statusCode = (int)DWZStatusCode.ERROR, message = "失败"
                }));
            }
        }
コード例 #24
0
ファイル: QuickNES.cs プロジェクト: magicono43/BizHawk
 static QuickNES()
 {
     Resolver = new DynamicLibraryImportResolver($"libquicknes{(OSTailoredCode.CurrentOS == OSTailoredCode.DistinctOS.Windows ? ".dll" : ".dll.so.0.7.0")}");
     QN       = BizInvoker.GetInvoker <LibQuickNES>(Resolver, CallingConventionAdapters.Native);
     QN.qn_setup_mappers();
 }
コード例 #25
0
 private void InitAudio()
 {
     LibQuickNES.ThrowStringError(QN.qn_set_sample_rate(Context, 44100));
 }
コード例 #26
0
ファイル: QuickNES.cs プロジェクト: radtek/BizHawk
 static QuickNES()
 {
     Resolver = new DynamicLibraryImportResolver(LibQuickNES.dllname);
     QN       = BizInvoker.GetInvoker <LibQuickNES>(Resolver, CallingConventionAdapters.Native);
     QN.qn_setup_mappers();
 }
コード例 #27
0
ファイル: GZHController.cs プロジェクト: xtaje25/ManHua
        public ActionResult InfoEdit()
        {
            var id    = Request.Form["id"];
            var about = Request.Form["about"];

            var gid = 0;

            if (!int.TryParse(id, out gid) || gid == 0)
            {
                // IE浏览器对非ajax请求Content-Type:是json的不友好所以使用View而非Json
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "公号不存在"
                }));
            }

            if (about != null && about.Length > 4000)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "公号简介长度必须小于4000字符"
                }));
            }

            var logo = "";

            if (Request.Files.Count > 0 &&
                Request.Files[0].ContentLength > 0 &&
                new string[] { ".gif", ".jpeg", ".jpg", ".png" }.Contains(System.IO.Path.GetExtension(Request.Files[0].FileName.ToLower())))
            {
                var key   = QN.GZHLogo(gid);
                var token = QN.GetUploadToken(QN.BUCKET, key);

                FormUploader fu     = new FormUploader();
                HttpResult   result = fu.UploadStream(Request.Files[0].InputStream, key, token);
                if (result.Code == 200)
                {
                    logo = key;
                }
            }

            Tab_GongZhongHao g = new Tab_GongZhongHao();

            g.F_About = (about != null && about.Length > 0) ? about : null;
            g.F_Logo  = logo != "" ? logo : null;
            g.F_Id    = gid;

            var i = _gzhs.UpdateGZHInfo(g);

            if (i == 1)
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.OK, message = "成功"
                }));
            }
            else
            {
                return(View(new DWZJson()
                {
                    statusCode = (int)DWZStatusCode.ERROR, message = "失败"
                }));
            }
        }
コード例 #28
0
 static QuickNES()
 {
     Resolver = new DynamicLibraryImportResolver("libquicknes.dll" + (PlatformLinkedLibSingleton.RunningOnUnix ? ".so" : String.Empty));
     QN       = BizInvoker.GetInvoker <LibQuickNES>(Resolver, CallingConventionAdapters.Native);
     QN.qn_setup_mappers();
 }
コード例 #29
0
 private void Blit()
 {
     QN.qn_blit(Context, VideoOutput, VideoPalette, cropleft, croptop, cropright, cropbottom);
 }