2026-06-17 18:16:47 -05:00
|
|
|
#include <stdint.h>
|
|
|
|
|
|
2026-06-28 17:58:58 -05:00
|
|
|
#include "scheduler.h"
|
2026-06-17 18:16:47 -05:00
|
|
|
|
|
|
|
|
typedef struct registers {
|
|
|
|
|
uint32_t gs, fs, es, ds; // Pushed manually
|
|
|
|
|
uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha
|
|
|
|
|
uint32_t int_no, err_code; // Pushed manually
|
|
|
|
|
uint32_t eip, cs, eflags, useresp, ss; // Pushed automatically by CPU
|
|
|
|
|
} registers_t;
|
|
|
|
|
|
2026-06-28 17:58:58 -05:00
|
|
|
int32_t sys_exit();
|
|
|
|
|
int32_t sys_read();
|
|
|
|
|
int32_t sys_write();
|
|
|
|
|
int32_t sys_open();
|
|
|
|
|
int32_t sys_close();
|
|
|
|
|
int32_t sys_brk();
|
2026-06-17 18:16:47 -05:00
|
|
|
|
|
|
|
|
int32_t syscall(registers_t* regs) {
|
|
|
|
|
switch(regs->eax) {
|
2026-06-28 17:58:58 -05:00
|
|
|
case 1: return sys_exit();
|
|
|
|
|
case 3: return sys_read();
|
|
|
|
|
case 4: return sys_write();
|
|
|
|
|
case 5: return sys_open();
|
|
|
|
|
case 6: return sys_close();
|
|
|
|
|
case 12: return sys_brk();
|
2026-06-17 18:16:47 -05:00
|
|
|
default:
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-28 17:58:58 -05:00
|
|
|
int32_t sys_exit() {
|
|
|
|
|
exit();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32_t sys_read() {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32_t sys_write() {
|
2026-06-17 18:16:47 -05:00
|
|
|
return 0;
|
|
|
|
|
}
|