/********************************************
 * stack - Software Stack Functions for C02 *
 ********************************************/

/* Drop Top Entry from Stack             * 
 * Returns: A=Number of bytes dropped    *
 *            0 if none                  */
char stkdrp();

/* Duplicate Top Stack Entry            * 
 * Returns: A=Number of bytes retrieved *
 *            0 if none or overflow     */
char stkdup();

/* Duplicate Entry Under Top of Stack   * 
 * Returns: A=Number of bytes retrieved *
 *            0 if none or overflow     */
char stkovr();

/* Pop Top Stack Entry into Array        * 
 * Args: n  - Number of bytes to write   *
 *       &m - Array to pop contents into *
 * Returns: A=Number of bytes retrieved  *
 *            0 if none                  */
char stkpop();

/* Push Array Contents onto Stack             * 
 * Args: n  - Number of bytes to write        *
 *       &m - Array containing bytes to push  *
 * Returns: A=$FF if bytes were written       *
 *            $00 if block was overflowed     */
char stkpsh();

/* Reset Stack Pointer to Stack Start *
 * Returns: Y,X=Pointer Address       */
void stkrst();

/* Get Stack Size                        *
 * Returns: A=$FF if size greater than 0 *
 *            $00 if stack is empty      *
 *        Y,X=Stack size in bytes        */
void stksiz();

/* Push String onto Stack                 * 
 * Args: &m - String to push              *
 * Returns: A=$FF if bytes were written   *
 *            $00 if block was overflowed */
char stkstr();

/* Swap Top and Second Stack Entries     * 
 * Returns: A=Number of bytes in new top *
 *            0 if none or overflow      */
char stkswp();

/* Copy Top Stack Entry into Array       * 
 * Args: n  - Number of bytes to write   *
 *       &m - Array to pop contents into *
 * Returns: A=Number of bytes retrieved  *
 *            0 if none                  */
char stktop();
