Skip to content

Releases: SteveShi/Boxer

v2.0.0-Beta3

Choose a tag to compare

@github-actions github-actions released this 19 Sep 17:52
877d5b8

Version 2.0.0-Beta3 (English)

This is a stability and correctness release. Following a full code audit of the DOSBox-Staging 0.83.0 integration, this version fixes several crash bugs (including one that could abort on launch with certain games such as the X-COM Demo), eliminates cross-thread data races in the audio, video and shader subsystems, and hardens error handling throughout the emulation pipeline. No new features — just a much more solid foundation.

Key Changes

  • Launch Crash with Certain Games Fixed: Fixed an out-of-bounds array access in the DOS shell integration that aborted at startup under hardened builds when a batch file or program path did not begin with an uppercase drive letter (reported with the X-COM Demo).
  • Shader Panel Crash Fixed: Fixed a guaranteed nil-unwrapping crash in the shader model's name cache and locked all shader-list state behind a lock, making shader enumeration and reloading thread-safe.
  • MIDI Robustness: Oversized System Exclusive messages are now clamped to the MIDI packet buffer instead of risking a stack overflow, and disconnect errors from CoreMIDI are logged instead of silently ignored.
  • Thread-Safe Emulator Control: CPU speed, auto-speed, turbo and core-mode changes made from the UI are now forwarded to the emulation thread instead of mutating DOSBox state concurrently; video tint/composite/hue settings likewise. Frame callbacks are always delivered on the main thread, so background emulation can no longer touch AppKit views.
  • Per-Session Working Directory: The emulator no longer changes the process-wide working directory. Each session tracks its own base path, and drive paths are resolved to absolute at mount time — eliminating interference between sessions and a main-thread-vs-emulation-thread filesystem race.
  • Cleaner Shutdown: Session cleanup now waits (briefly, with a cap) for the emulation thread to exit before deleting the session's temporary folder, narrowing a window where DOSBox could still be writing to deleted files.
  • MT-32 ROM Error Handling: Missing or unreadable MT-32 ROM files now surface a proper error dialog instead of crashing, and partial initialization is cleaned up without leaks.
  • Memory Leak Fixes: Directory-enumeration handles that DOSBox never closed are now released during emulator teardown; the emulator instance no longer leaks if initialization throws.
  • Better Error Reporting: Configuration parse/write failures, drive-mount rollback failures, gamebox cleanup failures and SDL init failures are now logged (or surfaced as unrecoverable errors) instead of failing silently.
  • Architecture Cleanup: The coalface bridge header no longer exposes DOSBox internals to the whole app; the mouse bridge, key buffer, session crash reporting, capture-file handling and printer formatting were split into focused files.

版本 2.0.0-Beta3 (中文)

本版本是一个稳定性与正确性专项版本。在对 DOSBox-Staging 0.83.0 集成层进行全面代码审计后,本版修复了多处崩溃缺陷(包括部分游戏如《X-COM Demo》启动即崩溃的问题),消除了音频、视频与着色器子系统中的跨线程数据竞争,并全面强化了仿真管线的错误处理。没有新功能——只有更扎实的地基。

主要更新

  • 修复部分游戏启动崩溃:修复 DOS Shell 集成中的数组越界访问——当批处理文件或程序路径的首字符并非大写盘符时,加固构建会直接中止(实测由《X-COM Demo》触发)。
  • 修复着色器面板崩溃:修复着色器模型名称缓存中必然触发的强解包崩溃,并为全部着色器列表状态加锁,着色器枚举与重载自此线程安全。
  • MIDI 稳健性:超长 System Exclusive 消息现在会按 MIDI 包缓冲区容量截断,杜绝栈溢出隐患;CoreMIDI 断连错误改为记录日志而非静默忽略。
  • 模拟器控制线程安全:界面上的 CPU 速度、自动提速、极速模式与核心模式切换现在会转发至模拟线程执行,不再与 DOSBox 并发改状态;显示色调/合成/色相设置同理。帧回调一律投递到主线程,后台模拟再也不会触碰 AppKit 视图。
  • 会话独立工作目录:模拟器不再修改进程级工作目录。每个会话维护各自的基准路径,且盘符路径在挂载时即解析为绝对路径——彻底消除多会话相互干扰与主线程对模拟线程文件系统的竞态。
  • 更干净的关闭流程:会话清理时会(有上限地)等待模拟线程退出后再删除临时目录,收窄了 DOSBox 仍在写文件却被删除的竞态窗口。
  • MT-32 ROM 错误处理:MT-32 ROM 文件缺失或不可读时弹出规范错误提示而非直接崩溃,半初始化状态也会无泄漏地清理。
  • 内存泄漏修复:DOSBox 未关闭的目录枚举句柄会在模拟器收尾时统一释放;初始化抛异常时模拟器实例不再泄漏。
  • 更完善的错误上报:配置解析/写回失败、驱动器挂载回滚失败、游戏盒清理失败与 SDL 初始化失败现在都会记录日志(或作为不可恢复错误上报),不再静默吞掉。
  • 架构清理:coalface 桥接头文件不再向全应用暴露 DOSBox 内部类型;鼠标桥接、键盘缓冲、会话崩溃报告、捕获文件处理与打印机格式化均拆分为职责单一的文件。

