For uploading audio content to the NAND flash chips in the first few prototypes, some parallel port programmers were made to connect via the printer port that computers of the past used to have. The first one was build with discrete transistors (for voltage level translation) on a piece of veroboard. Later ones used voltage level translation chips.
As you can imagine, writing hundreds of megabytes of data via a printer port is by no means quick. So, there was a need to design a high-speed USB 2.0 (480 mbps) programmer. This used the Cypress cy7c68013a EZ-USB® FX2LP™ USB microcontroller. The GPIF was programmed with custom waveforms to provide the signalling to interface to the NAND flash chip. Firmware was written in C to handle NAND flash addressing, reading, writing, erasing, etc.
The first programmer involved a bit of mechanical design as well. It had spring probes for making contact with the S100 PCB and needed a clamp to hold the S100 PCB against the spring probes:
We decided in a later version of the S100 to use an edge connector instead, so the programmer was modified appropriately:
The PC software
On the PC side, software was written in C for uploading Bible narrations to the NAND flash chip on the S100 PCB via the NAND flash programmer. This software has been refined over time to improve upload speed and verify the integrity of the uploaded data.