#include "cputest.h"

/* Allocate enough memory to run the instructions in that allows
 * for jumps back and forth. Stack pointer is set at top.
 * initregs must follow immediately.
 */

char *currtest;


#define CODESTRT 0

/* Small code segment to save registers and call test.
 */
extern unsigned char *ctlmemory; /* WARNING! Host byte-sex sensitive */
/* ctlmemory = &memory[MEMSIZE]; */

/* Store the initial value of the stack pointer. */
unsigned short *save_s;
unsigned short *dpLoc;

extern void systemf1(const char *command, const char *param);
/**
 * Copy the instructions to test.
 * Instructions must begin at CODESTRT
 * The instructions must end with an RTS
 */
void copydata(int start,
              char *insv,
              int insc);

void writebyte(int loc,
               char value);

unsigned setMem(int addr,
                char value);

void writeword(int loc,
               unsigned value);

/*
 * Start location is the argument on the stack.
 */
void jsrtest(int startloc);

void runcode(char *ctest,
             char *insv,
             int insc);


void runtest(char *ctest);

int setupCtl(void);

void printMem(int start, int  size);

void printCtl(int ctlsize);

/**
 * Read a value from the direct page.
 */
int readDPloc(int offset);

/**
 * Write a value into the direct page.
 */
void writeDPloc(int offset,
                unsigned char value);