gpt4 book ai didi

c - 如何正确分配内存缓冲区以使用 turbo c 在 dosbox 中应用双缓冲?

转载 作者:太空狗 更新时间:2023-10-29 15:08:10 24 4
gpt4 key购买 nike

好吧,我正在尝试在模拟环境 (DosBox) 中应用双缓冲技术,同时使用 IDE Turbo C++ 3.0 我正在运行 Windows 7 64 位(不确定这是否重要)并且我不知道如何正确执行此环境中的缓冲例程。

我遇到的主要问题是我似乎无法执行以下赋值语句:

double_buffer = (byte_t far*)farmalloc((unsigned long)320*200);

(注意320和200是屏幕尺寸)...我只是得到 NULL 的分配。

我尝试将 DosBox 的默认 RAM 使用量从 16 改为 32,但没有任何作用。我不确定是模拟器的问题还是 Turbo C 的代码有问题。(请注意它符合要求)。

这是我在网上找到的示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <alloc.h>

typedef unsigned char byte_t;

byte_t far* video_buffer = (byte_t far*)0xA0000000;

void vid_mode(byte_t mode){
union REGS regs;
regs.h.ah = 0;
regs.h.al = mode;
int86(0x10,&regs,&regs);
}

void blit(byte_t far* what){
_fmemcpy(video_buffer,what,320*200);
}

int main(){

int x,y;
byte_t far* double_buffer;

double_buffer = (byte_t far*)farmalloc((unsigned long)320*200);
if(double_buffer == NULL){
printf("sorry, not enough memory.\n");
return 1;
}
_fmemset(double_buffer,0,(unsigned long)320*200);

vid_mode(0x13);

while(!kbhit()){
x = rand()%320;
y = rand()%200;
double_buffer[y * 320 + x] = (byte_t)(rand()%256);
blit(double_buffer);
}

vid_mode(0x03);
farfree(double_buffer);
return 0;
}

最佳答案

您的问题与在 Turbo-C IDE 调试器中运行您的应用程序有关。如果您编译它然后退出 IDE 并在没有 IDE 的情况下直接从 DosBox 命令行运行它,它应该可以按预期工作。

当通过 IDE 运行时,默认的调试选项是仅为程序的堆分配额外的 64KiB 内存。这不足以处理您对 64000 字节 (320*200) 的请求。在 Turbo-C IDE 中下拉 options 菜单,单击 debugger。你应该得到一个看起来像这样的屏幕:

enter image description here

Program Heap Size 的默认值为 64。将其更改为最大值 640,然后单击 Ok。重新运行您的程序,它应该会在显示屏上的随机位置显示随机颜色的像素。

关于c - 如何正确分配内存缓冲区以使用 turbo c 在 dosbox 中应用双缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20984857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com