An Exatron Stringy Floppy Primer
I recently added emulation of the Exatron Stringy Floppy to my TRS-80 emulator for Windows. This has created some new interest in the Stringy Floppy, a storage device which was a popular add-on for the TRS-80 back in the early 1980’s.
The Stringy Floppy is one of those items that many people remember, but they remain a little fuzzy on the details. Here is more information about the commands used on the Stringy Floppy.
The Exatron Stringy Floppy stores files on small, continuous loop wafers. Files stored on a wafer are identified not by filename, but by file number. The file numbers are consecutive and range from 1 to 99.
“Continuous loop” means that both ends of the tape are spliced together; there is no beginning or end to a wafer. This means that wafers don’t need to be fast-forwarded or rewound like a cassette tape.
My emulator represents Stringy Floppy wafers with virtual wafer files, which use an extension of ESF. Virtual wafers can be created in a variety of lengths. Exatron sold wafers in lengths ranging from 5 to 50 feet. A longer wafer can store more data, but takes longer to wrap around, increasing file access times.
Enabling the Stringy Floppy
The Stringy Floppy ROM software is mapped to a 1K “hole” in the Model I address space. The ROM (ESF.ROM in the emulator) adds extra Stringy Floppy commands to BASIC, but those extensions need to be enabled before they can be used. The command to enable the Stringy Floppy ROM is easy to remember:
Certifying a wafer with @NEW
Like a floppy disk, a Stringy Floppy wafer needs to be initialized before it can be used. The manual describes this process as “certifying” a wafer. @NEW is the command used to certify a wafer.
Writing and verifying a wafer takes some time, depending on the size of the wafer. For example, a 50-foot wafer could take up to three minutes to certify. After the certification is complete, the number of bytes free on the wafer is displayed.
@NEW can also take a parameter, such as @NEW2. That command will erase file #2 and all files following it on the wafer.
@NEW can also be used to display the free space on a wafer. For example, if files #1 and #2 exist on the wafer, then the command @NEW3 will display the number of free bytes.
Writing a BASIC program with @SAVE
There is also a variation on the @SAVE command that can be used to save machine language programs (all values are in decimal):
@SAVE,start address,length,transfer address
The usual procedure is to load a file from cassette, determine the addresses and length, and then save the memory for the program to a wafer. For example, this command will save the cassette version of Robot Attack to file #1:
Reading a file with @LOAD
Any Stringy Floppy program file can be read into memory using @LOAD. The command takes a parameter for the file number and works for both BASIC and machine language programs. For example, @LOAD1 loads the first file on the wafer. Unlike BASIC programs, machine language programs automatically execute after using @LOAD.
Determining load addresses using @LOAD
If the SHIFT key is held down while loading a machine language program using @LOAD, then the program doesn’t automatically execute. Instead, the load address, length, and transfer address are all displayed on screen. (The ?FD ERROR is normal).
This is a very useful feature because it makes it easy to save a machine language file to another wafer just by plugging the displayed values into a @SAVE command.