package instrucoes;
import unipic.CPU;
import unipic.Instrucao;
import unipic.Memoria;
		
public class INCF extends Instrucao{
	/***
	 *  Inicia a instrução 
	 * comando 0010 10df ffff
	 */
	@Override
	public void setup(String comando){
		setD(Integer.parseInt(comando.substring(6,7),2));
		setF(Integer.parseInt(comando.substring(7),2)); 
	}

	/***
	 *  Os conteúdos do registro 'f' são incrementados
	 *  Se o bit 'd' é '0', o resultado é colocado no registro 'W'
	 *  Se o bit 'd' é '1', o resultado é colocado de volta no registro 'f'
	 */
	public void run(Memoria mem, CPU cpu){
		 
		byte novoF = mem.get(f);
		novoF ++;
		mem.set(f,novoF);
		
		if (this.d == 0){
			
			cpu.setW(novoF);
			
		}
		
		else {
			
			mem.set(f,novoF);
			
		}
			
		mem.setPCL((byte) (mem.getPCL() + 1));
	}
}
package instrucoes;
import unipic.CPU;
import unipic.Instrucao;
import unipic.Memoria;
		
public class INCF extends Instrucao{
	/***
	 *  Inicia a instrução 
	 * comando 0010 10df ffff
	 */
	@Override
	public void setup(String comando){
		setD(Integer.parseInt(comando.substring(6,7),2));
		setF(Integer.parseInt(comando.substring(7),2)); 
	}

	/***
	 *  Os conteúdos do registro 'f' são incrementados
	 *  Se o bit 'd' é '0', o resultado é colocado no registro 'W'
	 *  Se o bit 'd' é '1', o resultado é colocado de volta no registro 'f'
	 */
	public void run(Memoria mem, CPU cpu){
		 
		byte novoF = mem.get(f);
		novoF ++;
		mem.set(f,novoF);
		
		if (this.d == 0){			
			cpu.setW(novoF);			
		}
		
		else {			
			mem.set(f,novoF);			
		}
			
		mem.setPCL((byte) (mem.getPCL() + 1));
	}
}
public void testINCF(){
		
		Memoria mem = new Memoria();
		CPU cpu = new CPU();
		
		mem.set(15, (byte) 0x01);
		mem.set(14, (byte)0x02);
		
		Instrucao inst1 = new INCF();
		Instrucao inst2 = new INCF();
		

		inst1.setup("010110101111"); // d=1 f=15
		inst2.setup("010100001110"); // d=0 f=14
		
		inst1.run(mem, cpu);
		if( mem.get(15) != (byte) 0x02 ) {
			
			   fail("Erro na 1ª instrução, esperado  obtido: 0x02 "+mem.get(15));
		
		}
		inst2.run(mem, cpu);
		if( mem.get(14) != (byte) 0x03 ) {
			
			   fail("Erro na 1ª instrução, esperado  obtido: 0x03 "+mem.get(15));
		
		}
}
public void testINCF(){
		
		Memoria mem = new Memoria();
		CPU cpu = new CPU();
		
		mem.set(15, (byte) 0x01);
		mem.set(14, (byte)0x02);
		
		Instrucao inst1 = new INCF();
		Instrucao inst2 = new INCF();
		

		inst1.setup("010110101111"); // d=1 f=15
		inst2.setup("010100001110"); // d=0 f=14
		
		inst1.run(mem, cpu);
		if( mem.get(15) != (byte) 0x02 ) {
			
			   fail("Erro na 1ª instrução, esperado  obtido: 0x02 "+mem.get(15));
		
		}
		inst2.run(mem, cpu);
		if( mem.get(14) != (byte) 0x03 ) {
			
			   fail("Erro na 1ª instrução, esperado  obtido: 0x03 "+mem.get(14));
		
		}
}
package instrucoes;
import unipic.CPU;
import unipic.Instrucao;
import unipic.Memoria;
		
public class INCF extends Instrucao{
	/***
	 *  Inicia a instrução 
	 * comando 0010 10df ffff
	 */
	@Override
	public void setup(String comando){
		setD(Integer.parseInt(comando.substring(6,7),2));
		setF(Integer.parseInt(comando.substring(7),2)); 
	}

