mirror of
https://github.com/notwa/rc
synced 2024-11-14 17:39:03 -08:00
51 lines
890 B
Text
51 lines
890 B
Text
|
#!/usr/bin/env zsh
|
||
|
|
||
|
sram() {
|
||
|
die() {
|
||
|
echo -E "$@">&2
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
crop() {
|
||
|
tail -n +$((($1)/16+1))
|
||
|
}
|
||
|
|
||
|
revend() {
|
||
|
objcopy -I binary -O binary --reverse-bytes=4 "$@"
|
||
|
}
|
||
|
|
||
|
dump() {
|
||
|
xxd -ps -c 16 "$@"
|
||
|
}
|
||
|
|
||
|
zeros() {
|
||
|
# one row (16) of zeros
|
||
|
yes "00000000000000000000000000000000" | head -n $1
|
||
|
}
|
||
|
|
||
|
game="$1"
|
||
|
in="$2"
|
||
|
out="$3"
|
||
|
|
||
|
if [[ "$game" == "mm" ]]; then
|
||
|
headsize=$((0x20800))
|
||
|
elif [[ "$game" == "oot" ]]; then
|
||
|
headsize=$((0x40800))
|
||
|
else
|
||
|
echo "Unknown game." >&2
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
[ -e "$2" ] || die "input save does not exist"
|
||
|
|
||
|
if [[ "${in##*.}" == "SaveRAM" ]] then
|
||
|
dump "$in" | crop $headsize | dump -r > "$out"
|
||
|
else
|
||
|
cat <(zeros $(($headsize/16))) <(dump "$in") | dump -r > "$out"
|
||
|
fi
|
||
|
|
||
|
revend "$out"
|
||
|
}
|
||
|
|
||
|
sram "$@"
|