/*
 * debug.c
 *
 *  Scott Adkins
 *    sadkins@bigbird.cs.ohiou.edu
 *    sadkins@oucsace.cs.ohiou.edu
 *
 *  Purpose: Provides debugging capability to Redcode programming.
 *
 */

#include "corewar.h"
#include "externs.h"


int Debug(Core, programs, process, size)
CORE *Core;
PROGRAM *programs;
int process, size;
{
	int Tasks[MAX_PROG];
	TASKS *CLL[MAX_PROG];
	register int i;
	PROGRAM *p;

	InitCore(Core,size);

	p = programs;
	if (!LoadProgram(Core,p,size,LOAD)) return (0);

	if (Stats) {
		printf("Loading program %s into Core!\n",p->filename);
		PrintCore(Core,p->address,p->length,size);
	}

	if (!InitProgram(p,&CLL[0],&Tasks[0]))
		return (0);


	for (i=0; (i < Cycles) && (Tasks[0] > 0); i++) {
		if (i) {
			printf("Press <return> to continue.\n");
			getchar();
		}

		EMI88(CLL,Core,process,size,Tasks,1,i);
		printf("Cycles = %d\t",i+1);
		printf("Tasks = %d\t",Tasks[0]);
		printf("PC = %d:\n",CLL[0]->PC);
		PrintCore(Core,CLL[0]->PC,1,size);
		PrintCore(Core,p->address-2,p->length+4,size);
	}

	printf("Total Cycles = %d\n",i);

	return (1);
}
