TermiNexus
|
5e1cd04478
|
feat(s4): 删除 SERIAL_PUTS 私有 syscall,用户态改走 /dev/serial0
内核:删掉 SERIAL_PUTS 的枚举项/派发分支/处理函数(内核自身的 serial.puts 是直接驱动调用,不受影响)。SDK:vpsdk/devfs.vp 新增 serial_puts()(惰性 open /dev/serial0 一次 + write),syscall.vp 删掉该成员。
调用点全部切到 devfs.serial_puts:vpsdk/stdio.vp 的 printf、vpsdk/vpui.vp 的 _serial_puts、Apps/Terminal 的 _sdbg、Apps/Explorer 的 _dbg、Libs/SerialLogger 的 log_info/log_warn(.so 同样走设备节点)。顺带清掉因此失效的 import(vpui 的 _syscall、Terminal 的 _syscall、Explorer 的 syscall)。
至此私有段只剩 7 项:TELL/SIZE/OPENDIR/READDIR/CLOSEDIR(可由 lseek/fstat/openat+getdents64 表达)与 LOAD_SO/SO_CALL1(动态库加载待下沉用户层)。
|
2026-10-16 19:17:39 +08:00 |
|
TermiNexus
|
c5e107e361
|
fix(vpsdk): 修正 desk_open/desk_map 的模块前缀(链接 undefined symbol 根因)
现象:ld.lld 报 undefined symbol aeb1805c34e518f8.desk_map / desk_open,引用来自 window.vp 的对象(_attach/_connect)。根因:我在 window.vp 与 Explorer/main.vp 里把这两个函数挂到了 devfs. 前缀上,而它们的定义在 vpsdk/desk.vp(devfs.vp 里只有底层 shm_map)。编译器按名解析到 desk.vp 的声明并发出带 desk 前缀的符号,但调用点的前缀不一致 ⇒ 链接期解析不到。
同时清掉 window.vp 里已不再使用的 import(devfs/stdlib/syscall —— get_winbuf 改用共享区后 stdlib.malloc 与 syscall 都已无引用)。
|
2026-10-16 19:14:57 +08:00 |
|
TermiNexus
|
13eee8e8ea
|
feat(s3e)!: 内核 UI 层整体下沉用户态 —— 删 11 个 UI syscall + services/desktop.vp
内核 intr/syscall.vp:删除 WAIT_WINDOW/CREATE_WINDOW/DRAW_TEXT/GET_WINBUF/WIN_FLUSH/POLL_EVENT/SET_CURSOR/SET_TITLE/SET_GEOMETRY/SET_RESIZABLE/GET_WIN_SIZE 的枚举项、派发分支与对应函数;去掉 services.desktop 依赖;EXIT 不再拆窗口(内核已不持有窗口语义)。
删除 VKernel/Kernel/services/desktop.vp(~2900 行内核桌面/合成/输入分发);main.vp 不再启动 desktop 线程,只保留一次 fb 局部量一致性校验。剩余 syscall = Linux 对齐段 + 8 个待 devfs 化的私有项(SERIAL_PUTS/TELL/SIZE/OPENDIR/READDIR/CLOSEDIR/LOAD_SO/SO_CALL1)。
SDK:yield_cpu() 从 WAIT_WINDOW(0,2) 改为 Linux 对齐的 sched_yield(内核同样是 try_reschedule);syscall.vp 同步删掉 11 个 UI 成员。
explorer:关闭按钮改为先通知 CLOSE 再把槽位 used=0 —— window.vp 的 is_active() 见 used==0 返回 0,app 的 while is_active() 自然退出;像素缓冲不复用(bump 分配)⇒ 无别名风险。至此输入只剩 explorer 一家在读(内核桌面已删),两个合成器之争结束。
|
2026-10-16 19:11:44 +08:00 |
|
TermiNexus
|
a45b9808b0
|
feat(s3d): vpsdk/window.vp 改走 /dev/desk 共享协议(对外 API 一字未改)
window.vp 重写:不再走内核 UI syscall,全部经共享区与用户态 explorer 通信。对外函数名/签名/常量/InputEvent 全部保持原样 ⇒ vpui.vp 与四个 app 零改动。
数据面:get_winbuf 直接返回共享 arena 里本窗口那块像素缓冲的线性地址(app 就地画),flush 只压一条 FLUSH 请求 ⇒ 全程零像素拷贝(旧实现是 app 私有缓冲 + 整块拷给内核)。控制面:请求环 + 按 pid 分的事件环;is_active/get_win_size 直接读共享槽(零 syscall)。create_window 压 CREATE(标题内联在消息里)并等 CREATED 答复拿 win_id。
协议补齐:DeskMsg 增内联 title(CREATE/TITLE 用,ring_push/pop 同步搬运);事件环按 pid 分(不能按 win_id——建窗答复送不到;也不能单环——单消费者结构多 app 会互抢);新增 DESK_MOUSE_PRESS/RELEASE/HOVER 语义常量。
合成器:关闭按钮改为置 active=0(app 的 while is_active() 自然退出)并通知一次 CLOSE;点击只投给窗口**内容区**(标题栏用于拖动)、松手投 RELEASE、移动投 HOVER,坐标均换算成窗口内坐标;拖动改为只在标题栏生效;RESIZE 重新从 arena 切片并更新内容尺寸(与 vpui 的 bh = h - TITLE_H - 2 对齐)。
|
2026-10-16 19:08:18 +08:00 |
|
TermiNexus
|
bb82c2fe75
|
fix(desk)!: 事件环改为单环+按 pid 过滤,并补 getpid(S3d 前置)
缺陷:原设计把事件环按 win_id 索引,但建窗答复 CREATED 必须在 app 知道 win_id 之前送达 —— 按 win_id 索引物理上不可能送达。改为**单一事件环**,每条事件带目标 pid,由 app 用自己的 pid 过滤(与内核旧接口 poll_event(buf, caller_pid) 同口径)。
DeskMsg 增 pid 字段(ring_push/ring_pop 同步搬运,漏搬则事件全被当成 pid=0);desk_evt_ring_off() 去掉 win_id 参数;desk_format 只初始化一个事件环;服务端 push_event 从窗口槽取 pid、建窗答复走新增的 push_event_pid(此时槽里还没有 pid)。
新增 GETPID(Linux 号 39,此前是"留空"项,现在真正实现):内核 GETPID() 返回 process.current(),SDK 侧 process.get_pid()。app 需要它才能过滤自己的窗口事件。
|
2026-10-16 18:58:43 +08:00 |
|
TermiNexus
|
1633769534
|
feat(explorer): S3c —— explorer 窗口服务端与合成器(请求环 + 输入 + 逐行合成)
Apps/Explorer/desk_server.vp(新增):窗口槽分配(含 arena 像素缓冲切分与底色预清)、Z 序与焦点、逐脏行合成(背景整行 memcpy → 各窗口按 Z 序只重画落在该行的那一段 → 光标)、请求处理(CREATE/DESTROY/MOVE/RESIZE/FLUSH/ACTIVATE)、事件投递(CREATED/CLOSE/KEY)、输入轮询(读 /dev/input/keyboard 的 ASCII 与 /dev/input/mouse 的按键+x/y,做命中测试、点击聚焦、标题栏右侧关闭按钮发 CLOSE、按住拖动移窗)。
main.vp:fb/desk/输入三者就绪后交给 DeskServer.serve() 主循环;去掉 S2 的渐变条演示(像素通路已由 fb 映射日志与合成器本身证明)。desk.vp:删掉写错且无人使用 的 DESK_MSG_SIZE 常量。
注意:本切片尚未实现标题文字(需用户态字体表)、任务栏、最小化/缩放、窗口侧边框与样式;且此过渡态下内核 desktop 与 explorer 同时在画屏幕,会互相覆盖 —— S3d(app 改走协议)与 S3e(删内核 UI)收口。
|
2026-10-16 18:56:30 +08:00 |
|
TermiNexus
|
30708d3250
|
feat(desk): S3 底座 —— /dev/desk 共享内存通道 + 用户态协议模块
内核 devfs 新增 shm_device(/dev/desk):同一物理区间映射给所有打开者;main.vp 启动时 mm.malloc 出 DESK_SHM_SIZE(8MB) 并登记,分配失败只打日志跳过(explorer 的 open 会明确失败,不静默兜底)。内核只负责"分配 + 共享映射",区间内布局完全不参与。
vpsdk/desk.vp(新增协议模块):共享区固定布局(DeskHeader / WinSlot / 请求环 / 每窗口事件环 / 像素 arena)、单生产者单消费者环形队列(head/tail,跨进程无锁、全程指针直读写)、explorer 用的 desk_format/desk_arena_alloc 与 app 用的 desk_ready。请求/事件类型常量齐备(CREATE/DESTROY/MOVE/RESIZE/TITLE/FLUSH/ACTIVATE 与 CREATED/CLOSE/KEY/MOUSE/RESIZE)。
vpsdk/devfs.vp 增 DEV_DESK 与 shm_map();Explorer 启动即 open+mmap /dev/desk、desk_format 初始化并打印头信息,验证 IPC 底座可用。
|
2026-10-16 18:53:27 +08:00 |
|
TermiNexus
|
6bd2390e08
|
feat(explorer): S2 —— 新增图形壳应用 explorer 骨架,用户态经 devfs+mmap 直接写屏
Apps/Explorer:复制标准 app 骨架(main.vp / linker.ld / project.vpj,链接地址 0x400000)。启动流程:open /dev/fb0 → ioctl(FB_GET_INFO) 打几何 → mmap 拿到线性地址 → 等约 2 秒(等内核桌面首屏全量重绘过去)→ 画一条渐变横条验证像素真上屏 → open /dev/input/keyboard|mouse 验证输入设备可达 → 常驻不退出。
vpsdk/devfs.vp(新增 SDK 设备层):设备路径常量(与内核注册名逐字一致)、FB_GET_INFO 与 FbInfo 镜像(packed,与内核同布局)、fb_open/fb_get_info/fb_map/kbd_open/mouse_open。
build.py:把 Explorer 加进 required_apps 清单与完整构建分支;内核 main.vp 在四个 app 之后 spawn /APPS/explorer.elf。内核 desktop 与 explorer 并存属迁移中间态,S3 会把窗口合成整体交出去。
|
2026-10-16 18:43:13 +08:00 |
|
TermiNexus
|
ca72ddbbf7
|
refactor(syscall): 调用号改用 enum 并全面对齐 Linux x86-64 ABI
内核 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) 改为常量。
|
2026-10-16 18:32:33 +08:00 |
|
TermiNexus
|
0886252a08
|
feat(vpsdk): window/syscall/process/stdio/fs/dynlib 适配 + apps 同步调整
|
2026-10-16 16:40:41 +08:00 |
|
TermiNexus
|
befed3904a
|
fix(Gargantua): setup_camera 改用 V3 值语义(消除旧版 &_g_cam 指针残留),移除定位用调试输出
|
2026-10-16 14:12:50 +08:00 |
|
TermiNexus
|
d9b39e99a5
|
chore(debug): Scene3D 每帧持续打印 time 与两个 sinf 采样值位模式 - 抓曲线变平时刻
|
2026-10-15 20:02:19 +08:00 |
|
TermiNexus
|
d31f887290
|
chore(scene3d): 移除 [s3d] 时间探针 - 已确认回绕常量(-12.566371/+12.566371)正确、时间正常
|
2026-10-15 19:58:45 +08:00 |
|
TermiNexus
|
cceefa4e2e
|
revert(scene3d): PI 还原为 define - app 侧 workaround 撤销,float 字面量折叠由 ViperC 侧修复
|
2026-10-15 18:22:48 +08:00 |
|
TermiNexus
|
aec563e33a
|
fix(scene3d): PI 改为运行期 float 变量 - 消除 float 字面量被折叠成 double 致波形算术提升为 double(SIN 波形塌平)
|
2026-10-15 18:21:10 +08:00 |
|
TermiNexus
|
2803aff04c
|
chore(debug): Scene3D 时间探针改为按 time 跨整数打印(与帧计数解耦) - 确保能可靠观测渲染循环是否在推进
|
2026-10-15 17:46:14 +08:00 |
|
TermiNexus
|
e066c529f2
|
fix(scene3d): 深度缓冲初值 1.0->2.0 (NDC z in [-1,1], 初值须大于上界,否则远表面被永久剔平);撤掉 R/U/Y 阶段探针
|
2026-10-15 17:42:13 +08:00 |
|
TermiNexus
|
03dcd16f8b
|
chore(debug): Scene3D 渲染线程加阶段探针(R/U/Y 每帧标记) - 定位冻结卡在 Render/update/yield 哪一步
|
2026-10-15 17:39:17 +08:00 |
|
TermiNexus
|
30620a2d0c
|
chore(debug): Scene3D 临时探针打印 _time_val 位模式 - 区分时间退化与被内存写坏/几何深度剔除
|
2026-10-15 17:28:56 +08:00 |
|
TermiNexus
|
abd13260af
|
fix(scene3d): 时间相位回绕 4pi - 避免 float32 相位精度随运行退化致 SIN 波形塌平与热力图失色
|
2026-10-15 17:25:24 +08:00 |
|
TermiNexus
|
53535c557e
|
fix(scene3d): Mat4_Identity/Mul/LookAt 改回值语义,修悬垂指针致投影矩阵损坏、fb 越界写砸坏 _winbufs
|
2026-10-15 16:09:15 +08:00 |
|
TermiNexus
|
f42d8a5248
|
revert(HelloWorld): 回调恢复为 &_on_submit(编译器已支持对函数取址)
上一提交为绕过 CastError 曾改成直接传函数名;现编译器已修(ViperC 70c271d:取址分支
补 Ptr(Ptr(Func)) 分支),`&func` 会正确给出 Ptr(Func)(一级),故恢复原始写法。
|
2026-10-14 16:38:18 +08:00 |
|
TermiNexus
|
5da1e3f62a
|
fix(HelloWorld): 回调改传函数名本身,去掉多余的 &(函数名已是地址)
vpui.Button(..., &_on_submit) 把函数地址又取了一层 → fn**(二级),与形参
callback: t.CPtr(一级 i8*)级数不符;新收紧的隐式转换规则下报 CastError:
implicit pointer-to-pointer conversion is forbidden: pointer level differs
(source level 2 -> target level 1);
source: level 2, pointee !llvm.ptr -> target: level 1, pointee i8
改为直接传 _on_submit,与代码库既有写法一致(如 idt.irqInstallHandler(12, irq_handler, "mouse"))。
|
2026-10-14 16:31:24 +08:00 |
|
TermiNexus
|
d093d3fc8b
|
chore: 改名同步 TransPyV -> ViperC(源码/配置内的纯替换)
|
2026-10-12 15:06:50 +08:00 |
|
TermiNexus
|
5b4bab59cc
|
chore(ViperOS): 合并落库内核侧在途改动并移除 vpsdk wiki 拷贝
VKernel / vpsdk / Apps / Libs 共 30 个源文件:内核与 SDK 侧的新语法适配及编译修正(含 bootinfo.vp / main.vp 位宽改 uint64、gfx.vp 前向引用改指针、devfs.vp 指针解引用赋值、elf.vp 跨模块函数取值等)。删除 vpsdk/wiki/*.md(14 文件,约 -8100 行):与仓库根 wiki 重复的拷贝,统一以根 wiki 为唯一来源。
|
2026-10-07 19:04:33 +08:00 |
|
TermiNexus
|
2a54e2bafb
|
清理了 t.CVoid
|
2026-09-16 16:07:04 +08:00 |
|
TermiNexus
|
a518f75b24
|
chore(vkernel): 重置基线 — 纳入 TPV codegen 修复配合的内核侧调整与既有工作区内容
- devfs.vp: string.split 传 PATH_BUFFER_SIZE(配合 split 新增容量参数)
- fat32_types.vp: lfn_extract 越界钳制(base+i > MAX_LFN 返回 -1)
- sheet.vp: gfx.Renderer 实参修正为 (fb, zb, w, h)(原单参导致 w/h=0 渲染空操作)
- 同批包含 VKernel 其余既有移植改动与 vpsdk/Apps/Libs 工作区内容
|
2026-09-11 14:27:01 +08:00 |
|
TermiNexus
|
cd1cc915c5
|
修正了build.py,重置基线
|
2026-09-11 10:34:34 +08:00 |
|
TermiNexus
|
b887d3d9c2
|
更新,部分功能可用
|
2026-08-27 09:47:47 +08:00 |
|
TermiNexus
|
56d127cb88
|
将 project.json 改为了 project.vpj,初步尝试了使用 Viper 插件高亮
|
2026-07-30 17:24:35 +08:00 |
|
TermiNexus
|
20e7289c61
|
将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名
|
2026-07-30 16:34:26 +08:00 |
|
Viper
|
6813947181
|
Initial import of ViperOS
|
2026-07-19 12:38:20 +08:00 |
|