Example #1
0
void pageManagementInit(){
	uint64_t endMem = 512 * 0x100000;
	uint64_t freeMemory =  (uint64_t) stackEnd;
	stackCurrent = stackStart;
	uint64_t frames = (endMem - freeMemory) / pageSize;


	ncPrint("  Cantidad de frames: ");
	ncPrintDec(frames);
	ncNewline();

	uint64_t i;
	for(int i=0; i<frames ;i++){
		*stackCurrent = freeMemory + (i* pageSize);
		stackCurrent ++;
	}


//Testeo de paging
/*
uint64_t a = (uint64_t)pageAlloc();
ncPrint("  Direccion: 0x");
ncPrintHex(a);
ncNewline();

a = (uint64_t)pageAlloc();
ncPrint("  Direccion: 0x");
ncPrintHex(a);
ncNewline();

*/
}
Example #2
0
File: lib.c Project: lmarzora/TPE
void
panic(char* msg)
{
	ncPrint(msg);
	ncNewline();
	while(1);
}
Example #3
0
int main()
{	
	// no se usa idtr, el bootloader de Pure ya lo setea en 0x0 y usa ese



	set_idt_entry(0x20, 0x08, (uint64_t)&_irq00Handler, 0x8E);    
	set_idt_entry (0x21, 0x08, (uint64_t)&_irq01Handler, 0x8E );
	//Chequiar bootloader (idt)
	


	//Todas las interrupciones habilitadas.
	picMasterMask(0xFC);
	picSlaveMask(0xFF);
        
	_sti();
	

	ncPrint("[Finished]");
	ncNewline();

	while (1) {

	}

	return 0;
}
Example #4
0
static void loadModule(uint8_t ** module, void * targetModuleAddress)
{
	uint32_t moduleSize = readUint32(module);

	ncPrint("  Will copy module at 0x");
	ncPrintHex((uint64_t)*module);
	ncPrint(" to 0x");
	ncPrintHex((uint64_t)targetModuleAddress);
	ncPrint(" (");
	ncPrintDec(moduleSize);
	ncPrint(" bytes)");

	memcpy(targetModuleAddress, *module, moduleSize);
	*module += moduleSize;

	ncPrint(" [Done]");
	ncNewline();
}
Example #5
0
int main()
{	

	
	setup_IDT_entry(0x20, 0x8,(uint64_t) &_irq00Handler, 0x8E);	
	setup_IDT_entry(0x21, 0x8, (uint64_t)&_irq01Handler, 0x8E);
	setup_IDT_entry(0x80, 0x8,(uint64_t) &syscallHandler, 0x8E);
	

	picMasterMask(0xFC); 
	picSlaveMask(0xFF);

	_sti();

	ncPrint("[Kernel Main]");
	ncNewline();
	ncPrint("  Sample code module at 0x");
	ncPrintHex((uint64_t)sampleCodeModuleAddress);
	ncNewline();
	
	ncPrint("  Calling the sample code module returned: ");
	ncPrintHex(((EntryPoint)sampleCodeModuleAddress)());
	ncNewline();
	ncNewline();

	ncPrint("  Sample data module at 0x");
	ncPrintHex((uint64_t)sampleDataModuleAddress);
	ncNewline();
	ncPrint("  Sample data module contents: ");
	ncPrint((char*)sampleDataModuleAddress);
	ncNewline();

	ncPrint("[Finished]");

	while(1);

	ncClear();

	

	return 0;
}
Example #6
0
void * initializeKernelBinary()
{
	char buffer[10];

	ncPrint("[x64BareBones]");
	ncNewline();

	ncPrint("CPU Vendor:");
	ncPrint(cpuVendor(buffer));
	ncNewline();

	ncPrint("[Loading modules]");
	ncNewline();
	void * moduleAddresses[] = {
			sampleCodeModuleAddress,
			sampleDataModuleAddress
	};

	loadModules(&endOfKernelBinary, moduleAddresses);
	ncPrint("[Done]");
	ncNewline();
	ncNewline();

	ncPrint("[Initializing kernel's binary]");
	ncNewline();

	clearBSS(&bss, &endOfKernel - &bss);

	ncPrint("  text: 0x");
	ncPrintHex((uint64_t)&text);
	ncNewline();
	ncPrint("  rodata: 0x");
	ncPrintHex((uint64_t)&rodata);
	ncNewline();
	ncPrint("  data: 0x");
	ncPrintHex((uint64_t)&data);
	ncNewline();
	ncPrint("  bss: 0x");
	ncPrintHex((uint64_t)&bss);
	ncNewline();

	ncPrint("[Done]");
	ncNewline();
	ncNewline();
	return getStackBase();
}