From 5e9ce419af6a74114410c5a8ea5ca55b5fa373e6 Mon Sep 17 00:00:00 2001 From: Marco Maccaferri Date: Mon, 24 Dec 2018 12:49:17 +0100 Subject: [PATCH] Added undocumented SLL instruction --- .../tools/editor/Z80TokenMarker.java | 1 + src/nl/grauw/glass/GlobalScope.java | 2 + src/nl/grauw/glass/instructions/Sll.java | 42 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/nl/grauw/glass/instructions/Sll.java diff --git a/src/com/maccasoft/tools/editor/Z80TokenMarker.java b/src/com/maccasoft/tools/editor/Z80TokenMarker.java index 570ba6f..bcf90f5 100644 --- a/src/com/maccasoft/tools/editor/Z80TokenMarker.java +++ b/src/com/maccasoft/tools/editor/Z80TokenMarker.java @@ -76,6 +76,7 @@ public class Z80TokenMarker extends TokenMarker { keywords.put("SCF", TokenId.Instruction); keywords.put("SET", TokenId.Instruction); keywords.put("SLA", TokenId.Instruction); + keywords.put("SLL", TokenId.Instruction); keywords.put("SRA", TokenId.Instruction); keywords.put("SRL", TokenId.Instruction); keywords.put("SUB", TokenId.Instruction); diff --git a/src/nl/grauw/glass/GlobalScope.java b/src/nl/grauw/glass/GlobalScope.java index b4704f1..9e1b967 100644 --- a/src/nl/grauw/glass/GlobalScope.java +++ b/src/nl/grauw/glass/GlobalScope.java @@ -85,6 +85,7 @@ import nl.grauw.glass.instructions.Sbc; import nl.grauw.glass.instructions.Scf; import nl.grauw.glass.instructions.Set; import nl.grauw.glass.instructions.Sla; +import nl.grauw.glass.instructions.Sll; import nl.grauw.glass.instructions.Sra; import nl.grauw.glass.instructions.Srl; import nl.grauw.glass.instructions.Sub; @@ -165,6 +166,7 @@ public class GlobalScope extends Scope { addBuiltInSymbol("scf", new Instruction(new Scf())); addBuiltInSymbol("set", new Instruction(new Set())); addBuiltInSymbol("sla", new Instruction(new Sla())); + addBuiltInSymbol("sll", new Instruction(new Sll())); addBuiltInSymbol("sra", new Instruction(new Sra())); addBuiltInSymbol("srl", new Instruction(new Srl())); addBuiltInSymbol("sub", new Instruction(new Sub())); diff --git a/src/nl/grauw/glass/instructions/Sll.java b/src/nl/grauw/glass/instructions/Sll.java new file mode 100644 index 0000000..147800f --- /dev/null +++ b/src/nl/grauw/glass/instructions/Sll.java @@ -0,0 +1,42 @@ +package nl.grauw.glass.instructions; + +import nl.grauw.glass.Scope; +import nl.grauw.glass.expressions.Expression; +import nl.grauw.glass.expressions.Register; +import nl.grauw.glass.expressions.Schema; + +public class Sll extends InstructionFactory { + + @Override + public InstructionObject createObject(Scope context, Expression arguments) { + if (Sla_R.ARGUMENTS.check(arguments)) { + return new Sla_R(context, arguments.getElement(0)); + } + throw new ArgumentException(); + } + + public static class Sla_R extends InstructionObject { + + public static Schema ARGUMENTS = new Schema(Schema.DIRECT_R_INDIRECT_HL_IX_IY); + + private Expression argument; + + public Sla_R(Scope context, Expression argument) { + super(context); + this.argument = argument; + } + + @Override + public int getSize() { + return indexifyIndirect(argument.getRegister(), 2); + } + + @Override + public byte[] getBytes() { + Register register = argument.getRegister(); + return indexifyOnlyIndirect(register, (byte) 0xCB, (byte) (0x30 + register.get8BitCode())); + } + + } + +}