CP/M-386 – 面向386保护模式的CP/M,源自CP/M-68K

Hacker News Top 工具

摘要

CP/M-386是CP/M在386保护模式下的早期开源实现,源自CP/M-68K,提供与CP/M 2.2和CP/M-68K 1.3完全一致的BDOS兼容性。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/03 01:28

johnsonjh/cpm386 源码:https://github.com/johnsonjh/cpm386 # CP/M-386 CP/M‐386 是用于 386 保护模式的 CP/M,源自 CP/M‐68K。 — - 概述 - 硬件支持 - CP/M 兼容性 - 构建要求 - 下载 - 编译 - 构建输出 - QEMU 测试 - QEMU 说明 - 附带工具 - 贡献 - 未来计划 - 代码统计 - 镜像 - 许可证 — ## 概述 CP/M‐386 目前处于 非常 早期的开发阶段。 * 完整的 32 位保护模式(https://en.wikipedia.org/wiki/Protected_mode)实现,具有 Ring‐3 TPA(https://en.wikipedia.org/wiki/Protection_ring)。 * 可通过 3.5“ 1.44MB 软盘 MBR(https://en.wikipedia.org/wiki/Master_boot_record)或 GRUB Multiboot(https://en.wikipedia.org/wiki/Multiboot_specification)内核引导。 * 支持 VGA 文本模式(https://en.wikipedia.org/wiki/VGA_text_mode)(0xB8000)和/或 COM1 串口(https://en.wikipedia.org/wiki/Serial_port)(9600/N/8/1,0x3F8)控制台。 * (尚)无软盘/硬盘/CD/USB/网络/声音/其他驱动程序。 ## 硬件支持 * 兼容 386(及更高版本)且内存为 2MB(或更多)的系统。 * 支持使用 PC BIOS 或 UEFI(带 CSM)的系统。 * 支持 VGA、8042 PS/2、8250/16450/16550 UART、CMOS RTC 和 8253/8254 PIT。 ## CP/M 兼容性 CP/M‐386 应与其他实现高度源代码兼容: | 系统 | BDOS 覆盖率 | |–––––––––––:|:––––––––––| | CP/M‐68K 1.3 | 100% | | CP/M 2.2 | 100% | | CP/M‐Plus | 71% | | DOS‐Plus | 62% | | MP/M 2.1 | 50% | 系统目前向应用程序报告 BDOS 2.2。 * CP/M‐386 的 BDOS 已与 CP/M‐68K 1.3CP/M 2.2 完全持平。 * 还支持绝大多数 CP/M‐PlusCP/M 3)的 BDOS。 * 已实现超过 60% 的 DOS‐Plus 新增功能。 * 约一半的 MP/M 扩展已完成。 * 缺少的功能主要是多用户、多任务、消息队列以及不适用于单用户 CP/M 实现的进程控制调用。 * 已添加 CP/M‐386 特有的 BDOS 扩展,以支持直接视频访问、高分辨率定时、PRNG 等新功能。 ## 构建要求 编译 CP/M‐386 需要以下依赖项: * AWK(https://en.wikipedia.org/wiki/AWK) * Cpmtools(https://www.moria.de/~michael/cpmtools/files)† * GNU Binutils(https://www.gnu.org/software/binutils/) * GNU Coreutils(https://www.gnu.org/software/coreutils/) * GNU GCC(https://gcc.gnu.org/)或 LLVM Clang(https://clang.llvm.org) * GNU Make(https://www.gnu.org/software/make/) * NASM(https://nasm.us/) * QEMU(https://www.qemu.org)(仅测试时需要) †请务必使用 2.23 或更高版本的 cpmtools。旧版本可能看似可用,但存在多个已知错误。 ## 下载 * 下载当前 CP/M‐386 构建版本(https://johnsonjh.gitlab.io/cpm386/cpm386.zip)。 * 查看 GitLab CI/CD(https://gitlab.com/johnsonjh/cpm386/-/pipelines/latest)日志。 ## 编译 构建 CP/M‐386 在当前的 NetBSDFreeBSD‡ 版本以及大多数较新的 Linux 发行版上均受支持。以下为已验证可成功构建 CP/M‐386 的 Linux 发行版最低版本:CentOS Stream 9、Fedora 36、Debian 12、Ubuntu 18.04(使用 ppa:ubuntu-toolchain-r/test 中的 gcc-16)、Ubuntu 22.04、Alpine 3.24 和 OpenSUSE Leap 15.4。 * GCC 构建(推荐): sh make -Orecurse -j "$(nproc 2> /dev/null || printf '%s' 1)" make test * Clang 构建: sh make -Orecurse -j "$(nproc 2> /dev/null || printf '%s' 1)" CC="clang" * 建议使用 GCC,因为 Clang 编译的 i386 代码体积更大。 * 切换编译器或调整编译器标志时,请务必执行 make clean。 * 运行测试套件(make test)需要 32 位支持库。 * ‡在撰写本文时,FreeBSD 提供的 cpmtools2 软件包不可用,其 mkfs.cpm 功能存在缺陷。要在 FreeBSD 上成功构建,你必须重新构建 cpmtools,并确保它没有libdsk 链接。如果在 FreeBSD 上从 mkfs.cpm 收到 Disc rejected by driver 错误,说明你的工具已损坏无法用于构建 CP/M‐386。 ## 构建输出 * 构建产生两个主要产物: | 文件 | 描述 | |———––:|:—————————————| | cpm386.elf | Multiboot 内核映像 | | floppy.img | 可引导的 3.5“ 1.44MB 软盘映像 | 你可以从上方下载预编译的二进制文件。 ## QEMU 测试 * Multiboot(https://en.wikipedia.org/wiki/Multiboot_specification)内核(推荐): sh qemu-system-i386 -m 2M -serial stdio -monitor none -kernel "cpm386.elf" * 软盘 MBR(https://en.wikipedia.org/wiki/Master_boot_record)加载器: sh qemu-system-i386 -m 2M -serial stdio -monitor none -drive if=floppy,format=raw,file="floppy.img" -boot a ## QEMU 说明 * 使用 -nographic -display none -vga none 可禁用 VGA 视频(并使用串行控制台)。 * 使用 -serial none 可禁用串行 UART(并使用 VGA 控制台)。 ## 附带工具 | 程序 | 描述 | |—————:|:—————————————————————————————————| | ACLOCKDV.386 | aclock(https://github.com/tenox7/aclock)(VGA 文本控制台版本) | | ACLOCKVT.386 | aclock(https://github.com/tenox7/aclock)(ANSI 终端版本) | | BIG.386 | 多 extent 加载测试可执行文件 | | CLEARTPA.386 | 清除(置零)并可选择验证 TPA | | CLS.386 | 清屏(BDOS 221) | | DELAY.386 | 延迟测试(BDOS 141(https://www.seasip.info/Cpm/bdos.html#141)) | | DEMO.SUB | SUBMIT 演示 | | DUMPDIR.386 | 目录项转储工具(BDOS 17(https://www.seasip.info/Cpm/bdos.html#17)/18(https://www.seasip.info/Cpm/bdos.html#18)) | | DUMPFCB.386 | 文件控制块转储工具(BDOS 15(https://www.seasip.info/Cpm/bdos.html#15)) | | ENV.DAT | 环境数据文件 | | FPARSE.386 | F_PARSE 测试(BDOS 152(https://www.seasip.info/Cpm/bdos.html#152)) | | GETSN.386 | 显示序列号(BDOS 107(https://www.seasip.info/Cpm/bdos.html#107)) | | GFXTEST.386 | 图形和帧缓冲演示(BDOS 229/230/231/233) | | HD.386 | 十六进制转储工具 | | HELLO.386 | Hello world(第一个 CP/M‐386 程序!) | | ILLEGAL.386 | Ring‐3 保护和异常处理程序测试 | | IOTEST.386 | 文件 I/O BDOS 测试 | | JULIA.386 | 绘制 Julia 集分形(终端版本) | | LRBC.386 | 查询和/或设置最后记录字节计数 | | LS.386 | 列出文件(带大小) | | MANDEL.386 | 绘制 Mandelbrot 集分形(终端版本) | | ALVTST.386 | 获取分配向量测试(BDOS 27(https://www.seasip.info/Cpm/bdos.html)) | | MEM.386 | 内存映射工具(BDOS 227/228) | | MORE.386 | UNIX more 风格的分页器 | | OD.386 | 八进制转储工具 | | PAUSE.386 | 等待按键 | | PRINTENV.386 | 打印环境和系统数据 | | PRNG.386 | PRNG 测试和演示工具(BDOS 253/254) | | PROFILE.SUB | SUBMIT 脚本(启动时自动执行) | | RC.386 | 返回码测试和查询(BDOS 108(https://www.seasip.info/Cpm/bdos.html#108)) | | README.TXT | 示例文本文件 | | REBOOT.386 | 重启工具(BDOS 220) | | RM.386 | UNIX rm 风格的交互式文件删除工具 | | SEROFF.386 | 禁用串行控制台(BDOS 223) | | SERON.386 | 启用串行控制台(BDOS 223) | | STAT.386 | STAT(Zilog CP/M‐Z8000 STAT v1.0C 01/03/84 的移植) | | SYNC.386 | 同步磁盘(BDOS 48(https://www.seasip.info/Cpm/bdos.html#48)) | | TEST211.386 | 数字格式测试(BDOS 211(https://www.seasip.info/Cpm/bdos.html#211)) | | TEXTMODE.386 | 查询和设置控制台文本模式(BDOS 229/230/231) | | TICKS.386 | 高分辨率定时器测试(BDOS 225/226) | | TOD.386 | 获取(和设置)当日时间时钟(BDOS 104(https://www.seasip.info/Cpm/bdos.html#104)/105(https://www.seasip.info/Cpm/bdos.html#105)) | | TOUCH.386 | 创建空文件 | | TRUNCATE.386 | 文件截断工具(支持 LRBC) | | TRUNCTST.386 | 截断测试(BDOS 99(https://www.seasip.info/Cpm/bdos.html#99)) | | TSEC.386 | 获取日期和时间(BDOS 155(https://www.seasip.info/Cpm/bdos.html#155)) | | VER.386 | 显示操作系统版本(BDOS 163(https://www.seasip.info/Cpm/bdos.html#163)) | | VGAFONT.386 | 加载文本控制台字体(https://github.com/viler-int10h/vga-text-mode-fonts)或恢复 ROM 字体(BDOS 232) | | VGAOFF.386 | 禁用 VGA 文本控制台(BDOS 222) | | VGAON.386 | 启用 VGA 文本控制台(BDOS 222) | | VGATEXT.386 | VGA 文本直接访问演示(BDOS 224) | ## 贡献 * 请不要提交包含大量 LLM 生成代码的拉取请求。这些请求将被立即拒绝。 * 目前操作系统中没有 AI 生成的代码(尽管一些 AI 测试、注释和分析),因为该项目的目的是既为我提供学习经验,又是一个有用的操作系统移植。 * 贡献者目前可以使用 AI(人工智能)工具,但须遵守与 LLVM AI 工具使用政策(https://llvm.org/docs/AIToolPolicy.html)相同的条款和条件,但此许可可能随时撤销,恕不另行通知。 ## 未来计划 参见 FUTURE.md。 ## 代码统计 语言 文件 行数 空行 注释 代码 复杂度 字节 唯一行数 C 65 31160 6146 4379 20635 4356 730364 10665 C 头文件 22 3054 551 1233 1270 13 111663 1558 Makefile 2 1570 300 201 1069 331 52823 773 汇编 6 1351 235 266 850 1 31040 700 Markdown 2 478 58 0 420 0 21907 378 链接脚本 2 169 34 0 135 0 3923 82 YAML 1 80 6 15 59 0 3196 63 总计 100 37862 7330 6094 24438 4701 954916 14146 ## 镜像 * 本软件的主页是 https://gitlab.com/johnsonjh/cpm386(https://gitlab.com/johnsonjh/cpm386),并在 GitHub(https://github.com/johnsonjh/cpm386)上有镜像。 ## 许可证 * CP/M‐386 根据宽松的 MIT 许可证 分发。 * DRDOS, Inc.(以 DeviceLogics LLC 名义运营)的 Bryan W. Sparks 作为 Digital Research, Inc. 的 CP/M 资产的权益继承人,明确授予无限授权,允许使用、分发、修改、增强以及以其他方式提供 CP/M 技术,包括 CP/M 操作系统及其衍生作品。

相似文章

CP/M-86 & MS-DOS 交叉开发环境

Hacker News Top

本项目为CP/M-86和MS-DOS提供了一个交叉开发环境,包括用于复古计算的编译器、汇编器和模拟器。

CP/M-68K 模拟器

Lobsters Hottest

一位业余开发者创建了一个适用于Motorola 68000 CPU的模拟器,可运行CP/M-68K,支持自定义BIOS和RAM磁盘;源代码已在GitHub和GitLab上提供。

z386:基于原始微码构建的开源80386

Hacker News Top

本文详述了z386,一款基于原始Intel微码构建的开源FPGA 80386 CPU。它能引导DOS 6/7、运行保护模式程序,并玩经典游戏如Doom,既是一种教育性重构,也是一个可用的FPGA CPU。

M/PC – 一种串联式操作系统

Hacker News Top

M/PC 是为 Varvara 平台设计的一种串联式操作系统,受 Openfirmware 启发,通过后缀命令界面进行文件管理,无需图形文件浏览器。