/* Bank 0 Dynamic DRAM Tester for 2.5 meg 1040ST, Version 1.0  */
/* written by Barry Orlando in Mark Williams C */
#include <osbind.h>
#include <stdio.h>
#define LOWMEM 0X13880L  /* Top of Program */
#define HIMEM 0X200000L  /* Top of Bank 0 */
#define U16 0X0001
#define U17 0X0002
#define U18 0X0004
#define U24 0X0008
#define U25 0X0010
#define U28 0X0020
#define U29 0X0040
#define U30 0X0080
#define U32 0X0100
#define U33 0X0200
#define U34 0X0400
#define U38 0X0800
#define U42 0X1000
#define U43 0X2000
#define U44 0X4000
#define U45 0X8000

main()
{
	int i, c, d;
	unsigned int a, b;
	long j;
	printf("\f\n     Dynamic RAM Test of Bank 0 on a 2.5 meg ST\n");
	printf("        version 1.0, written by Barry Orlando\n");
	printf("\nThis test takes about 10 minutes.\n");
	printf("Press any key to start testing....\n");
	d = 0;
	c = 0;
	gemdos(0x1);
	printf("\nTesting in progress......Please wait.\n");
	for (a = 0xFFFF, i = 0; i != 2; a = 0x0000, i++)
	   for (j = LOWMEM; j <= HIMEM; j += 2)
		{
		pokew(j, a);
		b = peekw(j);
		if (a != b)
		{
		c = 1;
		printf("\nBad data at address: $%x,\nCheck ", j);
		if (a)  b = ~b; 
		if (b & U16) printf("U16 ");
		if (b & U17) printf("U17 ");
		if (b & U18) printf("U18 ");
		if (b & U24) printf("U24 ");
		if (b & U25) printf("U25 ");
		if (b & U28) printf("U28 ");
		if (b & U29) printf("U29 ");
		if (b & U30) printf("U30 ");
		if (b & U32) printf("U32 ");
		if (b & U33) printf("U33 ");
		if (b & U34) printf("U34 ");
		if (b & U38) printf("U38 ");
		if (b & U42) printf("U42 ");
		if (b & U43) printf("U43 ");
		if (b & U44) printf("U44 ");
		if (b & U45) printf("U45");
		printf("\nPress any key to continue\n");
		gemdos(0x1);
		printf("\nResuming check.....\n");
		}
		if ((j % 0x9D9AL) == 0)
		printf("Over %d percent completed so far.\r", ++d);
		}
	if (c)
	printf("\rTest completed, defects reported above,\n");
	else
	printf("\rTest completed, all bits checked were found good.\n");
	printf(".....Press any key to exit.\n");
	gemdos(0x1);
	exit(0);
}
