Add filesystem syscall 70 wrapper and fs_demo example

This commit is contained in:
rajc6h6 committed 2026-03-10 22:59:34 +05:30
1 parent 21c90abd44
commit 1ea751f931
2 files changed
+56

No files matched your search

+25
View File
@@ -0,0 +1,25 @@
#![no_std]
#![no_main]
use kos::fs::{FileInfo, fs_read};
static FILENAME: &[u8] = b"/rd/1/readme.txt\0";
static mut BUFFER: [u8; 256] = [0u8; 256];
#[no_mangle]
pub extern "C" fn _start() -> ! {
unsafe {
let info = FileInfo {
func: 0,
param1: 0,
param2: 0,
param3: 256,
buf: BUFFER.as_mut_ptr(),
name: FILENAME.as_ptr(),
};
let (_result, _bytes_read) = fs_read(&info as *const FileInfo);
}
loop {}
}
+31
View File
@@ -0,0 +1,31 @@
use core::arch::asm;
/// KolibriOS Function 70 — filesystem operations
/// Passes a pointer to a FileInfo structure via ebx
/// int 0x40 with eax=70 is the KolibriOS FS syscall
#[repr(C, packed)]
pub struct FileInfo {
pub func: u32, // 0 = read, 1 = read folder, 2 = create/write
pub param1: u32, // offset (low)
pub param2: u32, // offset (high) or flags
pub param3: u32, // bytes to read/write
pub buf: *mut u8, // pointer to buffer
pub name: *const u8, // pointer to filename (ASCIIZ)
}
/// Opens/reads a file on KolibriOS using syscall eax=70
/// Returns (eax_result, ebx_bytes_read)
pub unsafe fn fs_read(info: *const FileInfo) -> (u32, u32) {
let eax_out: u32;
let ebx_out: u32;
unsafe {
asm!(
"int 0x40",
inlateout("eax") 70u32 => eax_out,
inlateout("ebx") info as u32 => ebx_out,
options(nostack)
);
}
(eax_out, ebx_out)
}