V0.0.2 Console Module Complete. 在这个版本中,实现了一个在保护模式下,VGA为Text Mode时,向屏幕输出字符的模块,位于/kernel/driver/console。内部有详细的注释。同时顺带着写了stdint.h和一些inline汇编。由于操作系统开发时是没有C语言标准库的,所以可以考虑该操作系统将会实现一个基本的标准库,是标准库的子集,位于/kernel/basecrt目录中。
目前版本可以从这里下载到源代码。目前版本截图如下:
可以看到,系统经由Grub或者其他multiboot引导扇区引导后,清屏,并向屏幕输出绿色的Hello world字符串。
下面记录一下,如何在保护模式中,向屏幕输出字符。
输出字符到屏幕
在保护模式中、Text Mode下,输出字符到屏幕是非常简单的事情。
在彩色模式下,屏幕中的每一个字符,与内存(实际上这段内存地址映射的应该是显存)中的0xB8000后的每一个16字节相对应。例如,屏幕最左上角的字符,和(shor*(0xB8000))[0]这个short对应。其中,这个short的高8位是颜色属性,低8位是ASCII码字符。颜色属性同dos api里的颜色属性是一致的,这里就不废话了。经由GRUB引导后,系统会进入80*25的字符模式中。
所以,向屏幕中输出字符,可以用下列示例代码表示。
void PutChar(char ch, int x, int y, char color){
volatile uint16_t* where;
where=(uint16_t*)(0xB8000)+(y*80+x);
*where=ch| (((uint16_t)color)<<8);
}
在显示器为单色的情况下,显存地址为0xB0000,同时屏幕中每一个字符,与该地址后每一个8位内存相对应,并没有颜色属性。代码示例如下
void PutChar(char ch, int x, int y){
*(char*)(0xB0000)+(y*80+x) = ch;
}
判断显示器是否为彩色
在BIOS的数据段中,有显示器属性的字段,从中可以查询显示器的颜色。更多资料请参考 (http://wiki.osdev.org/Detecting_Colour_and_Monochrome_Monitors)
和 (http://wiki.osdev.org/Memory_Map_(x86)#BIOS_Data_Area_.28BDA.29)
。示例代码如下
//! False is colorful
boolean DRIVER_CONSOLE_IsVideoMono(){
char c = (*(volatile uint16_t*)0x410)&0x30;
return (c==0x30);
}
移动光标
同样,在BOIS数据段中,也保存了VGA操作所需要的输出port,通常是0x3D4。详细资料参考自(http://wiki.osdev.org/Text_Mode_Cursor)
示例代码如下。不过值得注意的是,下面的代码为通常情况下的代码,有可能输出端口不是0x3D4,也有可能当前模式不是80*25。
/* void update_cursor(int row, int col)
* by Dark Fiber
*/
void update_cursor(int row, int col)
{
unsigned short position=(row*80) + col;
// cursor LOW port to vga INDEX register
outb(0x3D4, 0x0F);
outb(0x3D5, (unsigned char)(position&0xFF));
// cursor HIGH port to vga INDEX register
outb(0x3D4, 0x0E);
outb(0x3D5, (unsigned char )((position>>8)&0xFF));
}
Future Work
下一步的目标,在键盘可以输出简单的字符串后,书写键盘的输入驱动,将最基本的输入输出搞定。
分享到:
相关推荐
- 设置保护模式(`protected-mode no`)以避免安全问题。 2. **配置Slave**: - 在`redis.conf`中设置`slaveof <master-ip> <master-port>`以指定Master节点的信息。 - 调整`repl-diskless-sync`参数以控制同步时...
- 文件描述符是操作系统为打开的文件分配的一个非负整数,用于标识文件。在Linux中,文件描述符通常是从0开始递增的。 **2.2 文件描述符操作** - **open/close/creat**: `open` 用于打开或创建文件并返回文件描述...
操作系统的身份登录 2. 连接命令(conn) 说明:用于连接到oracle数据库,也可实现用户的切换 用法:conn 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开...
### 《LINUX与UNIX SHELL编程指南》读书笔记知识点解析 #### 一、文件的安全与权限 在《LINUX与UNIX SHELL编程指南》这本书中,作者详细介绍了Linux及Unix系统中关于文件的安全性和权限管理的核心概念。这部分内容...
- 在使用上述方法前,请确保您的笔记本电脑操作系统支持承载网络功能。一般来说,Windows 7及以上版本均具备此项特性。 - 为了保证网络安全,建议定期更改WiFi密码,并选择合适的加密方式(如WPA2)来保护数据传输...
- **哨兵配置**:在使用哨兵机制时,需要注意保护模式(protected-mode)的设置,尤其是在哨兵进行主从切换时,新的IP地址需要正确地写入`sentinel.conf`配置文件中。 #### 4. Redis 在项目中的应用 - **Spring ...
- X86处理器的三种主要操作模式包括实模式(Real Mode)、保护模式(Protected Mode)和虚拟8086模式(Virtual 8086 Mode)。 - 在X86的实地址模式中,内存寻址的大小为16位,地址范围是从0到0FFFFH,即64KB的内存...
mkdir dir1/dir2 在dir1下建dir2 mkdir dir13 dir4 dir5 连建多个 mkdir ~/games 用户主目录下建(默认在当前目录下创建) mkdir -p dir6/dir7/dir8 强制创建dir8;若没有前面的目录,会自动创建dir6和dir7。 ...
IBM AIX 是一款在IBM Power Systems 上运行的Unix 操作系统,以其高性能和稳定性著称,广泛应用于企业级服务器环境中。本篇笔记将围绕AIX 的安装、配置以及常见管理命令进行详细介绍。 ### 一、用户权限管理 #### ...
- **安全性考量**:虽然WPA2加密可以提高安全性,但在公共场合使用时仍然要注意保护个人信息安全,比如不进行敏感操作、定期更换Wi-Fi密码等。 通过以上详细的介绍,我们可以看到,在Windows 7系统中虚拟出无线...
在Android平台上,手机防盗系统是保护用户设备安全的重要机制,涉及到多个关键知识点。本文将针对提供的信息,详细解析SharedPreferences、AlertDialog以及TelephonyManager在手机防盗系统中的应用。 1. **...
本文将详细介绍如何利用Windows 7操作系统的一项隐藏功能——“虚拟Wifi”,将笔记本电脑转变为一个无线路由器。这项功能不仅方便实用,还能帮助解决多种场景下的网络连接需求。 #### 虚拟Wifi功能详解 **虚拟Wifi...
- 禁用保护模式:`protected-mode no` - 设置端口:`port 7000` - 后台运行:`daemonize yes` - 设置 PID 文件路径:`pidfile /var/run/redis_7000.pid` - 数据文件存放路径:`dir /usr/local/redis-cluster/7000` -...