仅运行NES模拟器的内核

Lobsters Hottest 工具

摘要

一个旨在无需任何操作系统的情况下运行NES模拟器的最小化内核,并附带像Mandelbrot分形可视化这样的额外程序。

<p><a href="https://lobste.rs/s/nqmm3r/kernel_only_runs_nes_emulator">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/08/15 09:41

vmartinv/nek

来源:https://github.com/vmartinv/nek

简介

任天堂娱乐系统内核 (Nintendo Entertainment Kernel) 是一个非常基础的内核,仅包含运行 NES 模拟器所需的最低限度功能。这意味着它可以无需任何操作系统即可运行。它没有分页、没有用户空间,也没有任何形式的保护机制。一次只能运行一个程序。该程序被嵌入内核中,这意味着程序的代码与内核一起编译。

截图

alt 主屏幕

alt 超级马里奥兄弟

构建

您应使用 make 并指定交叉编译器路径:

PATH=/path/to/crosscompiler/bin:$PATH make kernel program=emulador

如果没有错误,kernel.elf 文件应位于 bin 文件夹中。

示例

除了 “emulador” 外,还有三个可运行的程序:

  • mandelbrot(展示可交互的分形图形)
  • paleta(展示 NES 可用颜色)
  • corazon(使用数学函数制作的心形动画)

所有程序均可通过 make 与内核一起编译。

例如:make program=examples/mandelbrot

安装

您可以将 kernel.elf 复制到 /boot/,并在 /etc/grub.d/40_custom 中添加如下条目:

menuentry “nek” {

multiboot /boot/kernel.elf module /boot/initrd.img

}

请记得更新配置文件:

sudo grub-mkconfig -o /boot/grub/grub.cfg

测试

Makefile 应使用磁盘镜像 disk.img 运行 QEMU。必须已在挂载文件夹中为该文件设置环回设备。

依赖项

  • i686 交叉编译器(C 和 ASM),例如 GCC 和 nasm
  • GRUB2(可选):生成 .iso(光盘镜像)
  • QEMU(可选):用于模拟
  • Doxygen 和 Graphviz(可选):用于生成文档
  • grub-mkrescue(可选):用于生成可启动光盘镜像(.iso)

启动调用栈

GRUB(multiboot 标准)

kernel/arch/x86/init/boot.s <– 调用 C 代码,初始化栈

kernel_entry()(位于 kernel/arch/x86/init/kernel_entry.c)<– 基础系统初始化

kmain()(位于 kernel/kmain.c)<— 启动部分服务

main()(位于 program/main.(c|cpp))<— 主程序

目录结构

  • kernel 文件夹包含所有与内核相关的文件
  • kernel/arch 存放依赖于架构的代码
  • kernel/fs 文件系统(当前仅实现了 VFS)
  • fdlibm:从网络下载的数学库
  • util/specs:一些有用的文档
  • informe:大学报告(西班牙语)
  • iso:包含用于生成内核 .iso 的少量文件
  • util:包含生成 initrd 的程序及其他一些工具
  • util/fuente:用于生成控制台字体的工具/文件

相似文章

一个多功能的 PDP-11/70 模拟器

Lobsters Hottest

一篇关于 “Kek” 的文章,这是一个多功能的 PDP-11/70 模拟器,可从 Linux 到 Teensy 4.1 和 ESP32 等微控制器的平台上运行,能够运行多种 Unix 版本。

裸启动Linux

Hacker News Top

本文介绍如何创建一个运行单进程的最小化Linux启动,精简通常的initramfs,使启动时间小于一秒。