Merge branch 'development' of
[Mograsim.git] / net.mograsim.machine / src / net / mograsim / machine / standard / memory / ModelMemoryWA.java
index 8f40ced..20f27fb 100644 (file)
@@ -2,9 +2,8 @@ package net.mograsim.machine.standard.memory;
 
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.LogicModelModifiable;
 import net.mograsim.logic.model.model.components.ModelComponent;
-import net.mograsim.logic.model.model.components.atomic.ModelAndGate;
 import net.mograsim.logic.model.model.wires.Pin;
 import net.mograsim.logic.model.model.wires.PinUsage;
 import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
@@ -12,36 +11,42 @@ import net.mograsim.logic.model.serializing.IdentifyParams;
 import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
 import net.mograsim.logic.model.snippets.Renderer;
 import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer;
-import net.mograsim.logic.model.snippets.symbolrenderers.CenteredTextSymbolRenderer;
-import net.mograsim.logic.model.snippets.symbolrenderers.CenteredTextSymbolRenderer.CenteredTextParams;
+import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
+import net.mograsim.logic.model.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
 import net.mograsim.logic.model.util.JsonHandler;
 import net.mograsim.machine.MainMemoryDefinition;
 
 public class ModelMemoryWA extends ModelComponent
 {
        private final MainMemoryDefinition              definition;
-       private final Pin                                               addrPin, dataPin, rWPin;
-       private WordAddressableMemoryComponent  memory;
+       private final Pin                                               addrPin, dataPin, rWPin, clock;
+       private CoreWordAddressableMemory               memory;
        private final static int                                width   = 100, height = 300;
        private Renderer                                                symbolRenderer;
        private Renderer                                                outlineRenderer;
 
-       public ModelMemoryWA(ViewModelModifiable model, MainMemoryDefinition definition, String name)
+       public ModelMemoryWA(LogicModelModifiable model, MainMemoryDefinition definition, String name)
        {
-               super(model, name);
+               super(model, name, false);
                this.definition = definition;
 
-               CenteredTextParams renderer1Params = new CenteredTextParams();
-               renderer1Params.text = "RAM";
-               renderer1Params.fontHeight = 24;
-               this.symbolRenderer = new CenteredTextSymbolRenderer(this, renderer1Params);
+               SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
+               rendererParams.centerText = "RAM";
+               rendererParams.centerTextHeight = 24;
+               rendererParams.horizontalComponentCenter = width / 100;
+               rendererParams.pinLabelHeight = 17.5;
+               rendererParams.pinLabelMargin = 2.5;
+               this.symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
                this.outlineRenderer = new DefaultOutlineRenderer(this);
 
                setSize(width, height);
                //TODO check the usages
-               addPin(addrPin = new Pin(this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, 0, 10));
-               addPin(dataPin = new Pin(this, "D", definition.getCellWidth(), PinUsage.TRISTATE, 0, 30));
-               addPin(rWPin = new Pin(this, "RW", 1, PinUsage.INPUT, 0, 50));
+               addPin(addrPin = new Pin(model, this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, 0, 10));
+               addPin(dataPin = new Pin(model, this, "D", definition.getCellWidth(), PinUsage.TRISTATE, 0, 30));
+               addPin(rWPin = new Pin(model, this, "RW", 1, PinUsage.INPUT, 0, 50));
+               addPin(clock = new Pin(model, this, "C", 1, PinUsage.INPUT, 0, 70));
+               
+               init();
        }
 
        public Pin getAddressPin()
@@ -58,8 +63,13 @@ public class ModelMemoryWA extends ModelComponent
        {
                return rWPin;
        }
+       
+       public Pin getClockPin()
+       {
+               return clock;
+       }
 
-       public void setCoreModelBinding(WordAddressableMemoryComponent memory)
+       public void setCoreModelBinding(CoreWordAddressableMemory memory)
        {
                this.memory = memory;
        }
@@ -69,7 +79,7 @@ public class ModelMemoryWA extends ModelComponent
                return definition;
        }
 
-       public WordAddressableMemoryComponent getMemory()
+       public CoreWordAddressableMemory getMemory()
        {
                return memory;
        }
@@ -101,7 +111,7 @@ public class ModelMemoryWA extends ModelComponent
        static
        {
                LogicCoreAdapter.addComponentAdapter(new WordAddressableMemoryAdapter());
-               IndirectModelComponentCreator.setComponentSupplier(ModelAndGate.class.getCanonicalName(), (m, p, n) ->
+               IndirectModelComponentCreator.setComponentSupplier(ModelMemoryWA.class.getCanonicalName(), (m, p, n) ->
                {
                        ModelMemoryWAParams params = JsonHandler.fromJsonTree(p, ModelMemoryWAParams.class);
                        return new ModelMemoryWA(m, MainMemoryDefinition.create(params.addrBits, params.cellWidth, params.minAddr, params.maxAddr), n);