• Please review our updated Terms and Rules here

What makes a CP/M program a CP/M program (and not just, say, a z80 program)?

But thats kind of the point I'm trying to make.

If someone has written a piece of software that is so specific to one model of hardware, it just needs to be specified as such and everyone deals with that. It doesn't matter how big or small the pool of computers that can run it is, IMO.

I could write a game for Windows that wants a specific model and revision of nvidia GPU, and it would still be a Windows application if I didnt have that exact hardware configuration.

So then wouldn't the requirements just be like this?
Requirements:
ONLY WORKS WITH TANDY9000 COMPUTERS PURCHASED BETWEEN FEB 1984 and MARCH 1986 WITH 256K OF MEMORY AND NEWTRONICS FLOPPY DRIVE OPTION.

You don't need the DOS bit, you don't need CGA or any other details because if you have that machine, it's exactly like you expect it to be... hence the debate around when a CP/M program is just a program for a specific machine that happens to be able to run CP/M.
 
Thats not what I'm saying at all. But hey, if your software is so machine specific that you could boil it down to that, then probably?

A DOS COM
A ELF binary compiled for Linux
A Windows PE executable
A "CP/M program"

All of these things remain what they were intended to be, for their intended OSes, regardless of whether the machine they run on has the required features to run them.

I feel that I've stated my opinion, and provided a couple of examples to try and demonstrate my point, and I don't really know how else I can explain it without going around in circles, so I'll butt out now.
 
Thats not what I'm saying at all. But hey, if your software is so machine specific that you could boil it down to that, then probably?

A DOS COM
A ELF binary compiled for Linux
A Windows PE executable
A "CP/M program"

All of these things remain what they were intended to be, for their intended OSes, regardless of whether the machine they run on has the required features to run them.

I feel that I've stated my opinion, and provided a couple of examples to try and demonstrate my point, and I don't really know how else I can explain it without going around in circles, so I'll butt out now.

No need to butt out :) I get what you're saying. Your input was appreciated -
 
No need to butt out :) I get what you're saying. Your input was appreciated -
I just don't really know what else I've got to add, I suppose I have my opinion on what I think it should be, and I've put that across. Plus I've gotta get back to work. 🙂
 
Tom, this is exactly how the professional programs for the CP/M systems were developed.
Microsoft BASIC at startup detects the CP/M version, detects the CP/M version and keeps track of it.
If it is CP/M 1.4 then the random file access will happen at a lower level, setting the File Control Block manually, otherwise the CP/M 2.2 specific functions will apply.
Then it uses an aggressive input detection to deal with the different CP/M implementations, getting rid of eventual the keyboard buffered input.
The more common versions were written for the 8080 to be as much compatible as possible, but Z80 and 8085 versions existed too.
Then, it comes the console I/O oddities, the Apple II versions trapping the BDOS errors and the RESET key event, a couple of target specific commands for the Otrona Attachè, etc, etc..
Still the CP/M 3 wasn't addressed, probably it just worked, I don't remember.

As said, the Z80 compatibility required some little adjustment, I didn't know about it but I know that at a certain point a bug crept in the later versions because of an accidental removal of the octal suffix changing the syntax check from expecting a comma to '3'.. which is loosely related only but shows how even the development tools (and the developers mindset) were evolving.

So, you may be a clever developer, but.. wow it gets a long way

I recently fixed Sargon Chess (Z80 specific code, not easy to backport to Intel CPUs) to run it on CP/M 1.4, the old OS version wasn't producing an error code when removing a file, I had to skip the error detection.
 
Last edited:
Back
Top