stephenj@deblil.Eng.Sun.COM (Stephen Johnson) (02/19/91)
/* The following program should be compiled with:
tcc -mh <prog>.c
This program allocates a very large array of memory
and addresses using the "far" key word. Unfortunately, the
address calculations rap around at 64k. Does anyone know why
this happens? Is this a bug in the Turbo C++ libraries?
I am using Trubo C++ V1.0 on a Dell 310 (386 box)
with 640k of DOS memory and 4 Meg of real memory.
thanks, Stephen Johnson
*/
#include <stdio.h>
#include <alloc.h>
#define ULONG unsigned long
ULONG far *zbuffer = NULL;
void z_buffer_init();
void z_buffer_test();
main()
{
printf("Available memory: %lu\n", farcoreleft());
printf("We will allocate: %lu\n", (ULONG)sizeof(ULONG) *
(long)320 * (long)200);
zbuffer = (ULONG far *)farmalloc((ULONG)sizeof(ULONG) *
(ULONG)320 * (ULONG)200);
z_buffer_init();
z_buffer_test();
}
void
z_buffer_init()
{
ULONG far *zbuf;
long nwords = (long)320 * (long)200;
zbuf = zbuffer;
while (--nwords) {
*zbuf = (ULONG)(((ULONG)1 << (ULONG)24) - (ULONG)512);
zbuf++;
}
}
void
z_buffer_test()
{
long nwords = (long)320 * (long)200;
ULONG far *zbuf;
zbuf = zbuffer;
while (--nwords) {
if (*zbuf > (ULONG)10) {
*zbuf = (ULONG)10;
}
else {
printf("nwords: %lu\n", nwords);
printf("value: %lx\n", *zbuf);
printf("start: %lx\n", (ULONG)zbuffer);
printf("addr: failed at %lx\n", (ULONG)zbuf);
return;
}
zbuf++;
}
}