The making of CCGMS Emergency

Here what was involved in the creation for CCGMS Emergency term:

  1. First I needed to make the term itself. I wanted a basic no-frills term that supported both userport & swiftlink type modems. It needed to support Xmodem downloading (since it’s pretty much supported on all BBS’s). I would have liked to have punter, however punter seems to very timing sensitive and simply doesn’t work as well on telnet BBS’s as it did on a real dialup BBS. Also, it’s only supported on C64/128 hosted BBS software and not all of them. I also wanted to keep the capture buffer as it could come in handy in a pinch. Any extra features needed to be removed to make the term as small as possible (so users wouldn’t need to type in more than they already would need to).
  2. CCGMS itself is a rather friendly terminal program, has these features and also has available source code to produce a modified terminal. There were 2 sources I found. One for CCGMS Future, and CCGMS 2021 by Alwyz. CCGMS Future is based off the CCGMS 2021 release, and includes additional features are not needed. So I went with the 2021 source code.
  3. I setup a Debian linux 12 system, added CC65 using the included software center (CC65 is a macro assembler, which is what the CCGMS source code is written for), downloaded exomizer from csdb and compiled it (exomizer is a cruncher application, which crunches the compiled program smaller and will decrunch when CCGMS is run on the C64). Also installed WINE to install DirMaster to make managing D64 images easier, and downloaded/compiled Vice v3.8 emulator for easier testing.
  4. It took me a good while going over the source code, in order to remove everything I could including the auto-dialer/phonebook, macro functions, Punter protocol, file uploads, loading/saving of a config file. Had a few times I did something wrong and created bugs. But eventually I managed a smaller, working version of the term. I used Exomizer to crunch the resulting binary program to be smaller. The final source code can be found here.
  5. The next step was coming up with a best method that the user could type in the machine language program into their C64. I highly preferred a way that would include checking to user typo errors. Compute had written MLX for their magazines that could fulfill that role. However, I ran into 2 issues. First, the normal load address for CCGMS Emergency is just under the starting address for BASIC ram. This meant that if you tried to load it into MLX or manually type in the ML code, it would overwrite the MLX program and corrupt it. The second issue was that MLX only had an option to display the ML program to screen. I would need a way to export it.
  6. To fix the memory issue, I used Zip-Code II’s sector editor to change the load address to a higher address. Of course, the program code was written to run at the original location. So after adjusting the load address, I had to add ML code at the end that when run, will copy the CCGMS code from it’s current address over to the correct address and then jump over to run it. I actually found mention of the copy memory kernal routine online, made the adjustments needed and added this extra code to the end of the CCGMS file in the last sector, and adjusted the 2nd byte of the sector (which tells how many bytes in that sector are the remaining bytes of the end of the file.
  7. Finally, I had to take the original MLX program and write it so that instead of printing to the screen, it creates a SEQ text file and sends the output to that. The modified MLX version can be found here.
  8. I used the program “petcat” which is included with Vice to write text listings for both the original MLX and Proofreader and posted them here. I had to run Proofeader and then MLX so I could listed each line, press return on each and get the checksum that I then added to the MLX listing. It was a good challenge to say the least and I certainly hope that it will prove helpful to at least several users out there.
  9. A special thanks to Board Rider of Surf Shop BBS, for being a Beta-tester and having to put up with me when I pushed him at times to help assist with testing. 🙂