From 9979986c6a52d93586e1213f3a59f1cabd180c90 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 13 Nov 2017 17:51:16 -0500 Subject: [PATCH] Added SAL Instruction #6. Added ROL/ROR Instructions #7. --- .../src/net/simon987/server/assembly/CPU.java | 2 +- .../assembly/DefaultInstructionSet.java | 10 +++++++- .../assembly/instruction/RolInstruction.java | 13 +++++++--- .../assembly/instruction/RorInstruction.java | 14 +++++----- .../assembly/instruction/SalInstruction.java | 13 ++++++++++ .../assembly/instruction/XorInstruction.java | 6 ++--- .../server/logging/GenericFormatter.java | 24 +++++------------- plugins/Cubot.jar | Bin 21075 -> 21076 bytes 8 files changed, 48 insertions(+), 34 deletions(-) create mode 100644 Server/src/net/simon987/server/assembly/instruction/SalInstruction.java diff --git a/Server/src/net/simon987/server/assembly/CPU.java b/Server/src/net/simon987/server/assembly/CPU.java index 3c30014..8c50197 100755 --- a/Server/src/net/simon987/server/assembly/CPU.java +++ b/Server/src/net/simon987/server/assembly/CPU.java @@ -152,7 +152,7 @@ public class CPU implements JSONSerialisable{ // LogManager.LOGGER.info(instruction.getMnemonic()); } double elapsed = (System.currentTimeMillis() - startTime); - LogManager.LOGGER.fine("----------\n" + counter + " instruction in " + elapsed + "ms : " + (double) counter / (elapsed / 1000) / 1000000 + "MHz"); + LogManager.LOGGER.fine(counter + " instruction in " + elapsed + "ms : " + (double) counter / (elapsed / 1000) / 1000000 + "MHz"); } public void executeInstruction(Instruction instruction, int source, int destination) { diff --git a/Server/src/net/simon987/server/assembly/DefaultInstructionSet.java b/Server/src/net/simon987/server/assembly/DefaultInstructionSet.java index 8ec302f..c1cd47b 100755 --- a/Server/src/net/simon987/server/assembly/DefaultInstructionSet.java +++ b/Server/src/net/simon987/server/assembly/DefaultInstructionSet.java @@ -1,6 +1,7 @@ package net.simon987.server.assembly; import net.simon987.server.assembly.instruction.*; +import net.simon987.server.logging.LogManager; import java.util.HashMap; @@ -31,6 +32,7 @@ public class DefaultInstructionSet implements InstructionSet { add(new AndInstruction()); add(new OrInstruction()); add(new ShlInstruction()); + add(new SalInstruction()); //Alias is added add(new ShrInstruction()); add(new XorInstruction()); add(new TestInstruction()); @@ -85,6 +87,12 @@ public class DefaultInstructionSet implements InstructionSet { @Override public void add(Instruction instruction) { - instructionMap.put(instruction.getOpCode(), instruction); + if (instructionMap.containsKey(instruction.getOpCode())) { + LogManager.LOGGER.fine(instruction.getMnemonic() + " instruction is an alias for " + + instructionMap.get(instruction.getOpCode()).getMnemonic()); + } else { + instructionMap.put(instruction.getOpCode(), instruction); + + } } } diff --git a/Server/src/net/simon987/server/assembly/instruction/RolInstruction.java b/Server/src/net/simon987/server/assembly/instruction/RolInstruction.java index fa114dc..3afbf27 100644 --- a/Server/src/net/simon987/server/assembly/instruction/RolInstruction.java +++ b/Server/src/net/simon987/server/assembly/instruction/RolInstruction.java @@ -4,6 +4,11 @@ import net.simon987.server.assembly.Instruction; import net.simon987.server.assembly.Status; import net.simon987.server.assembly.Target; +/** + * +-----------------+ + * | | + * CF < 0<0<0<0<0<0<0<0 <-+ + */ public class RolInstruction extends Instruction { private static final int OPCODE = 35; @@ -15,7 +20,7 @@ public class RolInstruction extends Instruction { @Override public Status execute(Target dst, int dstIndex, Target src, int srcIndex, Status status) { - int count = src.get(srcIndex); + int count = src.get(srcIndex) % 16; int destination = dst.get(dstIndex); int signBit = (destination & 0x8000); @@ -34,12 +39,12 @@ public class RolInstruction extends Instruction { @Override public Status execute(Target dst, int dstIndex, int src, Status status) { - + int count = src % 16; int destination = dst.get(dstIndex); int signBit = (destination & 0x8000); - destination = (destination << src) | (destination >>> (16 - src)); - if (src == 1) { + destination = (destination << count) | (destination >>> (16 - count)); + if (count == 1) { status.setOverflowFlag((destination & 0x8000) != signBit); //Set OF if sign bit changed } status.setCarryFlag((destination & 1) == 1); diff --git a/Server/src/net/simon987/server/assembly/instruction/RorInstruction.java b/Server/src/net/simon987/server/assembly/instruction/RorInstruction.java index e41d6cc..b72c5ff 100644 --- a/Server/src/net/simon987/server/assembly/instruction/RorInstruction.java +++ b/Server/src/net/simon987/server/assembly/instruction/RorInstruction.java @@ -5,9 +5,10 @@ import net.simon987.server.assembly.Status; import net.simon987.server.assembly.Target; /** - * Rotate right - *
- * ->  destination -(CF)>  + * +-----------------+ + * | | + * +-> 0>0>0>0>0>0>0>0 > CF + * */ public class RorInstruction extends Instruction { @@ -20,7 +21,7 @@ public class RorInstruction extends Instruction { @Override public Status execute(Target dst, int dstIndex, Target src, int srcIndex, Status status) { - int count = src.get(srcIndex); + int count = src.get(srcIndex) % 16; int destination = dst.get(dstIndex); int signBit = (destination & 0x8000); @@ -37,11 +38,12 @@ public class RorInstruction extends Instruction { @Override public Status execute(Target dst, int dstIndex, int src, Status status) { + int count = src % 16; int destination = dst.get(dstIndex); int signBit = (destination & 0x8000); - destination = (destination >>> src) | (destination << (16 - src)); - if (src == 1) { + destination = (destination >>> count) | (destination << (16 - count)); + if (count == 1) { status.setOverflowFlag((destination & 0x8000) != signBit); //Set OF if sign bit changed } dst.set(dstIndex, destination); diff --git a/Server/src/net/simon987/server/assembly/instruction/SalInstruction.java b/Server/src/net/simon987/server/assembly/instruction/SalInstruction.java new file mode 100644 index 0000000..f24ab94 --- /dev/null +++ b/Server/src/net/simon987/server/assembly/instruction/SalInstruction.java @@ -0,0 +1,13 @@ +package net.simon987.server.assembly.instruction; + +import net.simon987.server.assembly.Instruction; + +/** + * Alias of SHL instruction + */ +public class SalInstruction extends Instruction { + + public SalInstruction() { + super("sal", ShlInstruction.OPCODE); + } +} diff --git a/Server/src/net/simon987/server/assembly/instruction/XorInstruction.java b/Server/src/net/simon987/server/assembly/instruction/XorInstruction.java index c8bbe26..b9a8c2e 100644 --- a/Server/src/net/simon987/server/assembly/instruction/XorInstruction.java +++ b/Server/src/net/simon987/server/assembly/instruction/XorInstruction.java @@ -5,15 +5,13 @@ import net.simon987.server.assembly.Status; import net.simon987.server.assembly.Target; import net.simon987.server.assembly.Util; -/** - * Created by Gilbert Fortier on 3/12/2017. - */ + public class XorInstruction extends Instruction { /** * Opcode of the instruction */ - public static final int OPCODE = 5; + public static final int OPCODE = 38; public XorInstruction() { super("xor", OPCODE); diff --git a/Server/src/net/simon987/server/logging/GenericFormatter.java b/Server/src/net/simon987/server/logging/GenericFormatter.java index dbee2b0..a91d4cd 100755 --- a/Server/src/net/simon987/server/logging/GenericFormatter.java +++ b/Server/src/net/simon987/server/logging/GenericFormatter.java @@ -3,7 +3,6 @@ package net.simon987.server.logging; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Formatter; -import java.util.logging.Level; import java.util.logging.LogRecord; /** @@ -16,24 +15,13 @@ public class GenericFormatter extends Formatter { StringBuilder sb = new StringBuilder(); - if (record.getLevel() == Level.FINE) { - //Chat message, maximum 50 char per line - if (record.getMessage().length() > 50) { - sb.append(record.getMessage().substring(0, 50)); - sb.append('\n'); - sb.append(record.getMessage().substring(50)); - } else { - sb.append(record.getMessage()); - } - sb.append('\n'); - } else { - //Regular record - Date date = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("MM/dd HH:mm:ss:SSS"); //ex. 11/25 22:03:59:010 + //Regular record + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("MM/dd HH:mm:ss:SSS"); //ex. 11/25 22:03:59:010 + + sb.append(String.format("[%s] [%s] %s", sdf.format(date), record.getLevel(), record.getMessage())); + sb.append('\n'); - sb.append(String.format("[%s] [%s] %s", sdf.format(date), record.getLevel(), record.getMessage())); - sb.append('\n'); - } return sb.toString(); diff --git a/plugins/Cubot.jar b/plugins/Cubot.jar index fb49b222d8dd0f4d76ff1b92093639a3f9c00164..7991cf6957c090a58d5575b78bed407a07371135 100644 GIT binary patch delta 3092 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 delta 3088 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 mO8@|X{7<_j@c|mmB5radw>1F~574k