From 29f231a3be372098c88a169aee148cec6a1563bc Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Wed, 4 Dec 2024 14:28:49 +0800 Subject: [PATCH 1/2] readme --- README.md | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2b97e1e..2fb69bb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # AxibugEmuOnline +### 一个跨平台的、自动化联机的、纯C#实现的、开源的模拟器项目 + 用于游戏模拟器同步的联机纯C#实现 AxibugEmuOnline.Server 是服务端 .Net8 @@ -10,7 +12,7 @@ - NES EmuCore NES模拟器核心 - VirtualNes (C++手动翻译到C#) + VirtualNes (C++手动翻译到C#,并收纳民间各种扩展Mapper实现,接近于最全的游戏支持。实测,高倍速加速游戏的同时(几百fps),且进行网络同步,性能一致,完全同步) ~~My Nes~~ (功能全,但是性能局限,不作为主要使用,但已经移植纯.Net Standard2.0归档) @@ -30,11 +32,25 @@ 目前其他跨平台联机,仅限于电脑和手机 -#### 2.良好体验为目标 +#### 2.自动化联机 - 以现代化联机方式作为基本方向 - -#### 3.各种有意义的探索(作为额外功能) + 玩家不用关心任何诸如IP或者任何联机配置,直接玩。服务器是直接提供的,玩家无感知。 + + 甚至不用手动创建房间,游玩就是房间。加入放也不用专门下载,直接选择房间之后,自动化下载完成游戏并进入游戏。 + +#### 3.柔性网络架构 + + 最终效果,不会出现延迟高时的卡顿和暂停等待,也不会出现房间创建者和加入者之间 因网络状况差异造成体验差异,保证公平。 + + 柔性指:根据网络延迟和木桶效应动态调整帧同步提前量。作为被动推帧。 + + 核心原理是用刚好无限趋近于物理延迟本身的缓冲作,来抵消中间等待。 + + 本来玩家的地理位置带来的物理延迟是不可抗因素,但我们把这部分拿利用起来对冲,任何耗时操作,队列,堆栈处理都在这部分完成。没有多余。 + + 最终达到了除了物理延迟之外,没有任何浪费,并即便是网络状况极差时,仅表现为操作延迟,而不是其他一些模拟器的顿帧卡顿。且同步一致性得以保证。 + +#### 4.各种有意义的探索(作为额外功能,和联机无关) 应该是Unity引擎中对于模拟器内核的画面接入良好的范例 @@ -130,6 +146,4 @@ Mapper支持越多,通俗讲就是支持更多卡带。 最终会继承到本项目中 - http://git.axibug.com/sin365/MAME.Core - - + http://git.axibug.com/sin365/MAME.Core \ No newline at end of file From dc9963a431d175607890498819179210831fc23b Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Wed, 4 Dec 2024 14:34:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?video=20cpu=E6=B8=B2=E6=9F=93=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Script/NesEmulator/VideoProvider.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs index f0963d1..495cf09 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs @@ -57,8 +57,8 @@ namespace AxibugEmuOnline.Client public unsafe void SetDrawData(uint* screenData) { PrepareUI(screenData); - if (GPUTurbo) PrepareForGPU(screenData); - else PrepareForCPU(screenData); + if (GPUTurbo) PrepareForGPU(screenData);//жʹGPUCPU + else PrepareForCPU(screenData);//ʹCPU if (GPUTurbo) { @@ -144,6 +144,7 @@ namespace AxibugEmuOnline.Client for (int line = 0; line < PPU.SCREEN_HEIGHT; line++) { + //PSCPU㣬ȼ16IJҪ֣ܶ width = PPU.SCREEN_WIDTH - 16; while (width > 0) @@ -151,14 +152,17 @@ namespace AxibugEmuOnline.Client var edx = screenData[pScn + 8]; uint index = edx & 0xFF; + //±ɫұʵɫ var colorData = palRaw[index]; //dstɫΪabgr,colorDataΪargb uint r = (colorData & 0x00FF0000) >> 16; // ȡRedͨ uint g = (colorData & 0x0000FF00) >> 8; // ȡGreenͨ uint b = (colorData & 0x000000FF); // ȡBlueͨ + //rgbɫunity rgb System.Drawing.Color ɫ uint abgr = 0xFF000000 | (b << 16) | (g << 8) | (r << 0); + //Žɫ Dst[pDst] = abgr; pScn += 1;