Example #1
0
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;
}
Example #2
0
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;
}