Browse Source

refactoring

Klaas, Wilfried 5 years ago
parent
commit
f7a8c58373
100 changed files with 2087 additions and 8 deletions
  1. 1 8
      .gitignore
  2. 0 0
      SPSEmulator-client/.classpath
  3. 23 0
      SPSEmulator-client/.project
  4. 158 0
      SPSEmulator-client/pom.xml
  5. 124 0
      SPSEmulator-client/src/test/java/de/mcs/tools/sps/emulator/TestRESTEndpoints.java
  6. 37 0
      SPSEmulator-client/src/test/resources/test.tps
  7. 39 0
      SPSEmulator-model/.classpath
  8. 23 0
      SPSEmulator-model/.project
  9. 0 0
      SPSEmulator-model/examples/Blink.tps
  10. 155 0
      SPSEmulator-model/pom.xml
  11. 0 0
      SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/CommandModel.java
  12. 0 0
      SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/Hardware.java
  13. 0 0
      SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/InputModel.java
  14. 0 0
      SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/OutputModel.java
  15. 0 0
      SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/ProgramModel.java
  16. 0 0
      SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/WebSessionModel.java
  17. 0 0
      SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/WorkingModel.java
  18. 54 0
      SPSEmulator-model/src/main/java/de/mcs/utils/JacksonUtils.java
  19. 8 0
      SPSEmulator-model/src/main/java/de/mcs/utils/package-info.java
  20. 70 0
      SPSEmulator-model/src/test/java/de/mcs/tools/sps/emulator/model/testWebSessionModel.java
  21. 37 0
      SPSEmulator-model/src/test/resources/test.tps
  22. 39 0
      SPSEmulator-service/.classpath
  23. 0 0
      SPSEmulator-service/.project
  24. 0 0
      SPSEmulator-service/LICENSE
  25. 0 0
      SPSEmulator-service/SimpleServo.tps
  26. 34 0
      SPSEmulator-service/examples/Blink.hex
  27. 37 0
      SPSEmulator-service/examples/Blink.tps
  28. 263 0
      SPSEmulator-service/examples/Blink.txt
  29. 0 0
      SPSEmulator-service/examples/Blink2.tps
  30. 0 0
      SPSEmulator-service/examples/BlinkKomment.tps
  31. 0 0
      SPSEmulator-service/examples/Blink_LOOP.tps
  32. 0 0
      SPSEmulator-service/examples/includes/macro_blink.tps
  33. 0 0
      SPSEmulator-service/log/.gitignore
  34. 0 0
      SPSEmulator-service/mcs.keystore
  35. 0 0
      SPSEmulator-service/pom.xml
  36. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/ConvertJsonData2Hex.java
  37. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/ButtonData.java
  38. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/DataData.java
  39. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/ProgramData.java
  40. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/Programs.java
  41. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/SequenceData.java
  42. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/HEXTextOutputter.java
  43. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/IntelHEXOutputter.java
  44. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/Macro.java
  45. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/Outputter.java
  46. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/SPSAssembler.java
  47. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/TPSTextOutputter.java
  48. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/annotations/SPSOutputter.java
  49. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/annotations/package-info.java
  50. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/AbstractEmulator.java
  51. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/BaseHealthCheck.java
  52. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/Emulator.java
  53. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/EmulatorFactory.java
  54. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/WebEmulatorApplication.java
  55. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/WebEmulatorConfiguration.java
  56. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/exceptions/WrongProgramSizeException.java
  57. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/exceptions/package-info.java
  58. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/holtek/HoltekEmulator.java
  59. 86 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/CommandModel.java
  60. 30 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/Hardware.java
  61. 176 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/InputModel.java
  62. 160 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/OutputModel.java
  63. 158 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/ProgramModel.java
  64. 174 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/WebSessionModel.java
  65. 201 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/WorkingModel.java
  66. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/package-info.java
  67. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/resources/EmulatorResource.java
  68. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/exceptions/HardwareException.java
  69. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/exceptions/IllegalArgument.java
  70. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/exceptions/SyntaxError.java
  71. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/ADD.java
  72. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AEQB.java
  73. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AGTB.java
  74. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/ALTB.java
  75. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AND.java
  76. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AbstractMnemonic.java
  77. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BLDA.java
  78. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BSTA.java
  79. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BSUBA.java
  80. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BYTE.java
  81. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/CALL.java
  82. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/CASB.java
  83. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DEC.java
  84. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DEQ0.java
  85. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DEQ1.java
  86. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DFSB.java
  87. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DIV.java
  88. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/HARDWARE.java
  89. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/INC.java
  90. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/JMP.java
  91. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/LDA.java
  92. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/LOOPC.java
  93. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/LOOPD.java
  94. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MOD.java
  95. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MOV.java
  96. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MUL.java
  97. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/Mnemonic.java
  98. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MnemonicFactory.java
  99. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/NOP.java
  100. 0 0
      SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/NOT.java

+ 1 - 8
.gitignore

@@ -1,11 +1,4 @@
-/target/
-
-SimpleServo\.hex
-
-SimpleServo\.txt
-
-*.hex
-
+target
 dependency-reduced-pom\.xml
 
 \.settings/

+ 0 - 0
.classpath → SPSEmulator-client/.classpath


+ 23 - 0
SPSEmulator-client/.project

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>SPSEmulator-client</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

+ 158 - 0
SPSEmulator-client/pom.xml

