Exemple #1
0
int main(int argc, char** argv)
{
	const char* usage = "usage: %s (-vX | -d) [dcpu-16 binary]";
	LAssert(argc >= 2, usage, argv[0]);

	logLevel = 2;
	
	const char* file = NULL;
	unsigned start = 0;
	int numFiles = 0;

	for(int i = 1; i < argc; i++){
		char* v = argv[i];
		if(v[0] == '-'){
			if(!strcmp(v, "-h")){
				LogI(usage, argv[0]);
				LogI(" ");
				LogI("Available flags:");
				LogI("  -vX   set log level, where X is [0-5] - default: 2");
				LogI("  -sX   start disassembly at address X - default 0");
				return 0;
			}
			else if(sscanf(v, "-v%d", &logLevel) == 1){}
			else if(sscanf(v, "-s0x%x", &start) || sscanf(v, "-s%d", &start) == 1){}
			else{
				LogF("No such flag: %s", v);
				return 1;
			}
		}else{
			numFiles++;
			file = v;
		}
	}
	
	LAssert(numFiles == 1, "Please specify one file to disassemble");

	// Allocate 16MB ROM/RAM
	uint8_t* ram = calloc(1, 1024 * 1024 * 16);

	ReadFile(ram, 1024 * 1024 * 16, file);
	Disasm(ram, start);

	free(ram);
}
Exemple #2
0
void SortRings(int print)
{
    int i, n, temp, swapped;
    for (i = 0; i < _num_rings; i++)
    {
        _srings[i] = _rings[i].z;   //sort based on the z-position of each vertex
        _sringidx[i] = i;
    }

   n = _num_rings;
   do {
      swapped = 0;
      for (i = 0; i < _num_rings-1; i++)
      {
         if (_srings[i] > _srings[i + 1])
         {
            temp = _srings[i];
            _srings[i] = _srings[i + 1];
            _srings[i + 1] = temp;

            temp = _sringidx[i];
            _sringidx[i] = _sringidx[i + 1];
            _sringidx[i + 1] = temp;
            swapped = 1;
         }
      } //end for
      --n;
   } while (swapped);

   if (print > 0)
   {
        for (i = 0; i < _num_rings; i++)
        {
            LogI("Ring Idx: ", i);
            LogI("Sorted Z: ", _srings[i]);
            LogI("Sorted Idx: ", _sringidx[i]);
        }
        LogI("Sort Algorithm Complete - ", 0);
   }
}
Exemple #3
0
int main(int argc, char** argv)
{
	logLevel = 2;

	int atFile = 0;
	unsigned addr = 0;
	unsigned lastAddr = 0xffff;
	bool debugSymbols = false;
	char c;
	DByteOrder byteOrder = DBO_LittleEndian;

	const char* files[2] = {NULL, NULL};
	const char* usage = "usage: %s (-vX | -h | -sX | -d | -eX) [dasm file] [out binary]";

	for(int i = 1; i < argc; i++){
		char* v = argv[i];
		if(STARTSWITH(v, '-')){
			if(!strcmp(v, "-h")){
				LogI(usage, argv[0]);
				LogI(" ");
				LogI("Available flags:");
				LogI("  -vX   set log level, where X is [0-5] - default: 2");
				LogI("  -sX   set assembly start address [0-FFFF] - default 0");
				LogI("  -h    show this help message");
				LogI("  -d    generate debug symbols");
				LogI("  -eX   set endianness of output, where X is [l | b] default: l");
				return 0;
			}
			else if(sscanf(v, "-v%d", &logLevel) == 1){}
			else if(sscanf(v, "-s%x", &addr) == 1){}
			else if(sscanf(v, "-e%1c", &c) == 1){ byteOrder = c == 'l' ? DBO_LittleEndian : DBO_BigEndian; }
			else if(!strcmp(v, "-d")){ debugSymbols = true; }
			else{
				LogF("No such flag: %s", v);
				return 1;
			}
		}else{
			LAssert(atFile < 2, "Please specify exactly one input file and one output file");
			files[atFile++] = v;
		}
	}

	LAssert(argc >= 3 && files[0] && files[1], usage, argv[0]);
	LAssert(addr <= 0xffff, "Assembly start address must be within range 0 - 0xFFFF (not %x)", addr);
	
	// Allocate 64 kword RAM file
	uint16_t* ram = calloc(1, sizeof(uint16_t) * 0x10000);

	Dasm* d = Dasm_Create();
	
	if(debugSymbols){
		char tmp[4096];
		sprintf(tmp, "%s.dbg", files[1]);
		d->debugFile = fopen(tmp, "w");
		LogV("Opening debug file: %s", tmp);
		LAssert(d->debugFile, "could not open file: %s", tmp);
	}

	uint16_t len = Dasm_Assemble(d, files[0], ram, addr, lastAddr);

	if(d->debugFile) fclose(d->debugFile);

	Dasm_Destroy(&d);

	if(logLevel == 0) DumpRam(ram, len - 1);

	LogV("Writing to: %s", files[1]);
	WriteRam(ram, files[1], len - 1, byteOrder);

	free(ram);
	return 0;
}
void CLog::LogI(PCoreString szText, int Value)
{
	LogI(eLogType::NORMAL, szText, Value);
}
Exemple #5
0
int main(int argc, char** argv)
{
	logLevel = 2;

	int atFile = 0;
	int romSize = 1024 * 1024 * 16;
	unsigned addr = 0;
	bool debugSymbols = false;

	const char* files[2] = {NULL, NULL};
	const char* usage = "usage: %s (-vX | -h | -sX | -d | -eX) [hasm file] [out binary]";

	for(int i = 1; i < argc; i++){
		char* v = argv[i];
		if(STARTSWITH(v, '-')){
			if(!strcmp(v, "-h")){
				LogI(usage, argv[0]);
				LogI(" ");
				LogI("Available flags:");
				LogI("  -vX   set log level, where X is [0-5] - default: 2");
				LogI("  -sX   set assembly start address [0-FFFF] - default 0");
				LogI("  -h    show this help message");
				LogI("  -d    generate debug symbols");
				LogI("  -t    unit tests");
				return 0;
			}
			else if(sscanf(v, "-v%d", &logLevel) == 1){}
			else if(sscanf(v, "-s%x", &addr) == 1){}
			else if(!strcmp(v, "-d")){ debugSymbols = true; }
			else if(!strcmp(v, "-t")){ return Tests(argc, argv); }
			else{
				LogF("No such flag: %s", v);
				return 1;
			}
		}else{
			LAssert(atFile < 2, "Please specify exactly one input file and one output file");
			files[atFile++] = v;
		}
	}

	LAssert(argc >= 3 && files[0] && files[1], usage, argv[0]);
	
	// Allocate 16 MB ROM
	uint8_t* ram = calloc(1, romSize);

	Hasm* d = Hasm_Create();
	
	if(debugSymbols){
		char tmp[4096];
		sprintf(tmp, "%s.dbg", files[1]);
		d->debugFile = fopen(tmp, "w");
		LogV("Opening debug file: %s", tmp);
		LAssert(d->debugFile, "could not open file: %s", tmp);
	}

	uint32_t len = Hasm_Assemble(d, files[0], ram, addr, romSize - 1);

	if(d->debugFile) fclose(d->debugFile);

	Hasm_Destroy(&d);

	if(logLevel == 0 && len) DumpRam(ram, len - 1);

	LogV("Writing to: %s", files[1]);
	WriteFile(ram, len ? len - 1 : 0, files[1]);

	LAssertWarn(len, "produced empty file");

	free(ram);
	return 0;
}