Exemplo n.º 1
0
Arquivo: floppy.c Projeto: n3on/madOS
unsigned char floppy_read(unsigned short port)
{
	int counter=0;
	unsigned char in=0;
	
	while(((inb(FP_MAIN_STATUS_REGISTER) & 0x80)==0))
	{
		if(counter>=90)
		{
			kprint("\nFloppy Lesezugriff Zeitueberschreitung\n");
			break;
		}
		
		counter++;
		timerSleep(10);
	}
	
	//kprint("\nFloppy Daten gelesen\n");
	timerSleep(1);
	waitIO();
	in=inb(FP_DATA_FIFO);
	waitIO();
	
	return in;
}
Exemplo n.º 2
0
/**
@brief This function handles a system call request coming from a process running in Kernel Mode.
@return Void.
*/
HIDDEN void syscallKernelMode()
{
	/* Identify and handle the system call */
	switch (SYSBP_Old->a1)
	{
		case CREATEPROCESS:
			CurrentProcess->p_s.a1 = createProcess((state_t *) SYSBP_Old->a2);
			break;

		case TERMINATEPROCESS:
			terminateProcess();
			break;

		case VERHOGEN:
			verhogen((int *) SYSBP_Old->a2);
			break;

		case PASSEREN:
			passeren((int *) SYSBP_Old->a2);
			break;

		case GETCPUTIME:
			CurrentProcess->p_s.a1 = getCPUTime();
			break;

		case WAITCLOCK:
			waitClock();
			break;

		case WAITIO:
			CurrentProcess->p_s.a1 = waitIO((int) SYSBP_Old->a2, (int) SYSBP_Old->a3, (int) SYSBP_Old->a4);
			break;

		case SPECTRAPVEC:
			specTrapVec((int) SYSBP_Old->a2, (state_t *) SYSBP_Old->a3, (state_t *) SYSBP_Old->a4);
			break;

		default:
			/* Distinguish whether SYS5 has been invoked or not */
			checkSYS5(SYSBK_EXCEPTION, SYSBP_Old);
	}

	/* Call the scheduler */
	scheduler();
}
Exemplo n.º 3
0
Arquivo: floppy.c Projeto: n3on/madOS
void floppy_out(char cmd)
{
	int counter=0;
	
	while(((inb(FP_MAIN_STATUS_REGISTER) & 0x80)==0))
	{
		if(counter>=90)
		{
			kprint("\nFloppy Schreibzugriff Zeitueberschreitung\n");
			break;
		}
		
		counter++;
		timerSleep(10);
	}
	
	//kprint("\nFloppy Daten geschrieben\n");
	outb(FP_DATA_FIFO, cmd);
	waitIO();
}