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, 快速连接, 汇编语言, 源码重建, 解释器, 逆向工具, 逆向工程