内核 intr/syscall.vp 与 vpsdk/syscall.vp 各一份 1..34 的 define 表改为同名 enum Syscall。编号口径:与 Linux 同名同号;Linux 有而我们未实现的留空不占号(12 brk / 39 getpid / 84 rmdir / 217 getdents64 / 257 openat … 需要时按号补)。 15 个语义重合的调用直接用 Linux 号:READ 0 / WRITE 1 / OPEN 2 / CLOSE 3 / STAT 4 / SEEK 8 / MMAP 9 / MUNMAP 11 / YIELD 24 / THREAD_CREATE 56(≈clone) / SPAWN 59(≈execve) / THREAD_EXIT 60(exit) / MKDIR 83 / REMOVE 87 / EXIT 231(exit_group)。 其余 19 个(UI 11 个 + SERIAL_PUTS/TELL/SIZE/OPENDIR/READDIR/CLOSEDIR/LOAD_SO/SO_CALL1)暂放 0x1000 起的**临时私有段**,每条带迁移标注:私有能力最终不占 syscall 号、改走 devfs 设备文件;UI 11 个待用户态 explorer(图形壳)接管 framebuffer 与输入后删除。 内核派发链改 n == int(Syscall.X)(n 是 int/i64、成员是 i32,显式 int() 规避未证实的混合宽度比较);SDK 全部调用点统一为 syscall.Syscall.X;stdlib 的 SYSCALL_MMAP 别名并入 Syscall.MMAP;Terminal 里硬编码的 uint64(18) 改为常量。
33 lines
1.3 KiB
Plaintext
33 lines
1.3 KiB
Plaintext
import vpsdk.syscall as _syscall
|
||
import viperlib
|
||
|
||
# ============================================================
|
||
# vpsdk.stdio - 用户态 printf/exit(CExport 裸名,供内核侧代码
|
||
# 如 includes/memhub.vp 跨模块引用解析)
|
||
#
|
||
# 裸机 App 无 libc:printf 走 viperlib.vsnprintf 格式化 + SERIAL_PUTS
|
||
# syscall 输出到串口;exit 走 EXIT syscall 通知内核销毁本进程窗口。
|
||
# ============================================================
|
||
|
||
export def printf(fmt: const str, *args) -> int:
|
||
"""格式化输出到串口(SERIAL_PUTS syscall),返回输出字节数"""
|
||
if fmt is None:
|
||
return 0
|
||
buf: [1024]char
|
||
n: int = viperlib.vsnprintf(&buf, 1024, fmt, args)
|
||
_syscall._syscall1(uint64(_syscall.Syscall.SERIAL_PUTS), uint64(&buf))
|
||
return n
|
||
|
||
export def exit(status: int):
|
||
"""终止当前进程(EXIT syscall:销毁本进程窗口)"""
|
||
_syscall._syscall1(uint64(_syscall.Syscall.EXIT), uint64(status))
|
||
|
||
|
||
export def fflush(stream: const rawptr) -> int:
|
||
"""刷新输出流:串口/控制台输出都是直写,无缓冲可刷,空操作返回 0
|
||
|
||
覆盖 libc fflush 的裸机缺失(includes/memhub.vp 的诊断/终止路径 call @fflush);
|
||
与 printf/exit 同为 CExport 裸名,供内核侧 includes 跨模块引用解析。
|
||
"""
|
||
return 0
|