@@ 31,7 31,7 @@ op_add(u16int in)
u16int dr = (in >> 9) & 0x7;
u16int sr1 = (in >> 6) & 0x7;
if(in & 1 << 5) { // immediate
- u16int imm5 = signextend(in & 0x17, 5);
+ u16int imm5 = signextend(in & 0x1f, 5);
reg[dr] = reg[sr1] + imm5;
} else {
u16int sr2 = in & 0x7;
@@ 46,7 46,7 @@ op_and(u16int in)
u16int dr = (in >> 9) & 0x7;
u16int sr1 = (in >> 6) & 0x7;
if(in & 1 << 5) { // immediate
- u16int imm5 = signextend(in & 0x17, 5);
+ u16int imm5 = signextend(in & 0x1f, 5);
reg[dr] = reg[sr1] & imm5;
} else {
u16int sr2 = in & 0x7;
@@ 303,9 303,10 @@ main(int argc, char* argv[])
}
if(debug){
print("r: ");
- for(int i = 0; i<R_COUNT; i++){
+ for(int i = 0; i<R_COUNT - 1; i++){
print(" %04x", reg[i]);
}
+ print(" n: %d z: %d p: %d", reg[R_COUNT-1] & FL_NEG, reg[R_COUNT-1] & FL_ZRO, reg[R_COUNT-1] & FL_POS);
print("\nmem : ");
for(int i = 0x3000; i < 0x300a; i++)
print("%04x ", memory[i]);