srec_cat - manipulate EPROM load files
srec_cat [ option... ] filename...
srec_cat -Help
srec_cat -VERSion
The srec_cat program is used to assemble the given input
files into a single output file. The use of filters (see below) allows
significant manipulations to be performed by this command.
The data from the input files is not immediately written to the
output, but is stored in memory until the complete EPROM image has been
assembled. Data is then written to the output file in ascending address
order. The original ordering of the data (in those formats capable of random
record ordering) is not preserved.
Because input record order is not preserved, textual comparison of
input and output (such as the diff(1) or tkdiff(1) commands)
can be misleading. Not only can lines appear in different address orders,
but line lengths and line termination can differ as well. Use the
srec_cmp(1) program to compare two EPROM load files. If a text
comparison is essential, run both files through the srec_cat(1)
program to ensure both files to be compared have identical record ordering
and line lengths.
The storing of data in memory enables the detection of data
conflicts, typically caused by linker sections unintentionally
overlapping.
- •
- A warning will be issued for each address which is redundantly set to the
same value.
- •
- A fatal error will be issued if any address is set with contradictory
values. To avoid this error use an -exclude -within filter (see
srec_input(1)) or, to make it a warning, use the
-contradictory‐bytes option (see below).
- •
- A warning will be issued for input files where the data records are not in
strictly ascending address order. To suppress this warning, use the
-disable‐sequence‐warning option (see below).
These features are designed to detect problems which are difficult
to debug, and detects them before the data is written to an EPROM and
run in your embedded system.
Input may be qualified in two ways: you may specify a data file or
a data generator. format and you may specify filters to apply to them. An
input file specification looks like this:
data‐file [ filter ... ]
data‐generator [ filter ... ]
Input from data files is specified by file name and format name.
An input file specification looks like this:
filename [ format ][
-ignore‐checksums ]
The default format is Motorola S‐Record format, but many others
are also understood.
It is also possible to generate data, rather than read it from a
file. You may use a generator anywhere you could use a file. An input
generator specification looks like this:
-GENerate address‐range
-data‐source
Generators include random data and various forms of constant data.
See srec_input(1) for complete details of input specifiers.
This description is in a separate manual page because it is common to more
than one SRecord command.
The following options are understood:
- @filename
- The named text file is read for additional command line arguments.
Arguments are separated by white space (space, tab, newline, etc).
There is no wildcard mechanism. There is no quoting mechanism. Comments,
which start with '#' and extend to the end of the line, are
ignored. Blank lines are ignored.
- -Output
filename [ format ]
This option may be used to specify the output file to be
used. The special file name “-[rq] is understood to mean the standard
output. Output defaults to the standard output if this option is not used.
The format may be specified as:
- -Absolute_Object_Module_Format
- An Intel Absolute Object Module Format file will be written. (See
srec_aomf(5) for a description of this file format.)
- -Ascii_Hex
- An Ascii‐Hex file will be written. (See srec_ascii_hex(5)
for a description of this file format.)
- -ASM [ prefix ][
-option... ]
A series of assembler DB statements will be written.
The optional prefix may be specified to change the names of
the symbols generated. The defaults to
"eprom" if not set.
Several options are available to modify the style of output:
- -Dot_STyle
- Use "dot" style pseudo‐ops instead of words. For example
.byte instead of the DB
default.
- -HEXadecimal_STyle
- Use hexadecimal numbers in the output, rather than the default decimal
numbers.
- -Section_STyle
- By default the generated assemble of placed at the correct address using
ORG pseudo‐ops. Section style output emits
tables of section addresses and lengths, so the data may be related at
runtime.
- -A430
- Generate output which is compliant to the a430.exe
compiler as it is used, e.g. in IAR Embedded Workbench. This is
short‐hand for -section‐style -hex‐style
- -CL430
- Generate output which is Code Composer Essentials compliant, i.e.
the compiler of it. This is short‐hand for -section‐style
-hex‐style -dot‐style
- -Output_Word
- Generate output which is in two‐byte words rather than bytes. This
assumes little‐endian words; you will need to use the
-Byte‐Swap filter if your target is big‐endian. No attempt
is made to align the words onto even address boundaries; use and input
filter such as
input‐file -fill 0xFF -within input‐file
-range‐pad 2
to pad the data to whole words first.
- -Atmel_Generic
- An Atmel Generic file will be written. (See srec_atmel_generic(5)
for a description of this file format.)
- -BASic
- A series of BASIC DATA statements will be written.
- -B‐Record
- A Freescale MC68EZ328 Dragonball bootstrap b‐record format file
will be written. (See srec_brecord(5) for a description of this
file format.)
- -Binary
- A raw binary file will be written. If you get unexpected results
please see the srec_binary(5) manual for more
information.
- -C‐Array [
identifier ][ -option... ]
A C array defintion will be written.
The optional identifier is the name of the variable to be
defined, or bugus if not specified.
- -INClude
- This option asks for an include file to be generated as well.
- -No‐CONST
- This options asks for the variables to not use the const keyword (they are
declared constant be default, so that they are placed into the
read‐only segment in embedded systems).
- -C_COMpressed
- These options ask for an compressed c‐array whose memory gaps will
not be filled.
- -Output_Word
- This option asks for an output which is in words not in bytes. This is
little endian, so you may need to
- -PREfix
string
- This option allows a string to be prepended to the array definition. This
is commonly used for non‐standard options common to cross
compilers.
- -POSTfix
string
- This option allows a string to be appended to the array definition. This
is commonly used for non‐standard options common to cross
compilers.
- -COE
- This option says to use the Xilinx Coefficient File Format (.coe) for
output. (See srec_coe(5) for a description of this file
format.)
- -COsmac
- An RCA Cosmac Elf format file will be written. (See srec_cosmac(5)
for a description of this file format.)
- -Dec_Binary
- A DEC Binary (XXDP) format file will be written. (See
srec_dec_binary(5) for a description of this file format.)
- -Elektor_Monitor52
- This option says to use the EMON52 format file when writing the file. (See
srec_emon52(5) for a description of this file format.)
- -FAIrchild
- This option says to use the Fairchild Fairbug format file when writing the
file. (See srec_fairchild(5) for a description of this file
format.)
- -Fast_Load
- This option says to use the LSI Logic Fast Load format file when writing
the file. (See srec_fastload(5) for a description of this file
format.)
- -Formatted_Binary
- A Formatted Binary format file will be written. (See
srec_formatted_binary(5) for a description of this file
format.)
- -FORTH [
-option ]
A FORTH input file will be written. Each line of output
includes a byte value, an address, and a command.
- -RAM
- The store command is C! This is the default.
- -EEPROM
- The store command is EEC!
- -Four_Packed_Code
- This option says to use the PFC format file when writing the file. (See
srec_fpd(5) for a description of this file format.)
- -HEX_Dump
- A human readable hexadecimal dump (including ASCII) will be printed.
- -IDT
- An IDT System Integration Manager (IDT/sim) binary file will be written.
(See srec_idt(5) for a description of this file format.)
- -Intel
- An Intel hex format file will be written. (See srec_intel(5) for a
description of this file format.) The default is to emit
“i32hex” 32‐bit linear addressing; if you want
“i16hex” 20‐bit extended segment addressing use the
-address‐length=3 option, if you want “i8hex”
16‐bit addressing use the -address‐length=2
option.
- -Intel_HeX_16
- An Intel‐16 hex format (INHX16) file will be written. (See
srec_intel16(5) for a description of this file format.)
- -Lattice_Memory_Initialization_Format
[ width ]
- The Memory Initialization Format (.mem) by Lattice Semiconductor is
understood for writing only. (A.k.a. -MEM) (See srec_mem(5)
for a description of this file format.)
- -LOGisim
- LOginsim logic simuator uses the format See -srec_logisim(5) form
more information.
- -Memory_Initialization_File
[ width ]
- Memory Initialization File (MIF) by Altera format will be written. The
width defaults to 8 bits. (See srec_mif(5) for a description
of this file format.)
- -Mips_Flash_Big_Endian
- -Mips_Flash_Little_Endian
- MIPS Flash file format will be written. (See srec_mips_flash(5) for
a description of this file format.)
- -MOS_Technologies
- An Mos Technologies format file will be written. (See
srec_mos_tech(5) for a description of this file format.)
- -Motorola [
width ]
A Motorola S‐Record file will be written. (See
srec_motorola(5) for a description of this file format.) This is the
default output format. By default, the smallest possible address length is
emitted, this will be S19 for data in the first 64KB; if you wish to force S28
use the
-address‐length=3 option; if you wish to force S37 use
the
-address‐length=4 option
The optional width argument describes the number of bytes
which form each address multiple. For normal uses the default of one (1)
byte is appropriate. Some systems with 16‐bit or 32‐bit
targets mutilate the addresses in the file; this option will imitate that
behavior. Unlike most other parameters, this one cannot be guessed.
- -MsBin
- This option says to use the Windows CE Binary Image Data Format to write
the file. See srec_msbin(5) for a description of this file
format.
- -Needham_Hexadecimal
- This option says to use the Needham Electronics ASCII file format to write
the file. See srec_needham(5) for a description of this file
format.
- -Ohio_Scientific
- This option says to use the Ohio Scientific hexadecimal format. See
srec_os65v(5) for a description of this format.
- -PPB
- This option says to use the Stag Prom Programmer binary format. See
srec_ppb(5) for a description of this format.
- -PPX
- This option says to use the Stag Prom Programmer hexadecimal format. See
srec_ppx(5) for a description of this format.
- -SIGnetics
- This option says to use the Signetics hex format. See
srec_signetics(5) for a description of this format.
- -SPAsm
- This option says to use the SPASM assembler output format (commonly used
by PIC programmers). See srec_spasm(5) for a description of this
format.
- -SPAsm_Little_Endian
- This option says to use the SPASM assembler output format (commonly used
by PIC programmers). But with the data the other way around.
- -STewie
- A Stewie binary format file will be written. (See srec_stewie(5)
for a description of this file format.)
- -Tektronix
- A Tektronix hex format file will be written. (See srec_tektronix(5)
for a description of this file format.)
- -Tektronix_Extended
- A Tektronix extended hex format file will be written. (See
srec_tektronix_extended(5) for a description of this file
format.)
- -Texas_Instruments_Tagged
- A TI‐Tagged format file will be written. (See
srec_ti_tagged(5) for a description of this file format.)
- -Texas_Instruments_Tagged_16
- A Texas Instruments SDSMAC 320 format file will be written. (See
srec_ti_tagged_16(5) for a description of this file format.)
- -Texas_Instruments_TeXT
- This option says to use the Texas Instruments TXT (MSP430) format to write
the file. See srec_ti_txt(5) for a description of this file
format.
- -TRS80
- This option says to use the Radio Shack TRS‐80 object file format
to write the file. See srec_trs80(5) for a description of this file
format.
- -VHdl [
bytes‐per‐word [ name ]]
- A VHDL format file will be written. The
bytes‐per‐word defaults to one, the name
defaults to eprom. The etc/x_defs_pack.vhd
file in the source distribution contains an example ROM definitions pack
for the type‐independent output. You may need to use the
-byte‐swap filter to get the byte order you want.
- -VMem [
memory‐width ]
- A Verilog VMEM format file will be written. The memory‐width
may be 8, 16, 32, 64 or 128 bits; defaults to 32 if unspecified. (See
srec_vmem(5) for a description of this file format.) You may need
to use the -byte‐swap filter to get the byte order you want.
- -WILson
- A wilson format file will be written. (See srec_wilson(5) for a
description of this file format.)
- -Address_Length
number
- This option many be used to specify the minimum number of bytes to be used
in the output to represent an address (padding with leading zeros if
necessary). This helps when talking to imbecilic EPROM programmer devices
which do not fully implement the format specification.
- -CRLF
- This option is short‐hand for the
-line‐termination=crlf option. For use with
hare‐brained EPROM programmer devices which assume all the world
uses Evil Bill's operating system's line termination.
- -Data_Only
- This option implies the -disable=header,
-disable=data‐count,
-disable=exec‐start‐address and
-disable=footer options.
- -DISable
feature‐name
- This option is used to disable the output of a named feature. See the
-enable option for a description of the available features.
- -ENable
feature‐name
This option is used to enable the output of a named
feature.
- This feature controls the presence of header records, records which appear
before the data itself. Headers often, but not always, include descriptive
text.
- Execution_Start_Address
- This feature controls the presence of execution start address records,
which is where the monitor will jump to and start executing code once the
hex file has finished loading.
- Data_Count
- This feature controls the presence of data record count records, which
appear aftre the data, and state how many data records preceeded them.
Usually a data integrity mechanism.
- This feature controls the presence of a file termination record, one that
does not double as an execution start address record.
- Optional_Address
- In formats that have the address and the data separated or partially
separated (as opposed to having a complete address in every record) it is
possible to disable emitting the first address where that address would be
zero, as these format often default the address to zero if no address is
seen beofre the first data record. This is disabled by default, the zero
address is always emitted.
Not all formats have all of the above features. Not all formats
are able to optionally omit any or all the above features. Feature names may
be abbreviated like command line option names.
- -Execution_Start_Address number
This option may be used to set the execution start
address, in those formats which support it. The execution start address is
where the monitor will jump to and start executing code once the hex file has
finished loading, think of it as a “goto” address. Usually
ignored by EPROM programmer devices. This option implies the
-enable=exec‐start‐addr option.
Please note: the execution start address is a different concept
than the first address in memory of your data. If you want to change where
your data starts in memory, use the -offset filter.
This option may be used to set the header comment, in
those formats which support it. This option implies the
-enable=header
option.
If you need to inject binary data into the header, use the URL
encoding that uses % followed by two hexadeimal characters. For example a
backspace would be encoded as “%08”.
- -IGnore_Checksums
- The -IGnore‐Checksums option may be used to disable checksum
validation of input files, for those formats which have checksums at all.
Note that the checksum values are still read in and parsed (so it is still
an error if they are missing) but their values are not checked. Used after
an input file name, the option affects that file alone; used anywhere else
on the command line, it applies to all following files.
- -Line_Termination
style‐name
This option may be used to specify line termination style
for text output. The default is to use the host operating system's default
line termination style (but Cygwin behaves as if it's Unix). Use this option
with caution, because it will also introduce extra (i.e. wrong) CR bytes into
binary formats.
- Carriage_Return_Line_Feed
- Use the CRLF line termination style, typical of DOS and M$ Windows.
- NewLine
- Use the NL line termination style, typical of Unix and Linux.
- Carriage_Return
- Use the CR line termination style, typical of Apple Macintosh.
All other line termination style names will produce a fatal error.
Style names may be abbreviated like command line option names.
- -Line_Length
number
- This option may be used to limit the length of the output lines to at most
number characters. (Not meaningful for binary file format.)
Defaults to something less than 80 characters, depending on the format. If
you need to control the maximum number of bytes in each output record, use
the --Ouput_Block_Size option.
- -Output_Block_Size
number
- This option may be used to specify the exact number of data bytes to
appear in each output record. There are format‐specific limitations
on this value, you will get an error if the value isn't valid. If you need
to control the maximum number of characters on a line of text output, use
the --Line_Length option.
- -Output_Block_Packing
- From time to time, with large files, you may notice that your data records
are spit unexpectedly on output. This usually happens where record lengths
are not a power of 2. If this bothers you (or your comparison tools) this
option may be used to repack the output so that SRecord's internal block
boundaries are not visable in the output.
- -Output_Block_Alignment
- This option is similar to the -Output_Block_Packing option, except
that short records are used after holes to cause subsequent records to be
placed on a block size boundary.
- -Enable_Sequence_Warnings
This option may be used to enable warnings about input
files where the data records are not in strictly ascending address order. Only
one warning is issued per input file. This is the default.
Note: the output of srec_cat(1) is always in this
order.
Note: This option must be used before the input
file. This is because if there are several files on the command line, each
may need different settings. The setting remains in force until the next
-Disable_Sequence_Warnings option.
- -Disable_Sequence_Warnings
This option may be used to disable warnings about input
files where the data records are not in strictly ascending address order.
Note: This option must be used before the offending
input file. This is because if there are several files on the command line,
each may need different settings. The setting remains in force until the
next -Ensable_Sequence_Warnings option.
All other options will produce a diagnostic error.
All options may be abbreviated; the abbreviation is documented as
the upper case letters, all lower case letters and underscores (_) are
optional. You must use consecutive sequences of optional letters.
All options are case insensitive, you may type them in upper case
or lower case or a combination of both, case is not important.
For example: the arguments “-help”,
“-HEL” and “-h” are all interpreted to mean the
-Help option. The argument “-hlp” will not be
understood, because consecutive optional characters were not supplied.
Options and other command line arguments may be mixed arbitrarily
on the command line.
The GNU long option names are understood. Since all option names
for srec_cat are long, this means ignoring the extra leading
“-”. The
“--option=value” convention is
also understood.
The srec_cat command will exit with a status of 1 on any
error. The srec_cat command will only exit with a status of 0 if
there are no errors.
srec_cat version 1.64
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010, 2011, 2012, 2013, 2014 Peter Miller
The srec_cat program comes with ABSOLUTELY NO WARRANTY; for
details use the 'srec_cat -VERSion License' command. This is free
software and you are welcome to redistribute it under certain conditions;
for details use the 'srec_cat -VERSion License' command.
Scott Finneran |
E‐Mail: |
scottfinneran@yahoo.com.au |
Peter Miller |
E‐Mail: |
pmiller@opensource.org.au |