小编Dro*_*rix的帖子

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

好的,所以我尝试在使用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,&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; …
Run Code Online (Sandbox Code Playgroud)

c dosbox turbo-c double-buffering x86-16

5
推荐指数
1
解决办法
665
查看次数

标签 统计

c ×1

dosbox ×1

double-buffering ×1

turbo-c ×1

x86-16 ×1