A student asks three interesting questions. None super-critical to 306, but some of you may be interested:

     Hello Dr. Patt
     I was reading the book and I had a few questions

     1. Is an interrupt always priveliged and done
     by the operating system? 

Never say always, because someone will generally come up with a situation where for some reason I can not think of, it will be done otherwise. However, in my experience, yes, always privileged, and handled by the o/s.

     and if it is so does that mean the interrupt routine
     uses only the supervisor stack to
     save the state of the interrupted program?
     Is that always the case?

There was a time when there was one stack. Again, I am reluctant to ever say always since systems are person-made and some person may have a good reason for doing otherwise. But generally the computer has separate priv/unpriv stacks and uses the privileged stack to save state.

     2. At the end of an interrupt
     routine I know that the last instruction is RTI
     which pops the PC and PSR from the
     supervisor stack and load them back into
     their registers so the interrupted program can resume
     as if nothing happened but
     what instruction saves R6 into into Saved.
     SSP and reloads R6 into Saved.USP, is
     that part of RTI or is that part
     of all interrupts routines and it's done
     automatically by the operating system?

Automatically by the hardware in initiating the interrupt and in carrying out the work of RTI. The net result being that during the service routine, R6 is the SSP and during the normal application code, R6 is the USP.

      Also what exactly are Saved.SSP and
     Saved.USP, I know it says
     they're internal registers, but what does that mean?

That they are internal registers, like MAR and MDR, for example.

     Where is their memory location..is it
     in a the stack itself,is there a location
     in each stack reserved to save R6?

No memory location. Just internal registers that the hardware uses to save USP on an interrupt, and save SSP on a RTI.

     3.  On page 269, Figure 10
     .12, there is the subroutine RangeCheck to make sure
     the result of each of the 2 integers
     is not greater than 999 or less than -999.
     why those values.  I know on pg
     268 on the bottom paragraph you wrote "For our
     puposes, suppose we restrict values to integers
     in the range -999 to +999.  This
     will come in handy when we design our
     home-brew calculator."  So is it for
     convenience sake that you chose those values in
     this example so they'll work in
     the final calculator example or is there an
     important logical reason that I'm
     missing to why you choose those as your boundaries?

Strictly for convenience sake for our particular calculator.

     Thank you, sorry if any of the questions seem stupid

None of them were stupid. Thank you for the questions.

Yale Patt

      EE306 Student
     << name withheld to protect the self-deprecating student >>