174 lines
3.5 KiB
C
174 lines
3.5 KiB
C
int testAndImmediate() {
|
|
A = 0xFF;
|
|
|
|
//all high
|
|
ram[0] = 0x29;
|
|
ram[1] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x29;
|
|
ram[1] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int testAndZeropage() {
|
|
A = 0xFF;
|
|
|
|
//all high
|
|
ram[0] = 0x25;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x25;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int testAndZeropageX() {
|
|
X = 0x01; Y = 0x00;
|
|
A = 0xFF;
|
|
|
|
//all high
|
|
ram[0] = 0x35;
|
|
ram[1] = 0x01;
|
|
ram[2] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x35;
|
|
ram[1] = 0x01;
|
|
ram[2] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int testAndAbsolute() {
|
|
A = 0xFF;
|
|
|
|
//all high
|
|
ram[0] = 0x2D;
|
|
ram[1] = 0x03;
|
|
ram[2] = 0x00;
|
|
ram[3] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x2D;
|
|
ram[1] = 0x03;
|
|
ram[2] = 0x00;
|
|
ram[3] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int testAndAbsoluteX() {
|
|
A = 0xFF;
|
|
X = 0x01; Y = 0x00;
|
|
|
|
//all high
|
|
ram[0] = 0x3D;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x00;
|
|
ram[3] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x3D;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x00;
|
|
ram[3] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int testAndAbsoluteY() {
|
|
A = 0xFF;
|
|
Y = 0x01; X = 0x00;
|
|
|
|
//all high
|
|
ram[0] = 0x39;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x00;
|
|
ram[3] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x39;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x00;
|
|
ram[3] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int testAndIndirectX() {
|
|
A = 0xFF;
|
|
X = 0x01; Y = 0x00;
|
|
|
|
//all high
|
|
ram[0] = 0x21;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x02;
|
|
ram[3] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x21;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x02;
|
|
ram[3] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int testAndIndirectY() {
|
|
A = 0xFF;
|
|
Y = 0x01; X = 0x00;
|
|
|
|
//all high
|
|
ram[0] = 0x31;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x03;
|
|
ram[3] = 0x00;
|
|
ram[4] = 0xFF;
|
|
instructions = 1; run();
|
|
if(!(A == 0xFF && SR&SR_NEG && !(SR&SR_ZERO) && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -1;
|
|
|
|
//all low
|
|
ram[0] = 0x31;
|
|
ram[1] = 0x02;
|
|
ram[2] = 0x03;
|
|
ram[3] = 0x00;
|
|
ram[4] = 0x00;
|
|
instructions = 1; run();
|
|
if(!(A == 0x00 && !(SR&SR_NEG) && SR&SR_ZERO && !(SR&SR_CARRY) && !(SR&SR_OVER))) return -2;
|
|
|
|
return 0;
|
|
} |