| 
					
				 | 
			
			
				@@ -0,0 +1,114 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * MCS Media Computer Software
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Copyright 2019 by Wilfried Klaas
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Project: SPSEmulator
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * File: AbstractEmulator.java
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * EMail: W.Klaas@gmx.de
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Created: 31.01.2019 wklaa_000
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * This program is free software: you can redistribute it and/or modify
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * it under the terms of the GNU General Public License as published by
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * the Free Software Foundation, either version 3 of the License, or
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * (at your option) any later version.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * This program is distributed in the hope that it will be useful,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * GNU General Public License for more details.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * You should have received a copy of the GNU General Public License
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package de.mcs.tools.sps.emulator;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import de.mcs.tools.sps.SPSAssembler;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import de.mcs.tools.sps.emulator.model.WebSessionModel;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import de.mcs.tools.sps.emulator.model.WorkingModel;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import de.mcs.tools.sps.emulator.model.WorkingModel.WORKINGSTATE;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import de.mcs.tools.sps.mnemonic.Mnemonic;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author wklaa_000
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public abstract class AbstractEmulator implements Emulator {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private WebSessionModel model;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public AbstractEmulator(WebSessionModel model) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.model = model;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return the model
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public WebSessionModel getModel() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return model;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * starting the emulatiing process. Resetting all registers, addresses,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * stacks, outputs...
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return return true, if everything is ok.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public boolean start() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    WorkingModel work = model.getWork();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setAddress((short) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setRaddress((short) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setPage((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setRegisterA((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setRegisterB((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setRegisterC((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setRegisterD((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setRegisterE((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setRegisterF((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setStack(new ArrayList<>());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    work.setWorkingstate(WORKINGSTATE.EMULATE);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getProgram().setActualLine(0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setOutput1(false);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setOutput2(false);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setOutput3(false);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setOutput4(false);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setPwm1((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setPwm2((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setServo1((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setServo2((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getOutput().setTone((byte) 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * processing the next command from the program
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return return true, if everything is ok.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public boolean next() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // TODO Auto-generated method stub
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public boolean stop() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    model.getWork().setWorkingstate(WORKINGSTATE.NN);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public boolean compile() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SPSAssembler spsAssembler = new SPSAssembler();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    spsAssembler.doWork(source);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    List<Mnemonic> mnemonics = spsAssembler.getMnemonics();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 |