#include <stdio.h> #include "cputest.h" unsigned short Host(unsigned short Micro) { return ((Micro>>8)&255) | ((Micro&255)<<8); } unsigned short Micro(unsigned short Host) { return ((Host>>8)&255) | ((Host&255)<<8); } void setRegs(char a, char b, unsigned x, unsigned y, unsigned u) { initregs->rg_a = a; initregs->rg_b = b; initregs->rg_x = Micro(x); initregs->rg_y = Micro(y); initregs->rg_u = Micro(u); } void assertWord(unsigned short exp, unsigned short act, char *reg) { if (exp != act) { fprintf(stderr, "%s:%s expected %04x - actual %04x\n", currtest, reg, exp, act); } } void assertByte(unsigned char exp, unsigned char act, char *reg) { if (exp != act) { fprintf(stderr, "%s:%s expected %02x - actual %02x\n", currtest, reg, exp, act); } } void setDP(void) { initregs->rg_dp = (Host(*dpLoc) >> 8); } char getDP(void) { return (Host(*dpLoc)) >> 8; } void setCCflag(int exp, int bit) { register int mask = 1 << bit; if (exp == 0) { initregs->rg_cc &= ~mask; } else { initregs->rg_cc |= mask; } } void assertCC(int exp, int bit) { static char names[] = "CVZNIHFE"; if ((initregs->rg_cc & (1 << bit)) != (exp << bit)) fprintf(stderr, "%s:CC-%c expected %d\n", currtest, names[bit], exp); } void assertRegs(char a, char b, unsigned x, unsigned y, unsigned u) { assertByte(a, initregs->rg_a, "A"); assertByte(b, initregs->rg_b, "B"); assertWord(x, Host(initregs->rg_x), "X"); assertWord(y, Host(initregs->rg_y), "Y"); assertWord(u, Host(initregs->rg_u), "U"); } void printRegs(void) { fprintf(stderr, "CC=%02x A=%02x B=%02x DP=%02x\n", initregs->rg_cc&255, initregs->rg_a&255, initregs->rg_b&255, initregs->rg_dp&255); fprintf(stderr, "X=%04x Y=%04x U=%04x\n", Host(initregs->rg_x), Host(initregs->rg_y), Host(initregs->rg_u)); }