The checksum tool works on FreeWPC ROMs as well as the original Williams factory ROMs. It can verify and update the checksum field located just above the interrupt vector table.
The checksum is a 16-bit value that resides at logical address 0xFFEE (18 bytes from the top of ROM). This value should equal the sum of all the 8-bit byte values in the ROM, modulo 65536. The checksum word is itself included when calculating and verifying it.
csum also uses the word at address 0xFFEC as a fixup word, which can be set to any value to help make the checksum match.
The gcc6809 linker produces S-record files by default. This tool converts S-records to raw binary format.
Each bank of the ROM is linked individually; each produces an S-record file. These files contain nearly everything to generate a binary file, except for the size and the value to place at holes. We use 0xFF for all holes as this is more friendly to EPROMs.
The scheduler reads in a list of schedule files, which by convention end with the extension .sched. Each entry gives a function and a frequency at which it should be called. It generates a C source file that contains a top-level function which then calls all of those functions at the right rate. It does this by keeping a counter of the number of times that the top function was called.
The scheduler supports loop unrolling, where the top function is actually decomposed into a small number of functions. This reduces the number of if-statements needed overall; it does require an extra indirection via function pointer. This can cause code duplication for the sake of speed. The unroller tries to balance all of the functions to be scheduled using performance data in the schedule file.
This is a short Perl script which can transform a TrueType font file (.ttf) into FreeWPC source code. It requires the convert program from the ImageMagick tool suite.