diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel.c | 6 | ||||
| -rw-r--r-- | kernel/syscalls.c | 46 |
2 files changed, 23 insertions, 29 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c index 23246e1..208d1cd 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -197,11 +197,7 @@ void kernel_main(uint32_t initial_stack, int mp) //vesa_init_doublebuff(); ext2_check(0x80800); - ext2_inode_content(0x80800,15,0x100000,0x100000); - - // autorun "user-space" prog - asm("push $0x100000"); - asm("ret"); + syscall_execve(15,0,0); // Just hang around here, if its reached. // we do our tasks anyway. on the next clock tick. diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 0fe1542..564a604 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -6,6 +6,7 @@ // int syscall_write(int file, char *buf, int len) { + // ALL output to stdout for(int i=0;i<len;i++) { PutConsoleChar(buf[i],0b1111111111000000); @@ -16,21 +17,25 @@ int syscall_write(int file, char *buf, int len) int syscall_read(int file, char *buf, int len) { - char c; - - while(1) + // stdin + if(file==1) { - asm("cli"); - bool ret=ringbuffer_get(&c); - asm("sti"); - - if(ret) + + char c; + + while(1) { - *buf=c; - return 1; - } + asm("cli"); + bool ret=ringbuffer_get(&c); + asm("sti"); + + if(ret) + { + *buf=c; + return 1; + } -// if(ret) log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"read kb buffer: %d",c); + } } } @@ -39,19 +44,12 @@ int syscall_readdir(const char *name,fs_dirent *dirs,int max) { return fs_readdir(name,dirs,max); } -// -int example_syscall(int x,int y) +int syscall_execve(char *name, char **argv, char **env) { -// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"example syscall called with %d + %d",x,y); - return x+y; + ext2_inode_content(0x80800,name,0x100000,0x100000); + // autorun "user-space" prog + asm("push $0x100000"); + asm("ret"); } - -int example_syscall_2(int x,int y) -{ - // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"example syscall 2 called with %d - %d",x,y); - return x-y; -} - -// |
