Pl INSTRUC3.DOC

From Atari Wiki
Revision as of 11:57, 17 December 2023 by Olivier.jan (talk | contribs)
Jump to navigation Jump to search
CONTINUATION OF THE CHAPTER ON INSTRUCTIONS from the file INSTRUC2.DOC  
--------------------------------------------------------------


   LINK      an,#BBB
   -----------------

   The source operand of LINK is an address register an, the destination
   operand is of 'immediate' type and is a SIGNED WORD.

   LINK pushes the content of an (l-m) onto the system stack.
        (SP is therefore decremented by 4 units)

       .The value of SP (which now points to l-m = an) is then
        placed into an.

       .The signed displacement is added to SP:
        This has the effect of incrementing SP if #BBB>0 or decrementing SP
        if #BBB<0.

   LINK is therefore used to reserve some space in the system stack.
   (To place data that should not be erased, for example)

   The CCR is not affected.
      ---

   Usage example:
   ----------------------
     LINK    a0,#12

     The system stack will look like this:

               |--------|--------|
               |--------|--------|
               |--------|--------|
After -(SP),a0 |XXXXXXXX|XXXXXXXX|<-- (-(SP)) l-m of a0 is pushed
               |XXXXXXXX|XXXXXXXX|    and the value of that SP
SP at start -> |--------|--------|    is put into a0
               |--------|--------|
               |--------|--------|
               |--------|--------|
SP after      |--------|--------|
incrementing SP|--------|--------|




   UNLK           an
   -----------------

   The source operand of UNLK is an address register an.

   UNLK  .Loads the value of an into SP:
          (SP is therefore decremented or incremented)

         .The l-m pointed by this SP is then loaded into an.
          (SP is therefore incremented by 4 units)


   UNLK thus restores the initial value of SP and the address register
   'an' before the LINK operation.
   

   Usage example:
   ----------------------  
     UNLK    a0

     The system stack will look like this if we take the previous
     LINK usage example:

               |--------|--------|
               |--------|--------|
               |--------|--------|
After a0,(SP)  |XXXXXXXX|XXXXXXXX|<-- SP is loaded with an and the
               |XXXXXXXX|XXXXXXXX|    l-m pointed by this SP is pushed into a0
SP after UNLK->|--------|--------|    ( (SP)+,a0)
               |--------|--------|
               |--------|--------|
               |--------|--------|
SP after LINK->|--------|--------|
               |--------|--------|


    
   MOVE   USP,an
   -------------  
   or

   MOVE   an,USP
   -------------

   Saves the user system stack pointer (User Stack Pointer) in an
   address register 'an' for the first form.

   or

   Loads an address register 'an' into the system stack pointer for
   the second form.
 
   
   The CCR is not affected.
      ---
   
   Usage example:
   ----------------------  
   MOVE  USP,a0
  
   a0 will contain the value of USP.


   NB: This instruction is PRIVILEGED:
   --- It is only available in SUPERVISOR mode.



   RESET
   -----
   Causes a reset of the microprocessor's external circuits by
   sending a signal to the RESET pin of the 68000.
   
   This is also a privileged instruction, therefore, one must ensure that
   SUPERVISOR mode is active to use it...

   The CCR is not affected by RESET.
      ---

   STOP     #BBB
   -------------
   The operand #BBB is extended to a word and loaded into the SR.

   The PC points to the following instruction, but the processor 
   ceases all activity.

   Activity can, however, resume when an external RESET or a
   TRACE exception occurs (If the T bit of the CCR is set to 1).
   
   This is also a privileged instruction, therefore, one must ensure that
   SUPERVISOR mode is active to use it...
 

   RTE    (ReTurn from Exception)
   ---   

   RTE signals the end of an exception handling routine,
   it pops a WORD from the system stack into the SR and
   a l-m into the PC.

   RTE will be detailed in the chapter concerning interrupt routines.


   TRAP   #BBB
   -----------

   The source operand is of 'immediate' type (0<= #BBB <=15).

   TRAP triggers the execution of an exception using instructions
   located in a privileged area of memory.

   In practice, TRAP is used to call BIOS, XBIOS, and GEMDOS functions.

   We will see how in the chapter that describes these very useful functions...
  


   TRAPV
   -----
   If the V bit in the CCR is set to 1 (overflow), TRAPV triggers the
   execution of an exception procedure.

   (See the exception vector table further on...)


   CHK    source,dn
   ----------------

   CHK checks if the number contained in dn belongs to the
   closed interval: [0,source]

   If it does not belong to this interval, an exception procedure is executed,
   otherwise, the program continues normally.

   The addressing modes allowed for the source operand are:
                                                   ------
     dn
     BBBB
     BB
     #BBB
     (an)
     -(an)
     (an)+
     d(an)
     d(an,rn)
     d(pc)
     d(pc,rn)

   Only the N bit of the CCR is affected by CHK (according to the sign of dn)
                    ---


   TAS    destination
   ------------------
  
   The destination operand is an address that points to a BYTE.

   TAS tests this BYTE, the N and Z bits of the CCR are set accordingly,
   and then the MSB of the byte is set to 1.

   The addressing modes accepted by the destination operand are:
                                              -----------    
     dn
     BBBB
     BB
     (an)
     -(an)
     (an)+
     d(an)
     d(an,rn)


   This particular Test method is used by a processor that
   wants to access a resource (a printer, for example) and checks if
   it is available:
   The state of the resource is represented by a SEMAPHORE, if it is 0, the
   resource is available, if it is negative (MSB=1), the resource is
   occupied.
   The processor thus performs a TAS on the appropriate semaphore before 
   accessing a resource.


   
   NOP              (NO oPeration)
   ---
   As the name suggests, NOP does not have any particular action.

   NOP, however, has a memory size of 1 WORD and takes 4 cycles
   of the external clock.

   It will, for example, be used to adjust the execution time
   of certain loops in interrupt routines...


                         ----------------------
  
  And that covers the instructions of the 68000!

  Reread this entire chapter each night before you go to bed 
  for a week and eventually, everything will sink in...
 
  There's no need to memorize all this by heart, make yourself a
  small summary sheet, for instance. Needless to say, it's this chapter that
  you'll refer to most often when your memory fails, but that's quite normal,
  the contrary would be surprising!

  The next chapter will be dedicated to the functions of GEMDOS, BIOS, and 
  XBIOS.

  The examples that will illustrate these functions will take up some
  of these instructions, so don't panic.

  If your head is spinning, turn off your ST and go to bed, have you
  already forgotten my advice?

  QUALITY OVER QUANTITY!!! and there you have it!
  -------------------------------------


  PIECHOCKI Laurent
  8, impasse Bellevue               continues in the file: GEMDOS.DOC
  57980 TENTELING                                         ----------  
  


Back to ASM_Tutorial