summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorPokechu22 <Pokechu022@gmail.com>2021-08-14 17:34:24 -0700
committerPokechu22 <Pokechu022@gmail.com>2021-08-21 17:07:14 -0700
commit8fa649e1d64baacc5dc0b474e6fc914c7e348fe9 (patch)
tree966fd0b40af1b5dd36b805ee874a4bb29ec48c26 /docs
parent7c645e1865ba65394c9b96450ef4c9d815e9fe6d (diff)
docs/DSP: Document masking/sign extension behavior of registers
Diffstat (limited to 'docs')
-rw-r--r--docs/DSP/GameCube_DSP_Users_Manual/GameCube_DSP_Users_Manual.tex10
1 files changed, 9 insertions, 1 deletions
diff --git a/docs/DSP/GameCube_DSP_Users_Manual/GameCube_DSP_Users_Manual.tex b/docs/DSP/GameCube_DSP_Users_Manual/GameCube_DSP_Users_Manual.tex
index 2e1401d6d7..6980489b8c 100644
--- a/docs/DSP/GameCube_DSP_Users_Manual/GameCube_DSP_Users_Manual.tex
+++ b/docs/DSP/GameCube_DSP_Users_Manual/GameCube_DSP_Users_Manual.tex
@@ -482,6 +482,10 @@ The DSP has 32 16-bit registers, although their individual purpose and their fun
The DSP has two long 40-bit accumulators (\Register{\$acX}) and their short 24-bit forms (\Register{\$acsX}) that reflect the
upper part of 40-bit accumulator. There are additional two 32-bit accumulators (\Register{\$axX}).
+The high parts of the 40-bit accumulators (\Register{acX.h}) are sign-extended 8-bit registers. Writes to the upper 8 bits are ignored,
+and the upper 8 bits read the same as the 7th bit. For instance, \Value{0x007F} reads back as \Value{0x007F}, but \Value{0x0080} reads
+back as \Value{0xFF80}.
+
\textbf{Accumulators \Register{\$acX}:}
40-bit accumulator \Register{\$acX} (\Register{\$acX.hml}) consists of registers:
@@ -532,6 +536,8 @@ If the value is not zero, then the PC is modified by the value from call stack \
Its purpose is unknown at this time. It is written with \Value{0x00FF} and \Value{0x0004} values.
+This is an 8-bit register. Writes to the upper 8 bits are ignored and those bits always read back as 0.
+
\pagebreak{}
\section{Status register}
@@ -551,7 +557,7 @@ Furthermore, it also contains control bits to configure the flow of certain oper
\texttt{11} & \texttt{EIE} & External interrupt enable \\ \hline
\texttt{10} & & \\ \hline
\texttt{9} & \texttt{IE} & Interrupt enable \\ \hline
-\texttt{8} & \texttt{0} & Hardwired to 0? \\ \hline
+\texttt{8} & & Unknown, always reads back as 0 \\ \hline
\texttt{7} & \texttt{OS} & Overflow (sticky) \\ \hline
\texttt{6} & \texttt{LZ} & Logic zero (used by \Opcode{ANDCF} and \Opcode{ANDF}) \\ \hline
\texttt{5} & \texttt{TB} & Top two bits are equal \\ \hline
@@ -580,6 +586,8 @@ It needs to be noted that \InlineExpression{\$prod.m1 + \$prod.m2} overflow bit
Bit \RegisterField{\$sr.AM} affects the result of the multiply unit.
If \RegisterField{\$sr.AM} is equal 0 then the result of every multiply operation will be multiplied by two.
+\Register{prod.h} is 8 bits. The upper 8 bits always read back as 0.
+
\pagebreak{}
\chapter{Exceptions}