zoukankan      html  css  js  c++  java
  • 裸机状态-汇编语言-实现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

  • 相关阅读:
    加密算法
    git 误操作
    element项目发布
    node命令
    计划
    第一次碰见类似留几手的段子手
    【vue】---猫眼项目中使用js组件的时候-------loading 加载 无法移除的原因---------
    【异步】---异步解决方案---
    【问题-方法】---buffer---解决方法,butter 文件转字符串
    【大脑】--如何让大脑快速记忆
  • 原文地址:https://www.cnblogs.com/loenvom/p/14305767.html
Copyright © 2011-2022 走看看