Added undocumented SLL instruction

master
Marco Maccaferri 2018-12-24 12:49:17 +01:00
rodzic 756554179d
commit 5e9ce419af
3 zmienionych plików z 45 dodań i 0 usunięć

Wyświetl plik

@ -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);

Wyświetl plik

@ -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()));

Wyświetl plik

@ -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()));
}
}
}