实现OS 这个标题给的太大了,只能说实现了几个小的功能而已。
如标题所说,纯裸机,也就是没有任何的字符库,BIOS中断也没有使用,利用时钟中断、键盘中断、BEEP、在200 * 320 像素显示模式下实现了
自己的系统(DOGE)
先来看看效果吧
虽然直接看演示比较直接,但是还是啰嗦一下。
包括4个功能板块。
1、文本编辑,实现了大小写字母、数字的输入,其中包括caps的大写锁定,shift键的大写控制,空格、退位、换行。
2、图片显示,使用轮播的方式,实现动画效果,主要是将现成的图片处理成点阵,汇编语言就很好写了。
3、游戏,游戏的逻辑还是比较简单,主要是人物移动,碰撞检测,还有吃苹果,分数刷新等等。
4、音乐播放,这个功能是可以和上面三个功能并行的,单核多线程(DOGE)
然后总结一下代码:
第一次使用汇编语言写代码,总的来说就是初代开发师真的NB。
我就比较偷懒了,由于在开发的时候,存在很多相似的几百行代码,所以直接用C++生成,手敲真的不是很顶得住
关于字符库,这个资源是在网上找的,不得不说,要感谢前人。
关于图像处理,简单的原理是将RGBA图片转为灰度图,然后将颜色深的点的坐标输出就可以了。
但是在图片中存在大量的黑块之后,这个办法就不太合理了,因为会出现了很多没有必要的点。
于是学习了一下,PYTHON对于图像的线条处理,直接获取图片的轮廓,这样就可以减少没必要的点,降低存储压力。
最后是项目文件:
main.asm 程序的主文件
font.sm, digit.asm, role.asm, fruit.asm, 数据文件,主要存储字体文件,人物点阵,水果点阵
geolib.asm 分装的处理画线、画框、画方块事件的函数
time_solver, 处理时钟中断,在这里处理整体的逻辑,包括对于文本编辑器功能的处理
draw_font.asm 处理打印点阵的函数,可以打印出字体、人物、游戏素材、图片,其中本质都是点阵,所以这一块的复用率很高
因此给出了一个封装。
key_solver: 处理键盘中断,将输入的键放入键盘的状态表
game.asm 处理游戏逻辑
music.asm 处理音乐
整体的代码 实在是太多了,就上传到 github , 算是为后人留下一点点的参考吧。
https://github.com/loenvom/HAO_OS