๐ Discover this awesome post from Hacker News ๐
๐ **Category**:
๐ **What Youโll Learn**:
CP/Mโ386 is CP/M for 386 protected mode, derived from CP/Mโ68K.
CP/Mโ386 is currently in the very early development stages.
- Compatible with 386 (and later systems) with 2MB (or more) memory.
- Systems using either PC BIOS or UEFI (with CSM) are supported.
- VGA, 8042 PS/2, 8250/16450/16550 UART, CMOS RTC, and 8253/8254 PIT
are supported.
CP/Mโ386 should be highly sourceโcompatible with other implementations:
| System | BDOS coverage |
|---|---|
| CP/Mโ68Kย 1.3 | 100% |
| CP/Mย 2.2 | 100% |
| CP/MโPlus | 71% |
| DOSโPlus | 62% |
| MP/Mย 2.1 | 50% |
The system currently reports BDOS 2.2 to applications.
- The CP/Mโ386 BDOS is at full parity with CP/Mโ68Kย 1.3 and
CP/Mย 2.2. - A large majority of the CP/MโPlus (CP/Mย 3) BDOS is also
supported. - More than 60% of the DOSโPlus additions have been implemented.
- Approximately half of the MP/M extensions have been completed.
- The missing functionality is largely the multiโuser, multiโtasking,
message queuing, and process control calls that don’t apply to a
singleโuser CP/M implementation.
- The missing functionality is largely the multiโuser, multiโtasking,
- Unique CP/Mโ386โspecific BDOS extensions have been added to accommodate
new features like direct video access, highโresolution timing, PRNG, etc.
The following dependencies are required to compile CP/Mโ386:
โ Be sure to use cpmtools version 2.23 or later. Older
versions may appear to work but have several known bugs.
Building CP/Mโ386 is supported on current releases of NetBSD and
FreeBSDโก, and most recent Linux distributions.
The following are the minimum versions of Linux distributions that have been
verified to build CP/Mโ386 successfully: CentOS Stream 9, Fedora 36,
Debian 12, Ubuntu 18.04 (with gcc-16 from ppa:ubuntu-toolchain-r/test),
Ubuntu 22.04, Alpine 3.24, and OpenSUSE Leap 15.4.
- GCC build (recommended):
make -Orecurse -j "$(nproc 2> /dev/null || printf '%s' 1)" make test
- Clang build:
make -Orecurse -j "$(nproc 2> /dev/null || printf '%s' 1)" CC="clang"
- It is recommended to use GCC as Clangโcompiled i386 code is larger.
- Be sure to
make cleanif switching compilers or adjusting compiler flags. - 32โbit support libraries are required to run the test suite (
make test). - โกAt the time of writing, FreeBSD is shipping nonโfunctional
cpmtools2packages with brokenmkfs.cpmfunctionality. To successfully
build on FreeBSD, you must rebuildcpmtoolsand ensure it is not
linked withlibdsk. If you receive aDisc rejected by drivererror on
FreeBSD frommkfs.cpm, your tools are broken and cannot be used to
build CP/Mโ386.
You can download preโcompiled binaries above.
- Multiboot
kernel (recommended):qemu-system-i386 -m 2M -serial stdio -monitor none -kernel "cpm386.elf"
- Floppy MBR loader:
qemu-system-i386 -m 2M -serial stdio -monitor none -drive if=floppy,format=raw,file="floppy.img" -boot a
- Use
-nographic -display none -vga noneto disable VGA video (and use only serial console). - Use
-serial noneto disable the serial UART (and use only VGA console).
| Program | Description |
|---|---|
ACLOCKDV.386 |
aclock (VGA text console version) |
ACLOCKVT.386 |
aclock (ANSI terminal version) |
BIG.386 |
Multiโextent loading test executable |
CLEARTPA.386 |
Clears (zeros) and optionally verifies the TPA |
CLS.386 |
Clear screen (BDOS 221) |
DELAY.386 |
Delay test (BDOS 141) |
DEMO.SUB |
SUBMIT demonstration |
DUMPDIR.386 |
Directory entry dump utility (BDOS 17/18) |
DUMPFCB.386 |
File control block dump utility (BDOS 15) |
ENV.DAT |
Environment data file |
FPARSE.386 |
F_PARSE test (BDOS 152) |
GETSN.386 |
Display serial number (BDOS 107) |
GFXTEST.386 |
Graphics and framebuffer demo (BDOS 229/230/231/233) |
HD.386 |
Hex dump utility |
HELLO.386 |
Hello world (the very first CP/Mโ386 program!) |
ILLEGAL.386 |
Ringโ3 protection and exception handler test |
IOTEST.386 |
File I/O BDOS tests |
JULIA.386 |
Draw a Julia set fractal (terminal version) |
LRBC.386 |
Query and/or set Last Record Byte Count |
LS.386 |
List files (with sizes) |
MANDEL.386 |
Draw a Mandelbrot set fractal (terminal version) |
ALVTST.386 |
Get Allocation Vector test (BDOS 27) |
MEM.386 |
Memory map utility (BDOS 227/228) |
MORE.386 |
UNIX moreโstyle pager |
OD.386 |
Octal dump utility |
PAUSE.386 |
Wait for keypress |
PRINTENV.386 |
Print environment and system data |
PRNG.386 |
PRNG test and demo utility (BDOS 253/254) |
PROFILE.SUB |
SUBMIT script (automatically executed at boot) |
RC.386 |
Return code test and query (BDOS 108) |
README.TXT |
Sample text file |
REBOOT.386 |
Reboot utility (BDOS 220) |
RM.386 |
UNIX rmโlike interactive file deletion utility |
SEROFF.386 |
Disable serial console (BDOS 223) |
SERON.386 |
Enable serial console (BDOS 223) |
STAT.386 |
STAT (A port of Zilog CP/MโZ8000 STAT v1.0C 01/03/84) |
SYNC.386 |
Synchronize disks (BDOS 48) |
TEST211.386 |
Numeric format test (BDOS 211) |
TEXTMODE.386 |
Query and set the console text mode (BDOS 229/230/231) |
TICKS.386 |
Highโresolution timer tests (BDOS 225/226) |
TOD.386 |
Get (and set) Time of Day clock (BDOS 104/105) |
TOUCH.386 |
Create an empty file |
TRUNCATE.386 |
File truncation utility (LRBC aware) |
TRUNCTST.386 |
Truncation tests (BDOS 99) |
TSEC.386 |
Get date and time (BDOS 155) |
VER.386 |
Display OS version (BDOS 163) |
VGAFONT.386 |
Load a text console font or restore the ROM font (BDOS 232) |
VGAOFF.386 |
Disable VGA text console (BDOS 222) |
VGAON.386 |
Enable VGA text console (BDOS 222) |
VGATEXT.386 |
VGA text direct access demo (BDOS 224) |
- Do not open pull requests with large amounts of LLMโgenerated code.
These will be immediately rejected. - There is currently no AIโgenerated code in the operating system at this
time (though there are some AI tests, comments, and analysis), as the
project is intended to be as much of a learning experience for me as it is
a useful OS port. - Usage of AI (artificial intelligence) tools by contributors is currently
permitted, subject to the same terms and conditions as the
LLVM AI Tool Use Policy, but
this permission may be withdrawn at any time and without notice.
See FUTURE.md.
| Language | Files | Lines | Blank | Comment | Code | Complexity | Bytes | 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 |
| Total | 100 | 37862 | 7330 | 6094 | 24438 | 4701 | 954916 | 14146 |
- CP/Mโ386 is distributed under the terms of the permissive
MITย License. - Bryan W. Sparks of DRDOS,ย Inc. dba DeviceLogicsย LLC, successor
in interest to Digitalย Research,ย Inc.โs CP/M assets, explicitly
grants an unlimited authorization to use, distribute, modify, enhance, and
otherwise make available CP/M technology, including the CP/M operating
systems and their derivatives.
๐ฌ **Whatโs your take?**
Share your thoughts in the comments below!
#๏ธโฃ **#johnsonjhcpm386 #CPM386 #CPM #protected #mode #derived #CPM68K #GitHub**
๐ **Posted on**: 1785721921
๐ **Want more?** Click here for more info! ๐