v2.0.0-Beta2

Choose a tag to compare

@github-actions github-actions released this 03 Sep 08:57
4731655

Version 2.0.0-Beta2 (English)

This release brings refined skeuomorphic design, visual layout polish, and complete Chinese localization for Boxer. It introduces bespoke vector-rendered 3D hardware artwork for Roland Sound Canvas (SC-55), resolves UI layout overlap and baseline cutting across Preferences, and completes full Chinese translations across game import workflows.

Key Changes

  • Roland Sound Canvas (SC-55) Skeuomorphic Presentation: Created bespoke vector-rendered 3D hardware artwork (SC55.png and SC55@2x.png) with authentic 1991 industrial perspective, matching the fidelity and visual language of the Roland MT-32 and CM-32L sound modules.
  • Preferences Visual & Layout Polish:
    • Resolved baseline cutting through the CRT display easel tripod in Display Preferences by adopting macOS adaptive separatorColor and fine-tuning baseline offset.
    • Dynamically expanded Display and Audio preference panels from 396pt to 456pt, eliminating cramped vertical margins, overlapping text, and truncated descriptions.
    • Symmetrically aligned Audio preferences: aligned missing ROM help text to x=118, matching bottom seek sound controls, and streamlined Chinese typography for clean two-tier layout.
  • Comprehensive Chinese Localization:
    • Fully translated the game import wizard (Import a Game window) in ImportWindow.xcstrings, including window title, dropzones, installer dialogs, and completion screens.
    • Localized setup tips and soundcard configuration guidance in ImportTipsPanel.xcstrings.
    • Fixed untranslated strings in Localizable.xcstrings for Roland emulation states and dropzone instructions.
  • SC-55 ROMset Multi-file Discovery: Improved Sound Canvas ROM recognition to seamlessly detect all 5 chip ROM files (sc55_rom1.bin, sc55_rom2.bin, sc55_waverom1.bin, sc55_waverom2.bin, sc55_waverom3.bin) when dragged onto the shelf or copied into ~/Library/Application Support/Boxer/Sound Canvas ROMs/.

版本 2.0.0-Beta2 (中文)

本版本专注于拟物化视觉美化、偏好设置界面排版精细化调优以及全流程本地化补全。全新设计并集成了 Roland Sound Canvas (SC-55) 专属拟物 3D 机身图形,彻底解决了偏好设置中分割线穿透、控件挤压与文字截断问题,并完成了游戏导入向导的全量中文本地化。

