• 裸机状态-汇编语言-实现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

  • 相关阅读:
    abp 嵌入资源(视图、css、js)的访问
    提高SQL查询效率的30种方法
    jqgrid 使用自带的行编辑
    jqgrid 单击行启用行编辑,切换行保存原编辑行
    handsontable 拖动末尾列至前面列位置,被拖动列消失的问题
    js 自己项目中几种打开或弹出页面的方法
    js 根据相对路径url获得完整路径url
    【Flutter学习】之动画实现原理浅析(一)
    Xcode 编辑器之关于Other Linker Flags相关问题
    【Flutter学习】之Widget数据共享之InheritedWidget
  • 原文地址:https://www.cnblogs.com/loenvom/p/14305767.html
Copyright © 2020-2023  润新知