30天自制操作系统 第14天日志

一、实验主要内容

1、 内容1:继续测试性能

昨天的实验,对于harib10g以及harib10i我们对比一下性能:
在这里插入图片描述
在这里插入图片描述
运行的数值差别很小
我们对于harib10h的改进之处在于消除了移位处理。需要使用大量的定时器才会发生移位,而我们使用的定时器只有三个。所以我们使用大量的定时器来测试性能:
我们设置了490个定时器,为了不让定时器超时,我们将超时时间设置为50天。
然后我们在真机上比较一下运行结果:
在这里插入图片描述
在这里插入图片描述
观察(1),追加490个定时器,取消移位速度变快,使用哨兵也有效果。
观察(2),不追加490个定时器,没哨兵,取消移位速度变慢;有哨兵,速度快一点点。
比较(1)和(2)的harib11c,没有移位,无论定时器多少,性能没有变化。而如果有移位的情况下,性能上差1018。
比较(2)和(3),处理上相同,结果相差345万。原因是C编译器的问题,for语句被翻译成JMP指令,在前面加上了set490(&fifo,0),
导致各个指令错开几个字节,执行时间延迟。

在这里插入图片描述

2、 内容2:提高分辨率(1)

我们原来的画面大小是320200,我们现在要扩大画面
由于画面切换中我们要使用BIOS,我们需要改写asmhead.nas的画面模式设定部分
在这里插入图片描述
切换到不使用VBE的画面模式时用“AH=0,AL=画面模式号码”,切换到使用VBE的画面模式用“AX=0x4f02,BX=画面模式号码”,使用VBE才能使用的新画面模式。
make run 640
480
在这里插入图片描述
我们也可以将画面扩展的更大,可以修改如下:
在这里插入图片描述

3、 内容3:提高分辨率(2)

我们让其能在真机上运行。
在这里插入图片描述
我们将ES赋值为0x9000,给DI赋值为0x4f00,再执行“INT 0x10”,如果有VBE,AX会变成0x004f,如果没有,只能使用320*200画面。
如果VBE的版本不是2.0以上,也不能使用高分辨率。我们来调查一下VBE的版本,
在这里插入图片描述
下一步通过VBE来查看画面模式0x105能不能使用,我们这样设定:
在这里插入图片描述
在这里插入图片描述
这里对AX进行确认是否是0x004f,我们的画面模式信息写入内存中从ES:DI开始的256字节中,画面信息会覆盖VBE版本信息导致其消失。
画面信息中,有6个重要信息:
在这里插入图片描述
在这里插入图片描述
当这些全部完成之后,我们就可以使用指定的VBE画面模式了。
当完成了画面模式的切换后,便可以将分辨率及VRAM的地址等信息赋值到BOOTINFO中。

4、 内容4:键盘输入(1)

我们对harib11e再次运行,我们按下A键,按下的时候显示1E,键弹起的时候显示9E
按下键显示的数值再加上0x80就得到键弹起时的数值
按下键时的数值表
在这里插入图片描述
在这里插入图片描述
保留?的地方还没有被定义,用于将来的键盘增加使用。
我们希望的是按下A的时候,显示的是A
在这里插入图片描述
当我们按下的键是A键时,我们显示A键
我们还把窗口名字由count改为window

在这里插入图片描述
make run
在这里插入图片描述

5、 内容5:键盘输入(2)

刚才的程序只是实现了按下A键时显示A,并没有实现其他的按键
我们希望也可以输入B,C……,我们可以按照刚才的方式,每个按键都需要一个if语句,
这样程序会变得非常长
我们使用另一种方法:
在这里插入图片描述
在这里插入图片描述
我们将keytable[]设定为static char,程序被编译为汇编时,static char能编译成DB指令
这个字符串的顺序是根据按下键的值来排序的,例如keytable[0x1e]对应的是A,如果i=0x1e+256,keytable[i-256]就是A,所以s[0]就是A。同理,其他按键也是可以显示的。
make run
当我们按下Z
在这里插入图片描述
书中说按下@键,却显示出W,这是QEMU的问题,真机上就没问题。不过我自己不能按下@键,只会显示2。

6、 追记内容(1)

我们在窗口添加一些话,改变鼠标和字符的显示位置以及颜色。当我们按下退格键,我哦们可以改写已输入的字符。
cursor_x用来记住光标显示位置,输入一个字符,这个变量递增8,cursor_c表示现在光标的颜色,每0.5秒变化一次。
在这里插入图片描述
make_textb0x8用来描述文字输入背景。

7、 内容7:追记内容(2)

我们来移动窗口
在这里插入图片描述
仅仅使用了两行代码,实现了窗口的移动,可以用鼠标来对窗口拖动,而且还对范围进行了界定,还能实现鼠标点击哪里,窗口图层就一下子移动到哪里,不愧是大佬的代码,厉害!
在这里插入图片描述

二、遇到的问题及解决方法

1、 描述问题1

为什么输入的时候一个字母会一直输入
在这里插入图片描述
在这里插入图片描述
解决方法:要将大写字母开启才行,这样就可以进行正常的输入

三、程序设计创新点

1、描述创新点1

密码页面的设计,输入以及比对是否正确
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、 描述创新点2

绘图程序,当点击字号大小时,弹出窗口,输入数字,可得到相应的字号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://download.csdn.net/download/weixin_43979304/15320819?spm=1001.2014.3001.5503

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SIR怀特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值