@@ -0,0 +1,158 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>de.mcs.tools.sps</groupId>
+	<artifactId>SPSEmulator-client</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<description>SPSEmulator-client</description>
+	<name>${project.groupId}:${project.artifactId}</name>
+	<url>http://www.wk-music.de</url>
+	<licenses>
+		<license>
+			<name>The Apache License, Version 2.0</name>
+			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+		</license>
+	</licenses>
+
+	<developers>
+		<developer>
+			<name>Wilfried Klaas</name>
+			<email>w.klaas@gmx.de</email>
+			<organization>MCS</organization>
+			<organizationUrl>http://www.wk-music.de</organizationUrl>
+		</developer>
+	</developers>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<timestamp>${maven.build.timestamp}</timestamp>
+		<maven.build.timestamp.format>dd.mm.yyyy HH:mm</maven.build.timestamp.format>
+		<jackson.version>2.9.6</jackson.version>
+		<jersey.client.version>2.28</jersey.client.version>
+	</properties>
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.3</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.19.1</version>
+				<dependencies>
+					<dependency>
+						<groupId>org.junit.platform</groupId>
+						<artifactId>junit-platform-surefire-provider</artifactId>
+						<version>1.1.0</version>
+					</dependency>
+					<dependency>
+						<groupId>org.junit.jupiter</groupId>
+						<artifactId>junit-jupiter-engine</artifactId>
+						<version>5.1.0</version>
+					</dependency>
+				</dependencies>
+				<configuration>
+					<skipTests>true</skipTests>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>2.6</version>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>de.mcs.tools.sps.SPSAssembler</mainClass>
+							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+							<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+						</manifest>
+						<manifestEntries>
+							<Build-Time>${maven.build.timestamp}</Build-Time>
+							<Application-Name>SPSTools</Application-Name>
+							<Application-Update-Id>72</Application-Update-Id>
+							<Application-Update-Url>http\://wkla.no-ip.biz/downloader/version.php?ID\=73</Application-Update-Url>
+							<Application-Url>http\://wkla.no-ip.biz/</Application-Url>
+							<Implementation-Vendor>MCS, Media Computer Software</Implementation-Vendor>
+						</manifestEntries>
+					</archive>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.4.1</version>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<!-- <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
+							<mainClass></mainClass> </transformer> </transformers> </configuration> -->
+					</execution>
+				</executions>
+			</plugin>
+			<!-- <plugin> <groupId>com.akathist.maven.plugins.launch4j</groupId> <artifactId>launch4j-maven-plugin</artifactId> <version>1.7.24</version> 
+				<executions> <execution> <id>l4j-clui</id> <phase>package</phase> <goals> <goal>launch4j</goal> </goals> <configuration> 
+				<dontWrapJar>false</dontWrapJar> <headerType>console</headerType> <jar>${project.build.directory}/${project.artifactId}-${project.version}.jar</jar> 
+				<outfile>${project.build.directory}/MCSSPSTools.exe</outfile> <downloadUrl>http://java.com/download</downloadUrl> <classPath> 
+				<mainClass>com.howtodoinjava.ApplicationMain</mainClass> <preCp>anything</preCp> </classPath> <icon>src\main\resources\MSA.ico</icon> 
+				<jre> <path>/jre</path> <minVersion>1.8.0</minVersion> <jdkPreference>jreOnly</jdkPreference> </jre> <versionInfo> <fileVersion>1.0.0.0</fileVersion> 
+				<txtFileVersion>${project.version}</txtFileVersion> <fileDescription>${project.name}</fileDescription> <copyright>2018 MCS</copyright> 
+				<productVersion>1.0.0.0</productVersion> <txtProductVersion>1.0.0.0</txtProductVersion> <productName>${project.name}</productName> 
+				<companyName>MCS</companyName> <internalName>MCSSPSTools</internalName> <originalFilename>MCSSPSTools.exe</originalFilename> 
+				</versionInfo> </configuration> </execution> </executions> </plugin> -->
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>net.sourceforge.jmeasurement2</groupId>
+			<artifactId>MCSUtils</artifactId>
+			<version>1.0.152</version>
+		</dependency>
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-api</artifactId>
+			<version>5.1.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>net.sourceforge.jmeasurement2</groupId>
+			<artifactId>JMeasurement</artifactId>
+			<version>1.1.225</version>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish.jersey.core</groupId>
+			<artifactId>jersey-client</artifactId>
+			<version>${jersey.client.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish.jersey.media</groupId>
+			<artifactId>jersey-media-json-jackson</artifactId>
+			<version>${jersey.client.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish.jersey.inject</groupId>
+			<artifactId>jersey-hk2</artifactId>
+			<version>${jersey.client.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>de.mcs.tools.sps</groupId>
+			<artifactId>SPSEmulator-model</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.4</version>
+		</dependency>
+	</dependencies>
+</project>

+ 124 - 0
SPSEmulator-client/src/test/java/de/mcs/tools/sps/emulator/TestRESTEndpoints.java

@@ -0,0 +1,124 @@
+/**
+ * MCS Media Computer Software
+ * Copyright 2019 by Wilfried Klaas
+ * Project: SPSEmulator
+ * File: TestRESTEndpoints.java
+ * EMail: W.Klaas@gmx.de
+ * Created: 03.02.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 static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.List;
+import java.util.Set;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import de.mcs.tools.sps.emulator.model.CommandModel.COMMAND;
+import de.mcs.tools.sps.emulator.model.WebSessionModel;
+
+/**
+ * @author wklaa_000
+ *
+ */
+class TestRESTEndpoints {
+
+  private static Invocation.Builder invocationBuilder;
+
+  @BeforeAll
+  public static void init() throws KeyManagementException, NoSuchAlgorithmException {
+    TrustManager[] noopTrustManager = new TrustManager[] { new X509TrustManager() {
+
+      @Override
+      public X509Certificate[] getAcceptedIssuers() {
+        return null;
+      }
+
+      @Override
+      public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
+      }
+
+      @Override
+      public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
+      }
+    } };
+
+    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
+
+      public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
+        return true;
+      }
+    });
+
+    SSLContext sc = SSLContext.getInstance("ssl");
+    sc.init(null, noopTrustManager, null);
+
+    Client client = ClientBuilder.newBuilder().sslContext(sc).build();
+    WebTarget webTarget = client.target("https://127.0.0.1:8443/emulator");
+    invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
+  }
+
+  /**
+   * @throws java.lang.Exception
+   */
+  @BeforeEach
+  void setUp() throws Exception {
+  }
+
+  @Test
+  void test() throws IOException {
+    WebSessionModel webSessionModel = invocationBuilder.get(WebSessionModel.class);
+    assertNotNull(webSessionModel);
+    System.out.println(webSessionModel.toString());
+
+    try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("test.tps")) {
+      List<String> readLines = IOUtils.readLines(inputStream, "UTF-8");
+      assertNotNull(readLines);
+      webSessionModel.getProgram().setSource(readLines.toArray(new String[0]));
+    }
+
+    Set<COMMAND> availableCommands = webSessionModel.getCommand().getAvailableCommands();
+    assertNotNull(availableCommands);
+    assertTrue(availableCommands.contains(COMMAND.COMPILE));
+    webSessionModel.getCommand().setActualCommand(COMMAND.COMPILE);
+    webSessionModel = invocationBuilder.post(Entity.entity(webSessionModel, MediaType.APPLICATION_JSON),
+        WebSessionModel.class);
+    assertNotNull(webSessionModel);
+    assertTrue(webSessionModel.getProgram().getBin().length > 10);
+    System.out.println(webSessionModel.toString());
+  }
+
+}

+ 37 - 0
SPSEmulator-client/src/test/resources/test.tps

@@ -0,0 +1,37 @@
+.macro blink
+PORT #0B0101
+WAIT 200ms
+PORT #0B1010
+WAIT 200ms
+.endmacro
+
+:loop
+.blink
+RJMP :loop
+/* 
+Kommentar über mehrere Zeilen
+*/
+
+.macro macro1 output time
+PORT output
+WAIT time
+PORT #0x00
+WAIT time
+.endmacro
+
+;.include macro_blink
+:loop1
+.macro1 #0x0f 200ms
+
+PORT #0x0F ;Zeilenkommentar
+WAIT 200ms
+PORT #0x00
+WAIT 200ms
+RJMP :loop1
+
+;DFSB 1
+PORT #0x0F ;Zeilenkommentar
+WAIT 200ms
+PORT #0x00
+WAIT 200ms
+RTR

+ 39 - 0
SPSEmulator-model/.classpath

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="test" value="true"/>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="test" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

+ 23 - 0
SPSEmulator-model/.project

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>SPSEmulator-model</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>

+ 0 - 0
examples/Blink.tps → SPSEmulator-model/examples/Blink.tps


+ 155 - 0
SPSEmulator-model/pom.xml

