avwohl/mbasic2025

GitHub: avwohl/mbasic2025

通过反汇编和差异分析逐字节精确重构了 CP/M 平台下已遗失的 Microsoft MBASIC 5.21 解释器源码。

Stars: 5 | Forks: 1

# MBASIC 5.21 源码重构 对于 CP/M 而言,广泛使用和分发的 Microsoft BASIC 版本是 5.21。遗憾的是,该版本的原始源码已随时间流逝而遗失。 本项目利用最接近的可用 5.2x 版本源码进行重构,使其编译后在字节级别上与原始的 MBASIC 5.21 二进制文件完全一致。 ## 背景 在复古计算论坛上,获取 MBASIC 5.21 源码一直是一个常见的诉求。一些人只是想了解解释器的工作原理,另一些人则希望为特定硬件添加扩展或实现新功能。 目前存在一套标记为“MBASIC 5.2”的源码,尽管它们属于同一系列,但显然不是 5.21 的源码。这些原始的 5.2 源码被保存在 `mbasic_52/` 目录中。 ## 方法 1. 使用自定义反汇编器 (ud80) 对原始 `mbasic.com` 5.21 二进制文件进行反汇编 2. 分析反汇编代码,以识别其与 5.2 源码之间的差异 3. 对 5.2 源码进行最小限度的修改,以生成与 5.21 逐字节匹配的版本 4. 重构后的源码位于 `mbasic_521/mbasic_src/` ## 项目结构 ``` mbasic2025/ ├── mbasic_52/ # Original MBASIC 5.2 sources (reference) ├── mbasic_521/ # recreated 5.21 sources ├── mbasicz/ # latest available, optimized for z80 ├── 4k8k/ # 4k basic and 8k basic │ ├── mbasic_src/ # Reconstructed 5.21 sources │ ├── com/ # Reference mbasic.com 5.21 binary │ ├── disasm/ # Disassembly of mbasic.com │ ├── build.sh # Build script │ └── utils/ # Utility scripts └── README.md ``` ## 构建 ### 前置条件 你需要 **um80**,这是一个适用于 Linux 的、兼容 MACRO-80 的汇编工具链。 从 PyPI 安装: ``` pip install um80 ``` 或者从源码安装: ``` git clone https://github.com/avwohl/um80_and_friends.git cd um80_and_friends pip install -e . ``` ### 构建过程 ``` cd mbasic_521 ./build.sh ``` 这将: 1. 将所有源码模块(`.mac` 文件)汇编为可重定位的目标文件(`.rel`) 2. 将它们链接在一起以生成 `out/mbasic_go.com` 3. 生成符号文件 `out/mbasic_go.sym` ### um80 工具链 um80 工具链包含: **um80** - 兼容 MACRO-80 的汇编器 ``` um80 source.mac -o output.rel [-l listing.prn] ``` **ul80** - 兼容 LINK-80 的链接器 ``` ul80 -o output.com [-s] file1.rel file2.rel ... ``` - `-s` 生成 `.sym` 符号文件 - `-x` 输出 Intel HEX 格式 - `-p ORIGIN` 设置程序起始地址(默认:0x100) ## 源码模块 解释器由以下模块构建而成(按链接顺序): | 模块 | 描述 | |--------|-------------| | bintrp.mac | 主解释器核心 | | f4.mac | 浮点数运算 | | biptrg.mac | 程序存储/管理 | | biedit.mac | 行编辑器 | | biprtu.mac | 打印工具 | | bio.mac | I/O 例程 | | bimisc.mac | 杂项功能 | | bistrs.mac | 字符串处理 | | binlin.mac | 行输入 | | fiveo.mac | 文件 I/O | | dskcom.mac | 磁盘命令 | | dcpm.mac | CP/M 接口 | | fivdsk.mac | 磁盘文件处理 | | init.mac | 初始化 | ## 许可证 原始的 MBASIC 源码版权归 Microsoft 所有。此重构版本仅用于教育和历史保存目的。 ## 链接 - 项目仓库:https://github.com/avwohl/mbasic2025 - um80 汇编器:https://github.com/avwohl/um80_and_friends ## 相关项目 - [80un](https://github.com/avwohl/80un) - 用于 CP/M 归档及压缩格式 LBR、ARC、squeeze、crunch 和 CrLZH 的解包器。 - [cpmdroid](https://github.com/avwohl/cpmdroid) - 适用于 Android 手机和平板电脑的 Z80/CP/M 模拟器。它模拟了 RomWBW HBIOS 接口和 VT100 终端。 - [cpmemu](https://github.com/avwohl/cpmemu) - 适用于 Linux 和 Windows 的 Z80/CP/M 模拟器,包含 Z80 和 8080 CPU 内核。它将 CP/M 2.2 程序的 BDOS 和 BIOS 调用转换为对主机文件系统的操作。 - [ioscpm](https://github.com/avwohl/ioscpm) - 适用于 iOS 和 macOS 的 Z80/CP/M 模拟器。它模拟了 RomWBW HBIOS 接口并运行 CP/M 2.2 和 CP/M 3。 - [learn-ada-z80](https://github.com/avwohl/learn-ada-z80) - 包含 90 多个 Ada 示例程序的集合,适用于 uada80(一种用于 Z80 处理器和 CP/M 的 Ada 编译器)。 - [mbasic](https://github.com/avwohl/mbasic) - MBASIC 5.21(用于 CP/M 的 Microsoft BASIC-80)的 Python 解释器。包含两个编译器后端,可将程序编译为 CP/M .COM 文件或 JavaScript。 - [mbasicc](https://github.com/avwohl/mbasicc) - MBASIC 5.21(用于 CP/M 的 Microsoft BASIC-80)的 C++17 解释器。它可在 Linux 和 macOS 上运行。 - [mbasicc_web](https://github.com/avwohl/mbasicc_web) - MBASIC 5.21(用于 CP/M 的 Microsoft BASIC-80)的 Web 浏览器解释器。Emscripten 将 mbasicc 解释器编译为 WebAssembly。 - [mpm2](https://github.com/avwohl/mpm2) - 用于 MP/M II(多用户 CP/M 操作系统)的 Z80 模拟器。用户通过 SSH 连接,并使用 SFTP 客户端传输文件。 - [romwbw_emu](https://github.com/avwohl/romwbw_emu) - 适用于 Linux 和 macOS 的硬件级 Z80/CP/M 模拟器。它模拟了 RomWBW HBIOS 接口,并在 512 KB ROM 和 512 KB RAM 中切换内存库。 - [scelbal](https://github.com/avwohl/scelbal) - 用于 8080 处理器和 CP/M 的浮点 BASIC 解释器。它包含一个转换器,可将原始的 8008 源码转换为 8080 源码。 - [uada80](https://github.com/avwohl/uada80) - 用于 Z80 处理器和 CP/M 2.2 的 Ada 编译器。它可将 Ada 2012 的一个子集编译为 CP/M .COM 文件。 - [uc80](https://github.com/avwohl/uc80) - 用于 Z80 处理器和 CP/M 的 C 编译器。它针对较小的代码体积进行了优化。 - [ucow](https://github.com/avwohl/ucow) - 用于 Z80 处理器和 CP/M 的 Cowgol 编译器。它通过 Python 在 Linux 上运行。 - [um80_and_friends](https://github.com/avwohl/um80_and_friends) - 兼容 Microsoft MACRO-80 的 Linux 工具链。它包含汇编器、链接器、库管理器和反汇编器。 - [upeepz80](https://github.com/avwohl/upeepz80) - 用于生成小写 Z80 汇编语言的 Z80 编译器的窥孔优化器。它能缩短跳转指令为 jr,构建 djnz 循环,并移除无效的存储操作。 - [uplm80](https://github.com/avwohl/uplm80) - 用于 Z80 处理器和 CP/M 的 PL/M-80 编译器。它可生成 Intel 8080 和 Zilog Z80 汇编语言。 - [z80cpmw](https://github.com/avwohl/z80cpmw) - 适用于 Windows 的 Z80/CP/M 模拟器。它模拟了 RomWBW HBIOS 接口并从磁盘映像引导 CP/M。
标签:CP/M, 云资产清单, 复古计算, 微软BASIC, 快速连接, 汇编语言, 源码重建, 解释器, 逆向工具, 逆向工程