When the SAVE command is issued in Family BASIC, $4016.0 is written to as described by the wiki. If you record the $4016.0 writes to a file, the result is just a stream of alternating zero's and one's: 0, 1, 0, 1, 0, 1, etc. However, if you record timestamps along with each write and plot the data against time, you'll find that you are looking at square waves of 2 different frequencies (2100 Hz and 4200 Hz) encoding the binary data.
Since the square waves are generated by running software, it seems necessary for an emulator to record $4016.0 values along with the timestamps, as opposed to simply converting the aforementioned frequencies to a binary stream of data. Such conversion would be sufficient for Family BASIC, but it will not necessarily work for all programs that use the Data Recorder.
That said, I'm not sure what is required to read back the written data. The wiki includes a circuit diagram, but I don't fully understand it. Does the circuit mean that the software must always use those 2 specific frequencies mentioned above? Does that op-amp convert the frequencies back into zero's and one's automatically? And, if so, does that mean that the emulator would not have to store the timestamps as long as it played back the data stream at the expected read rate?
Since the square waves are generated by running software, it seems necessary for an emulator to record $4016.0 values along with the timestamps, as opposed to simply converting the aforementioned frequencies to a binary stream of data. Such conversion would be sufficient for Family BASIC, but it will not necessarily work for all programs that use the Data Recorder.
That said, I'm not sure what is required to read back the written data. The wiki includes a circuit diagram, but I don't fully understand it. Does the circuit mean that the software must always use those 2 specific frequencies mentioned above? Does that op-amp convert the frequencies back into zero's and one's automatically? And, if so, does that mean that the emulator would not have to store the timestamps as long as it played back the data stream at the expected read rate?