【问题标题】:Why won't anything show up when I use VGA mode with the Digital Mars Compiler?为什么当我在 Digital Mars 编译器中使用 VGA 模式时没有任何显示?
【发布时间】:2021-12-02 15:28:15
【问题描述】:

我正在尝试为 DOSBox 制作自己的游戏,但无法写入 VGA 内存。我正在使用 Digital Mars Compiler,并且我正在使用编译标志 -mmd。

这是我的代码:

/*headers*/
#define VGA256 0x13
#define TEXT_MODE 0x03
#define SCREEN_RAM_START 0xA0000000L
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 200
#define SCREEN_SIZE 320 * 200

void set_mode(int mode)
{
    asm mov AH, 0;
    asm mov AL, mode;
    asm int 10h;
}

void set_pixel(int x, int y, char pixel_color)
{
    unsigned char *ptr = (unsigned char *)SCREEN_RAM_START;
    ptr[(y * SCREEN_HEIGHT) + x] = pixel_color;
}

int main()
{
    set_mode(VGA256);
    set_pixel(100, 150, 1);
    while (!kbhit()) {}
    set_mode(TEXT_MODE);
}

【问题讨论】:

标签: c dos vga


【解决方案1】:

我为那些在为 DOSBOX 制作游戏时苦苦挣扎的 VGA 模式和 DMC 提出了这个问题。

函数set_pixel 需要更改。 DM 编译器在编译 16 位架构时使用远指针和近指针。另外,应该是y*SCREEN_WIDTH

新版本:

void set_pixel(int x, int y, char pixel_color)
{
    unsigned char __far *ptr = (unsigned char __far *)SCREEN_RAM_START;
    ptr[(y * SCREEN_WIDTH) + x] = pixel_color;
}

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 2020-05-11
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2010-09-13
    • 2013-03-03
    相关资源
    最近更新 更多