%\htmladdnormallink{href="http://blah.blah/blah"}{see blah} %\htmladdimg}{blah.gif} %\begin{rawhtml} %\end{rawhtml}. %\begin{htmlonly} %\end{htmlonly} - Latex stuff %\begin{latexonly} %\end{latexonly} %% The first argument is HTML text which will become ``hyperized'' %% (underlined). %% The second and third arguments are text which will appear only in the paper %% version (DVI file), enclosing the fourth argument which is a reference to a label. %% %%e.g. \hyperref{using the tracer}{using the tracer (see Section}{)}{trace} %% where there is a corresponding \label{trace} \documentstyle[twoside]{article} \setlength{\textwidth}{ 6.1in} \setlength{\oddsidemargin}{0.35in} \setlength{\evensidemargin}{0.05in} \setlength{\parindent}{0em} \setlength{\parskip}{2ex} \input {html.sty} \def\RX#1#2{ \index{#1+} {\large\bf{ #1 \hspace{3em} R$_1$,D$_2$(X$_2$,B$_2$) \hspace{5em} $[$RX$]$}} \nopagebreak \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} \put(16,4){\makebox(8,6){R$_1$}} \put(24,4){\makebox(8,6){X$_2$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RX{LH}{48} \def\RXF#1#2{ % RX with MS field {\large\bf{ #1 \hspace{3em} MS,D$_2$(X$_2$,B$_2$) \hspace{5em} $[$RX$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} \put(16,4){\makebox(8,6){MS}} \put(24,4){\makebox(8,6){X$_2$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RXF{FW}{60} \def\PLF#1#2{ % RX with MS field & PL {\large\bf{ #1 \hspace{3em} MS,D$_2$(X$_2$,B$_2$) \hspace{5em} $[$PL$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} \put(16,4){\makebox(8,6){MS}} \put(24,4){\makebox(8,6){X$_2$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \PLF{FW}{60} \def\RXm#1#2{ % RX with mask {\large\bf{ #1 \hspace{3em} M$_1$,D$_2$(X$_2$,B$_2$) \hspace{5em} $[$RX$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} \put(16,4){\makebox(8,6){M$_1$}} \put(24,4){\makebox(8,6){X$_2$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RXm{BC}{48} \def\RXa#1#2{ % RX with R1 field blank {\large\bf{ #1 \hspace{3em} D$_2$(X$_2$,B$_2$) \hspace{5em} $[$RX$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} \put(24,4){\makebox(8,6){X$_2$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(16,8){\line(1,1){2}} \put(16,4){\line(1,1){6}} \put(20,4){\line(1,1){4}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RXa{RCSR0}{6F} \def\PL#1#2{ % RX with R1 field blank {\large\bf{ #1 \hspace{3em} D$_2$(X$_2$,B$_2$) \hspace{5em} $[$PL$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} \put(24,4){\makebox(8,6){X$_2$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(16,8){\line(1,1){2}} \put(16,4){\line(1,1){6}} \put(20,4){\line(1,1){4}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \PL{RCSR0}{6F} \def\RR#1#2{ {\large\bf{ #1 \hspace{3em} R$_1$,R$_2$ \hspace{5em} $[$RR$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} % opcode \put(16,4){\makebox(8,6){R$_1$}} \put(24,4){\makebox(8,6){R$_2$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(32,8){\line(1,1){2}} \put(32,4){\line(1,1){6}} \put(36,4){\line(1,1){6}} \put(40,4){\line(1,1){6}} \put(44,4){\line(1,1){6}} \put(48,4){\line(1,1){6}} \put(52,4){\line(1,1){6}} \put(56,4){\line(1,1){6}} \put(60,4){\line(1,1){4}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RR{OR}{16} \def\RRm#1#2{ % RR code with mask {\large\bf{ #1 \hspace{3em} M$_1$,R$_2$ \hspace{5em} $[$RR$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} % opcode \put(16,4){\makebox(8,6){M$_1$}} \put(24,4){\makebox(8,6){R$_2$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(32,8){\line(1,1){2}} \put(32,4){\line(1,1){6}} \put(36,4){\line(1,1){6}} \put(40,4){\line(1,1){6}} \put(44,4){\line(1,1){6}} \put(48,4){\line(1,1){6}} \put(52,4){\line(1,1){6}} \put(56,4){\line(1,1){6}} \put(60,4){\line(1,1){4}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RRm{BC}{xx} \def\RRa#1#2{ {\large\bf{ #1 \hspace{3em} R$_1$ \hspace{5em} $[$RR$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} % opcode \put(16,4){\makebox(8,6){R$_1$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(24,8){\line(1,1){2}} \put(24,4){\line(1,1){6}} \put(28,4){\line(1,1){6}} \put(32,4){\line(1,1){6}} \put(36,4){\line(1,1){6}} \put(40,4){\line(1,1){6}} \put(44,4){\line(1,1){6}} \put(48,4){\line(1,1){6}} \put(52,4){\line(1,1){6}} \put(56,4){\line(1,1){6}} \put(60,4){\line(1,1){4}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RRa{SPM}{04} \def\RS#1#2{ {\large\bf{ #1 \hspace{3em} R$_1$,R$_3$,D$_2$(B$_2$) \hspace{5em} $[$RS$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} % opcode \put(16,4){\makebox(8,6){R$_1$}} \put(24,4){\makebox(8,6){R$_3$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RS{BXLE}{87} BXLE \def\RSa#1#2{ {\large\bf{ #1 \hspace{3em} R$_1$,D$_2$(B$_2$) \hspace{5em} $[$RS$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} % opcode \put(16,4){\makebox(8,6){R$_1$}} \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(24,8){\line(1,1){2}} \put(24,4){\line(1,1){6}} \put(28,4){\line(1,1){4}} \put(24,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RSa{SLDL}{8D} \def\RSb#1#2{ {\large\bf{ #1 \hspace{3em} \hspace{5em} $[$RS$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} % opcode \put(16,4){\makebox(8,6){R$_1$}} \put(16,4){\line(0,1){6}} \put(24,4){\line(0,1){6}} \put(24,8){\line(1,1){2}} \put(24,4){\line(1,1){6}} \put(28,4){\line(1,1){6}} \put(32,4){\line(1,1){6}} \put(36,4){\line(1,1){6}} \put(40,4){\line(1,1){6}} \put(44,4){\line(1,1){6}} \put(48,4){\line(1,1){6}} \put(52,4){\line(1,1){6}} \put(56,4){\line(1,1){6}} \put(60,4){\line(1,1){4}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(24,0){\makebox(8,6)[l]{19}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \RSb{SR32}{xx} \def\SI#1#2{ {\large\bf{ #1 \hspace{3em} D$_1$(B$_1$),I$_2$ \hspace{5em} $[$SI$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} \put(16,4){\makebox(16,6){I$_2$}} \put(32,4){\makebox(8,6){B$_1$}} \put(40,4){\makebox(24,6){D$_1$}} \put(16,4){\line(0,1){6}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(24,0){\makebox(8,6)[l]{19}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \SI{MVI}{92} \def\S#1#2{ {\large\bf{ #1 \hspace{3em} D$_2$(B$_2$) \hspace{5em} $[$S$]$}} \nopagebreak \index{#1+} \setlength{\unitlength}{1.0mm} \begin{picture}(64,10) \put(0,4){\framebox(64,6)} \put(0,4){\makebox(16,6){#2}} % opcode \put(32,4){\makebox(8,6){B$_2$}} \put(40,4){\makebox(24,6){D$_2$}} \put(16,4){\line(0,1){6}} \put(16,8){\line(1,1){2}} \put(16,4){\line(1,1){6}} \put(20,4){\line(1,1){6}} \put(24,4){\line(1,1){6}} \put(28,4){\line(1,1){4}} \put(32,4){\line(0,1){6}} \put(40,4){\line(0,1){6}} \footnotesize \put(0,0){\makebox(16,6)[l]{31}} \put(16,0){\makebox(8,6)[l]{23}} \put(32,0){\makebox(8,6)[l]{15}} \put(40,0){\makebox(24,6)[l]{11}} \put(40,0){\makebox(24,6)[r]{0}} \end{picture} \nopagebreak } % eg. \S{SSM}{80} %\input {defs.tex} %\begin{latexonly} \def\doublepagebreak{\if@twoside \ifodd {\ifvmode \penalty -\@getpen{4}\else \@bsphack\vadjust{\penalty -\@getpen{4}}\@esphack\fi}\fi\fi} % eg. \doublepagebreak %\end{latexonly} \makeindex \begin{document} \begin{latexonly} \begin{center} {\Huge\bf SLAC Scanner Processor } \\ \vspace {0.3in} {\Huge\bf SSP II} \\ \vspace {0.3in} {\Huge\bf User Guide} \\ \vspace {2.0in} {\Large\bf Hanoch Brafman, Jeff Olsen} \\ \vspace {0.06in} {\Large\bf SLAC} \\ \vspace {0.06in} {\Large\bf January 29, 1986} \\ \vspace {0.6in} {\Large\bf Andrew Daviel} \\ \vspace {0.06in} {\Large\bf TRIUMF} \\ \vspace {0.06in} {\Large\bf November 1993} \end{center} \cleardoublepage %\clearpage \end{latexonly} \begin{rawhtml}
\end{rawhtml}
\pagebreak
\section{Table of Contents}
\tableofcontents
\pagebreak
\section{List of Tables}
\listoftables
\cleardoublepage
\section{Specifications}
%{\large\bf SSP II SPECIFICATIONS } \\
\subsection{ Package:}
Double width FASTBUS Module
\itemsep -1.0ex
\begin{itemize}
\item{CPU Board}
\item{Control Board}
\end{itemize}
\begin{rawhtml}
\end{rawhtml}
\subsection{Front Panel}
\begin{itemize}
\item LED's indicating: \index{LED's}
\itemsep -1.0ex
\begin{description}
\item Slave on Cable - Yellow
\item Slave on Crate - Yellow
\item Master on Cable - Green
\item Master on Crate - Green
\item \hyperref{Internal SR}{}{}{csr0_SR} (DONE) - Red \index{SR} \index{DONE}
\item \hyperref{SR}{}{}{csr0_SR} on Cable - Red
\item \hyperref{SR}{}{}{csr0_SR} on Crate - Red
\item CPU running - Red
\item \hyperref{Single step/instruction}{}{}{csr0_SCYC} mode - Red \index{Single Step}
\item \hyperref{Power Fail}{}{}{csr0_PF} - Red (optional) \index{Power Fail}
\end{description}
\item Locking toggle switch for \hyperref{Reset}{}{}{csr0_Reset} \index{Reset}
\begin{description}
\item Resets the SSP only; Puts SSP to `sleep'
\end{description}
\item Push Button for Single step/instruction
\item LEMO (NIM) input for START \index{START}
\begin{description}
\item Starts SSP
\item Similar to \hyperref{TRIGGER bit in CSR\#0}{}{}{csr0_TRIG} \index{Trigger}
\end{description}
\item LEMO (TTL open collector) output for DONE
\begin{description}
\item Same as internal \hyperref{SR}{}{}{csr0_SR}
\end{description}
\item DIPswitch to select Cable Segment Geographic Address
\end{itemize} \index{Cable Segment}
\subsection{Memory and registers}
\begin{itemize}
\item \hyperref{CSR\#0}{}{}{s_CSR0}
\begin{description}
\item Read/Write from FASTBUS or the processor
\end{description}
\item \hyperref{CSR\#8}{}{}{s_CSR8} \index{CSR\#8}
\begin{description}
\item Write only from FASTBUS
\item Arbitration level common to both Crate and Cable segment
\end{description}
\item Program memory - 4K words or 64K words,
\hyperref{switchable}{}{}{EPM}
\begin{description} \index{Program Memory}
\item Read/Write from FASTBUS
\item Addressed in CSR space
\begin{description}
\item 40000000 - 4000FFFF
\end{description}
\end{description}
\item Data memory - 512K words, \hyperref{expandable}{}{}{Jumpers} to 2048K words
\begin{description} \index{Data Memory}
\item Read/Write from FASTBUS or the processor
\item Byte addressable from the processor
\item Addressed in DATA space
\begin{description}
\item 00000000 - 007FFFFC
\end{description}
\item Addressed in CSR space
\begin{description}
\item 80000000 - 807FFFFC
\end{description}
\end{description}
\end{itemize}
\subsection{Broadcast modes}\label{s_BRO}
\begin{itemize} \index{Broadcast+}
\item Case 1 (X'01') General - SSP attaches \index{Class N}
\item Case 2 (X'N5') \hyperref{Class N}{}{}{csr0_CLASS} - N is loaded into
\hyperref{CSR\#0}{}{}{s_CSR0}
\item Case 3a (X'19') SSP asserts TP on segment issuing the
broadcast if not busy \index{Busy}
\item Case 4 (X'0D') SSP asserts TP on segment issuing the
broadcast \index{TP}
\item Case 5 (X'1D') SSP asserts TP if it is asserting
\hyperref{SR}{}{}{csr0_SR} on segment
issuing the broadcast
\item Case 6 (X'2D') SSP asserts TP if
\hyperref{DONE}{}{}{csr0_SR} (SR flag) is set
\item Case 7 (X'\{8-F\}D') User may enable by burning a
\hyperref{PROM}{}{}{BCPROM}
\end{itemize} \index{SR} \index{DONE}
\subsection{Data Cycles}
\begin{itemize}
\item Secondary Address (Read/write)
\item Random Data (Read/Write)
\item Block Transfers - Handshake (Read/Write)
\begin{description} \index{Timing}
\item Timing -- Typical for Backplane
\item Slave:
\item Primary Address: AK UP response to AS UP - 40 ns
\item Random Data : DK UP response to DS UP - 215 ns read\\
DK UP response to DS UP - 140 ns write\\
DK DN response to DK DN - 50 ns
\item Block Transfer : DK T response to DS T - 120 ns
\item Master:
\item Random Data : DS DN response to DK UP - 140 ns read\\
DS DN response to DK DN - 50 ns write
\item Block Transfer : DS T response to DK T - 110 ns
\item Maximum Transfer rate (Slave response = 0 ns):
9 Mhz (110 ns/Word). \index{Block Transfer}
\end{description}
\end{itemize}
\subsection{SS Responses}\label{s_SS}
\begin{itemize}
\item SLAVE \index{SS+}
\begin{description}
\item SS = 0, Normal
\item SS = 1, SSP is busy
\item SS = 6, Addressing error
\end{description}
\end{itemize}
\begin{itemize}
\item MASTER
\begin{description}
\item Any SS other than 0 will generate an error
except where SS=2 terminates the \hyperref{block
transfer}{}{}{BLOCK}.
\end{description}
\end{itemize}
\subsection{ Parity:}
\begin{itemize} \index{Parity}
\item No parity checking is done
\end{itemize}
\subsection{ Reset Bus:}
\begin{itemize} \index{RB+}
\item Issued by another Master:
\begin{description}
\item Resets \hyperref{CSR\#0}{}{}{s_CSR0}.
The value of \hyperref{N}{}{}{csr0_CLASS} in CSR\#0 remains unchanged.
\item Puts SSP to `sleep'.
\item Leaves all memory and other registers unchanged.
\end{description}
\item Issued by the SSP:
\begin{description}
\item Ignored by the SSP
\item Segment determined by a \hyperref{bit in
CSR\#0}{}{}{csr0_RB}
\item Level or Pulse selected by \hyperref{jumper}{}{}{Jumpers}; if level,
Duration determined by setting
and resetting a \hyperref{bit in CSR\#0}{}{}{csr0_RB}
\end{description} \index{CSR\#0}
\item Issued through the scanner
\begin{description}
\item Ignored by the SSP
\item Segment determined by a bit in \hyperref{CSR\#0}{}{}{csr0_RB}
\item Duration determined by setting
and resetting a bit in CSR\#0
\end{description}
\end{itemize}
\subsection{ START:}
\begin{itemize} \index{START}
\item \hyperref{CSR\#0 Trigger}{}{}{csr0_TRIG}
\item TTL - LEMO
\end{itemize}
Multiple starts are ignored while the processor is running
\subsection{ CPU:}
\begin{itemize}
\item 32 Bit
\item Emulates IBM integer machine language instructions.
All instructions are 32 bits long.
\item Separated Data and Program memory.
\item Executes single or combined FASTBUS I/O operations.
\item Basic cycle time of 100 ns.
Narrowed to 80 during multiply, divide, and shifts.
\item Users I/O and Error handler starts at location 0
in Program memory.
Updated \hyperref{PSW}{}{}{s_PSW} in location 0 in data memory.
\hyperref{Memory Address register}{}{}{MAR} contents in location 4
in Data memory.
\item \hyperref{Interruptible}{}{}{INTRP} from either the Crate or Cable segment
at the end of an instruction or group of I/O instructions.
\hyperref{System mask}{}{}{SMSK} must be on.
\end{itemize}
\clearpage
\subsection{ SCANNER CSR's}
The SSP has only 2 CSR's, \hyperref{CSR\#0}{}{}{s_CSR0} and
\hyperref{CSR\#8}{}{}{s_CSR8}. CSR\#0 is a read/write
register, CSR\#8 is a write only register. \index{CSR\#8+}
\subsection{ CSR\#0:} The format of CSR\#0 is shown in Table
1.\label{s_CSR0}
%\end{document}
\begin{latexonly}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large Table 1: Format of CSR\#0} \\ \hline
\bf{Bit} & \bf{Hex} & \bf{Read} & \bf{Write} \\ \hline \index{CSR\#0+}
31 & 80000000 & & Disable EPM \\
30 & 40000000 & Bits 16-31 & Reset (disable Class N) \\
29 & 20000000 & Manufacturer's & \\
28 & 10000000 & I.D. & Enable EPM\\
\hline \index{EPM} \index{Class N}
27 & 08000000 & 0106 (no EPM) & Enable Class N response \\
26 & 04000000 & & Enable Time-outs \\
25 & 02000000 & 0107 (with EPM) & Disable CI SR \\
24 & 01000000 & & Enable CI Mastership \\
\hline \index{Timeout}
23 & 00800000 & & Disable GK up \\
22 & 00400000 & & Disable single cycle \\
21 & 00200000 & & Reset SR \\
20 & 00100000 & & Disable CR SR \\
\hline \index{SR}
19 & 00080000 & & Reset RB \\
18 & 00040000 & & Reset RUN, HALT \\
17 & 00020000 & & Enable CI RB \\
16 & 00010000 & EPM enabled & Enable writing of class \\
\hline
15 & & & \\
14 & 0000X000 & Bits 12-15 & Bits 12-15 \\
13 & & Class for case 2 & Set Class for case 2 \\
12 & & Broadcasts & Broadcasts \\
\hline \index{Broadcast}
11 & 00000800 & Class N enabled & Trigger \\
10 & 00000400 & Time-outs Disabled & Disable Time-outs \\
9 & 00000200 & CI SR Enabled & Enable CI SR \\
8 & 00000100 & CR Mastership Enabled & Enable CR Mastership \\
\hline \index{GK} \index{Single Step}
7 & 00000080 & Hold GK Enabled & Enable Hold GK \\
6 & 00000040 & Single cycle mode & Set single cycle mode \\
5 & 00000020 & SR set (DONE) & Set SR \\
4 & 00000010 & CR SR Enabled & Enable CR SR \\
\hline \index{DONE} \index{Trigger}
3 & 00000008 & Cable SR is set & Set RB \\
2 & 00000004 & RUN Bit Set & Set RUN Bit \\
1 & 00000002 & Crate SR is set & Enable CR RB \\
0 & 00000001 & Power fault & Set Soft Halt \\
\hline
\end{tabular}
CR - Crate segment, CI - Cable segment
\end{center}
\end{latexonly}
\begin{htmlonly}
\index{EPM} \index{Class N}
\index{DONE} \index{Trigger}
\index{SR}
\index{Broadcast}
\index{GK} \index{Single Step}
\begin{rawhtml}
\end{rawhtml}
Table 1: Format of CSR#0
{ \tt
Bit Hex Read Write \\
31 80000000 \hyperref{Disable EPM}{}{}{csr0_EPM}\\
30 40000000 Bits 16-31 \hyperref{Reset}{}{}{csr0_Reset} (disable Class N)\\
29 20000000 Manufacturer's\\
28 10000000 I.D. \hyperref{Enable EPM}{}{}{csr0_EPM}\\ \\
27 08000000 0106 (no EPM) Enable \hyperref{Class N response}{}{}{csr0_CLASS}\\
26 04000000 Enable \hyperref{Time-outs}{}{}{csr0_TO}\\
25 02000000 0107 (with EPM) Disable CI \hyperref{SR}{}{}{csr0_SR}\\
24 01000000 Enable CI \hyperref{Mastership}{}{}{csr0_Master}\\ \\
23 00800000 Disable \hyperref{GK up}{}{}{csr0_GK}\\
22 00400000 Disable \hyperref{single cycle}{}{}{csr0_SCYC}\\
21 00200000 Reset \hyperref{SR}{}{}{csr0_SR}\\
20 00100000 Disable CR \hyperref{SR}{}{}{csr0_SR}\\ \\
19 00080000 Reset \hyperref{RB}{}{}{csr0_RB}\\
18 00040000 Reset \hyperref{RUN}{}{}{csr0_RUN}, HALT\\
17 00020000 Enable CI \hyperref{RB}{}{}{csr0_RB}\\
16 00010000 \hyperref{EPM}{}{}{csr0_EPM} enabled Enable writing of \hyperref{class}{}{}{csr0_CLASS}\\ \\
15\\
14 0000X000 Bits 12-15 Bits 12-15\\
13 Class for case 2 Set \hyperref{Class}{}{}{csr0_CLASS} for case 2\\
12 Broadcasts Broadcasts\\ \\
11 00000800 Class N enabled \hyperref{Trigger}{}{}{csr0_TRIG}\\
10 00000400 Time-outs Disabled Disable \hyperref{Time-outs}{}{}{csr0_TO}\\
09 00000200 CI \hyperref{SR}{}{}{csr0_SR} Enabled Enable CI \hyperref{SR}{}{}{csr0_SR}\\
08 00000100 CR Mastership Enabled Enable CR \hyperref{Mastership}{}{}{csr0_Master}\\ \\
07 00000080 \hyperref{Hold GK}{}{}{csr0_GK} Enabled Enable \hyperref{Hold GK}{}{}{csr0_GK}\\
06 00000040 Single cycle mode Set \hyperref{single cycle mode}{}{}{csr0_SCYC}\\
05 00000020 SR set (DONE) Set \hyperref{SR}{}{}{csr0_SR}\\
04 00000010 CR \hyperref{SR}{}{}{csr0_SR} Enabled Enable CR \hyperref{SR}{}{}{csr0_SR}\\ \\
03 00000008 Cable \hyperref{SR}{}{}{csr0_SR} is set Set \hyperref{RB}{}{}{csr0_RB}\\
02 00000004 RUN Bit Set Set \hyperref{RUN}{}{}{csr0_RUN} Bit\\
01 00000002 Crate \hyperref{SR}{}{}{csr0_SR} is set Enable CR \hyperref{RB}{}{}{csr0_RB}\\
00 00000001 \hyperref{Power fault}{}{}{csr0_PF} Set \hyperref{Soft Halt}{}{}{csr0_RUN}\\
} % \tt
CR - Crate segment, CI - Cable segment
\begin{rawhtml}\end{rawhtml}
\end{htmlonly}
%\subsection{CSR\#0 Bits}
\subsubsection{EPM}
\label{csr0_EPM}\index{EPM}
On reads, bits 16 through 31 indicate the manufacturer's I.D. For
the SSP, the I.D. is 0106(hex) with EPM disabled. For EPM enabled,
the I.D. is 0107.
\hyperref{Extended Program Memory}{}{}{EPM} (EPM) may be enabled or disabled by writing
bits 28 and 31. EPM is disabled at power-up.
\begin{latexonly} See page~{\pageref{EPM}} for a
more complete description.
\end{latexonly}
\subsubsection{Reset}
\label{csr0_Reset} \index{Class N}
Response to Class~N broadcasts may be enabled or disabled. In
accordance with the FASTBUS specification, Class N response is disabled at
power-up and by writing bit~30 (the Reset bit). Class~N response is enabled
by writing bit~27 (since CSR\#7 is not implemented). Class~N enabled is
indicated by bit~11.
\subsubsection{Bus Timeouts}
\label{csr0_TO} \index{Timeout}
Time-outs are disabled by setting bit~10. and enabled by setting
bit~26. With time-outs disabled, the SSP will wait forever to
get responses back from a slave. With time-outs enabled, the SSP
will wait 20.5 $\mu$s for responses from a slave. After this time
period, the I/O-Interrupt handler will be called.
\subsubsection{SR}
\label{csr0_SR} \index{SR}
The internal SR line is set true by setting bit~5. and set false
by setting bit~21. If the internal SR line is true, the SSP will
assert TP for broadcast case 5.
The internal SR line can be asserted on either the cable
segment or crate segment or both. Setting bit~9 enables the internal SR
onto the cable segment, bit~25 disables it. Setting bit~4 enables
the internal SR onto the crate segment, bit~20 disables it.
\subsubsection{Bus Mastership}
\label{csr0_Master} \index{Cable Segment}
The SSP can be a master on either the cable segment or the crate
segment. Setting bit~8 will enable mastership on the crate segment.
Setting bit~24 will enable mastership on the cable segment.
\subsubsection{Hold GK}
\label{csr0_GK } \index{GK+}
The Hold GK feature enables the SSP to maintain GK asserted after
dropping AS/AK lock. This allows the SSP to scan from module to
module without having to regain bus mastership. If the Hold GK
feature is disabled, the SSP will drop GK upon receiving AK.
Setting bit~7 will enable the Hold GK feature, bit~23 will disable
it.
\subsubsection{Single Cycle}
\label{csr0_SCYC} \index{Single Step+}
The SSP program can be stepped through by setting bit~6 and then
using the front panel button. This feature is useful for debugging
hardware. Setting bit~22 will disable the single step feature. A jumper on
the control board controls whether the SSP executes a single
clock cycle or a single instruction on each push of the front
panel button.
\subsubsection{Reset Bus (RB)}
\label{csr0_RB} \index{RB+}
Setting bit~3 will set the internal RB line true. Setting bit~19
will set the internal RB line false. Setting bit~1 will direct
the RB to the crate segment, bit~ 17 will direct the RB to the
cable segment. This allows the cable segment to issue a RB into
the crate segment through the SSP. Setting bits 1 and 3 from the
cable segment will set RB in the crate. Setting bit~19 will drop
the RB in the crate. A jumper on the control board controls whether
setting bit~3 generates a pulse on RB or a level.
\subsubsection{Run}
\label{csr0_RUN}
\index{RUN+}
Setting bit~2 will enable the SSP to RUN. The SSP must be
triggered by either setting bit~11, trigger bit, or a front panel
start. Setting bit~18 will halt the SSP.
\subsubsection{Class N Broadcast}
\label{csr0_CLASS}
\index{Broadcast}
The value of the class for case 2 broadcast is written into bits
12 through 15. This register is not of the J-K type. In order
to load the class register, bit~16 must also be set. If bit~16
is not set, bits 12 through 15 are not loaded into the class register.
Case~2 broadcast response is enabled by writing bit~27.
\subsubsection{Trigger}
\label{csr0_TRIG}
\index{Trigger+}
Bit~11 is the Trigger bit. This bit will start the SSP if the
RUN bit (bit~2) was also set.
\subsubsection{Power Fault} \index{Power Fail+} \label{csr0_PF}
Bit~0 indicates a power fault condition. Voltages on each fused
section of both the SSP CPU and Control boards are monitored and a power
fail signal is asserted if any voltage falls below tolerance. Indication is
made by LEDs fitted to each board, optionally by a front-panel LED, and by
setting bit~0. If a power fault exists on the CPU board the FASTBUS slave
interface will still function. However a fault on the Control board will
probably render the slave interface inoperative.
\subsection{ CSR\#8} \index{CSR\#8+} \index{Arbitration}\label{s_CSR8}
CSR\#8 is a write only register which contains
arbitration level and the assured access bit.
\clearpage
\subsection{ I/O INTERRUPT AND ERROR HANDLER} \index{Error Handler+}
\label{s_ERRHND}
The I/O-Error Handler is a program that is executed when the SSP
is externally interrupted or encounters an error. Hardware-wise,
entering the I/O-Error Handler does the following:
\begin{enumerate}
\item Stores the Processor Status Word (PSW) into DM~0. \index{PSW}
\item Stores the Memory Address Register (MAR) into DM~4. \index{MAR}
\item Sets the System Mask and Overflow Mask OFF;
Disables Interrupts \index{Interrupt}
\item Jumps to PM 0 and starts executing the I/O-Error Handler.
\end{enumerate}
It is up to the I/O-Error Handler to determine what action to
take in response to the I/O-Error. The reason that the I/O-Error
Handler was entered can be decoded from the PSW and the MAR.
\subsection{ I/O Interrupts:} In order for the SSP to be
interruptible, the System Mask must be ON. Turning ON the
System Mask is done by setting bit~15 ON in the Initial PSW (if
EPM is disabled) or by using the Set System \index{System Mask}
Mask (SSM) instruction. If the System Mask is ON, trying to
attach to the SSP from either the Crate or Cable Segment will
interrupt the SSP. If the SSP is executing a sequence of I/O
instructions, the interrupt will not be acknowledged until a
non-I/O instruction or an instruction having a Primary address is
executed. If the SSP is not executing I/O instructions, the
interrupt will not be acknowledged until the end of the current
instruction.
Bit~ 31 of the PSW indicates that the I/O-Error Handler
was entered because of an I/O Interrupt. It is the
responsibility of the I/O-Error Handler to put the SSP to `sleep'
by writing to CSR0 and resetting the RUN bit. \index{PSW}
If the System Mask is ON and a Master attempts to attach to
the SSP, the SSP will return AK and WT during the Primary Address
cycle. WT will be released only after the I/O-Error Handler has
reset the RUN bit in CSR0. \index{WT}
If the System Mask is OFF and a Master attempts to attach to
the SSP, the SSP will return AK during the Primary Address cycle.
The SSP will return an SS=1, BUSY, for any subsequent address or
data cycles. \index{Busy+} \index{SS}
To continue executing the program from the point it was
interrupted, DM~0 must be loaded with the correct PSW. This PSW is
either the same PSW that was loaded into DM~0 when the interrupt
occurred, or one less than it. The NPA Bit in the PSW indicates
whether to subtract 1 or not. If the NPA Bit is 1, subtract 1,
otherwise subtract 0. After the correct PSW is loaded into DM~0,
set the RUN Bit and the Start Bit in CSR\#0 to continue execution.
To start the SSP running in a different location than where
the interrupt occurred, load the desired PSW into DM~0. Then set
the RUN and Start Bit in CSR\#0 to start the SSP. \index{RUN}
\index{START}
\subsection{ ERRORS:} \label{s_ERRORS}
Besides handling I/O Interrupts, the I/O-Error Handler
must also handle the following error condition:
\begin{enumerate}
\item Unsupported Op-Code
\item Divide by Zero
\item Overflow, if the Overflow Mask is ON \index{Overflow}
\item An unexpected non-zero SS code \index{SS}
\item A word-count overflow during block transfers using the word
count as a guard. \index{Word Count}
\end{enumerate}
\clearpage
\subsection{ EXTENDED PROGRAM MEMORY } \label{EPM} \index{EPM+}
Extended Program Memory (EPM) refers to a PM size of 64kW instead of 4kW.
This is achieved by using a 16-bit PC instead of a 12-bit PC. This extended
PC is too large to be saved in the PSW, so two instructions must be used
instead of one. \index{PSW} \index{PC}
In order to remain compatible with existing SSP software, EPM is initially
disabled on power-up. When EPM is disabled, only the lower 4k words of
program memory may be accessed, and the Program Counter (PC) is 12 bits long.
When EPM is enabled, the full 64k words of program memory is available, and
the PC is 16 bits long.
Initial Program Load (IPL) loads the PC with the PM address found in Data
Memory address zero (DM~0), and also sets the system masks (LSMSK, LPMSK).
Programs compiled for EPM must have an initial \index{IPL}
DM~0 of 0080, not 8080, and the system mask must be set with an SSM
instruction if required. A DM~0 of 8080 would cause the SSP to start executing at
address 8080 in addition to setting the mask. \index{System Mask}
When EPM is enabled, the instructions \hyperref{BAL, BALR}{}{}{i_BAL},
\hyperref{BALR0}{}{}{i_BALR0} save a 16-bit PC
and do not save the program masks. \index{BAL} \index{BALR} \index{BALR0}
Thus the link address is saved in the register, but the original
values of the condition codes and system masks are lost. If these are
required, they must be explicitly saved beforehand using a
\hyperref{BALR0M}{}{}{i_BALR0M}
instruction. \index{BALR0M}
When EPM is enabled, the interrupt microcode (IOERR) clears the system
mask (disabling interrupts) and saves a 16-bit PC. The error handler code
must perform a BALR0M instruction to save the condition codes. The previous
value of the system mask is lost, but if a consistent procedure is used to
set and clear the mask then a copy may be kept in data memory. On exit from
the error handler, an \hyperref{LMSK}{}{}{i_LMSK} instruction should be executed to restore the
condition codes and masks, followed by an \hyperref{LPC}{}{}{i_LPC} instruction to restore the PC.
Executing an \hyperref{LPSW}{}{}{i_LPSW} instruction while EPM is enabled would cause
the upper PC bits to be set to the CC and masks values.
\index{LMSK} \index{LPSW}
With EPM enabled, a base register must be used (as in the IBM~370) to access
the upper 60kW of Program Memory.
\clearpage
\subsection{ PSW FORMAT}
The format of the PSW is shown in Table 2. \label{s_PSW}
\begin{latexonly}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 2: Format of the SSP PSW}} \\ \hline
{\bf Bit} & {\bf Hex} & {\bf Name} & {\bf Meaning } \\
\hline \index{PSW+}
31 & 80000000 & INTRP & I/O INTERRUPT \\
30 & 40000000 & EXCP & EXCEPTION \\
29 & 20000000 & T.O. & I/O TIME-OUT \\
28 & 10000000 & SS2 & SS2, SS1 and SS0 \\
\hline \index{Exception}
27 & 08000000 & SS1 & indicate the FASTBUS SS code \\
26 & 04000000 & SS0 & \\
25 & 02000000 & BRQ & BUS request by the SSP \\
24 & 01000000 & EG & Indicates a Primary Address cycle \\
\hline \index{SS} \index{EG}
23 & 00800000 & AS/AK & AS/AK lock was established \\
22 & 00400000 & MS1 & MS1 and MS0 indicate the FB MS code \\
21 & 00200000 & MS0 & \\
20 & 00100000 & RDOT & Indicates a FASTBUS Read cycle. \\
\hline \index{MS}
19 & 00080000 & WTOT & Indicates that SSP was issuing Wait \\
18 & 00040000 & EXCP2 & EXCP2 and EXCP1 \\
17 & 00020000 & EXCP1 & indicate the type of EXCEPTION \\
16 & 00010000 & /NPA & Next Prom Address \\
\hline \index{NPA} \index{System Mask}
15 & 00008000 & SMSK & System Mask \\
14 & 00004000 & OVMSK & Overflow Mask \\
13 & 00002000 & ECC2 & ECC2 and ECC1 \\
12 & 00001000 & ECC1 & Encoded Condition Codes \\
\hline \index{Condition Code} \index{Overflow}
11 & & & If EPM is disabled, bits 15:12 \\
10 & & & are the values of masks and \\
9 & & & condition codes. \\
8 & & &\\
\hline
7 & 00000XXX & & If EPM is enabled, bits 15:12\\
6 & & & indicate the upper 4 bits of the PC\\
5 & & &\\
4 & & &\\
\hline
3 & & & Bits 11:0 indicate the PC\\
2 & & & at the time the\\
1 & & & I/O-Error handler was entered\\
0 & & &\\
\hline
\end{tabular}
\end{center}
\end{latexonly}
\begin{htmlonly}
\index{PSW+}
\index{Exception}
\index{NPA} \index{System Mask}
\index{SS} \index{EG}
\index{MS}
\index{Condition Code} \index{Overflow}
\begin{rawhtml}\end{rawhtml}
{\large {Table 2: Format of the SSP PSW}}\\
{\bf Bit} {\bf Hex} {\bf Name} {\bf Meaning }\\
31 80000000 INTRP \hyperref{I/O INTERRUPT}{}{}{INTRP}\\
30 40000000 EXCP \hyperref{EXCEPTION}{}{}{EXCP}\\
29 20000000 T.O. \hyperref{I/O TIME-OUT}{}{}{IOTO}\\
28 10000000 SS2 SS2, SS1 and SS0\\
27 08000000 SS1 indicate the \hyperref{FASTBUS SS code}{}{}{FBSS}\\
26 04000000 SS0\\
25 02000000 BRQ \hyperref{BUS request}{}{}{BRQ} by the SSP\\
24 01000000 EG \hyperref{Indicates a Primary Address}{}{}{FBEG} cycle\\
23 00800000 AS/AK \hyperref{AS/AK lock}{}{}{ASAK} was established\\
22 00400000 MS1 \hyperref{MS1 and MS0}{}{}{FBMS} indicate the FB MS code\\
21 00200000 MS0\\
20 00100000 RDOT Indicates a FASTBUS \hyperref{Read cycle}{}{}{RDOT}.\\
19 00080000 WTOT Indicates that SSP was issuing \hyperref{Wait}{}{}{WTOT}\\
18 00040000 EXCP2 EXCP2 and EXCP1\\
17 00020000 EXCP1 indicate the type of \hyperref{EXCEPTION}{}{}{EXCP}\\
16 00010000 /NPA \hyperref{Next Prom Address}{}{}{NPA}\\
15 00008000 SMSK \hyperref{System Mask}{}{}{SMSK}\\
14 00004000 OVMSK \hyperref{Overflow Mask}{}{}{OVMSK}\\
13 00002000 ECC2 ECC2 and ECC1\\
12 00001000 ECC1 \hyperref{Encoded Condition Codes}{}{}{ECC}\\
11 If \hyperref{EPM}{}{}{EPM} is disabled, bits 15:12\\
10 are the values of masks and\\
09 condition codes.\\
08\\
07 00000XXX If \hyperref{EPM}{}{}{EPM} is enabled, bits 15:12\\
06 indicate the upper 4 bits of the PC\\
05\\
04\\
03 Bits 11:0 indicate the PC\\
02 at the time the\\
01 \hyperref{I/O-Error handler}{}{}{ERHND} was entered\\
00\\
\begin{rawhtml}\end{rawhtml}
\end{htmlonly}
\subsubsection{ INTRP} \index{Interrupt} \label{INTRP}
Indicates that the I/O-Error handler was entered due to an I/O
interrupt.
\subsubsection{ EXCP} \index{Exception} \label{EXCP}
Indicates that the
I/O-Error handler was entered due to an EXCEPTION. EXCP2 and
EXCP1 (bits 18 and 17 of the PSW), and A17 (the MSB of the MAR, for
a given memory size), indicate the type of exception. \index{MAR}
The exception is determined from Table 3.
\begin{latexonly}
\begin{center}
\begin{tabular}{|lll|}
\multicolumn{3}{c}{\large {Table 3: Exceptions}}\\
\hline \index{Exception+}
EXCP2 & EXCP1 & Explanation\\
\hline
0 & 0 & Divide by zero if A17 is low,\\
& & Data Memory wrap-around if A17 is high\\
\hline
0 & 1 & Arithmetic Overflow\\
\hline \index{Overflow}
1 & 0 & Unsupported Opcode\\
\hline \index{Word Count}
1 & 1 & FASTBUS block transfer terminated due to\\
& & a word count overflow\\
\hline
\end{tabular}
\end{center}
\end{latexonly}
\begin{htmlonly}
{\large {Table 3: Exceptions}}\\
\index{Word Count}
\index{Exception+}
\index{Overflow}
\begin{verbatim}
EXCP2 EXCP1 Explanation
0 0 Divide by zero if A17 is low,
Data Memory wrap-around if A17 is high
0 1 Arithmetic Overflow
1 0 Unsupported Opcode
1 1 FASTBUS block transfer terminated due to
a word count overflow
\end{verbatim}
\end{htmlonly}
\subsubsection{ T.O.} \label{IOTO}
Indicates that the I/O-Error handler was entered due to a FASTBUS
Time-Out. \index{Timeout}
\subsubsection{ SS2-SS0} \label{FBSS}
Indicate the SS code at the time the I/O-Error Handler was
entered. \index{SS}
\subsubsection{ BRQ} \label{BRQ}
Indicates that the SSP was requesting the BUS, Crate or Cable.
\subsubsection{ EG} \label{FBEG}
Internal Enable Geographic, indicates that a Primary Address was
in progress.
\subsubsection{ AS/AK} \label{ASAK}
Indicates that the AS/AK lock was established when the I/O-Error
Handler was entered.
\subsubsection{ MS1-MS0} \label{FBMS}
Indicate the MS code at the time when the I/O-Error Handler was
entered.
\subsubsection{ RDOT} \label{RDOT}
Indicates that the SSP was issuing a RD to the BUS, Crate or
Cable.
\subsubsection{ WTOT} \index{WT} \label{WTOT}
Indicates that the SSP was issuing a WT to the BUS, Crate or
Cable.
\subsubsection{ EXCP2, EXCP1}
Indicates the type of exception encountered as described above.
\subsubsection{ NPA} \index{NPA+} \index{PSW}
This bit is used to determine whether or not to subtract 1 from
the PSW to resume execution of the MAIN program. If this bit is
HIGH, the PSW must be decremented by 1. If this bit is LOW, the
PSW is left alone.
\subsubsection{ SMSK} \index{System Mask} \index{Interrupt}
\label{SMSK}
System Mask bit. If this bit is ON, I/O Interrupts are enabled.
If this bit is OFF, the SSP will not acknowledge I/O Interrupts.
\subsubsection{ OVMSK} \index{Overflow+} \label{OVMSK}
Overflow Mask bit. If this bit is ON, an Overflow will generate
an Exception. If this bit is OFF, an Overflow will be ignored.
\subsubsection{ ECC2, ECC1} \index{Condition Code} \label{ECC}
Encoded condition code bits. Program Counter Bits 11~-~0
indicate the P.C. at the time the I/O-Error Handler was entered.
Because of the instruction pipelining in the SSP, this P.C. may point to
the instruction that would have been executed had an error not been
encountered, or 1 past it. The NPA bit is used to determine whether to
subtract one or not. \index{NPA}
\clearpage
\subsection{ IBM Instructions:}
The SSP emulates IBM~370 integer machine language instructions as well
as several SSP specific instructions.
Table 4 lists the IBM instructions and Table 5
lists the SSP specific instructions.
\begin{latexonly}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 4: IBM Instructions}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
5 & BALR & BRANCH AND LINK & RR\\
6 & BCTR & BRANCH ON COUNT & RR\\
7 & BCR & BRANCH ON CONDITION & RR\\
1A & AR & ADD & RR\\
1B & SR & SUBTRACT & RR\\
1C & MR & MULTIPLY & RR\\
1D & DR & DIVIDE & RR\\
1E & ALR & ADD LOGICAL & RR\\
1F & SLR & SUBTRACT LOGICAL & RR\\
10 & LPR & LOAD POSITIVE & RR\\
11 & LNR & LOAD NEGATIVE & RR\\
12 & LTR & LOAD AND TEST & RR\\
13 & LCR & LOAD COMPLEMENT & RR\\
14 & NR & AND & RR\\
15 & CLR & COMPARE LOGICAL & RR\\
16 & OR & OR & RR\\
17 & XR & EXCLUSIVE OR & RR\\
18 & LR & LOAD & RR\\
19 & CR & COMPARE & RR\\
4A & AH & ADD HALFWORD & RX\\
4B & SH & SUBTRACT HALFWORD & RX\\
4C & MH & MULTIPLY HALFWORD & RX\\
40 & STH & STORE HALFWORD & RX\\
41 & LA & LOAD ADDRESS & RX\\
42 & STC & STORE CHARACTER & RX\\
43 & IC & INSERT CHARACTER & RX\\
45 & BAL & BRANCH AND LINK & RX\\
46 & BCT & BRANCH ON COUNT & RX\\
47 & BC & BRANCH ON CONDITION & RX\\
48 & LH & LOAD HALFWORD & RX\\
49 & CH & COMPARE HALFWORD & RX\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 4: IBM Instructions (continued)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
5A & A & ADD & RX\\
5B & S & SUBTRACT & RX\\
5C & M & MULTIPLY & RX\\
5D & D & DIVIDE & RX\\
5E & AL & ADD LOGICAL & RX\\
5F & SL & SUBTRACT LOGICAL & RX\\
50 & ST & STORE & RX\\
54 & N & AND & RX\\
55 & CL & COMPARE LOGICAL & RX\\
56 & O & OR & RX\\
57 & X & EXCLUSIVE OR & RX\\
58 & L & LOAD & RX\\
59 & C & COMPARE & RX\\
8A & SRA & SHIFT RIGHT SINGLE & RS\\
8B & SLA & SHIFT LEFT SINGLE & RS\\
8C & SRDL & SHIFT RIGHT DOUBLE LOGICAL& RS\\
8D & SLDL & SHIFT LEFT DOUBLE LOGICAL & RS\\
8E & SRDA & SHIFT RIGHT DOUBLE & RS\\
8F & SLDA & SHIFT LEFT DOUBLE & RS\\
86 & BXH & BRANCH ON INDEX HIGH & RS\\
87 & BXLE & BRANCH ON INDEX LOW OR EQUAL & RS\\
88 & SRL & SHIFT RIGHT SINGLE LOGICAL & RS\\
89 & SLL & SHIFT LEFT SINGLE LOGICAL & RS\\
90 & STM & STORE MULTIPLE & RS\\
91 & TM & TEST UNDER MASK & SI\\
92 & MVI & MOVE IMMEDIATE & SI\\
94 & NI & AND IMMEDIATE & SI\\
95 & CLI & COMPARE LOGICAL IMMEDIATE & SI\\
96 & OI & OR IMMEDIATE & SI\\
97 & XI & EXCLUSIVE OR IMMEDIATE & SI\\
98 & LM & LOAD MULTIPLE & RS\\
\hline
\end{tabular}
\end{center}
\end{latexonly}
\begin{htmlonly}
{\large {Table 4: IBM Instructions }}\\
\begin{rawhtml}\end{rawhtml}
{\bf Op}\\
{\bf Code} {\bf Mnemonic} {\bf Name} {\bf Type}\\
\hline
5A \hyperref{A}{}{}{i_A} ADD RX\\
4A \hyperref{AH}{}{}{i_AH} ADD HALFWORD RX\\
5E \hyperref{AL}{}{}{i_AL} ADD LOGICAL RX\\
1E \hyperref{ALR}{}{}{i_ALR} ADD LOGICAL RR\\
1A \hyperref{AR}{}{}{i_AR} ADD RR\\
45 \hyperref{BAL}{}{}{i_BAL} BRANCH AND LINK RX\\
05 \hyperref{BALR}{}{}{i_BALR} BRANCH AND LINK RR\\
47 \hyperref{BC}{}{}{i_BC} BRANCH ON CONDITION RX\\
07 \hyperref{BCR}{}{}{i_BCR} BRANCH ON CONDITION RR\\
46 \hyperref{BCT}{}{}{i_BCT} BRANCH ON COUNT RX\\
06 \hyperref{BCTR}{}{}{i_BCTR} BRANCH ON COUNT RR\\
86 \hyperref{BXH}{}{}{i_BXH} BRANCH ON INDEX HIGH RS\\
87 \hyperref{BXLE}{}{}{i_BXLE} BRANCH ON INDEX LOW OR EQUAL RS\\
59 \hyperref{C}{}{}{i_C} COMPARE RX\\
49 \hyperref{CH}{}{}{i_CH} COMPARE HALFWORD RX\\
55 \hyperref{CL}{}{}{i_CL} COMPARE LOGICAL RX\\
95 \hyperref{CLI}{}{}{i_CLI} COMPARE LOGICAL IMMEDIATE SI\\
15 \hyperref{CLR}{}{}{i_CLR} COMPARE LOGICAL RR\\
19 \hyperref{CR}{}{}{i_CR} COMPARE RR\\
5D \hyperref{D}{}{}{i_D} DIVIDE RX\\
1D \hyperref{DR}{}{}{i_DR} DIVIDE RR\\
43 \hyperref{IC}{}{}{i_IC} INSERT CHARACTER RX\\
58 \hyperref{L}{}{}{i_L} LOAD RX\\
41 \hyperref{LA}{}{}{i_LA} LOAD ADDRESS RX\\
13 \hyperref{LCR}{}{}{i_LCR} LOAD COMPLEMENT RR\\
48 \hyperref{LH}{}{}{i_LH} LOAD HALFWORD RX\\
98 \hyperref{LM}{}{}{i_LM} LOAD MULTIPLE RS\\
11 \hyperref{LNR}{}{}{i_LNR} LOAD NEGATIVE RR\\
10 \hyperref{LPR}{}{}{i_LPR} LOAD POSITIVE RR\\
82 \hyperref{LPSW}{}{}{i_LPSW} LOAD PSW S\\
18 \hyperref{LR}{}{}{i_LR} LOAD RR\\
12 \hyperref{LTR}{}{}{i_LTR} LOAD AND TEST RR\\
5C \hyperref{M}{}{}{i_M} MULTIPLY RX\\
4C \hyperref{MH}{}{}{i_MH} MULTIPLY HALFWORD RX\\
1C \hyperref{MR}{}{}{i_MR} MULTIPLY RR\\
92 \hyperref{MVI}{}{}{i_MVI} MOVE IMMEDIATE SI\\
54 \hyperref{N}{}{}{i_N} AND RX\\
94 \hyperref{NI}{}{}{i_NI} AND IMMEDIATE SI\\
14 \hyperref{NR}{}{}{i_NR} AND RR\\
56 \hyperref{O}{}{}{i_O} OR RX\\
96 \hyperref{OI}{}{}{i_OI} OR IMMEDIATE SI\\
16 \hyperref{OR}{}{}{i_OR} OR RR\\
5B \hyperref{S}{}{}{i_S} SUBTRACT RX\\
4B \hyperref{SH}{}{}{i_SH} SUBTRACT HALFWORD RX\\
5F \hyperref{SL}{}{}{i_SL} SUBTRACT LOGICAL RX\\
8B \hyperref{SLA}{}{}{i_SLA} SHIFT LEFT SINGLE RS\\
8F \hyperref{SLDA}{}{}{i_SLDA} SHIFT LEFT DOUBLE RS\\
8D \hyperref{SLDL}{}{}{i_SLDL} SHIFT LEFT DOUBLE LOGICAL RS\\
89 \hyperref{SLL}{}{}{i_SLL} SHIFT LEFT SINGLE LOGICAL RS\\
1F \hyperref{SLR}{}{}{i_SLR} SUBTRACT LOGICAL RR\\
04 \hyperref{SPM}{}{}{i_SPM} SET PROGRAM MASK RR\\
1B \hyperref{SR}{}{}{i_SR} SUBTRACT RR\\
8A \hyperref{SRA}{}{}{i_SRA} SHIFT RIGHT SINGLE RS\\
8E \hyperref{SRDA}{}{}{i_SRDA} SHIFT RIGHT DOUBLE RS\\
8C \hyperref{SRDL}{}{}{i_SRDL} SHIFT RIGHT DOUBLE LOGICAL RS\\
88 \hyperref{SRL}{}{}{i_SRL} SHIFT RIGHT SINGLE LOGICAL RS\\
80 \hyperref{SSM}{}{}{i_SSM} SET SYSTEM MASK S\\
50 \hyperref{ST}{}{}{i_ST} STORE RX\\
42 \hyperref{STC}{}{}{i_STC} STORE CHARACTER RX\\
40 \hyperref{STH}{}{}{i_STH} STORE HALFWORD RX\\
90 \hyperref{STM}{}{}{i_STM} STORE MULTIPLE RS\\
91 \hyperref{TM}{}{}{i_TM} TEST UNDER MASK SI\\
57 \hyperref{X}{}{}{i_X} EXCLUSIVE OR RX\\
97 \hyperref{XI}{}{}{i_XI} EXCLUSIVE OR IMMEDIATE SI\\
17 \hyperref{XR}{}{}{i_XR} EXCLUSIVE OR RR\\
\begin{rawhtml}\end{rawhtml}
\end{htmlonly}
\subsection{ Program Execution}
Normally , operation of the CPU is controlled by instructions taken in
sequence. This sequence is governed by the program status word (PSW) ,
which \index{PSW}
contains the primary information required for proper program execution.
A
change in the sequential operation may be caused by branching, LOAD PSW,
interruptions, or manual intervention.
\subsection{ Instructions}
Each instruction consists of two major parts : (1) an operation code ,
which
specifies the operation to be performed, and (2) the designation of the
operands that participate.
{\bf Operands }\\
Operands can be grouped in three classes : operands located in
registers,
immediate operands, and operands in main storage. Operands may be either
explicitly or implicitly designated.
% Register operands can be located in general, floating-point, or control
%registers, with the type of register identified by the operation code.
Register operands are located in one of the general registers R0 - R15.
The
register containing the operand is specified by identifying the
register in a
four-bit field, called the R field, in the instruction. For some
instructions an
operand is
located in an implicitly designated register, the register being
implied by the
operation code.
Immediate operands are contained within the instruction, and the
eight-bit
field containing the immediate operand is called the I field.
Operands in main storage may either have an implied length, be
specified by a
bit mask, or, in other cases, be specified by a four-bit or eight-bit
length
specification, called the L field, in the instruction. The addresses of
operands in main storage are specified by means of a format that uses
the
contents of a general register as part of the address. This makes it
possible to:
\begin{itemize}
\item {Specify a complete address by using an abbreviated notation.}
\item
{ Perform address manipulation using instructions which employ general
registers for operands}
\item{ Modify addresses by program means without alteration of the
instruction stream.}
\item { Operate independently of the location of data areas by directly using
addresses received from other programs.}
\end{itemize}
The address used to refer to main storage either is contained in a
register
designated by the {\bf R} field in the instruction or is calculated from a
base
address,
index, and displacement, designated by the {\bf B}, {\bf X},
and {\bf D} fields. respectively, in the instruction.
For purposes of describing the execution of instructions, operands are
designated as first and second operands and. in some cases, third
operands.
In general, two operands participate in an instruction execution, and
the result replaces the first operand. An exception is instructions with
``store'' in the name, where the result replaces the second operand. Except for
storing the final result, the contents of all registers and storage locations
participating in the addressing or execution part of an operation remain
unchanged.
\subsection{ Instruction Format}
An instruction is one, two, or three halfwords in
length and must be located in main storage on an
integral halfword boundary. Each instruction is in
one of five basic formats: RR, RX, RS, SI, and S.
%, and SS, with two variations of SS.
Some instructions contain fields that vary slightly
from the basic format, and in some instructions the
operation performed does not follow the general
rules stated in this section. All such exceptions are
explicitly identified in the individual instruction descriptions.
The format names express, in general terms, the
classes of operands which participate in the operation: {\bf RR} denotes a
register-to-register operation;
{\bf RX}. a register-and-indexed-storage operation; {\bf RS}, a
register-and-storage operation; {\bf SI}, a storage-and-
immediate operation.
% and {\bf SS}. a storage-to-storage operation.
The {\bf S} format denotes an operation using
all implied operand and storage.
The first byte and, in the S format, the first two
bytes of an instruction contain the operation code
(op code). For some instructions in the S format, all
or a portion of the second byte is ignored. The first
two bits of the operation code specify the length and
format of an instruction, as follows:
\begin{latexonly}
\begin{tabular}{lll}
Bit Positions & Instruction & Instruction\\
0-1 & Length & Format\\
\hline
00 & One halfword & RR\\
01 & Two halfwords & RX\\
10 & Two halfwords & RS/SI/S/RX\\
% x1 & Three halfwords & SS\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
Bit Positions Instruction Instruction
0-1 Length Format
00 One halfword RR
01 Two halfwords RX
10 Two halfwords RS/SI/S/RX
\end{verbatim}
\end{htmlonly}
In the format illustration for each individual instruction
description. the opcode field shows the opcode in hexadecimal representation.
The hexadecimal representation uses one graphic for a four-bit code, and
therefore two graphics for an eight-bit code. The graphics 0-9 are used for
the codes 0000 - 1001 ; the graphics A-F are used for codes 1010 - 1111.
The remaining fields in the format illustration for each instruction
are designated by code names, consisting of a letter and possibly a subscript
number. The subscript number denotes the operand to which the field applies.
\subsection{ Register Operation}
In the RR, RX, and RS formats, the contents of the register designated by the
R1 field are called the first operand. In the RR format, the R2 field
designates the register containing the second operand, and the same register
may be designated for the first and second operand. In the RS format, the use
of the Rx field depends on the instruction.
The R field designates a general register in the general
instructions.
%and a floating-point register in the floating-point instructions.
%In the
%instructions
%LOAD CONTROL and STORE CONTROL the R field designates a control register.
Unless otherwise indicated in the individual instruction description,
the
register operand is one register in length (32 bits for a general
register ),
% or a
%control register and 64 bits for a floating-point register)
and the second operand is the same length as the first.
\subsection{ Immediate Operands}\index{Immediate}
In the SI format, the contents of the eight-bit immediate-data field,
the I2
field of the instruction, are used directly as the second operand. The
B1 and
D1 fields designate the first operand, which is one byte in length.
\subsection{ Storage Operands }
In the SI %and SS
format, the contents of the general register
designated by
the B1 field are added to the contents of the D1 field to form the
first-operand address. In the S and RS % and SS
format, the contents of the
general register designated by the B2 field are added to the contents
of the D2
field to form the second-operand address. In the RX format, the
contents of the
general registers designated by the X2 and B2 fields are added to the
contents
of the D2 field to form the second-operand address.
% in the SS format, with two length fields given, L1 specifies the
%number of
%additional operand bytes to the right of the byte designated by the
%first-operand address. Therefore, the length in bytes of the first
%operand is 1 - 1 6 , corresponding to a length code in L 1 of 0- 1 S.
%Similarly, L2 specifies the number of additional operand bytes to the right
%of the location designated by the second-operand address. Results replace the
%first operand, and are never stored out-
%side the field specified by the address and length. In the event the
%first operand is longer than the second,
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
% First Halfword second Halfword\\
% Byte1 Byte2\\
% Register Register\\
% Operand 1 Operand 2\\
\begin{figure}
{ % RX
\setlength{\unitlength}{1.0mm}
\begin{picture}(64,10)
\put(0,4){\framebox(64,6)}
\put(0,4){\makebox(16,6){Op Code}}
\put(16,4){\makebox(8,6){R$_1$}}
\put(24,4){\makebox(8,6){X$_2$}}
\put(32,4){\makebox(8,6){B$_2$}}
\put(40,4){\makebox(24,6){D$_2$}}
\put(16,4){\line(0,1){6}}
\put(24,4){\line(0,1){6}}
\put(32,4){\line(0,1){6}}
\put(40,4){\line(0,1){6}}
\footnotesize
\put(0,0){\makebox(16,6)[l]{31}}
\put(16,0){\makebox(8,6)[l]{23}}
\put(24,0){\makebox(8,6)[l]{19}}
\put(32,0){\makebox(8,6)[l]{15}}
\put(40,0){\makebox(24,6)[l]{11}}
\put(40,0){\makebox(24,6)[r]{0}}
\end{picture}
} RX Format
{ % RR
\setlength{\unitlength}{1.0mm}
\begin{picture}(64,10)
\put(0,4){\framebox(64,6)}
\put(0,4){\makebox(16,6){Op Code}} % opcode
\put(16,4){\makebox(8,6){R$_1$}}
\put(24,4){\makebox(8,6){R$_2$}}
\put(16,4){\line(0,1){6}}
\put(24,4){\line(0,1){6}}
\put(32,4){\line(0,1){6}}
\put(32,8){\line(1,1){2}}
\put(32,4){\line(1,1){6}}
\put(36,4){\line(1,1){6}}
\put(40,4){\line(1,1){6}}
\put(44,4){\line(1,1){6}}
\put(48,4){\line(1,1){6}}
\put(52,4){\line(1,1){6}}
\put(56,4){\line(1,1){6}}
\put(60,4){\line(1,1){4}}
\footnotesize
\put(0,0){\makebox(16,6)[l]{31}}
\put(16,0){\makebox(8,6)[l]{23}}
\put(24,0){\makebox(8,6)[l]{19}}
\put(32,0){\makebox(8,6)[l]{15}}
\put(40,0){\makebox(24,6)[r]{0}}
\end{picture}
} RR Format
{ % RS
\setlength{\unitlength}{1.0mm}
\begin{picture}(64,10)
\put(0,4){\framebox(64,6)}
\put(0,4){\makebox(16,6){Op Code}} % opcode
\put(16,4){\makebox(8,6){R$_1$}}
\put(24,4){\makebox(8,6){R$_3$}}
\put(32,4){\makebox(8,6){B$_2$}}
\put(40,4){\makebox(24,6){D$_2$}}
\put(16,4){\line(0,1){6}}
\put(24,4){\line(0,1){6}}
\put(32,4){\line(0,1){6}}
\put(40,4){\line(0,1){6}}
\footnotesize
\put(0,0){\makebox(16,6)[l]{31}}
\put(16,0){\makebox(8,6)[l]{23}}
\put(24,0){\makebox(8,6)[l]{19}}
\put(32,0){\makebox(8,6)[l]{15}}
\put(40,0){\makebox(24,6)[l]{11}}
\put(40,0){\makebox(24,6)[r]{0}}
\end{picture}
} RS Format
{ % SI
\setlength{\unitlength}{1.0mm}
\begin{picture}(64,10)
\put(0,4){\framebox(64,6)}
\put(0,4){\makebox(16,6){Op Code}}
\put(16,4){\makebox(16,6){I$_2$}}
\put(32,4){\makebox(8,6){B$_1$}}
\put(40,4){\makebox(24,6){D$_1$}}
\put(16,4){\line(0,1){6}}
\put(32,4){\line(0,1){6}}
\put(40,4){\line(0,1){6}}
\footnotesize
\put(0,0){\makebox(16,6)[l]{31}}
\put(24,0){\makebox(8,6)[l]{19}}
\put(32,0){\makebox(8,6)[l]{15}}
\put(40,0){\makebox(24,6)[l]{11}}
\put(40,0){\makebox(24,6)[r]{0}}
\end{picture}
} SI Format
{ % S
\setlength{\unitlength}{1.0mm}
\begin{picture}(64,10)
\put(0,4){\framebox(64,6)}
\put(0,4){\makebox(16,6){Op Code}} % opcode
\put(32,4){\makebox(8,6){B$_2$}}
\put(40,4){\makebox(24,6){D$_2$}}
\put(16,4){\line(0,1){6}}
\put(16,8){\line(1,1){2}}
\put(16,4){\line(1,1){6}}
\put(20,4){\line(1,1){6}}
\put(24,4){\line(1,1){6}}
\put(28,4){\line(1,1){4}}
\put(32,4){\line(0,1){6}}
\put(40,4){\line(0,1){6}}
\footnotesize
\put(0,0){\makebox(16,6)[l]{31}}
\put(16,0){\makebox(8,6)[l]{23}}
\put(32,0){\makebox(8,6)[l]{15}}
\put(40,0){\makebox(24,6)[l]{11}}
\put(40,0){\makebox(24,6)[r]{0}}
\end{picture}
} S Format
\end{figure}
{\em\large Five Basic Instruction Formats} \index{Instruction Format+}
%the second operand is extended with high-order zeros up to the length
%of the
%first operand. Such extension does not modify the second operand in
%storage.
% in the SS format with a single, eight-bit length
%field, L specifies the number of additional operand bytes to the right
%of the
%byte designated by the first operand address. Therefore, the length in
%bytes of
%the f irst operand is 1 - 2 5 6 , corresponding to a Length code in L
%of 0-255.
%Storage results replace the first operand and are never stored outside
%the
%field specified by the address and length. In this format, the second
%operand
%has the same length as the first operand, except for the following
%instructions: EDIT,
%EDIT AND MARK, TRANSLATE, and TRANSLATE AND TEST.
\subsection{ Address Generation}\index{Address Generation+}
The address used to refer to main storage either is contained in a
register
designated by the R field in
the instruction or is calculated from the following
three binary numbers:
\begin{description}
\item { {\em Base Address} \index{Base Address+} \label{Base}
is a 24-bit number contained in a general register
specified by
the program in a four-bit field, called the B field, in the
instruction. Base
addresses can be used as a means of independently addressing each
program and
data area. in array type calculations, it can specify the location of an
array,
and, in record-type processing, it can identify the record. The base
address
provides for addressing the entire main storage. The base address may
also be
used for indexing purposes.
}
\item { {\em Index} \index{Index+} \label{Index}
is a 24-bit number contained in a general register
designated by the program in a four-bit field, called the X field, in the
instruction. It is included only in the address specified by the RX
instruction format. The RX format instructions permit double indexing; that
is, the index can be used to provide the address of an element within an
array. }
\item { {\em Displacement } \index{Displacement+} \label{Displacement}
is a 12-bit number contained in a field, called
the D field, in the instruction. The displacement provides for relative
addressing of up to 4,095 bytes beyond the location designated by the base
address. in array-type calculations, the displacement can be used to specify
one of many items associated with an element. In the processing of records,
the displacement can be used to identify items within a record. }
\end{description}
In forming the address, the base address and index are treated as
unsigned
24-bit positive binary integers. The displacement is similarly treated
as a
12-bit positive binary integer, and 12 high-order zeros are appended.
The three
are added as 24-bit binary numbers, ignoring overflow. The sum is
always 24
bits long. The bits of the generated address are numbered 8-31 ,
corresponding
to the numbering of the base-address and index bits in the general
register.
A zero in any of the X2, B1, or B2 fields indicates the absence of the
corresponding address component. For the absent component, a zero is
used in
forming the address, regardless of the contents of General register 0. A
displacement of zero has no special significance.
An instruction can designate the same general register both for address
computation and as the location of an operand. Address computation is
completed
prior to the execution of the operation.
Unless otherwise indicated in the individual instruction definition,
the
computed operand address designates an operand in main storage. When a
main-storage operand is designated, the address designates the leftmost
byte of
the operand. For branching instructions, the second-operand address is
used as
the branch address. For shifting instructions, the second-operand
address is
not used as an address but specifies the shift amount.
\subsection{ Program Status Word}\index{PSW+} \label{IBMPSW}
%The program status word (PSW) is 64 bits in length and contains the
The program status word (PSW) is 32 bits in length and contains the
information
required for proper program execution. The PSW includes the instruction
address, condition code, and other fields. In general, the PSW is used
to
control instruction sequencing and to hold and indicate the status of
the
system in relation to the program currently being
executed. The active or controlling PSW is called the current PSW. By
storing
the current PSW during an interruption, the status of the CPU can be
preserved
for subsequent inspection. By loading a new PSW or part of a PSW, the
state of
the CPU can be initialized or changed.
\subsection{ Instruction Execution}
In program execution, the instruction is fetched from the location
designated
by the instruction address in the current PSW. The instruction address
is then
%increased by the number of bytes in the instruction in order to address
increased by one in order to address
the
next instruction in sequence. The instruction is then executed, and the
same
steps are repeated using the new value of the instruction address.
\subsection{ Branching}\index{Branching}
The normal sequential execution of instructions may be changed by the
use of
the branching instructions in order to perform subroutine linkage ,
decision making, and loop control.
Subroutine linkage is provided by the BRANCH AND LINK instructions,
which
permit not only the introduction of a new instruction address but also
the
preservation of the return address and associated information.
Facilities for decision making are provided by the BRANCH ON CONDITION
instruction. This instruction inspects a two-bit condition code that
reflects
the result of a majority of the arithmetic, logical, and I/0
operations. Each \index{Condition Code}
of these operations can set the code in any one of four states, and the
instruction BRANCH ON CONDITION can specify any selection of these four
states
as the criterion for branching. For example, the condition code
reflects such
conditions as nonzero, first operand high, equal, overflow,
%channel busy,
and
zero. Once set, the condition code remains unchanged until modified by
an instruction that causes a different condition code to be set.
The two bits of the condition code provide for four possible condition
code
settings: 0, 1 , 2, and 3. The specific meaning of any setting depends
on the
operation that sets the condition code.
Loop control can be performed by the use of BRANCH ON CONDITION to
test the
outcome of address arithmetic and counting operations. For some
particularly
frequent combinations of arithmetic and tests, the instructions BRANCH
ON
count and BRANCH ON INDEX are provided. These branches, being
specialized,
provide increased performance for these tasks.
%
The interruption system permits the CPU to change state as a result of
conditions external to the system, in input/output (I/0) units, or in
the CPU
itself.
% Six classes of interruption conditions are possible : machine check,
% supervisor call, program, external, I/0, and restart.
Four classes of interruption conditions are possible : machine check (divide
by zero),
program, external (FASTBUS access), and FASTBUS error.
\subsection{ Data Format}
The general instructions treat data as being of
%four
three types: signed
fixed-point
numbers, unsigned fixed-point numbers, and unstructured logical quantities.
% and decimal data. Data is treated as decimal by the conversion , packing,
% and
%unpacking instructions and is described in the chapter "Decimal
%Instructions."
Data resides in general registers or in storage or is
introduced from the instruction stream.
% check this !!
% In a storage-to-storage operation the operand fields may be
%defined in such a way that they overlap. The effect of this overlap depends
%upon the operation. when the operands remain unchanged, as in COMPARE or
%TRANSLATE AND TEST, overlapping does not affect the execution of the
%operation. For instructions such as MOVE and TRANSLATE. one operand is
%replaced by new data, and the execution of the operation may be affected by
%the amount of overlap and the manner in which data is fetched or stored.
%For purposes of evaluating the effect of overlapped operands, data is
%considered to be handled one eight-bit byte at a time. All overlapping fields
%are considered valid.
\subsection{ Number Representation}
Fixed-point numbers are treated as signed or unsigned integers.
In an unsigned fixed-point number, all bits are used to
express the absolute value of the number. When two unsigned fixed-point
numbers are added, the shorter number is considered to be extended with
high-order zeros.
For signed fixed-point numbers, the leftmost bit represents
the sign, which is followed by the integer field. Positive numbers are
represented in true binary notation with the sign bit set to zero. Negative
numbers are represented in two's-complement binary notation with a one in
the sign-bit position.
Specifically, a negative number is represented by the two's complement
of the
positive number. The two's complement of a number is obtained by
inverting each
bit of the number and adding a one in the low-order bit position.
This type of number representation can be considered the low-order
portion of
an infinitely long representation of the number. When the number is
positive,
all bits to the left of the most significant bit of the number are
zeros.
the number is negative, all these bits are ones. Therefore, when an
operand
must be extended with high-order bits, the expansion is achieved by
setting the
bits equal to the high-order bit of the operand.
The notation for signed fixed-point numbers does not include a
negative zero.
It has a number range in which the set of negative numbers is one
larger than
the set of positive numbers. The maximum positive number consists of an
all-one
integer field with a sign bit of zero, whereas the maximum negative
number (the
negative number with the greatest absolute value) consists of an
all-zero
integer field with a sign bit of one.
The complement of the maximum negative number cannot be represented in
the
same number of bits. when an operation, such as a subtraction of the
maximum
negative number from zero, attempts to produce the complement of the
maximum
negative number, a fixed-point overflow exception is recognized. An
overflow
does not result, however, when the maximum negative number is
complemented and
the final result is within the representable range. An example of this
case is
a subtraction of the maximum negative number from minus one. The
product of two
maximum negative numbers is representable as a double-length positive
number.
In discussions of signed fixed-point numbers in this publication, the
expression ``32-bit signed integer'' denotes a 31-bit integer with a sign
bit,
and the expression ``64-bit signed integer'' denotes a 63-bit integer
with a sign
bit.
In some operations, the result is achieved by the
use of the one's complement of the number. The
one's complement of a number is obtained by inverting each bit of the
number.
In an arithmetic operation, a carry out of the integer field changes
the
sign. However, in algebraic left-shifting the sign bit does not change
even if
significant high-order bits are shifted out.
{\bf Programming Note}\\
The integer part of a signed fixed-point number may be considered to
represent
a positive value , with the sign representing a value of either zero or
the
maximum negative number,
\subsection{ Instructions}
The general instructions and their mnemonics, formats, and operation
codes are
listed in the following table. The table also indicates when the
condition code
is set and the exceptional conditions in operand designations, data, or
results
that cause a program interruption.
Note: in the detailed descriptions of the individual instructions , the
mnemonic and the symbolic operand designations for the IBM System/370
assembly
language are shown with each instruction. For LOAD AND TEST, for
example, \hyperref{LTR}{}{}{i_LTR}
is the mnemonic and R1, R2 the operand designation.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Add}\label{i_A}\label{1_AR}
\index{Add Instruction}
\nopagebreak
\begin{figure}
\RR{AR}{1A}
\end{figure}
\begin{figure}
\RX{A}{5A}
\end{figure}
The second operand is added to the first operand, and the sum is placed
in the
first-operand location.
Addition is performed by adding all 32 bits of both operands. If the
carry out
of the sign-bit position and the carry out of the high-order numeric
bit position
agree, the sum is satisfactory; if they disagree, an overflow occurs.
The sign
bit is not changed after the overflow. A positive overflow yields a negative
final sum, and a negative overflow results in ; positive sum. The
overflow
causes a program interruption when the fixed-point overflow mask bit is
one.
Resulting Condition Code:\\
{0~~ Sum is zero}\\
{1~~ Sum is less than zero}\\
{2~~ Sum is greater than zero}\\
{3~~ Overflow}\\
Program Exceptions:\\
{ Access (fetch, operand 2 of A only)}\\
{ Fixed-Point Overflow }\\
Programming Note:\\
In two's-complement notation a zero result is always positive.
%Programming Note\\
Relevant Extended Mnemonic Instructions:
\index{Extended Mnemonic Instructions} \label{EMIA}
\begin{latexonly}
\begin{tabular}{lll}
Mnemonic & Meaning & Op Code\\
\hline \index{Overflow}
BO or BOR & Branch on Overflow & BC or BCR 1\\
BP or BPR & Branch on Plus & BC or BCR 2\\
BM or BMR & Branch on Minus & BC or BCR 4\\
BNP or BNPR & Branch on Not Plus & BC or BCR 13\\
BNM or BNMR & Branch on Not Minus & BC or BCR 11\\
BNZ or BNZR & Branch on Not Zero & BC or BCR 7\\
BZ or BZR & Branch on Zero & BC or BCR 8\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
Mnemonic Meaning Op Code
BO or BOR Branch on Overflow BC or BCR 1
BP or BPR Branch on Plus BC or BCR 2
BM or BMR Branch on Minus BC or BCR 4
BNP or BNPR Branch on Not Plus BC or BCR 13
BNM or BNMR Branch on Not Minus BC or BCR 11
BNZ or BNZR Branch on Not Zero BC or BCR 7
BZ or BZR Branch on Zero BC or BCR 8
\end{verbatim}\index{Overflow}
\end{htmlonly}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Add Halfword} \index{Add Halfword}\label{i_AH}
\nopagebreak
\begin{figure}
\RX{AH}{4A}
\end{figure}
The second operand is added to the first operand, and the sum is placed
in the
first-operand location, The second operand is two bytes in length and is
considered to be a 16-bit signed integer.
The second operand is expanded to 32 bits before the addition by
propagating
the sign-bit value through the 16 high-order bit positions. The
contents of
the second operand in main storage remain unchanged.
Addition is performed by adding all 32 bits of both operands. If the
carry out
of the sign-bit position and the carry out of the high-order numeric bit
position agree, the sum is satisfactory; if they disagree, an overflow
occurs.
The sign bit is not changed after the overflow. A positive overflow
yields a
negative final sum, and a negative overflow results in a positive sum.
The
overflow causes a program interruption when the fixed-point overflow
mask bit is
one.
Resulting Condition Code:\\
0~~ Sum is zero\\
1~~ Sum is less than zero\\
2~~ Sum is greater than zero\\
3~~ Overflow
Program Exceptions:\\
Access (fetch, operand 2)\\
Fixed-Point Overflow\\
Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIA}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Add Logical} \index{Add
Logical}\label{i_ALR}\label{i_AL}
\nopagebreak
\begin{figure}
\RR{ALR}{1E}
\end{figure}
\begin{figure}
\RX{AL}{5E}
\end{figure}
The second operand is added to the first operand, and the sum is
placed in the
first-operand location. The occurrence of a carry out of the sign
position is
recorded in the condition code.
Logical addition is performed by adding all 32 bits of both
operands without further change to the resulting sign bit. The instruction
differs from ADD in the meaning of the condition code and in the absence of
the interruption for overflow.
If a carry out of the sign position occurs, the leftmost bit
of the condition code is made one. In the
absence of a carry, the bit is made zero. When the sum is zero, the
rightmost
bit of the condition code is made zero. For a nonzero sum, the bit is
made one.
Resulting Condition Codes\\
0~~ Sum is zero, with no carry\\
1~~ Sum is not zero, with no carry\\
2~~ Sum is zero, with carry\\
3~~ Sum is not zero, with carry
Program Exceptions:\\
Access (fetch, operand 2 of AL only)
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em And} \index{AND
Instruction}\label{i_NR}\label{i_N}\label{i_NI}
\nopagebreak
\begin{figure}
\RR{NR}{14}
\end{figure}
\begin{figure}
\RX{N}{54}
\end{figure}
\begin{figure}
\SI{NI}{12}
\end{figure}
%NC D1(L,B1),D2(B2) [SS]
The AND of the first and second operands is placed
in the first-operand location.
Operands are treated as unstructured logical quantities, and the
connective
AND is applied bit by bit. A bit position in the result is set to one
if the
corresponding bit positions in both operands contain
a one; otherwise, the result bit is set to zero.
% For NC, each operand field is processed left to right. When the
%operands
%overlap, the result is obtained as if the operands were processed one
%byte at
%a time and each result byte were stored immediately after the necessary
%operand byte is fetched.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ Result not zero\\
2~~ -\\
3~~ -
Program Exceptions:\\
Access (fetch, operand 2, N )\\ %and NC
fetch and store, operand 1, NI)\\ % and NC)
Programming Note\\
The instruction AND may be used to set a bit to
zero.
% The execution of NI
% and NC
% consists in fetching a first-operand byte from
%main storage and subsequently storing the updated value. These fetch
%and store
%accesses to a particular byte do not necessarily occur one immediately
%after
%the other. Thus, the instruction AND cannot be safely used to update a
%shared
%location in main storage if the possibility exists that another CPU or
%a channel
%may also be updating the location. For NI, only one byte is stored.
%Programming Note\\
The immediate byte's position in the operand
is reversed. Given a word-aligned address D,
bytes will be accessed as follows:\\
\begin{latexonly}
\begin{tabular}{ll}
Address & Bits\\
D & D(31:24)\\
D+1 & D(23:16)\\
D+2 & D(15:8)\\
D+3 & D(7:0)\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
Address Bits
D D(31:24)
D+1 D(23:16)
D+2 D(15:8)
D+3 D(7:0)
\end{tabular}
\end{verbatim}
\end{htmlonly}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Branch and link} \index{Branch and
Link}\label{i_BALR}\label{i_BAL}
\nopagebreak
\begin{figure}
\RR{BALR}{05}
\end{figure}
\begin{figure}
\RX{BAL}{45}
\end{figure}
Information from the current PSW, including the updated instruction
address, is
loaded as link information in the general register designated by R1.
Subsequently, the instruction address is replaced by the branch address.
In the RX format, the second-operand address is used as the branch
address. In
the RR format, the contents of bit positions 23-0 of the general
register
designated by R2 are used as the branch address.
%However, when the R2 field
%contains zeros, the operation is performed without branching.
In the IBM 370, when the R2 field
contains zeros, the operation is performed without branching. In the SSP, the
assembler translates such an instruction to a BAL0 or BALR0 opcode.
The branch address is computed before the link information is loaded.
The link
information, in both the BC and EC modes, consists of
%the instruction length code ,
the condition code , the program mask bits, and the updated
instruction
address, arranged in the following format:
% Program Instruction Address
% fix this
% The instruction-length code is 1 or 2.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
None
%Programming notes\\
%When the R2 field in the RR format contains all zeros, the link
%information is
%loaded without branching. The format and the contents of the link
%information
%do not depend on whether the PSW specifies the BC or EC mode.
% When BRANCH AND LINK is the subject instruction of EXECUTE, the
%instruction-length code is 2.
% In both the BC and EC modes, the link information is in the
%format of the rightmost 32 bit positions of the BC-mode PSW.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Branch on Condition }
\index{Branching}\label{i_BC}\label{i_BCR}
\nopagebreak
\begin{figure}
\RRm{BCR}{07}
\end{figure}
\begin{figure}
\RXm{BC}{47}
\end{figure}
The updated instruction address in the current PSW is replaced by the
branch
address if the state of the
condition code is as specified by M1; otherwise, normal instruction
sequencing proceeds with the updated instruction address.
In the RX format the second-operand address is used as the
branch address. In the RR format the contents of bit positions 23-0 of the
general register specified by R2 are used as the branch address. However ,
when the R2 field contains zeros, the operation is performed without
branching.
The M1 field is used as a four-bit mask. The four bits of the mask
correspond, left to right, with the four condition codes (0, 1, 2, and
3), as follows:
\begin{latexonly}
\begin{tabular}{lll}
{\footnotesize Instruction Bit} &
{\footnotesize Mask Position Value} &
{\footnotesize Condition Code }\\
\hline
8 & 8 & 0\\
9 & 4 & 1\\
10 & 2 & 2\\
11 & 1 & 3\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
Bit Mask Condition Code
8 8 0
9 4 1
10 2 2
11 1 3
\end{verbatim}
\end{htmlonly}
The branch is successful whenever the condition code has a
corresponding mask
bit of one.
When the M1 and R2 fields of BCR are 15 and 0, respectively, a
serialization
function is performed. CPU operation is delayed until all previous
storage
accesses by this CPU to main storage have been completed, as observed by
channels and other CPUs. No subsequent instructions or their operands
are
accessed by this CPU until the execution of this instruction is
completed.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
None
Programming Notes\\
When a branch is to be made on more than one condition code, the
pertinent
condition codes are specified in the mask as the stun of their mask
position
values. A mask of 12, for example, specifies that a
branch is to be made on condition codes 0 and 1.
When all four mask bits are zero or when the R2 field in the RR format
contains zero, the branch instruction is equivalent to a no-operation.
When
all four mask bits are ones, that is, the mask value is 15, the branch
is
unconditional unless the R$_2$ field in the RX format is zero.
% Execution of BCR 15 ,0 may result in significant performance
%degradation,
%especially on larger models. To ensure optimum performance, the
%program should
%avoid use of BCR 15,0 except in cases when the serialization function is
%actually required.
Note that the relation between the RR and RX formats in branch-address
specification is not the same as in operand-address specification. For
branch
instructions in the RX format, the branch address is the address
specified by
X2, B2, and D2; in the RR format, the branch address is in the
low-order 24
bits of the register specified by R2. For operands, the address
specified by
X2, B2, and D2 is the operand address, but the register specified by R2
contains the operand itself.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Branch on Count}\label{i_BCT}\label{i_BCTR}
\nopagebreak
\begin{figure}
\RR{BCTR}{06}
\end{figure}
\begin{figure}
\RX{BCT}{46}
\end{figure}
The contents of the general register specified by R1 are algebraically
reduced
by one. When the result is zero, normal instruction sequencing proceeds
with
the updated instruction address. When the result is not zero, the
instruction
address in the current PSW is replaced by the branch address.
In the RX format, the second-operand address is used as the
branch address. In the RR format, the contents of bit positions 23-0 of the
general register specified by R2 are used as the branch address. However,
when the R2 field contains zeros, the operation is performed without
branching.
The branch address is computed before the counting operation.
Counting does not change the condition code. The overflow occurring on
transition from the maximum negative number to the maximum positive number is
ignored. Otherwise, the subtraction proceeds as in fixed-point arithmetic,
and all 32 bits of the general register participate in the operation.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions\\
None
Programming Notes\\
An initial count of one results in zero, and no branching takes place;
an
initial count of zero results in minus one and causes branching to be
executed;
an initial count of minus one results in minus 2 and causes branching
to be
executed; and so on. In a loop, branching takes place each time the
instruction
is executed until the result is again zero. Note that, because of the
number
range, an initial count of minus 231 results in the positive value of
211.
Counting is performed without branching when the R2 field in the RR
format
contains zero.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
{\large\em Branch on Index High}
\begin{figure}
\RS{BXH}{86}
\end{figure}
An increment is added to the first operand, and the sum is compared
algebraically with a comparand. Subsequently, the sum is placed in the
first-operand location, regardless of whether the branch is taken. The
second-operand address is used as the branch
address. % fix
When the sum is high, the instruction address in
the current PSW is replaced by the branch address. When the sum is low
or
equal, instruction sequencing proceeds with the updated instruction
address.
The first operand and the increment are in the registers specified by
R1 and
R3. The comparand register address is odd and is either one larger than
R3 or
equal to R3- The branch address is computed before the addition and
comparison.
Overflow caused by the addition is ignored and does not affect the
comparison.
Otherwise, the addition and comparison proceed as in fixed-point
arithmetic.
All 32 bits of the general registers participate in the operations, and
negative quantities are expressed in two's-complement notation. When
the
first operand and comparand locations coincide , the original register
contents
are used as the comparand.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
None
Programming Note\\
The name ``branch on index high'' indicates that one
of the major purposes of this instruction is the incrementing and
testing of an
index value. The increment may be algebraic and of any magnitude.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Branch on Index Low or Equal}\label{i_BXLE}
\nopagebreak
\begin{figure}
\RS{BXLE}{87}
\end{figure}
An increment is added to the first operand, and the
sum is compared algebraically with a comparand. Subsequently, the sum
is placed
in the first-operand location, regardless of whether the branch is taken.
The second-operand address is used as the branch
address.
When the sum is low or equal, the instruction
address in the current PSW is replaced by the branch address. When the
sum is
high, normal instruction sequencing proceeds with the updated instruction
address.
The first operand and the increment are in the
registers specified by R1 and R3. The comparand
register address is odd and is either one larger than
R3 or equal to Rx. The branch address is computed
before the addition and comparison.
This instruction is similar to BRANCH ON INDEX HIGH, except that the
branch is
successful
when the sum is low or equal compared to the comparand.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
None
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Compare} \index{Compare
Instruction}\label{i_C}\label{i_CR}
\nopagebreak
\begin{figure}
\RR{CR}{19}
\end{figure}
\begin{figure}
\RR{C}{59}
\end{figure}
The first operand is compared with the second operand, and the result
determines the setting of the condition code.
Comparison is algebraic, treating both comparands as 32-bit signed
integers.
Operands in registers or storage are not changed.
Resulting Condition Code:\\
0~~ Operands are equal\\
1~~ First operand is low\\
2~~ First operand is high \\
3~~ -
Program Exceptions:\\
Access (fetch, operand 2 of C only)
The first operand is compared with the second operand, and the result
determines the setting of the condition code.
Comparison is algebraic, treating both comparands as 32-bit signed
integers.
Operands in registers or storage are not changed.
Resulting Condition Code:\\
0~~ Operands are equal\\
1~~ First operand is low\\
2~~ First operand is high \\
3~~ -\\
Program Exceptions:\\
Access (fetch, operand 2 of C only)
Programming Note\\
Relevant Extended Mnemonic Instructions:
\index{Extended Mnemonic Instructions} \label{EMIC}
\begin{latexonly}
\begin{tabular}{lll}
Mnemonic & Meaning & Op Code\\
\hline
BH or BHR & Branch on A High & BC or BCR 2\\
BL or BLR & Branch on A Low & BC or BCR 4\\
BE or BER & Branch on A Equal B & BC or BCR 8\\
BNH or BNHR & Branch on A Not High & BC or BCR 13\\
BNL or BNLR & Branch on A Not Low & BC or BCR 11\\
BNE or BNER & Branch on A Not Equal B & BC or BCR 7\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
Mnemonic Meaning Op Code
BH or BHR Branch on A High BC or BCR 2
BL or BLR Branch on A Low BC or BCR 4
BE or BER Branch on A Equal B BC or BCR 8
BNH or BNHR Branch on A Not High BC or BCR 13
BNL or BNLR Branch on A Not Low BC or BCR 11
BNE or BNER Branch on A Not Equal B BC or BCR 7
\end{verbatim}
\end{htmlonly}
%\end{document}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Compare Halfword}\label{i_CH}
\nopagebreak
\begin{figure}
\RX{CH}{49}
\end{figure}
The first operand is compared with the second operand, and the result
determines the setting of the condition code. The second operand is two
bytes
in length and is considered to be a 16-bit signed integer.
The second operand is expanded to 32 bits before the comparison by
propagating the sign-bit value through the 16 high-order bit positions.
Comparison is algebraic, treating both comparands as 32-bit signed
integers.
Operands in registers or storage are not changed.
Resulting Condition Code:\\
0~~ Operands are equal\\
1~~ First operand is low\\
2~~ First operand is high\\
3~~ -
Program Exceptions:\\
Access (fetch, operand 2)
Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIC}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Compare Logical}\label{i_CLR}
\nopagebreak
\begin{figure}
\RR{CLR}{15}
\end{figure}
\begin{figure}
\RX{CL}{55}
\end{figure}
\begin{figure}
\SI{CLI}{31}
\end{figure}
%CLC D1(L,B1),D2(B2) [SS]
The first operand is compared with the second operand, and the result is
indicated in the condition
code.
The comparison is performed with the operands considered as binary
unsigned
quantities, with all codes valid. The operation proceeds left to right
and ends
as soon as an inequality is found or an end of the fields is reached.
When part of an operand in CL or CLC is designated in an inaccessible
location
but the operation can be completed by using the accessible operand
parts, it is
unpredictable whether the access exception for the inaccessible part
is
recognized.
Resulting Condition Code:\\
0~~ Operands are equal\\
1~~ First operand is low\\
2~~ First operand is high\\
3~~ -
Program Exceptions:\\
Access (fetch, operand 2, CL and CLC; fetch,
operand 1, CLI and CLC)
Programming Note\\
The COMPARE LOGICAL instruction treats all bits alike as part of an
unsigned
binary quantity.
%In variable-length operation, comparison may extend to
%field
%lengths of 256 bytes. The operation may be used to compare unsigned
%packed
%decimal fields or alphameric information in any code that has a
%collating
%sequence based on ascending or descending binary values. For example,
%EBCDIC
%has a collating sequence based on ascending binary values.
%Programming Note\\
The immediate byte's position in the operand
is reversed. Given a word-aligned address D,
bytes will be accessed as follows:\\
\begin{latexonly}
\begin{tabular}{ll}
Address & Bits\\
D & D(31:24)\\
D+1 & D(23:16)\\
D+2 & D(15:8)\\
D+3 & D(7:0)\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
\begin{tabular}{ll}
Address Bits
D D(31:24)
D+1 D(23:16)
D+2 D(15:8)
D+3 D(7:0)
\end{verbatim}
\end{htmlonly}
%Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIC}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Divide} \index{Divide Instruction}\label{i_D}\label{i_DR}
\nopagebreak
\begin{figure}
\RR{DR}{1D}
\end{figure}
\begin{figure}
\RX{D}{5D}
\end{figure}
The dividend (first operand) is divided by the divisor (second operand)
and
replaced by the remainder and the quotient.
The dividend is a 64-bit signed integer and occupies the even-odd pair
of
registers specified by the R1 field of the instruction. A specification
exception occurs when R1 is odd. A 32-bit signed remainder and a 32-bit
signed
quotient replace the dividend in the even-numbered and odd-numbered
registers,
respectively. The divisor is a 32-bit signed integer.
The sign of the quotient is determined by the rules of algebra. The
remainder
has the same six as the dividend, except that a zero quotient or a zero
remainder is always positive. When the relative magnitude of dividend
and
% check this
divisor is such that the quotient cannot be expressed by a 32-bit signed
integer, a fixed-point divide exception is recognized (a program
interruption
occurs, no division takes place, and the dividend remains unchanged in
the
general registers).
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (fetch, operand 2 of D only) Specification\\
Fixed-Point Divide
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em exclusive OR}\label{i_XR}\label{i_X}\label{i_XI}
\nopagebreak
\begin{figure}
\RR{XR}{17}
\end{figure}
\begin{figure}
\RX{X}{57}
\end{figure}
\begin{figure}
\SI{XI}{97}
\end{figure}
%XC D1 (L,B1),D2(B2) [SS]
The EXCLUSIVE OR of the first and second operands is placed in the
first-operand location.
Operands are treated as unstructured logical quantities, and the
connective
EXCLUSIVE OR is applied bit by bit. A bit position in the result is set
to one
if the corresponding bit positions in the two operands are unlike ;
otherwise ,
the result bit is set to zero.
% For XC, each operand field is processed left to right. When the
%operands
%overlap, the result is obtained as if the operands were processed one
%byte at a
%time and each result byte were stored immediately after the necessary
%operand
%byte is fetched.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ Result not zero\\
2~~ -\\
3~~ -
Program Exceptions:\\
% Access (fetch, operand 2, X and XC; fetch and store, operand 1, XI and
Access (fetch, operand 2, X ; fetch and store, operand 1, XI
)
Programming Note\\
The instruction EXCLUSIVE OR may be used to invert a bit, an operation
particularly useful in testing and setting programmed binary bit
switches.
A field EXCLUSIVE-ORed with itself becomes all zeros.
The sequence A EXCLUSIVE-ORed B, B EXCLUSIVE-ORed A, A EXCLUSIVE-ORed B
results in the exchange of the contents of A and B without the use of an
auxiliary buffer area.
% The execution of XI
%and XC
% consists in fetching a first-operand byte
%from main
%storage and subsequently storing the updated value. These fetch and
%store
%accesses to a particular byte do not necessarily occur one
%immediately after
%the other. Thus, the
%Programming Note\\
The immediate byte's position in the operand
is reversed. Given a word-aligned address D,
bytes will be accessed as follows:\\
\begin{latexonly}
\begin{tabular}{ll}
Address & Bits\\
D & D(31:24)\\
D+1 & D(23:16)\\
D+2 & D(15:8)\\
D+3 & D(7:0)\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
\begin{tabular}{ll}
Address Bits
D D(31:24)
D+1 D(23:16)
D+2 D(15:8)
D+3 D(7:0)
\end{verbatim}
\end{htmlonly}
\subsection{ Insert Character}
\RX{IC}{43}
The byte at the second-operand location is inserted
into bit positions 11-0 of the general register designated by the R1
field.
The remaining bits in the register remain unchanged.
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (fetch, operand 2)
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load} \index{Load Instruction}\label{i_L}\label{i_LR}
\nopagebreak
\begin{figure}
\RR{LR}{18}
\end{figure}
\begin{figure}
\RX{L}{58}
\end{figure}
The second operand is placed unchanged in the first operand location.
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (fetch, operand 2 of L only)
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load Address}\label{i_LA}
\nopagebreak
\begin{figure}
\RX{LA}{41}
\end{figure}
The address specified by the X2, B2, and D2 fields is inserted in bit
positions 23-0 of the general register specified by the R1 field. Bits
24-31 of
the register are set to zeros. The address computation follows the
rules for
address arithmetic.
No storage references for operands take place, and the address is
not inspected
for access exception
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
None.
programming Note\\
The same general register may be specified by the RI, X2, and B2
instruction
field, except that general register 0 can be specified only by the R1
field. ln
this manner it is possible to increment the low-order 24 bits of a
general
register, other than 0, by the contents of the D2 field of the
instruction. The
register to be incremented should be specified by R1 and by either X2
(with B2
set to zero) or B2 (with X2 set to zero).
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load and test}\label{i_LTR}
\nopagebreak
\begin{figure}
\RR{LTR}{12}
\end{figure}
The second operand is placed unchanged in the first operand location,
and the
sign and magnitude of the second operand determine the condition code.
Condition Code:\\
0 Result is zero\\
1 Result is less than zero\\
2 Result is greater than zero\\
3 -
Program Exceptions:\\
None.
Programming Note\\
When the R1 and R2 fields designate the same register, the operation is
equivalent to a test without data movement.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load Complement} \label{i_LCR}
\nopagebreak
\begin{figure}
\RR{LCR}{13}
\end{figure}
The two's complement of the second operand is placed in the
first-operand
location.
An overflow condition occurs when the maximum negative number is
complemented;
the number remains unchanged. The overflow causes a program
interruption when
the fixed-point overflow mask bit is one.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ Result is less than zero\\
2~~ Result is greater than zero\\
3~~ Overflow
Program Exceptions:\\
Fixed-Point Overflow
Programming Note\\
Zero remains unchanged by complementation.
%Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIA}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load Halfword}\label{i_LH}
\nopagebreak
\begin{figure}
\RX{LH}{48}
\end{figure}
The second operand is placed in the first-operand location. The second
operand
is two bytes in length and is considered to be a 16-bit signed integer.
The second operand is expanded to 32 bits by propagating the sign-bit
value
through the 16 high order bit positions. Expansion occurs after the
operand
is obtained from storage and before insertion in the register.
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (fetch, operand 2)
Programming Note\\
The second operand is a 16-bit integer. Given a word-aligned address
D, the instruction LH R1,D will move bits 31:16 of D to bits 15:0 of
R1.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load Multiple}\label{i_LM}
\nopagebreak
\begin{figure}
\RS{LM}{98}
\end{figure}
The set of general registers starting with the register specified by R1
and
ending with the register specified by R3 is loaded from the locations
designated by the second-operand address.
The storage area from which the contents of the general registers are
obtained starts at the location designated by the second-operand address
and
continues through as many locations as needed. The general registers
are
loaded in the ascending order of their addresses, starting with the
register
specified by R1 and continuing up to and including the register
specified by
R3, with register 0 following register 15.
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (fetch, operand 2)
Programming Note\\
All combinations of register addresses specified by R1 and R3 are
valid. When
the register addresses are equal, only one word is transmitted. When
the
address specified by R3 is less than the address specified by R1, the
register
addresses wrap around from 15 to 0.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load Negative}\label{i_LNR}
\nopagebreak
\begin{figure}
\RR{LNR}{11}
\end{figure}
The two's complement of the absolute value of the second operand is
placed in
the first-operand location.
The operation complements positive numbers; negative numbers remain
unchanged.
The number zero remains unchanged with positive sign.
Condition Code:\\
0~~ Result is zero\\
1~~ Result is less than zero\\
2~~ -\\
3~~ -
Program Exceptions:\\
None.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Load Positive}\label{i_LPR}
\nopagebreak
\begin{figure}
\RR{LPR}{xx} % fix this
\end{figure}
The absolute value of the second operand is placed in the first-operand
location.
The operation includes complementation of negative numbers; positive
numbers
remain unchanged.
An overflow condition occurs when the maximum negative number is
complemented;
the number remains unchanged. The overflow causes a program
interruption when
the fixed-point overflow mask bit is one.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ -\\
2~~ Result is greater than zero\\
3~~ Overflow\\
Program Exceptions\\
Fixed-Point Overflow
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Move}\label{i_MVI}
\nopagebreak
\begin{figure}
\SI{MVI}{92}
\end{figure}
% MVC D1(L,B1),D2(B2) [SS]
I The second operand is placed in the first-operand location.
% For MVC, each operand field is processed left to right, When the
%operands
%overlap, the result is obtained as if the operands were processed one
%byte at a
%time and each result byte were stored immediately after the necessary
%operand
%byte is fetched.
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
% Access (fetch, operand 2 of MVC; store, operand 1, MVI and MVC)
Access (store, operand 1, MVI)
%Programming Note\\
%It is possible to propagate one character through an entire field by
%having
%the first-operand field staa
%one character to the right of the second-operand field.
Programming Note\\
The immediate byte's position in the operand
is reversed. Given a word-aligned address D,
bytes will be accessed as follows:\\
\begin{latexonly}
\begin{tabular}{ll}
Address & Bits\\
D & D(31:24)\\
D+1 & D(23:16)\\
D+2 & D(15:8)\\
D+3 & D(7:0)\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
\begin{tabular}{ll}
Address Bits
D D(31:24)
D+1 D(23:16)
D+2 D(15:8)
D+3 D(7:0)
\end{verbatim}
\end{htmlonly}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Multiply}\label{i_MR}\label{i_M}
\nopagebreak
\begin{figure}
\RR{MR}{1C}
\end{figure}
\begin{figure}
\RX{M}{5C}
\end{figure}
The product of the multiplier (the second operand)
and the multiplicand (the first operand) replaces the multiplicand.
Both multiplier and multiplicand are 32-bit signed integers. The
product is
always a 64-bit signed integer and occupies an even-odd register pair.
Because
the multiplicand is replaced by the product, the R1
field of the instruction must refer to an even-
numbered register. A specification exception occurs
when R1 is odd. The multiplicand is taken from the
odd register of the pair. The contents of the even numbered register
replaced by
the product are ignored, unless the register contains the multiplier. An
overflow cannot occur.
The sign of the product is determined by the rules
of algebra from the multiplier and multiplicand sign, except that a
zero result
is always positive.
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (fetch, operand 2 of M only)\\
Specification
Programming Note\\
The significant part of the product usually occupies
62 bits or fewer. Only when two maximum negative numbers are multiplied
are 63
significant product
bits formed. Since two's-complement notation is
used, the sign bit is extended right until the first significant
product digit
is encountered.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Multiply Halfword}\label{i_MH}
\nopagebreak
\begin{figure}
\RX{MH}{4C}
\end{figure}
The product of the multiplier (second operand) and multiplicand (first
operand)
replaces the multiplicand. The second operand is two bytes in length and
is considered to be a 16-bit signed integer.
Both multiplicand and product are 32-bit signed integers and may be
located in
any general register.
The 16-bit multiplier is expanded to 32 bits before multiplication by
propagating the six-bit value
through the 16 high-order bit positions. The multiplicand is replaced
by the
low-order part of the product. The bits to the left of the 32 low-order
bits are
not tested for significance; no overflow indication is given.
The sign of the product is determined by the rules of algebra from
the
multiplier and multiplicand sign,
except that a zero result is always positive.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (fetch, operand 2)
Programming Note\\
The significant part of the product usually occupies 46 bits or fewer,
the
exception being 47 bits when both operands are maximum negative. Since
the
low-order 32 bits of the product are stored unchanged, ignoring all
bits to the
left, the sign bit of the result may differ from the true sign of the
product
in the case of overflow.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em OR}\label{i_OR}\label{i_O}\label{i_OI}
\nopagebreak
\begin{figure}
\RR{OR}{16}
\end{figure}
\begin{figure}
\RX{O}{56}
\end{figure}
\begin{figure}
\SI{OI}{96}
\end{figure}
% OC D1(L,B1),D2(B2) [SS]
The OR of the first and second operands is placed in the first-operand
location.
Operands are treated as unstructured logical quantities, and the
connective
OR is applied bit by bit. A bit position in the result is set to one if
the
corresponding bit position in one or both operands contains a one;
otherwise,
the result bit is set to zero.
% For OC, each operand field is processed left to
% When the operands overlap, the result is obtained as if the operands
%were processed one byte at a time and each result
%byte were stored immediately after the necessary operand byte is fetched.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ Result not zero\\
2~~ -\\
3~~ -
Program Exceptions:\\
% Access (fetch, operand 2, 0 and OC; fetch and store, operand 1, 01 and
%OC)
Access (fetch, operand 2, 0; fetch and store, operand 1, 0I)
Programming Note\\
The instruction OR may be used to set a bit to one.
% The execution of OI and OC consists in fetching a first-operand byte
%from main
%storage and subsequently storing the updated value. These fetch and
%store
%accesses to a particular byte do not necessarily occur one immediately
%after
%the other. Thus, the instruction OR cannot be safely used to update a
%shared
%location in main storage if the possibility exists that another CPU may
%also be
%updating the location. For 01, only one byte is stored.
%
%Programming Note\\
The immediate byte's position in the operand
is reversed. Given a word-aligned address D,
bytes will be accessed as follows:\\
\begin{latexonly}
\begin{tabular}{ll}
Address & Bits\\
D & D(31:24)\\
D+1 & D(23:16)\\
D+2 & D(15:8)\\
D+3 & D(7:0)\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
\begin{tabular}{ll}
Address Bits
D D(31:24)
D+1 D(23:16)
D+2 D(15:8)
D+3 D(7:0)
\end{verbatim}
\end{htmlonly}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Set program Mask }\label{i_SPM}
\nopagebreak
\begin{figure}
\RR{SPM}{04}
\end{figure}
Bits 12-14 of the general register specified by the R1 field replace
the condition code and the program mask bits of the current PSW. Other bits
of the instruction are ignored.
The contents of the register specified by the. R1 field remain unchanged.
% The instruction permits setting of the condition code and the mask
%bits in
%either the problem or supervisor state.
Resulting Condition Code:\\
The code is set according to bits 12 and 13 of the register specified
by R1.
Program Exceptions:\\
None
Programming Note\\
Bits 14-15 of the general register may have been loaded from the PSW by
BRANCH
AND LINK.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Left Double}\label{i_SLDA}
\nopagebreak
\begin{figure}
\RSa{SLDA}{8F}
\end{figure}
The double-length integer part of the first operand is shifted left the
number
of bits specified by the second-operand address. Bits 16-19 of the
instruction are ignored.
The R1 field of the instruction specifies an even-odd pair of registers
and
must designate an even numbered register. When R1 is odd, a specification
exception is recognized.
The second-operand address is not used to address data; its low-order
six bits
indicate the number of bit positions to be shifted. The remainder of the
address is ignored.
The first operand is treated as a number with 63 integer bits and a
sign in
the sign position of the
even register. The sign remains unchanged. The low-order position of
the odd
register contains an integer bit, and the contents of the odd register
participate in the shift in the same manner as the other integer bits.
Zeros
are supplied to the vacated positions of the registers.
If a bit unlike the sign bit is shifted out of bit position 1 of the
even
register, an overflow occurs. The overflow causes a program
interruption when
the fixed-point overflow mask bit is one.
Resulting Condition Code:\\
0~~ Result is zero\\
I~~ Result is less than zero\\
2~~ Result is greater than zero\\
3~~ Overflow
Program Exceptions:\\
Specification\\
Fixed-Point Overflow
programming Notes\\
The eight shift instructions provide the following three pairs of
alternatives:
left or right, single or double, and algebraic or logical. The
algebraic shifts
differ from the logical shifts in that, in the algebraic shifts,
overflow is
recognized, the condition code is set, and the high-order bit
participates as a
sign.
The maximum shift amount which can be specified is 63. For algebraic
shifts
this is sufficient to shift out the entire integer field. Since 64 bits
participate in the double-logical shifts, the entire register contents
cannot be
shifted out.
A zero shift amount in the two algebraic double-shift operations
provides a
double-length sign and magnitude test.
The base register participating in the generation of the second-operand
address permits indirect specification of the shift amount. A zero in
the B2
field indicates the absence of indirect shift specification.
%Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIA}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Left Double Logical}\label{i_SLDL}
\nopagebreak
\begin{figure}
\RSa{SLDL}{8D}
\end{figure}
The double-length first operand is shifted left the number of bits
specified
by the second-operand address. Bits 16-19 of the instruction are
ignored.
The R1 field of the instruction specifies an even-odd pair of registers
and
must designate an even-numbered register. When R1 is odd, a specification
exception is recognized.
The second-operand address is not used to address data; its low-order
six bits
indicate the number of bit positions to be shifted. The remainder of the
address is ignored.
All 64 bits of the first operand participate in the shift. High-order
bits are
shifted out of the even-numbered register without inspection and are
lost.
zeroes are supplied to the vacated positions of the registers.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Specification
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Left Single}\label{i_SLA}
\nopagebreak
\begin{figure}
\RSa{SLA}{8B}
\end{figure}
The integer part of the first operand is shifted left the number of
bits specified by the second-operand address. Bits 16-19 of the
instruction are ignored.
The second-operand address is not used to address data ; ix
low-ordered six
bits indicate the number of bit positions to be shifted. The remainder
of the
address is ignored.
The sign of the first operand remains unchanged. All 31 integer
bits of the
operand participate in the left shift. Zeros are supplied to the vacated
low-order register positions.
If a bit unlike the sign bit is shifted out of position 1 , an overflow
occurs. The overflow causes a program interruption when the fixed-point
overflow mask bit is one.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ Result is less than zero\\
2~~ Result is greater than zero\\
3~~ Overflow\\
Program Exceptions:\\
Fixed-Point Overflow
Programming Note\\
For numbers with an absolute value of less than 230 a left shift of one
bit
position is equivalent to multiplying the number by two.
Shift amounts from 31-63 cause the entire integer to be shifted out of
the
register. When the entire integer field for a positive number has been
shifted
out, the register contains a value of zero. For a negative number, the
register
contains a value of -231
%Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIA}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Left Single Logical}\label{i_SLL}
\nopagebreak
\begin{figure}
\RSa{SLL}{89}
\end{figure}
The first operand is shifted left the number of bits specified by the
second-operand address. Bits 16-19 of the instruction are ignored.
The second-operand address is not used to address data; its low-order
six bits
indicate the number of bit positions to be shifted. The remainder of the
address is ignored.
All 32 bits of the first operand participate in the shift. High-order
bits are
shifted out without inspection and are lost. Zeros are supplied to the
vacated
low-order register positions.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
None
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Right Double}\label{i_SRDA}
\nopagebreak
\begin{figure}
\RSa{SRDA}{8E}
\end{figure}
The double-length integer part of the first operand is shifted right
the
number of places specified by the second-operand address. Bits 16-19 of
the
instruction are ignored.
The R1 field of the instruction specifies an even-odd pair of
registers and
must designate an even numbered register. When R1 is odd, a
specification
exception is recognized.
The second-operand address is not used to address data; its
low-order six bits indicate the number of bit positions to be shifted. The
remainder of the address is ignored.
The first operand is treated as a number with 63 integer bits
and a sign in the sign position of the even register. The sign remains
unchanged. The high-order position of the odd register contains an integer
bit, and the contents of the odd register participate in the shift in the
same manner as the other integer bits. The low-order bits are shifted out
without inspection and are lost. Bits equal to the sign are supplied to the
vacated positions of the registers.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ Result is less than zero\\
2~~ Result is greater than zero\\
3~~ -
Program Exceptions:\\
Specification
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Right Double Logical}\label{i_SRDL}
\nopagebreak
\begin{figure}
\RSa{SRDL}{8C}
\end{figure}
The double-length first operand is shifted right the number of bits
specified
by the second-operand address. Bits 16-19 of the instruction are ignored.
The R1 field of the instruction specifies an even-odd pair of
registers and
must designate an even numbered register. When R1 is odd, a specification
exception is recognized.
The second-operand address is not used to address data; its low-order
six bits indicate the number of bit positions to be shifted. The remainder
of the
address is ignored.
All 64 bits of the first operand participate in the shift. Low-order
bits are
shifted out of the odd-numbered register without inspection and are
lost. Zeros
are supplied to the vacated positions of the registers.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Specification\\
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Right Single}\label{i_SRA}
\nopagebreak
\begin{figure}
\RSa{SRA}{8A}
\end{figure}
The integer part of the first operand is shifted right the number of
bits
specified by the second-operand address. Bits 16-19 of the instruction
are
ignored.
The second-operand address is not used to address data; its low-order
six
bits indicate the number of bit positions to be shifted. The remainder
of the
address is ignored.
The sign of the first operand remains unchanged. All 31 integer bits
of the operand participate in the right shift. Bits equal to the sign are
supplied to
the vacated high-order bit positions. Low-order bits are shifted out
without
inspection and are lost.
Resulting Condition Code:\\
0~~ Result is zero\\
1~~ Result is less than zero\\
2~~ Result is greater than zero\\
3~~ -
Program Exceptions:\\
None
Programming Note\\
A right shift of one bit position is equivalent to division by two with
rounding downward. When an even number is shifted right one position,
the
value of the field is that obtained by dividing the value by 2. When an
odd
number is shifted right one position, the value of the field is that
obtained
by dividing the {\em next lower} number by two. For example, +5 shifted right
by one
bit position yields +2, whereas -5 yields -3.
Shift amounts from 31-63 cause the entire integer to be
shifted out of the register. When the entire integer field of a positive
number has been shifted out, the register contains a value of zero. For a
negative number, the register contains a value of -1.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Shift Right Single Logical}\label{i_SRL}
\nopagebreak
\begin{figure}
\RSa{SRL}{88}
\end{figure}
The first operand is shifted right the number of bits specified by the
second-operand address. Bits 16-19 of the instruction are ignored.
The second-operand address is not used to address data; its low-order
six bits indicate the number of bit positions to be shifted. The remainder
of the
address is ignored.
All 32 bits of the first operand participate in the shift. Low-order
bits are shifted out without inspection and are lost. Zeros are supplied to the
vacated
high-order register positions.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
None
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Store}\label{i_ST}
\nopagebreak
\begin{figure}
\RX{ST}{50}
\end{figure}
The first operand is stored at the second-operand location.
The 32 bits in the general register are placed unchanged at the
second-operand location.
Resulting condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (store, operand 2)
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Store Character}\label{i_STC}
\nopagebreak
\begin{figure}
\RX{STC}{42}
\end{figure}
The contents of bit positions 7-0 of the general register designated
by the
R1 field are placed unchanged at the second-operand location. The
second
operand is one byte in length.
Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (store , operand 2)
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Store Halfword}\label{i_STH}
\nopagebreak
\begin{figure}
\RX{STH}{40}
\end{figure}
The contents of bit positions 15-0 of the general register designated
by the
R1 field are placed unchanged at the second-operand location. The second
operand is two bytes in length.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (store, operand 2)
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Store Multiple}\label{i_STM}
\nopagebreak
\begin{figure}
\RS{STM}{90}
\end{figure}
The set of general registers starting with the register specified by R1
and
ending with the register specified by R15 is stored at the locations
designated
by the second-operand address.
The storage area where the contents of the general registers are
placed
starts at the location designated
by the second-operand address and continues
through as many locations as needed. The general
registers are stored in the ascending order of their
addresses, starting with the register specified by R1
and continuing up to and including the register specified by Rx, with
register 0 following register 15.
Resulting Condition Code:\\
The code remains unchanged.
Program Exceptions:\\
Access (store, operand 2)
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Subtract}\label{i_SR}\label{i_S}
\nopagebreak
\begin{figure}
\RR{SR}{1B}
\end{figure}
\begin{figure}
\RX{S}{5B}
\end{figure}
The second operand is subtracted from the first operand, and the
difference is
placed in the first operand location.
Subtraction is considered to be performed by adding the one's
complement of
the second operand and a low-order one to the first operand. All 32
bits of
both operands participate, as in ADD. If the carry out of the sign-bit
position
and the carry out of the high-order numeric bit position agree, the
difference
is satisfactory; if they disagree, an overflow occurs. The overflow
causes a
program interruption when the fixed-point overflow mask bit is one.
Resulting Condition Code:\\
0~~ Difference is zero\\
1~~ Difference is less than zero\\
2~~ Difference is greater than zero\\
3~~ Overflow\\
Program Exceptions:\\
Access (fetch, operand 2 of S only)\\
Fixed-Point Overflow
Programming Note\\
The use of the one's complement and the low-order one instead of the
two's
complement of the second operand is necessary for proper recognition of
overflow when subtracting the maximum negative number.
When, in the RR format, the R1 and R2 fields designate the same
register,
subtracting is equivalent to clearing the register.
Subtracting a maximum negative number from another maximum negative
number
gives a zero result and no overflow.
%Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIA}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Subtract halfword}\label{i_SH}
\nopagebreak
\begin{figure}
\RX{SH}{4B}
\end{figure}
The second operand is subtracted from the first operand, and the
difference is
placed in the first-operand location. The second operand is two bytes
in length
and is considered to be a 16-bit signed integer.
The second operand is expanded to 32 bits before the subtraction by
propagating the sign-bit value through the 16 high-order bit positions.
Subtraction is considered to be performed by adding the one's
complement of
the expanded second operand and a low-order one to the first operand.
All 32
bits of both operands participate, as in ADD. If the carry out of the
sign-bit
position and the carry out of the high-order numeric bit position
agree, the
difference is satisfactory; ir they disagree, an overflow' occurs. The
overflow
causes a program interruption when the fixed-point overflow mask bit is
one.
Resulting Condition Code:\\
0~~ Difference is zero\\
1~~ Difference is less than zero\\
2~~ Difference is greater than zero\\
3~~ Overflow
Program Exceptions:\\
Access (fetch, operand 2)\\
Fixed-Point Overflow
Programming Note\\
See Extended Mnemonic Instructions on page~\pageref{EMIA}
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Subtract Logical}\label{i_SLR}\label{i_SL}
\nopagebreak
\begin{figure}
\RR{SLR}{1F}
\end{figure}
\begin{figure}
\RX{SL}{5F}
\end{figure}
The second operand is subtracted from the first operand, and the
difference is
placed in the first
operand location. The occurrence of a carry out of the sign position is
recorded in the condition code.
Logical subtraction is considered to be performed by adding the one's
complement of the second operand and a low-order one to the first
operand. All
32 bits of both operands participate, without further change to the
resulting
sign bit. The instruction differs from SUBTRACT in the meaning of the
condition
code and in the absence of the interruption for overflow.
If a carry out of the sign position occurs, the leftmost bit of the
condition
code is made one. In the absence of a carry, the bit is made zero. When
the sum
is zero, the rightmost bit of the condition code
is made zero. For a nonzero sum, the bit is made one.
Resulting Condition Code:\\
0~~ -\\
1~~ Difference is not zero, with no carry\\
2~~ Difference is zero, with carry\\
3~~ Difference is not zero, with carry
Program Exceptions:\\
Access (fetch, operand 2 of SL only)
Programming Note\\
the use of the one's complement and the low-order one instead of the
two's
complement of the second operand results in the recognition of carry
when
subtracting zero or the maximum negative number. A zero difference
cannot be
obtained without a carry out of the sign position.
\vspace {1ex}
\begin{latexonly}
\doublepagebreak
\end{latexonly}
\subsubsection{\em Test Under Mask }\label{i_TM}
\nopagebreak
\begin{figure}
\SI{TM}{91}
\end{figure}
The state of the first-operand bits selected by a mask
is used to set the condition code.
The byte of immediate data, I3, is used as an
eight-bit mask. The bits of the mask are made to
correspond one for one with the bits of the character
in storage specified by the first-operand address.
A mask bit of one indicates that the storage bit is
to be tested. When the mask bit is zero, the storage
bit is ignored. When all storage bits thus selected
are zero, the condition code is made 0. The code is
also made 0 when the mask is all zeros. When the
selected bits are all ones, the code is made 3 ; otherwise , the code
is made 1. The character in storage is
not changed.
Access Exceptions associated with the storage
operand are recognized f or one byte , even when the
mask is all zeros.
Resulting Condition Code:\\
0~~ Selected bits all zeros ; or the mask is all zeros\\
1~~ Selected bits mixed zeros and ones\\
2~~ -\\
3~~ Selected bits all ones
Program Exceptions:\\
Access (fetch, operand 1 )
\subsection{ TM Test under Mask}
Programming Note\\
The immediate byte's position in the operand
is reversed. Given a word-aligned address D,
bytes will be accessed as follows:\\
\begin{latexonly}
\begin{tabular}{ll}
Address & Bits\\
D & D(31:24)\\
D+1 & D(23:16)\\
D+2 & D(15:8)\\
D+3 & D(7:0)\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
\begin{tabular}{ll}
Address Bits
D D(31:24)
D+1 D(23:16)
D+2 D(15:8)
D+3 D(7:0)
\end{verbatim}
\end{htmlonly}
%Programming Note\\
Relevant Extended Mnemonic Instructions:
\index{Extended Mnemonic Instructions} \label{EMIT}
\begin{latexonly}
\begin{tabular}{lll}
Mnemonic & Meaning & Op Code\\
\hline
BO or BOR & Branch if Ones & BC or BCR 1\\
BM or BMR & Branch if Mixed & BC or BCR 4\\
BZ or BZR & Branch if Zeroes & BC or BCR 8\\
BNO or BNOR & Branch if Not Ones & BC or BCR 14\\
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
Mnemonic Meaning Op Code
BO or BOR Branch if Ones BC or BCR 1
BM or BMR Branch if Mixed BC or BCR 4
BZ or BZR Branch if Zeroes BC or BCR 8
BNO or BNOR Branch if Not Ones BC or BCR 14
\end{verbatim}
\end{htmlonly}
\begin{latexonly}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 5: SSP Specific Instructions }}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
04 & SPM & SET PROGRAM MASK & RR\\
0A & BCTR0 & SPECIAL BCTR & RR\\
0B & BCR0 & SPECIAL BCR & RR\\
09 & BALR0 & SPECIAL BALR & RR\\
44 & BALM & BRANCH AND SAVE MASKS & RR\\
03 & BALRM & BRANCH AND SAVE MASKS & RR\\
08 & BALR0M & SPECIAL BALR (SAVE MASKS) & RR\\
20 & LAF & LOAD ADDRESS, AS UP & RX\\
21 & BCTF & BRANCH ON COUNT, AS UP & RX\\
22 & BCF & BRANCH ON CONDITION, AS UP & RX\\
23 & STF & STORE, AS UP & RX\\
24 & NF & AND, AS UP & RX\\
25 & OF & OR, AS UP & RX\\
26 & XF & EXCLUSIVE OR, AS UP & RX\\
27 & LF & LOAD, AS UP & RX\\
28 & CF & COMPARE, AS UP & RX\\
29 & AF & ADD, AS UP & RX\\
2A & SF & SUBTRACT, AS UP & RX\\
30 & FPAI & PRIMARY ADDRESS, IGNORE SS & RX\\
31 & FPWNTAI & SECONDARY ADDRESS, IGNORE SS & RX\\
32 & FPWIG & WRITE RANDOM, IGNORE SS & PL\\
60 & FPA & PRIMARY ADDRESS & RX\\
61 & FPWNTA & SECONDARY ADDRESS & RX\\
62 & FPR & READ RANDOM & RX\\
63 & FPRNTA & READ SECONDARY ADDRESS & RX\\
64 & FPRB2 & READ BLOCK (SS=2) & RX\\
65 & FPRB2C & READ BLOCK (SS=2, COUNT GUARD) & PL\\
66 & FPRBC & READ BLOCK (COUNT) & PL\\
67 & FPW & WRITE RANDOM & PL\\
68 & FPWI & WRITE RANDOM INDIRECT & PL\\
69 & FPWBC & WRITE BLOCK (COUNT) & PL\\
6E & WCSR0,HALT & WRITE CSR\#0 & RX\\
6F & RCSR0 & READ CSR\#0 & RX\\
7A & FR & PRIMARY, SECONDARY, READ RANDOM & PL\\
7B & FRB2 & PRIMARY, SECONDARY, READ BLOCK & PL\\
7C & FRB2C & PRIMARY, SECONDARY, READ BLOCK & PL\\
7D & FRBC & PRIMARY, SECONDARY, READ BLOCK & PL\\
7E & FW & PRIMARY, SECONDARY, WRITE RAND. & PL\\
7F & FWBC & PRIMARY, SECONDARY, WRITE BLOCK & PL\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 5: SSP Specific Instructions (continued)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
72 & FSR & SECONDARY, READ RANDOM & PL\\
73 & FSRB2 & SECONDARY, READ BLOCK & PL\\
74 & FSRB2C & SECONDARY, READ BLOCK & PL\\
75 & FSRBC & SECONDARY, READ BLOCK & PL\\
76 & FSW & SECONDARY, WRITE RANDOM & PL\\
77 & FSWBC & SECONDARY, WRITE BLOCK & PL\\
78 & FSWI & SECONDARY, WRITE RANDOM INDIRECT & PL\\
80 & SSM & SET SYSTEM MASK & S\\
81 & LMSK & LOAD MASKS & S\\
82 & LPSW & LOAD PSW & S\\
9A & SLLB & SHIFT LEFT LOGICAL BYTE & RS\\
9B & SRLB & SHIFT RIGHT LOGICAL BYTE & RS\\
9C & SLAB & SHIFT LEFT BYTE & RS\\
9D & SRAB & SHIFT RIGHT BYTE & RS\\
9E & SR32 & SHIFT RIGHT 32 & RS\\
99 & WCSR0X & WRITE CSR\#0 & RS\\
A2 & LPC & LOAD PC (16 BIT) & S\\
\hline
\end{tabular}
\end{center}
\end{latexonly}
\begin{htmlonly}
\begin{htmlonly}
{\large {Table 5: SSP Instructions }}\\
\begin{rawhtml}\end{rawhtml}
{\bf Op}\\
{\bf Code} {\bf Mnemonic} {\bf Name} {\bf Type}\\
\hline
44 \hyperref{BALM}{}{}{i_BALM} BRANCH AND SAVE MASKS RR\\
09 \hyperref{BALR0}{}{}{i_BALR0} SPECIAL BALR RR\\
03 \hyperref{BALRM}{}{}{i_BALRM} BRANCH AND SAVE MASKS RR\\
08 \hyperref{BALR0M}{}{}{i_BALR0M} SPECIAL BALR (SAVE MASKS) RR\\
0B \hyperref{BCR0}{}{}{i_BCR0} SPECIAL BCR RR\\
21 \hyperref{BCTF}{}{}{i_BCTF} BRANCH ON COUNT, AS UP RX\\
0A \hyperref{BCTR0}{}{}{i_BCTR0} SPECIAL BCTR RR\\
28 \hyperref{CF}{}{}{i_CF} COMPARE, AS UP RX\\
60 \hyperref{FPA}{}{}{i_FPA} PRIMARY ADDRESS RX\\
30 \hyperref{FPAI}{}{}{i_FPAI} PRIMARY ADDRESS, IGNORE SS RX\\
62 \hyperref{FPR}{}{}{i_FPR} READ RANDOM RX\\
64 \hyperref{FPRB2}{}{}{i_FPRB2} READ BLOCK (SS=2) RX\\
65 \hyperref{FPRB2C}{}{}{i_FPRB2C} READ BLOCK (SS=2, COUNT GUARD) PL\\
66 \hyperref{FPRBC}{}{}{i_FPRBC} READ BLOCK (COUNT) PL\\
63 \hyperref{FPRNTA}{}{}{i_FPRNTA} READ SECONDARY ADDRESS RX\\
67 \hyperref{FPW}{}{}{i_FPW} WRITE RANDOM PL\\
69 \hyperref{FPWBC}{}{}{i_FPWBC} WRITE BLOCK (COUNT) PL\\
68 \hyperref{FPWI}{}{}{i_FPWI} WRITE RANDOM INDIRECT PL\\
32 \hyperref{FPWIG}{}{}{i_FPWIG} WRITE RANDOM, IGNORE SS PL\\
6A \hyperref{FPWBP}{}{}{i_FPWBP} WRITE PIPELINED (COUNT) PL\\
61 \hyperref{FPWNTA}{}{}{i_FPWNTA} SECONDARY ADDRESS RX\\
31 \hyperref{FPWNTAI}{}{}{i_FPWNTAI} SECONDARY ADDRESS, IGNORE SS RX\\
7A \hyperref{FR}{}{}{i_FR} PRIMARY, SECONDARY, READ RANDOM PL\\
7B \hyperref{FRB2}{}{}{i_FRB2} PRIMARY, SECONDARY, READ BLOCK PL\\
7C \hyperref{FRB2C}{}{}{i_FRB2C} PRIMARY, SECONDARY, READ BLOCK PL\\
7D \hyperref{FRBC}{}{}{i_FRBC} PRIMARY, SECONDARY, READ BLOCK PL\\
72 \hyperref{FSR}{}{}{i_FSR} SECONDARY, READ RANDOM PL\\
73 \hyperref{FSRB2}{}{}{i_FSRB2} SECONDARY, READ BLOCK PL\\
74 \hyperref{FSRB2C}{}{}{i_FSRB2C} SECONDARY, READ BLOCK PL\\
75 \hyperref{FSRBC}{}{}{i_FSRBC} SECONDARY, READ BLOCK PL\\
76 \hyperref{FSW}{}{}{i_FSW} SECONDARY, WRITE RANDOM PL\\
77 \hyperref{FSWBC}{}{}{i_FSWBC} SECONDARY, WRITE BLOCK PL\\
78 \hyperref{FSWI}{}{}{i_FSWI} SECONDARY, WRITE RANDOM INDIRECT PL\\
7E \hyperref{FW}{}{}{i_FW} PRIMARY, SECONDARY, WRITE RAND. PL\\
7F \hyperref{FWBC}{}{}{i_FWBC} PRIMARY, SECONDARY, WRITE BLOCK PL\\
6E \hyperref{HALT}{}{}{i_HALT} WRITE CSR\#0 RX\\
27 \hyperref{LF}{}{}{i_LF} LOAD, AS UP RX\\
20 \hyperref{LAF}{}{}{i_LAF} LOAD ADDRESS, AS UP RX\\
A2 \hyperref{LPC}{}{}{i_LPC} LOAD PC (16 BIT) S\\
24 \hyperref{NF}{}{}{i_NF} AND, AS UP RX\\
25 \hyperref{OF}{}{}{i_OF} OR, AS UP RX\\
6F \hyperref{RCSR0}{}{}{i_RCSR0} READ CSR\#0 RX\\
2A \hyperref{SF}{}{}{i_SF} SUBTRACT, AS UP RX\\
9C \hyperref{SLAB}{}{}{i_SLAB} SHIFT LEFT BYTE RS\\
9A \hyperref{SLLB}{}{}{i_SLLB} SHIFT LEFT LOGICAL BYTE RS\\
9E \hyperref{SR32}{}{}{i_SR32} SHIFT RIGHT 32 RS\\
9D \hyperref{SRAB}{}{}{i_SRAB} SHIFT RIGHT BYTE RS\\
80 \hyperref{SSM}{}{}{i_SSM} SET SYSTEM MASK S\\
23 \hyperref{STF}{}{}{i_STF} STORE, AS UP RX\\
6E \hyperref{WCSR0}{}{}{i_WCSR0} WRITE CSR\#0 RX\\
99 \hyperref{WCSR0X}{}{}{i_WCSR0X} WRITE CSR\#0 RS\\
26 \hyperref{XF}{}{}{i_XF} EXCLUSIVE OR, AS UP RX\\
\begin{rawhtml}\end{rawhtml}
\end{htmlonly}
\clearpage
{\bf SSP INSTRUCTIONS}\\
\subsection{ FASTBUS I/O:} The following conditions are for all
FASTBUS I/O instructions:
\begin{enumerate}
\item All FASTBUS cycles having a Primary Address will always
perform a BUS Arbitration. \index{Arbitration}
\item All FASTBUS cycles having a Primary Address will drop and
re-establish the AS/AK lock. \index{AS} \index{Primary
Address}
\item Any non-I/O instruction will break the AS/AK lock, with the
exception of the `F' series instructions; see page~\pageref{RMW}.
\item All FASTBUS cycles returning an SS code other than 0 will
cause an error with the exception of block transfers that
normally terminate with an SS=2. \index{SS}
\item A Data-Memory wrap-around during any FASTBUS \hyperref{block
transfer}{}{}{BLOCK}
will generate an error.
\item The R1 field is ignored for all FASTBUS I/O except during
Primary Address cycles. During a Primary Address cycle, the
two LSB of R1 are used to select the MS code as shown in
Table 6.
\end{enumerate}
\begin{latexonly}
\begin{center}
\begin{tabular}{|lll|}
\multicolumn{3}{c}{\large {Table 6: Address Time MS Codes }}\\
\hline \index{MS+} \index{Broadcast}
MS & Address Mode &\\
\hline
00 & Specific device & - Data space\\
01 & Specific device & - CSR space\\
10 & Broadcast & - Data space\\
11 & Broadcast & - CSR space\\
\hline
\end{tabular}
\end{center}
\end{latexonly}
\begin{htmlonly}
{\Large {Table 6: Address Time MS Codes }}\\
\begin{verbatim}
MS Address Mode
00 Specific device - Data space
01 Specific device - CSR space
10 Broadcast - Data space
11 Broadcast - CSR space
\end{verbatim}\index{MS+} \index{Broadcast}
\end{htmlonly}
\vspace {1ex}
\subsection{ FASTBUS I/O Instruction Format:}
\subsubsection{\em Primary Address} \index{Primary Address} \label{i_FPA}
\nopagebreak
\begin{figure}
\RXF{FPA}{60}
\end{figure}
The second operand is used as the primary address. Bus
Arbitration is part of the Primary Address. If the Scanner does
not already have mastership it will try to gain mastership.
The MS field gives the MS code for the Primary Address.
\vspace {1ex}
\subsubsection{\em Secondary Address} \index{Secondary
Address}\label{i_FPWNTA}
\nopagebreak
\begin{figure}
\RXa{FPWNTA}{61}
\end{figure}
The second operand is used as the secondary address.
\vspace {1ex}
\subsubsection{\em Read Random} \label{i_FPR}
\nopagebreak
\begin{figure}
\RXa{FPR}{62}
\end{figure}
Data is stored into the second operand location.
\vspace {1ex}
\subsubsection{\em Read Secondary Address} \label{i_FPRNTA}
\nopagebreak
\begin{figure}
\RXa{FPRNTA}{63} \index{NTA}
\end{figure}
The Next Transfer Address is stored into the second operand location.
\vspace {1ex}
\subsubsection{\em Read Block} \label{i_FPRB2}
\nopagebreak
\begin{figure}
\RXa{FPRB2}{64}
\end{figure}
Data is stored starting at the second operand location. The
block is \hyperref{terminated}{}{}{s_RB2} normally upon receipt of an SS=2. \index{SS}
\vspace {1ex}
\subsubsection{\em Read Block with a Word Count as a guard.}
\label{i_FPRB2C}
\nopagebreak \index{Word Count}
\begin{figure}
\PL{FPRB2C}{65}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate}
\item Word Count
\item Starting address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RB2C} normally upon receipt of an SS=2.
Exhausting the word count will generate an error.
\vspace {1ex}
\subsubsection{\em Read Block with a Word Count.}
\label{i_FPRBC}
\nopagebreak
\begin{figure}
\PL{FPRBC}{66}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate}
\item Word Count
\item Starting address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RBC} normally upon exhausting the word count.
\vspace {1ex}
\subsubsection{\em Write Random} \label{i_FPW}
\nopagebreak
\begin{figure}
\PL{FPW}{67}
\end{figure}
The second operand is used as the data.
\vspace {1ex}
\subsubsection{\em Write Random Indirect} \label{i_FPWI}
\nopagebreak
\begin{figure}
\PL{FPWI}{68}
\end{figure}
The second operand is used as the address of the data.
\vspace {1ex}
\subsubsection{\em Write Block with a Word Count} \label{i_FPWBC}
\nopagebreak
\begin{figure}
\PL{FPWBC}{69}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate} \index{Block Transfer}
\item Word Count
\item Starting address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_WBC} normally by exhausting the word count.
\vspace {1ex}
\subsubsection{\em Write Block with a Word Count, Non-Handshake}
\label{i_FPWPB}
\nopagebreak \index{Pipeline Transfer}
\begin{figure}
\PL{FPWPB}{6A}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate}
\item Word Count
\item Starting address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_WBC} normally by exhausting the word count.
The timing of the pipeline transfer is controlled by a
\hyperref{DIPswitch}{}{}{PipeDIP} on
the control board. The cycle time may be selected in units of 20ns. Following
the last data cycle, the SSP waits a fixed time (determined by microcode)
before terminating the operation (dropping AS).
\vspace {1ex}
\subsubsection{\em Secondary Address, Read Random} \label{i_FSR}
\nopagebreak
\begin{figure}
\PL{FSR}{72}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate}
\item Secondary Address
\item Address to store data into
\end{enumerate}
\vspace {1ex}
\subsubsection{\em Secondary Address, Read Block.} \label{i_FSRB2}
\nopagebreak
\begin{figure}
\PL{FSRB2}{73}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate}
\item Secondary Address
\item Starting address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RB2} normally upon receipt of an SS=2.
\vspace {1ex}
\subsubsection{\em Secondary Address, Read Block with a word count guard.}
\label{i_FSRB2C}
\nopagebreak
\begin{figure}
\PL{FSRB2C}{74}
\end{figure}
The second operand address points to a parameter list containing
the following 3 parameter(s):
\begin{enumerate}
\item Secondary Address
\item Word count
\item Starting address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RB2C} normally upon receipt of an SS=2.
Exhausting the word count will generate an error.
\vspace {1ex}
\subsubsection{\em Secondary Address, Read Block with a word count.}
\label{i_FSRBC}
\nopagebreak
\begin{figure}
\PL{FSRBC}{75}
\end{figure}
The second operand address points to a parameter list containing
the following 3 parameter(s):
\begin{enumerate}
\item Secondary Address
\item Word Count
\item Starting address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RBC} normally upon exhausting the word count.
\vspace {1ex}
\subsubsection{\em Secondary Address, Write Random.} \label{i_FSW}
\nopagebreak
\begin{figure}
\PL{FSW}{76}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate}
\item Secondary Address
\item Data
\end{enumerate}
\vspace {1ex}
\subsubsection{\em Secondary Address, Write Block with a word count.}
\label{i_FSWBC}
\nopagebreak
\begin{figure}
\PL{FSWBC}{77}
\end{figure}
The second operand address points to a parameter list containing
the following 3 parameter(s):
\begin{enumerate}
\item Secondary Address
\item Word Count
\item Starting Address of the block
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_WBC} normally by exhausting the word count.
\vspace {1ex}
\subsubsection{\em Secondary Address, Write Random indirect.}
\label{i_FSWI}
\nopagebreak
\begin{figure}
\PL{FSWI}{78}
\end{figure}
The second operand address points to a parameter list containing
the following 2 parameter(s):
\begin{enumerate}
\item Secondary address
\item Address of data
\end{enumerate}
\vspace {1ex}
\subsubsection{\em Primary, Secondary Address, Read Random.}
\label{i_FR}
\nopagebreak
\begin{figure}
\PLF{FR}{7A}
\end{figure}
The second operand address points to a parameter list containing
the following 3 parameter(s):
\begin{enumerate}
\item Primary Address
\item Secondary Address
\item Address to store data
\end{enumerate}
The MS field gives the MS code for the Primary Address.
Bus Arbitration is part of the Primary Address. If the SSP
does not already have mastership it will try to gain mastership.
\index{MS} \index{Primary Address}
\vspace {1ex}
\subsubsection{\em Primary, Secondary Address, Read Block}
\label{i_FRB2}
\nopagebreak
\begin{figure}
\PLF{FRB2}{7B}
\end{figure}
The second operand address points to a parameter list containing
the following 3 parameter(s):
\begin{enumerate}
\item Primary Address
\item Secondary Address
\item Starting Address of data
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RB2} normally by an SS=2.
The MS field gives the MS code for the Primary Address.
\vspace {1ex}
\subsubsection{\em Primary, Secondary Address, Read Block with a word count guard.}
\label{i_FRB2C}
\nopagebreak
\begin{figure}
\PLF{FRB2C}{7C}
\end{figure}
The second operand address points to a parameter list containing
the following 4 parameter(s):
\begin{enumerate}
\item Primary Address
\item Secondary Address
\item Word Count
\item Starting Address of data
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RB2C} normally upon receipt of an SS=2.
Exhausting the word count will generate an error.
The MS field gives the MS code for the Primary Address.
\vspace {1ex}
\subsubsection{\em Primary, Secondary Address, Read Block with a word count.}
\label{i_FRBC}
\nopagebreak
\begin{figure}
\PLF{FRBC}{7D}
\end{figure}
The second operand address points to a parameter list containing
the following 4 parameter(s):
\begin{enumerate}
\item Primary Address
\item Secondary Address
\item Word Count
\item Starting Address of data
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_RBC} normally upon exhausting the word count.
The MS field gives the MS code for the Primary Address.
\vspace {1ex}
\subsubsection{\em Primary, Secondary Address, Write Random.}
\label{i_FW}
\nopagebreak
\begin{figure}
\PLF{FW}{7E}
\end{figure}
The second operand address points to a parameter list containing
the following 3 parameter(s):
\begin{enumerate}
\item Primary Address
\item Secondary Address
\item Data
\end{enumerate}
The MS field gives the MS code for the Primary Address.
\vspace {1ex}
\subsubsection{\em Primary, Secondary Address, Write Block.}
\label{i_FWBC}
\nopagebreak
\begin{figure}
\PLF{FWBC}{7F}
\end{figure}
The second operand address points to a parameter list containing
the following 4 parameter(s):
\begin{enumerate}
\item Primary Address
\item Secondary Address
\item Word Count
\item Starting Address of data
\end{enumerate}
The block is \hyperref{terminated}{}{}{s_WBC} normally by exhausting the word count.
The MS field gives the MS code for the Primary Address.
\clearpage
\subsection{ BLOCK TRANSFERS } \index{Block
Transfer+}\label{BLOCK}
The SSP is capable of block transfers as a SLAVE to and from both
DATA space and CSR space. In DATA space, the SSP will generate
SS=6 when writing more than 512K (or 1M, 2M) words is attempted. In
CSR space, the SSP will generate SS=6 when writing more \index{SS}
than 4K (64K with \hyperref{EPM}{}{}{EPM}) words into program memory or
512K to data memory is attempted. The SSP will respond to block
(MS=1) or pipeline (MS=3) transfers \index{Pipeline Transfer} \index{EPM}
As a MASTER, the SSP is capable of block transfers to and from
its DATA memory only. There are 3 basic block read instructions
and 1 block write instruction. The block instructions can be
preceded by a secondary address or a primary and secondary
address. See section on FASTBUS Instructions.
\subsubsection{Basic block transfer instructions}\label{s_BLK}
\begin{itemize}
\item \hyperref{FPRB2}{}{}{i_FPRB2} - Normal termination on SS=2
\item \hyperref{FPRB2C}{}{}{i_FPRB2C} - Normal termination on SS=2 with a word count guard
\item \hyperref{FPRBC}{}{}{i_FPRBC} - Normal termination on exhausting the word count
\end{itemize}
The basic block write instruction is:
\begin{enumerate}
\item \hyperref{FPWBC}{}{}{i_FPWBC} - Normal termination on exhausting the word count
\end{enumerate}
When the \hyperref{I/O-Error handler}{}{}{s_ERRHND} is called
because of an I/O error, the PC indicated by the
\hyperref{PSW}{}{}{s_PSW}, saved in DM~0, will point to the instruction
following the instruction where the error occurred. \index{Error Handler}
\subsubsection{Block Transfer instructions terminating on SS=2}\label{s_RB2}
\begin{itemize}
\item \hyperref{FPRB2}{}{}{i_FPRB2}
\item \hyperref{FSRB2}{}{}{i_FSRB2}
\item \hyperref{FRB2}{}{}{i_FRB2}
\end{itemize}
These instructions terminate normally on \index{SS}
SS=2. Upon receipt of SS=2, the SSP stores the updated NTA at DM~4
and continues on to the next instruction. The address
contained in the MAR (DM~4) points to the location where the last data would
have been stored had SS=0. \index{MAR+}\label{MAR}
Any SS response besides 0 or 2 will generate an I/O-Error. The
NTA will be stored into DM~4 as above. The
\hyperref{PSW}{}{}{s_PSW} will also be
stored into DM~0 indicating the PC and the SS code that caused
the error. \index{NTA} \index{SS}
\subsubsection{Block Transfer instructions terminating on SS=2 with a guard}
\label{s_RB2C}
\begin{itemize}
\item \hyperref{FPRB2C}{}{}{i_FPRB2C}
\item \hyperref{FSRB2C}{}{}{i_FSRB2C}
\item \hyperref{FRB2C}{}{}{i_FRB2C}
\end{itemize}
These instructions terminate normally on
SS=2 as the B2 instructions. However, the RBC instructions have
a word count associated with them. The word count is a guard in
case a module sends back more data than buffer space was allowed
for.
As with the B2 instructions, an SS=2 response will cause the
updated NTA to be stored in DM~4. An SS response other than 0 or
2 will cause an I/O-Error.
If the word count is exhausted before receipt of an SS=2, an
I/O-Error will be generated. The address contained in DM4 will
point to the location where the data would have been stored had
the word-count not been exhausted. The PSW will indicate an
EXCEPTION=3, word count overflow. \index{Exception}
\index{Word Count}
\subsubsection{Block transfer instructions with count}\label{s_RBC}
\begin{itemize}
\item \hyperref{FPRBC}{}{}{i_FPRBC}
\item \hyperref{ FSRBC}{}{}{i_FSRBC}
\item \hyperref{ FRBC}{}{}{i_FRBC}
\end{itemize}
These instructions terminate normally when
the word count is exhausted. The \hyperref{PSW}{}{}{s_PSW} and updated NTA are not
stored anywhere on normal termination.
If the block transfer terminates because of an SS!=0 response,
the PSW and updated NTA will be stored in DM~0 and DM~4. The
address contained in DM~4 points to the location where the data
would have been stored had SS=0.
\subsubsection{Block transfer write instructions}
\label{s_WBC}
\begin{itemize}
\item \hyperref{FPWBC}{}{}{i_FPWBC}
\item \hyperref{ FSWBC}{}{}{i_FSWBC}
\item \hyperref{ FWBC}{}{}{i_FWBC}
\end{itemize}
These instructions terminate normally when
the word count is exhausted. The \hyperref{PSW}{}{}{s_PSW} and updated NTA are not
stored anywhere on normal termination.
If the block transfer terminates because of an SS!=0 response,
the PSW and updated NTA will be stored in DM~0 and DM~4. The NTA
will be 8 greater than the address of the last data written. The
number of words transferred will be the NTA minus the starting
address divided by 4 minus 2. \index{NTA}
\clearpage
\subsection{ SSP-SPECIFIC NON-FASTBUS INSTRUCTIONS}
\subsubsection{\em Shift Right Logical Bytes} \label{i_SRLB}
\nopagebreak
\begin{figure}
\RSa{SRLB}{9B}
\end{figure}
The first operand is shifted right the number of
bytes specified by the second operand address.
Example: 9B300002 will shift R3 right 2 bytes.
Also\\
\begin{latexonly}
\begin{tabular}{llll}
9A & SLLB & SHIFT LEFT LOGICAL BYTE & RS\\
9C & SLAB & SHIFT LEFT BYTE & RS\\
9D & SRAB & SHIFT RIGHT BYTE & RS\\
\end{tabular} \index{SLLB} \index{SLAB} \index{SRAB}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
9A SLLB SHIFT LEFT LOGICAL BYTE RS
9C SLAB SHIFT LEFT BYTE RS
9D SRAB SHIFT RIGHT BYTE RS
\end{verbatim}\index{SLLB} \index{SLAB} \index{SRAB}
\label{i_SLLB} \label{i_SLAB} \label{i_SRAB}
\end{htmlonly}
\vspace {1ex}
\subsubsection{\em Shift Right 32 bits}\label{i_SR32}
\nopagebreak
\begin{figure}
\RSb{SR32}{9E}
\end{figure}
The first operand is shifted right by 32 bits
into register (R1+1). The sign bit is propagated in R1.
Given initial contents R6 = 8110111, R7 = 1234,
then following `SR32,6' R6 = FFFFFFFF, R7 = 8110111
\vspace {1ex}
\subsubsection{\em Set System Mask}\label{i_SSM}
\nopagebreak
\begin{figure}
\S{SSM}{80} \index{System Mask}
\end{figure}
bit~15 of the operand is loaded into the System Mask.
Other bits are ignored.
\vspace {1ex}
\subsubsection{\em Load Processor Status Word}\label{i_LPSW}
\nopagebreak
\begin{figure}
\S{LPSW}{82} \index{PSW} \index{Processor Status Word}
\end{figure}
Bits 15-0 of the operand is loaded into the PSW
(System Mask, Overflow mask, Condition codes and PC)
Other bits are ignored. Should not be used with EPM enabled.
\index{EPM}
\vspace {1ex}
\subsubsection{\em Write CSR\#0} \label{i_WCSR0X}
\nopagebreak
\begin{figure}
\S{WCSR0X}{99} \index{CSR\#0}
\end{figure}
The operand is written into CSR\#0
\vspace {1ex}
\subsubsection{\em Write CSR\#0} \label{i_WCSR0}
\nopagebreak
\begin{figure}
\RXa{WCSR0}{6E}
\end{figure}
The operand is written into CSR\#0
\vspace {1ex}
\subsubsection{\em Read CSR\#0} \label{i_RCSR0}
\nopagebreak
\begin{figure}
\RXa{RCSR0}{6F} \index{CSR\#0}
\end{figure}
The contents of CSR\#0 are written to the operand
\vspace {1ex}
\subsubsection{\em Load Masks} \label{i_LMSK}
\nopagebreak
\begin{figure}
\S{LMSK}{81}
\end{figure}
Bits 15-12 of the operand are loaded into the PSW
(System Mask, Overflow mask, Condition codes)
Other bits are ignored. \index{Overflow} \index{System Mask}
\vspace {1ex}
\subsubsection{\em Load Program Counter}\label{i_LPC}
\nopagebreak
\begin{figure}
\S{LPC}{A2} \index{Program Counter}
\end{figure}
Bits 15-0 of the operand is loaded into the PC
(16-bit program counter for Extended PM)
Other bits are ignored. \index{EPM}
\vspace {1ex}
\subsubsection{\em Branch and Link Masks}\label{i_BALR0M}
\nopagebreak
\begin{figure}
\RR{BALR0M}{08} \index{Program Mask}
\end{figure}
The program masks are saved in the register R1.
No branch is performed. The PC is not saved.
Also\\
\begin{latexonly}
\begin{tabular}{llll}
03 & BALRM & RR & BALR masks\\
44 & BALM & RX & BAL masks\\
\end{tabular} \index{BALRM} \index{BALM}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
03 BALRM RR BALR masks
44 BALM RX BAL masks
\end{verbatim} \index{BALRM} \index{BALM}
\label{i_BALRM} \label{i_BALM}
\end{htmlonly}
\vspace {1ex}
\subsection{ Notes on some IBM SSP instructions:}
BCTR0, BCR0, BALR0 (0A,0B,09) are special versions of the IBM opcodes
BCTR, BCR, BALR which do not perform a branch. Thus to achieve the
function of the IBM code `BCR~M1,0' the code `BCR0~M1,0' must be used.
The BNL cross-assembler makes this substitution automatically.
\index{BCTR0} \index{BCR0} \index{BALR0}
\label{i_BCTR0} \label{i_BCR0} \label{i_BALR0}
\index{BCTR} \index{BCR} \index{BALR}
\vspace {1ex}
\subsection{ Read-Modify-Write FASTBUS Instructions} \index{Read-Modify-Write}
The following opcodes may be used to construct Read-Modify-Write
FASTBUS operations. AS remains up until the next primary address
or normal non-FASTBUS instruction. \label{RMW}
\begin{latexonly}
\begin{tabular}{|llll|}
\hline
Code & Mnemonic & Type & Description\\
\hline
20 & LAF & RX &Load address, AS up\\
21 & BCTF & RX &Branch on Count, AS up\\
22 & BCF & RX &Branch conditional, AS up\\
23 & STF & RX &Store, AS up\\
24 & NF & RX &And, AS up\\
25 & OF & RX &OR, AS up\\
26 & XF & RX &X-OR, AS up\\
27 & LF & RX &Load, AS up\\
28 & CF & RX &Compare, AS up\\
29 & AF & RX &Add, AS up\\
2A & SF & RX &Subtract, AS up\\
\hline \index{LAF+} \index{BCTF+} \index{BCF+} \index{STF+} \index{NF+}
\index{OF+} \index{XF+} \index{LF+} \index{CF+} \index{AF+} \index{SF+}
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\begin{verbatim}
Code Mnemonic Type Description
20 LAF RX Load address, AS up
21 BCTF RX Branch on Count, AS up
22 BCF RX Branch conditional, AS up
23 STF RX Store, AS up
24 NF RX And, AS up
25 OF RX OR, AS up
26 XF RX X-OR, AS up
27 LF RX Load, AS up
28 CF RX Compare, AS up
29 AF RX Add, AS up
2A SF RX Subtract, AS up
\end{verbatim}
\index{LAF+} \index{BCTF+} \index{BCF+} \index{STF+} \index{NF+}
\index{OF+} \index{XF+} \index{LF+} \index{CF+} \index{AF+} \index{SF+}
\label{i_LAF} \label{i_BCTF} \label{i_BCF} \label{i_STF} \label{i_NF}
\label{i_OF} \label{i_XF} \label{i_LF} \label{i_CF} \label{i_AF} \label{i_SF}
\end{htmlonly}
The following instructions may be used to construct
a FASTBUS instruction to ignore SS codes at Primary or
Secondary address and perform a subsequent data cycle\\
\begin{latexonly}
\begin{tabular}{|llll|}
\hline \index{SS}
30 & FPAI & RS & Primary address, ignore SS codes\\
31 & FPWNTAI & RS & Secondary address, ignore SS codes\\
32 & FPWIG & RS & FASTBUS write, ignore SS code\\
\hline \index{FPAI+} \index{FPWNTAI+} \index{FPWIG+}
\label{i_FPAI} \label{i_FPWNTAI} \label{i_FPWIG}
\end{tabular}
\end{latexonly}
\begin{htmlonly}
\hline \index{SS}
\begin{verbatim}
30 FPAI RS Primary address, ignore SS codes
31 FPWNTAI RS Secondary address, ignore SS codes
32 FPWIG RS FASTBUS write, ignore SS code
\end{verbatim}
\index{FPAI+} \index{FPWNTAI+} \index{FPWIG+}
\label{i_FPAI} \label{i_FPWNTAI} \label{i_FPWIG}
\end{htmlonly}
** FPWNTAI does not work correctly **
\clearpage
\subsection{ HARDWARE CONFIGUREABLE ITEMS}
\subsection{ CPU Board Jumpers} \index{Jumpers} \index{Data
Memory}\label{Jumpers}
The CPU board may be fitted with either 2MB of Data Memory RAM using 256Kbit
devices, or either 4Mb or 8MB using 1Mbit devices. To accommodate these
different sizes of Data Memory, two jumper areas are used. The MSB jumper
(near I3J3) selects the Most Significant Bit for RAM Bank enable. The OVF
(near I3I5) jumper selects the overflowed address bit and is used to generate
the address wraparound error. The jumpers are set as follows:
\begin{tabular}{lllll}
MSB & OVF & DM Size & Configuration\\
20 & 21 & 2MB & 64 $\times$ 256Kbit\\
21 & 22 & 4MB & 32 $\times$ 1Mbit\\
22 & 23 & 8MB & 64 $\times$ 1Mbit\\
\end{tabular}
\subsection{ Control Board Jumpers}
To generate an illegal address error (SS=6) during a block transfer operation
to Data Memory, a jumper area (JX09,10,11 near J1B2) is used as follows:
\begin{tabular}{lll}
DM Size & Configuration\\
2MB & 64 $\times$ 256Kbit\\
4MB & 32 $\times$ 1Mbit\\
8MB & 64 $\times$ 1Mbit\\
\end{tabular}
Jumpers JX01,2 (near J9J3) select either single cycle or single instruction
stepping under control of the Step button on the front panel, when enabled by
\hyperref{CSR\#0<6>}{}{}{csr0_SCYC}. \index{Single Step}
Jumpers JX04,5 (near G4C5) select either a DC level or a pulse on the RB line
when \hyperref{CSR\#0<3>}{}{}{csr0_RB} is written. \index{RB}
Jumpers JX12,13,14 selects the Vcc supply voltage for the FASTBUS Cable
Segment Receivers. Either 10114 ECL line receivers or F6901 ASICs may be
fitted. The F6901 receivers allow more modules to be connected on one cable
segment than the 10114s. \index{Cable Segment}
\subsection{ Programmable Logic Devices}
The Data Memory Size must be programmed into the ADRDEC decoder chip (M2A6)
in addition to setting the jumpers. \index{Data Memory}
If it is desired that the SSP respond to any of the Manufacturer's defined
\hyperref{Broadcasts}{}{}{s_BRO} (Case 8, segment address 8D - FD), the two
BCPROMs D5C1 and D9J1 (10149) must be programmed accordingly.\label{BCPROM}
\index{Broadcast}
\subsection{ Other Components}
When the Cable Segment Drivers are fitted, but no Cable Segment is connected,
the segment lines may sometimes float high. If the Cable RB, WT or AS lines are
high the SSP will hang. Socketed 10K resistors R021, R022, R042 (near F5L8)
will pull these \index{Cable Segment}
lines low; they may be removed if necessary when a cable segment is connected.
Sockets are provided for Cable Segment drivers.\index{Cable Segment} Either
CERN hybrid drivers or KEK-CSD hybrids may be fitted. Pin 10 of the CERN
hybrids must be set at -1.4V. This voltages ($V_BB$) is supplied by the Cable
Segment receivers. Pin 10 of the KEK hybrids is grounded internally;
accordingly pin 10 of KEK hybrids must be cut for correct operation of the
receivers.
A DIPswitch (J9L9) controls the data cycle length for the FPWBP pipeline
write block transfer operation. The delay is 2's complement binary coded in
units of 20ns. All switches open corresponds to a maximum DS - DS period of
around 300ns. \index{Pipeline Transfer+} \index{FPWBP}\label{PipeDIP}
\section{SSP Instructions (alphabetic order)}
\begin{latexonly}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 7: SSP Instructions (alphabetic order)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
5A & A & ADD & RX\\
29 & AF & ADD, AS UP & RX\\
4A & AH & ADD HALFWORD & RX\\
5E & AL & ADD LOGICAL & RX\\
1E & ALR & ADD LOGICAL & RR\\
1A & AR & ADD & RR\\
45 & BAL & BRANCH AND LINK & RX\\
44 & BALM & BRANCH AND SAVE MASKS & RR\\
05 & BALR & BRANCH AND LINK & RR\\
09 & BALR0 & SPECIAL BALR & RR\\
03 & BALRM & BRANCH AND SAVE MASKS & RR\\
08 & BALR0M & SPECIAL BALR (SAVE MASKS) & RR\\
47 & BC & BRANCH ON CONDITION & RX\\
22 & BCF & BRANCH ON CONDITION, AS UP & RX\\
07 & BCR & BRANCH ON CONDITION & RR\\
0B & BCR0 & SPECIAL BCR & RR\\
46 & BCT & BRANCH ON COUNT & RX\\
21 & BCTF & BRANCH ON COUNT, AS UP & RX\\
06 & BCTR & BRANCH ON COUNT & RR\\
0A & BCTR0 & SPECIAL BCTR & RR\\
86 & BXH & BRANCH ON INDEX HIGH & RS\\
87 & BXLE & BRANCH ON INDEX LOW OR EQUAL & RS\\
59 & C & COMPARE & RX\\
28 & CF & COMPARE, AS UP & RX\\
49 & CH & COMPARE HALFWORD & RX\\
55 & CL & COMPARE LOGICAL & RX\\
95 & CLI & COMPARE LOGICAL IMMEDIATE & SI\\
15 & CLR & COMPARE LOGICAL & RR\\
19 & CR & COMPARE & RR\\
5D & D & DIVIDE & RX\\
1D & DR & DIVIDE & RR\\
60 & FPA & PRIMARY ADDRESS & RX\\
30 & FPAI & PRIMARY ADDRESS, IGNORE SS & RX\\
62 & FPR & READ RANDOM & RX\\
64 & FPRB2 & READ BLOCK (SS=2) & RX\\
65 & FPRB2C & READ BLOCK (SS=2, COUNT GUARD) & PL\\
66 & FPRBC & READ BLOCK (COUNT) & PL\\
63 & FPRNTA & READ SECONDARY ADDRESS & RX\\
67 & FPW & WRITE RANDOM & PL\\
\hline
\end{tabular}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 7: SSP Instructions (alphabetic order cont.)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
69 & FPWBC & WRITE BLOCK (COUNT) & PL\\
68 & FPWI & WRITE RANDOM INDIRECT & PL\\
32 & FPWIG & WRITE RANDOM, IGNORE SS & PL\\
6A & FPWBP & WRITE PIPELINED (COUNT) & PL\\
61 & FPWNTA & SECONDARY ADDRESS & RX\\
31 & FPWNTAI & SECONDARY ADDRESS, IGNORE SS & RX\\
7A & FR & PRIMARY, SECONDARY, READ RANDOM & PL\\
7B & FRB2 & PRIMARY, SECONDARY, READ BLOCK & PL\\
7C & FRB2C & PRIMARY, SECONDARY, READ BLOCK & PL\\
7D & FRBC & PRIMARY, SECONDARY, READ BLOCK & PL\\
72 & FSR & SECONDARY, READ RANDOM & PL\\
73 & FSRB2 & SECONDARY, READ BLOCK & PL\\
74 & FSRB2C & SECONDARY, READ BLOCK & PL\\
75 & FSRBC & SECONDARY, READ BLOCK & PL\\
76 & FSW & SECONDARY, WRITE RANDOM & PL\\
77 & FSWBC & SECONDARY, WRITE BLOCK & PL\\
78 & FSWI & SECONDARY, WRITE RANDOM INDIRECT& PL\\
7E & FW & PRIMARY, SECONDARY, WRITE RAND. & PL\\
7F & FWBC & PRIMARY, SECONDARY, WRITE BLOCK & PL\\
6E & HALT & WRITE CSR\#0 & RX\\
43 & IC & INSERT CHARACTER & RX\\
58 & L & LOAD & RX\\
27 & LF & LOAD, AS UP & RX\\
41 & LA & LOAD ADDRESS & RX\\
20 & LAF & LOAD ADDRESS, AS UP & RX\\
13 & LCR & LOAD COMPLEMENT & RR\\
48 & LH & LOAD HALFWORD & RX\\
98 & LM & LOAD MULTIPLE & RS\\
81 & LMSK & LOAD MASKS & S\\
11 & LNR & LOAD NEGATIVE & RR\\
A2 & LPC & LOAD PC (16 BIT) & S\\
10 & LPR & LOAD POSITIVE & RR\\
82 & LPSW & LOAD PSW & S\\
18 & LR & LOAD & RR\\
12 & LTR & LOAD AND TEST & RR\\
5C & M & MULTIPLY & RX\\
4C & MH & MULTIPLY HALFWORD & RX\\
1C & MR & MULTIPLY & RR\\
92 & MVI & MOVE IMMEDIATE & SI\\
54 & N & AND & RX\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 7: SSP Instructions (alphabetic order cont.)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
24 & NF & AND, AS UP & RX\\
94 & NI & AND IMMEDIATE & SI\\
14 & NR & AND & RR\\
56 & O & OR & RX\\
25 & OF & OR, AS UP & RX\\
96 & OI & OR IMMEDIATE & SI\\
16 & OR & OR & RR\\
6F & RCSR0 & READ CSR\#0 & RX\\
5B & S & SUBTRACT & RX\\
2A & SF & SUBTRACT, AS UP & RX\\
4B & SH & SUBTRACT HALFWORD & RX\\
5F & SL & SUBTRACT LOGICAL & RX\\
8B & SLA & SHIFT LEFT SINGLE & RS\\
9C & SLAB & SHIFT LEFT BYTE & RS\\
8F & SLDA & SHIFT LEFT DOUBLE & RS\\
8D & SLDL & SHIFT LEFT DOUBLE LOGICAL & RS\\
89 & SLL & SHIFT LEFT SINGLE LOGICAL & RS\\
9A & SLLB & SHIFT LEFT LOGICAL BYTE & RS\\
1F & SLR & SUBTRACT LOGICAL & RR\\
04 & SPM & SET PROGRAM MASK & RR\\
1B & SR & SUBTRACT & RR\\
9E & SR32 & SHIFT RIGHT 32 & RS\\
8A & SRA & SHIFT RIGHT SINGLE & RS\\
9D & SRAB & SHIFT RIGHT BYTE & RS\\
8E & SRDA & SHIFT RIGHT DOUBLE & RS\\
8C & SRDL & SHIFT RIGHT DOUBLE LOGICAL & RS\\
88 & SRL & SHIFT RIGHT SINGLE LOGICAL & RS\\
9B & SRLB & SHIFT RIGHT LOGICAL BYTE & RS\\
80 & SSM & SET SYSTEM MASK & S\\
50 & ST & STORE & RX\\
23 & STF & STORE, AS UP & RX\\
42 & STC & STORE CHARACTER & RX\\
40 & STH & STORE HALFWORD & RX\\
90 & STM & STORE MULTIPLE & RS\\
91 & TM & TEST UNDER MASK & SI\\
6E & WCSR0 & WRITE CSR\#0 & RX\\
99 & WCSR0X & WRITE CSR\#0 & RS\\
57 & X & EXCLUSIVE OR & RX\\
26 & XF & EXCLUSIVE OR, AS UP & RX\\
97 & XI & EXCLUSIVE OR IMMEDIATE & SI\\
17 & XR & EXCLUSIVE OR & RR\\
\hline
\end{tabular}
\end{center}
%\clearpage
\end{latexonly}
\begin{htmlonly}
\begin{rawhtml}\end{rawhtml}
{\large {Table 7: SSP Instructions (alphabetic order cont.)}}\\
{\bf Op}\\
{\bf Code} {\bf Mnemonic} {\bf Name} {\bf Type}\\
\hline
5A \hyperref{A}{}{}{i_A} ADD RX\\
29 \hyperref{AF}{}{}{i_AF} ADD, AS UP RX\\
4A \hyperref{AH}{}{}{i_AH} ADD HALFWORD RX\\
5E \hyperref{AL}{}{}{i_AL} ADD LOGICAL RX\\
1E \hyperref{ALR}{}{}{i_ALR} ADD LOGICAL RR\\
1A \hyperref{AR}{}{}{i_AR} ADD RR\\
45 \hyperref{BAL}{}{}{i_BAL} BRANCH AND LINK RX\\
44 \hyperref{BALM}{}{}{i_BALM} BRANCH AND SAVE MASKS RR\\
05 \hyperref{BALR}{}{}{i_BALR} BRANCH AND LINK RR\\
09 \hyperref{BALR0}{}{}{i_BALR0} SPECIAL BALR RR\\
03 \hyperref{BALRM}{}{}{i_BALRM} BRANCH AND SAVE MASKS RR\\
08 \hyperref{BALR0M}{}{}{i_BALR0M} SPECIAL BALR (SAVE MASKS) RR\\
47 \hyperref{BC}{}{}{i_BC} BRANCH ON CONDITION RX\\
22 \hyperref{BCF}{}{}{i_BCF} BRANCH ON CONDITION, AS UP RX\\
07 \hyperref{BCR}{}{}{i_BCR} BRANCH ON CONDITION RR\\
0B \hyperref{BCR0}{}{}{i_BCR0} SPECIAL BCR RR\\
46 \hyperref{BCT}{}{}{i_BCT} BRANCH ON COUNT RX\\
21 \hyperref{BCTF}{}{}{i_BCTF} BRANCH ON COUNT, AS UP RX\\
06 \hyperref{BCTR}{}{}{i_BCTR} BRANCH ON COUNT RR\\
0A \hyperref{BCTR0}{}{}{i_BCTR0} SPECIAL BCTR RR\\
86 \hyperref{BXH}{}{}{i_BXH} BRANCH ON INDEX HIGH RS\\
87 \hyperref{BXLE}{}{}{i_BXLE} BRANCH ON INDEX LOW OR EQUAL RS\\
59 \hyperref{C}{}{}{i_C} COMPARE RX\\
28 \hyperref{CF}{}{}{i_CF} COMPARE, AS UP RX\\
49 \hyperref{CH}{}{}{i_CH} COMPARE HALFWORD RX\\
55 \hyperref{CL}{}{}{i_CL} COMPARE LOGICAL RX\\
95 \hyperref{CLI}{}{}{i_CLI} COMPARE LOGICAL IMMEDIATE SI\\
15 \hyperref{CLR}{}{}{i_CLR} COMPARE LOGICAL RR\\
19 \hyperref{CR}{}{}{i_CR} COMPARE RR\\
5D \hyperref{D}{}{}{i_D} DIVIDE RX\\
1D \hyperref{DR}{}{}{i_DR} DIVIDE RR\\
60 \hyperref{FPA}{}{}{i_FPA} PRIMARY ADDRESS RX\\
30 \hyperref{FPAI}{}{}{i_FPAI} PRIMARY ADDRESS, IGNORE SS RX\\
62 \hyperref{FPR}{}{}{i_FPR} READ RANDOM RX\\
64 \hyperref{FPRB2}{}{}{i_FPRB2} READ BLOCK (SS=2) RX\\
65 \hyperref{FPRB2C}{}{}{i_FPRB2C} READ BLOCK (SS=2, COUNT GUARD) PL\\
66 \hyperref{FPRBC}{}{}{i_FPRBC} READ BLOCK (COUNT) PL\\
63 \hyperref{FPRNTA}{}{}{i_FPRNTA} READ SECONDARY ADDRESS RX\\
67 \hyperref{FPW}{}{}{i_FPW} WRITE RANDOM PL\\
69 \hyperref{FPWBC}{}{}{i_FPWBC} WRITE BLOCK (COUNT) PL\\
68 \hyperref{FPWI}{}{}{i_FPWI} WRITE RANDOM INDIRECT PL\\
32 \hyperref{FPWIG}{}{}{i_FPWIG} WRITE RANDOM, IGNORE SS PL\\
6A \hyperref{FPWBP}{}{}{i_FPWBP} WRITE PIPELINED (COUNT) PL\\
61 \hyperref{FPWNTA}{}{}{i_FPWNTA} SECONDARY ADDRESS RX\\
31 \hyperref{FPWNTAI}{}{}{i_FPWNTAI} SECONDARY ADDRESS, IGNORE SS RX\\
7A \hyperref{FR}{}{}{i_FR} PRIMARY, SECONDARY, READ RANDOM PL\\
7B \hyperref{FRB2}{}{}{i_FRB2} PRIMARY, SECONDARY, READ BLOCK PL\\
7C \hyperref{FRB2C}{}{}{i_FRB2C} PRIMARY, SECONDARY, READ BLOCK PL\\
7D \hyperref{FRBC}{}{}{i_FRBC} PRIMARY, SECONDARY, READ BLOCK PL\\
72 \hyperref{FSR}{}{}{i_FSR} SECONDARY, READ RANDOM PL\\
73 \hyperref{FSRB2}{}{}{i_FSRB2} SECONDARY, READ BLOCK PL\\
74 \hyperref{FSRB2C}{}{}{i_FSRB2C} SECONDARY, READ BLOCK PL\\
75 \hyperref{FSRBC}{}{}{i_FSRBC} SECONDARY, READ BLOCK PL\\
76 \hyperref{FSW}{}{}{i_FSW} SECONDARY, WRITE RANDOM PL\\
77 \hyperref{FSWBC}{}{}{i_FSWBC} SECONDARY, WRITE BLOCK PL\\
78 \hyperref{FSWI}{}{}{i_FSWI} SECONDARY, WRITE RANDOM INDIRECT PL\\
7E \hyperref{FW}{}{}{i_FW} PRIMARY, SECONDARY, WRITE RAND. PL\\
7F \hyperref{FWBC}{}{}{i_FWBC} PRIMARY, SECONDARY, WRITE BLOCK PL\\
6E \hyperref{HALT}{}{}{i_HALT} WRITE CSR\#0 RX\\
43 \hyperref{IC}{}{}{i_IC} INSERT CHARACTER RX\\
58 \hyperref{L}{}{}{i_L} LOAD RX\\
27 \hyperref{LF}{}{}{i_LF} LOAD, AS UP RX\\
41 \hyperref{LA}{}{}{i_LA} LOAD ADDRESS RX\\
20 \hyperref{LAF}{}{}{i_LAF} LOAD ADDRESS, AS UP RX\\
13 \hyperref{LCR}{}{}{i_LCR} LOAD COMPLEMENT RR\\
48 \hyperref{LH}{}{}{i_LH} LOAD HALFWORD RX\\
98 \hyperref{LM}{}{}{i_LM} LOAD MULTIPLE RS\\
81 \hyperref{LMSK}{}{}{i_LMSK} LOAD MASKS S\\
11 \hyperref{LNR}{}{}{i_LNR} LOAD NEGATIVE RR\\
A2 \hyperref{LPC}{}{}{i_LPC} LOAD PC (16 BIT) S\\
10 \hyperref{LPR}{}{}{i_LPR} LOAD POSITIVE RR\\
82 \hyperref{LPSW}{}{}{i_LPSW} LOAD PSW S\\
18 \hyperref{LR}{}{}{i_LR} LOAD RR\\
12 \hyperref{LTR}{}{}{i_LTR} LOAD AND TEST RR\\
5C \hyperref{M}{}{}{i_M} MULTIPLY RX\\
4C \hyperref{MH}{}{}{i_MH} MULTIPLY HALFWORD RX\\
1C \hyperref{MR}{}{}{i_MR} MULTIPLY RR\\
92 \hyperref{MVI}{}{}{i_MVI} MOVE IMMEDIATE SI\\
54 \hyperref{N}{}{}{i_N} AND RX\\
24 \hyperref{NF}{}{}{i_NF} AND, AS UP RX\\
94 \hyperref{NI}{}{}{i_NI} AND IMMEDIATE SI\\
14 \hyperref{NR}{}{}{i_NR} AND RR\\
56 \hyperref{O}{}{}{i_O} OR RX\\
25 \hyperref{OF}{}{}{i_OF} OR, AS UP RX\\
96 \hyperref{OI}{}{}{i_OI} OR IMMEDIATE SI\\
16 \hyperref{OR}{}{}{i_OR} OR RR\\
6F \hyperref{RCSR0}{}{}{i_RCSR0} READ CSR\#0 RX\\
5B \hyperref{S}{}{}{i_S} SUBTRACT RX\\
2A \hyperref{SF}{}{}{i_SF} SUBTRACT, AS UP RX\\
4B \hyperref{SH}{}{}{i_SH} SUBTRACT HALFWORD RX\\
5F \hyperref{SL}{}{}{i_SL} SUBTRACT LOGICAL RX\\
8B \hyperref{SLA}{}{}{i_SLA} SHIFT LEFT SINGLE RS\\
9C \hyperref{SLAB}{}{}{i_SLAB} SHIFT LEFT BYTE RS\\
8F \hyperref{SLDA}{}{}{i_SLDA} SHIFT LEFT DOUBLE RS\\
8D \hyperref{SLDL}{}{}{i_SLDL} SHIFT LEFT DOUBLE LOGICAL RS\\
89 \hyperref{SLL}{}{}{i_SLL} SHIFT LEFT SINGLE LOGICAL RS\\
9A \hyperref{SLLB}{}{}{i_SLLB} SHIFT LEFT LOGICAL BYTE RS\\
1F \hyperref{SLR}{}{}{i_SLR} SUBTRACT LOGICAL RR\\
04 \hyperref{SPM}{}{}{i_SPM} SET PROGRAM MASK RR\\
1B \hyperref{SR}{}{}{i_SR} SUBTRACT RR\\
9E \hyperref{SR32}{}{}{i_SR32} SHIFT RIGHT 32 RS\\
8A \hyperref{SRA}{}{}{i_SRA} SHIFT RIGHT SINGLE RS\\
9D \hyperref{SRAB}{}{}{i_SRAB} SHIFT RIGHT BYTE RS\\
8E \hyperref{SRDA}{}{}{i_SRDA} SHIFT RIGHT DOUBLE RS\\
8C \hyperref{SRDL}{}{}{i_SRDL} SHIFT RIGHT DOUBLE LOGICAL RS\\
88 \hyperref{SRL}{}{}{i_SRL} SHIFT RIGHT SINGLE LOGICAL RS\\
9B \hyperref{SRLB}{}{}{i_SRLB} SHIFT RIGHT LOGICAL BYTE RS\\
80 \hyperref{SSM}{}{}{i_SSM} SET SYSTEM MASK S\\
50 \hyperref{ST}{}{}{i_ST} STORE RX\\
23 \hyperref{STF}{}{}{i_STF} STORE, AS UP RX\\
42 \hyperref{STC}{}{}{i_STC} STORE CHARACTER RX\\
40 \hyperref{STH}{}{}{i_STH} STORE HALFWORD RX\\
90 \hyperref{STM}{}{}{i_STM} STORE MULTIPLE RS\\
91 \hyperref{TM}{}{}{i_TM} TEST UNDER MASK SI\\
6E \hyperref{WCSR0}{}{}{i_WCSR0} WRITE CSR\#0 RX\\
99 \hyperref{WCSR0X}{}{}{i_WCSR0X} WRITE CSR\#0 RS\\
57 \hyperref{X}{}{}{i_X} EXCLUSIVE OR RX\\
26 \hyperref{XF}{}{}{i_XF} EXCLUSIVE OR, AS UP RX\\
97 \hyperref{XI}{}{}{i_XI} EXCLUSIVE OR IMMEDIATE SI\\
17 \hyperref{XR}{}{}{i_XR} EXCLUSIVE OR RR\\
\begin{rawhtml}\end{rawhtml}
\end{htmlonly}
\section{SSP Instructions (numerical order)}
\begin{latexonly}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 8: SSP Instructions (numeric order)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
03 & BALRM & BRANCH AND SAVE MASKS & RR\\
04 & SPM & SET PROGRAM MASK & RR\\
05 & BALR & BRANCH AND LINK & RR\\
06 & BCTR & BRANCH ON COUNT & RR\\
07 & BCR & BRANCH ON CONDITION & RR\\
08 & BALR0M & SPECIAL BALR (SAVE MASKS) & RR\\
09 & BALR0 & SPECIAL BALR & RR\\
0A & BCTR0 & SPECIAL BCTR & RR\\
0B & BCR0 & SPECIAL BCR & RR\\
10 & LPR & LOAD POSITIVE & RR\\
11 & LNR & LOAD NEGATIVE & RR\\
12 & LTR & LOAD AND TEST & RR\\
13 & LCR & LOAD COMPLEMENT & RR\\
14 & NR & AND & RR\\
15 & CLR & COMPARE LOGICAL & RR\\
16 & OR & OR & RR\\
17 & XR & EXCLUSIVE OR & RR\\
18 & LR & LOAD & RR\\
19 & CR & COMPARE & RR\\
1A & AR & ADD & RR\\
1B & SR & SUBTRACT & RR\\
1C & MR & MULTIPLY & RR\\
1D & DR & DIVIDE & RR\\
1E & ALR & ADD LOGICAL & RR\\
1F & SLR & SUBTRACT LOGICAL & RR\\
20 & LAF & LOAD ADDRESS, AS UP & RX\\
21 & BCTF & BRANCH ON COUNT, AS UP & RX\\
22 & BCF & BRANCH ON CONDITION, AS UP & RX\\
23 & STF & STORE, AS UP & RX\\
24 & NF & AND, AS UP & RX\\
25 & OF & OR, AS UP & RX\\
26 & XF & EXCLUSIVE OR, AS UP & RX\\
27 & LF & LOAD, AS UP & RX\\
28 & CF & COMPARE, AS UP & RX\\
29 & AF & ADD, AS UP & RX\\
2A & SF & SUBTRACT, AS UP & RX\\
30 & FPAI & PRIMARY ADDRESS, IGNORE SS & RX\\
31 & FPWNTAI & SECONDARY ADDRESS, IGNORE SS & RX\\
32 & FPWIG & WRITE RANDOM, IGNORE SS & PL\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 8: SSP Instructions (numeric order cont.)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
40 & STH & STORE HALFWORD & RX\\
41 & LA & LOAD ADDRESS & RX\\
42 & STC & STORE CHARACTER & RX\\
43 & IC & INSERT CHARACTER & RX\\
44 & BALM & BRANCH AND SAVE MASKS & RR\\
45 & BAL & BRANCH AND LINK & RX\\
46 & BCT & BRANCH ON COUNT & RX\\
47 & BC & BRANCH ON CONDITION & RX\\
48 & LH & LOAD HALFWORD & RX\\
49 & CH & COMPARE HALFWORD & RX\\
4A & AH & ADD HALFWORD & RX\\
4B & SH & SUBTRACT HALFWORD & RX\\
4C & MH & MULTIPLY HALFWORD & RX\\
50 & ST & STORE & RX\\
54 & N & AND & RX\\
55 & CL & COMPARE LOGICAL & RX\\
56 & O & OR & RX\\
57 & X & EXCLUSIVE OR & RX\\
58 & L & LOAD & RX\\
59 & C & COMPARE & RX\\
5A & A & ADD & RX\\
5B & S & SUBTRACT & RX\\
5C & M & MULTIPLY & RX\\
5D & D & DIVIDE & RX\\
5E & AL & ADD LOGICAL & RX\\
5F & SL & SUBTRACT LOGICAL & RX\\
60 & FPA & PRIMARY ADDRESS & RX\\
61 & FPWNTA & SECONDARY ADDRESS & RX\\
62 & FPR & READ RANDOM & RX\\
63 & FPRNTA & READ SECONDARY ADDRESS & RX\\
64 & FPRB2 & READ BLOCK (SS=2) & RX\\
65 & FPRB2C & READ BLOCK (SS=2, COUNT GUARD) & PL\\
66 & FPRBC & READ BLOCK (COUNT) & PL\\
67 & FPW & WRITE RANDOM & PL\\
68 & FPWI & WRITE RANDOM INDIRECT & PL\\
69 & FPWBC & WRITE BLOCK (COUNT) & PL\\
6A & FPWBP & WRITE PIPELINED (COUNT) & PL\\
6E & WCSR0,HALT & WRITE CSR\#0 & RX\\
6F & RCSR0 & READ CSR\#0 & RX\\
72 & FSR & SECONDARY, READ RANDOM & PL\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|llll|}
\multicolumn{4}{c}{\large {Table 8: SSP Instructions (numeric order cont.)}}\\
\hline
{\bf Op} & & &\\
{\bf Code} & {\bf Mnemonic} & {\bf Name} & {\bf Type}\\
\hline
73 & FSRB2 & SECONDARY, READ BLOCK & PL\\
74 & FSRB2C & SECONDARY, READ BLOCK & PL\\
75 & FSRBC & SECONDARY, READ BLOCK & PL\\
76 & FSW & SECONDARY, WRITE RANDOM & PL\\
77 & FSWBC & SECONDARY, WRITE BLOCK & PL\\
78 & FSWI & SECONDARY, WRITE RANDOM INDIRECT& PL\\
7A & FR & PRIMARY, SECONDARY, READ RANDOM & PL\\
7B & FRB2 & PRIMARY, SECONDARY, READ BLOCK & PL\\
7C & FRB2C & PRIMARY, SECONDARY, READ BLOCK & PL\\
7D & FRBC & PRIMARY, SECONDARY, READ BLOCK & PL\\
7E & FW & PRIMARY, SECONDARY, WRITE RAND. & PL\\
7F & FWBC & PRIMARY, SECONDARY, WRITE BLOCK & PL\\
80 & SSM & SET SYSTEM MASK & S\\
81 & LMSK & LOAD MASKS & S\\
82 & LPSW & LOAD PSW & S\\
86 & BXH & BRANCH ON INDEX HIGH & RS\\
87 & BXLE & BRANCH ON INDEX LOW OR EQUAL & RS\\
88 & SRL & SHIFT RIGHT SINGLE LOGICAL & RS\\
89 & SLL & SHIFT LEFT SINGLE LOGICAL & RS\\
8A & SRA & SHIFT RIGHT SINGLE & RS\\
8B & SLA & SHIFT LEFT SINGLE & RS\\
8C & SRDL & SHIFT RIGHT DOUBLE LOGICAL & RS\\
8D & SLDL & SHIFT LEFT DOUBLE LOGICAL & RS\\
8E & SRDA & SHIFT RIGHT DOUBLE & RS\\
8F & SLDA & SHIFT LEFT DOUBLE & RS\\
90 & STM & STORE MULTIPLE & RS\\
91 & TM & TEST UNDER MASK & SI\\
92 & MVI & MOVE IMMEDIATE & SI\\
94 & NI & AND IMMEDIATE & SI\\
95 & CLI & COMPARE LOGICAL IMMEDIATE & SI\\
96 & OI & OR IMMEDIATE & SI\\
97 & XI & EXCLUSIVE OR IMMEDIATE & SI\\
98 & LM & LOAD MULTIPLE & RS\\
99 & WCSR0X & WRITE CSR\#0 & RS\\
9A & SLLB & SHIFT LEFT LOGICAL BYTE & RS\\
9B & SRLB & SHIFT RIGHT LOGICAL BYTE & RS\\
9C & SLAB & SHIFT LEFT BYTE & RS\\
9D & SRAB & SHIFT RIGHT BYTE & RS\\
9E & SR32 & SHIFT RIGHT 32 & RS\\
A2 & LPC & LOAD PC (16 BIT) & S\\
\hline
\end{tabular}
\end{center}
\end{latexonly}
\begin{htmlonly}
{\large {Table 8: SSP Instructions (numeric order cont.)}}\\
\begin{rawhtml}\end{rawhtml}
{\bf Op}\\
{\bf Code} {\bf Mnemonic} {\bf Name} {\bf Type}\\
03 \hyperref{BALRM}{}{}{i_BALRM} BRANCH AND SAVE MASKS RR\\
04 \hyperref{SPM}{}{}{i_SPM} SET PROGRAM MASK RR\\
05 \hyperref{BALR}{}{}{i_BALR} BRANCH AND LINK RR\\
06 \hyperref{BCTR}{}{}{i_BCTR} BRANCH ON COUNT RR\\
07 \hyperref{BCR}{}{}{i_BCR} BRANCH ON CONDITION RR\\
08 \hyperref{BALR0M}{}{}{i_BALR0M} SPECIAL BALR (SAVE MASKS) RR\\
09 \hyperref{BALR0}{}{}{i_BALR0} SPECIAL BALR RR\\
0A \hyperref{BCTR0}{}{}{i_BCTR0} SPECIAL BCTR RR\\
0B \hyperref{BCR0}{}{}{i_BCR0} SPECIAL BCR RR\\
10 \hyperref{LPR}{}{}{i_LPR} LOAD POSITIVE RR\\
11 \hyperref{LNR}{}{}{i_LNR} LOAD NEGATIVE RR\\
12 \hyperref{LTR}{}{}{i_LTR} LOAD AND TEST RR\\
13 \hyperref{LCR}{}{}{i_LCR} LOAD COMPLEMENT RR\\
14 \hyperref{NR}{}{}{i_NR} AND RR\\
15 \hyperref{CLR}{}{}{i_CLR} COMPARE LOGICAL RR\\
16 \hyperref{OR}{}{}{i_OR} OR RR\\
17 \hyperref{XR}{}{}{i_XR} EXCLUSIVE OR RR\\
18 \hyperref{LR}{}{}{i_LR} LOAD RR\\
19 \hyperref{CR}{}{}{i_CR} COMPARE RR\\
1A \hyperref{AR}{}{}{i_AR} ADD RR\\
1B \hyperref{SR}{}{}{i_SR} SUBTRACT RR\\
1C \hyperref{MR}{}{}{i_MR} MULTIPLY RR\\
1D \hyperref{DR}{}{}{i_DR} DIVIDE RR\\
1E \hyperref{ALR}{}{}{i_ALR} ADD LOGICAL RR\\
1F \hyperref{SLR}{}{}{i_SLR} SUBTRACT LOGICAL RR\\
20 \hyperref{LAF}{}{}{i_LAF} LOAD ADDRESS, AS UP RX\\
21 \hyperref{BCTF}{}{}{i_BCTF} BRANCH ON COUNT, AS UP RX\\
22 \hyperref{BCF}{}{}{i_BCF} BRANCH ON CONDITION, AS UP RX\\
23 \hyperref{STF}{}{}{i_STF} STORE, AS UP RX\\
24 \hyperref{NF}{}{}{i_NF} AND, AS UP RX\\
25 \hyperref{OF}{}{}{i_OF} OR, AS UP RX\\
26 \hyperref{XF}{}{}{i_XF} EXCLUSIVE OR, AS UP RX\\
27 \hyperref{LF}{}{}{i_LF} LOAD, AS UP RX\\
28 \hyperref{CF}{}{}{i_CF} COMPARE, AS UP RX\\
29 \hyperref{AF}{}{}{i_AF} ADD, AS UP RX\\
2A \hyperref{SF}{}{}{i_SF} SUBTRACT, AS UP RX\\
30 \hyperref{FPAI}{}{}{i_FPAI} PRIMARY ADDRESS, IGNORE SS RX\\
31 \hyperref{FPWNTAI}{}{}{i_FPWNTAI} SECONDARY ADDRESS, IGNORE SS RX\\
32 \hyperref{FPWIG}{}{}{i_FPWIG} WRITE RANDOM, IGNORE SS PL\\
40 \hyperref{STH}{}{}{i_STH} STORE HALFWORD RX\\
41 \hyperref{LA}{}{}{i_LA} LOAD ADDRESS RX\\
42 \hyperref{STC}{}{}{i_STC} STORE CHARACTER RX\\
43 \hyperref{IC}{}{}{i_IC} INSERT CHARACTER RX\\
44 \hyperref{BALM}{}{}{i_BALM} BRANCH AND SAVE MASKS RR\\
45 \hyperref{BAL}{}{}{i_BAL} BRANCH AND LINK RX\\
46 \hyperref{BCT}{}{}{i_BCT} BRANCH ON COUNT RX\\
47 \hyperref{BC}{}{}{i_BC} BRANCH ON CONDITION RX\\
48 \hyperref{LH}{}{}{i_LH} LOAD HALFWORD RX\\
49 \hyperref{CH}{}{}{i_CH} COMPARE HALFWORD RX\\
4A \hyperref{AH}{}{}{i_AH} ADD HALFWORD RX\\
4B \hyperref{SH}{}{}{i_SH} SUBTRACT HALFWORD RX\\
4C \hyperref{MH}{}{}{i_MH} MULTIPLY HALFWORD RX\\
50 \hyperref{ST}{}{}{i_ST} STORE RX\\
54 \hyperref{N}{}{}{i_N} AND RX\\
55 \hyperref{CL}{}{}{i_CL} COMPARE LOGICAL RX\\
56 \hyperref{O}{}{}{i_O} OR RX\\
57 \hyperref{X}{}{}{i_X} EXCLUSIVE OR RX\\
58 \hyperref{L}{}{}{i_L} LOAD RX\\
59 \hyperref{C}{}{}{i_C} COMPARE RX\\
5A \hyperref{A}{}{}{i_A} ADD RX\\
5B \hyperref{S}{}{}{i_S} SUBTRACT RX\\
5C \hyperref{M}{}{}{i_M} MULTIPLY RX\\
5D \hyperref{D}{}{}{i_D} DIVIDE RX\\
5E \hyperref{AL}{}{}{i_AL} ADD LOGICAL RX\\
5F \hyperref{SL}{}{}{i_SL} SUBTRACT LOGICAL RX\\
60 \hyperref{FPA}{}{}{i_FPA} PRIMARY ADDRESS RX\\
61 \hyperref{FPWNTA}{}{}{i_FPWNTA} SECONDARY ADDRESS RX\\
62 \hyperref{FPR}{}{}{i_FPR} READ RANDOM RX\\
63 \hyperref{FPRNTA}{}{}{i_FPRNTA} READ SECONDARY ADDRESS RX\\
64 \hyperref{FPRB2}{}{}{i_FPRB2} READ BLOCK (SS=2) RX\\
65 \hyperref{FPRB2C}{}{}{i_FPRB2C} READ BLOCK (SS=2, COUNT GUARD) PL\\
66 \hyperref{FPRBC}{}{}{i_FPRBC} READ BLOCK (COUNT) PL\\
67 \hyperref{FPW}{}{}{i_FPW} WRITE RANDOM PL\\
68 \hyperref{FPWI}{}{}{i_FPWI} WRITE RANDOM INDIRECT PL\\
69 \hyperref{FPWBC}{}{}{i_FPWBC} WRITE BLOCK (COUNT) PL\\
6A \hyperref{FPWBP}{}{}{i_FPWBP} WRITE PIPELINED (COUNT) PL\\
6E \hyperref{HALT}{}{}{i_HALT} WRITE CSR\#0 RX\\
6E \hyperref{WCSR0}{}{}{i_WCSR0} WRITE CSR\#0 RX\\
6F \hyperref{RCSR0}{}{}{i_RCSR0} READ CSR\#0 RX\\
72 \hyperref{FSR}{}{}{i_FSR} SECONDARY, READ RANDOM PL\\
73 \hyperref{FSRB2}{}{}{i_FSRB2} SECONDARY, READ BLOCK PL\\
74 \hyperref{FSRB2C}{}{}{i_FSRB2C} SECONDARY, READ BLOCK PL\\
75 \hyperref{FSRBC}{}{}{i_FSRBC} SECONDARY, READ BLOCK PL\\
76 \hyperref{FSW}{}{}{i_FSW} SECONDARY, WRITE RANDOM PL\\
77 \hyperref{FSWBC}{}{}{i_FSWBC} SECONDARY, WRITE BLOCK PL\\
78 \hyperref{FSWI}{}{}{i_FSWI} SECONDARY, WRITE RANDOM INDIRECT PL\\
7A \hyperref{FR}{}{}{i_FR} PRIMARY, SECONDARY, READ RANDOM PL\\
7B \hyperref{FRB2}{}{}{i_FRB2} PRIMARY, SECONDARY, READ BLOCK PL\\
7C \hyperref{FRB2C}{}{}{i_FRB2C} PRIMARY, SECONDARY, READ BLOCK PL\\
7D \hyperref{FRBC}{}{}{i_FRBC} PRIMARY, SECONDARY, READ BLOCK PL\\
7E \hyperref{FW}{}{}{i_FW} PRIMARY, SECONDARY, WRITE RAND. PL\\
7F \hyperref{FWBC}{}{}{i_FWBC} PRIMARY, SECONDARY, WRITE BLOCK PL\\
80 \hyperref{SSM}{}{}{i_SSM} SET SYSTEM MASK S\\
81 \hyperref{LMSK}{}{}{i_LMSK} LOAD MASKS S\\
82 \hyperref{LPSW}{}{}{i_LPSW} LOAD PSW S\\
86 \hyperref{BXH}{}{}{i_BXH} BRANCH ON INDEX HIGH RS\\
87 \hyperref{BXLE}{}{}{i_BXLE} BRANCH ON INDEX LOW OR EQUAL RS\\
88 \hyperref{SRL}{}{}{i_SRL} SHIFT RIGHT SINGLE LOGICAL RS\\
89 \hyperref{SLL}{}{}{i_SLL} SHIFT LEFT SINGLE LOGICAL RS\\
8A \hyperref{SRA}{}{}{i_SRA} SHIFT RIGHT SINGLE RS\\
8B \hyperref{SLA}{}{}{i_SLA} SHIFT LEFT SINGLE RS\\
8C \hyperref{SRDL}{}{}{i_SRDL} SHIFT RIGHT DOUBLE LOGICAL RS\\
8D \hyperref{SLDL}{}{}{i_SLDL} SHIFT LEFT DOUBLE LOGICAL RS\\
8E \hyperref{SRDA}{}{}{i_SRDA} SHIFT RIGHT DOUBLE RS\\
8F \hyperref{SLDA}{}{}{i_SLDA} SHIFT LEFT DOUBLE RS\\
90 \hyperref{STM}{}{}{i_STM} STORE MULTIPLE RS\\
91 \hyperref{TM}{}{}{i_TM} TEST UNDER MASK SI\\
92 \hyperref{MVI}{}{}{i_MVI} MOVE IMMEDIATE SI\\
94 \hyperref{NI}{}{}{i_NI} AND IMMEDIATE SI\\
95 \hyperref{CLI}{}{}{i_CLI} COMPARE LOGICAL IMMEDIATE SI\\
96 \hyperref{OI}{}{}{i_OI} OR IMMEDIATE SI\\
97 \hyperref{XI}{}{}{i_XI} EXCLUSIVE OR IMMEDIATE SI\\
98 \hyperref{LM}{}{}{i_LM} LOAD MULTIPLE RS\\
99 \hyperref{WCSR0X}{}{}{i_WCSR0X} WRITE CSR\#0 RS\\
9A \hyperref{SLLB}{}{}{i_SLLB} SHIFT LEFT LOGICAL BYTE RS\\
9B \hyperref{SRLB}{}{}{i_SRLB} SHIFT RIGHT LOGICAL BYTE RS\\
9C \hyperref{SLAB}{}{}{i_SLAB} SHIFT LEFT BYTE RS\\
9D \hyperref{SRAB}{}{}{i_SRAB} SHIFT RIGHT BYTE RS\\
9E \hyperref{SR32}{}{}{i_SR32} SHIFT RIGHT 32
RS\\
A2 \hyperref{LPC}{}{}{i_LPC} LOAD PC (16 BIT) S\\
\begin{rawhtml}\end{rawhtml}
\end{htmlonly}
\cleardoublepage
\typeout{index}
\begin{theindex}
\item{A}\dotfill{{\bf{35}}}
\item{AF}\dotfill{{\bf{86}}}
\item{AH}\dotfill{{\bf{36}}}
\item{AL}\dotfill{{\bf{37}}}
\item{ALR}\dotfill{{\bf{37}}}
\item{AND Instruction}\dotfill{38}
\item{AR}\dotfill{{\bf{35}}}
\item{AS}\dotfill{71}
\item{Add Halfword}\dotfill{36}
\item{Add Instruction}\dotfill{35}
\item{Add Logical}\dotfill{37}
\item{Address Generation}\dotfill{{\bf{31}}}
\item{Arbitration}\dotfill{19,71}
\indexspace
\item{BAL}\dotfill{{\bf{39}}}
\item{BALM}\dotfill{85}
\item{BALR}\dotfill{{\bf{39}}}
\item{BALR0M}\dotfill{22,{\bf{86}}}
\item{BALR0}\dotfill{22,85}
\item{BALRM}\dotfill{85}
\item{BALR}\dotfill{22,85}
\item{BAL}\dotfill{22}
\item{BC}\dotfill{{\bf{40}}}
\item{BCF}\dotfill{{\bf{86}}}
\item{BCR}\dotfill{{\bf{40}}}
\item{BCR0}\dotfill{85}
\item{BCR}\dotfill{85}
\item{BCT}\dotfill{{\bf{41}}}
\item{BCTF}\dotfill{{\bf{86}}}
\item{BCTR}\dotfill{{\bf{41}}}
\item{BCTR0}\dotfill{85}
\item{BCTR}\dotfill{85}
\item{BXH}\dotfill{{\bf{42}}}
\item{BXLE}\dotfill{{\bf{43}}}
\item{Base Address}\dotfill{{\bf{31}}}
\item{Block Transfer}\dotfill{13,74,{\bf{81}}}
\item{Branch and Link}\dotfill{39}
\item{Branching}\dotfill{33,39}
\item{Broadcast}\dotfill{{\bf{12}},16,18,71,87}
\item{Busy}\dotfill{12,{\bf{20}}}
\indexspace
\item{C}\dotfill{{\bf{43}}}
\item{CF}\dotfill{{\bf{86}}}
\item{CH}\dotfill{{\bf{44}}}
\item{CL}\dotfill{{\bf{45}}}
\item{CLI}\dotfill{{\bf{45}}}
\item{CLR}\dotfill{{\bf{45}}}
\item{CR}\dotfill{{\bf{43}}}
\item{CSR\#0}\dotfill{14,{\bf{16}},84,85}
\item{CSR\#8}\dotfill{12,{\bf{15}},{\bf{19}}}
\item{Cable Segment}\dotfill{11,17,87,88}
\item{Class N}\dotfill{12,16,17}
\item{Compare Instruction}\dotfill{43}
\item{Condition Code}\dotfill{23,25,33}
\indexspace
\item{D}\dotfill{{\bf{46}}}
\item{DONE}\dotfill{11,12,16}
\item{DR}\dotfill{{\bf{46}}}
\item{Data Memory}\dotfill{12,87}
\item{Displacement}\dotfill{{\bf{32}}}
\item{Divide Instruction}\dotfill{46}
\indexspace
\item{EG}\dotfill{23}
\item{EPM}\dotfill{16,{\bf{22}},81,84,85}
\item{Error Handler}\dotfill{{\bf{20}},81}
\item{Exception}\dotfill{23,{\bf{24}},24,82}
\item{Extended Mnemonic Instructions}\dotfill{36,44,68}
\indexspace
\item{FPA}\dotfill{{\bf{71}}}
\item{FPAI}\dotfill{{\bf{86}}}
\item{FPR}\dotfill{{\bf{72}}}
\item{FPRB2}\dotfill{{\bf{73}}}
\item{FPRB2C}\dotfill{{\bf{73}}}
\item{FPRBC}\dotfill{{\bf{73}}}
\item{FPRNTA}\dotfill{{\bf{72}}}
\item{FPW}\dotfill{{\bf{74}}}
\item{FPWBC}\dotfill{{\bf{74}}}
\item{FPWBP}\dotfill{88}
\item{FPWI}\dotfill{{\bf{74}}}
\item{FPWIG}\dotfill{{\bf{86}}}
\item{FPWNTA}\dotfill{{\bf{72}}}
\item{FPWNTAI}\dotfill{{\bf{86}}}
\item{FPWPB}\dotfill{{\bf{75}}}
\item{FR}\dotfill{{\bf{77}}}
\item{FRB2}\dotfill{{\bf{78}}}
\item{FRB2C}\dotfill{{\bf{78}}}
\item{FRBC}\dotfill{{\bf{79}}}
\item{FSR}\dotfill{{\bf{75}}}
\item{FSRB2}\dotfill{{\bf{75}}}
\item{FSRB2C}\dotfill{{\bf{76}}}
\item{FSRBC}\dotfill{{\bf{76}}}
\item{FSW}\dotfill{{\bf{76}}}
\item{FSWBC}\dotfill{{\bf{77}}}
\item{FSWI}\dotfill{{\bf{77}}}
\item{FW}\dotfill{{\bf{79}}}
\item{FWBC}\dotfill{{\bf{80}}}
\indexspace
\item{GK}\dotfill{16,{\bf{17}}}
\indexspace
\item{IC}\dotfill{{\bf{48}}}
\item{IPL}\dotfill{22}
\item{Immediate}\dotfill{31}
\item{Index}\dotfill{{\bf{32}}}
\item{Instruction Format}\dotfill{{\bf{31}}}
\item{Interrupt}\dotfill{20,23,25}
\indexspace
\item{Jumpers}\dotfill{87}
\indexspace
\item{L}\dotfill{{\bf{49}}}
\item{LA}\dotfill{{\bf{49}}}
\item{LAF}\dotfill{{\bf{86}}}
\item{LCR}\dotfill{{\bf{50}}}
\item{LED's}\dotfill{11}
\item{LF}\dotfill{{\bf{86}}}
\item{LH}\dotfill{{\bf{51}}}
\item{LM}\dotfill{{\bf{52}}}
\item{LMSK}\dotfill{22,{\bf{85}}}
\item{LNR}\dotfill{{\bf{52}}}
\item{LPC}\dotfill{{\bf{85}}}
\item{LPR}\dotfill{{\bf{53}}}
\item{LPSW}\dotfill{22,{\bf{84}}}
\item{LR}\dotfill{{\bf{49}}}
\item{LTR}\dotfill{{\bf{50}}}
\item{Load Instruction}\dotfill{49}
\indexspace
\item{M}\dotfill{{\bf{54}}}
\item{MAR}\dotfill{20,24,{\bf{81}}}
\item{MH}\dotfill{{\bf{55}}}
\item{MR}\dotfill{{\bf{54}}}
\item{MS}\dotfill{23,{\bf{71}},78}
\item{MVI}\dotfill{{\bf{53}}}
\indexspace
\item{N}\dotfill{{\bf{38}}}
\item{NF}\dotfill{{\bf{86}}}
\item{NI}\dotfill{{\bf{38}}}
\item{NPA}\dotfill{23,{\bf{25}},26}
\item{NR}\dotfill{{\bf{38}}}
\item{NTA}\dotfill{72,81,82}
\indexspace
\item{O}\dotfill{{\bf{56}}}
\item{OF}\dotfill{{\bf{86}}}
\item{OI}\dotfill{{\bf{56}}}
\item{OR}\dotfill{{\bf{56}}}
\item{Overflow}\dotfill{21,23,24,{\bf{25}},36,85}
\indexspace
\item{PC}\dotfill{22}
\item{PSW}\dotfill{20,22,{\bf{23}},25,28,{\bf{32}},84}
\item{Parity}\dotfill{13}
\item{Pipeline Transfer}\dotfill{74,81,{\bf{88}}}
\item{Power Fail}\dotfill{11,{\bf{18}}}
\item{Primary Address}\dotfill{71,78}
\item{Processor Status Word}\dotfill{84}
\item{Program Counter}\dotfill{85}
\item{Program Mask}\dotfill{86}
\item{Program Memory}\dotfill{12}
\indexspace
\item{RB}\dotfill{{\bf{13}},{\bf{18}},87}
\item{RCSR0}\dotfill{{\bf{85}}}
\item{RUN}\dotfill{{\bf{18}},20}
\item{Read-Modify-Write}\dotfill{86}
\item{Reset}\dotfill{11}
\indexspace
\item{S}\dotfill{{\bf{65}}}
\item{SF}\dotfill{{\bf{86}}}
\item{SH}\dotfill{{\bf{66}}}
\item{SL}\dotfill{{\bf{67}}}
\item{SLA}\dotfill{{\bf{59}}}
\item{SLAB}\dotfill{83}
\item{SLDA}\dotfill{{\bf{57}}}
\item{SLDL}\dotfill{{\bf{58}}}
\item{SLL}\dotfill{{\bf{60}}}
\item{SLLB}\dotfill{83}
\item{SLR}\dotfill{{\bf{66}}}
\item{SPM}\dotfill{{\bf{57}}}
\item{SR}\dotfill{{\bf{65}}}
\item{SR32}\dotfill{{\bf{83}}}
\item{SRA}\dotfill{{\bf{62}}}
\item{SRAB}\dotfill{83}
\item{SRDA}\dotfill{{\bf{60}}}
\item{SRDL}\dotfill{{\bf{61}}}
\item{SRL}\dotfill{{\bf{62}}}
\item{SRLB}\dotfill{{\bf{83}}}
\item{SR}\dotfill{11,12,16,17}
\item{SS}\dotfill{{\bf{13}}}
\item{SSM}\dotfill{{\bf{83}}}
\item{SS}\dotfill{20,21,23,24,71,72,81,86}
\item{ST}\dotfill{{\bf{63}}}
\item{START}\dotfill{11,14,20}
\item{STC}\dotfill{{\bf{63}}}
\item{STF}\dotfill{{\bf{86}}}
\item{STH}\dotfill{{\bf{64}}}
\item{STM}\dotfill{{\bf{64}}}
\item{Secondary Address}\dotfill{72}
\item{Single Step}\dotfill{11,16,{\bf{18}},87}
\item{System Mask}\dotfill{20,22,23,25,83,85}
\indexspace
\item{TM}\dotfill{{\bf{67}}}
\item{TP}\dotfill{12}
\item{Timeout}\dotfill{16,17,24}
\item{Timing}\dotfill{12}
\item{Trigger}\dotfill{11,16,{\bf{18}}}
\indexspace
\item{WCSR0}\dotfill{{\bf{84}}}
\item{WCSR0X}\dotfill{{\bf{84}}}
\item{WT}\dotfill{20,25}
\item{Word Count}\dotfill{21,24,72,82}
\indexspace
\item{X}\dotfill{{\bf{47}}}
\item{XF}\dotfill{{\bf{86}}}
\item{XI}\dotfill{{\bf{47}}}
\item{XR}\dotfill{{\bf{47}}}
\end{theindex}
\end{document}