package org.edumips64.client; import com.google.gwt.core.client.EntryPoint; import jsinterop.annotations.JsType; import org.edumips64.core.*; import org.edumips64.core.is.HaltException; import org.edumips64.core.is.InstructionBuilder; import org.edumips64.utils.ConfigStore; import org.edumips64.utils.InMemoryConfigStore; import org.edumips64.utils.io.FileUtils; import org.edumips64.utils.io.NullFileUtils; import java.util.logging.Logger; @JsType(namespace = "jsedumips64") public class WebUi implements EntryPoint { private CPU cpu; private Parser parser; private SymbolTable symTab; private Memory memory; private Dinero dinero; // Executes the program. Returns an empty string on success, or an error message. public String runProgram(String code) { Logger logger = Logger.getLogger("simulator"); logger.info("Running program: " + code); try { cpu.reset(); dinero.reset(); symTab.reset(); logger.info("About to parse it."); parser.doParsing(code); logger.info("Parsed. Running."); cpu.setStatus(CPU.CPUStatus.RUNNING); while (true) { cpu.step(); } } catch (HaltException e) { logger.info("All done."); return ""; } catch (Exception e) { logger.warning("Error: " + e.toString()); return e.toString(); } } public String getMemory() { return memory.toString(); } public String getRegisters() { return cpu.gprString(); } public String getStatistics() { // Ugly, but GWT does not support String.format. return cpu.getCycles() + " cycles executed\n" + cpu.getInstructions() + " instructions executed\n" + cpu.getRAWStalls() + " RAW Stalls\n" + cpu.getWAWStalls() + " WAW Stalls\n" + cpu.getStructuralStallsDivider() + " structural stalls (divider not available)\n" + cpu.getStructuralStallsMemory() + " structural stalls (Memory not available)\n" + "Code Size: " + (memory.getInstructionsNumber() * 4) + " Bytes"; } @Override public void onModuleLoad() {} public void init() { // Simulator initialization. ConfigStore config = new InMemoryConfigStore(ConfigStore.defaults); memory = new Memory(); symTab = new SymbolTable(memory); FileUtils fu = new NullFileUtils(); IOManager iom = new IOManager(fu, memory); cpu = new CPU(memory, config); dinero = new Dinero(memory); InstructionBuilder instructionBuilder = new InstructionBuilder(memory, iom, cpu, dinero, config); parser = new Parser(fu, symTab, memory, instructionBuilder); } }