プログラミング
CP/M-386 – 386保護モード向けのCP/M、CP/M-68Kから派生
CP/M-386 – CP/M for 386 protected mode, derived from CP/M‑68K (github.com)
要約
CP/M-386は、CP/M-68Kを基に開発された、386プロセッサの保護モードで動作するCP/Mオペレーティングシステムです。現在開発初期段階にあり、32ビット保護モード実装、フロッピーディスクまたはGRUBからのブート、VGAテキストモードとシリアルコンソールをサポートしています。コンパイルにはAWK、GCC、NASMなどのツールが必要で、NetBSD、FreeBSD、LinuxなどのOS上でビルド可能です。
全文翻訳
CP/M-386
CP/M‑386は、CP/M‑68Kから派生した、386保護モード向けのCP/Mです。
概要
ハードウェアサポート
CP/M互換性
ビルド要件
ダウンロード
コンパイル
ビルド出力
QEMUテスト
QEMUの注意点
含まれるユーティリティ
コントリビューティング
将来の計画
コード統計
ミラー
ライセンス
概要
CP/M‑386は現在、非常に初期の開発段階にあります。リング3 TPA(Transient Program Area)を備えた完全な32ビット保護モード実装です。3.5インチ1.44MBフロッピーディスクのMBRまたはGRUBマルチブートカーネルから起動可能です。VGAテキスト(0xB8000)および/またはCOM1シリアル(9600/N/8/1、0x3F8)コンソールをサポートします。フロッピー/ハードディスク/CD/USB/ネットワーク/サウンド/その他のドライバーは(まだ)ありません。
ハードウェアサポート
2MB(以上)のメモリを搭載した386(およびそれ以降のシステム)と互換性があります。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.3およびCP/M 2.2と完全に同等です。CP/M‑Plus(CP/M 3)のBDOSの大部分もサポートされています。DOS‑Plusの追加機能の60%以上が実装されています。MP/Mの拡張機能の約半分が完了しています。欠けている機能のほとんどは、シングルユーザーCP/M実装には適用されないマルチユーザー、マルチタスク、メッセージキュー、プロセス制御コールです。直接ビデオアクセス、高解像度タイミング、PRNGなどの新機能に対応するため、CP/M‑386固有のBDOS拡張が追加されています。
ビルド要件
CP/M‑386をコンパイルするには、以下の依存関係が必要です。
AWK
Cpmtools†
GNU Binutils
GNU Coreutils
GNU GCCまたはLLVM Clang
GNU Make
NASM
QEMU(テストにのみ必要)
†cpmtoolsのバージョン2.23以降を使用してください。古いバージョンは動作するように見えても、いくつかの既知のバグがあります。
ダウンロード
現在のCP/M‑386ビルドをダウンロードしてください。GitLab CI/CDログを表示します。
コンパイル
CP/M‑386のビルドは、NetBSDおよびFreeBSD‡の現在のリリース、およびほとんどの最新の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ビルド(推奨):
make -Orecurse -j "$(nproc 2> /dev/null || printf '%s' 1)"
make test
Clangビルド:
make -Orecurse -j "$(nproc 2> /dev/null || printf '%s' 1)"
CC="clang"
Clangでコンパイルされたi386コードはサイズが大きくなるため、GCCの使用を推奨します。コンパイラを切り替えたり、コンパイラフラグを調整したりする場合は、必ずmake cleanを実行してください。テストスイート(make test)を実行するには、32ビットサポートライブラリが必要です。
‡執筆時点では、FreeBSDは機能しないcpmtools2パッケージを、mkfs.cpmのバグのある機能とともに提供しています。FreeBSDで正常にビルドするには、cpmtoolsを再ビルドし、libdskとリンクされていないことを確認する必要があります。FreeBSDでmkfs.cpmからDisc rejected by driverエラーが発生した場合、ツールが破損しており、CP/M‑386のビルドには使用できません。
ビルド出力
ビルドにより、主に2つの成果物が生成されます。
ファイル
説明
cpm386.elf
マルチブートカーネルイメージ
floppy.img
起動可能な3.5インチ1.44MBフロッピーディスクイメージ
プリコンパイル済みのバイナリは上記からダウンロードできます。
QEMUテスト
マルチブートカーネル(推奨):
qemu-system-i386 -m 2M -serial stdio -monitor none -kernel "cpm386.elf"
フロッピーMBRローダー:
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(VGAテキストコンソールバージョン)
ACLOCKVT.386
aclock(ANSIターミナルバージョン)
BIG.386
マルチエクステントロードテスト実行可能ファイル
CLEARTPA.386
TPAをクリア(ゼロクリア)し、オプションで検証します
CLS.386
画面クリア(BDOS 221)
DELAY.386
遅延テスト(BDOS 141)
DEMO.SUB
SUBMITデモンストレーション
DUMPDIR.386
ディレクトリエントリーダンプユーティリティ(BDOS 17/18)
DUMPFCB.386
ファイルコントロールブロックダンプユーティリティ(BDOS 15)
ENV.DAT
環境データファイル
FPARSE.386
F_PARSEテスト(BDOS 152)
GETSN.386
シリアル番号を表示(BDOS 107)
GFXTEST.386
グラフィックスおよびフレームバッファデモ(BDOS 229/230/231/233)
HD.386
16進ダンプユーティリティ
HELLO.386
Hello world(最初のCP/M‑386プログラム!)
ILLEGAL.386
リング3保護および例外ハンドラーテスト
IOTEST.386
ファイルI/O BDOSテスト
JULIA.386
ジュリア集合フラクタルを描画(ターミナルバージョン)
LRBC.386
最終レコードバイト数(Last Record Byte Count)を照会および/または設定します
LS.386
ファイルリスト(サイズ付き)
MANDEL.386
マンデルブロ集合フラクタルを描画(ターミナルバージョン)
ALVTST.386
割り当てベクトルテストを取得(BDOS 27)
MEM.386
メモリマップユーティリティ(BDOS 227/228)
MORE.386
UNIXのmoreスタイルページャー
OD.386
10進ダンプユーティリティ
PAUSE.386
キー入力待ち
PRINTENV.386
環境およびシステムデータを表示
PRNG.386
PRNGテストおよびデモユーティリティ(BDOS 253/254)
PROFILE.SUB
SUBMITスクリプト(起動時に自動実行)
RC.386
リターンコードテストおよび照会(BDOS 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)
TEST211.386
数値フォーマットテスト(BDOS 211)
TEXTMODE.386
コンソールテキストモードを照会および設定します(BDOS 229/230/231)
TICKS.386
高解像度タイマーテスト(BDOS 225/226)
TOD.386
時刻(Time of Day)クロックを取得(および設定)します(BDOS 104/105)
TOUCH.386
空のファイルを作成します
TRUNCATE.386
ファイル切り捨てユーティリティ(LRBC対応)
TRUNCTST.386
切り捨てテスト(BDOS 99)
TSEC.386
日付と時刻を取得します(BDOS 155)
VER.386
OSバージョンを表示します(BDOS 163)
VGAFONT.386
テキストコンソールフォントをロードするか、ROMフォントを復元します(BDOS 232)
VGAOFF.386
VGAテキストコンソールを無効化します(BDOS 222)
VGAON.386
VGAテキストコンソールを有効化します(BDOS 222)
VGATEXT.386
VGAテキスト直接アクセスデモ(BDOS 224)
コントリビューティング
大量のLLM生成コードを含むプルリクエストは開かないでください。これらは直ちに却下されます。現時点ではオペレーティングシステムにAI生成コードはありません(AIテスト、コメント、分析はいくつかありますが)、プロジェクトは私にとって学習体験であると同時に有用なOSポートであることを意図しています。コントリビューターによるAI(人工知能)ツールの使用は、LLVM AI Tool Use Policyと同じ条件で現在許可されていますが、この許可はいつでも予告なく撤回される可能性があります。
将来の計画
FUTURE.mdを参照してください。
コード統計
言語
ファイル
行数
空白
コメント
コード
複雑度
バイト
Uloc
C
65
31160
6146
4379
20635
4356
730364
10665
C Header
22
3054
551
1233
1270
13
111663
1558
Makefile
2
1570
300
201
1069
331
52823
773
Assembly
6
1351
235
266
850
1
31040
700
Markdown
2
478
58
0
420
0
21907
378
Linker Script
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であり、GitHubにもミラーがあります。
ライセンス
CP/M‑386は、寛容なMITライセンスの条件に基づいて配布されています。DRDOS, Inc. dba DeviceLogics LLCのBryan W. Sparks(Digital Research, Inc.のCP/M資産の後継者)は、CP/Mオペレーティングシステムとその派生物を含むCP/Mテクノロジーの使用、配布、変更、拡張、およびその他の利用に関する無制限の許可を明示的に付与しています。