working on exposing vga to userspace

This commit is contained in:
2026-07-16 14:44:08 -05:00
parent 37aa46c847
commit b588634253
16 changed files with 251 additions and 139 deletions

View File

@@ -240,6 +240,39 @@ static int32_t sys_waitpid(int pid, int* exit_status) {
return 1;
}
static int32_t sys_mmap(int fd) {
if (fd < 0) {
return 0;
}
process_t* current = current_task();
if (!current) return 0;
file_t* file = current->fd_table[fd];
if (!file) return 0;
if (!(file->node->flags & VFS_CHARDEVICE)) return 0;
uint32_t map_vaddr = 0x3FF00000;
return file->node->mmap(file->node, map_vaddr);
}
static int32_t sys_ioctl(int fd, uint32_t request, void* args) {
if (fd < 0) {
return 0;
}
process_t* current = current_task();
if (!current) return 0;
file_t* file = current->fd_table[fd];
if (!file) return 0;
if (!file->node->ioctl) return 0;
return file->node->ioctl(file->node, request, args);
}
void syscall(registers_t* regs) {
int32_t ret;
switch(regs->eax) {
@@ -256,6 +289,8 @@ void syscall(registers_t* regs) {
case 23: ret = sys_dup2(regs->ebx, regs->ecx); break;
case 24: ret = sys_lseek(regs->ebx, regs->ecx, regs->edx); break;
case 25: ret = sys_waitpid(regs->ebx, (int*)regs->ecx); break;
case 26: ret = sys_mmap(regs->ebx); break;
case 27: ret = sys_ioctl(regs->ebx, regs->ecx, (void*)regs->edx); break;
default: ret = -1;
}
regs->eax = ret;