主要更新

  • Roland Sound Canvas (SC-55) 拟物立体渲染:重新手工矢量绘制并渲染了与原版 MT-32 / CM-32L 透视及质感高度契合的 3D 拟物机身图示(SC55.png 与 SC55@2x.png),完美陈列于音频面板实木置物架上。
  • 偏好设置排版与视觉打磨:
    • 修复显示面板中底部分割线横切 CRT 画架木质脚掌的问题,改用系统自适应 separatorColor 半透明细线并微调展示台画架基准点。
    • 将显示面板与音频面板容器高度由 396pt 自适应扩充至 456pt,彻底杜绝复选框拥挤、行距过窄及说明文案尾部标点被截断的视觉瑕疵。
    • 音频面板下半区两段对称对齐:将未安装 ROM 提示框左边距对齐至 x=118,精简文案层级,使其与底部的物理寻道音效选项呈现工整严谨的两段式排版。
  • 全流程中文本地化补全:
    • 完整汉化“导入新游戏”向导窗口(ImportWindow.xcstrings),覆盖窗口标题、拖拽游戏盒、安装程序调度与完成界面。
    • 汉化并校对“安装提示面板”(ImportTipsPanel.xcstrings)中的声卡设置(Sound Blaster 16)与驱动器选择指导。
    • 修复 Localizable.xcstrings 中 Roland CM-32L / MT-32 状态提示及拖放说明的英文遗留。
  • SC-55 多芯片 ROMset 识别支持:优化 Sound Canvas ROM 发现与导入管线,拖入置物架时支持自动识别并整包导入 Roland SC-55 v1.21 的全部 5 颗芯片 ROM 文件(sc55_rom1.bin、sc55_rom2.bin、sc55_waverom1/2/3.bin)。

v2.0.0-Beta1

Choose a tag to compare

@github-actions github-actions released this 02 Sep 22:02
c40c308

Version 2.0.0-Beta1 (English)

This landmark Beta release marks the full modernization of Boxer's emulation core, upgrading to the latest DOSBox-Staging 0.83.0 specifically optimized for Apple Silicon (ARM64). It incorporates deep architectural advancements, C++20 modernizations, native ARM64 dynamic recompiler core, enhanced audio synthesis, and improved FAT filesystem handling while preserving Boxer's native macOS interface, Metal shaders, and CoreAudio integration.

Key Changes

  • DOSBox-Staging 0.83.0 Core: Completely upgraded the core DOS emulation engine to 0.83.0, incorporating modern C++20 design, modern configuration management, improved CPU emulation accuracy, and new sound modules.
  • Native Apple Silicon (ARM64) Dynamic Core: Fully adapted upstream C_TARGET_CPU_ARM dynrec core, ensuring blazing-fast native JIT emulation on Apple Silicon.
  • CoreMIDI & MT-32 Sound Pipeline Integration: Hooked DOSBox-Staging 0.83.0 MIDI message streaming directly into Boxer's built-in General MIDI (BXMIDISynth) and Roland MT-32 (BXEmulatedMT32) synthesis pipelines, ensuring authentic music playback for all classic titles without requiring external hardware.
  • Batch & Executable Type Resolution: Updated DOS batch (.BAT) and COM UTIs to conform to modern macOS UniformTypeIdentifiers standards, ensuring reliable automatic program execution.
  • FAT File System & Media ID Detection: Upgraded drive mounting and floppy drive emulation with explicit 1.44MB media identification, enabling authentic floppy seek acoustics and improved disc image compatibility.
  • Seamless Cocoa & Metal Host Bridge: Re-architected BXCoalface run loop, window, and render event callbacks, cleanly bridging DOSBox-Staging 0.83.0 into Boxer's pure Swift 6 Metal pipeline and native macOS UI.
  • Updated What's New Sheet: Highlights the new DOSBox-Staging 0.83.0 core upon launching this major milestone.

版本 2.0.0-Beta1 (中文)

本里程碑 Beta 版本标志着 Boxer 底层仿真内核的全面现代化飞跃,正式将仿真引擎全面升级至最新的 DOSBox-Staging 0.83.0,专为 Apple Silicon (ARM64) 架构深度优化。本次升级深度适配了其 C++20 现代架构、原生 ARM64 动态重译核心、升级音频合成器以及更精准的 FAT 软驱介质模拟,同时完美保留了 Boxer 原生 macOS Cocoa 界面、Metal 着色器和 CoreAudio 原生音效管线。

