楼主:
playlive (player)
2025-09-10 21:52:14Ymir v0.1.8
以下是机翻润饰
这次的发布着重于错误修复,同时也加入了一些提升使用者体验的功能、侦错工具以及一
些虽小但很实用的全方位改进。本版本没有重大的新功能或改良。
多亏了 @tordona 和 @bsdcode 的贡献,官方的 ARM 版 Windows 和 FreeBSD 版本已经
发布。您可以在本发布中找到 Windows 版本,而 FreeBSD 版本则可在 ports 套件集合
中取得。
这很可能是 0.1.x 系列的最后一个版本,因为我计划在下一个版本(将命名为 0.2.0)
中重写 CD Block 和 SMPC 模拟。这些元件一直是 Ymir 模拟精准度的致命弱点,导致了
许多难以调查和解决的疑难问题。因此,预计下一个版本的发布时间会更长,或者内容会
比最近的几个版本更少。此外,这些元件的重大变更,有可能会破坏与 0.1.x 版本的存
档状态相容性,尽管机率不大。我会尽力避免这种情况,但必要时,精准度和相容性会优
先于便利性。
我们从最显而易见的难题开始:CD Block 和 SMPC,这两者现在都有由 @celeriyacon 制
作的测试 ROM。这两个元件展现了 Ymir 模拟器最严重的问题——每个 SMPC 测试都失败
了,而在两个可用的 CD Block 测试中,它也只勉强通过一个。我试图修复这些元件以通
过测试,但结果却导致相容性恶化,因此为了相容性考量,它们将暂时维持失败的状态。
这两者导致了大量的游戏冻结、当机、无法启动以及类似问题,需要进行重大的重制才能
修复。因此,我决定在这个版本中将重点转向更容易解决的问题,并将这些元件维持在勉
强可用的状态,直到下一个版本。
这些并非完全没有修复,尽管如此。测试 ROM 有助于解决 CD Block 模拟的一些小问题
,足以让《电脑战机》在赢得一场战斗后不会立即当机(尽管它仍然不完全稳定),而
SMPC 测试也帮助修复了《碟形世界》(Discworld)日本和欧洲版本中的输入问题。此外
,CHD 加载器也获得足够的修复,让我测试的每一个(Last Bronx)游戏档案都能正常启
动,而 CUE 解析器也被重写,修复了数十个音讯轨道错位和加载带有 Unicode 字符档案
的问题。现在应用程式在任何地方都支援 UTF-8 字符,尽管字型还无法完全正确显示所
有字符(特别是日文文字)。
内部游戏数据库已升级,可以侦测出那些受益(但非必需)于备份记忆卡(Backup RAM
cartridge)的游戏。Ymir 将会自动为以下游戏插入记忆卡:
《Dezaemon 2》:储存游戏时需要
《Sega Ages - Galaxy Force II》:储存回放时需要
这些记忆卡将会根据游戏名称拥有独特的名称,并储存到
<profile>/backup/games/bup-ext-<title> [<code>].bin
多亏了 @celeriyacon 的新版 SH-2 测试 ROM,SH-2 也获得了几个针对边缘情况的小修
复。
SCU 只有两个修复,其中一个修复影响了《梦幻之星 4》在 Sega Ages 合辑中无法正常
加载其图形的问题。说到游戏,这次的 SCSP 修复比往常更多,这也帮助提高了与《梦幻
之星》合辑中所有游戏的相容性。现在所有这些游戏都可以正常游玩,尽管目前还没有人
在 Ymir 上将它们玩到通关。这些 SCSP 修复也解决了许多问题,例如:原声带只在一个
声道播放、多个游戏中缺少音效、刺耳的静电杂音等。值得注意的是,CroNSF 现在也能
正常播放歌曲了!
在最后,我们来谈谈图形部分。就像之前的发行版一样,这次也修复了大量的 VDP1 和
VDP2 错误,但与以往不同的是,Ymir 的 VDP1 渲染器在 Lordus(以 DraStic 闻名)的
帮助下,升级到了像素级完美(pixel-perfect)的程度。
新的渲染器进行了多项最佳化与升级,其中包括:
VBlank 擦除过程的精确计数: 解决了《飞龙骑士》动画中的字幕闪烁问题(不知为何也
修复了《疯狂大射击》中的游戏卡顿)。
重做的擦除和交换时序: 修复了许多图形闪烁或消失的状况。
基于粗略估计的指令计数方法: 解决了《Baroque》动画中明显的运行速度变慢问题。
在 0.1.7 版本中,为修复《洛克人 X3》精灵图而引入的 VDP1 补丁已经被还原,因为它
在许多其他游戏中造成了问题。这意味着《洛克人 X3》的精灵图再次出现显示错误,但
好处是至少有九款其他游戏不再有闪烁或缺失的精灵图了。
至于 VDP2,由于 @celeriyacon 的又一个测试 ROM,影片讯号时序变得更加精确和改善
了。过去 Ymir 使用的近似值并未完全达到精确的 NTSC 和 PAL 影格率。现在,这两种
模式都精确锁定在 59.97 和 50 Hz,并具有非常精准的 VBlank 和 HBlank 时序以及
VCNT 序列。专属监视器模式(似乎没有游戏使用)目前也能部分运作。
此外,RBG 渲染准确性的修复解决了《闪亮银枪》第 2C 关卡中一个长期存在的问题。
使用者接口改良
Ymir 现在在无法加载磁盘映像档时会提供稍微更有用的错误讯息,这有助于找出问题所
在,例如 .bin 档案遗失、.cue 档案中的语法错误、.chd 损坏或任何类似问题。同样关
于错误,如果应用程式因某些原因启动失败(例如无法初始化音讯或视讯子系统),它会
显示一个讯息方块,其中包含一个简短的问题描述,这比应用程式完全不启动并让所有人
(包括我)感到困惑要好得多。此外,macOS 现在拥有一个针对严重问题的全域异常处理
器,类似于在 0.1.7 版本中为 Windows 和 Linux 所提供的。
该应用程式现在能够加载 SDL 游戏控制器数据库,并在套件中包含了一个来自社群的资
料库,这有助于提高与各种控制器的相容性。
在 Windows 11 上,视窗的边角现在是方形而非圆角。
当您尝试加载需要 ROM 卡匣的游戏(如《超人力霸王:光之巨人传说》及《格斗天王 '
95》),但其影像档并不在 <profile>/roms/cart 资料夹中时,将会显示一个错误方块
。
新增功能与改进
应用程式
- 在 Windows 11 上禁用圆角视窗
- 为 macOS 实作异常处理程式
- 若应用程式初始化失败,会向使用者提供回馈
- 若使用者缺少游戏所需的 ROM 卡匣映像档,会显示警告对话方块
备份内存
变更了每个游戏内部备份内存档案的命名方式,从bup-int-[<game code>] <title>.
bin改为bup-int-<title> [<game code>].bin,以便在档案浏览器中按字母顺序排列档案
。 现有档案会在加载时自动重新命名
建置
- 支援 ARM64 Windows
- 支援 ARM64 系统的 FreeBSD
卡匣
- 对于推荐使用备份内存卡匣的游戏,例如《Dezaemon 2》和《Sega Ages - Galaxy
Force II》,会自动插入备份内存卡匣
- 在内部游戏数据库中,新增《Vampire Savior - The Lord of Vampire》试玩版为需要
DRAM 卡匣的游戏。
CD 区块
- 允许查询特定帧位址的档案,并在“系统状态”视窗中显示正在读取的档案
除错
- 允许将除错输出汇出为档案
- 将除错埠写入移至回呼函式,并从 SCU 追踪器中移除。 如此一来,除错追踪就不需要
使用 Mednafen 的除错输出方法
除错器
- 实作 SH-2 观察点
输入
- 新增支援加载外部游戏控制器数据库,并在建置中包含一个来自社群的数据库
- 新增一个用于结束应用程式的快捷键,需要组合键才能触发: 至少一个修饰键(Ctrl
、Alt、Shift、Option 等)和另一个按键(例如 Ctrl+Shift+Q)。
媒体
- 快取 CHD 块以提升效能,但会增加 RAM 使用量
- 当尝试加载损坏、毁损或截断的光盘映像档时,会提供基本错误回馈
SCSP
- 为所有插槽暂存器和部分状态新增基本除错器检视
- 最终输出示波器检视
VDP1
- 透过跳过完全超出系统剪裁区域的线条来最佳化线条绘制
- 透过将更新限制在系统剪裁区域来最佳化网格多边形
- 简化网格渲染程式码以略微提升效能
- 各种效能微观最佳化
VDP2
为 NBG0-3 和 RBG0-1 参数新增基本除错器检视
修正项目
- App:全域设定 en-US UTF-8 语言环境。
修正在其名称中包含 Unicode 字符的档案,CHD 加载器无法加载的问题
- CD Block(CD 区块):防止在未启动磁道的情况下,
尝试设定子程式码传输时程式当机。
- CD Block(CD 区块):软重设修正
- CD Block(CD 区块):使用 CD Block 的时钟比例,而非 SCSP 的,
来进行磁盘机状态更新事件。
- CD Block(CD 区块):多种状态转换及播放细节修正
- CD Block(CD 区块):多种 Put/Get/Delete Sector Data
(放置/取得/删除磁区资料)细节修正
- Input(输入):当取消输入绑定或控制器断线时,重设输入。
- Media(媒体):读取有多个资料磁道的 CHD 映像档时,调整磁区偏移量。
修正部分《Last Bronx》(USA)CHD 映像档无法启动的问题
- Media(媒体):修正加载或储存最近游戏光盘清单时,处理 Unicode 字符的问题
- Media(媒体):从 CUE 表单加载映像档时忽略绝对路径;改为从与 CUE 表单
相同的目录加载
- Media(媒体):正确处理引用其他包含 Unicode 字符的档案的 UTF-8 编码 CUE 档案
- Media(媒体):重写 CUE 分析器,希望能修正一些音讯跳音问题
- SCSP:允许 M68K 从 SCSP 暂存器中撷取指令。修正 CroNSF 音讯播放的问题
- SCSP:修正 KRS=0xF 时,攻击卡住错误的检查。修正多个游戏中的问题:
*《DonPachi》标题画面的播报员语音现在稳定播放
*《Sega Ages - I Love Mickey Mouse - ふしぎのお城大冒険 &
I Love Donald Duck - グルジア王の秘宝》这两款游戏现在能正确播放歌曲
*《Sega Ages: 梦幻之星 Collection》中的所有游戏现在能正确播放歌曲
*《Arcade Gears Vol. 2 - Gun Frontier》启动时的 "Xing" 语音线
*《梦幻模拟战III》的角色语音线
*《圣夜物语 - The First Volume》的角色语音线
*《战栗突击》中片头和游戏中的语音线
- SCSP:当声音内存 (Sound RAM) 中正在播放的样本 EG 达到静音阈值时,
不要在这些插槽上使用 SBCTL。
修正《守护者列传》和《电梯大战 2~S 致敬精选辑~》中损坏的音讯
- SCSP:当 MVOL=0 时将音讯静音。修正《Sega Ages - Galaxy Force II》暂停时
声音/音乐残留的问题
- SCU:正确处理向暂存器进行 8 位元和 16 位元写入。
修正《梦幻之星 Collection》中的《梦幻之星IV》图形问题
- SCU:当设定为触发 Timer 0(计时器 0)匹配 0x000 时,Timer 1(计时器 1)
从未触发
- SH2:修正直接快取资料存取的字节顺序
- SH2:修正延迟插槽中 MOVA 偏移量的问题
- SH2:交换 MAC.W 和 MAC.L 算子的内存读取顺序
- SMPC:接收到 INTBACK 中断请求时,清除 SF(带有延迟)。
修正《梦幻之星 Collection》在 SEGA 授权画面后卡在黑画面的问题。
- SMPC:修正暂存器读取/写入
- SMPC:最佳化的 INTBACK 旗标被反转
- SMPC:如果在 VBlank IN 之前没有收到继续或中断请求,则挂起的 INTBACK 超时。
修正两版《Discworld》中的输入问题
- SMPC, VDP:根据垂直分辨率,在 VBlank IN 前 1 毫秒左右更一致地触发最佳化
的 INTBACK。
- System(系统):软重设系统时,重设时脉速度
- VDP1:清除透明网格层时,将其设为 0,而非清除写入值。修正当使用透明网格增强
功能时,《雷射超人》关卡加载画面的渲染亮度减半的问题
- VDP1:计数 VBlank 清除过程的周期。修正《飞龙骑士》FMV 中闪烁的字幕,
以及《疯狂大射击》和《性感疯狂大射击》中的卡顿问题
- VDP1:当未纹理化的多边形启用水平或/和垂直翻转时,不要交换 gouraud 值。
修正《超级克拉鳄》中糟糕的阴影
- VDP1:使用 RGB 5:5:5 颜色模式时,强制将精灵字符资料位址对齐至 16 字节。
修正《All-Star Baseball '97 Featuring Frank Thomas》中错位的球队标志
- VDP1:透过在清除过程低分辨率模式中避免重复写入相同像素来提高效能。
同时修正了高分辨率下的清除过程周期计数
- VDP1:增加系统剪辑渲染最佳化的填充。修正了《麻雀四姉妹 若草物语》和
《超级克拉鳄》片头右侧和底部边缘的白色杂点
- VDP1:像素级完美渲染
- VDP1:延迟 PTM=1 绘图开始,以避开一些游戏因过早触发绘图而导致的时序问题。
修正《格斗列传2》片头动画中玻璃碎片闪烁的问题
- VDP1:原始周期计数,以解决某些严重滥用 VDP1 的游戏,如《Baroque》、
《Dark Seed II》和《Funky Fantasy》
- VDP1:移除先前为《洛克人 X3》精灵引入的写入惩罚外挂。修正多个问题:
*《政界立志伝~よい国・よい政治~》和《実戦 パチンコ必胜法! TWIN》中缺少
的精灵
*《鬼屋魔影2》、《Cleaning Kit for Sega Saturn》和《魂斗罗- Legacy of War》
中闪烁的精灵
*《Funky Fantasy》、《世界杯高尔夫:职业版》和《Magic Carpet》中闪烁的 FMV
*《Alien Trilogy》任务简报画面中闪烁的字母
- VDP1:重写缩放精灵渲染,以正确处理未记录的缩放点设定。
- VDP1:重写清除/交换时序。修正许多问题:
*《あやかし忍伝くの一番プラス》萤幕闪烁
*《DRIFT KING 首都高バトル土屋圭市&坂东正明》试玩版中闪烁的地图
*《Virtual Mahjong 2 - My Fair Lady》中每隔一个隔行扫描字段遗失
- VDP2:调整 RBG 线条颜色插入的线宽。修正《World League Soccer '98》中
一半场地没有颜色的问题
- VDP2:即使禁用了 NBG,也始终读取线条萤幕滚动资料。
修正系统设定画面和《深海惊魂》GUI 元素的一帧偏移
- VDP2:当精灵层旋转时,不要绘制超出范围的区域。
修正《Sega Ages - Power Drift》中地面在天空中的错误
- VDP2:不要对无法存取的 VRAM 库中的字符使用补充资料。
修正《Darklight Conflict》中左侧出现一列“A”字符
- VDP2:当显示器处于单密度隔行扫描模式时,将垂直视窗座标加倍。
修正《Pro-Pinball: The Web》萤幕下半部缺失的问题
- VDP2:修正 CRAM 位址字节混乱。修正《Saturn Bomberman》片头 FMV 之前
出现意外图形的问题
- VDP2:修正 RBG 线条颜色的 CRAM 位址计算。修正《World League Soccer '98》中
场地阴影的错误颜色
- VDP2:修正独占监视器时序和分辨率大小,以及超出查找表范围的读取
- VDP2:修正隔行扫描模式时序
- VDP2:修正箝制视窗 X 座标时的差一错误。修正《英雄圣战》中显示对话框时
的一像素错误
- VDP2:修正基于调色盘的透明网格无法与 VDP2 层混合的问题
(例如在《Bulk Slash》中)
- VDP2:修正旋转参数线条颜色资料位址计算
- VDP2:修正涉及非法垂直座标的视窗计算。修正《闪亮银枪》第 2C 关中的背景错误
- VDP2:强制撷取每条扫描线的第一个字符。修正《Athlete Kings》启动画面中
萤幕左侧的一些垃圾图块
- VDP2:处理只启用 RBG1 的游戏。修正《放课后恋爱クラブ恋のエチュード》中背景
图形缺失的问题
- VDP2:手动处理精灵层上的精灵视窗。修正《Metal Black》击败第一个头目时的
图形效果
- VDP2:选择线条颜色资料时遵守旋转参数模式暂存器。修正《飞龙骑士 II Zwei》
第二关糟糕的天空,以及《Savaki》中故障的天空/天花板
- VDP2:在单密度隔行扫描模式中也反转 TVSTAT.ODD 位元。
修正《Pro-Pinball: The Web》和《紫炎龙》中交换的隔行扫描字段
- VDP2:将 VCNT 跳过作为专用的垂直阶段实施
- VDP2:在画格开始时锁存 TVMD.DISP 和 TVMD.BDCLMD。修正:
* 《侍魂 斩红郎无双剑》加载画面后出现的垃圾图形
* 《あやかし忍伝くの一番プラス》和《Ninpen Manmaru》中的一帧错误
- VDP2:将 VCNT 更新移至 HBLANK 切换为零的左边界水平阶段
- VDP2:预先计算每点旋转系数旗标,而不是每条扫描线汇出两次。
- VDP2:仅在画格开始时读取每萤幕线条/背景颜色。
修正《あやかし忍伝くの一番プラス》SEGA 授权标志后的红色萤幕
- VDP2:当 RBG0/1 页面基础位址在画格中间改变时,重新计算。
修正《飞天幽梦》头目战中损坏的地表
- VDP2:降低旋转参数计算精度,以更接近真实系统
- VDP2:将透明网格渲染到单独的层上,而不是立即将它们混合到精灵层上。
修正使用增强功能时《恶魔城X》中的优先级问题
- VDP2:由于 VRAM 存取周期配置不良,重写位图延迟。
修正《Baroque Report - CD Data File》中移位的图形
- VDP2:分别储存 RBG 的线条颜色资料。
修正《音速小子合集》Sonic World 模式中跳上弹簧板时的天空盒问题
- VDP2:使用更准确的 NTSC/PAL 时钟时序进行视讯同步。
消除了刷新率略低于 NTSC/PAL 画格速率完美倍数时的卡顿
- VDP2:对滚动 RBG 使用正确的字符撷取器。修正《Battle Monsters》中的背景错误
https://github.com/StrikerX3/Ymir/releases/tag/v0.1.8