diff options
Diffstat (limited to 'circuitpython/ports/raspberrypi/sdk/tools/pioasm/hex_output.cpp')
-rw-r--r-- | circuitpython/ports/raspberrypi/sdk/tools/pioasm/hex_output.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/circuitpython/ports/raspberrypi/sdk/tools/pioasm/hex_output.cpp b/circuitpython/ports/raspberrypi/sdk/tools/pioasm/hex_output.cpp new file mode 100644 index 0000000..39dd0fa --- /dev/null +++ b/circuitpython/ports/raspberrypi/sdk/tools/pioasm/hex_output.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "output_format.h" +#include <iostream> + +struct hex_output : public output_format { + struct factory { + factory() { + output_format::add(new hex_output()); + } + }; + + hex_output() : output_format("hex") {} + + std::string get_description() { + return "Raw hex output (only valid for single program inputs)"; + } + + virtual int output(std::string destination, std::vector<std::string> output_options, + const compiled_source &source) { + FILE *out = open_single_output(destination); + if (!out) return 1; + + if (source.programs.size() > 1) { + // todo don't have locations any more! + std::cerr << "error: hex output only supports a single program input\n"; + return 1; + } + for (const auto &i : source.programs[0].instructions) { + fprintf(out, "%04x\n", i); + } + if (out != stdout) { fclose(out); } + return 0; + } +}; + +static hex_output::factory creator; |