COBE 0.1 ALPHA

D:/COBE-Packet/cobe/system/syscalls.c

gehe zur Dokumentation dieser Datei
00001 #include <syscalls.h>
00002 #include <multitasking.h>
00003 #include <stdio.h>
00004 #include <io.h>
00005 #include <stdint.h>
00006 #include <cmos.h>
00007 #include <pgng.h>
00008 #include <fdc.h>
00009 #include <fat.h>
00010 
00011 extern struct paging_directory* kernel_map;
00012 extern new_task_t* current_task;
00013 extern multiboot_info_t* mbinfo;
00014 extern char curr_dir[40];
00015 
00016 cpu_regs* syscall(cpu_regs* cpu) {
00017         //----------Aktiviere Interrupts in den Syscalls----------
00018         __asm("sti");
00019         
00020         switch(cpu->eax)
00021         {
00022                 
00023                 case 0x1:
00024                 switch(cpu->edx) {                    //Input/Output
00025                         case 0x0: kputchar((char)cpu->ebx); break;
00026                         case 0x1: kputx(cpu->ebx, cpu->ecx); break;
00027                         case 0x2: kputstring((char*)cpu->ebx); break;
00028                         case 0x3: kgets((char*)cpu->ebx); break;
00029                         default: break;
00030                 }
00031                 break;
00032                 
00033                 case 0x2:
00034                 outb(0x64, 0xFE);               //----------0xFE in den Port 0x64 startet die CPU neu----------
00035                 break;
00036                 
00037                 case 0x3: 
00038                 switch(cpu->edx) {                 //Prozesse
00039                         case 0x1: kill_task(cpu->ecx);
00040                         default: break;
00041                 }
00042                 break;
00043                 
00044                 case 0x4:
00045                 break;
00046                 
00047                 case 0x5:
00048                 show_floppys();
00049                 break;
00050                 
00051                 case 0x6:                         //Dateien
00052                 switch(cpu->ebx)
00053                 {
00054                         case 0x1: fat_show_directory(); break;
00055                         case 0x2: fat_change_directory((char*)cpu->ecx); break;
00056                         case 0x3: kstrcpy(curr_dir,(char*)cpu->ecx); break;
00057                         case 0x4: copy_sector((uint8_t)cpu->ebx, (uint8_t)cpu->ecx, (uint8_t)cpu->edx, (uint8_t)cpu->esi, (void*)cpu->edi, (bool)cpu->ebp); break;
00058                         case 0x5: fat_mkdir((char*)cpu->ecx); break;
00059                         case 0x6: fat_del((char*)cpu->ecx); break;
00060                         default: break;
00061                 }
00062                 break;
00063                 
00064                 default: 
00065                 break;
00066                 
00067         }
00068         
00069         //----------Gebe den neuen CPU-Zustand zurück----------
00070         return cpu;
00071 }
00072 
00073 /*****SYSCALL-NUMMERN*****
00074 //      
00075 //      1: print
00076 //      2: restart cpu
00077 //      3: get keys
00078 //      4: print number
00079 //      5: show floppys
00080 //  6: copy sector
00081 *************************/
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Makrodefinitionen