HN 日本語サマリー

← 一覧へ戻る
プログラミング

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)

83 pointsby TMWNN38 コメント

要約

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テクノロジーの使用、配布、変更、拡張、およびその他の利用に関する無制限の許可を明示的に付与しています。