Dro*_*rix 5 c dosbox turbo-c double-buffering x86-16
好的,所以我尝试在使用IDE Turbo C ++ 3.0的模拟环境(DosBox)中应用双重缓冲技术,我正在运行Windows 7 64bit(不确定是否重要),而且我不知道如何正确执行缓冲例程在这种环境下。
我遇到的主要问题是我似乎无法执行以下赋值语句:
double_buffer = (byte_t far*)farmalloc((unsigned long)320*200);
(请注意320和200是屏幕尺寸)...我只是得到NULL分配。
我尝试将DosBox的默认RAM使用率更改为32,而不是16,但这没有任何作用。我不确定这是模拟器还是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,®s,®s);
}
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;
}
Run Code Online (Sandbox Code Playgroud)
您的问题与在 Turbo-C IDE 调试器中运行应用程序有关。如果您编译它,然后退出 IDE 并直接从 DosBox 命令行运行它,而不需要 IDE,它应该按预期工作。
通过 IDE 运行时,默认调试选项是仅为程序堆分配额外的 64KiB 内存。这不足以处理您对 64000 字节 (320*200) 的请求。在 Turbo-C IDE 下拉菜单中options,单击debugger。您应该看到如下所示的屏幕:
默认值为Program Heap Size64。将其更改为最大 640,然后单击Ok。重新运行您的程序,它应该在显示屏上的随机位置显示随机颜色的像素。