	/***
	 *  Os conteudos do registro 'f' sao incrementados
	 *  Se o bit 'd' e '0', o resultado e colocado no registro 'W'
	 *  Se o bit 'd' e '1', o resultado e colocado de volta no registro 'f'
	 */
	public void run(Memoria mem, CPU cpu){
		 
		byte novoF = mem.get(f);
		novoF ++;
		mem.set(f,novoF);
		
		if (this.d == 0){			
			cpu.setW(novoF);			
		}
		
		else {			
			mem.set(f,novoF);			
		}
			
		mem.setPCL((byte) (mem.getPCL() + 1));
	}
}
public void testINCF(){
		
		Memoria mem = new Memoria();
		CPU cpu = new CPU();
		
		mem.set(15, (byte) 0x01);
		mem.set(14, (byte)0x02);
		
		Instrucao inst1 = new INCF();
		Instrucao inst2 = new INCF();
		

		inst1.setup("010110101111"); // d=1 f=15
		inst2.setup("010100001110"); // d=0 f=14
		
		inst1.run(mem, cpu);
		if( mem.get(15) != (byte) 0x02 ) {
			
			   fail("Erro na 1° instruçao, esperado  obtido: 0x02 "+mem.get(15));
		
		}
		inst2.run(mem, cpu);
		if( mem.get(14) != (byte) 0x03 ) {
			
			   fail("Erro na 2° instruçao, esperado  obtido: 0x03 "+mem.get(14));
		
		}
	}
package instrucoes;
import unipic.CPU;
import unipic.Instrucao;
import unipic.Memoria;

public class RLF extends Instrucao{
	/***
	 *  Inicia a instrução 
	 * comando 0011 01df ffff
	 */
	@Override
	public void setup(String comando){
		setD(Integer.parseInt(comando.substring(6,7),2));
		setF(Integer.parseInt(comando.substring(7),2)); 
	}

	/***
	 *  Os conteudos do registo 'f' sao rodados um bit para a esquerda
atraves flag Carry. 
	 *  Se 'd' e '0 ', o resultado e colocada no registo W. 
	 *  Se 'd' e '1 ', o resultado e armazenado de volta no registro 'f'.
	 */
	public void run(Memoria mem, CPU cpu){
		 
		byte left = (byte) ((mem.get(this.f)) << 7);
		mem.set(f,left);
		
		if (this.d == 0){			
			cpu.setW(left);			
		}
		
		else {			
			mem.set(f,left);			
		}
			
		mem.setPCL((byte) (mem.getPCL() + 1));
	}
}
public void testRLF(){
		
		Memoria mem = new Memoria();
		CPU cpu = new CPU();
		
		mem.set(15, (byte) 0x01);
		
		Instrucao inst1 = new RLF();
		

		inst1.setup("010110101111"); // d=1 f=15
		
		inst1.run(mem, cpu);
		if( mem.get(15) != (byte) 0x80 ) {
			
			   fail("Erro na 1° instrucao, esperado: 0x80  obtido:
"+mem.get(15));
		
		}
	}
package instrucoes;
import unipic.CPU;
import unipic.Instrucao;
import unipic.Memoria;

public class RLF extends Instrucao{
	/***
	 *  Inicia a instrução 
	 * comando 0011 01df ffff
	 */
	@Override
	public void setup(String comando){
		setD(Integer.parseInt(comando.substring(6,7),2));
		setF(Integer.parseInt(comando.substring(7),2)); 
	}

	/***
	 *  Os conteudos do registo 'f' sao rodados um bit para a esquerda
atraves flag Carry. 
	 *  Se 'd' e '0 ', o resultado e colocada no registo W. 
	 *  Se 'd' e '1 ', o resultado e armazenado de volta no registro 'f'.
	 */
	public void run(Memoria mem, CPU cpu){
		 
		byte left = (byte) ((mem.get(this.f)) << 7);
		mem.set(f,left);
		
		if (this.d == 0){	
			
			cpu.setW(left);
			
		}
		
		else {			
			mem.set(f,left);			
		}
			
		mem.setPCL((byte) (mem.getPCL() + 1));
	}
}
Merge pull request #69 from MickaelHenrique/master

Implementação das instruções INCF,RLF