diff options
Diffstat (limited to 'mixutils')
-rw-r--r-- | mixutils/mixvm_command.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/mixutils/mixvm_command.c b/mixutils/mixvm_command.c index 3d783e1..2c07be7 100644 --- a/mixutils/mixvm_command.c +++ b/mixutils/mixvm_command.c @@ -274,14 +274,16 @@ cmd_load_ (char *arg) static void trace_ () { + enum {BUFFER_LEN = 128}; + static gchar STRINS[BUFFER_LEN]; + const mix_src_file_t *file = mix_vm_get_src_file (vm_); const gchar *line = ""; - gchar *strins; mix_address_t loc = mix_vm_get_prog_count (vm_); mix_word_t ins = mix_vm_get_addr_contents (vm_, loc); mix_ins_t fins; mix_word_to_ins_uncheck (ins, fins); - strins = mix_ins_to_string (&fins); + mix_ins_to_string_in_buffer (&fins, STRINS, BUFFER_LEN); if (file != NULL) { @@ -289,8 +291,7 @@ trace_ () if (b > 0) line = mix_src_file_get_line (file, b); } - printf ("%d: [%s]\t%s", (gint)loc, strins, line); - if (strins != NULL) g_free (strins); + printf ("%d: [%s]\t%s", (gint)loc, STRINS, line); } static int @@ -313,6 +314,9 @@ cmd_run_ (char *arg) if (arg != NULL && *arg != '\0' && cmd_load_ (arg) != TRUE) return TRUE; puts (_("Running ...")); + + if (mix_vm_is_halted (vm_)) mix_vm_reset_program (vm_); + switch (run_and_trace_ ()) { case MIX_VM_HALT: |