X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Ffleet%2FMain.java;h=aee832db62c145b57d90f76b1ea3030333c19216;hb=c2326dd4649b1b8ba1a71fcb977d871c8e7c9d3e;hp=78dd785f6e16aea2b90db7d84dde8eb39f2ec247;hpb=533363fb11dca1ceaad4c25e8064bec0843b4d4b;p=fleet.git diff --git a/src/edu/berkeley/fleet/Main.java b/src/edu/berkeley/fleet/Main.java index 78dd785..aee832d 100644 --- a/src/edu/berkeley/fleet/Main.java +++ b/src/edu/berkeley/fleet/Main.java @@ -1,9 +1,10 @@ package edu.berkeley.fleet; import edu.berkeley.sbp.util.ANSI; import edu.berkeley.fleet.api.*; -import edu.berkeley.fleet.slipway.*; -import edu.berkeley.fleet.doc.*; +import edu.berkeley.fleet.fpga.*; import edu.berkeley.fleet.interpreter.*; +import edu.berkeley.fleet.two.*; +import edu.berkeley.fleet.util.*; import java.io.*; import java.util.*; @@ -33,70 +34,75 @@ public class Main { } String target = options.get("target"); - Fleet fleet; - if ("fpga".equals(target)) { - String bitfile = options.get("bitfile"); - fleet = bitfile == null ? new Slipway() : new Slipway(bitfile); - } else if ("sim".equals(target) || "fleetsim".equals(target)) { - fleet = (Fleet)Class.forName("com.sunlabs.fleetsim.fleet.FleetDescription").newInstance(); - } else { - fleet = new Interpreter(); - } + Fleet fleet = Fleet.getDefaultImpl(); if (!"yes".equals(options.get("verbose"))) Log.log = null; if (command.equals("run")) { InputStream is; - if (args.size()==0) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Reader r = new InputStreamReader(System.in); - edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos); - is = new ByteArrayInputStream(baos.toByteArray()); - } else { - String filename = args.get(0); - if (filename.endsWith(".fa") || filename.endsWith(".fleet")) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - Reader r = new InputStreamReader(new FileInputStream(args.get(0))); - edu.berkeley.fleet.assembler.Main.assemble(fleet, r, baos); - is = new ByteArrayInputStream(baos.toByteArray()); - } else { - is = new FileInputStream(args.get(0)); - } - } - run(fleet, is); + String filename = args.get(0); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Reader r = new InputStreamReader(new FileInputStream(args.get(0))); + run(fleet, edu.berkeley.fleet.assembler.Main.assemble(fleet, r)); } else if (command.equals("expand")) { - fleet.expand(new ShipDescription(args.get(0), new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0)))))); + String name = new File(args.get(0)).getName(); + if (name.endsWith(".ship")) + name = name.substring(0, name.length() - ".ship".length()); + if (fleet instanceof edu.berkeley.fleet.fpga.Fpga) { + ((edu.berkeley.fleet.fpga.Fpga)fleet).expand(new ShipDescription(fleet, name, new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0)))))); + } else { + ((Interpreter)fleet).expand(new ShipDescription(fleet, name, new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0)))))); + } } else if (command.equals("doc")) { - Doc.print(); + if (!new File(".tmp").exists()) + new File(".tmp").mkdirs(); + PrintWriter pw = new PrintWriter(new FileOutputStream(".tmp/FleetTwo.Manual.tex")); + BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("doc/archman.tex"))); + for(String ss = br.readLine(); ss!=null; ss = br.readLine()) + pw.println(ss); + for(String f : new File("ships").list()) { + new ShipDescription(fleet, f, new BufferedReader(new InputStreamReader(new FileInputStream(new File("ships/"+f))))).printTeX(pw); + } + pw.println("\\end{document}"); + pw.close(); } else if (command.equals("test")) { - test(fleet, new File(args.get(0))); - } else if (command.equals("asm")) { - String filename = args.get(0); - FileOutputStream out = new FileOutputStream("fleet.fo"); - Reader r = new InputStreamReader(new FileInputStream(args.get(0))); - edu.berkeley.fleet.assembler.Main.assemble(fleet, r, out); - out.flush(); - + FleetProcess fp = fleet.run(null); + try { + for(int i=0; i expect = edu.berkeley.fleet.assembler.Parser.expect; String output = ""; // FIXME: check for extraneous stuff at the end @@ -105,12 +111,23 @@ public class Main { while(true) { if (output.length() > 60 && !failed) output = "..."+output.substring(output.length()-57, output.length()); - if (expect.size() == 0) verdict = "["+ANSI.green("PASS")+"]"; + if (!failed && expect.size() == 0) verdict = "["+ANSI.green("PASS")+"]"; System.out.print("\r" + verdict + " " + ANSI.yellow(title) + ": " + output); if (failed) break; if (expect.size() == 0) break; - long l = fp.readWord(); + //if (now!=0) { System.err.println(); System.err.println(System.currentTimeMillis()-now); now=0;} + long l = unBitSet(fp.recvWord()); long l2 = expect.remove(0); + + // FIXME, this is ugly and not size-independent + if ((l & (1L << 36)) != 0) { + l = l | (0xffffffffffffffffL << 37); + } + // FIXME, this is ugly and not size-independent + if ((l2 & (1L << 36)) != 0) { + l2 = l2 | (0xffffffffffffffffL << 37); + } + if (l!=l2) { verdict = "["+ANSI.red("FAIL")+"]"; output += ANSI.red("0x"+Long.toString(l, 16)) + @@ -122,35 +139,31 @@ public class Main { } } System.out.println(); - } finally { - fp.terminate(); - } } - static void test(Fleet fleet, File f) throws Exception { + static void test(Fleet fleet, FleetProcess fp, File f) throws Exception { if (f.isDirectory()) { for(String s : f.list()) - test(fleet, new File(f.getPath() + File.separatorChar + s)); + test(fleet, fp, new File(f.getPath() + File.separatorChar + s)); return; - } else if (f.getPath().endsWith(".fleet")) { - runTest(fleet, new InputStreamReader(new FileInputStream(f)), f.getPath()); + } else if (f.getPath().endsWith(".fleet") || f.getPath().endsWith(".test")) { + runTest(fleet, fp, new InputStreamReader(new FileInputStream(f)), f.getPath()); } else if (f.getPath().endsWith(".ship")) { - ShipDescription sd = new ShipDescription(f.getName(), new BufferedReader(new InputStreamReader(new FileInputStream(f)))); - runTest(fleet, new StringReader(sd.getSection("test")), sd.getName()); + ShipDescription sd = new ShipDescription(fleet, f.getName(), new BufferedReader(new InputStreamReader(new FileInputStream(f)))); + String testsection = sd.getSection("test"); + if (testsection == null) + System.out.println("no test for " + sd.getName() + "!"); + else if (fleet.getShip(sd.getName(),0)==null && !(fleet instanceof edu.berkeley.fleet.assembler.Parser.FleetWithDynamicShips)) + System.out.println("specified Fleet does not have any ships of type " + sd.getName()); + else + runTest(fleet, fp, new StringReader(testsection), sd.getName()); } } - public static void run(Fleet fleet, InputStream is) throws IOException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buf = new byte[1024]; - while(true) { - int numread = is.read(buf, 0, buf.length); - if (numread==-1) break; - baos.write(buf, 0, numread); - } - FleetProcess client = fleet.run(baos.toByteArray()); + public static void run(Fleet fleet, Instruction[] instructions) throws IOException { + FleetProcess client = fleet.run(instructions); while(true) { - long result = client.readWord(); + long result = unBitSet(client.recvWord()); System.err.print(result); System.err.print(" 0x"); System.err.print(Long.toString(result, 16)); @@ -158,6 +171,17 @@ public class Main { } } + public static long unBitSet(BitVector bs) { + long val = 0; + for(int i=0; i<37; i++) { + if (bs.get(i)) + val |= (1L << i); + } + if ((val & (1L << 36)) != 0) + val = val | (0xffffffffffffffffL << 36); + return val; + } + static void usage() { System.err.println("........................................................................."); System.err.println("Fleet Framework UC Berkeley, Sun Labs / 2007");