In my recent posts I've talked about implementing BDOS and BIOS syscalls for my cp/m emulator. I've now implemented enough of the calls that I can run many of the standard binaries:
- The Aztech C Compiler
- Microsoft BASIC
- Turbo Pascal
- Wordstar
- etc
Of course I've not implemented all the syscalls, so the emulation isn't 100% perfect and many binaries won't run. But I sent myself on a detour by implementing extra syscalls, custom syscalls.
Traditionally CP/M systems are "rebooted" by pressing Ctrl-C at the CCP prompt. I thought that was something I'd press by accident so I implemented the restart behaviour only when the user pressed Ctrl-C twice in a row. But then I added a custom syscall that lets you change hte value:
A>ctrlc
The Ctrl-C count is currently set to 2
A>ctrlc 1
The Ctrl-C count is currently set to 1
A>
So you can now change the value at runtime. Similarly there is support for switching CCP at runtime, and even changing the default output-device from ADM-3A to ANSI, or vice-versa. It's kinda neat to make these kind of extensions, and happily the traditional BIOS has two syscalls reserved for custom use so I just used one of those.
I've added support for testing whether a binary is running under my emulator, or not, using a custom syscall. So I can run:
A>test
This binary is running under cpmulator:
cpmulator unreleased
https://github.com/skx/cpmulator/
On another emulator I see this:
A>test
Illegal BIOS call 31
No, this binary is not running under cpmulator.
Anyway I'm happy with the current state of things, and I fixed a couple of bugs which means I now have support for SUBMIT.COM
which is a real time-saver.