diff --git a/commands/Addlw.java b/commands/Addlw.java index 0fe48c6..d74a7a7 100644 --- a/commands/Addlw.java +++ b/commands/Addlw.java @@ -18,7 +18,7 @@ public class Addlw extends CommandUtils implements Command checkZeroBit(result); checkCarryBit(result); - checkDigitCarryBit(result, literal); + checkDigitCarryBit(literal); Memory.workingRegister = result % 256; } diff --git a/commands/CommandUtils.java b/commands/CommandUtils.java index 5ded754..645b1fc 100644 --- a/commands/CommandUtils.java +++ b/commands/CommandUtils.java @@ -6,7 +6,7 @@ public class CommandUtils { protected void checkZeroBit(int result) { - if(result == 0){ + if((result % 256) == 0){ Memory.setZeroBit(); } else{ Memory.clearZeroBit(); @@ -22,7 +22,7 @@ public class CommandUtils } } - protected void checkDigitCarryBit(int result, int literal) + protected void checkDigitCarryBit(int literal) { if(((Memory.workingRegister & 0x0F) + (literal & 0x0F)) > 15){ Memory.setDigitCarryBit(); diff --git a/commands/Sublw.java b/commands/Sublw.java new file mode 100644 index 0000000..f229fe5 --- /dev/null +++ b/commands/Sublw.java @@ -0,0 +1,45 @@ +package commands; + +import registers.Memory; + +public class Sublw extends CommandUtils implements Command +{ + private final int literal; + + public Sublw(int input) + { + literal = input & 0x00FF; + } + + @Override + protected void checkCarryBit(int result) + { + if(result <= 255){ + Memory.clearCarryBit(); + } else{ + Memory.setCarryBit(); + } + } + + @Override + protected void checkDigitCarryBit(int literal) + { + if(((literal & 0x0F) - (Memory.workingRegister & 0x0F)) < 0){ + Memory.clearDigitCarryBit(); + } else{ + Memory.setDigitCarryBit(); + } + } + + @Override + public void execute() + { + int result = literal - Memory.workingRegister + 256; + + checkZeroBit(result); + checkCarryBit(result); + checkDigitCarryBit(literal); + + Memory.workingRegister = result % 256; + } +} diff --git a/decoder/CommandDecoder.java b/decoder/CommandDecoder.java index 6a30093..0f39c6a 100644 --- a/decoder/CommandDecoder.java +++ b/decoder/CommandDecoder.java @@ -95,8 +95,7 @@ public class CommandDecoder return new Addlw(input); //break; case 0x3C00: - //sublw(); - break; + return new Sublw(input); } switch(input & 0x3800)