    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    const SYSCALL_OPEN: usize = 56;
    const SYSCALL_CLOSE: usize = 57;
    const SYSCALL_READ: usize = 63;
    const SYSCALL_WRITE: usize = 64;
    const SYSCALL_EXIT: usize = 93;
    const SYSCALL_YIELD: usize = 124;
    const SYSCALL_GET_TIME: usize = 169;
    const SYSCALL_GETPID: usize = 172;
    const SYSCALL_FORK: usize = 220;
    const SYSCALL_EXEC: usize = 221;
    const SYSCALL_WAITPID: usize = 260;

    mod fs;
    mod process;

    use fs::*;
    use process::*;

    pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize {
        match syscall_id {
            SYSCALL_OPEN => sys_open(args[0] as *const u8, args[1] as u32),
            SYSCALL_CLOSE => sys_close(args[0]),
            SYSCALL_READ => sys_read(args[0], args[1] as *const u8, args[2]),
            SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]),
            SYSCALL_EXIT => sys_exit(args[0] as i32),
            SYSCALL_YIELD => sys_yield(),
            SYSCALL_GET_TIME => sys_get_time(),
            SYSCALL_GETPID => sys_getpid(),
            SYSCALL_FORK => sys_fork(),
            SYSCALL_EXEC => sys_exec(args[0] as *const u8),
            SYSCALL_WAITPID => sys_waitpid(args[0] as isize, args[1] as *mut i32),
            _ => panic!("Unsupported syscall_id: {}", syscall_id),
        }
    }