X-Git-Url: http://git.squeep.com/?p=dcpu16;a=blobdiff_plain;f=vm-dcpu16.c;h=df86455070e7c91b008456579eeb2360b0425959;hp=17effb6a558db14d11698cfceaf56d452c202252;hb=df965ac8eeee9115d8f8c7e35e8a470b315d3fb4;hpb=e9cced1de1d6428996d255243b48513e82f233a5 diff --git a/vm-dcpu16.c b/vm-dcpu16.c index 17effb6..df86455 100644 --- a/vm-dcpu16.c +++ b/vm-dcpu16.c @@ -43,7 +43,8 @@ void sigint_handler_(int sig) { #define VERBOSE_PRINTF(...) do { if (opt_.verbose) printf(__VA_ARGS__); } while (0) -static void usage_(char *prog, unsigned int full) { +static +void usage_(char *prog, unsigned int full) { FILE *f = full ? stdout : stderr; char *x = strrchr(prog, '/'); @@ -130,13 +131,17 @@ int buf_tok_vect_(char ***v, int *c, char *buf) { return 0; } -/* resets the instance and loads an image into ram starting at addr */ +/* + resets the vm if addr is zero then + loads an image from filename into ram starting at addr +*/ static int file_load_(struct dcpu16 *vm, char *filename, DCPU16_WORD addr) { FILE *f; size_t r; - dcpu16_reset(vm); + if (!addr) + dcpu16_reset(vm); f = fopen(filename, "rb"); if (f == NULL) { @@ -196,6 +201,21 @@ COMMAND_HELP(quit) { } +COMMAND_IMPL(reset) { + (void)arg_count, (void)arg_vector; + + dcpu16_reset(vm); + printf("initialized\n"); + return 0; +} +COMMAND_HELP(reset) { + fprintf(f, "\treset\n"); + if (summary) return; + + fprintf(f, "Clears and reinitializes emulator.\n"); +} + + COMMAND_IMPL(load) { int addr = 0; @@ -379,6 +399,7 @@ static struct command_ command_table_[] = { COMMAND_ENTRY(disassemble, 0, 2), COMMAND_ENTRY(step, 0, 1), COMMAND_ENTRY(run, 0, 0), + COMMAND_ENTRY(reset, 0, 0), { NULL, 0, 0, NULL, NULL } };