/* (C) Toshiyuki Maeda MMX yet another GMC-4 assembler (minimum) 22/Apr/2010: 1st written by maechan@hannan-u.ac.jp */ import java.io.*; import java.util.HashMap; public class gmc4as { static String[] lines = new String[128]; static int linecount = 0; static String nooprand[] = { "KA", "AO", "CH", "CY", "AM", "MA", "M+", "M-" }; static int pc = 0; static HashMap labels = new HashMap(); static int parseLabel(int lineNo) { String buf[] = lines[lineNo].split("\\s++",3); if (buf[0].equals("#")) return 0; // Comment if (buf[0].endsWith(":")) { // Label labels.put(buf[0],pc); } if (buf[1].equals("")) return 0; if (buf[1].equals("JUMP")) return 3; for(String s : nooprand) { if (s.equals(buf[1])) return 1; } return 2; } static void parseLine(int lineNo) { String buf[] = lines[lineNo].split("\\s++",3); if (buf[0].equals("#")) return ; if (buf[1].equals("JUMP")) { // jump : 3-word inst. System.out.printf("F%02X\n",labels.get(buf[2]+":")); } else if (buf[1].equals("CAL")) { // Extended inst.: 2 words if (buf[2].equals("RSTO")) { System.out.println("E0"); } else if (buf[2].equals("SETR")) { System.out.println("E1"); } else if (buf[2].equals("RSTR")) { System.out.println("E2"); } else if (buf[2].equals("CMPL")) { System.out.println("E4"); } else if (buf[2].equals("CHNG")) { System.out.println("E5"); } else if (buf[2].equals("SIFT")) { System.out.println("E6"); } else if (buf[2].equals("ENDS")) { System.out.println("E7"); } else if (buf[2].equals("ERRS")) { System.out.println("E8"); } else if (buf[2].equals("SHTS")) { System.out.println("E9"); } else if (buf[2].equals("LONS")) { System.out.println("EA"); } else if (buf[2].equals("SUND")) { System.out.println("EB"); } else if (buf[2].equals("TIMR")) { System.out.println("EC"); } else if (buf[2].equals("DSPR")) { System.out.println("ED"); } else if (buf[2].equals("DEM-")) { System.out.println("EE"); } else if (buf[2].equals("DEM+")) { System.out.println("EF"); } } else if (buf[1].equals("KA")) { // 1-word inst. System.out.println("0"); } else if (buf[1].equals("AO")) { System.out.println("1"); } else if (buf[1].equals("CH")) { System.out.println("2"); } else if (buf[1].equals("CY")) { System.out.println("3"); } else if (buf[1].equals("AM")) { System.out.println("4"); } else if (buf[1].equals("MA")) { System.out.println("5"); } else if (buf[1].equals("M+")) { System.out.println("6"); } else if (buf[1].equals("M-")) { System.out.println("7"); } else if (buf[1].equals("TIA")) { // 2-word inst. System.out.printf("8%s\n",buf[2]); } else if (buf[1].equals("AIA")) { System.out.printf("9%s\n",buf[2]); } else if (buf[1].equals("TIY")) { System.out.printf("A%s\n",buf[2]); } else if (buf[1].equals("AIY")) { System.out.printf("B%s\n",buf[2]); } else if (buf[1].equals("CIA")) { System.out.printf("C%s\n",buf[2]); } else if (buf[1].equals("CIY")) { System.out.printf("D%s\n",buf[2]); } } public static void main(String args[]) { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("# GMC-4 assembler by maechan on 22/Apr/2010"); try{ String buf; while ((buf = br.readLine()) != null) { lines[linecount++] = buf; } }catch(Exception e){ System.out.println("Error!!" + e); System.exit(1); } System.out.println("# Input lines = " + linecount); int i; // 1st-pass for (i=0;i