This little board has everything you need to save data from a retrocomputer, a PC, a microcontroller or just about anything else you can think off. On the other side of things it'll save data to pretty much any media that can record and play audio.
This relatively tiny board of less than 50x15mm gives you an easy way to put any old audio device to good use, especially for era appropriate retrocomputer data storage or just for the fun of putting data somewhere new and interesting.
Finally you have a good excuse to save that old cassette player and put it to good use instead!
And even better: If you have some old tapes lying around with invaluable data from the 70's or 80's, the Simple Universal Modem, will make it super easy to read the data with a modern MCU, Arduino, Raspberry Pi, since it has an encoding agnostic demodulation interface.
To demonstrate how it can be used with old hardware - on both sides - I have successfully saved and played back 1200bps data, in Kansas City Standard format, using my #ABN6502 SBC R1 microcomputer.
On the technical side of things this board has a simple 5 stage RC filter along with an Emitter Follower buffer transistor used for filtering and modulating a square wave into a sine-like signal, that will record and playback better on tape and other old mediums than a harsh square wave that contains harmonics and other sources of analog trouble.
The demodulator consists of a LM393 comparator set up as a zero crossing detector, outputting a nice clean square wave for digital circuits to decode.
Since there's a significant lack of standardization for TRRS pinouts, the modem simply takes advantage of that and leaves the pins jumper selectable according to the silkscreen text on the back of the PCB.
That way you can select whether the cable on the other end is a TRRS cable with all four lines, for instance to connect to an Android phone, or an iPhone(Mic is S for iOS, Android the second R), or a minijack -> phono/rca cable.
Caveats include that you still have to generate a square wave and not just a serial signal, but the positive side to that is that you are less locked in to a certain baud rate(considering the tx RC filter can also be changed with new values), adding to the universality of the board.
For my #ABN6502 SBC R1 I simply generate a square wave using Timer 1 and PB7 for TX and count the interval between falling edges using Timer 1 and CA1 interrupts for RX. The source is open for that project too, so check it out.
If you just need a cheap way to get data to an MCU or retrocomputer, you can use minimodem (available on many linux package managers and homebrew for macOS) to convert a binary to a format of choice for your project.
For Arduino, etc, using a timer and interrupts should work perfectly fine too - I haven't had the time to try that out though.