diff --git a/src/ocpu/ocpu.c b/src/ocpu/ocpu.c index 1f4691a..6add9d2 100644 --- a/src/ocpu/ocpu.c +++ b/src/ocpu/ocpu.c @@ -376,7 +376,7 @@ void ocpu_execute() { value = match_register(reg) | ocpu_fetch_byte(); write_register(reg, value, 0); } else { - word_value = match_register(reg) & ocpu_fetch_byte(); + word_value = match_register(reg) | ocpu_fetch_byte(); write_register(reg, 0, word_value); } break; @@ -386,7 +386,27 @@ void ocpu_execute() { value = match_register(reg) | match_register(ocpu_fetch_byte()); write_register(reg, value, 0); } else { - word_value = match_register(reg) & match_register(ocpu_fetch_byte()); + word_value = match_register(reg) | match_register(ocpu_fetch_byte()); + write_register(reg, 0, word_value); + } + break; + case INS_XOR_IM: + reg = ocpu_fetch_byte(); + if (!is_word_reg(reg)) { + value = match_register(reg) ^ ocpu_fetch_byte(); + write_register(reg, value, 0); + } else { + word_value = match_register(reg) ^ ocpu_fetch_byte(); + write_register(reg, 0, word_value); + } + break; + case INS_XOR_REG: + reg = ocpu_fetch_byte(); + if (!is_word_reg(reg)) { + value = match_register(reg) ^ match_register(ocpu_fetch_byte()); + write_register(reg, value, 0); + } else { + word_value = match_register(reg) ^ match_register(ocpu_fetch_byte()); write_register(reg, 0, word_value); } break;