Provided by: xtrs_4.9d-2build1_amd64 bug

Name

       cassette - data cassette image manipulator for xtrs TRS-80 emulator

Synopsis

       cassette

Description

       To  control the emulated cassette used by xtrs, a file called .cassette.ctl in the current
       directory keeps track of what file is currently “loaded” as  the  cassette  tape  and  the
       current position within that file.  The cassette shell script provides a way to manipulate
       this file; typing “help” at its prompt shows its commands.  You may  use  this  script  to
       load  and position cassette tape files.  The operation works very much like an actual tape
       recorder.

       This manual page also describes the image formats that the  emulator  supports  and  their
       limitations.

   Commands
       pos    generates  a status message including the filename being used as the cassette image
              and the current position within the image, in bytes.

       load [filename]
              changes the cassette image currently being used to the file specified,  and  resets
              the position counter to zero.

       type [format]
              tells  the  emulator what type of image is loaded.  Usually format is detected from
              the file extension, but you can override the detected value with this command.  The
              supported types are listed in Format Types, below.

       rew [position]
              changes  the  position counter to the position specified.  If no position is given,
              the counter is reset to zero.

       ff [position]
              changes the position counter to the position specified.  If no position  is  given,
              the counter is set to the end of the file.

       quit   exits cassette.

   Format Types
       xtrs  supports  several  different  types  of  cassette  images,  each of which represents
       cassette data in a different format.

       cas    format is fairly compact and is compatible with other TRS-80  emulators  that  have
              cassette support.  This format represents the bit stream that (the emulator thinks)
              the TRS-80 cassette routines were trying to  save  to  the  tape,  not  the  actual
              electrical signals on the tape.

              On writing, the emulator monitors the values that the TRS-80 software is sending to
              the cassette port and their timing, auto-recognizes whether a 250-bps, 500-bps,  or
              1500-bps  format  is  being  written,  decodes the signals into a string of 0 and 1
              bits, packs the bits into bytes, and writes them to the cas file.  On reading,  the
              emulator  auto-detects  whether software is trying to read at 250, 500, or 1500 bps
              and encodes the “0”s and “1”s back into the signals that  the  TRS-80  software  is
              expecting.   This  somewhat roundabout method should work with most TRS-80 cassette
              routines that read and write signals compatible with the ROM cassette routines, but
              it may fail with custom routines that are too different.

              Note  that  generally nothing useful will happen if you try to write a cas image at
              one speed and read it at another.  There are differences in the actual bit  streams
              that  standard  TRS-80  software records at each of the three different speeds, not
              just differences in encoding the electrical signals on the tape.  Thus an  incoming
              bit  stream  that  was originally recorded at one speed will not be understood when
              read back in at a different speed.   For  example,  Level  II  BASIC  programs  are
              tokenized,  while Level I BASIC programs are not, and the two BASIC implementations
              record different binary information at the start of the program and between  lines.
              Also,  when  a  file is saved at 1500 bps, standard TRS-80 software puts an extra 0
              bit after every 8 data bits, and these extra bits are  packed  into  the  cas  file
              along with the data bits.

       cpt    format  (for  “cassette  pulse  train”)  encodes the exact values and timing of the
              signals that the TRS-80 cassette routine sends to the cassette output  port  to  be
              recorded  on the tape.  Timing is to the nearest microsecond.  This format emulates
              a perfect, noise-free cassette, so any cassette routines that even  halfway  worked
              on real hardware should work with it.

       wav    format refers to WAVE, a standard sound file format developed by IBM and Microsoft.
              The wav format is intermediate in emulation accuracy between cas and cpt.  It  does
              represent  actual signals, not decoded bits, but its timing precision is limited by
              the sample rate used.  The default rate for new wav files is  44,100  Hz;  you  can
              change this with the -samplerate command-line option to xtrs.

              You  can  play  wav  files written by xtrs through your sound card and hear roughly
              what a real TRS-80 cassette sounds like.  A real TRS-80 should be able to read  wav
              files written by xtrs if you copy them to a cassette or connect the TRS-80 directly
              to the sound card's output.  This feature has not been tested extensively,  but  it
              does seem to work, at least for short programs.

              xtrs  can  also  read  wav  files.   It  can read back the wav files that it writes
              without error.  Reading wav files sampled from real  cassettes  is  more  difficult
              because  of  the  noise introduced, but in brief testing it does seem to work.  The
              signal processing algorithms used are very crude, and better ones could probably do
              a  better  job of reading old, noisy cassettes, but I don't have any such cassettes
              to test with (and I don't know much about signal processing!).  Help in  this  area
              would be welcome.

              The  wav  file  parsing  code  has  several  limitations.   Samples  must  be 8-bit
              monophonic PCM, and the wav file must contain only one  data  chunk  and  no  extra
              optional  RIFF  chunks  in  the  header.   If you have a wav file whose header xtrs
              rejects, try using a tool like ffmpeg(1) or sox(1) to convert it to a more  vanilla
              format.

       direct format  is similar to wav format, except that the samples go to (or come from) your
              sound card directly, not a WAVE file.  The direct format requires  the  Open  Sound
              System  /dev/dsp  device.   Extending  the code to work with other sound interfaces
              would probably not be hard, but is left as an exercise for the reader.  Please send
              me the changes if you do this.

       debug  format  is the same as cpt format except that the data is written in human-readable
              ASCII.  The cassette output is assumed to be 0  initially.   Each  line  of  output
              gives  a  new  value (0, 1, or 2), and the amount of time (in microseconds) to wait
              before changing the output to this value.

Authors

       xtrs 1.0 was written by David Gingold and Alec Wolman.  The current  version  was  revised
       and much extended by Timothy Mann (see ⟨http://www.tim-mann.org/⟩).

See also

       xtrs(1)