}
private StringBuilder strCmd;
private void getCommand(String cmd) {
if (!cmd.isEmpty()) {
HexConverter hexToDec = new HexConverter();
String fWord = "";
String lWord = "";
// Comparação feita pois estava causando travamentos quando eram lidas linhas com menos de 3 caracteres
if (cmd.length() >= 3) {
fWord = cmd.substring(0, 3).toUpperCase();
lWord = cmd.substring(3);
}
/** Todos os códigos comparados abaixo foram retirados do ENIAC a partir de testes feitos com base nos comandos que eu conhecia,
* pode ser que hajam mais códigos do que abaixo.
* Os 3 primeiros digitos do ENIAC tratam-se da definição dos comandos, que provavelmente foi um número escolhido pelo próprio criador
* Os 3 últimos digitos, podem ser números de valores, por exemplo "JMP 30" - o "30" representa os 3 últimos digitos em Hexadecimal
* Podem também representar os registradores, como AX, BX e etc, cada registrador tem um número de indentificação prórpio que foi definido pelo
* criador.
* Totalizando 6 digitos
*
* Para cada linha de comando contido no arquivo .eniac é feita a verificação, caso a comparação seja verdadeira é feita a conversão
*/
if (fWord.equals("200")) {
strCmd.append("JMP ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("A00")) { // LOAD 5
strCmd.append("LOAD ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("A02")) { // LOAD @1
strCmd.append("LOAD @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("A08")) { // LOAD AX
strCmd.append("LOAD ");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("A0A")) { // LOAD @BX
strCmd.append("LOAD @");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("2B0")) {
strCmd.append("JZ ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("2A0")) {
strCmd.append("JNZ ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("100")) {
strCmd.append("HLT");
} else if (fWord.equals("C00")) {
strCmd.append("SUB ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("C02")) {
strCmd.append("SUB @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("C08")) {
strCmd.append("SUB ");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("C80")) {
strCmd.append("ADD ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("C82")) {
strCmd.append("ADD @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("C88")) {
strCmd.append("ADD ");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("F00")) {
strCmd.append("MUL ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("F02")) {
strCmd.append("MUL @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("F08")) {
strCmd.append("MUL ");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("F80")) {
strCmd.append("DIV ");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("F82")) {
strCmd.append("DIV @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("D88")) {
strCmd.append("INC ");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("D82")) {
strCmd.append("INC @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("D08")) {
strCmd.append("DEC ");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("D02")) {
strCmd.append("DEC @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else if (fWord.equals("B88")) {
strCmd.append("STORE ");
strCmd.append(checkRegister(lWord));
} else if (fWord.equals("B82")) {
strCmd.append("STORE @");
hexToDec.setHexValue(lWord);
strCmd.append(hexToDec.convertToDecimal());
} else {
hexToDec.setHexValue(cmd);
strCmd.append("DB ");
strCmd.append(hexToDec.convertToDecimal());
}
} else {
// Caso a linha esteja vazia, então define vazio em strCmd;
strCmd.append("");
}