Exemple #1
0
void PIC_Startup()
{
	outb(PIC__IOPort__Master__Command, PIC__Command__ConfigMode | PIC__Command__Initialize); IOWAIT();
	outb(PIC__IOPort__Slave__Command, PIC__Command__ConfigMode | PIC__Command__Initialize); IOWAIT();

	outb(PIC__IOPort__Master__Data, IDT__IRQ__RemappedBase); IOWAIT();
	outb(PIC__IOPort__Slave__Data, IDT__IRQ__RemappedBase + 0x08); IOWAIT();

	outb(PIC__IOPort__Master__Data, PIC__Line__MasterToSlave); IOWAIT();
	outb(PIC__IOPort__Slave__Data, PIC__Line__SlaveToMaster); IOWAIT();

	outb(PIC__IOPort__Master__Data, PIC__Mode__Microprocessor8086); IOWAIT();
	outb(PIC__IOPort__Slave__Data, PIC__Mode__Microprocessor8086); IOWAIT();

	outb(PIC__IOPort__Master__Data, 0x00); IOWAIT();
	outb(PIC__IOPort__Slave__Data, 0x00); IOWAIT();
}
Exemple #2
0
void Console_AsyncEntryPoint()
{
	while(TRUE)
	{
		Atomic_AquireLock(&gConsoleQueueTopLock);
		if (TopEntry)
		{
			Atomic_ReleaseLock(&gConsoleQueueTopLock);

			char* iterator = TopEntry->strToWrite;
			bool_t useLength = TopEntry->strLength > 0;
			while (*iterator)
			{
				Console_WriteCharacter(*iterator);
				++iterator;
				if (useLength)
				{
					--TopEntry->strLength;
					if (TopEntry->strLength == 0) break;
				}
			}
			Atomic_AquireLock(&gConsoleQueueTopLock);
			ConsoleWriteEntry* nEtry = TopEntry;
			TopEntry = TopEntry->NextEntry;
			Atomic_ReleaseLock(&gConsoleQueueTopLock);
			free(nEtry->strToWrite);
			free(nEtry);
		}
		else
		{
			Atomic_ReleaseLock(&gConsoleQueueTopLock);
			IOWAIT();
			IOWAIT();
			IOWAIT();
			IOWAIT();
			IOWAIT();
			IOWAIT();
			IOWAIT();
		}
	}
}
Exemple #3
0
void IDT_WaitForInterrupt(UINT8 pInterrupt)
{ while (gIDTWaiting[pInterrupt]) IOWAIT(); }