#ifndef __CPUTEST_H__ #define __CPUTEST_H__ 1 #ifdef __STDC__ #include <stdlib.h> #else #define void int #endif #define MEMSIZE 1024 /* Pull Order | v CC Increasing A memory B | DP v X Hi X Lo Y Hi Y Lo U/S Hi U/S Lo PC Hi PC Lo ^ | Push Order */ struct registers { char rg_cc; char rg_a; char rg_b; char rg_dp; unsigned short rg_x; unsigned short rg_y; unsigned short rg_u; }; #define REGSIZE (sizeof (struct registers)) unsigned short Host(unsigned short Micro); unsigned short Micro(unsigned short Host); //extern char memory[MEMSIZE]; extern struct registers *initregs; #define CTLMEMSIZE 100 /* 2 * 50 */ struct registers *initregs; unsigned char memory[MEMSIZE+CTLMEMSIZE+REGSIZE+4]; /* initregs = (struct registers *)&memory[MEMSIZE+CTLMEMSIZE]; */ extern char *currtest; #define CODESTRT 0 #define runinst(funcname, inst) runcode(#funcname, inst, sizeof inst) /* Small code segment to save registers and call test. */ extern unsigned char *ctlmemory /* [100] */; /* WARNING! Host byte-sex sensitive */ extern unsigned short *save_s; extern unsigned short *dpLoc; #define CC_C 0 #define CC_V 1 #define CC_Z 2 #define CC_N 3 #define CC_I 4 #define CC_H 5 #define CC_F 6 #define CC_E 7 #define LDA 0x86 #define LDB 0xC6 #define RTS 0x39 #define setA(value) initregs->rg_a = value #define assertA(exp) assertByte(exp, initregs->rg_a & 0xFF, "A") #define setB(value) initregs->rg_b = value #define assertB(exp) assertByte(exp, initregs->rg_b & 0xFF, "B") #define setX(value) initregs->rg_x = Micro(value) #define assertX(exp) assertWord(exp, Host(initregs->rg_x), "X") #define setY(value) initregs->rg_y = Micro(value) #define assertY(exp) assertWord(exp, Host(initregs->rg_y), "Y") /** * Set the condition codes but don't turn off interrupts. */ #define setCC(value) initregs->rg_cc = (value & 0xAF) #define assertDP(exp) assertByte(exp, initregs->rg_dp & 0xFF, "DP") #endif