CoolPotOS/apps/libs/syscall.c

146 lines
4.9 KiB
C
Raw Normal View History

2024-08-30 16:12:44 +08:00
#include "../include/syscall.h"
2024-09-07 23:26:22 +08:00
#include "../include/stdio.h"
2024-08-30 16:12:44 +08:00
2024-08-31 12:36:49 +08:00
void syscall_print(char* c){
uint32_t rets;
uint32_t __arg1 = c;
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_PRINT), "r"(ebx) : "memory", "cc");
}
void syscall_putchar(char c){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(c);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_PUTC), "r"(ebx) : "memory", "cc");
}
2024-09-01 11:56:39 +08:00
char syscall_getch(){
2024-08-31 12:36:49 +08:00
uint32_t rets;
2024-09-01 11:56:39 +08:00
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_GETCH) : "memory", "cc");
2024-08-31 12:36:49 +08:00
return rets;
}
void* syscall_malloc(size_t size){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(size);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_MALLOC), "r"(ebx) : "memory", "cc");
return rets;
}
void syscall_free(void *ptr){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(ptr);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_FREE), "r"(ebx) : "memory", "cc");
}
void syscall_exit(int code){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(code);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_EXIT), "r"(ebx) : "memory", "cc");\
}
void syscall_g_clean(){
uint32_t rets;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_G_CLEAN) : "memory", "cc");
2024-09-01 11:56:39 +08:00
}
void syscall_get_cd(char *buffer){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(buffer);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_GET_CD), "r"(ebx) : "memory", "cc");
2024-09-01 14:56:38 +08:00
}
int syscall_vfs_filesize(char* filename){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(filename);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_VFS_FILESIZE), "r"(ebx) : "memory", "cc");
return rets;
}
void syscall_vfs_readfile(char* filename,char* buffer){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(filename);
uint32_t __arg2 = (uint32_t)(buffer);
register uint32_t ebx asm("ebx") = __arg1;
register uint32_t ecx asm("ecx") = __arg2;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_VFS_READFILE), "r"(ebx), "r"(ecx) : "memory", "cc");
}
void syscall_vfs_writefile(char* filename,char* buffer,unsigned int size){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(filename);
uint32_t __arg2 = (uint32_t)(buffer);
uint32_t __arg3 = (uint32_t)(size);
register uint32_t ebx asm("ebx") = __arg1;
register uint32_t ecx asm("ecx") = __arg2;
register uint32_t edx asm("edx") = __arg3;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_VFS_FILESIZE), "r"(ebx), "r"(ecx), "r"(edx) : "memory", "cc");
2024-09-01 20:09:41 +08:00
}
void* syscall_sysinfo(){
uint32_t rets;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_SYSINFO) : "memory", "cc");
return rets;
2024-09-06 00:16:50 +08:00
}
2024-09-08 22:43:05 +08:00
int syscall_exec(char *filename,char* args,int is_async){
2024-09-06 00:16:50 +08:00
uint32_t rets;
uint32_t __arg1 = (uint32_t)(filename);
2024-09-08 22:43:05 +08:00
uint32_t __arg2 = (uint32_t)(args);
uint32_t __arg3 = (uint32_t)(is_async);
2024-09-06 00:16:50 +08:00
register uint32_t ebx asm("ebx") = __arg1;
2024-09-08 22:43:05 +08:00
register uint32_t ecx asm("ecx") = __arg2;
register uint32_t edx asm("edx") = __arg3;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_EXEC), "r"(ebx), "r"(ecx), "r"(edx) : "memory", "cc");
2024-09-06 00:16:50 +08:00
return rets;
2024-09-06 23:11:41 +08:00
}
void syscall_vfs_change_path(const char *path){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(path);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_CHANGE_PATH), "r"(ebx) : "memory", "cc");
2024-09-08 22:43:05 +08:00
}
char* syscall_get_arg(){
uint32_t rets;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_GET_ARG) : "memory", "cc");
return rets;
}
long syscall_clock(){
uint32_t rets;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_CLOCK) : "memory", "cc");
return rets;
}
void syscall_sleep(uint32_t timer){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(timer);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_SLEEP), "r"(ebx) : "memory", "cc");
}
int syscall_vfs_remove_file(char* filename){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(filename);
register uint32_t ebx asm("ebx") = __arg1;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_VFS_REMOVE_FILE), "r"(ebx) : "memory", "cc");
return rets;
}
int syscall_vfs_rename(char* filename1,char* filename2){
uint32_t rets;
uint32_t __arg1 = (uint32_t)(filename1);
uint32_t __arg2 = (uint32_t)(filename2);
register uint32_t ebx asm("ebx") = __arg1;
register uint32_t ecx asm("ecx") = __arg2;
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_SLEEP), "r"(ebx), "r"(ecx) : "memory", "cc");
2024-09-06 23:11:41 +08:00
return rets;
2024-08-31 12:36:49 +08:00
}