- struct exec aout_exec;
- struct nlist * symbol_table;
- uint32_t symbol_count;
- FILE * input = NULL;
- if ((input = fopen(AOUT_PATH, "r")) == NULL) {
- fprintf(stderr, "ERROR: %s: %s\n", AOUT_PATH, strerror(errno));
+ if (input_file) {
+ struct exec aout_exec;
+ struct nlist * symbol_table;
+ uint32_t symbol_count;
+ FILE * input = NULL;
+ if ((input = fopen(input_file, "r")) == NULL) {
+ fprintf(stderr, "ERROR: %s: %s\n", input_file, strerror(errno));
+ state->halted = true;
+ }
+ parse_aout_file(input, &aout_exec, state->ram, &symbol_table, &symbol_count);
+ fclose(input);
+ for (size_t i=0; i < symbol_count; i++) {
+ free(symbol_table[i].n_un.n_name);
+ }
+ free(symbol_table);
+ } else if (blob && blob_size) {
+ if (*blob_size <= RAM_LENGTH) {
+ size_t index = *blob_size;
+ while (index) {
+ index--;
+ state->ram[index] = blob[index];
+ }
+ } else {
+ fprintf(stderr,
+ "ERROR: Built-in NED1 program is larger than simulated RAM (%zu vs %d bytes)",
+ *blob_size, RAM_LENGTH
+ );
+ state->halted = true;
+ }
+ } else {
+ fprintf(stderr, "ERROR: No suitable binary image passed when initializing simulator.\n");