Forth Progress: ARRAY and CRC32
I've been a bit distracted lately with my astronomy studies, but I have still been working with Mecrisp Stellaris Forth here and there. I asked in the #mecrisp IRC channel if anybody had a software implementation of the CRC32 checksum algorithm available for Mecrisp Stellaris. They told me no, but that it would be a great idea for me to make one and contribute it. So, I did.
The main appeal of CRC32 is that it is very simple to implement, especially if you store the polynomial lookup table in memory. Here are links to my code:
https://codeberg.org/infrared/mf-rp2040/src/commit/82ff68e023d84e563fa33c4b54ec329595fd492e/ARRAY.FS
https://codeberg.org/infrared/mf-rp2040/src/commit/82ff68e023d84e563fa33c4b54ec329595fd492e/CRC32.FS
ARRAY.FS is just a few helper words to make storing arrays of data look nicer. CRC32.FS is just the polynomial lookup table (256 32-bit values) and these two words:
The first word is a helper word. CRC32 is the loop which takes a byte count and a starting memory address, and then outputs the checksum for the data in that memory area.
As a word of caution, the code just uses C@ to fetch each byte, so I'm not sure if that works for all use cases. More specifically, I don't know if all Stellaris targets support reading firmware with C@.