X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.machine%2Fsrc%2Fnet%2Fmograsim%2Fmachine%2Fmi%2FMicroInstructionMemoryParser.java;h=d049e37776e0ec39466d81b200727110552eb564;hb=93f106a691015a63a6c5af27406b94303385698a;hp=b5117a75b66072a5179d9d3bdf40cc013d5bed24;hpb=259c5b8d38b6ed641fd9b5d78fe20969c67015dc;p=Mograsim.git diff --git a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java index b5117a75..d049e377 100644 --- a/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java +++ b/net.mograsim.machine/src/net/mograsim/machine/mi/MicroInstructionMemoryParser.java @@ -28,29 +28,35 @@ public class MicroInstructionMemoryParser long minAddr = def.getMinimalAddress(); long maxAddr = def.getMaximalAddress(); - + String line; long i = minAddr; try { for (; i <= maxAddr && input.ready() && !"".equals((line = input.readLine())); i++) - memory.setCell(i, parse(miDef, line)); - } catch (IOException e) + { + long iFinal = i; + memory.setCell(i, parse(() -> memory.notifyObservers(iFinal), miDef, line)); + } + } + catch (IOException e) { e.printStackTrace(); } - - for(; i <= maxAddr; i++) - memory.setCell(i, miDef.createDefaultInstruction()); + + for (; i <= maxAddr; i++) + { + long iFinal = i; + memory.setCell(i, miDef.createDefaultInstruction(() -> memory.notifyObservers(iFinal))); + } } - - public static MicroInstruction parse(MicroInstructionDefinition definition, String toParse) + + public static MicroInstruction parse(Runnable updateCallback, MicroInstructionDefinition definition, String toParse) { int size = definition.size(); String[] strings = toParse.split(","); if (size != strings.length) - throw new MicroInstructionMemoryParseException( - "String does not match definition! The number of parameters does not match."); + throw new MicroInstructionMemoryParseException("String does not match definition! The number of parameters does not match."); MicroInstructionParameter[] params = new MicroInstructionParameter[size]; ParameterClassification[] classes = definition.getParameterClassifications(); try @@ -59,8 +65,9 @@ public class MicroInstructionMemoryParser { params[i] = classes[i].parse(strings[i]); } - return new StandardMicroInstruction(params); - } catch (Exception e) + return new StandardMicroInstruction(updateCallback, params); + } + catch (Exception e) { throw new MicroInstructionMemoryParseException(e.getCause()); }