55 lines
1.1 KiB
Plaintext
55 lines
1.1 KiB
Plaintext
|
#!/bin/sh
|
||
|
prg=$(basename "$0")
|
||
|
|
||
|
# parse arguments
|
||
|
while getopts f:h optname
|
||
|
do
|
||
|
case $optname in
|
||
|
f) port="$OPTARG" ;;
|
||
|
*) help=1 ;;
|
||
|
esac
|
||
|
done
|
||
|
shift `expr $OPTIND - 1`
|
||
|
|
||
|
old="$1"
|
||
|
new="$2"
|
||
|
|
||
|
if [ -z "$old" -o "$help" = "-h" -o "$#" -gt 2 ]
|
||
|
then
|
||
|
echo "usage: $0 [-f <port>] <old dump> [<new dump>]" >&2
|
||
|
echo "Convert <old dump> to instructions to update instructions." >&2
|
||
|
echo "With <new dump>, generate instructions to update EEPROM changes only." >&2
|
||
|
echo "Optionally write such changes directly if <port> if given." >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
set -e
|
||
|
instr=$(mktemp)
|
||
|
trap "rm -f \"$instr\"" EXIT
|
||
|
|
||
|
convert()
|
||
|
{
|
||
|
sed -ne 's/^\([0-9a-f]\{4\}\) \([0-9a-f ]*\)$/D3 Ax\1 C16 X\2/p' "$@"
|
||
|
}
|
||
|
|
||
|
if [ -z "$new" ]; then
|
||
|
# convert the instructions to updates
|
||
|
convert "$old" > "$instr"
|
||
|
else
|
||
|
tmp1=$(mktemp)
|
||
|
tmp2=$(mktemp)
|
||
|
trap "rm -f \"$tmp1\" \"$tmp2\"" EXIT
|
||
|
|
||
|
convert "$old" > "$tmp1"
|
||
|
convert "$new" > "$tmp2"
|
||
|
|
||
|
comm -13 "$tmp1" "$tmp2" > "$instr"
|
||
|
fi
|
||
|
|
||
|
# write the instructions if requested
|
||
|
if [ -z "$port" ]; then
|
||
|
cat "$instr"
|
||
|
else
|
||
|
printcore -v "$port" "$instr"
|
||
|
fi
|