
#include <proto/exec.h>
#include <proto/dos.h>
#include <dos/notify.h>
#include <libraries/delfina.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

struct Library *DelfinaBase;

unsigned far short buf[16384];

int mem;

void bench(char *text, int flags,int bytes) {
	unsigned int start[2],stop[2],micros;
	int x;

	printf("%s Delfina->Amiga: ",text);
	fflush(stdout);

	timer(start);
	for (x=0;x<100;x++) {
		Delf_CopyMem((int)buf,mem,bytes,flags|DCPF_TO_DELFINA|DCPF_XDATA);
	}
	timer(stop);

	stop[0]-=start[0];
	stop[1]+=stop[0]*1000000;
	micros=stop[1]-start[1];
	
	printf("%d bytes/sec\n",(int)((bytes*100.0/micros)*1000000.0));

	printf("%s Amiga->Delfina: ",text);
	fflush(stdout);

	timer(start);
	for (x=0;x<100;x++) {
		Delf_CopyMem(mem,(int)buf,bytes,flags|DCPF_TO_AMY|DCPF_XDATA);
	}
	timer(stop);

	stop[0]-=start[0];
	stop[1]+=stop[0]*1000000;
	micros=stop[1]-start[1];
	
	printf("%d bytes/sec\n",(int)((bytes*100.0/micros)*1000000.0));
}


main()
{
	int x;

	DelfinaBase=OpenLibrary("delfina.library",0);
	if (!DelfinaBase) {
		printf("Can't open delfina.library");
		return;
	}

	mem=Delf_AllocMem(8192,DMEMF_XDATA|DMEMF_ALIGN_8K|DMEMF_CLEAR);
	if (!mem) {
		CloseLibrary(DelfinaBase);
		printf("Need 8k of X memory in delfina!\n");
		return(0);
	}

	for (x=0;x<8192;x++) buf[x]=x<<3;

	bench("32bit", DCPF_32BIT, 32768);
	bench("24bit", DCPF_24BIT, 24576);
	bench("16bit", DCPF_16BIT, 16384);
	bench(" 8bit", DCPF_8BIT,  8192);
	
	Delf_FreeMem(mem,DMEMF_XDATA);

	CloseLibrary(DelfinaBase);
}
	