Back to the main page
The first image ever pushed back into the Tutor.
Shameless pinup generated with tobitenc. (Chroma noise removed from the Mac monitor.)
Plus, if you're trying to preserve your old masterpieces for posterity, now you can convert them to easily compressible bitstreams and back them up for later instead of leaving them vulnerable on cassette tape. You can even share them with other Tomy Tutor owners who can reconstruct the tape data from the bitstream and enjoy your old creations, either on their real machines or on the Tutti II tape-enabled Tomy Tutor emulator.
XTOMYDEV works by deciphering the tape output line from the Tutor into a bitstream that its suite of tools can analyze. It can also take the bitstream output from one of its tools and generate the audio data to save to tape. With XTOMYDEV, your Tutor and a Data Recorder, you can now move data to and from your Tutor and your desktop without any additional special hardware.
Before we begin, however, how does the Tomy Tutor tape format work anyway? Let's take a look.
Ultimately, the Tutor is just emitting bits encoded as pulses. If we connect the Tutor's cassette output line directly to the Power Mac's audio input and record it, we get a bit pattern like this:
The doubled pulses indicate a one; the single longer pulse is a zero. Like the Datasette, the Tutor emits a sync mark before everything else, which for the Tutor is just a long string of ones followed by a single zero. The filename follows, and then (BASIC) either another sync mark and then the program or (GRAPHIC) the screen data. No further encoding is done and there is no parity bit. A final sync mark terminates the transmission.
As it turns out, the Data Recorder is not a standard tape recorder and actually alters the signal substantially. The first change it makes is to the waveform:
Notice that our nice, regular square waves now have a "bent" falling edge, but only the second pulse of the twin "one" pulses, and also a "bent" rising edge for the single "zero" pulse. If we take this and run it repeatedly through the Data Recorder, we can actually "bend" the edges so far that the bits will become difficult to distinguish and the Tutor will refuse to read it.
Furthermore, the Data Recorder also sends a non-standard signal back to the Tomy Tutor. Not only will a regular tape recorder (or your computer) simply faithfully record the pulse waveform and play it back, which the Tutor won't read, but also if we take that regular tape recorder (or your computer) and use it to play a Data Recorder tape (or an audio file of the tape), the Tutor will still not recognize it. The signal the Data Recorder sends to the Tomy is not a regular audio signal.
So that gives us an idea. We know what the Data Recorder does to the waveform, at least. If we can encode bits ourselves using those same "bent" edges and then record that "bent" audio file to tape using the Data Recorder, we can play that tape back to the Tomy Tutor using the Recorder and the Tutor will accept the data. And that's what XTOMYDEV does.
XTOMYDEV is designed to be modular -- you pipe commands together to convert between formats. The primary tools are totapdec, which takes a 44.1 kHz 16-bit mono uncompressed AIFF audio file and emits a bitstream, and totapenc, which takes a bitstream and emits a 44.1 kHz 16-bit mono PCM .au audio file. The reason for the different formats is so you don't accidentally substitute one for the other: totapdec takes output from the computer, while totapenc makes input for the Data Recorder. totapdec only understands the direct output from the computer. It does not currently understand previously recorded cassettes.
The current version is more concerned about ease of understanding than efficiency. We might change that later, but until the Tutor is completely understood this makes the programs easier to work with.
The current release is 0.2 (13 April 2016). This version adds GBASIC decoding (togbadec) and implements Floyd-Steinberg dithering for tobitenc.
Let's perform a simple test to get your setup working and demonstrate the process. In this example, we will write a simple BASIC program, save it to and decode it on the desktop computer, reencode it, and send it back to the Tutor. If all these steps work, you're set for XTOMYDEV.
The below command lines assume that XTOMYDEV is in your path. If it isn't, you can also cd into that directory and ./name_of_tool instead of name_of_tool (for Cygwin, you may need to say something like perl ./name_of_tool if the execute bits don't work properly).
10 PRINT"HELLO WORLD"
The exact line level you should record at will depend on your hardware and sound chipset. On my quad G5, I had audio input all the way up to max in System Preferences; we don't need to worry about clipping at the top end since it's a pulse waveform, so I'd start there if you don't know.
totapdec the_audio_file.aiff > output.txt
A rare spurious warning is fine, but multiple errors indicate totapdec cannot properly decode the audio stream. Try recording it again. Make sure you save it in the correct format.
tobasdec > output.txt
You should see the filename HELLO and the lines of the BASIC program. (You can do the tape decoding and the BASIC decoding in one step in future: totapdec the_audio_file.aiff | tobasdec)
totapenc output.txt > the_new_audio_file.au
Again, the exact volume level you should play back at will depend on your hardware and chipset, but on my G5 I simply maxed it out again because, as I mentioned above, clipping isn't generally a problem for this type of waveform.
If this worked, you've just validated XTOMYDEV on your system. Congratulations.
If it didn't, but all the other steps did, try the last step again, re-recording at a different volume level.
For specific documentation on an XTOMYDEV utility, select from these pages:
For old releases of XTOMYDEV or Tutti II, check the archive. 0.1 documentation here.