write
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user