返回首页
一周热榜
嗨,HN,
我构建了一个RISC-V模拟器,支持RV32IM指令集,并实现了一个最小的系统调用接口,以便运行DOOM。几周前,我用一个简单的Hello World汇编程序首次获得了输出。
从那时起,我一直在不懈努力,试图让DOOM运行起来。
我首先需要弄清楚如何运行C程序,发现了newlib,它允许底层环境逐个实现系统调用存根,直到程序可以运行。
我还添加了ELF加载功能,但目前只支持单个`PT_LOAD`段。
为了移植DOOM,我使用了doomgeneric,一旦所需的存根到位,工作起来非常方便。
DOOM渲染到内存中的固定区域(0x705FDD = VRAM_START):
```
0x7FFFFF +-------------------------------------+
| |
| QUEUE_SIZE (32 bytes) |
| |
0x7FFFDF +-------------------------------------+ <--- QUEUE_START
0x7FFFDE | QUEUE_READ_IDX |
0x7FFFDD | QUEUE_WRITE_IDX |
+-------------------------------------+
| |
| |
| VRAM (1,024,000 bytes) |
| |
| |
0x705FDD +-------------------------------------+ <--- STACK_START
| Stack |
| | |
| v |
| |
| ^ |
| | |
| Program data + Heap |
| |
0x000000 +-------------------------------------+
```
我制作了一个小的链接脚本,使得C程序的入口点位于_start,虚拟地址始终为0。这使得ELF加载器的代码保持简单。
输入由rvcore写入队列,然后被运行在其中的DOOM拦截。
演示链接: [https://www.youtube.com/watch?v=f5uygzEmdLw](https://www.youtube.com/watch?v=f5uygzEmdLw)
把这个当作一个有趣的小练习来学习。然而,最终结果与商业级深度研究产品不相上下。<p>完整的写作(涵盖当前状态的80%):<p><a href="https://deep-research-agent.pagey.site" rel="nofollow">https://deep-research-agent.pagey.site</a>
Valkyr 是对 LM 推理运行时的新颖尝试。它与 llama.cpp、vLLM 或 ZINC 等项目有很大不同。它是用 Zig 编写的,代码非常简洁,除了 Vulkan Compute 本身外没有其他依赖项。虽然它支持多种模型系列和像 OpenAI 兼容服务器这样的功能,但一个重要的特点是,它可以在现有的 Vulkan 主机中以严格的时间预算运行——想想视频游戏、增强现实/虚拟现实应用、边缘设备或机器人。此外,它还支持丰富的探测接口,以接近实时的方式研究语言模型的内部结构。我并不是想与现有的运行时竞争,因为这些已经存在。我所要做的是帮助推理与时间敏感的应用程序协同工作。如果你能试试看,我会非常高兴。如果你有任何问题或想法,请告诉我。谢谢!