Releases: skx/cpmulator
v0.14.0
Significant Improvements
This release finally removes the portability crutch which was previously used when reading console input, and updates our binaries to include a .exe
file for the Microsoft Windows platform.
A working CP/M implementation needs to provide facilities for reading input from the console, both reading a complete line of text and individual keystrokes. These input functions need to handle several different types of input:
- Blocking, waiting for input to become available.
- Non-blocking, returning any pending input if it is available otherwise nothing.
- With echo, so the user can see what they typed.
- Without echo, so the keys are returned by not displayed ot the user.
In the past we used a Unix-specific approach to handle the enabling and disabling of keyboard echoing (specifically we executed the stty
binary to enable/disable echos), but this release now has a more portable, solution based around termbox-go, which is the new default, and should also allow our emulator to work on Microsoft Windows systems.
We always had the ability to select between a number of different output drivers, and as of this release we can now select between multiple input drivers too - with the new portable option being the default. This has been tested on MacOS X systems, as well as GNU/Linux, but sadly I don't have access to Windows to test that.
Internal Changes
Internally several parts of the code relating to output have been renamed, changing things like "ConsoleDriver" to "ConsoleOutput" now that we have different versions of "ConsoleInput" present it makes sense to be consistent. Similarly the configuration function WithConsoleDriver became "WithOutputDriver" to match the newly added "WithInputDriver" fuinction.
Test coverage has been improved compared to the previous release too.
Visible Changes
- The CLI-flag "-list-console-drivers" is now "-list-input-drivers".
- This matches the newly-added "-list-output-drivers" flag.
- The CLI-flag "-console" still works, but will be removed in the future.
- Prefer to use "-output", to match the new "-input" flag.
- The scrollback is gone, as updates are made "in-place".
v0.13.0
This release is probably the last one for a while, I now regard this project as "complete":
- It implements all of the core functions that are expected.
- It runs the programs I want to run.
Of course if there are bug-reports, reporting bogus results, or an inability to run CP/M binaries (excluding the case of disk sector/head/track functionality) then of course I will attempt to resolve them. Please file an issue if you're in that situation.
Changes compared to the previous release largely revolve around improved test-coverage, and minor bug-fixes. We've now introduced integration tests, in addition to the core package-tests. However there are a couple of new, and visible changes:
- We default to using CCPZ, rather than the original DR-issued CCP.
- This means you now have
LIST
,PEEK
,POKE
, and#
as built-in functions.
- This means you now have
- The
-quiet
flag has been removed, along with the embedded binaryA:!QUIET.COM
.
Finally if you build from source you can add ZORK1.DAT
and ZORK1.COM
to static/A/
before you build the code - then once you've done so you'll have a self-contained CP/M emulator with embedded & always-available ZORK! (You can repeat with other binaries too of course.)
Changes merged via PRs
What's Changed
- Cleanup our code a little by @skx in #141
- Ensure we have a filename for open/make-file. by @skx in #145
- Added PEEK and POKE built-in commands to CCPZ by @skx in #147
- Work towards I/O support for virtual files by @skx in #148
- Update to use CCPZ by default, now with comment-support by @skx in #150
- Added significantly more tests; coverage is nearing 50% by @skx in #151
- Added more tests - fixed issue with using CPU.Memory by @skx in #152
- Increased test-coverage once-again by @skx in #153
- 154 integration tests by @skx in #155
Full Changelog: v0.12.0...v0.13.0
v0.12.0
This release features a couple of internal changes which increase our accuracy and allow the original (unmodified) binary release of BBC BASIC to work correctly.
In the past we embedded some binaries which were always present on A:, these include those utilities which change our runtime behaviour - these utilities are still present but now have a !
prefix to avoid name collisions with other binaries you might have:
!CCP
- Change the CCP at runtime.!CONSOLE
- Change the console-driver at runtime.!CTRLC
- Change the number of Ctrl-C characters that trigger a reboot.!DEBUG
- Enable/Disable the "quick debugging" log.!QUIET
- Enable/Disable the quiet-mode.
With regard to loggin we now avoid logging the console I/O functions by default, as these tend to be incredibly noisy. They can be logged via the -log-all
command-line flag.
Merged Pull Requests
Here are pull-requests which were merged as part of this release:
- Don't log console I/O functions, by default by @skx in #131
- Allow BBC BASIC to run by @skx in #132
- Bbc fix2 by @skx in #133
- Updated the quiet-flag to be more logical by @skx in #137
- Added a simple run-time debug option by @skx in #138
- Rename our embedded resources to have a unique !-prefix by @skx in #139
Full Changelog: v0.11.0...v0.12.0
v0.11.0
This release features a number of "correctness" updates:
- We now successfully determine whether pending keyboard input is available on STDIN, via calls to Select.
- This specifically resolves problems with BBCBASIC.COM
- We now correctly track state in file operations.
- This resolves some issues where we'd see failures of the form "Attempt to read from file that isn't open".
- We allow every drive-letter to be mapped to a specific path, via
-drive-X
. - We only trigger reloads of CCP, or CP/M, when Ctrl-C is pressed at the start of the line.
- When line-input is requested we immediately return when the specified max-size of input is reached, rather than forcing the use of an explicit newline.
Beyond those fixes we've implemented BDOS function 36 F_RANDREC, and added support for text-history, usable via Ctrl-P and Ctrl-N at the CCP prompt.
What's Changed
Here's a list of merged pull-requests:
- Introduce a little support for console history. by @skx in #115
- Allow polling for input, correctly by @skx in #118
- Allow determining the size of our console. by @skx in #119
- Implemented F_ERRMODE, as a NOP. by @skx in #120
- Drive path by @skx in #121
- Rename functions by @skx in #122
- Added test-coverage for the console output functions by @skx in #123
- Use x/sys/unix rather than syscall. by @skx in #124
- 125 readline by @skx in #126
- 127 fcb state by @skx in #128
Full Changelog: v0.10.0...v0.11.0
v0.10.0
This release features a couple of quality of life improvements:
- There is a new "#.COM" binary added, which allows "comments" in SUBMIT files
- For example the
AUTOEXEC.SUB
file we support might read "# QUIET 1" to have a default.
- For example the
- User-numbers are persisted across restarts, as well as the current drive-letter.
- Our glob-handling was updated to handle the embedded utility binaries we include from the static/ directory.
- The DDT.COM binary, which is a simple debugger, now works more than it did in the past.
What's Changed
This is a list of pull-requests merged:
- Added "#.com", which allows us to have comments by @skx in #107
- Persist the usernumber across restarts by @skx in #109
- 110 glob by @skx in #111
- Allow DDT.COM to run by @skx in #113
Full Changelog: v0.9.0...v0.10.0
v0.9.0
This release improves the way that we handle the cpmulater-specific binaries. There are some binaries I've produced which use the available custom BIOS functionss, and these are now bundled directly within our release.
That means you will always see A:CTRLC.COM
, A:QUIET.COM
, and the other custom-binaries - the source of which is available within static/.
We've also added support for running scripts at startup:
- If
A:SUBMIT.COM
exists andA:AUTOEXEC.SUB
then the latter will be executed automatically.
What's Changed
This is a list of pull-requests merged:
- Simplify our embedding of the CCPs by @skx in #93
- Drop zork binaries and cleanup references to them by @skx in #94
- Added CLI flag for controlling quiet-behaviour by @skx in #97
- Allow running AUTOEXEC.SUB on-startup by @skx in #98
- Ensure we're running under cpmulator before invoking functions by @skx in #100
- Always use drive-remapping (internally) by @skx in #103
- Implement a naive virtual filesystem by @skx in #105
Full Changelog: v0.8.0...v0.9.0
v0.8.0
This release improves the user-experience by making several things changeable at run-time, rather than requiring them to be set exclusively via command-line flags.
We've implemented some custom BIOS functions which can be used to change settings, then added some new binaries to make use of them:
- CCP.COM
- Switch between CCP versions at runtime.
- CONSOLE.COM
- Change the output driver, switching between ANSI & ADM-3A
- CTRLC.COM
- Traditionally CP/M will reload if you press Ctrl-C during the CCP. I decided that pressing this key might happen accidentally, so I only reboot if you pressed it twice in a row.
- This tool lets you change to the default behaviour, or disable Ctrl-C handling.
- QUIET.COM
- Allows you to disable the banner printed on startup, and when CCP is reloaded.
- TEST.COM
- A simple binary that detects whether it is running under cpmulator, and reports the result along with the version number if it is.
These binaries were each added to the A: of the cpm-dist repository, as well as being added to this repository.
Secondly some issues were fixed with regard to the SUBMIT.COM handling:
- It now works for >2 commands being submitted.
- It also works on both CCP versions.
Finally the C_READSTRING BDOS function was improved to ensure it pays attention to the input-length restriction, and works correctly when given a NULL pointer as the input-area (which means it should use the TPA).
What's Changed
This is a list of pull-requests merged:
- Make the writing of characters to the console pluggable. by @skx in #86
- Allow runtime switching of CCP by @skx in #88
- Fixed submit to work for > 2 commands by @skx in #90
- Allow SUBMIT.COM to work with CCP, not just CCPZ by @skx in #92
Full Changelog: v0.7.0...v0.8.0
v0.7.0
This release improves our CCP support, and adds a couple more syscalls:
- There are now two embedded CCP implementations available
- "ccp" - the default, from Digital Research
- "ccpz" - An alternative, and enhanced replacement.
- This has support for working SUBMIT.COM.
- I've added support for more syscalls.
- Console, Aux, and Printer status. Nothing too likely to be useful.
- The console input layer has been improved.
- We still use
stty
for setting the console into the appropriate echo/no-echo state, but now we don't do that excessively. - The console "read line" implementation now reboots CP/M, as it should, when you press Ctrl-C twice in a row. (Once is traditional, but seems too likely to happen by accident.)
- We still use
- A new
-version
flag has been added.- Run
cpmulator -help
to see all available CLI flags.
- Run
What's Changed
This is a list of pull-requests merged:
- Added "LIST" to BIOS functions. by @skx in #74
- Allow multiple CCPs by @skx in #77
- Implement more syscalls by @skx in #79
- Tty by @skx in #80
- Allow Ctrl-C to reboot, at the CCP by @skx in #83
- Allow SUBMIT to work by @skx in #81
Full Changelog
You can see a complete list of changes between this and the previous release here:
v0.6.0
This release features a temporary regression, releases for Microsoft Windows will not work. This is because of the way that I changed the console input handling - and now we cheat by invoking stty
to disable echoing of characters.
That said for the Mac, Linux, and Unix users this is a significant release, as we've improved our functionality a lot - cpmulator
can now run many more applications which it couldn't in the past, including:
- Borland's Turbo Pascal.
- Wordstar.
The CCP no longer exits when child processes attempt a warm/cold boot either, making the interactive experience much nicer.
Finally the CLI executable has received a number of new command-line flags, which you can see via cpmulator -help
.
What's Changed
- Improvements to drive-handling in FCBs by @skx in #56
- Resolve issues with STAT.COM by @skx in #57
- Improve logging .. by @skx in #58
- Add an input test binary by @skx in #59
- Updated dependencies by @skx in #61
- Allow turbo-pascal-compiled binaries to run by @skx in #62
- Added CLI flag to dump syscalls by @skx in #63
- Added command-line arguments for printer/logfile-paths. by @skx in #66
- Resolved confusion about BDOS vs BIOS by @skx in #69
- Implement F_SIZE by @skx in #70
- Cap the drive at P, naturally. by @skx in #71
- Trap warm/cold-boots. by @skx in #73
Full Changelog: v0.5.0...v0.6.0
v0.5.0
What's Changed
- This release is now capable of running the Microsoft BASIC interpreter.
- Support was added in #51.
- Our console input was unified into a new sub-package, and gained better support for polling for pending input.
- The documentation was updated to include a complete list of all the environmental variables that may be used to influence behaviour.
- Finally the companion repository was updated to include three BASIC interpreters
Full Changelog: v0.4.0...v0.5.0