linux下c语言写界面,利用C语言绘制操作系统图像界面

这篇博客介绍了如何利用C语言在Linux环境下创建图形用户界面,通过操作硬件和设置VGA显卡进入图形模式。博客详细讲解了代码实现,包括设置显卡模式、内存描述符以及C语言代码示例,展示了如何写入显存以操作屏幕图像,最终实现了简单的条纹状图像显示。
摘要由CSDN通过智能技术生成

有了C语言这一利器后,不多多拿来用,那就太对不起前面的一系列努力了。那么怎么表现C语言的强大功能呢,如果还只是一味的在界面上输出几行字符,那太没意思,考虑到,我们的目标是做出像windows那样具备舒心的图像用户界面那样的系统,所以在这一节,我们由字符模式切换入画面模式,初步体验下,那些绚丽多彩的图像界面是如何发展而成的。

要想由字符模式转入图形模式,我们需要操作硬件,特别是向显卡发送命令,让其进入图形显示模式,就如同前面我们所做的,要操作硬件,一般需要使用BIOS调用,以下几行就是打开VGA显卡色彩功能的代码:

mov al, 0x13h

mov ah, 0x00

int 0x10

其中al 的值决定了要设置显卡的色彩模式,下面是一些常用的模式设置:

0x03, 16色字符模式

0x12, VGA图形模式, 640 * 480 * 4位彩色模式,独特的4面存储模式

0x13, VGA图形模式, 320 * 200 * 8位彩色模式,调色板模式

0x6a, 扩展VGA图形模式, 800 * 600 * 4彩色模式

我们采用的是0x13模式,其中3202008 中,最后的数值8表示的是色彩值得位数,也就是我们可以用8位数值表示色彩,总共可以显示256种色彩。

系统显存的地址是0x000a0000,当我们执行上面几句代码后,望显存地址写入数据,那么屏幕就会出现相应的变化了。

我们先看看内核的汇编代码部分(kernel.asm):

%include "pm.inc"

org 0x9000

jmp LABEL_BEGIN

[SECTION .gdt]

; 段基址 段界限 属性

LABEL_GDT: Descriptor 0, 0, 0

LABEL_DESC_CODE32: Descriptor 0, SegCode32Len - 1, DA_C + DA_32

LABEL_DESC_VIDEO: Descriptor 0B8000h, 0ffffh, DA_DRW

LABEL_DESC_VRAM: Descriptor 0, 0ffffffffh, DA_DRW

LABEL_DESC_STACK: Descriptor 0, TopOfStack, DA_DRWA+DA_32

GdtLen equ $ - LABEL_GDT

GdtPtr dw GdtLen - 1

dd 0

SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值