;
; Copyright (c) 2011, Hewlett-Packard Company. All rights reserved.<BR>
; 
; This program and the accompanying materials                          
; are licensed and made available under the terms and conditions of the BSD License         
; which accompanies this distribution.  The full text of the license may be found at        
; http://opensource.org/licenses/bsd-license.php                                            
; 
; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
; 

; Copy this to your C:\T32 directory
;Default startup program for TRACE32
;
;This startup program can be modified according to your needs.

; update this path to reflect YOUR current working dir
GLOBAL &wcdir
&wcdir="D:\bios"

;choose hex mode for input
 radix hex

;Add some extra buttons to the toolbar

 menu.rp
 (
  add
  toolbar
  (
   separator
   toolitem "Source/List"      ":list"     "Data.List"
   toolitem "Memory Dump"      ":dump"     "Data.dump"
   toolitem "Register"         ":reg"      "Register"
   separator
   toolitem "Watch"            ":varwatch" "Var.Watch"
   toolitem "Stack"            ":varframe" "Var.Frame /l /c"
   toolitem "Automatic Watch"  ":varref"   "Var.Ref"
   separator
   toolitem "List Breakpoints" ":break"    "Break.List"
   toolitem "List Symbols"     ":symbols"  "sYmbol.Browse"
   toolitem "System Settings"  ":config"   "SYStem"
   separator
  )
 )

 if language()!=""
 (
  local &menuname
  &menuname="~~/t32"+language()+".men"
  if os.file(&menuname)
     menu.rp &menuname
 )

;Recall and Define History File
 autostore , history bookmark
  
; Execute EFI setup script
  chdir &wcdir\Platform\T32_Scripts
  do EFI

enddo


