/***************************************************************************
*	NAME:  SIZE.C
**	COPYRIGHT:
**	"Copyright (c) 1992, by FORTE
**
**       "This software is furnished under a license and may be used,
**       copied, or disclosed only in accordance with the terms of such
**       license and with the inclusion of the above copyright notice.
**       This software or any other copies thereof may not be provided or
**       otherwise made available to any other person. No title to and
**       ownership of the software is hereby transfered."
****************************************************************************
*  CREATION DATE: 11/18/92
*--------------------------------------------------------------------------*
*     VERSION	DATE	   NAME		DESCRIPTION
*>	1.0	11/18/92		Original
***************************************************************************/
#include <dos.h>
#include <conio.h>

#include "forte.h"
#include "gf1proto.h"
#include "gf1hware.h"
#include "gf1os.h"

extern ULTRA_DATA _gf1_data;

/***************************************************************
 * This function returns the # of K found on the card
 ***************************************************************/
int
UltraSizeDram(void)
{
unsigned long i;
unsigned long loc;
unsigned char val;
unsigned char save0;
unsigned char save1;

unsigned int base_port;

	base_port = _gf1_data.base_port;

	/* save first location ... */
	save0 = UltraPeekData(base_port,0L);

	/* See if there is first block there.... */
	UltraPokeData(base_port,0L,0xaa);
	val = UltraPeekData(base_port,0L);
	if (val != 0xaa)
		return(0);

	/* Now zero it out so that I can check for mirroring .. */
	UltraPokeData(base_port,0L,0x00);

	for (i=1L;i<1024L;i++)
		{
		/* check for mirroring ... */
		val = UltraPeekData(base_port,0L);
		if (val != 0)
			break;
		loc = i<<10;

		/* save location so its a non-destructive sizing */
		save1 = UltraPeekData(base_port,loc);

		UltraPokeData(base_port,loc,0xaa);
		val = UltraPeekData(base_port,loc);
		if (val != 0xaa)
			break;
		UltraPokeData(base_port,loc,save1);
		}

/* Now restore location zero ... */
UltraPokeData(base_port,0L,save0);

return((int)i);
}

