Completed add, sub, cmp and jump simulations
This commit is contained in:
57
8086_sim/flag_access.cpp
Normal file
57
8086_sim/flag_access.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user