@@ -0,0 +1,155 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>de.mcs.tools.sps</groupId>
+	<artifactId>SPSEmulator-model</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<description>SPSEmulator-model</description>
+	<name>${project.groupId}:${project.artifactId}</name>
+	<url>http://www.wk-music.de</url>
+	<licenses>
+		<license>
+			<name>The Apache License, Version 2.0</name>
+			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+		</license>
+	</licenses>
+
+	<developers>
+		<developer>
+			<name>Wilfried Klaas</name>
+			<email>w.klaas@gmx.de</email>
+			<organization>MCS</organization>
+			<organizationUrl>http://www.wk-music.de</organizationUrl>
+		</developer>
+	</developers>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<timestamp>${maven.build.timestamp}</timestamp>
+		<maven.build.timestamp.format>dd.mm.yyyy HH:mm</maven.build.timestamp.format>
+		<jackson.version>2.9.8</jackson.version>
+		<jersey.client.version>2.28</jersey.client.version>
+	</properties>
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.3</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.19.1</version>
+				<dependencies>
+					<dependency>
+						<groupId>org.junit.platform</groupId>
+						<artifactId>junit-platform-surefire-provider</artifactId>
+						<version>1.1.0</version>
+					</dependency>
+					<dependency>
+						<groupId>org.junit.jupiter</groupId>
+						<artifactId>junit-jupiter-engine</artifactId>
+						<version>5.1.0</version>
+					</dependency>
+				</dependencies>
+				<configuration>
+					<skipTests>true</skipTests>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>2.6</version>
+				<configuration>
+					<archive>
+						<manifest>
+							<mainClass>de.mcs.tools.sps.SPSAssembler</mainClass>
+							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+							<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+						</manifest>
+						<manifestEntries>
+							<Build-Time>${maven.build.timestamp}</Build-Time>
+							<Application-Name>SPSTools</Application-Name>
+							<Application-Update-Id>72</Application-Update-Id>
+							<Application-Update-Url>http\://wkla.no-ip.biz/downloader/version.php?ID\=73</Application-Update-Url>
+							<Application-Url>http\://wkla.no-ip.biz/</Application-Url>
+							<Implementation-Vendor>MCS, Media Computer Software</Implementation-Vendor>
+						</manifestEntries>
+					</archive>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.4.1</version>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<!-- <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
+							<mainClass></mainClass> </transformer> </transformers> </configuration> -->
+					</execution>
+				</executions>
+			</plugin>
+			<!-- <plugin> <groupId>com.akathist.maven.plugins.launch4j</groupId> <artifactId>launch4j-maven-plugin</artifactId> <version>1.7.24</version> 
+				<executions> <execution> <id>l4j-clui</id> <phase>package</phase> <goals> <goal>launch4j</goal> </goals> <configuration> 
+				<dontWrapJar>false</dontWrapJar> <headerType>console</headerType> <jar>${project.build.directory}/${project.artifactId}-${project.version}.jar</jar> 
+				<outfile>${project.build.directory}/MCSSPSTools.exe</outfile> <downloadUrl>http://java.com/download</downloadUrl> <classPath> 
+				<mainClass>com.howtodoinjava.ApplicationMain</mainClass> <preCp>anything</preCp> </classPath> <icon>src\main\resources\MSA.ico</icon> 
+				<jre> <path>/jre</path> <minVersion>1.8.0</minVersion> <jdkPreference>jreOnly</jdkPreference> </jre> <versionInfo> <fileVersion>1.0.0.0</fileVersion> 
+				<txtFileVersion>${project.version}</txtFileVersion> <fileDescription>${project.name}</fileDescription> <copyright>2018 MCS</copyright> 
+				<productVersion>1.0.0.0</productVersion> <txtProductVersion>1.0.0.0</txtProductVersion> <productName>${project.name}</productName> 
+				<companyName>MCS</companyName> <internalName>MCSSPSTools</internalName> <originalFilename>MCSSPSTools.exe</originalFilename> 
+				</versionInfo> </configuration> </execution> </executions> </plugin> -->
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>net.sourceforge.jmeasurement2</groupId>
+			<artifactId>MCSUtils</artifactId>
+			<version>1.0.152</version>
+		</dependency>
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-api</artifactId>
+			<version>5.1.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>net.sourceforge.jmeasurement2</groupId>
+			<artifactId>JMeasurement</artifactId>
+			<version>1.1.225</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+			<version>3.4</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+			<version>${jackson.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-annotations</artifactId>
+			<version>${jackson.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+			<version>${jackson.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.dataformat</groupId>
+			<artifactId>jackson-dataformat-yaml</artifactId>
+			<version>${jackson.version}</version>
+		</dependency>
+	</dependencies>
+</project>

+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/model/CommandModel.java → SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/CommandModel.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/model/Hardware.java → SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/Hardware.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/model/InputModel.java → SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/InputModel.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/model/OutputModel.java → SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/OutputModel.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/model/ProgramModel.java → SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/ProgramModel.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/model/WebSessionModel.java → SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/WebSessionModel.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/model/WorkingModel.java → SPSEmulator-model/src/main/java/de/mcs/tools/sps/emulator/model/WorkingModel.java


+ 54 - 0
SPSEmulator-model/src/main/java/de/mcs/utils/JacksonUtils.java

@@ -0,0 +1,54 @@
+package de.mcs.utils;
+
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+
+/**
+ * @author wklaa_000
+ *
+ */
+public class JacksonUtils {
+
+  private static ObjectMapper ymlObjectMapper;
+
+  public static ObjectMapper getYmlMapper() {
+    if (ymlObjectMapper == null) {
+      ymlObjectMapper = new ObjectMapper(new YAMLFactory());
+      ymlObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+      ymlObjectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
+      ymlObjectMapper.setSerializationInclusion(Include.NON_NULL);
+    }
+    return ymlObjectMapper;
+  }
+
+  private static ObjectMapper jsonObjectMapper;
+
+  public static ObjectMapper getJsonMapper() {
+    if (jsonObjectMapper == null) {
+      jsonObjectMapper = new ObjectMapper();
+      jsonObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+      jsonObjectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
+      jsonObjectMapper.setSerializationInclusion(Include.NON_NULL);
+    }
+    return jsonObjectMapper;
+  }
+
+  private static class StringMessage {
+    @JsonProperty
+    private String message;
+
+    public StringMessage(String message) {
+      this.message = message;
+    }
+  }
+
+  public static String messageToJson(String message) throws JsonProcessingException {
+    return getJsonMapper().writeValueAsString(new StringMessage(message));
+  }
+}

+ 8 - 0
SPSEmulator-model/src/main/java/de/mcs/utils/package-info.java

@@ -0,0 +1,8 @@
+/**
+ * 
+ */
+/**
+ * @author w.klaas
+ *
+ */
+package de.mcs.utils;

+ 70 - 0
SPSEmulator-model/src/test/java/de/mcs/tools/sps/emulator/model/testWebSessionModel.java

@@ -0,0 +1,70 @@
+/**
+ * MCS Media Computer Software
+ * Copyright 2019 by Wilfried Klaas
+ * Project: SPSEmulator
+ * File: testWebSessionModel.java
+ * EMail: W.Klaas@gmx.de
+ * Created: 29.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.model;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.List;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import de.mcs.utils.JacksonUtils;
+
+/**
+ * @author wklaa_000
+ *
+ */
+class testWebSessionModel {
+
+  /**
+   * @throws java.lang.Exception
+   */
+  @BeforeEach
+  void setUp() throws Exception {
+  }
+
+  @Test
+  void test() throws IOException {
+    WebSessionModel webSessionModel = new WebSessionModel();
+
+    List<String> allLines = Files.readAllLines(new File("examples/Blink.tps").toPath());
+    webSessionModel.getProgram().setSource(allLines.toArray(new String[0]));
+
+    String modelJson = JacksonUtils.getJsonMapper().writeValueAsString(webSessionModel);
+    System.out.println(modelJson);
+    System.out.printf("size: %d\r\n", modelJson.length());
+
+    WebSessionModel sessionModel = JacksonUtils.getJsonMapper().readValue(modelJson, WebSessionModel.class);
+
+    String newModelJson = JacksonUtils.getJsonMapper().writeValueAsString(sessionModel);
+    System.out.println(newModelJson);
+    System.out.printf("size: %d\r\n", newModelJson.length());
+  }
+
+  @Test
+  void testme() {
+    int value = 2;
+    System.out.printf("0x%04x \r\n", value);
+  }
+}

+ 37 - 0
SPSEmulator-model/src/test/resources/test.tps

@@ -0,0 +1,37 @@
+.macro blink
+PORT #0B0101
+WAIT 200ms
+PORT #0B1010
+WAIT 200ms
+.endmacro
+
+:loop
+.blink
+RJMP :loop
+/* 
+Kommentar über mehrere Zeilen
+*/
+
+.macro macro1 output time
+PORT output
+WAIT time
+PORT #0x00
+WAIT time
+.endmacro
+
+;.include macro_blink
+:loop1
+.macro1 #0x0f 200ms
+
+PORT #0x0F ;Zeilenkommentar
+WAIT 200ms
+PORT #0x00
+WAIT 200ms
+RJMP :loop1
+
+;DFSB 1
+PORT #0x0F ;Zeilenkommentar
+WAIT 200ms
+PORT #0x00
+WAIT 200ms
+RTR

+ 39 - 0
SPSEmulator-service/.classpath

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="test" value="true"/>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="test" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

+ 0 - 0
.project → SPSEmulator-service/.project


+ 0 - 0
LICENSE → SPSEmulator-service/LICENSE


+ 0 - 0
SimpleServo.tps → SPSEmulator-service/SimpleServo.tps


+ 34 - 0
SPSEmulator-service/examples/Blink.hex

@@ -0,0 +1,34 @@
+:0800000015271A27341F2710F8
+:08000800271F271027380000F0
+:080010000000000000000000E8
+:080018000000000000000000E0
+:080020000000000000000000D8
+:080028000000000000000000D0
+:080030000000000000000000C8
+:080038000000000000000000C0
+:080040000000000000000000B8
+:080048000000000000000000B0
+:080050000000000000000000A8
+:080058000000000000000000A0
+:08006000000000000000000098
+:08006800000000000000000090
+:08007000000000000000000088
+:08007800000000000000000080
+:08008000000000000000000078
+:08008800000000000000000070
+:08009000000000000000000068
+:08009800000000000000000060
+:0800A000000000000000000058
+:0800A800000000000000000050
+:0800B000000000000000000048
+:0800B800000000000000000040
+:0800C000000000000000000038
+:0800C800000000000000000030
+:0800D000000000000000000028
+:0800D800000000000000000020
+:0800E000000000000000000018
+:0800E800000000000000000010
+:0800F000000000000000000008
+:0800F800000000000000000000
+:06010000E81F271027E0F9
+:00000001FF

+ 37 - 0
SPSEmulator-service/examples/Blink.tps

@@ -0,0 +1,37 @@
+.macro blink
+PORT #0B0101
+WAIT 200ms
+PORT #0B1010
+WAIT 200ms
+.endmacro
+
+:loop
+.blink
+RJMP :loop
+/* 
+Kommentar über mehrere Zeilen
+*/
+
+.macro macro1 output time
+PORT output
+WAIT time
+PORT #0x00
+WAIT time
+.endmacro
+
+.include macro_blink
+:loop1
+.macro1 #0x0f 200ms
+
+PORT #0x0F ;Zeilenkommentar
+WAIT 200ms
+PORT #0x00
+WAIT 200ms
+RJMP :loop1
+
+DFSB 1
+PORT #0x0F ;Zeilenkommentar
+WAIT 200ms
+PORT #0x00
+WAIT 200ms
+RTR

+ 263 - 0
SPSEmulator-service/examples/Blink.txt

@@ -0,0 +1,263 @@
+Addr   BD   Befehl   Daten     Kommentar
+0x000  15   000X     0X0X      PORT #0B0101
+0x001  27   00X0     0XXX      WAIT 200ms
+0x002  1a   000X     X0X0      PORT #0B1010
+0x003  27   00X0     0XXX      WAIT 200ms
+0x004  34   00XX     0X00      RJMP 4
+0x005  1f   000X     XXXX      PORT #0x0f
+0x006  27   00X0     0XXX      WAIT 200ms
+0x007  10   000X     0000      PORT #0x00
+0x008  27   00X0     0XXX      WAIT 200ms
+0x009  1f   000X     XXXX      PORT #0x0F
+0x00a  27   00X0     0XXX      WAIT 200ms
+0x00b  10   000X     0000      PORT #0x00
+0x00c  27   00X0     0XXX      WAIT 200ms
+0x00d  38   00XX     X000      RJMP 8
+0x00e  00   0000     0000       
+0x00f  00   0000     0000       
+0x010  00   0000     0000       
+0x011  00   0000     0000       
+0x012  00   0000     0000       
+0x013  00   0000     0000       
+0x014  00   0000     0000       
+0x015  00   0000     0000       
+0x016  00   0000     0000       
+0x017  00   0000     0000       
+0x018  00   0000     0000       
+0x019  00   0000     0000       
+0x01a  00   0000     0000       
+0x01b  00   0000     0000       
+0x01c  00   0000     0000       
+0x01d  00   0000     0000       
+0x01e  00   0000     0000       
+0x01f  00   0000     0000       
+0x020  00   0000     0000       
+0x021  00   0000     0000       
+0x022  00   0000     0000       
+0x023  00   0000     0000       
+0x024  00   0000     0000       
+0x025  00   0000     0000       
+0x026  00   0000     0000       
+0x027  00   0000     0000       
+0x028  00   0000     0000       
+0x029  00   0000     0000       
+0x02a  00   0000     0000       
+0x02b  00   0000     0000       
+0x02c  00   0000     0000       
+0x02d  00   0000     0000       
+0x02e  00   0000     0000       
+0x02f  00   0000     0000       
+0x030  00   0000     0000       
+0x031  00   0000     0000       
+0x032  00   0000     0000       
+0x033  00   0000     0000       
+0x034  00   0000     0000       
+0x035  00   0000     0000       
+0x036  00   0000     0000       
+0x037  00   0000     0000       
+0x038  00   0000     0000       
+0x039  00   0000     0000       
+0x03a  00   0000     0000       
+0x03b  00   0000     0000       
+0x03c  00   0000     0000       
+0x03d  00   0000     0000       
+0x03e  00   0000     0000       
+0x03f  00   0000     0000       
+0x040  00   0000     0000       
+0x041  00   0000     0000       
+0x042  00   0000     0000       
+0x043  00   0000     0000       
+0x044  00   0000     0000       
+0x045  00   0000     0000       
+0x046  00   0000     0000       
+0x047  00   0000     0000       
+0x048  00   0000     0000       
+0x049  00   0000     0000       
+0x04a  00   0000     0000       
+0x04b  00   0000     0000       
+0x04c  00   0000     0000       
+0x04d  00   0000     0000       
+0x04e  00   0000     0000       
+0x04f  00   0000     0000       
+0x050  00   0000     0000       
+0x051  00   0000     0000       
+0x052  00   0000     0000       
+0x053  00   0000     0000       
+0x054  00   0000     0000       
+0x055  00   0000     0000       
+0x056  00   0000     0000       
+0x057  00   0000     0000       
+0x058  00   0000     0000       
+0x059  00   0000     0000       
+0x05a  00   0000     0000       
+0x05b  00   0000     0000       
+0x05c  00   0000     0000       
+0x05d  00   0000     0000       
+0x05e  00   0000     0000       
+0x05f  00   0000     0000       
+0x060  00   0000     0000       
+0x061  00   0000     0000       
+0x062  00   0000     0000       
+0x063  00   0000     0000       
+0x064  00   0000     0000       
+0x065  00   0000     0000       
+0x066  00   0000     0000       
+0x067  00   0000     0000       
+0x068  00   0000     0000       
+0x069  00   0000     0000       
+0x06a  00   0000     0000       
+0x06b  00   0000     0000       
+0x06c  00   0000     0000       
+0x06d  00   0000     0000       
+0x06e  00   0000     0000       
+0x06f  00   0000     0000       
+0x070  00   0000     0000       
+0x071  00   0000     0000       
+0x072  00   0000     0000       
+0x073  00   0000     0000       
+0x074  00   0000     0000       
+0x075  00   0000     0000       
+0x076  00   0000     0000       
+0x077  00   0000     0000       
+0x078  00   0000     0000       
+0x079  00   0000     0000       
+0x07a  00   0000     0000       
+0x07b  00   0000     0000       
+0x07c  00   0000     0000       
+0x07d  00   0000     0000       
+0x07e  00   0000     0000       
+0x07f  00   0000     0000       
+0x080  00   0000     0000       
+0x081  00   0000     0000       
+0x082  00   0000     0000       
+0x083  00   0000     0000       
+0x084  00   0000     0000       
+0x085  00   0000     0000       
+0x086  00   0000     0000       
+0x087  00   0000     0000       
+0x088  00   0000     0000       
+0x089  00   0000     0000       
+0x08a  00   0000     0000       
+0x08b  00   0000     0000       
+0x08c  00   0000     0000       
+0x08d  00   0000     0000       
+0x08e  00   0000     0000       
+0x08f  00   0000     0000       
+0x090  00   0000     0000       
+0x091  00   0000     0000       
+0x092  00   0000     0000       
+0x093  00   0000     0000       
+0x094  00   0000     0000       
+0x095  00   0000     0000       
+0x096  00   0000     0000       
+0x097  00   0000     0000       
+0x098  00   0000     0000       
+0x099  00   0000     0000       
+0x09a  00   0000     0000       
+0x09b  00   0000     0000       
+0x09c  00   0000     0000       
+0x09d  00   0000     0000       
+0x09e  00   0000     0000       
+0x09f  00   0000     0000       
+0x0a0  00   0000     0000       
+0x0a1  00   0000     0000       
+0x0a2  00   0000     0000       
+0x0a3  00   0000     0000       
+0x0a4  00   0000     0000       
+0x0a5  00   0000     0000       
+0x0a6  00   0000     0000       
+0x0a7  00   0000     0000       
+0x0a8  00   0000     0000       
+0x0a9  00   0000     0000       
+0x0aa  00   0000     0000       
+0x0ab  00   0000     0000       
+0x0ac  00   0000     0000       
+0x0ad  00   0000     0000       
+0x0ae  00   0000     0000       
+0x0af  00   0000     0000       
+0x0b0  00   0000     0000       
+0x0b1  00   0000     0000       
+0x0b2  00   0000     0000       
+0x0b3  00   0000     0000       
+0x0b4  00   0000     0000       
+0x0b5  00   0000     0000       
+0x0b6  00   0000     0000       
+0x0b7  00   0000     0000       
+0x0b8  00   0000     0000       
+0x0b9  00   0000     0000       
+0x0ba  00   0000     0000       
+0x0bb  00   0000     0000       
+0x0bc  00   0000     0000       
+0x0bd  00   0000     0000       
+0x0be  00   0000     0000       
+0x0bf  00   0000     0000       
+0x0c0  00   0000     0000       
+0x0c1  00   0000     0000       
+0x0c2  00   0000     0000       
+0x0c3  00   0000     0000       
+0x0c4  00   0000     0000       
+0x0c5  00   0000     0000       
+0x0c6  00   0000     0000       
+0x0c7  00   0000     0000       
+0x0c8  00   0000     0000       
+0x0c9  00   0000     0000       
+0x0ca  00   0000     0000       
+0x0cb  00   0000     0000       
+0x0cc  00   0000     0000       
+0x0cd  00   0000     0000       
+0x0ce  00   0000     0000       
+0x0cf  00   0000     0000       
+0x0d0  00   0000     0000       
+0x0d1  00   0000     0000       
+0x0d2  00   0000     0000       
+0x0d3  00   0000     0000       
+0x0d4  00   0000     0000       
+0x0d5  00   0000     0000       
+0x0d6  00   0000     0000       
+0x0d7  00   0000     0000       
+0x0d8  00   0000     0000       
+0x0d9  00   0000     0000       
+0x0da  00   0000     0000       
+0x0db  00   0000     0000       
+0x0dc  00   0000     0000       
+0x0dd  00   0000     0000       
+0x0de  00   0000     0000       
+0x0df  00   0000     0000       
+0x0e0  00   0000     0000       
+0x0e1  00   0000     0000       
+0x0e2  00   0000     0000       
+0x0e3  00   0000     0000       
+0x0e4  00   0000     0000       
+0x0e5  00   0000     0000       
+0x0e6  00   0000     0000       
+0x0e7  00   0000     0000       
+0x0e8  00   0000     0000       
+0x0e9  00   0000     0000       
+0x0ea  00   0000     0000       
+0x0eb  00   0000     0000       
+0x0ec  00   0000     0000       
+0x0ed  00   0000     0000       
+0x0ee  00   0000     0000       
+0x0ef  00   0000     0000       
+0x0f0  00   0000     0000       
+0x0f1  00   0000     0000       
+0x0f2  00   0000     0000       
+0x0f3  00   0000     0000       
+0x0f4  00   0000     0000       
+0x0f5  00   0000     0000       
+0x0f6  00   0000     0000       
+0x0f7  00   0000     0000       
+0x0f8  00   0000     0000       
+0x0f9  00   0000     0000       
+0x0fa  00   0000     0000       
+0x0fb  00   0000     0000       
+0x0fc  00   0000     0000       
+0x0fd  00   0000     0000       
+0x0fe  00   0000     0000       
+0x0ff  00   0000     0000       
+0x100  e8   XXX0     X000      DFSB 1
+0x101  1f   000X     XXXX      PORT #0x0F
+0x102  27   00X0     0XXX      WAIT 200ms
+0x103  10   000X     0000      PORT #0x00
+0x104  27   00X0     0XXX      WAIT 200ms
+0x105  e0   XXX0     0000      RTR 

+ 0 - 0
examples/Blink2.tps → SPSEmulator-service/examples/Blink2.tps


+ 0 - 0
examples/BlinkKomment.tps → SPSEmulator-service/examples/BlinkKomment.tps


+ 0 - 0
examples/Blink_LOOP.tps → SPSEmulator-service/examples/Blink_LOOP.tps


+ 0 - 0
examples/includes/macro_blink.tps → SPSEmulator-service/examples/includes/macro_blink.tps


+ 0 - 0
log/.gitignore → SPSEmulator-service/log/.gitignore


+ 0 - 0
mcs.keystore → SPSEmulator-service/mcs.keystore


+ 0 - 0
pom.xml → SPSEmulator-service/pom.xml


+ 0 - 0
src/main/java/de/mcs/tools/midicontroller/ConvertJsonData2Hex.java → SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/ConvertJsonData2Hex.java


+ 0 - 0
src/main/java/de/mcs/tools/midicontroller/data/ButtonData.java → SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/ButtonData.java


+ 0 - 0
src/main/java/de/mcs/tools/midicontroller/data/DataData.java → SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/DataData.java


+ 0 - 0
src/main/java/de/mcs/tools/midicontroller/data/ProgramData.java → SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/ProgramData.java


+ 0 - 0
src/main/java/de/mcs/tools/midicontroller/data/Programs.java → SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/Programs.java


+ 0 - 0
src/main/java/de/mcs/tools/midicontroller/data/SequenceData.java → SPSEmulator-service/src/main/java/de/mcs/tools/midicontroller/data/SequenceData.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/HEXTextOutputter.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/HEXTextOutputter.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/IntelHEXOutputter.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/IntelHEXOutputter.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/Macro.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/Macro.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/Outputter.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/Outputter.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/SPSAssembler.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/SPSAssembler.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/TPSTextOutputter.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/TPSTextOutputter.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/annotations/SPSOutputter.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/annotations/SPSOutputter.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/annotations/package-info.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/annotations/package-info.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/AbstractEmulator.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/AbstractEmulator.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/BaseHealthCheck.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/BaseHealthCheck.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/Emulator.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/Emulator.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/EmulatorFactory.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/EmulatorFactory.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/WebEmulatorApplication.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/WebEmulatorApplication.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/WebEmulatorConfiguration.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/WebEmulatorConfiguration.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/exceptions/WrongProgramSizeException.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/exceptions/WrongProgramSizeException.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/exceptions/package-info.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/exceptions/package-info.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/holtek/HoltekEmulator.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/holtek/HoltekEmulator.java


+ 86 - 0
SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/CommandModel.java

@@ -0,0 +1,86 @@
+package de.mcs.tools.sps.emulator.model;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public class CommandModel {
+
+  public enum COMMAND {
+    START, STOP, NEXT, RESET, COMPILE, NN
+  };
+
+  private Set<COMMAND> availableCommands;
+  private COMMAND actualCommand;
+
+  public CommandModel() {
+    setActualCommand(COMMAND.NN);
+    setAvailableCommands(new HashSet<>());
+    evaluateAvailableCommands(getActualCommand());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder b = new StringBuilder();
+    b.append(String.format("%s:[available: [%s], actual: %s]", this.getClass().getSimpleName(),
+        Arrays.toString(availableCommands.toArray()), actualCommand.name()));
+    return b.toString();
+  }
+
+  public void evaluateAvailableCommands(COMMAND command) {
+    getAvailableCommands().clear();
+    switch (command) {
+    case START:
+      getAvailableCommands().add(COMMAND.NEXT);
+      getAvailableCommands().add(COMMAND.STOP);
+      getAvailableCommands().add(COMMAND.RESET);
+      break;
+    case STOP:
+      getAvailableCommands().add(COMMAND.START);
+      getAvailableCommands().add(COMMAND.RESET);
+      break;
+    case NEXT:
+      getAvailableCommands().add(COMMAND.STOP);
+      getAvailableCommands().add(COMMAND.RESET);
+      break;
+    case COMPILE:
+    case RESET:
+    case NN:
+      getAvailableCommands().add(COMMAND.START);
+      getAvailableCommands().add(COMMAND.COMPILE);
+      break;
+    default:
+      break;
+    }
+  }
+
+  /**
+   * @return the availableCommands
+   */
+  public Set<COMMAND> getAvailableCommands() {
+    return availableCommands;
+  }
+
+  /**
+   * @param availableCommands
+   *          the availableCommands to set
+   */
+  public void setAvailableCommands(Set<COMMAND> availableCommands) {
+    this.availableCommands = availableCommands;
+  }
+
+  /**
+   * @return the actualCommand
+   */
+  public COMMAND getActualCommand() {
+    return actualCommand;
+  }
+
+  /**
+   * @param actualCommand
+   *          the actualCommand to set
+   */
+  public void setActualCommand(COMMAND actualCommand) {
+    this.actualCommand = actualCommand;
+  }
+}

+ 30 - 0
SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/Hardware.java

@@ -0,0 +1,30 @@
+/**
+ * MCS Media Computer Software
+ * Copyright 2019 by Wilfried Klaas
+ * Project: SPSEmulator
+ * File: Hardware.java
+ * EMail: W.Klaas@gmx.de
+ * Created: 29.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.model;
+
+/**
+ * @author wklaa_000
+ *
+ */
+public enum Hardware {
+  HOLTEK, ATMEGA8, ARDUINOSPS, TINYSPS
+}

+ 176 - 0
SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/InputModel.java

@@ -0,0 +1,176 @@
+package de.mcs.tools.sps.emulator.model;
+
+public class InputModel {
+
+  boolean input1;
+  boolean input2;
+  boolean input3;
+  boolean input4;
+
+  boolean sel;
+  boolean prg;
+
+  byte adc1;
+  byte adc2;
+  byte rc1;
+  byte rc2;
+
+  @Override
+  public String toString() {
+    StringBuilder b = new StringBuilder();
+    b.append(String.format(
+        "%s:[Din1: %s, Din2: %s, Din3: %s Din4: %s, SEL: %s, PRG: %s, adc1: %d, adc2: %d, rc1: %d, rc2: %d]",
+        this.getClass().getSimpleName(), input1, input2, input3, input4, sel, prg, adc1, adc2, rc1, rc2));
+    return b.toString();
+  }
+
+  /**
+   * @return the input1
+   */
+  public boolean isInput1() {
+    return input1;
+  }
+
+  /**
+   * @param input1
+   *          the input1 to set
+   */
+  public void setInput1(boolean input1) {
+    this.input1 = input1;
+  }
+
+  /**
+   * @return the input2
+   */
+  public boolean isInput2() {
+    return input2;
+  }
+
+  /**
+   * @param input2
+   *          the input2 to set
+   */
+  public void setInput2(boolean input2) {
+    this.input2 = input2;
+  }
+
+  /**
+   * @return the input3
+   */
+  public boolean isInput3() {
+    return input3;
+  }
+
+  /**
+   * @param input3
+   *          the input3 to set
+   */
+  public void setInput3(boolean input3) {
+    this.input3 = input3;
+  }
+
+  /**
+   * @return the input4
+   */
+  public boolean isInput4() {
+    return input4;
+  }
+
+  /**
+   * @param input4
+   *          the input4 to set
+   */
+  public void setInput4(boolean input4) {
+    this.input4 = input4;
+  }
+
+  /**
+   * @return the sel
+   */
+  public boolean isSel() {
+    return sel;
+  }
+
+  /**
+   * @param sel
+   *          the sel to set
+   */
+  public void setSel(boolean sel) {
+    this.sel = sel;
+  }
+
+  /**
+   * @return the prg
+   */
+  public boolean isPrg() {
+    return prg;
+  }
+
+  /**
+   * @param prg
+   *          the prg to set
+   */
+  public void setPrg(boolean prg) {
+    this.prg = prg;
+  }
+
+  /**
+   * @return the adc1
+   */
+  public byte getAdc1() {
+    return adc1;
+  }
+
+  /**
+   * @param adc1
+   *          the adc1 to set
+   */
+  public void setAdc1(byte adc1) {
+    this.adc1 = adc1;
+  }
+
+  /**
+   * @return the adc2
+   */
+  public byte getAdc2() {
+    return adc2;
+  }
+
+  /**
+   * @param adc2
+   *          the adc2 to set
+   */
+  public void setAdc2(byte adc2) {
+    this.adc2 = adc2;
+  }
+
+  /**
+   * @return the rc1
+   */
+  public byte getRc1() {
+    return rc1;
+  }
+
+  /**
+   * @param rc1
+   *          the rc1 to set
+   */
+  public void setRc1(byte rc1) {
+    this.rc1 = rc1;
+  }
+
+  /**
+   * @return the rc2
+   */
+  public byte getRc2() {
+    return rc2;
+  }
+
+  /**
+   * @param rc2
+   *          the rc2 to set
+   */
+  public void setRc2(byte rc2) {
+    this.rc2 = rc2;
+  }
+}

+ 160 - 0
SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/OutputModel.java

@@ -0,0 +1,160 @@
+package de.mcs.tools.sps.emulator.model;
+
+public class OutputModel {
+
+  boolean output1;
+  boolean output2;
+  boolean output3;
+  boolean output4;
+
+  byte pwm1;
+  byte pwm2;
+  byte servo1;
+  byte servo2;
+
+  byte tone;
+
+  @Override
+  public String toString() {
+    StringBuilder b = new StringBuilder();
+    b.append(String.format(
+        "%s:[Dout1: %s, Dout2: %s, Dout3: %s Dout4: %s, pwm1: %d, pwm2: %d, servo1: %d, servo2: %d, tone: %d]",
+        this.getClass().getSimpleName(), output1, output2, output3, output4, pwm1, pwm2, servo1, servo2, tone));
+    return b.toString();
+  }
+
+  /**
+   * @return the output1
+   */
+  public boolean isOutput1() {
+    return output1;
+  }
+
+  /**
+   * @param output1
+   *          the output1 to set
+   */
+  public void setOutput1(boolean output1) {
+    this.output1 = output1;
+  }
+
+  /**
+   * @return the output2
+   */
+  public boolean isOutput2() {
+    return output2;
+  }
+
+  /**
+   * @param output2
+   *          the output2 to set
+   */
+  public void setOutput2(boolean output2) {
+    this.output2 = output2;
+  }
+
+  /**
+   * @return the output3
+   */
+  public boolean isOutput3() {
+    return output3;
+  }
+
+  /**
+   * @param output3
+   *          the output3 to set
+   */
+  public void setOutput3(boolean output3) {
+    this.output3 = output3;
+  }
+
+  /**
+   * @return the output4
+   */
+  public boolean isOutput4() {
+    return output4;
+  }
+
+  /**
+   * @param output4
+   *          the output4 to set
+   */
+  public void setOutput4(boolean output4) {
+    this.output4 = output4;
+  }
+
+  /**
+   * @return the pwm1
+   */
+  public byte getPwm1() {
+    return pwm1;
+  }
+
+  /**
+   * @param pwm1
+   *          the pwm1 to set
+   */
+  public void setPwm1(byte pwm1) {
+    this.pwm1 = pwm1;
+  }
+
+  /**
+   * @return the pwm2
+   */
+  public byte getPwm2() {
+    return pwm2;
+  }
+
+  /**
+   * @param pwm2
+   *          the pwm2 to set
+   */
+  public void setPwm2(byte pwm2) {
+    this.pwm2 = pwm2;
+  }
+
+  /**
+   * @return the servo1
+   */
+  public byte getServo1() {
+    return servo1;
+  }
+
+  /**
+   * @param servo1
+   *          the servo1 to set
+   */
+  public void setServo1(byte servo1) {
+    this.servo1 = servo1;
+  }
+
+  /**
+   * @return the servo2
+   */
+  public byte getServo2() {
+    return servo2;
+  }
+
+  /**
+   * @param servo2
+   *          the servo2 to set
+   */
+  public void setServo2(byte servo2) {
+    this.servo2 = servo2;
+  }
+
+  /**
+   * @return the tone
+   */
+  public byte getTone() {
+    return tone;
+  }
+
+  /**
+   * @param tone
+   *          the tone to set
+   */
+  public void setTone(byte tone) {
+    this.tone = tone;
+  }
+}

+ 158 - 0
SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/ProgramModel.java

@@ -0,0 +1,158 @@
+package de.mcs.tools.sps.emulator.model;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+import org.apache.commons.lang3.StringUtils;
+
+import de.mcs.utils.SHA256Utils;
+
+public class ProgramModel {
+
+  private Hardware hardware;
+  private String[] source;
+  private String hash;
+  private byte[] bin;
+  private boolean modified;
+  private int actualLine;
+  private int[] bin2SrcLine;
+
+  public ProgramModel() {
+    hardware = Hardware.HOLTEK;
+    modified = false;
+    setActualLine(0);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder b = new StringBuilder();
+    b.append(String.format("%s:[Hardware: %s, Hash: %s, modified: %s, actualLine: %d, Source: \"%s\", bin: 0x%x ]",
+        this.getClass().getSimpleName(), hardware.name(), hash, modified, actualLine,
+        (source != null) ? source[0] + ((source.length > 1) ? "..." : "") : "", (bin != null) ? bin.length : 0));
+    return b.toString();
+  }
+
+  /**
+   * @return the source
+   */
+  public String[] getSource() {
+    return source;
+  }
+
+  /**
+   * @param source
+   *          the source to set
+   */
+  public void setSource(String[] source) {
+    this.source = source;
+  }
+
+  /**
+   * @return the hash
+   */
+  public String getHash() {
+    return hash;
+  }
+
+  /**
+   * @param hash
+   *          the hash to set
+   */
+  public void setHash(String hash) {
+    this.hash = hash;
+  }
+
+  /**
+   * @return the bin
+   */
+  public byte[] getBin() {
+    return bin;
+  }
+
+  /**
+   * @param bin
+   *          the bin to set
+   */
+  public void setBin(byte[] bin) {
+    this.bin = bin;
+  }
+
+  /**
+   * @return the hardware
+   */
+  public Hardware getHardware() {
+    return hardware;
+  }
+
+  /**
+   * @param hardware
+   *          the hardware to set
+   */
+  public void setHardware(Hardware hardware) {
+    this.hardware = hardware;
+  }
+
+  /**
+   * @return the modified
+   */
+  public boolean isModified() {
+    return modified;
+  }
+
+  /**
+   * @param modified
+   *          the modified to set
+   */
+  public void setModified(boolean modified) {
+    this.modified = modified;
+  }
+
+  /**
+   * @return the actualLine
+   */
+  public int getActualLine() {
+    return actualLine;
+  }
+
+  /**
+   * @param actualLine
+   *          the actualLine to set
+   */
+  public void setActualLine(int actualLine) {
+    this.actualLine = actualLine;
+  }
+
+  public boolean rebuildHash() {
+    if ((source != null) && (source.length > 0)) {
+      String sourceStr = Arrays.toString(source);
+      try {
+        String newHash = SHA256Utils.shaBytesToString(SHA256Utils.shaBytes(sourceStr.getBytes("UTF-8")));
+        if (StringUtils.isEmpty(hash)) {
+          this.hash = newHash;
+          this.setModified(false);
+        } else {
+          this.setModified(true);
+        }
+      } catch (UnsupportedEncodingException e) {
+        e.printStackTrace();
+      }
+    }
+    return isModified();
+  }
+
+  /**
+   * @return the bin2SrcLine
+   */
+  public int[] getBin2SrcLine() {
+    return bin2SrcLine;
+  }
+
+  /**
+   * @param bin2SrcLine
+   *          the bin2SrcLine to set
+   */
+  public void setBin2SrcLine(int[] bin2SrcLine) {
+    this.bin2SrcLine = bin2SrcLine;
+  }
+
+}

+ 174 - 0
SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/WebSessionModel.java

@@ -0,0 +1,174 @@
+/**
+ * MCS Media Computer Software
+ * Copyright 2019 by Wilfried Klaas
+ * Project: SPSEmulator
+ * File: WebSessionModel.java
+ * EMail: W.Klaas@gmx.de
+ * Created: 29.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.model;
+
+/**
+ * @author wklaa_000
+ *
+ */
+public class WebSessionModel {
+
+  private ProgramModel program;
+  private CommandModel command;
+  private InputModel input;
+  private OutputModel output;
+  private WorkingModel work;
+  private String message;
+  private String stacktrace;
+  private boolean error;
+
+  public WebSessionModel() {
+    program = new ProgramModel();
+    command = new CommandModel();
+    input = new InputModel();
+    output = new OutputModel();
+    work = new WorkingModel();
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder b = new StringBuilder();
+    b.append(String.format(
+        "%s:[error: %s, message: %s, stacktrace, %s, program: %s, command: %s, input: %s, output: %s, work: %s]",
+        this.getClass().getSimpleName(), error, message, getStacktrace(), program, command, input, output, work));
+    return b.toString();
+  }
+
+  /**
+   * @return the input
+   */
+  public InputModel getInput() {
+    return input;
+  }
+
+  /**
+   * @param input
+   *          the input to set
+   */
+  public void setInput(InputModel input) {
+    this.input = input;
+  }
+
+  /**
+   * @return the output
+   */
+  public OutputModel getOutput() {
+    return output;
+  }
+
+  /**
+   * @param output
+   *          the output to set
+   */
+  public void setOutput(OutputModel output) {
+    this.output = output;
+  }
+
+  /**
+   * @return the work
+   */
+  public WorkingModel getWork() {
+    return work;
+  }
+
+  /**
+   * @param work
+   *          the work to set
+   */
+  public void setWork(WorkingModel work) {
+    this.work = work;
+  }
+
+  /**
+   * @return the program
+   */
+  public ProgramModel getProgram() {
+    return program;
+  }
+
+  /**
+   * @param program
+   *          the program to set
+   */
+  public void setProgram(ProgramModel program) {
+    this.program = program;
+  }
+
+  /**
+   * @return the command
+   */
+  public CommandModel getCommand() {
+    return command;
+  }
+
+  /**
+   * @param command
+   *          the command to set
+   */
+  public void setCommand(CommandModel command) {
+    this.command = command;
+  }
+
+  /**
+   * @return the message
+   */
+  public String getMessage() {
+    return message;
+  }
+
+  /**
+   * @param message
+   *          the message to set
+   */
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+  /**
+   * @return the error
+   */
+  public boolean isError() {
+    return error;
+  }
+
+  /**
+   * @param error
+   *          the error to set
+   */
+  public void setError(boolean error) {
+    this.error = error;
+  }
+
+  /**
+   * @return the stacktrace
+   */
+  public String getStacktrace() {
+    return stacktrace;
+  }
+
+  /**
+   * @param stacktrace the stacktrace to set
+   */
+  public void setStacktrace(String stacktrace) {
+    this.stacktrace = stacktrace;
+  }
+}

+ 201 - 0
SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/model/WorkingModel.java

@@ -0,0 +1,201 @@
+package de.mcs.tools.sps.emulator.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class WorkingModel {
+
+  public enum WORKINGSTATE {
+    NN, EMULATE
+  }
+
+  private byte registerA;
+  private byte registerB;
+  private byte registerC;
+  private byte registerD;
+  private byte registerE;
+  private byte registerF;
+
+  private byte page;
+  private short raddress;
+  private short address;
+
+  private List<Integer> stack = new ArrayList<>();
+  private WORKINGSTATE workingstate;
+
+  @Override
+  public String toString() {
+    StringBuilder b = new StringBuilder();
+    b.append(String.format(
+        "%s:[registerA: 0x%02x, registerB: 0x%02x, registerC: 0x%02x, registerD: 0x%02x, registerE: 0x%02x, registerF: 0x%02x, page: 0x%02x, address: 0x%04x, raddress: 0x%04x, stack: %d ]",
+        this.getClass().getSimpleName(), registerA, registerB, registerC, registerD, registerE, registerF, page,
+        address, raddress, stack.size()));
+    return b.toString();
+  }
+
+  /**
+   * @return the registerA
+   */
+  public byte getRegisterA() {
+    return registerA;
+  }
+
+  /**
+   * @param registerA
+   *          the registerA to set
+   */
+  public void setRegisterA(byte registerA) {
+    this.registerA = registerA;
+  }
+
+  /**
+   * @return the registerB
+   */
+  public byte getRegisterB() {
+    return registerB;
+  }
+
+  /**
+   * @param registerB
+   *          the registerB to set
+   */
+  public void setRegisterB(byte registerB) {
+    this.registerB = registerB;
+  }
+
+  /**
+   * @return the registerC
+   */
+  public byte getRegisterC() {
+    return registerC;
+  }
+
+  /**
+   * @param registerC
+   *          the registerC to set
+   */
+  public void setRegisterC(byte registerC) {
+    this.registerC = registerC;
+  }
+
+  /**
+   * @return the registerD
+   */
+  public byte getRegisterD() {
+    return registerD;
+  }
+
+  /**
+   * @param registerD
+   *          the registerD to set
+   */
+  public void setRegisterD(byte registerD) {
+    this.registerD = registerD;
+  }
+
+  /**
+   * @return the page
+   */
+  public byte getPage() {
+    return page;
+  }
+
+  /**
+   * @param page
+   *          the page to set
+   */
+  public void setPage(byte page) {
+    this.page = page;
+  }
+
+  /**
+   * @return the raddress
+   */
+  public short getRaddress() {
+    return raddress;
+  }
+
+  /**
+   * @param raddress
+   *          the raddress to set
+   */
+  public void setRaddress(short raddress) {
+    this.raddress = raddress;
+  }
+
+  /**
+   * @return the address
+   */
+  public short getAddress() {
+    return address;
+  }
+
+  /**
+   * @param address
+   *          the address to set
+   */
+  public void setAddress(short address) {
+    this.address = address;
+  }
+
+  /**
+   * @return the registerE
+   */
+  public byte getRegisterE() {
+    return registerE;
+  }
+
+  /**
+   * @param registerE
+   *          the registerE to set
+   */
+  public void setRegisterE(byte registerE) {
+    this.registerE = registerE;
+  }
+
+  /**
+   * @return the registerF
+   */
+  public byte getRegisterF() {
+    return registerF;
+  }
+
+  /**
+   * @param registerF
+   *          the registerF to set
+   */
+  public void setRegisterF(byte registerF) {
+    this.registerF = registerF;
+  }
+
+  /**
+   * @return the stack
+   */
+  public List<Integer> getStack() {
+    return stack;
+  }
+
+  /**
+   * @param stack
+   *          the stack to set
+   */
+  public void setStack(List<Integer> stack) {
+    this.stack = stack;
+  }
+
+  /**
+   * @return the workingstate
+   */
+  public WORKINGSTATE getWorkingstate() {
+    return workingstate;
+  }
+
+  /**
+   * @param workingstate
+   *          the workingstate to set
+   */
+  public void setWorkingstate(WORKINGSTATE workingstate) {
+    this.workingstate = workingstate;
+  }
+
+}

+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/package-info.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/package-info.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/emulator/resources/EmulatorResource.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/emulator/resources/EmulatorResource.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/exceptions/HardwareException.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/exceptions/HardwareException.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/exceptions/IllegalArgument.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/exceptions/IllegalArgument.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/exceptions/SyntaxError.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/exceptions/SyntaxError.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/ADD.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/ADD.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/AEQB.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AEQB.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/AGTB.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AGTB.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/ALTB.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/ALTB.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/AND.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AND.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/AbstractMnemonic.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/AbstractMnemonic.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/BLDA.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BLDA.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/BSTA.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BSTA.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/BSUBA.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BSUBA.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/BYTE.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/BYTE.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/CALL.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/CALL.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/CASB.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/CASB.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/DEC.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DEC.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/DEQ0.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DEQ0.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/DEQ1.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DEQ1.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/DFSB.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DFSB.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/DIV.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/DIV.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/HARDWARE.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/HARDWARE.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/INC.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/INC.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/JMP.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/JMP.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/LDA.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/LDA.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/LOOPC.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/LOOPC.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/LOOPD.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/LOOPD.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/MOD.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MOD.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/MOV.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MOV.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/MUL.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MUL.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/Mnemonic.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/Mnemonic.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/MnemonicFactory.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/MnemonicFactory.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/NOP.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/NOP.java


+ 0 - 0
src/main/java/de/mcs/tools/sps/mnemonic/NOT.java → SPSEmulator-service/src/main/java/de/mcs/tools/sps/mnemonic/NOT.java


Some files were not shown because too many files changed in this diff