Skip to content
HFunction2013Public

About

A simple os in asm.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SimpleOS — 简易 16 位操作系统

一个能在 QEMU 上运行的 16 位实模式操作系统,支持 FAT12 文件系统、RTC 时间、用户登录、TTY 终端和蓝屏 panic。专为 macOS 上的 QEMU 测试设计。

功能特性

模块 说明
引导 FAT12 引导扇区,从软盘加载内核
文件系统 FAT12 (1.44MB 软盘),支持 ls / cat
时间 读取 RTC 实时时钟,支持 time / date
用户系统 基于 USERS.TXT 的用户认证,支持登录/登出/切换
TTY 全功能终端,支持行编辑、退格、ESC 清行
蓝屏 (BSOD) 用户执行 panic 命令或 int 0xFE 指令触发蓝屏死机
Shell 内置 14 条命令的命令行解释器

系统要求

  • macOS (或 Linux)
  • NASM — 汇编器
  • QEMU — x86 模拟器
  • Python 3 — 构建 FAT12 镜像

macOS 安装依赖

brew install nasm qemu

快速开始

# 1. 克隆/进入项目目录
cd simpleos

# 2. 构建操作系统镜像
./build.sh

# 3. 在 QEMU 中运行
./run.sh

默认用户

系统启动后会要求登录,默认账户:

用户名 密码
admin admin
user 1234
guest guest

用户数据存储在软盘镜像的 USERS.TXT 文件中,格式为 username:password,每行一个用户。

Shell 命令

命令 说明
help 显示所有可用命令
ls 列出软盘上的文件
cat <文件名> 显示文件内容
time 显示当前时间 (RTC)
date 显示当前日期 (RTC)
whoami 显示当前登录用户
users 列出所有用户
login 重新登录 (切换用户)
logout 登出并返回登录界面
panic 触发内核蓝屏死机 (BSOD)
clear 清屏
echo <文本> 回显文本
ver 显示系统版本
reboot 重启系统

蓝屏死机 (BSOD)

有两种方式触发蓝屏:

  1. Shell 命令:输入 panic 并回车
  2. 汇编指令:在用户程序中执行 int 0xFE 中断

蓝屏会显示:

  • 错误标题和描述
  • 触发蓝屏的用户名
  • 触发时间
  • STOP 错误码
  • 系统停机提示

蓝屏后系统完全停机,需要重启 (QEMU 中按 Ctrl+A X 退出后重新运行)。

项目结构

simpleos/
├── src/
│   ├── boot.asm      # FAT12 引导扇区 (512 字节)
│   └── kernel.asm    # 16 位内核 (TTY/FS/RTC/用户/Shell/Panic)
├── mkfs.py           # FAT12 软盘镜像构建脚本
├── build.sh          # 一键构建脚本
├── run.sh            # QEMU 启动脚本
└── README.md         # 本文档

构建后生成:

  • boot.bin — 编译后的引导扇区
  • KERNEL.BIN — 编译后的内核
  • simpleos.img — 可启动的 FAT12 软盘镜像
  • *.lst — 汇编列表文件 (调试用)

技术细节

内存布局

地址 用途
0x0000-0x03FF 中断向量表 (IVT)
0x0500-0x7BFF 自由内存
0x7C00-0x7DFF 引导扇区 (BIOS 加载)
0x2000:0x0000 内核 (代码+数据+栈)
0x3000:0x0000 FAT 缓存 (9 扇区)
0x4000:0x0000 根目录缓存 (14 扇区)
0x5000:0x0000 文件数据缓存

中断处理

内核安装了以下中断处理程序:

  • int 0x00 — 除零异常 → 蓝屏
  • int 0x06 — 无效操作码 → 蓝屏
  • int 0xFE — 用户 panic 指令 → 蓝屏

FAT12 文件系统

  • 介质:1.44MB 3.5 寸软盘
  • 每簇 1 扇区,共 2847 个可用簇
  • 根目录 224 个条目
  • 支持 8.3 文件名格式
  • 镜像中预置文件:KERNEL.BIN, USERS.TXT, README.TXT, HELLO.TXT

QEMU 启动参数

qemu-system-i386 \
    -m 16 \
    -fda simpleos.img \
    -boot a \
    -no-reboot
  • -m 16 — 16MB 内存 (16 位系统只需极少内存)
  • -fda — 软盘镜像
  • -boot a — 从软盘启动
  • -no-reboot — 崩溃时不自动重启 (便于观察蓝屏)

调试模式

./run.sh -d

启用 GDB 调试,QEMU 等待 GDB 连接到 :1234:

gdb -ex 'target remote :1234'

扩展开发

添加新的 Shell 命令

  1. 在 kernel.asm 的数据区添加命令名字符串
  2. 在 shell_exec 中添加 strcmp 比较和跳转
  3. 编写对应的 .do_xxx 处理子程序

添加新文件到镜像

编辑 mkfs.py 中的 files 列表,添加新的 (name, ext, data) 元组,然后重新运行 ./build.sh。

修改用户账户

编辑 mkfs.py 中的 users_data,格式为 username:password\n,然后重新构建。

许可证

MIT License — 可自由使用、修改和分发。

About

A simple os in asm.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages