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; }
/** @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(); }
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(); }