From bb096f826af1a025a5d28cff93957b961cff37c5 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Sat, 21 Jun 2025 17:09:34 +0300 Subject: [PATCH] syscalls: implement read syscall --- grubshit/aaa | Bin 8724 -> 8820 bytes grubshit/aaa.asm | 60 +++++++++++++++++++++-------------- grubshit/aaa.o | Bin 720 -> 880 bytes src/kernel/kernel.c | 2 +- src/tasking/exec_from_file.c | 2 +- src/tasking/syscalls.c | 27 ++++++++++++++++ 6 files changed, 65 insertions(+), 26 deletions(-) diff --git a/grubshit/aaa b/grubshit/aaa index fe52346f45ace5146780eb6e138ec6cf5906606a..db56b221084b69d215b9a0c7c4016053d8db654b 100755 GIT binary patch delta 317 zcmbQ@^2KF>f^du?0~nYvC@?THXfUuduuU{JWQ_z0Mo!F>XEI>i*wx5y1yZvMM4WBt zJidb&$msmNQ)dAS$1Vm&klbsZvIIMHSy{|agYum z1q93tdO#AS0L%sQ?LdqP5WWD=R7;RNRJ{OD-WAB#hVz*ie1LodsD7aQT&OeIM^S_^a&n@gwHU}PAd5jB0okFgz`(%5 pIJrwvjdKG~h!u$0C+}30X1xQH2%K!FAUyevq5!KdFtBt$JOIl8JP!Z> delta 214 zcmez3GR0+rg0PAr0~nYvC@?THXfUubuue2KWVHnf+D^=rXVPZa*wx4{=LqEQTEfV{ zaJHfI_zo5zuk-g#{sk-?yQG2a&8`Bw`6q6WnWRu-uLI;WOkm*vQ34E%4C+8y8>kS% zXJRl$<68mwItcm6w-q!diz?brT%&brS5T3MEs|XgwlO8Gv7Az@(2;!w46hT43gLn!XyR|~vNU{ZcGS}i`_yRpf z`v9Ku1U^O2J=FQq-J0Ubfyp<&-^^zB_3Y~0vMe%UQJ#K1qPk8TrdXjO6-?>B5S-Aw z?uyvi&oCI)C5{y{bpx&|pizsdTV)^NMIA@oy|w`*ZLc$$nQ1&nbfj|tL%q#5r)F}) z&VW7eudre+ICojId~oUstzLVI+7F~Rtuf7i5%fk1G@2M2 zIRDb%XKw(0e(oRQwl=tLZAN0z7TeINj3#@=Ofg3`aJEE_jx+fZ^OF$57Gay3Po8w1 zg=$e-hM{g=I}5kOstfyXJlYtU;|$R~i-8LDz$^#> zGf*AK*D z!w!&NJAVTiAUh0ipKSnA40ebx < 3) + { + //TODO: implement stdin handling here + } + else + { + if(current->file_descriptors[tf->ebx] == NULL) + { + return -EBADF; + } + return fat_fread(current->file_descriptors[tf->ebx], (void*)tf->ecx, tf->edx); + } +} + int sys_write(TrapFrame *tf) { if(tf->ebx < 3) @@ -53,7 +69,9 @@ int sys_write(TrapFrame *tf) //stdin, stdout or stderr if(tf->ebx == STDOUT_FILENO) { + debug_log("\n=================SYS_WRITE output to stdout=====================\n"); print((char*)tf->ecx, tf->edx); + debug_log("\n=================END OF THAT SHIT=====================\n"); tf->ecx++; } } @@ -102,9 +120,12 @@ int sys_open(TrapFrame *tf) int sys_close(TrapFrame *tf) { int fd = tf->ebx; + debug_log("SYS_CLOSE: fd = 0x%X", fd); if(current->file_descriptors[fd] != NULL) { + debug_log("SYS_CLOSE: current->file_descriptors[fd] != NULL"); int result = fat_fclose(current->file_descriptors[fd]); + debug_log("SYS_CLOSE: fat_fclose result: 0x%X", result); free(current->file_descriptors[fd]); current->file_descriptors[fd] = NULL; return result; @@ -120,6 +141,12 @@ void handle_syscall(TrapFrame *tf) debug_log("ECX: %s ", tf->ecx); debug_log("EDX: %X\n", tf->edx); + if(tf->eax == 3)//read + { + int r = sys_read(tf); + tf->eax = r; + } + if(tf->eax == 4)//write { int r = sys_write(tf);