Errata for year 1999 (s1)  and  2000 (s2) notes:

      Section 2.3.5: when multiplying Q15*Q15 numbers to get a Q30 result, you need to shift LEFT and not RIGHT before truncation to get a Q15 answer.
      Section 3.3: when calculating the page and line for virtual memory, the page=floor(address/page_size) and line=address-page*page_size. floor() rounds the result
      down to an integer. So if page_size=100 and address=234, page=floor(234/100)=2 and line=234-2*100=34.
      Section 2.3.6: when talking about denormalized numbers, I said that the biggest denormalized number is slightly bigger than the smallest normalized number. This is
      true, but I incorrectly quoted the smallest normalized number as having an exponent of 0 (which is not allowed since it is a "special case".
      Section 4.1: when calculating speedup due to pipelining, the language is confusing. Consider the word "task" to mean "an instruction", and the "process" is "a
      program". On the next page, the efficiency formula uses the value for speedup. This is also confusing: it is not found logically, it is only found by working out the
      efficiency and then noticing that the answer is very similar to the answer fo