Add filesystem syscall 70 wrapper and fs_demo example
This commit is contained in:
1 parent
21c90abd44
commit
1ea751f931
2 files changed
+56
No files matched your search
@@ -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 {}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
Reference in new issue
Block a user