操作系统设计与实现:基于LoongArch架构
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.4 卷屏

当显示内容超出显示器最后一行时,需要调用scrup函数进行卷屏处理。卷屏的主要处理过程是将显示器第1~49行的内容分别复制到第0~48行中,并将第49行的内容擦除。scrup函数的实现详见代码清单1.8。

代码清单1.8 scrup函数

下面分析代码清单1.8。

• 第15行:获取显示器第0行第0列字符的起始像素在显存中的地址0x40000000。

• 第16行:获取显示器第1行第0列字符的起始像素在显存中的地址0x40000000+(16×1280×4)=0x40014000,计算过程详见代码清单1.2的第14行。

• 第17~18行:将显示器第1~49行中所有像素在显存中的内容,以字节大小为单位(每个像素对应4字节)复制到第0~48行对应的显存中,需要复制的字节总数为(800-16)×1280×4=4014080。

• 第19~20行:循环调用erase_char函数,擦除第49行中的160个字符。

• 第21~22行:将显示器第1~49行在数组sum_char_x中对应项的值分别复制到第0~48行对应的项中。

• 第23行:将显示器最后一行在数组sum_char_x中的对应项清0。