int parse_arguments(vm_t* vm, int ac, char** av) { struct s_core_load_informations infos[VM_MAX_CORES]; int32 current_core = 0; int32 i; for (i = 0; i < VM_MAX_CORES; ++i) { infos[i].id = 0xcacacaca + i; infos[i].address = -1; infos[i].have_address = 0; infos[i].file_name = NULL; } for (i = 1; i < ac; ++i) { char* end = NULL; if (strcmp("-dump", av[i]) == 0) vm->dump_to_cycle = strtol(av[++i], &end, 0); else if (strcmp("-n", av[i]) == 0) infos[current_core].id = strtol(av[++i], &end, 0); else if (strcmp("-a", av[i]) == 0) infos[current_core].address = strtol(av[++i], &end, 0), infos[i].have_address = 1; else if (strcmp("-bc", av[i]) == 0) vm->cycle_barrier = strtol(av[++i], &end, 0); else if (strcmp("-dbg", av[i]) == 0) vm->step = 1; else if (strcmp("-dbg-same", av[i]) == 0) vm->dbg_same_window = 1; else if (strcmp("-fs", av[i]) == 0) vm->full_screen = 1; else { core_t* core = core_load_from_file(av[i]); if (core) { core->bound.start = 0; core->bound.size = vm->memory_size; infos[current_core++].core = core; } } } for (i = 0; i < current_core; ++i) { if (!infos[i].have_address) { infos[i].address = (vm->memory_size/ current_core) * i; } VM_MEMORY_BOUND(vm, infos[i].address); infos[i].core->start_address = infos[i].address; infos[i].core->id = infos[i].id; vm_add_core(vm, infos[i].core, infos[i].address); } return current_core; }
int load_cores(t_vm* vm, int ac, char** av) { struct s_core_load_informations infos[MAX_CORES]; int32 current_core = 0; int32 i; for (i = 0; i < MAX_CORES; ++i) { infos[i].id = 0xcacacaca + i; infos[i].address = -1; infos[i].have_address = 0; infos[i].file_name = NULL; } for (i = 1; i < ac; ++i) { if (strcmp("-dump", av[i]) == 0) vm->dump_to_cycle = atoi(av[++i]); else if (strcmp("-n", av[i]) == 0) infos[current_core].id = atoi(av[++i]); else if (strcmp("-a", av[i]) == 0) infos[current_core].address = atoi(av[++i]), infos[i].have_address = 1; else { t_core* core = core_load_from_file(av[i]); if (core) infos[current_core++].core = core; } } for (i = 0; i < current_core; ++i) { if (!infos[i].have_address) infos[i].address = (MEM_SIZE / current_core) * i; while (infos[i].address < 0) infos[i].address += MEM_SIZE; vm_add_core(vm, infos[i].core, infos[i].id, infos[i].address % MEM_SIZE); } return current_core; }