/************************************************************************************//**
* \file         Demo\HCS12_Evbplus_Dragon12p_CodeWarrior\Boot\vectors.c
* \brief        Bootloader interrupt vector table source file.
* \ingroup      Boot_HCS12_Evbplus_Dragon12p_CodeWarrior
* \internal
*----------------------------------------------------------------------------------------
*                          C O P Y R I G H T
*----------------------------------------------------------------------------------------
*   Copyright (c) 2013  by Feaser    http://www.feaser.com    All rights reserved
*
*----------------------------------------------------------------------------------------
*                            L I C E N S E
*----------------------------------------------------------------------------------------
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You have received a copy of the GNU General Public License along with OpenBLT. It
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
*
* \endinternal
****************************************************************************************/

/****************************************************************************************
* Include files
****************************************************************************************/
#include "boot.h"                                    /* bootloader generic header      */
#include "hidef.h"
#include "start12.h"


/****************************************************************************************
* Macro definitions
****************************************************************************************/
/** \brief Start address of the user program's vector table.
 *  \attention This value must be updated if the memory reserved for the bootloader
 *             changes.
 */
#define VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR  (0xE780)
/** \brief INITRM register definition. */
#define REG_INITRM      (*(volatile blt_int8u *) 0x0010)
/** \brief INITRG register definition. */
#define REG_INITRG      (*(volatile blt_int8u *) 0x0011)
/** \brief INITEE register definition. */
#define REG_INITEE      (*(volatile blt_int8u *) 0x0012)


/****************************************************************************************
* External functions
****************************************************************************************/
extern void near main(void);


/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Type for vector table entries. */
typedef void (*near tIsrFunc)(void);


/************************************************************************************//**
** \brief     Wrapper for calling the default reset handler which puts the communication
**            module in a disconnected state.
** \return    none.
**
****************************************************************************************/
void reset_handler(void)
{
  /* for compatibility with other HCS12 derivates, set the register start address to
   * 0x0000, remap the RAM to always end at 0x3FFF and remap EEPROM (if applicable)
   * to end at 0xfff.
   */
  REG_INITRG = 0x00;
  REG_INITRM = 0x39;
  REG_INITEE = 0x09;
  /* initialize the stack pointer */
  INIT_SP_FROM_STARTUP_DESC();
  /* perform standard C startup initialiation */
  _Startup();
  /* start the program */
  main();
} /*** end of reset_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector0_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (0 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector0_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector1_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (1 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector1_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector2_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (2 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector2_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector3_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (3 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector3_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector4_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (4 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector4_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector5_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (5 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector5_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector6_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (6 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector6_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector7_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (7 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector7_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector8_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (8 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector8_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector9_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (9 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector9_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector10_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (10 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector10_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector11_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (11 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector11_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector12_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (12 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector12_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector13_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (13 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector13_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector14_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (14 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector14_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector15_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (15 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector15_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector16_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (16 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector16_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector17_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (17 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector17_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector18_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (18 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector18_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector19_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (19 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector19_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector20_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (20 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector20_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector21_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (21 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector21_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector22_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (22 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector22_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector23_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (23 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector23_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector24_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (24 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector24_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector25_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (25 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector25_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector26_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (26 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector26_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector27_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (27 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector27_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector28_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (28 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector28_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector29_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (29 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector29_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector30_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (30 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector30_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector31_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (31 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector31_handler ***/



