[net.micro.amiga] Alegra Review

perry@picuxa.UUCP (Perry S. Kivolowitz) (07/29/86)

THIS IS A SECOND POSTING - I was told that the message has been truncated
by some sites. So, there IS a line eater after all!
-------------------------------------------------------------------------
I received the Alegra 512K board from Access Associates. What follows is
an unsolicited unpaid review.

(1) Physical Characteristics - Packaging

	The Alegra  board  is  contained  in an attractive well designed
all metal enclosure. Visible surfaces are painted in a quiet brown paint
with a pebbled matte finish to obscure finger prints.

	The enclosure, again, is  quite intelligently designed. It comes
apart with a single screw yet is extremely sturdy.

(2) Physical Characteristics - P.C. Board

	The Alegra p.c.  board shows competent design and good thinking.
No wires or jumpers (booboo's) were  found on the board. Every component
has a by-pass capacitor for noise reduction.

	The p.c. board is  a  solid, good  quality, four layer board. It
contains  a  socketing  configuration  which  will accept either 256K or
1Mbit ram parts.

	The ram chips themselves are manufactured by NEC who, my sources
tell me, enjoy a superlative quality assurance record.

	Solder leads were trimmed  (all  except  one  row anyway). While
this does not really affect board function  it  is usually indicative of
competent manufacturing.

	The Alegra does not pass the bus.

	Access Associates has told me that the 512K board uses less than
one amp. They say  that the  2Mbyte board (replace 256K parts with 1Mbit
parts) uses less current than the 512K board because 1Mbit parts will be
CMOS. If I have this right,  timing  on the board will be radically dif-
ferent for the 2MByte board.

(3) Documentation

	The board came with a  single  sheet of installation procedures.
This included physical  installation as well as startup-sequence changes
needed by 1.1 of the operating system.

	The instructions were succinct and completely adequate.

(4) Software

	The Alegra  comes  with  AddMem  for 1.1 users. Also, a program
called Ident  which  pokes  the  configuration  space and activates the
board.

	No software is needed  by 1.2 as the Alegra is fully configures
itself during system start up.

(5) Performance

	Running my memory speed   assesment  program (posted earlier) I
got the following statistics under 1.2 with a 68010 processor. No other
tasks were running, the CLI window occupied the entire screen.

			FAST RAM	CHIP RAM	DIFFERENCE

Code In FAST RAM:	28800242	28900280	  100038
Code In CHIP RAM:	29266934	29250309	  -16625

Thus, I assume that no wait states are being incurred.

(6) Summary And Suggestions

	If you  are  looking  for  a  closed  end RAM expansion board the
Alegra is a good value embodying solid design. However if you contemplate
future additional expansion the Alegra will not (then) be useful.

	Performance is good on the 512K board. I don't know if the 2MByte
board will be  the same (better or worse, I don't know, however I suspect
that performance will not be as good).

	All in all,  I was  impressed  by  the solidity of the design and
construction and again, would suggest the  board for new Amiga owners who
do not expect to require any additional hardware expansion capability.

Yours,
		Perry S. Kivolowitz

-------------------------------------------------------------------------
	In case you missed the ram speed program - here it is again
-------------------------------------------------------------------------


#include <exec/types.h>
#include <intuition/intuition.h>
#include <exec/memory.h>

/*
**	ram-speed
**
**	Times memory performance. To be compiled under MANX.
**
**	Author:	Perry S. Kivolowitz
**
*/

extern  char			*AllocMem();
extern  struct IntuitionBase	*OpenLibrary();

struct  IntuitionBase		*IntuitionBase;

static  char *Author = "Perry S. Kivolowitz";
char    *source , *destination;
long    EndingSeconds , EndingMicroSeconds;
long    StartingSeconds , StartingMicroSeconds;

#define	BSIZE			(1L << 17)

/*
**	FreeAll
**
**	Return any allocated memory back to the system for reuse.
**
*/

FreeAll()
{
	if (source) FreeMem(source , BSIZE);
	if (destination) FreeMem(destination , BSIZE);
}

/*
**	AllocAll
**
**	Given a type of memory specified by ``bits'' allocate BSIZE
**	bytes for a source area and a destination area.
**
*/

AllocAll(bits)
long bits;
{
	destination = AllocMem(BSIZE , bits);
	source      = AllocMem(BSIZE , bits);
	if (!source || !destination) {
		printf("Allocation of Memory Failed\n");
		Leave();
	}
}

/*
**	Leave
**
**	Clean up routine. Release memory and close Intuition.
**
*/

Leave()
{
	FreeAll();
	CloseLibrary(IntuitionBase);
	exit(0);
}

OpenIntuition()
{
	IntuitionBase = OpenLibrary("intuition.library" , 0L);
	if (!IntuitionBase) {
		printf("Could Not Open Intuition\n");
		exit(0);
	}
}

long PrintTime()
{
	long temp1 , temp2;

	temp2 = 1000000 * EndingSeconds + EndingMicroSeconds;
	temp1 = 1000000 * StartingSeconds + StartingMicroSeconds;
	temp2 = temp2 - temp1;
	printf("Elapsed Time (microseconds): %ld\n" , temp2);
	return(temp2);
}

long TimeRam(bits)
long bits;
{
	AllocAll(bits);
	CurrentTime(&StartingSeconds , &StartingMicroSeconds);
	CopyRam();
	CurrentTime(&EndingSeconds , &EndingMicroSeconds);
	FreeAll();
	return(PrintTime());
}

main()
{
	int i;
	long fast , chip;

	OpenIntuition();
	printf("Timing CHIP Memory\n");
	chip = TimeRam(MEMF_CHIP);
	printf("Timing FAST Memory\n");
	fast = TimeRam(MEMF_FAST);
	printf("Difference (microseconds): %ld\n" , fast - chip);
	Leave();
}

CopyRam()
{
	register long *src , *dst;
	register short i , j;

	for (j = 0; j < 256; j++) {
		src = (long *) source;
		dst = (long *) destination;
		i = BSIZE / 32;
		while (--i) {
#asm
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
#endasm
		}
	}
}

perry@well.UUCP (Perry S. Kivolowitz) (07/31/86)

This is a second reposting - someone keeps truncating the article when
posted from the east coast.

				Perry

------------------------------------------------------------------------
I received the Alegra 512K board from Access Associates. What follows is
an unsolicited unpaid review.

(1) Physical Characteristics - Packaging

	The Alegra  board  is  contained  in an attractive well designed
all metal enclosure. Visible surfaces are painted in a quiet brown paint
with a pebbled matte finish to obscure finger prints.

	The enclosure, again, is  quite intelligently designed. It comes
apart with a single screw yet is extremely sturdy.

(2) Physical Characteristics - P.C. Board

	The Alegra p.c.  board shows competent design and good thinking.
No wires or jumpers (booboo's) were  found on the board. Every component
has a by-pass capacitor for noise reduction.

	The p.c. board is  a  solid, good  quality, four layer board. It
contains  a  socketing  configuration  which  will accept either 256K or
1Mbit ram parts.

	The ram chips themselves are manufactured by NEC who, my sources
tell me, enjoy a superlative quality assurance record.

	Solder leads were trimmed  (all  except  one  row anyway). While
this does not really affect board function  it  is usually indicative of
competent manufacturing.

	The Alegra does not pass the bus.

	Access Associates has told me that the 512K board uses less than
one amp. They say  that the  2Mbyte board (replace 256K parts with 1Mbit
parts) uses less current than the 512K board because 1Mbit parts will be
CMOS. 

(3) Documentation

	The board came with a  single  sheet of installation procedures.
This included physical  installation as well as startup-sequence changes
needed by 1.1 of the operating system.

	The instructions were succinct and completely adequate.

(4) Software

	The Alegra  comes  with  AddMem  for 1.1 users. Also, a program
called Ident  which  pokes  the  configuration  space and activates the
board.

	No software is needed  by 1.2 as the Alegra is fully configures
itself during system start up.

(5) Performance

	Running my memory speed   assesment  program (posted earlier) I
got the following statistics under 1.2 with a 68010 processor. No other
tasks were running, the CLI window occupied the entire screen.

			FAST RAM	CHIP RAM	DIFFERENCE

Code In FAST RAM:	28800242	28900280	  100038
Code In CHIP RAM:	29266934	29250309	  -16625

Thus, I assume that no wait states are being incurred.

(6) Summary And Suggestions

	If you  are  looking  for  a  closed  end RAM expansion board the
Alegra is a good value embodying solid design. However if you contemplate
future additional expansion the Alegra will not (then) be useful.

	Performance is good on the 512K board. I don't know if the 2MByte
board will be  the same.

	All in all,  I was  impressed  by  the solidity of the design and
construction and again, would suggest the  board for new Amiga owners who
do not expect to require any additional hardware expansion capability.

Yours,
		Perry S. Kivolowitz

-------------------------------------------------------------------------
	In case you missed the ram speed program - here it is again
-------------------------------------------------------------------------


#include <exec/types.h>
#include <intuition/intuition.h>
#include <exec/memory.h>

/*
**	ram-speed
**
**	Times memory performance. To be compiled under MANX.
**
**	Author:	Perry S. Kivolowitz
**
*/

extern  char			*AllocMem();
extern  struct IntuitionBase	*OpenLibrary();

struct  IntuitionBase		*IntuitionBase;

static  char *Author = "Perry S. Kivolowitz";
char    *source , *destination;
long    EndingSeconds , EndingMicroSeconds;
long    StartingSeconds , StartingMicroSeconds;

#define	BSIZE			(1L << 17)

/*
**	FreeAll
**
**	Return any allocated memory back to the system for reuse.
**
*/

FreeAll()
{
	if (source) FreeMem(source , BSIZE);
	if (destination) FreeMem(destination , BSIZE);
}

/*
**	AllocAll
**
**	Given a type of memory specified by ``bits'' allocate BSIZE
**	bytes for a source area and a destination area.
**
*/

AllocAll(bits)
long bits;
{
	destination = AllocMem(BSIZE , bits);
	source      = AllocMem(BSIZE , bits);
	if (!source || !destination) {
		printf("Allocation of Memory Failed\n");
		Leave();
	}
}

/*
**	Leave
**
**	Clean up routine. Release memory and close Intuition.
**
*/

Leave()
{
	FreeAll();
	CloseLibrary(IntuitionBase);
	exit(0);
}

OpenIntuition()
{
	IntuitionBase = OpenLibrary("intuition.library" , 0L);
	if (!IntuitionBase) {
		printf("Could Not Open Intuition\n");
		exit(0);
	}
}

long PrintTime()
{
	long temp1 , temp2;

	temp2 = 1000000 * EndingSeconds + EndingMicroSeconds;
	temp1 = 1000000 * StartingSeconds + StartingMicroSeconds;
	temp2 = temp2 - temp1;
	printf("Elapsed Time (microseconds): %ld\n" , temp2);
	return(temp2);
}

long TimeRam(bits)
long bits;
{
	AllocAll(bits);
	CurrentTime(&StartingSeconds , &StartingMicroSeconds);
	CopyRam();
	CurrentTime(&EndingSeconds , &EndingMicroSeconds);
	FreeAll();
	return(PrintTime());
}

main()
{
	int i;
	long fast , chip;

	OpenIntuition();
	printf("Timing CHIP Memory\n");
	chip = TimeRam(MEMF_CHIP);
	printf("Timing FAST Memory\n");
	fast = TimeRam(MEMF_FAST);
	printf("Difference (microseconds): %ld\n" , fast - chip);
	Leave();
}

CopyRam()
{
	register long *src , *dst;
	register short i , j;

	for (j = 0; j < 256; j++) {
		src = (long *) source;
		dst = (long *) destination;
		i = BSIZE / 32;
		while (--i) {
#asm
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
			move.l	(a2)+,(a3)+
#endasm
		}
	}
}