Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- public class Converter {
- private static final String[] INSTRUCTIONS = {
- "LDA", // Address
- "STA", // Address
- "MOV A,B",
- "MOV B,A",
- "MOV A", // Immediate
- "IN",
- "OUT",
- "ADD B",
- "ADC B",
- "SUB B",
- "SBB B",
- "ADC", // Immediate
- "SBB", // Address
- "CMP B",
- "DEC",
- "JZ", // Address
- "JG", // Address
- "PUSH",
- "POP",
- "CALL", // Address
- "RET",
- "JMP", // Address
- "HLT",
- "NOP",
- "RCL",
- "RCR",
- "AND", // Immediate
- "OR B"
- };
- private static final String INPUT_FILENAME = "input.txt";
- private static final String OPCODE_OUTPUT_FILENAME = "op.hex";
- private static final String DATA_OUTPUT_FILENAME = "data.hex";
- public static void main(String[] args) throws Exception {
- Scanner input = new Scanner(new File(INPUT_FILENAME));
- new File(DATA_OUTPUT_FILENAME).delete();
- new File(OPCODE_OUTPUT_FILENAME).delete();
- FileWriter opcodeWriter = new FileWriter(OPCODE_OUTPUT_FILENAME);
- FileWriter dataWriter = new FileWriter(DATA_OUTPUT_FILENAME);
- int address = 0;
- while(input.hasNextLine()) {
- String instruction = input.nextLine();
- for (int opcode = 0; opcode < INSTRUCTIONS.length; opcode++) {
- if (instruction.startsWith(INSTRUCTIONS[opcode])) {
- int data = 0;
- if (instruction.length() > INSTRUCTIONS[opcode].length()) {
- String dataStr = instruction.substring(instruction.length() - 2);
- data = Integer.parseInt(dataStr, 16);
- }
- writeData(opcode, address, opcodeWriter);
- writeData(data, address, dataWriter);
- address++;
- break;
- }
- }
- }
- opcodeWriter.write(":00000001FF");
- dataWriter.write(":00000001FF");
- opcodeWriter.close();
- dataWriter.close();
- input.close();
- }
- public static void writeData(int data, int address, FileWriter writer) throws IOException {
- StringBuilder builder = new StringBuilder();
- builder.append(":01");
- String addressStr = "0000" + Integer.toHexString(address).toUpperCase();
- addressStr = addressStr.substring(addressStr.length() - 4);
- builder.append(addressStr);
- builder.append("00");
- String dataStr = "00" + Integer.toHexString(data).toUpperCase();
- dataStr = dataStr.substring(dataStr.length() - 2);
- builder.append(dataStr);
- int checkSum = (256 - 1 - address - data) % 256;
- String checksumStr = "00" + Integer.toHexString(checkSum);
- checksumStr = checksumStr.substring(checksumStr.length() - 2);
- builder.append(checksumStr);
- builder.append("\n");
- writer.append(builder.toString());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement