190 lines
4.5 KiB
Plaintext
190 lines
4.5 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: Windriver register definition (.reg) to PRACTICE converter
|
|
; @Description:
|
|
; This script parses a windriver register definition files and converts
|
|
; all lines starting with "SCT" or "SC" to PER.Set commands. All other lines
|
|
; are ignored.
|
|
; @Keywords: converter, script, windriver
|
|
; @Author: DIE
|
|
; @Copyright: (C) 1989-2016 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; --------------------------------------------------------------------------------
|
|
; $Id: sct2practice.cmm 10561 2017-03-15 18:26:17Z rweiss $
|
|
|
|
;Configure parameters
|
|
LOCAL &cf_tar &cpufamily
|
|
&cf_tar=""
|
|
&cpufamily=""
|
|
|
|
; ask for file to convert
|
|
LOCAL &input_file
|
|
LOCAL &ouput_file
|
|
DIALOG.FILE "*.reg"
|
|
ENTRY %LINE &input_file
|
|
IF "&input_file"==""
|
|
ENDDO
|
|
&ouput_file="&input_file.cmm"
|
|
|
|
; open / create files
|
|
OPEN #1 "&input_file" /Read
|
|
OPEN #2 "&ouput_file" /Create /Write
|
|
|
|
; write header into output file
|
|
WRITE #2 "; Generated "+CLOCK.DATE()+", "+CLOCK.TIME()
|
|
WRITE #2 "; source file: &input_file"
|
|
WRITE #2 ""
|
|
|
|
LOCAL &linecount &errorcount
|
|
&linecount=0
|
|
&errorcount=0
|
|
|
|
; parse input file
|
|
RePeaT
|
|
(
|
|
LOCAL &command &readLine &result
|
|
READ #1 &command %LINE &readLine
|
|
&linecount=&linecount+1
|
|
&command=CONVert.TOUPPER("&command")
|
|
&readLine=CONVert.TOUPPER(STRing.TRIM("&readLine"))
|
|
&result=""
|
|
|
|
ON ERROR GOSUB
|
|
(
|
|
LOCAL &lstr
|
|
&lstr=FORMAT.DECIMAL(1.,&linecount)
|
|
WRITE #2 "STOP ""SYNTAX ERROR IN LINE &lstr"""
|
|
CLOSE #1
|
|
CLOSE #2
|
|
DIALOG.OK "Syntax error found in line &lstr"
|
|
ENDDO
|
|
)
|
|
|
|
IF (("&command"=="SCT")||("&command"=="SC"))
|
|
(
|
|
GOSUB Decode_SCT &readLine
|
|
ENTRY %LINE &result
|
|
)
|
|
ELSE IF "&command"=="CF"
|
|
(
|
|
GOSUB Decode_CF &readLine
|
|
ENTRY %LINE &result
|
|
)
|
|
ELSE
|
|
(
|
|
; insert as comment
|
|
&result="; &command &readLine"
|
|
)
|
|
IF "&result"!=""
|
|
WRITE #2 "&result"
|
|
)
|
|
WHILE !FILE.EOF(1)
|
|
|
|
CLOSE #1
|
|
|
|
WRITE #2 "ENDDO"
|
|
CLOSE #2
|
|
|
|
if &errorcount!=0
|
|
DIALOG.OK "Script conversion completed with errors."
|
|
else
|
|
PRINT "Script converted successfully"
|
|
|
|
PEDIT "&ouput_file"
|
|
ENDDO
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; subroutines
|
|
; --------------------------------------------------------------------------------
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; CF
|
|
; --------------------------------------------------------------------------------
|
|
Decode_CF:
|
|
LOCAL ¶m &value1 &rest &cmd
|
|
ENTRY ¶m &value1 %LINE &rest
|
|
IF "¶m"=="TAR"
|
|
(
|
|
&cf_tar="&value1"
|
|
&cmd="; SYStem.CPU &value1"
|
|
|
|
IF CPUFAMILY()=="POWERPC"
|
|
(
|
|
IF (STRing.MID("&cf_tar",0,1)=="8")
|
|
(
|
|
IF !((STRing.MID("&cf_tar",3,1)>="0")&&(STRing.MID("&cf_tar",3,1)<="9"))
|
|
&cpufamily="MPC8XX"
|
|
ELSE IF STRing.MID("&cf_tar",0,2)=="82"
|
|
&cpufamily="MPC82XX"
|
|
ELSE IF STRing.MID("&cf_tar",0,2)=="83"
|
|
&cpufamily="MPC83XX"
|
|
ELSE IF STRing.MID("&cf_tar",0,2)=="85"
|
|
&cpufamily="MPC85XX"
|
|
ELSE
|
|
&cpufamily="MPC86XX"
|
|
)
|
|
IF (STRing.MID("&cf_tar",0,1)=="7")
|
|
(
|
|
IF !((STRing.MID("&cf_tar",3,1)>="0")&&(STRing.MID("&cf_tar",3,1)<="9"))
|
|
&cpufamily="MPC7XX"
|
|
ELSE
|
|
&cpufamily="MPC74XX"
|
|
)
|
|
)
|
|
)
|
|
RETURN &cmd
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; SCT/SC
|
|
; --------------------------------------------------------------------------------
|
|
Decode_SCT:
|
|
LOCAL &grp &rname &addr &value &options
|
|
ENTRY &grp &addr &value %LINE &options
|
|
&rname=""
|
|
|
|
; additional handling for MPC8xx
|
|
IF "&cpufamily"=="MPC8XX"
|
|
(
|
|
; check for IMMR
|
|
if "&grp"=="IMMR"
|
|
(
|
|
&cmd="PER.Set SPR:0x27E %Long 0x&value ; &grp"
|
|
RETURN &cmd
|
|
)
|
|
)
|
|
|
|
;access width
|
|
LOCAL &awidth &spacer
|
|
IF STRing.LENgth("&value")==2.
|
|
(
|
|
&awidth="%Byte"
|
|
&spacer=" "
|
|
)
|
|
ELSE IF STRing.LENgth("&value")==4.
|
|
(
|
|
&awidth="%Word"
|
|
&spacer=" "
|
|
)
|
|
ELSE IF STRing.LENgth("&value")==8.
|
|
(
|
|
&awidth="%Long"
|
|
&spacer=" "
|
|
)
|
|
ELSE IF STRing.LENgth("&value")==16.
|
|
(
|
|
&awidth="%Quad"
|
|
&spacer=""
|
|
)
|
|
ELSE
|
|
(
|
|
LOCAL &message &lstr
|
|
&lstr=FORMAT.DECIMAL(1.,&linecount)
|
|
&message="STOP ""PARSER ERROR - unsupported data width in line &lstr"""
|
|
PRINT %ERROR "&message"
|
|
&errorcount=&errorcount+1
|
|
RETURN &message
|
|
)
|
|
|
|
; simple register
|
|
LOCAL &cmd
|
|
&cmd="PER.Set ANC:0x&addr &awidth 0x&value &spacer; &grp[&rname]"
|
|
RETURN &cmd
|