MacOS环境-手写操作系统-27-修改分辨率

简介: MacOS环境-手写操作系统-27-修改分辨率

修改分辨率

1.简介

当前 我们系统的分辨率是320*480


这种分辨率太小 绘制出来的系统界面看起来很大条 也很粗糙


跟我们现实使用的操作系统比起来 差别太大


因此 本节 我们就在分辨率上做一些改进


2.代码

2.1 分辨率的改进

设置显示分辨率是在内核的汇编部分实行的,代码如下(kernel.asm)


LABEL_BEGIN:
    .....
     mov   al, 0x13
     mov   ah, 0
     int   0x10
     ....


现在修改成


LABEL_BEGIN:
    .....
     mov   bx, 0x4101
     mov   ax, 0x4f02
     int   0x10
     ....


执行上面代码后 分辨率会从320x200转换为480x640


并且显存地址起始地址将不再是0xa00000 而是转变为0xe0000000


在新的显卡模式下 指定分辨率有以下几种方式


bx = 0x4101 表示分辨率为 640480
bx = 0x4103 表示分辨率为800600
bx = 0x4105 表示分辨率为1024768
bx=0x4107 表示分辨率为12801024


上面的显示形式都才有8位色彩模式


内核的C语言部分也要做些修改,代码如下(write_vga_desktop.c)


void initBootInfo(struct BOOTINFO *pBootInfo) {
    pBootInfo->vgaRam = (char*)0xe0000000;
    pBootInfo->screenX = 640;
    pBootInfo->screenY = 480;
}


2.2 键盘响应的改进

把按键对应的字符显示出来 因此我们需要做一张表


每当按键按下后 根据扫描码去查表 找到对应的字符 进而显示出来

static char keytable[0x54] = {
        0,   0,   '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '^', 0,   0,
        'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '@', '[', 0,   0,   'A', 'S',
        'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', ':', 0,   0,   ']', 'Z', 'X', 'C', 'V',
        'B', 'N', 'M', ',', '.', '/', 0,   '*', 0,   ' ', 0,   0,   0,   0,   0,   0,
        0,   0,   0,   0,   0,   0,   0,   '7', '8', '9', '-', '4', '5', '6', '+', '1',
        '2', '3', '0', '.'
    };
void CMain(void) {
    。。。。。
    for(;;) {
    。。。。。。
        else if(fifo8_status(&keyinfo) != 0){
           io_sti();
           data = fifo8_get(&keyinfo);

           if (data == 0x1C) {
               showMemoryInfo(shtctl, sht_back,  memDesc + count, buf_back, count, xsize, COL8_FFFFFF);
               count = (count+1);
               if (count > memCnt) {
                  count = 0;
               }

           } else if (keytable[data] != 0) {
               char buf[2] = {keytable[data], 0};
               showString(shtctl,  shtMsgBox, 40, 28, COL8_000000, buf);
           }

       } 
       。。。。
    }
    。。。。
}

上面代码先定义了一个扫描码的转换表 按键按下后 内核根据扫描码到上面的表中查找对应字符


同时 当按键发送时 内核主循环检测到按键事件 得到按键扫描码


如果按键的扫描码不等于0x1c 也就是按键不是回车键 那么我们就用按键的扫描码在表中查找 得到对应的字符后


把它绘制到message box的窗体中间


3.编译运行

目录
相关文章
|
1月前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
39 3
|
1月前
|
存储 C语言 iOS开发
MacOS环境-手写操作系统-48-让内核从错误中恢复
MacOS环境-手写操作系统-48-让内核从错误中恢复
36 0
|
1月前
|
存储 API C语言
MacOS环境-手写操作系统-46,47-C语言开发应用程序
MacOS环境-手写操作系统-46,47-C语言开发应用程序
35 0
|
1月前
|
编译器 API C语言
MacOS环境-手写操作系统-45-C语言开发应用程序
MacOS环境-手写操作系统-45-C语言开发应用程序
45 0
|
1月前
|
小程序 iOS开发 MacOS
MacOS环境-手写操作系统-44-运行简单的程序
MacOS环境-手写操作系统-44-运行简单的程序
22 0
|
1月前
|
存储 Java iOS开发
MacOS环境-手写操作系统-43-dir命令的实现 和 文件写入
MacOS环境-手写操作系统-43-dir命令的实现 和 文件写入
30 0
|
17天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
38 0
Vanilla OS:下一代安全 Linux 发行版
|
19天前
|
人工智能 安全 Linux
|
1月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
3月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
113 3
下一篇
无影云桌面