Division by zero triggers INT #231

This commit is contained in:
simon987 2020-07-31 18:34:57 -04:00
parent 2ff19f24eb
commit 84a9132f5e
3 changed files with 49 additions and 8 deletions

View File

@ -154,7 +154,6 @@ public class CPU implements MongoSerializable {
registerSetSize = registerSet.size();
// status.breakFlag = true;
while (!status.isBreakFlag()) {
counter++;

View File

@ -32,9 +32,7 @@ public class DivInstruction extends Instruction {
(cpu.getRegisterSet().getRegister("A").getValue() & 0xFFFF);
if (src.get(srcIndex) == 0) {
//Division by 0
status.setBreakFlag(true);
status.setErrorFlag(true);
cpu.interrupt(IntInstruction.INT_DIVISION_BY_ZERO);
} else {
cpu.getRegisterSet().getRegister("A").setValue((char) (source / (char) src.get(srcIndex)));
cpu.getRegisterSet().getRegister("Y").setValue((char) (source % (char) src.get(srcIndex)));
@ -52,15 +50,12 @@ public class DivInstruction extends Instruction {
(cpu.getRegisterSet().getRegister("A").getValue() & 0xFFFF);
if (src == 0) {
//Division by 0
status.setBreakFlag(true);
status.setErrorFlag(true);
cpu.interrupt(IntInstruction.INT_DIVISION_BY_ZERO);
} else {
cpu.getRegisterSet().getRegister("A").setValue((char) (source / (char) src));
cpu.getRegisterSet().getRegister("Y").setValue((char) (source % (char) src));
}
return status;
}
}

View File

@ -0,0 +1,47 @@
package net.simon987.mar.server.assembly.instruction;
import net.simon987.mar.server.TestExecutionResult;
import net.simon987.mar.server.assembly.TestHelper;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class DivInstructionTest {
@Test
public void divisionByZero1() {
String code = "" +
"isr: \n" +
" MOV X, 0x1234 \n" +
" IRET \n" +
".text \n" +
"MOV [0], isr \n" +
"MOV A, 0 \n" +
"DIV A \n" +
"MOV Y, 0x4567 \n" +
"brk \n";
TestExecutionResult res = TestHelper.executeCode(code);
assertEquals(0x1234, res.regValue("X"));
assertEquals(0x4567, res.regValue("Y"));
}
@Test
public void divisionByZero2() {
String code = "" +
"isr: \n" +
" MOV X, 0x1234 \n" +
" IRET \n" +
".text \n" +
"MOV [0], isr \n" +
"DIV 0 \n" +
"MOV Y, 0x4567 \n" +
"brk \n";
TestExecutionResult res = TestHelper.executeCode(code);
assertEquals(0x1234, res.regValue("X"));
assertEquals(0x4567, res.regValue("Y"));
}
}