; --------------------------------------------------------------------------------
; @Title: startup script for Al71 software with NXP S32K14x
; @Description:
; --------------------------------------------------------------------------------
  PMACRO.EXPLICIT

  GLOBAL &cpu &project &base &dir_base &file_user_flash
  GLOBAL &pwd &phd &psd &ptd &ppd
  GLOBAL &eft_range &dataflash_range

  PRIVATE &pos

  ENTRY &project &cpu &base

  ; -------------------------------------------------------------------------------
  ; additional settings
  &eft_range=0x00004000--0x00005FFF
  &dataflash_range=0x10000000--0x1000FFFF

  ; show path and name of this script (present practice file)
  ECHO ""
  ECHO %COLOR.BLUE "### " OS.PPF() " ###"

  ;--------------------------------------------------------------------------------
  &pwd=OS.PWD()
  &phd=OS.PHD()
  &psd=OS.PSD()
  &ptd=OS.PTD()
  &ppd=OS.PPD()   ; store current script path in &ppd

  ECHO %COLOR.GREEN "PWD = &pwd"
  ECHO %COLOR.GREEN "PHD = &phd"
  ECHO %COLOR.GREEN "PSD = &psd"
  ECHO %COLOR.GREEN "PTD = &ptd"
  ECHO %COLOR.GREEN "PPD = &ppd"
  ECHO

  ; --------------------------------------------------------------------------------
  ; prepare parameters (script debugging)
  IF "&cpu"==""
  (
    &cpu="S32K146"
  )

  ; show file where path of actual flash configuration is stored
  &file_user_flash="&phd"+"\AppData\Roaming\TRACE32\"+"&project"+"_flash.txt"
  ECHO %COLOR.GREEN "file_user_flash = &file_user_flash"

  IF "&base"==""
  (
    &base="&project"
  )

  ECHO %COLOR.GREEN "project = &project"
  ECHO %COLOR.GREEN "cpu = &cpu"
  ECHO %COLOR.GREEN "base = &base"
  ECHO

  ; --------------------------------------------------------------------------------
  ; calculate active user_flash file name
  &file_user_flash="&phd"+"\AppData\Roaming\TRACE32\"+"&project"+"_flash.txt"
  ECHO %COLOR.GREEN "file_user_flash = &file_user_flash"

  ; --------------------------------------------------------------------------------
  ; check type of parameter &base
  IF STRing.COUNT("&base",":")==0
  (
    ; scan script path from right to left until &base was found (case insensitive)
    &pos=STRing.SCAN(STRing.LoWeR("&ppd"),STRing.LoWeR("&base"),0)
    IF &pos<0
    (
      &dir_base="&ppd"
    )
    ELSE
    (
      &dir_base=STRing.MID("&ppd",0,&pos)
    )
  )
  ELSE
  (
    ; use &base as absolute path if it contains ':'
    &dir_base="&base\"
  )

  ECHO %COLOR.GREEN "dir_base = &dir_base"
  ECHO

  ; --------------------------------------------------------------------------------
  ; set title for GUI
  TITLE "TRACE32 for ARM - &cpu"
  FramePOS 2 8 50% 50% Normal 3.
  WinCLEAR

  ; --------------------------------------------------------------------------------
  ; initialize and start the debugger
  RESet
  SYStem.RESet
  SYStem.CPU &cpu

  SYStem.CONFIG.DEBUGPORTTYPE SWD
  SYStem.CONFIG.CONNECTOR MIPI20T
  SYStem.Option DUALPORT ON

  ;Deactivate the interrupt routine during single-step operation
  SYStem.Option IMASKASM ON
  SYStem.Option IMASKHLL ON

  SYStem.MemAccess DAP
  SYStem.JtagClock CTCK 10MHz

  Trace.DISable

  ; prepare flash programming (declarations)
  DO ~~/demo/arm/flash/s32k.cmm PREPAREONLY

  IF "&cpu"=="S32K118"
  (
    DO &ppd/prepare_s32k.cmm
  )
  ELSE
  (
    IF "&cpu"=="S32K148"
    (
      ;tbd

      IF ETM()
      (
        ETM.OFF
      )
    )
    ELSE
    (
      ; prepare ITM tracing
      ITM.RESet
      ITM.DataTrace OFF
      ;ITM.DataTrace CorrelatedData
      ITM.PCSampler OFF
      ;ITM.PCSampler 1/256
      ITM.CLOCK 80.MHz
      ;ITM.CycleAccurate ON
      ITM.ON

      Trace.OFF
      Trace.CLOCK 80.MHz
      Trace.AutoArm ON
      Trace.AutoInit ON
      Trace.METHOD CAnalyzer
      CAnalyzer.TraceCLOCK 40.MHz

      DO &ppd/prepare_s32k.cmm

      Trace.AutoFocus

      ; disable ITM tracing
      ITM.OFF
    )
  )

  ; --------------------------------------------------------------------------------
  ; add menu and toolbar
  DO &ppd/menu.cmm

  ; initialize RTOS support
;  PRINT "initializing RTX-ARM support..."
;  TASK.CONFIG ~~/demo/arm/kernel/rtxarm/v5/rtx.t32      ; load RTX-ARM v5 awareness
;  MENU.ReProgram ~~/demo/arm/kernel/rtxarm/v5/rtx.men   ; load RTX-ARM v5 menu
;  HELP.FILTER.Add rtosrtxarm ; add RTX-ARM awareness manual to filtered help

  ; --------------------------------------------------------------------------------
  ; open some windows
  WinPOS 0. 0. 116. 26.
  List.auto
  WinPOS 120. 25.
  Register.view /SpotLight

  ENDDO
