The CCGMS Terminal Program for the Commodore 64 is maintained again, and there is a new version: CCGMS Future 0.1, with bug fixes and new features.
CCGMS has a rich history: It was originally written in 1985-1988 by Craig Smith, then binary patched by many people over the years, and finally maintained again by alwyz from 2016 to 2020, based on the rediscovered source code.
As a first step, I cleaned up the source of the last version (v2021), splitting it into multiple files, renaming symbols and adding comments. The resulting source uses cc65/ca65 to build and will generate a byte-for-byte identical v2021 PRG file – you can find this version in a branch.
Then I started implementing fixes. In v2021, the standard user port driver was broken for PAL systems because of a bug in the lookup of the timings. Similarly, the UP9600 driver had a timing issue on PAL, but it was minor; but the fix may improve data transfer stability.
Finally, I added features to the XMODEM transfer protocol:
- The XMODEM-1K protocol has been added. This increases the block size to 1 KB (instead of 128 bytes) and will significantly increase throughput. Both regular checksum and CRC are supported with XMODEM-1K, and since the protocol specifies that the sender decides on the block size, CCGMS will accept 128 bytes and 1 KB blocks on receive, no matter the setting.
- The XMODEM protocol specifies that the receiver decides whether a simple checksum or CRC16 should be used. The original code would only accept its own settings on uploads. For example, if CCGMS was set to regular “XMODEM” (i.e. no CRC16) and the sender used the XMODEM-CRC protocol, the transfer would fail. This has been changed to always accept the sender’s choice.
Because of the added flexibility, the upload and download prompts are now a little clearer about the current settings:
- XMODEM/XMODEM-CRC Upload: forces 128 B blocks, will accept checksum or CRC (more compatible)
- XMODEM-1K Upload: forces 1 KB blocks, will accept checksum or CRC (faster)
- XMODEM Download: forces checksum, will accept 128 B or 1 KB blocks (more compatible)
- XMODEM-CRC/XMODEM-1K Download: forces CRC16, will accept 128 B or 1 KB blocks (more reliable)
The .PRG files for this release are available on GitHub.
I set up a GitHub repository for the project, which is licensed under the terms of the 3-clause BSD license.
While I am working on further features, I am also more than happy to accept pull requests for features, bug fixes as well as clean up work!