Holger Veit wrote:
...
The interrupt and DMA handling was also lousy thanks
to DR abusing some
8080 and even worse Z80 RST vector locations for the BDOS and CCP
buffers and FCBs. ...
That is one thing I always wondered about. CP/M has "CALL 0005H" as the
BIOS entry point. Why didn't they map it to 0008H instead? Considering
that code space was at a premium, saving two bytes off of every BIOS
call would have been an obvious optimization, I would have thought.
On the other hand, I never wrote any 8080 code that used RST, so maybe
there is some gotcha that I don't know about.
Anyone have opinions why it was done with CALL 0005H instead?
The only thing I can come up with is that DR might have entertained,
early on, making CP/M relocatable to different addresses (eg, some
vendor wants an OS that lives in high memory). In the process of
patching all the code for the high addresses, substituting "CALL 0FF05H"
instead of "CALL 0005H" is trivial, but substituting "CALL 0FF05H" for
"RST 1" would be a problem. Yes, one could require such systems to have
a "ORG 0005H / JMP 0FF05H" vector. I'm grasping at straws here.