performance-aware-programming/8086_sim/flag_access.cpp

58 lines
984 B
C++

#include "include/flag_access.h"
#include "include/aliases.h"
#include <stdio.h>
const char *get_flag_string(flag_access flag);
static bool flags[FLAG_COUNT] = {false};
bool get_flag(flag_access flag) {
if (flag < FLAG_COUNT) {
return flags[flag];
}
return false;
}
void set_flags(u16 value) {
if (value == 0) {
flags[FLAG_ZERO] = true;
flags[FLAG_SIGN] = false;
} else if ((value & 0x8000) == 0x8000) {
flags[FLAG_ZERO] = false;
flags[FLAG_SIGN] = true;
} else {
flags[FLAG_ZERO] = false;
flags[FLAG_SIGN] = false;
}
}
void print_flags() {
printf("\t");
for (u32 i = 0; i < FLAG_COUNT; ++i) {
if (flags[i]) {
printf("%s", get_flag_string((flag_access)i));
}
}
printf("\n");
}
const char *get_flag_string(flag_access flag) {
const char *output = "";
switch (flag) {
case FLAG_ZERO:
output = "Z";
break;
case FLAG_SIGN:
output = "S";
break;
default:
break;
}
return output;
}