/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector32_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (32 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector32_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector33_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (33 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector33_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector34_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (34 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector34_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector35_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (35 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector35_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector36_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (36 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector36_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector37_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (37 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector37_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector38_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (38 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector38_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector39_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (39 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector39_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector40_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (40 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector40_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector41_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (41 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector41_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector42_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (42 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector42_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector43_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (43 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector43_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector44_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (44 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector44_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector45_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (45 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector45_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector46_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (46 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector46_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector47_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (47 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector47_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector48_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (48 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector48_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector49_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (49 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector49_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector50_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (50 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector50_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector51_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (51 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector51_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector52_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (52 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector52_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector53_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (53 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector53_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector54_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (54 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector54_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector55_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (55 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector55_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector56_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (56 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector56_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector57_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (57 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector57_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector58_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (58 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector58_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector59_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (59 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector59_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector60_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (60 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector60_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector61_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (61 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector61_handler ***/


/************************************************************************************//**
** \brief     ISR handler for a specific vector index in the interrupt vector table for
**            linking the actual interrupts vectors to the one in the user program's
**            vector table.
** \return    none.
**
****************************************************************************************/
void Vector62_handler(void)
{
  /* Note that this function is called upon interrupt and therefore all CPU registers
   * (excluding the SP) are already backed up on the stack, so we are free to use them.
   */
  asm
  {
    /* Load the address of the user program's ISR into X. */
    LDX(VCT_USER_PROGRAM_VECTOR_TABLE_STARTADDR + (62 * 2))
    /* Jump there. It is important to use the JMP instruction here as opposed to other
     * branch instruction, because the JMP instruction does not modify the stack by
     * saving a return address for example.
     */
    JMP 0,X
  }
} /*** end of Vector62_handler ***/


/****************************************************************************************
*                I N T E R R U P T     V E C T O R     T A B L E
****************************************************************************************/
/** \brief The interrupt vector table. It contains the reset vector and all other
 *         interrupts vectors are remapped to the user program vector table.
 */
const tIsrFunc _vectab[] @0xff80 =
{
  (tIsrFunc)Vector0_handler,                          /* Reserved 0xFF80               */
  (tIsrFunc)Vector1_handler,                          /* Reserved 0xFF82               */
  (tIsrFunc)Vector2_handler,                          /* Reserved 0xFF84               */
  (tIsrFunc)Vector3_handler,                          /* Reserved 0xFF86               */
  (tIsrFunc)Vector4_handler,                          /* Reserved 0xFF88               */
  (tIsrFunc)Vector5_handler,                          /* Reserved 0xFF8A               */
  (tIsrFunc)Vector6_handler,                          /* PWM Emergency Shutdown 0xFF8C */
  (tIsrFunc)Vector7_handler,                          /* PortP Interrupt 0xFF8E        */
  (tIsrFunc)Vector8_handler,                          /* MSCAN4 Transmit 0xFF90        */
  (tIsrFunc)Vector9_handler,                          /* MSCAN4 Receive 0xFF92         */
  (tIsrFunc)Vector10_handler,                         /* MSCAN4 Errors 0xFF94          */
  (tIsrFunc)Vector11_handler,                         /* MSCAN4 WakeUp 0xFF96          */
  (tIsrFunc)Vector12_handler,                         /* MSCAN3 Transmit 0xFF98        */
  (tIsrFunc)Vector13_handler,                         /* MSCAN3 Receive 0xFF9A         */
  (tIsrFunc)Vector14_handler,                         /* MSCAN3 Errors 0xFF9C          */
  (tIsrFunc)Vector15_handler,                         /* MSCAN3 WakeUp 0xFF9E          */
  (tIsrFunc)Vector16_handler,                         /* MSCAN2 Transmit 0xFFA0        */
  (tIsrFunc)Vector17_handler,                         /* MSCAN2 Receive 0xFFA2         */
  (tIsrFunc)Vector18_handler,                         /* MSCAN2 Errors 0xFFA4          */
  (tIsrFunc)Vector19_handler,                         /* MSCAN2 WakeUp 0xFFA6          */
  (tIsrFunc)Vector20_handler,                         /* MSCAN1 Transmit 0xFFA8        */
  (tIsrFunc)Vector21_handler,                         /* MSCAN1 Receive 0xFFAA         */
  (tIsrFunc)Vector22_handler,                         /* MSCAN1 Errors 0xFFAC          */
  (tIsrFunc)Vector23_handler,                         /* MSCAN1 WakeUp 0xFFAE          */
  (tIsrFunc)Vector24_handler,                         /* MSCAN0 Transmit 0xFFB0        */
  (tIsrFunc)Vector25_handler,                         /* MSCAN0 Receive 0xFFB2         */
  (tIsrFunc)Vector26_handler,                         /* MSCAN0 Errors 0xFFB4          */
  (tIsrFunc)Vector27_handler,                         /* MSCAN0 WakeUp 0xFFB6          */
  (tIsrFunc)Vector28_handler,                         /* Flash 0xFFB8                  */
  (tIsrFunc)Vector29_handler,                         /* Eeprom WakeUp 0xFFBA          */
  (tIsrFunc)Vector30_handler,                         /* SPI2  0xFFBC                  */
  (tIsrFunc)Vector31_handler,                         /* SPI1  0xFFBE                  */
  (tIsrFunc)Vector32_handler,                         /* IIC Bus 0xFFC0                */
  (tIsrFunc)Vector33_handler,                         /* DLC 0xFFC2                    */
  (tIsrFunc)Vector34_handler,                         /* SCME 0xFFC4                   */
  (tIsrFunc)Vector35_handler,                         /* CRG Lock 0xFFC6               */
  (tIsrFunc)Vector36_handler,                         /* Pulse AccB Overflow 0xFFC8    */
  (tIsrFunc)Vector37_handler,                         /* Mod Down Cnt Underflow 0xFFCA */
  (tIsrFunc)Vector38_handler,                         /* PortH Interrupt 0xFFCC        */
  (tIsrFunc)Vector39_handler,                         /* PortJ Interrupt 0xFFCE        */
  (tIsrFunc)Vector40_handler,                         /* ATD1 0xFFD0                   */
  (tIsrFunc)Vector41_handler,                         /* ATD0 0xFFD2                   */
  (tIsrFunc)Vector42_handler,                         /* SCI1 0xFFD4                   */
  (tIsrFunc)Vector43_handler,                         /* SCI0 0xFFD6                   */
  (tIsrFunc)Vector44_handler,                         /* SPI0 0xFFD8                   */
  (tIsrFunc)Vector45_handler,                         /* Pulse AccA Input Edge 0xFFDA  */
  (tIsrFunc)Vector46_handler,                         /* Pulse AccA Overflow 0xFFDC    */
  (tIsrFunc)Vector47_handler,                         /* Timer Overflow 0xFFDE         */
  (tIsrFunc)Vector48_handler,                         /* Timer 7 0xFFE0                */
  (tIsrFunc)Vector49_handler,                         /* Timer 6 0xFFE2                */
  (tIsrFunc)Vector50_handler,                         /* Timer 5 0xFFE4                */
  (tIsrFunc)Vector51_handler,                         /* Timer 4 0xFFE6                */
  (tIsrFunc)Vector52_handler,                         /* Timer 3 0xFFE8                */
  (tIsrFunc)Vector53_handler,                         /* Timer 2 0xFFEA                */
  (tIsrFunc)Vector54_handler,                         /* Timer 1 0xFFEC                */
  (tIsrFunc)Vector55_handler,                         /* Timer 0 0xFFEE                */
  (tIsrFunc)Vector56_handler,                         /* RTI 0xFFF0                    */
  (tIsrFunc)Vector57_handler,                         /* IRQ 0xFFF2                    */
  (tIsrFunc)Vector58_handler,                         /* XIRQ 0xFFF4                   */
  (tIsrFunc)Vector59_handler,                         /* SWI 0xFFF6                    */
  (tIsrFunc)Vector60_handler,                         /* Unimpl Instr Trap 0xFFF8      */
  (tIsrFunc)reset_handler,                            /* COP Failure Reset 0xFFFA      */
  (tIsrFunc)Vector62_handler,                         /* COP Clk Mon Fail 0xFFFC       */
  (tIsrFunc)reset_handler                             /* Reset(N/A) 0xFFFE             */
};
#pragma CODE_SEG DEFAULT
/************************************ end of vectors.c *********************************/


