BearOS
小熊操作系统

中学时初次接触计算机,便对操作系统产生了浓厚兴趣,一直梦想着亲手打造一个属于自己的操作系统。时光飞逝,一晃三十余年,这个梦想始终未曾付诸行动。今年春节后,我终于下定决心,利用业余时间,一步一步地开始了操作系统的开发,只为圆青春时代为自己设下的承诺。

小时候学的是DOS系统,那种简洁的命令行操作方式,至今仍是青春时代美好的回忆。这种系统实现起来相对简单,因此,我的第一个操作系统,就决定做成DOS一样的系统。

我先规划了好自己对操作系统的定义:一个操作系统,首先得实现开机引导,接着驱动各类硬件——CPU、显卡、硬盘、键盘等,最后还得做一个Shell,能输入命令。

最初,我做了一个16位的操作系统,运行在实模式(RealMode)下。但受限于CPU实模式的设计,只能访问1MB内存,大量硬件性能无法发挥。为了提升性能,我将系统升级为32位保护模式。进入保护模式后,所有BIOS中断都无法使用,驱动几乎要全部自己写,最终还是做了下来。

操作系统不能操作磁盘,那还叫什么系统?于是我又实现了一套自定义文件系统,能够读取磁盘上的程序、加载到内存并运行。

接着,我想为系统开发一些应用程序,这就需要一套自己的类库。于是我写了一套C语言标准库,有了它,就能在自己的系统上开发程序了。最简单的HelloWorld、显示ASCII字符,都跑通了。为了验证这套库能否支撑更复杂的程序,我又在系统上开发了一个俄罗斯方块小游戏。

不过,这些程序仍然是在宿主机上编写、交叉编译后生成的。我认为,一个真正能用的操作系统,应该能在自身环境下进行开发。于是我计划在系统上做一个文本编辑器,实现本地编程。后来,这个编辑器也实现了。

有了编辑器,系统上还缺一门编程语言。我决定从最简单的开始——做一门解释型语言,类似BASIC或Python。以小时候记忆中中华学习机(Apple II)上的BASIC为蓝本,我开始创建自己的语言。后来为了扩充功能,又加入了C语言和Python的一些特性:比如C语言的变量类型定义、Python的多返回值等。这门语言融合了多种风格,是个"四不像",我就给它取名叫BasC(BAS + C)。

我先用BasC写了一些小程序——打印文本、简单计算、文本处理等。后来觉得应该写个大程序来验证实用性,便用BasC重写了一个俄罗斯方块,对比它与交叉编译版本在运行速度和效果上的差异。

操作系统有了编辑器和编程语言,已初具雏形。但是自己做的操作系统,不支持中文怎么行?于是我着手让系统支持中文。

要支持中文,就不能再用默认的文本模式,必须切换到图形模式。这意味着连英文字符的每一个点阵,都要自己编程在屏幕上画出来。后来我完成了字符显示,并为了兼容性,选择了经典的1024×768的图形模式进行开发。最终,整个系统实现了中文显示。能显示还不够,还得能输入中文,于是我又开发了一个拼音输入法——毕竟用了这么多年电脑,唯一熟悉的输入法就是拼音。

至此,操作系统已初具雏形:运行于1024×768图形模式,支持中文显示与输入;具备Shell和文件系统,能读取、写入并运行磁盘上的文件;拥有自研C语言类库、文本编辑器和编程语言BasC。

中英文切换

Ctrl + ~ :切换中英文输入法
注:系统只支持拼音输入法。拼音输入支持汉字动态调频,暂不支持模糊拼音以及词组输入。


系统命令

ls/dir [file_name] [-h] [-p] : 列出当前目录下文件
ren/rename old_name new_name : 更改文件名字
copy file_name new_name/dir_name : 拷贝文件到新文件或指定目录
del/delete file_name : 删除文件
mv/move file_name new_name/dir_name : 移动文件到新文件或指定目录

cd dir_name : 切换目录
mk/mkdir dir_name : 创建目录
rd/rmdir dir_name : 删除目录

touch file_name [-m a/x] :创建空文件/更改文件属性/将文件或目录更改为当前时间
datetime : 显示当前日期和时间
type/read file_name [-p] : 显示文件内容,按ESC退出
write file_name : 创建新文件,并逐行输入内容,按ESC退出

reboot : 重启系统

部分程序

bin :本地程序目录
edit :全屏幕的文本编辑软件,用于编辑文本或是本地程序代码
tet : 本地的俄罗斯方块程序,可以直接运行。w切换形态,a左移,d右移,s落下
hello : helloworld程序
ascii : 显示系统支持的ASCII字符
ascii2 :显示系统支持的ASCII字符及颜色
color : 显示系统调色盘
music : 用系统PC喇叭播放音乐

bc : BasC 语言目录
bc : BasC语言解释器 使用:bc file.bc
hi.bc : 用BasC语言写的helloworld程序
sum.bc : 用BasC语言写的从1加到100程序
string.bc 用BasC语言写的字符串处理程序
color.bc 用BasC语言写的系统颜色及调色盘程序
tet.bc 用BasC语言写的俄罗斯方块程序。w切换形态,a左移,d右移,s落下
lib.bc 用BasC语言写的字符串处理库,可导入其他bc文件使用