本文记录了在JOS(或在任意OS)上实现图形界面的方法与一些图形库的实现。
本文中支持的新特性:
- 支持基本图形显示
- 支持中英文显示(中英文点阵字库)
相关:VBE VESA MMIO 点阵字库
Github : https://github.com/He11oLiu/MOS
About VESA
Video Electronics Standards Association
(视频电子标准协会,简称“VESA”)是制定计算机和小型工作站视频设备标准的国际组织,1989年由NEC及其他8家显卡制造商赞助成立。创立VESA的原始目的是要制定分辨率为800x600
的SVGA视频显示标准。其后,VESA公告一系列的个人电脑视频周边功能的相关标准。
VBE 功能调用
参考博客CSDN博客
VBE
功能调用
- AH必须等于4FH,表明是VBE标准
- AL等于VBE功能号,0<= AL <= 0BH
- BL等于子功能号,也可以没有子功能
- 调用
INT 10H
- 返回值在AX中
AL=4FH
:支持该功能AL!=4FH
:不支持该功能AH=00H
:调用成功AH=01H
:调用失败AH=02H
:当前硬件配置不支持该功能AH=03H
:当前的显示模式不支持该功能
具体功能
此部分参考VESA编程——GUI离我们并不遥远,原作者博客已关闭。
功能0x00:返回控制器信息
输入:
AX = 4F00h 返回VBE控制器信息
ES:DI = 指向存放VbeInfoBlock结构体的缓冲区指针
输出:
AX = VBE返回状态
这个函数返回一个VbeInfoBlock结构体,该结构体定义如下:
// Vbe Info Block
typedef struct {
unsigned char vbe_signature;
unsigned short vbe_version;
unsigned long oem_string_ptr;
unsigned char capabilities;
unsigned long video_mode_ptr;
unsigned short total_memory;
unsigned short oem_software_rev;
unsigned long oem_vendor_name_ptr;
unsigned long oem_product_name_ptr;
unsigned long oem_product_rev_ptr;
unsigned char reserved[222];
unsigned char oem_data[256];
} VbeInfoBlock;
vbe_signature
是VBE标识,应该填充的是”VESA”vbe_vers