Compare commits
1 Commits
incfInstru
...
addwfInstr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9a74c108e |
@@ -13,11 +13,10 @@ class Main
|
||||
|
||||
ArrayList<Command> program = new ArrayList<>();
|
||||
int input1 = 0x27FF;
|
||||
program.add(CommandDecoder.decode(0x3011));
|
||||
program.add(CommandDecoder.decode(0x2003));
|
||||
program.add(CommandDecoder.decode(0x3022));
|
||||
program.add(CommandDecoder.decode(0x0008));
|
||||
while(true)
|
||||
program.add(CommandDecoder.decode(0x3011)); //Write 0x11 to W
|
||||
Memory.setRegister(0x14, 0x14);
|
||||
program.add(CommandDecoder.decode(0x0714));
|
||||
for(int i = 0; i < 2; i++)
|
||||
{
|
||||
program.get(ProgramCounter.getPc()).execute();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
|
||||
|
||||
public class Addlw extends CommandUtils implements Command
|
||||
public class Addlw extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
29
de/darkress/pic16f84sim/commands/Addwf.java
Normal file
29
de/darkress/pic16f84sim/commands/Addwf.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
|
||||
|
||||
public class Addwf extends FileRegisterCommandUtils implements Command
|
||||
{
|
||||
private final int address;
|
||||
private final boolean destinationBit;
|
||||
|
||||
public Addwf(int input)
|
||||
{
|
||||
address = input & 0x007F;
|
||||
destinationBit = checkDestinationBit(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute()
|
||||
{
|
||||
int result = Memory.getRegister(address) + Memory.workingRegister;
|
||||
|
||||
checkZeroBit(result);
|
||||
checkCarryBit(result);
|
||||
checkDigitCarryBit(address);
|
||||
|
||||
writeToDestination(destinationBit, address, result);
|
||||
ProgramCounter.incPC();
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
|
||||
public class Andlw extends CommandUtils implements Command
|
||||
public class Andlw extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
|
||||
import de.darkress.pic16f84sim.microcontroller.Stack;
|
||||
|
||||
public class Call extends CommandUtils implements Command
|
||||
public class Call extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
|
||||
public class FileRegisterCommandUtils
|
||||
{
|
||||
protected void checkZeroBit(int result)
|
||||
{
|
||||
if((result % 256) == 0){
|
||||
Memory.setZeroBit();
|
||||
} else{
|
||||
Memory.clearZeroBit();
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkCarryBit(int result)
|
||||
{
|
||||
if(result > 255){
|
||||
Memory.setCarryBit();
|
||||
} else{
|
||||
Memory.clearCarryBit();
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkDigitCarryBit(int address)
|
||||
{
|
||||
int literal = Memory.getRegister(address);
|
||||
if(((Memory.workingRegister & 0x0F) + (literal & 0x0F)) > 15){
|
||||
Memory.setDigitCarryBit();
|
||||
} else{
|
||||
Memory.clearDigitCarryBit();
|
||||
}
|
||||
}
|
||||
|
||||
protected void writeToDestination(boolean destinationBit, int fileAddress, int result)
|
||||
{
|
||||
if(destinationBit)
|
||||
{
|
||||
//Store in FileRegister
|
||||
Memory.setRegister(fileAddress, result);
|
||||
} else {
|
||||
//Store in WRegister
|
||||
Memory.workingRegister = result;
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean checkDestinationBit(int input)
|
||||
{
|
||||
return (input & 0x0080) == 0x0080;
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
|
||||
|
||||
public class Goto extends CommandUtils implements Command
|
||||
public class Goto extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
|
||||
public class Iorlw extends CommandUtils implements Command
|
||||
public class Iorlw extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
|
||||
public class CommandUtils
|
||||
public class LiteralCommandUtils
|
||||
{
|
||||
protected void checkZeroBit(int result)
|
||||
{
|
||||
@@ -1,8 +1,9 @@
|
||||
package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
|
||||
|
||||
public class Movlw extends CommandUtils implements Command
|
||||
public class Movlw extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
@@ -15,5 +16,6 @@ public class Movlw extends CommandUtils implements Command
|
||||
public void execute()
|
||||
{
|
||||
Memory.workingRegister = literal;
|
||||
ProgramCounter.incPC();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
|
||||
import de.darkress.pic16f84sim.microcontroller.Stack;
|
||||
|
||||
public class Retlw extends CommandUtils implements Command
|
||||
public class Retlw extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
import de.darkress.pic16f84sim.microcontroller.ProgramCounter;
|
||||
import de.darkress.pic16f84sim.microcontroller.Stack;
|
||||
|
||||
public class Return extends CommandUtils implements Command
|
||||
public class Return extends LiteralCommandUtils implements Command
|
||||
{
|
||||
@Override
|
||||
public void execute()
|
||||
|
||||
@@ -2,7 +2,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
|
||||
public class Sublw extends CommandUtils implements Command
|
||||
public class Sublw extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package de.darkress.pic16f84sim.commands;
|
||||
|
||||
import de.darkress.pic16f84sim.microcontroller.Memory;
|
||||
|
||||
public class Xorlw extends CommandUtils implements Command
|
||||
public class Xorlw extends LiteralCommandUtils implements Command
|
||||
{
|
||||
private final int literal;
|
||||
|
||||
|
||||
@@ -9,8 +9,7 @@ public class CommandDecoder
|
||||
switch(input & 0x3F00)
|
||||
{
|
||||
case 0x700:
|
||||
//addwf();
|
||||
break;
|
||||
return new Addwf(input);
|
||||
case 0x500:
|
||||
//andwf();
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user