X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=src%2Foptions.c;h=39efd5727400013491cc94113921913e2a6a4c1d;hb=82819ebb72819f4a39c5a9aa95fbb2cef22d510f;hp=c5833b37ad63270ed24c62d365dd5dc76bbeec6d;hpb=0f98327ed353861d9958cf77a0e00549d5147b56;p=emu8051.git diff --git a/src/options.c b/src/options.c index c5833b3..39efd57 100644 --- a/src/options.c +++ b/src/options.c @@ -46,7 +46,8 @@ static const char args_doc[] = "[FILENAME]"; static struct argp_option argp_options[] = { {"debug", 'd', "level", 0, "Produce debugging output" }, {"iram", 'i', "size", 0, "Set internal ram size" }, - {"xram", 'x', "size", 0, "Set external ram size" }, + {"pram", 'p', "size", 0, "Set program memory size" }, + {"xram", 'x', "size", 0, "Set external ram size (default is 1024)" }, { 0 } }; @@ -67,43 +68,41 @@ decode_debug_option(char *arg, struct argp_state *state) log_level = strtol(arg, &endptr, 0); if (*endptr != '\0') { - log_fail_no_exit("Invalid log level"); + log_err("Invalid log level"); argp_usage(state); } if (log_level > LOG_LEVEL_DEBUG) { - log_fail_no_exit("Invalid log level"); + log_err("Invalid log level (0 to 3)"); argp_usage(state); } - log_set_level(log_level); + options.log = log_level; } static void decode_memory_size(char *arg, struct argp_state *state, int memid) { char *endptr; - int max_size; int *dest; - if (memid == INT_MEM_ID) { - max_size = INT_MEM_SIZE; + if (memid == PGM_MEM_ID) + dest = &options.pram_size; + else if (memid == INT_MEM_ID) dest = &options.iram_size; - } else { - max_size = EXT_MEM_SIZE; + else if (memid == EXT_MEM_ID) dest = &options.xram_size; - } + else + exit(1); /* Programming error. */ + /* + * Sizes versus max memory sizes will be checked when calling + * memory_init(). + */ *dest = strtol(arg, &endptr, 0); if (*endptr != '\0') { - log_fail_no_exit("Invalid memory size"); - argp_usage(state); - } - - if (*dest > max_size) { - log_fail_no_exit("Invalid maximum memory size (max = %d)", - max_size); + log_err("Invalid memory size"); argp_usage(state); } } @@ -119,6 +118,9 @@ parse_opt(int key, char *arg, struct argp_state *state) case 'i': decode_memory_size(arg, state, INT_MEM_ID); break; + case 'p': + decode_memory_size(arg, state, PGM_MEM_ID); + break; case 'x': decode_memory_size(arg, state, EXT_MEM_ID); break; @@ -155,8 +157,10 @@ parse_command_line_options(int argc, char *argv[]) /* Setting default values. */ options.filename = NULL; - options.iram_size = INT_MEM_SIZE; - options.xram_size = EXT_MEM_SIZE; + options.pram_size = PGM_MEM_DEFAULT_SIZE; + options.iram_size = INT_MEM_MAX_SIZE; + options.xram_size = EXT_MEM_DEFAULT_SIZE; + options.log = LOG_LEVEL_ERR; /* Parse our arguments. */ argp_parse(&argp, argc, argv, 0, 0, NULL);