This project is still very early in development. The goal is to write a parser and a code generator for the PL/M programming language.
I would like to make it compatible with both CP/M 2.2 and CCP/M-86 3.1 because they lack a good enough PL/M compiler.
For now I use the PLMX compiler but perhaps will continue with Intel PL/M-80. It had some weird problems with jumping to the right location at the beginning of the execution. So I think when it will be solved I will continue with Intel PL/M-80.
There documentation generated from the source code will be stored here: https://naens.github.io/plm/.
It’s still a work in progress, so for the moment it will be rather empty.
There are several goal for this project:
- To have an open source and maintained compiler for the PL/M progamming language that works on CP/M 2.2, CCP/M-86 3.1, DOS, and Linux.
- Another goal is to adapt and be able to compile CCP/M-86 using only itself as the operating system. And then, perhaps to port it to 386, 486, and perhaps other architectures.
As for the language, I’d like to make it compatible with PL/M-86 as much as possible and totally compatible with PL/M-80. I will also try to replicate its code generation. But at first it will be without any optimization. Then when it will be more mature, I will add some which were used in the original compilers.
As for the targets, I will make it compile to different targets. It’s important to be able to generate compilers to targets based on the compilation options.
Of course the priority targets for me will be Z80 and 8086 assembly languages. I’m not sure it’s worth compiling directly to machine code, so for now for simplicity these will be the targets.
If it will support multiple targets, it wouldn’t be difficult to add other targets, for example LLVM ir, so now it would suddenly run on Linux! I would be great, wouldn’t it?
I am developing the project on DOSBox-X. I tried developing under CP/M using Intel PL/M-80 and another compiler called PLMX, but both had a very serious limitation that the length of the identifiers was limited to 5 or 6 character. Fortunately PL/M-86 allows identifiers of length 31. The assembler I will probably use to create binaries from assembly code, ZSM4 accepts identifiers of 12 character, which will be for now the limit. At least it’s much better than 6.
The editor I use is the CP/M-80 ED.COM
editor. I use it with the emulator
called Z80MU. Unfortunately I don’t have a version of ED that works under
DOS.
The build program I use is wmake
, which is distributed with OpenWatcom.
There is a makefile
in the project directory that has all the necessary
rules to build the program
Executing wmake
builds the whole project. You can also specify the
individual targets, for example wmake cons.obj
will only build the cons
module.
If you want to help the project, you can do it on Patreon: https://www.patreon.com/simpleprogrammingcodes.