58 lines
984 B
C++
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;
|
|
}
|