aa8df95f7d
Also, add a "real world" example in AVRA tests, a blink program on a ATtiny45. Some instructions are commented out because they aren't implemented yet, but not many. The output of the program has been verified against AVRA's own output.
45 lines
1.3 KiB
Bash
Executable File
45 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Calls tools/emul/zasm/zasm in a convenient manner by wrapping specified
|
|
# paths to include in a single CFS file and then pass that file to zasm.
|
|
# Additionally, it takes a "-o" argument to set the initial ".org" of the
|
|
# binary. For example, "zasm.sh -o 4f < foo.asm" assembles foo.asm as if it
|
|
# started with the line ".org 0x4f00".
|
|
|
|
# The -a flag makes us switch to the AVR assembler
|
|
|
|
# readlink -f doesn't work with macOS's implementation
|
|
# so, if we can't get readlink -f to work, try python with a realpath implementation
|
|
ABS_PATH=$(readlink -f "$0" || python -c "import os; print(os.path.realpath('$0'))")
|
|
DIR=$(dirname "${ABS_PATH}")
|
|
ZASMBIN="${DIR}/emul/zasm/zasm"
|
|
|
|
usage() { echo "Usage: $0 [-a] [-o <hexorg>] <paths-to-include>..." 1>&2; exit 1; }
|
|
|
|
org='00'
|
|
while getopts ":ao:" opt; do
|
|
case "${opt}" in
|
|
a)
|
|
ZASMBIN="${DIR}/emul/zasm/avra"
|
|
;;
|
|
o)
|
|
org=${OPTARG}
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
# wrapper around ./emul/zasm/zasm that prepares includes CFS prior to call
|
|
CFSPACK="${DIR}/cfspack/cfspack"
|
|
INCCFS=$(mktemp)
|
|
|
|
"${CFSPACK}" -p "*.h" -p "*.asm" -p "*.bin" "$@" > "${INCCFS}"
|
|
|
|
"${ZASMBIN}" "${org}" "${INCCFS}"
|
|
RES=$?
|
|
rm "${INCCFS}"
|
|
exit $RES
|