【发布时间】:2023-03-19 23:44:01
【问题描述】:
我正在编写一个 DOS 游戏框架,以更好地学习 C 语言,并且对在旧硬件上编程(尤其是在我长大的系统上)产生普遍兴趣。
我正在尝试实现一个双缓冲系统,但我无法分配一个指向 320*200 数组的远指针。
起初我尝试使用 malloc,但发现它只能分配 64kb 以下。我读到您需要使用farmalloc(malloc返回NULL)并且它分配正确。然而,当 _fmemset 或 _fmemcpy 运行时....整个系统冻结。
backBuffer = (unsigned char far*) farmalloc(64000);
何时需要交换我使用的缓冲区
_fmemcpy(VGA, backBuffer, 64000);
程序正在使用小内存模型。
【问题讨论】:
-
什么是
VGA,它的值,backbuffer和_fmemcpy()? -
VGA 是一个 unsigned char far 指针,指向地址 0xA000000L,即 VGA 内存的地址。 Backbuffer 也是一个 unsigned char far 指针,是用上面的函数分配的。
-
我不明白 0xA000000L。它必须是:segment=0xA000 & offset=0(对应于物理地址=segment * 0x10 + offset = 0xA0000 = 640K)。它真的有segment=0xA000 & offset=0吗?或者是 segment=0xA00 & offset=0 还是别的什么?制作这样一个指针的正确方法是通过
MK_FP(0xA000, 0)。 -
@loncannon,也许是你的评论打错了,但你漏掉了一个零,应该是 0xA0000000L。