You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自制C语言内核调用VGA 13h图形模式时重启,设置像素无显示的问题求助

自制C语言内核调用VGA 13h图形模式时重启,设置像素无显示的问题求助

大家好,我正在从零开始用C语言开发自己的操作系统,这个问题已经卡了我2-3个月了,实在找不到解决办法,来求助各位大佬!

目前遇到两个核心问题:

  • 当我尝试直接设置像素时,屏幕上完全看不到任何像素显示;
  • 当我尝试调用VGA 13h模式(256色、320x200分辨率)时,机器直接重启,根本走不到后续的代码逻辑。

先给大家贴一下我的代码:

main.c(内核入口)

#include "screen.h"

void kernel_main(){

init_graphic_mode();

while (1) {

set_pixel(5, 5, (uint8_t)1);

}

}

screen.c

#include "screen.h"

void set_pixel(int y, int x, uint8_t color)
{
if (x >= 0 && x < VGA_WIDTH && y >= 0 && y < VGA_HEIGHT) {
uint8_t* screen = (uint8_t*)VGA_ADDR;
uint32_t offset = y * VGA_WIDTH + x;
screen[offset] = color;
}
}

void init_graphic_mode() {
__asm__ __volatile__ (
"mov $0x0013, %%ax\n\t"
"int $0x10\n\t"
: : : "eax"
);
}

screen.h

#ifndef MYSCREEN_H
#define MYSCREEN_H

#include <stdint.h>
#include <stdbool.h>

#define VGA_WIDTH 320
#define VGA_HEIGHT 200
#define SCREEN_SIZE (VGA_WIDTH * VGA_HEIGHT)
#define VGA_ADDR 0xA0000

void set_pixel(int y, int x, uint8_t color);
void init_graphic_mode();

#endif

之前的尝试和遇到的其他问题

一开始我遇到了“Booting from hard disk... GRUB”的错误,后来把一些文件移到isodir文件夹后解决了这个启动问题,但图形显示的问题依然存在:

  • 最开始我没有写init_graphic_mode函数,用的是标准的640x480 16色模式,当时设置像素就没反应,我反复修改set_pixel里的数据类型,试了各种组合都没用;
  • 后来我决定切换到13h模式,参考网上资料和ChatGPT写了init_graphic_mode函数,但现在一调用这个函数机器就直接重启,完全没法测试像素绘制的逻辑。

实在不知道哪里出问题了,希望各位大佬能帮我分析一下!

备注:内容来源于stack exchange,提问作者m0NNESY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:40:31