X-Git-Url: http://git.squeep.com/?p=dcpu16;a=blobdiff_plain;f=vm-dcpu16.c;h=5924074aa468ce5c5370538fd819864ef69d53c2;hp=5f652739e6c477aa428cae2bb55a82e8d2693af3;hb=4185a67f55fb99f34f013b939a8ef9e13454c1e5;hpb=a4e2c238ea47badea198132fc5d9311d1f40ca13 diff --git a/vm-dcpu16.c b/vm-dcpu16.c index 5f65273..5924074 100644 --- a/vm-dcpu16.c +++ b/vm-dcpu16.c @@ -365,17 +365,28 @@ COMMAND_HELP(run) { "May be interrupted with SIGINT.\n"); } +static const char * const display_filename_default_ = +#ifdef HAVE_LIBPNG + "dcpu16-display.png" +#else /* HAVE_LIBPNG */ + "dcpu16-display.pnm" +#endif /* HAVE_LIBPNG */ +; COMMAND_IMPL(display) { - (void)arg_count, (void)arg_vector; - static DCPU16_DISPLAY *display = NULL; + const char *filename = display_filename_default_; + + if (arg_count == 2) { + filename = arg_vector[1]; + } if (display) { printf("display already enabled..\n"); return 0; } - display = display_new("dcpu16-display.pnm"); + display = display_new(filename); + if (display == NULL) { fprintf(stderr, "failed to initialize display buffer\n"); return 0; @@ -391,17 +402,24 @@ COMMAND_IMPL(display) { return 0; } + if (dcpu16_acct_add(vm, DCPU16_ACCT_EV_CYCLE, display_cycle_fn, display)) { + fprintf(stderr, "failed to register display cycle callback\n"); + return 0; + } + /* init display as if reset occurred */ display_reset_fn(vm, DCPU16_ACCT_EV_RESET, 0, display); return 0; } COMMAND_HELP(display) { - fprintf(f, "\tdisplay\n"); + fprintf(f, "\tdisplay [file]\n"); if (summary) return; - fprintf(f, "Begins updating a PNM of current display contents...\n" - "This is not a fully-baked feature...\n"); + fprintf(f, "Attaches display interface, begins updating an image file of display contents...\n" + "Image filename may be specified, defaults to '%s'\n", + display_filename_default_ + ); } /* gather all these together into a searchable table */ @@ -419,7 +437,7 @@ static struct command_ command_table_[] = { COMMAND_ENTRY(step, 0, 1), COMMAND_ENTRY(run, 0, 0), COMMAND_ENTRY(reset, 0, 0), - COMMAND_ENTRY(display, 0, 0), + COMMAND_ENTRY(display, 0, 1), { NULL, 0, 0, NULL, NULL } };