Advertisement
rafikamal

Hex Converter

May 31st, 2015
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.68 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.util.Scanner;
  5.  
  6.  
  7. public class Converter {
  8.     private static final String[] INSTRUCTIONS = {
  9.         "LDA",      // Address
  10.         "STA",      // Address
  11.         "MOV A,B",
  12.         "MOV B,A",
  13.         "MOV A",    // Immediate
  14.         "IN",
  15.         "OUT",
  16.         "ADD B",
  17.         "ADC B",
  18.         "SUB B",
  19.         "SBB B",
  20.         "ADC",      // Immediate
  21.         "SBB",      // Address
  22.         "CMP B",
  23.         "DEC",
  24.         "JZ",       // Address
  25.         "JG",       // Address
  26.         "PUSH",
  27.         "POP",
  28.         "CALL",     // Address
  29.         "RET",     
  30.         "JMP",      // Address
  31.         "HLT",     
  32.         "NOP",
  33.         "RCL",
  34.         "RCR",
  35.         "AND",      // Immediate
  36.         "OR B"
  37.     };
  38.    
  39.    
  40.     private static final String INPUT_FILENAME = "input.txt";
  41.     private static final String OPCODE_OUTPUT_FILENAME = "op.hex";
  42.     private static final String DATA_OUTPUT_FILENAME = "data.hex";
  43.    
  44.     public static void main(String[] args) throws Exception {
  45.         Scanner input = new Scanner(new File(INPUT_FILENAME));
  46.        
  47.         new File(DATA_OUTPUT_FILENAME).delete();
  48.         new File(OPCODE_OUTPUT_FILENAME).delete();
  49.        
  50.         FileWriter opcodeWriter = new FileWriter(OPCODE_OUTPUT_FILENAME);
  51.         FileWriter dataWriter = new FileWriter(DATA_OUTPUT_FILENAME);
  52.        
  53.         int address = 0;
  54.        
  55.         while(input.hasNextLine()) {
  56.             String instruction = input.nextLine();
  57.             for (int opcode = 0; opcode < INSTRUCTIONS.length; opcode++) {
  58.                 if (instruction.startsWith(INSTRUCTIONS[opcode])) {
  59.                     int data = 0;
  60.                    
  61.                     if (instruction.length() > INSTRUCTIONS[opcode].length()) {
  62.                         String dataStr = instruction.substring(instruction.length() - 2);
  63.                         data = Integer.parseInt(dataStr, 16);
  64.                     }
  65.                        
  66.                     writeData(opcode, address, opcodeWriter);
  67.                     writeData(data, address, dataWriter);
  68.                    
  69.                     address++;
  70.                     break;
  71.                 }
  72.             }
  73.         }
  74.        
  75.         opcodeWriter.write(":00000001FF");
  76.         dataWriter.write(":00000001FF");
  77.        
  78.         opcodeWriter.close();
  79.         dataWriter.close();
  80.        
  81.         input.close();
  82.     }
  83.    
  84.     public static void writeData(int data, int address, FileWriter writer) throws IOException {
  85.         StringBuilder builder = new StringBuilder();
  86.         builder.append(":01");
  87.         String addressStr = "0000" + Integer.toHexString(address).toUpperCase();
  88.         addressStr = addressStr.substring(addressStr.length() - 4);
  89.         builder.append(addressStr);
  90.  
  91.         builder.append("00");
  92.        
  93.         String dataStr = "00" + Integer.toHexString(data).toUpperCase();
  94.         dataStr = dataStr.substring(dataStr.length() - 2);
  95.         builder.append(dataStr);
  96.        
  97.         int checkSum = (256 - 1 - address - data) % 256;
  98.         String checksumStr = "00" + Integer.toHexString(checkSum);
  99.         checksumStr = checksumStr.substring(checksumStr.length() - 2);
  100.         builder.append(checksumStr);
  101.        
  102.         builder.append("\n");
  103.        
  104.         writer.append(builder.toString());
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement