/****************************************************************************
**
**  Name:  STKCPU16.TXT
**
**  Description:
**     This file contains stack frames information for the CPU16.
**
**  Status:  PRELIMINARY
**
**  $Log:   S:/tbird/arcppc/stkservr/stkcpu16.txv  $
   
      Rev 1.0   17 Jan 1997 09:24:28   kevin
   Initial revision.
   
      Rev 1.0   03 Jun 1996 11:39:12   gene
   Initial revision.
   
      Rev 1.0   07 Sep 1995 11:14:20   gene
   Initial revision.
   
      Rev 1.0   04 Oct 1993 15:06:24   nghia
   Initial revision.
**
**  $Header:   S:/tbird/arcppc/stkservr/stkcpu16.txv   1.0   17 Jan 1997 09:24:28   kevin  $
**
**  Copyright (C) 1991, 1993 Microtek International.  All rights reserved.
**
*****************************************************************************/

From: mindy (Mindy Beseler)
Subject: HC16 stack frames

stack frames types for the HC16 processor:

frame type = 0:  COSMIC - No arguments passed in register:

            +--------------------------+
            |    PARAMETERS...         |
            +--------------------------+
            |           ...            |
            +--------------------------+
            |         PC               |
            +--------------------------+
            |         PK               |
            +--------------------------+
            |        X register (FP)   |
            +--------------------------+
            |     LOCAL AREA ...       |
            +--------------------------+
FP ===>     |       ...                |
            +--------------------------+
            |                          |
                

frame type = 1:  COSMIC - 1st argument passed in D register:

            +--------------------------+
            |    PARAMETERS...         |
            +--------------------------+
            |           ...            |
            +--------------------------+
            |         PC               |
            +--------------------------+
            |         PK               |
            +--------------------------+
            |  D register (1st parm)   |
            +--------------------------+
            |        X register (FP)   |
            +--------------------------+
            |     LOCAL AREA ...       |
            +--------------------------+
FP ===>     |       ...                |
            +--------------------------+
            |                          |


frame type = 2:  COSMIC - 1st argument passed in D/E register pair:

            +--------------------------+
            |    PARAMETERS...         |
            +--------------------------+
            |           ...            |
            +--------------------------+
            |         PC               |
            +--------------------------+
            |         PK               |
            +--------------------------+
            |  D register (1st parm)   |
            +--------------------------+
            |  E register (1st parm)   |
            +--------------------------+
            |        X register (FP)   |
            +--------------------------+
            |     LOCAL AREA ...       |
            +--------------------------+
FP ===>     |       ...                |
            +--------------------------+
            |                          |
              
The formula for the previous three stack frames:
    stack addr. of return PC 
            = local_stack_size + X register (FP) + (frame_type*2)  


frame type = 3:  INTROL - 1st argument passed in D/E register pair:

            +--------------------------+
            |    PARAMETERS...         |
            +--------------------------+
            |           ...            |
            +--------------------------+
            |         PC               |
            +--------------------------+
            |         PK               |
            +--------------------------+
            |        Z register (FP)   |
            +--------------------------+
            |        K register (FP)   |
            +--------------------------+
            |  1st Parameter (if any)  |
            +--------------------------+
            |     LOCAL AREA ...       |
            +--------------------------+
FP ===>     |       ...                |
            +--------------------------+
            |                          |
              
local_stack_size for each routine includes the area for the 1st parameter
thus the stack walker doesn't need to worry about whether there is a 1st
parameter or not.

frame_type = 4 - was never assigned!

frame_type = 5 - NO frame routine.  This routine has neither locals nor
         parameters thus no stack frame is generated.  Return PC is
         found by going backwards through stack until an address is
         found that maps to a routine. Risky approach but we have no
         other way to know what all might be pushed on the stack -
         if parameters from a recent call are still allocated, etc.

frame type = 6:  HICROSS 

            +--------------------------+
            |    PARAMETERS...         |
            +--------------------------+
            |           ...            |
            +--------------------------+
            |         PC               |
            +--------------------------+
            |         PK               |
            +--------------------------+
            |     LOCAL AREA ...       |
            +--------------------------+
            |       ...                |
            +--------------------------+
            |  Register'd parameters   |
            +--------------------------+
FP ===>     |       Z register (FP)    |
            +--------------------------+
            |                          |
              
does local_stack_size for each routine include the area for the registered
parameters?

/******************************** E O F ***********************************/