Archived
1
0

add flag update function

This commit is contained in:
Erick
2022-02-01 00:38:35 +01:00
parent ae4e0bb5ef
commit 388dadd8fa
+13 -5
View File
@@ -96,13 +96,21 @@ enum flags {
FL_N = 1 << 2, // Negative
};
/* sign extension for immediate add mode (imm5[0:4])
/* Sign extension function for immediate add mode (imm5[0:4])
transforms 5bit number to 8bit number preserving sign*/
uint16_t sign_extend(uint16_t bin, int bit_count) {
if((bin >> (bit_count - 1)) & 1) {
bin |= (0xFFFF << bit_count);
uint16_t sign_extend(uint16_t n, int bit_count) {
if((n >> (bit_count - 1)) & 1) {
n |= (0xFFFF << bit_count);
}
return bin;
return n;
}
/* Flag update function
Every time a value is written to a register the flag will be updated */
void update_flags(uint16_t r) {
if (reg[r] == 0) reg[RG_COND] = FL_Z;
else if (reg[r] >> 15) reg[RG_COND] = FL_N;
else reg[RG_COND] = FL_P;
}
/* main loop */