diff options
| author | Julian Blake Kongslie | 2022-10-14 12:05:42 -0700 |
|---|---|---|
| committer | Julian Blake Kongslie | 2022-10-14 12:05:42 -0700 |
| commit | db158a77c383d13a22b6a1fe03fb546bbb6434c0 (patch) | |
| tree | 1c377545e2feea52df0067369f3dc5066d9dbc8f /main.cpp | |
| parent | Actual palbart-compatible rim/bin loader (diff) | |
| download | biggolf-db158a77c383d13a22b6a1fe03fb546bbb6434c0.tar.xz | |
Support loading multiple program tapes on top of eachother.
Diffstat (limited to 'main.cpp')
| -rw-r--r-- | main.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
| @@ -12,19 +12,7 @@ static const std::unordered_map<std::string, std::uint8_t *> programs = { | |||
| 12 | { "count", _binary_count_bin_start } | 12 | { "count", _binary_count_bin_start } |
| 13 | }; | 13 | }; |
| 14 | 14 | ||
| 15 | int main(int argc, const char *argv[]) { | 15 | int load_program(checker &checker, const std::uint8_t *program) { |
| 16 | if (argc != 2) { | ||
| 17 | std::cerr << "Usage: " << argv[0] << " program\n"; | ||
| 18 | std::cerr << "Programs:\n"; | ||
| 19 | for (const auto &p : programs) | ||
| 20 | std::cerr << "\t" << p.first << "\n"; | ||
| 21 | return 1; | ||
| 22 | } | ||
| 23 | |||
| 24 | auto program = programs.at(argv[1]); | ||
| 25 | |||
| 26 | checker checker; | ||
| 27 | |||
| 28 | bool seen_non_leader = false; | 16 | bool seen_non_leader = false; |
| 29 | bool comment = false; | 17 | bool comment = false; |
| 30 | unsigned int field = 0; | 18 | unsigned int field = 0; |
| @@ -58,6 +46,25 @@ int main(int argc, const char *argv[]) { | |||
| 58 | } | 46 | } |
| 59 | } | 47 | } |
| 60 | } | 48 | } |
| 49 | return 0; | ||
| 50 | } | ||
| 51 | |||
| 52 | int main(int argc, const char *argv[]) { | ||
| 53 | if (argc < 2) { | ||
| 54 | std::cerr << "Usage: " << argv[0] << " program [program ...]\n"; | ||
| 55 | std::cerr << "Programs:\n"; | ||
| 56 | for (const auto &p : programs) | ||
| 57 | std::cerr << "\t" << p.first << "\n"; | ||
| 58 | return 1; | ||
| 59 | } | ||
| 60 | |||
| 61 | checker checker; | ||
| 62 | |||
| 63 | for (--argc, ++argv; argc; --argc, ++argv) { | ||
| 64 | auto program = programs.at(argv[0]); | ||
| 65 | if (auto err = load_program(checker, program)) | ||
| 66 | return err; | ||
| 67 | } | ||
| 61 | 68 | ||
| 62 | while (!checker.halted) { | 69 | while (!checker.halted) { |
| 63 | std::cout << fmt::format("{:04o}: ", checker.pc); | 70 | std::cout << fmt::format("{:04o}: ", checker.pc); |