主要更新

  • 全面升级 DOSBox-Staging 0.83.0 内核:将底层 DOSBox 核心升级至 0.83.0 正式版,引入现代 C++20 代码架构、全新配置系统、更精准的 CPU 周期与中断仿真及全新音频合成器。
  • 原生 Apple Silicon (ARM64) 动态重译核心:深度适配 0.83.0 的 C_TARGET_CPU_ARM dynrec 核心,在 Apple Silicon 上提供极致流畅的原生 JIT 动态重译仿真性能。
  • CoreMIDI 与内置 MT-32 音频管线桥接:深度重构并打通 0.83.0 与 Boxer 内置音频合成器的消息总线,使 General MIDI(BXMIDISynth)与 Roland MT-32(BXEmulatedMT32)无需外接物理硬件即可享受原汁原味的内置高品质数字音乐与音效。
  • 批处理文件与执行体类型修正:更新 DOS 批处理文件(.BAT)及 COM 程序的 UTI 标准,对齐 macOS UniformTypeIdentifiers 规范,彻底解决批处理脚本无法直接启动运行的问题。
  • FAT 文件系统与软驱寻道音效:升级虚拟驱动器构造器,精准支持 1.44MB 介质类型识别与更真实的物理软驱寻道音效。
  • 无缝衔接 Cocoa 与 Metal 宿主桥接:在 BXCoalface 中完全对齐 0.83.0 的主事件循环、窗口及渲染管理新接口,让 0.83.0 的仿真数据无缝流经 Boxer 原生 Swift 6 Metal 着色器引擎与系统界面。
  • 新版本特性弹窗:更新了应用启动时的“新功能”弹窗(WhatsNewSheetView),直观向用户展示 0.83.0 全新内核特性。

v2.0.0-Alpha10

Choose a tag to compare

@github-actions github-actions released this 02 Sep 19:15
9689ca2

Version 2.0.0-Alpha10 (English)

This release ports key stability enhancements and diagnostics from upstream (MaddTheSane/Boxer), suppressing intrusive macOS Accessibility prompts, resolving emulator state leaks on unrecoverable exceptions, introducing a local crash dump and diagnostics system, and improving multithreaded startup resilience.

Key Changes

  • TCC Accessibility Spam Fix: Replaced intrusive accessibility checks with a non-prompting status query. Key event capturing is enabled only when authorization has already been granted, falling back to system media key listening and eliminating repetitive macOS TCC permission dialogs on every launch.
  • Emulator State Leak Remediation: In _startDOSBox, explicitly teardown SDL, the video renderer, and the global emulator configuration whenever an unrecoverable exception is caught before re-raising as an Objective-C exception, preventing configuration leaks and IO state corruption across sessions.
  • Local Crash Dump & Diagnostics System: Retired defunct legacy bug report URLs and added an automated local diagnostic system that saves structured Markdown and plain text crash dumps to ~/Library/Application Support/Boxer/Crash Dumps/. Selecting "Report" in error alerts reveals the crash dump directly in Finder.
  • Multithreaded Background Startup Protection: Wrapped background emulator startup in structured exception handling, ensuring unrecoverable errors on background threads are cleanly surfaced to the main thread instead of terminating the application silently.
  • Gamebox Bundle Compatibility Fallback: Added resource URL and path fallback handling in BXGamebox for packages lacking explicit bundle directory structures.

版本 2.0.0-Alpha10 (中文)

本版本合入了来自上游(MaddTheSane/Boxer)的核心稳定性改进与诊断增强,彻底杜绝了 macOS 辅助功能授权弹窗的频繁骚扰,修复了底层致命异常退出时的状态泄漏隐患,引入了本地 Crash Dump 诊断系统,并加强了多线程启动的异常容错。

主要更新

  • 辅助功能弹窗防骚扰:将系统权限检查调整为非侵入式检测,仅在已授权辅助功能时挂载按键监听,未授权时优雅降级为仅监听媒体键,彻底杜绝了每次打开应用反复弹出 macOS TCC 辅助功能授权请求的困扰。
  • 模拟器底层状态泄漏清理:在 _startDOSBox 捕获致命底层异常重抛为 Objective-C 异常前,显式释放 SDL、关闭视频渲染器并重置全局 Config 配置,彻底根除了跨语言异常绕过 C++ 栈展开析构导致的全局状态与 IO 句柄残留问题。
  • 本地 Crash Dump 诊断系统:彻底废弃失效的旧官网报错外链,崩溃时自动在 ~/Library/Application Support/Boxer/Crash Dumps/ 本地生成详尽的结构化 Markdown/文本诊断文件(包含 DOS 进程、驱动器挂载与完整调用栈),并在错误对话框点击“Report”时一键在 Finder 中定位。
  • 多线程启动异常安全防护:为多线程仿真启动流程包裹线程级异常捕获并安全调度回主线程展示,防止后台线程未恢复异常导致应用静默闪退。
  • 游戏包资源路径容错兜底:在 BXGamebox 中为缺少标准包层级结构的旧格式 Gamebox 增加了资源路径回退,增强旧游戏包的加载容错性。

