Example #1
0
void* cons_thread( void *arg )
{
    cons_struct  *cons;

    // The argument is a pointer to a sort structure
    cons = (cons_struct*)arg; 
    
    while( 1 )
    {
        // Wait for the start sorting condition to occur
        cons_start( cons );

        // Perform the sort
        cons_data( cons->data, cons->size );
    
        // Send the finished sorting condition out`
        cons_finish( cons );    
    }

    return NULL;
}
Example #2
0
int main(int argc,char **argv) {
	if(sizeof(byte) != 1 || sizeof(wyde) != 2 || sizeof(tetra) != 4 || sizeof(octa) != 8)
		error("Type-sizes are wrong. Please change the typedefs in common.h for your platform!");

	bool interactive = false;
	for(int i = 1; i < argc; i++) {
		if(strcmp(argv[i],"-i") == 0)
			interactive = true;
		else if(strncmp(argv[i],"--postcmds=",sizeof("--postcmds=") - 1) == 0)
			postCmds = argv[i] + sizeof("--postcmds=") - 1;
		else if(strncmp(argv[i],"--script=",sizeof("--script=") - 1) == 0) {
			script = argv[i] + sizeof("--script=") - 1;
			interactive = true;
		}
		else if(strncmp(argv[i],"--start=",sizeof("--start=") - 1) == 0) {
			octa cpc = mstrtoo(argv[i] + sizeof("--start=") - 1,NULL,0);
			cfg_setStartAddr(cpc);
		}
		else if(strcmp(argv[i],"--user") == 0) {
			cfg_setUserMode(true);
			cfg_setStartAddr(0x1000);
			cfg_setRAMSize((octa)32 * 1024 * 1024 * 1024);
		}
		else if(strcmp(argv[i],"--test") == 0)
			cfg_setTestMode(true);
		else if(strcmp(argv[i],"-t") == 0) {
			if(i >= argc - 1)
				error(usage,argv[0]);
			cfg_setTermCount(mstrtoo(argv[i + 1],NULL,0));
			i++;
		}
		else if(strcmp(argv[i],"-l") == 0) {
			if(i >= argc - 1)
				error(usage,argv[0]);
			cfg_setProgram(argv[i + 1]);
			i++;
		}
		else if(strcmp(argv[i],"-r") == 0) {
			if(i >= argc - 1)
				error(usage,argv[0]);
			cfg_setROM(argv[i + 1]);
			cfg_setStartAddr(MSB(64) | ROM_START_ADDR);
			i++;
		}
		else if(strcmp(argv[i],"-d") == 0) {
			if(i >= argc - 1)
				error(usage,argv[0]);
			cfg_setDiskImage(argv[i + 1]);
			i++;
		}
		else if(strcmp(argv[i],"-o") == 0) {
			if(i >= argc - 1)
				error(usage,argv[0]);
			cfg_setOutputFile(argv[i + 1]);
			i++;
		}
		else if(strcmp(argv[i],"-m") == 0) {
			if(i >= argc - 1)
				error(usage,argv[0]);
			cfg_setRAMSize(mstrtoo(argv[i + 1],NULL,0) * 1024 * 1024);
			i++;
		}
		else if(strcmp(argv[i],"-c") == 0)
			cfg_setUseDspKbd(true);
		else if(strcmp(argv[i],"-p") == 0) {
			if(i >= argc - 1)
				error(usage,argv[0]);
			gdbport = atoi(argv[i + 1]);
			i++;
		}
		else if(strcmp(argv[i],"-b") == 0)
			cfg_setUseBacktracing(true);
		else if(strcmp(argv[i],"-s") == 0) {
			const char *mapNames[MAX_MAPS];
			for(int x = 0; x < MAX_MAPS; x++)
				mapNames[x] = NULL;
			if(i == argc - 1 || mapNames[0] != NULL)
				error(usage,argv[0]);
			for(int x = 0; x < MAX_MAPS && i < argc - 1; x++) {
				mapNames[x] = argv[++i];
				if(mapNames[x][0] == '-') {
					mapNames[x] = NULL;
					i--;
					break;
				}
			}
			cfg_setMaps(mapNames);
		}
		else
			error(usage,argv[0]);
	}

	// in non-interactive mode, either a program or ROM is required
	if(!interactive && cfg_getProgram() == NULL && cfg_getROM() == NULL)
		error(usage,argv[0]);

	// catch exceptions that are not catched by anybody else. it may occur an exception during
	// initialization for example.
	jmp_buf env;
	int ex = setjmp(env);
	if(ex != EX_NONE)
		mprintf("Exception: %s\n",ex_toString(ex,ex_getBits()));
	else {
		ex_push(&env);
		sim_init();
		if(gdbport != -1)
			gdbstub_init(gdbport);
		else if(interactive) {
			cons_init();
			if(script)
				cons_exec(script,true);
			cons_start();
			cons_shutdown();
		}
		else {
			cpu_run();
			if(postCmds)
				postcmds_perform(postCmds);
		}
	}
	ex_pop();
	sim_shutdown();

	// ignore errors raised by the gcov stuff
	fclose(stderr);
	return EXIT_SUCCESS;
}