/* This demonstrates how to setup a Debugger '*.ini' file to interface with the
 * C-code using the JTEST test framework.
 */

MAP  0x00000000, 0x001FFFFF  EXEC READ              /* 2048K Flash */
MAP  0x20000000, 0x201FFFFF  READ WRITE             /* 2048K RAM   */

LOAD %L INCREMENTAL


RESET                                               /* Reset the target processor */
LOG OFF                                             /* Turn off Logging by default. */
BK *                                                /* Remove existing breakpoints. */

INCLUDE ../../Common/JTest/jtest_fns.ini            /* Load the JTEST helper functions */
INCLUDE ../../Common/JTest/jtest_log_Simulator.ini  /* Include specified log file */

/* Break on special members of the JTEST framework.  The framework's
   name is defined in jtest_fw.h by the #DEFINE JTEST_FW. */
BS test_start  , 1, "test_start_msg();"
BS test_end    , 1, "test_end_msg();"
BS group_start , 1, "group_start_msg();"
BS group_end   , 1, "group_end_msg();"
BS dump_str    , 1, "dump_str_fn();"
//BS dump_data   , 1, "dump_data_fn();"
BS exit_fw     , 1, "break_fn(); debug_clean_fn(); log_off_fn();"

debug_setup_finished_msg()      /* Output a message to let the output
                                   parser know that setup has
                                   finished. */

G                                                   /* Start the Tests */