v2.0.0-Alpha9

Choose a tag to compare

@github-actions github-actions released this 19 Aug 08:22
64c2c94

Version 2.0.0-Alpha9 (English)

This release resolves the audio freezing/stuttering bug during game pause, refines Simplified Chinese localization across the entire application, and removes legacy code and unused dependencies.

Key Changes

  • Fix Audio Stutter on Pause: Connected BXEmulator pause/resume cycle directly to MIXER_Mute() and MIXER_Unmute() in DOSBox-Staging's audio mixer. This cleanly mutes audio and empties the buffer upon pausing, eliminating the buzzing/stutter loop on the last audio sample.
  • Comprehensive UI Localization: Fixed untranslated and machine-translated menu items and panels across all .xcstrings string catalogs, delivering native, polished macOS Simplified Chinese terminology.
  • Legacy Cleanup & Modernization: Removed deprecated macOS 10.6/10.7 shims (ADBForwardCompatibility, ADBAppKitVersionHelpers), obsolete documentation files, and modernized AppKit / UniformTypeIdentifiers APIs for macOS 13+.

版本 2.0.0-Alpha9 (中文)

本版本彻底修复了游戏暂停时音频卡死在最后一声的循环杂音问题,完成了全软件界面的规范简体中文本地化精修,并清理了历史遗留兼容代码与冗余文件。

主要更新

  • 修复暂停时音频卡死杂音:将虚拟机的暂停/恢复生命周期接入 DOSBox-Staging 混音器的 MIXER_Mute() 与 MIXER_Unmute() 机制,在暂停时彻底静音并清空音频缓冲区,彻底根除了暂停时卡在最后一段声音持续循环(蜂鸣/卡死)的问题。
  • 全界面精细汉化:全面校对并修复了主菜单、检查器、启动面板、打印机对话框与状态栏中的所有中英文混杂与机翻残留,提供符合 macOS 规范的纯正简体中文体验。
  • 清理遗留兼容层与冗余代码:剔除了针对早期 OS X 10.6/10.7 的历史兼容补丁(如 ADBForwardCompatibility、ADBAppKitVersionHelpers)及第三方冗余文档,全面升级现代化 AppKit 与 UniformTypeIdentifiers API。

v2.0.0-Alpha7

Choose a tag to compare

@github-actions github-actions released this 18 Aug 22:29
4d6d77a

Version 2.0.0-Alpha7 (English)

This release modernizes Boxer's core dependencies, featuring a pure Swift 6 Metal rendering pipeline with the latest OpenEmuShaders, updated Roland MT-32 emulation via Munt 2.8.2, and native Apple GameController framework integration for modern wireless gamepads.

Key Changes

  • Swift 6 Metal Rendering Pipeline: Rebuilt the Metal video rendering view and screenshot capture extensions in pure Swift 6, directly integrating with the latest upstream OpenEmuShaders framework (2ac33a9) and modernized SPIRV toolchains.
  • Roland MT-32 Munt 2.8.2 Engine: Upgraded Vendor/MT32Emu to the latest munt_2_8_2 release, delivering enhanced MIDI synthesis accuracy, modernized DSP filters, and universal Apple Silicon / Intel binary support.
  • Native Wireless Gamepad Support: Introduced BXGameControllerMonitor leveraging Apple's GameController.framework, providing out-of-the-box support for modern Bluetooth wireless controllers including Xbox Wireless, PlayStation DualSense / DualShock 4, and Nintendo Switch Pro controllers.
  • What's New in Boxer: Added a native SwiftUI WhatsNewSheetView with full localization for highlighting new features on major updates.

版本 2.0.0-Alpha7 (中文)

本版本全面完成了 Boxer 核心 Vendor 依赖库的现代化重构,包含基于纯 Swift 6 的 Metal 渲染管线与最新 OpenEmuShaders 升级、基于 Munt 2.8.2 的 Roland MT-32 仿真引擎升级,以及基于 Apple GameController 框架的原生现代无线手柄支持。

