裸机状态-汇编语言-实现OS

 

实现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

posted @ 2021-01-20 23:55  loenvom  阅读(225)  评论(0编辑  收藏  举报