Add MUL ocpu instruction

This commit is contained in:
g1n 2022-04-17 17:50:53 +03:00
parent 4c4e0b9460
commit 3e85806ac7
Signed by: g1n
GPG Key ID: 8D352193D65D4E2C
1 changed files with 27 additions and 7 deletions

View File

@ -207,7 +207,7 @@ void ocpu_execute() {
write_register(reg, 0, word_value);
}
break;
case INS_ADD_IM:
case INS_ADD_IM:
reg = ocpu_fetch_byte();
if (!is_word_reg(reg)) {
value = match_register(reg) + ocpu_fetch_byte();
@ -217,7 +217,7 @@ void ocpu_execute() {
write_register(reg, 0, word_value);
}
break;
case INS_ADD_REG:
case INS_ADD_REG:
reg = ocpu_fetch_byte();
if (!is_word_reg(reg)) {
value = match_register(reg) + match_register(ocpu_fetch_byte());
@ -227,7 +227,7 @@ void ocpu_execute() {
write_register(reg, 0, word_value);
}
break;
case INS_ADC_IM:
case INS_ADC_IM:
reg = ocpu_fetch_byte();
if (!is_word_reg(reg)) {
value = match_register(reg) + ocpu_fetch_byte() + ocpu.CF;
@ -237,7 +237,7 @@ void ocpu_execute() {
write_register(reg, 0, word_value);
}
break;
case INS_ADC_REG:
case INS_ADC_REG:
reg = ocpu_fetch_byte();
if (!is_word_reg(reg)) {
value = match_register(reg) + match_register(ocpu_fetch_byte()) + ocpu.CF;
@ -247,7 +247,7 @@ void ocpu_execute() {
write_register(reg, 0, word_value);
}
break;
case INS_SUB_IM:
case INS_SUB_IM:
reg = ocpu_fetch_byte();
if (!is_word_reg(reg)) {
value = match_register(reg) - ocpu_fetch_byte();
@ -257,7 +257,7 @@ void ocpu_execute() {
write_register(reg, 0, word_value);
}
break;
case INS_SUB_REG:
case INS_SUB_REG:
reg = ocpu_fetch_byte();
if (!is_word_reg(reg)) {
value = match_register(reg) - match_register(ocpu_fetch_byte());
@ -267,7 +267,27 @@ void ocpu_execute() {
write_register(reg, 0, word_value);
}
break;
case INS_INC:
case INS_MUL_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_word();
write_register(reg, 0, word_value);
}
break;
case INS_MUL_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;
case INS_INC:
reg = ocpu_fetch_byte();
if (!is_word_reg(reg)) {
value = match_register(reg) + 1;