This commit is contained in:
2025-11-26 09:28:41 +01:00
parent da3f961edb
commit beb1abc33c
4 changed files with 23 additions and 21 deletions

View File

@@ -39,19 +39,14 @@ namespace Syscall {
extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2, extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2,
size_t p3, size_t p4, size_t p5, size_t p3, size_t p4, size_t p5,
InterruptContext *user) { InterruptContext *user) {
(void)p1;
(void)p2;
(void)p3;
(void)p4;
(void)p5;
(void)sysnum;
(void)user;
switch ((Syscall::ID)sysnum) { switch ((Syscall::ID)sysnum) {
case Syscall::ID::TEST: case Syscall::ID::TEST:
Syscall::Skeleton::test(Guard::enter().vault(), p1, p2, p3, p4, p5); Syscall::Skeleton::test(Guard::enter().vault(), p1, p2, p3, p4, p5);
break; break;
case Syscall::ID::WRITE: case Syscall::ID::WRITE:
Guarded g = Guard::enter();
g.vault().kout.setPos((int)p4, (int)p5);
Syscall::Skeleton::write(g.vault(), p1, (char*)p2, p3);
break; break;
} }

View File

@@ -1,11 +1,11 @@
#include "syscall/skeleton.h" #include "../syscall/skeleton.h"
#include "debug/kernelpanic.h" #include "../debug/kernelpanic.h"
#include "debug/output.h" #include "../debug/output.h"
#include "device/textstream.h" #include "../device/textstream.h"
#include "interrupt/guard.h" #include "../interrupt/guard.h"
#include "sync/semaphore.h" #include "../sync/semaphore.h"
#include "thread/scheduler.h" #include "../thread/scheduler.h"
void *operator new(size_t, void *); void *operator new(size_t, void *);
@@ -25,11 +25,13 @@ int getpid(Vault &vault) {
} }
size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size) { size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size) {
(void)vault; (void)id;
(void)id;
(void)buffer; for(size_t i = 0; i<size; i++)
(void)size; vault.kout << ((char*)buffer)[i];
return 0; vault.kout.flush();
return 0;
} }
size_t read(Vault &vault, uint32_t id) { size_t read(Vault &vault, uint32_t id) {

View File

@@ -23,3 +23,7 @@ extern "C" ssize_t sys_safe_call(Syscall::ID id, size_t p1, size_t p2,
size_t p5) { size_t p5) {
return sys_call(Syscall::ID::TEST, p1, p2, p3, p4, p5); return sys_call(Syscall::ID::TEST, p1, p2, p3, p4, p5);
} }
[[gnu::always_inline]] static inline int write(int fd, const void *buf, size_t len, int x = -1, int y = -1) {
return sys_call(Syscall::ID::WRITE, fd, (size_t)buf, len, x, y);
}

View File

@@ -18,7 +18,8 @@ extern Application apps[];
void Application::action() { // NOLINT void Application::action() { // NOLINT
// Thread 1 may be an auxiliary thread // Thread 1 may be an auxiliary thread
sys_test(1,2,3,4,5); //sys_test(1,2,3,4,5);
write(0, "testestestestestse", 5, 1 , 1);
unsigned id = 0; unsigned id = 0;
while (&apps[id++] != this); while (&apps[id++] != this);