主要更新

  • 纯 Swift 6 Metal 渲染管线:使用纯 Swift 6 全面重构了 Metal 画面渲染视图与截图捕获扩展,直接接入上游最新 OpenEmuShaders 框架(2ac33a9)及全新 SPIRV 工具链。
  • Roland MT-32 Munt 2.8.2 仿真引擎:升级 Vendor/MT32Emu 核心引擎至最新的 munt_2_8_2 正式版,大幅提升 MIDI 音乐合成精度与 DSP 滤波质量,并全面支持 Apple Silicon 与 Intel 双架构。
  • 原生现代无线手柄支持:引入基于 Apple 官方 GameController.framework 的 BXGameControllerMonitor,原生支持 Xbox 无线手柄、PlayStation DualSense / DualShock 4 及 Nintendo Switch Pro 手柄的即插即用与无线蓝牙连接。
  • 新功能特性弹窗:新增原生 SwiftUI WhatsNewSheetView 弹窗与多语言本地化支持,用于在版本更新时直观展示新特性。

v2.0.0-Alpha6

Choose a tag to compare

@github-actions github-actions released this 10 Jun 08:06
e91df1e

Version 2.0.0-Alpha6 (English)

This release fixes the DOSBox command execution failure where custom emulator startup commands were not intercepted by the Objective-C frontend, preventing the game from launching automatically and showing "Illegal command" errors.

Key Changes

  • Fix Custom Command Interception: Re-introduced the boxer_shellShouldRunCommand check inside DOS_Shell::DoCommand (shell_cmds.cpp). This ensures Boxer-specific shell commands like boxer_preflight and boxer_launch are correctly intercepted and handled by the app frontend instead of falling through to the emulator shell and raising errors.
  • Restore Game Auto-Launch: Intercepting boxer_launch correctly triggers the emulator delegate to boot the target executable immediately, resolving the issue where the game box would stop at the Favorites/Launch Panel on load.

版本 2.0.0-Alpha6 (中文)

本版本修复了自定义虚拟机启动指令未被 Cocoa 前端拦截,从而导致 DOSBox 执行报错并无法自动进入游戏的问题。

主要更新

  • 修复自定义指令拦截:重新在 DOS_Shell::DoCommand(shell_cmds.cpp)中接入了 boxer_shellShouldRunCommand 检查,确保 boxer_preflight 和 boxer_launch 等 Boxer 专属控制指令能被 Cocoa 框架正确捕获与执行,避免这些指令被传导至 DOSBox 终端引发 Illegal command 报错。
  • 恢复游戏自动运行:修复了拦截逻辑后,boxer_launch 会正确驱动虚拟机代理以直接运行目标游戏程序,解决了双击打开游戏包(Gamebox)时直接卡在 Favorites 快捷启动界面的问题。

v2.0.0-Alpha5

Choose a tag to compare

@github-actions github-actions released this 10 Jun 09:10
cc7824b

Version 2.0.0-Alpha5 (English)

This release fixes the process launch hang and loading spinner freeze issues by resolving a thread exception crash.

Key Changes

  • Fix Emulator Thread Exception: Fixed a fatal NSInvalidArgumentException when initializing the process info dictionary with a nil drive during the launch of AUTOEXEC.BAT. Refactored dictionary creation in BXEmulator+BXShell to safely check for nil pointers.
  • Multithreaded Emulation Stability: Restored full stability to the multithreaded emulation run loop, ensuring the Cocoa event loop and the emulator thread run seamlessly in parallel.

版本 2.0.0-Alpha5 (中文)

本版本解决了虚拟机启动挂起和 Loading 转圈冻结的问题,修复了子线程字典空值异常崩溃。

主要更新

  • 修复仿真线程异常崩溃:修复了在启动 AUTOEXEC.BAT 批处理文件时,由于 drive 驱动器为 nil 从而在初始化 processInfo 字典时引发的致命 NSInvalidArgumentException 异常。重构了 BXEmulator+BXShell 中的字典构建逻辑以安全防御 nil 指针。
  • 多线程仿真稳定性:恢复了多线程仿真模式下虚拟机主循环与前台 Cocoa 事件 RunLoop 并行运转的稳定性,确保游戏和提示符界面能够流畅载入并消除转圈挂起。