Hacker News 中文摘要

RSS订阅

Musashi:用C语言编写的Motorola 680x0模拟器 -- Musashi: Motorola 680x0 emulator written in C

文章摘要

Musashi是一个用C语言编写的便携式Motorola 680x0系列处理器模拟引擎,支持68000至68040等多款处理器。该模拟器注重可移植性和速度,符合ANSI C89标准,并已在MAME项目中稳定运行多年。采用自由软件许可,允许自由使用、修改和分发。

文章总结

Musashi 680x0 模拟器项目简介

项目名称:Musashi 版本号:4.10 项目性质:摩托罗拉M680x0系列处理器模拟引擎 开发者:Karl Stenerud(1998-2002) 项目地址:https://github.com/kstenerud/Musashi

核心特性: 1. 支持多款68000系列处理器: - 基础型号:68000/68010 - 进阶型号:68EC020/68020/68EC030/68030 - 高端型号:68EC040/68040 - 特殊型号:SCC68070(32位数据总线的68010变种)

  1. 设计目标:
    • 高可移植性(符合ANSI C89/C9X标准)
    • 运行效率优化
    • 经过MAME项目长期验证

基础配置指南: - 内存访问函数需实现: c m68k_read_memory_8/16/32() m68k_write_memory_8/16/32() - 初始化时必须调用m68k_pulse_reset() - 执行指令使用m68k_execute() - 中断触发使用m68k_set_irq()

高级功能配置: 1. 中断处理: - 可配置中断应答回调 - 支持多设备中断仲裁 - 需手动清除中断请求

  1. 地址空间管理:

    • 支持函数代码引脚模拟
    • 可区分程序空间/数据空间
  2. 性能优化:

    • 提供独立立即数读取接口
    • 支持PC相对寻址读取
    • 时钟频率模拟API

特殊功能支持: - 断点指令处理 - 跟踪异常模拟 - 复位指令处理 - 指令预取模拟 - 地址错误异常

多CPU支持: - 支持上下文切换 - 提供寄存器访问接口 - 支持状态保存/恢复

编译说明: 1. 需先构建m68kmake工具生成操作码文件 2. 核心编译目标: - m68kcpu.o(主处理器核心) - m68kops.o(操作码实现) - m68kdasm.o(反汇编功能,可选)

开发者联系方式: 邮箱:kstenerud@gmail.com

(注:原文中的软件许可条款、具体函数参数等技术细节已做简化处理,保留核心功能描述)

评论总结

总结评论内容:

  1. 技术实现与性能讨论
  • kazinator分享1994年用C语言编写68010模拟器的经验,通过正则表达式生成指令分派逻辑,在66MHz 486 DX2上达到每秒50万条指令的模拟速度 "I made one a 68010 emulator in C in 1994...emulating about half a million instructions per second" "用C语言编写68010模拟器...达到每秒50万条指令"

  • rcarmo提到在尝试为BasiliskII添加JIT模拟时,发现该方案相比现有模拟器速度提升有限 "wasn't enough of a speed up over the existing emulator" "相比现有模拟器速度提升有限"

  1. 项目背景故事
  • kstenerud详细讲述开发Musashi模拟器的经历:在东京狭小公寓里,用便携式C语言重写MAME的68k汇编模拟器并成功超越原版性能 "Can I outperform the current assembler core with one written in portable C? Spoiler: Yes" "用便携式C语言重写...成功超越原版性能"

  • 项目命名灵感来自宫本武藏的《五轮书》,开发过程中最自豪的时刻是看到Rastan Saga游戏标题画面 "named it Musashi, after...Miyamoto Musashi" "看到Rastan Saga标题画面是最自豪时刻"

  1. 许可信息
  • self_awareness补充说明项目采用MIT许可证 "FYI: MIT licensed" "项目采用MIT许可证"

关键分歧点在于模拟器性能表现:kazinator展示早期C语言模拟器的良好性能,而rcarmo指出在现代应用中速度优势可能有限。kstenerud的经历则证明通过优化,C语言实现可以超越汇编版本。