\section{Introduction}
\subsection{Motivation}
Software for the Honeywell Series 16 minicomputers is very rare today,
most of the software ever written for them seems to be lost. But some 
of it still exists --- spread over the world in dusty boxes on attics or in 
cellars, on software preservation websites and on collectors' harddisks.\\
The software is stored on punched paper tapes or in disk files containing images
of paper tapes.\\
Often enough the tape labels (resp. file names) are way too vague to exactly 
identify and understand the contents of a tape.\\
Back in the
times when the Series 16 machines were still in use, everybody knew
\emph{his} paper tapes' contents and \emph{his} programs' library dependencies.
Everybody had an I/O library for \emph{his} computer's configuration.\\
Nowadays we have only the remains of all that: many object and library tapes 
with sometimes obscure names written on it.\\
We can neither verify the correctness of the data on the tapes nor
get any information about a tape's exact contents, exported symbols, 
and dependencies.\\
So there is a need for the collector to verify, analyze, sort, split, and
recombine his paper tape software.\\
The \pname program provides a handy approach to
help doing this using a newer computer with an UNIX style operating system, 
disk drives, and some kind of paper tape reading facility.

\subsection{The Technical Background}
The Honeywell Series 16 assembly program DAP-16 \cite{ser16:dap16:manual} 
and the FOTRAN IV compiler program \cite{ser16:frtn:manual} 
read source code from punched paper tape and translate it into relocatable
object code which is then punched out on paper tape again. 
See \cite{ser16:progref} for operation details.\\
The object data is organized in blocks of variable layout and length consisting 
of 16 bit wide native machine words. The block format is described 
in \cite{ser16:progref}, pages 5-21ff. \\
To store the object blocks on punched paper tapes, each word in the block is 
divided into three parts: the first one is 4 bits wide, the second and 
third one are 6 bits wide.\\
Each frame is now translated so that the resulting paper tape frames don't
contain any printable or control characters. Then the block is enclosed by
control characters and sent out to the paper tape punch device.\\
The resulting ''silent 4/6/6 code'' can be easily processed by the ASR 33
printing terminal. It is even possible to mix listing and object code
on one tape because the text between the silent data blocks is 
ignored by the loader.\\
See \cite{ddp516:users_guide}, page 10-1ff for more information about this 
concept, but be aware that the translation table in the document contains 
\emph{severe} errors.\\

\subsection{Functional Overview}
\pname is a program which is capable of analyzing object tapes.\\
It reads in the data from a file or a serial line, retranslates 
the mangled characters, and reassembles the data blocks into an internal
representation.\\
The block checksum is checked immediately after a 
block has been read in. This provides for immediate error reporting and 
handling. One input data error handling possibility is to immediately
stop a tape reader connected to a serial port so that the user has a clue
where to look for faulty regions on the paper tape. This is very useful
when reading in last existing copies of old software.\\
After the error-free blocks are present in the program's memory, it is
possible to do various operations on it. Examples are extracting and
listing of symbol names, split up the data of a library into several files
or even reverse assembly and relocating into a virtual Series 16 main memory 
(not in the base variant of the program).
