| 
					
				 | 
			
			
				@@ -24,6 +24,7 @@ package de.mcs.tools.sps.emulator.holtek; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import de.mcs.tools.sps.emulator.AbstractEmulator;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import de.mcs.tools.sps.emulator.Emulator;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import de.mcs.tools.sps.emulator.model.WebSessionModel;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import de.mcs.tools.sps.emulator.model.WorkingModel;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author wklaa_000
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -31,8 +32,282 @@ import de.mcs.tools.sps.emulator.model.WebSessionModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class HoltekEmulator extends AbstractEmulator implements Emulator {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  long[] DELAY_TIMES = { 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 30000, 60000 };
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public HoltekEmulator(WebSessionModel model) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     super(model);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doSetA(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getWork().setRegisterA(data);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doCalc(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    WorkingModel work = getModel().getWork();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 1:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() + 1));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 2:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() - 1));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 3:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() + work.getRegisterB()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 4:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() - work.getRegisterB()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 5:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() * work.getRegisterB()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 6:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() / work.getRegisterB()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 7:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() & work.getRegisterB()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 8:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() | work.getRegisterB()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 9:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (work.getRegisterA() ^ work.getRegisterB()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 10:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (~work.getRegisterA()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doCall(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getWork().setRaddress(getModel().getWork().getAddress());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    doJump(data);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doNop(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doPort(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getOutput().setOutput1((data & 0x01) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getOutput().setOutput2((data & 0x02) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getOutput().setOutput3((data & 0x04) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getOutput().setOutput4((data & 0x08) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doDelay(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      Thread.sleep(DELAY_TIMES[data]);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch (InterruptedException e) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      e.printStackTrace();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doJumpBack(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    short address = getModel().getWork().getAddress();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    address -= data;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (address < 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      address = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getWork().setAddress((short) (address - 1));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doAIs(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    WorkingModel work = getModel().getWork();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 1:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA(work.getRegisterB());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 2:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA(work.getRegisterC());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 3:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA(work.getRegisterD());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 4:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      byte value = (byte) (getModel().getInput().isInput1() ? 1 : 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      value += (byte) (getModel().getInput().isInput2() ? 2 : 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      value += (byte) (getModel().getInput().isInput3() ? 4 : 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      value += (byte) (getModel().getInput().isInput4() ? 8 : 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA(value);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 5:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (getModel().getInput().isInput1() ? 1 : 0));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 6:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (getModel().getInput().isInput2() ? 1 : 0));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 7:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (getModel().getInput().isInput3() ? 1 : 0));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 8:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (getModel().getInput().isInput4() ? 1 : 0));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 9:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (getModel().getInput().getAdc1()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 10:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA((byte) (getModel().getInput().getAdc2()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doIsA(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    WorkingModel work = getModel().getWork();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 0:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      byte temp = work.getRegisterA();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterA(work.getRegisterB());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterB(temp);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 1:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterB(work.getRegisterA());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 2:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterC(work.getRegisterA());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 3:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      work.setRegisterD(work.getRegisterA());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 4:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      doPort(work.getRegisterA());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 5:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getOutput().setOutput1((work.getRegisterA() & 0x01) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 6:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getOutput().setOutput2((work.getRegisterA() & 0x02) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 7:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getOutput().setOutput3((work.getRegisterA() & 0x04) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 8:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getOutput().setOutput4((work.getRegisterA() & 0x08) > 0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 9:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getOutput().setPwm1((byte) ((work.getRegisterA() & 0x0F) << 4));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 10:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getOutput().setPwm2((byte) ((work.getRegisterA() & 0x0F) << 4));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doPage(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    byte value = (byte) (data & 0x07);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getWork().setPage(value);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doJump(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int value = data + (16 * getModel().getWork().getPage());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getModel().getWork().setAddress((short) (value - 1));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doCCount(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    byte value = getModel().getWork().getRegisterC();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (value > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      value -= 1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getWork().setRegisterC(value);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      doJump(data);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doDCount(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    byte value = getModel().getWork().getRegisterD();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (value > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      value -= 1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getWork().setRegisterD(value);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      doJump(data);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doSkip(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    WorkingModel work = getModel().getWork();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    boolean skip = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 1:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = (work.getRegisterA() > work.getRegisterB());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 2:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = (work.getRegisterA() < work.getRegisterB());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 3:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = (work.getRegisterA() == work.getRegisterB());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 4:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = getModel().getInput().isInput1();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 5:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = getModel().getInput().isInput2();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 6:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = getModel().getInput().isInput3();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 7:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = getModel().getInput().isInput4();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 8:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = !getModel().getInput().isInput1();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 9:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = !getModel().getInput().isInput2();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 10:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = !getModel().getInput().isInput3();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 11:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = !getModel().getInput().isInput4();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 12:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = !getModel().getInput().isPrg();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 13:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = !getModel().getInput().isSel();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 14:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = getModel().getInput().isPrg();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case 15:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      skip = getModel().getInput().isSel();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default:
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (skip) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      int value = getModel().getWork().getAddress();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getWork().setAddress((short) (value + 1));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doCallSub(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (data == 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getModel().getWork().setAddress(getModel().getWork().getRaddress());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @Override
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected void doByte(byte data) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }
 
			 |