Răsfoiți Sursa

backup verson

Wilfried Klaas 6 ani în urmă
părinte
comite
86fd268a93
69 a modificat fișierele cu 366 adăugiri și 67 ștergeri
  1. 3 0
      output.hex
  2. 90 0
      src/main/java/de/mcs/tools/IntelHex.java
  3. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/ADC.java
  4. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/ADD.java
  5. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/AEQB.java
  6. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/AGTB.java
  7. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/ALTB.java
  8. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/AND.java
  9. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/ARC.java
  10. 6 0
      src/main/java/de/mcs/tools/sps/mnemonic/AbstractMnemonic.java
  11. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/BAAD.java
  12. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/BARC.java
  13. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/BPWM.java
  14. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/BSET.java
  15. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/BSRV.java
  16. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/BSUBA.java
  17. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/BYTE.java
  18. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/CALL.java
  19. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/CASB.java
  20. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/CSET.java
  21. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DEC.java
  22. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DEQ0.java
  23. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DEQ1.java
  24. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DFSB.java
  25. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DIN.java
  26. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DIV.java
  27. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DOUT.java
  28. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/DSET.java
  29. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/ESET.java
  30. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/FSET.java
  31. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/INC.java
  32. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/JMP.java
  33. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/LOOPC.java
  34. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/LOOPD.java
  35. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/MOD.java
  36. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/MUL.java
  37. 2 0
      src/main/java/de/mcs/tools/sps/mnemonic/Mnemonic.java
  38. 27 5
      src/main/java/de/mcs/tools/sps/mnemonic/MnemonicFactory.java
  39. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/NOP.java
  40. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/NOT.java
  41. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/OR.java
  42. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/PAGE.java
  43. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/PEND.java
  44. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/POP.java
  45. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/PORT.java
  46. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/PRG0.java
  47. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/PRG1.java
  48. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/PUSH.java
  49. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/PWM.java
  50. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/REST.java
  51. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/RET.java
  52. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/RJMP.java
  53. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SEL0.java
  54. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SEL1.java
  55. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SET.java
  56. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETB.java
  57. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETC.java
  58. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETD.java
  59. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETE.java
  60. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETF.java
  61. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SKIP0.java
  62. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SRV.java
  63. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SUB.java
  64. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/SWAP.java
  65. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/TONE.java
  66. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/WAIT.java
  67. 1 1
      src/main/java/de/mcs/tools/sps/mnemonic/XOR.java
  68. 21 0
      src/test/java/de/mcs/tools/TestIntelHex.java
  69. 155 0
      src/test/java/de/mcs/tools/TestRaetsel.java

+ 3 - 0
output.hex

@@ -0,0 +1,3 @@
+:080000000001020304050607F8
+:0100080008F7
+:00000001FF

+ 90 - 0
src/main/java/de/mcs/tools/IntelHex.java

@@ -0,0 +1,90 @@
+/**
+ * MCS Media Computer Software
+ * Copyright 2018 by Wilfried Klaas
+ * Project: SPSEmulator
+ * File: IntelHex.java
+ * EMail: W.Klaas@gmx.de
+ * Created: 25.11.2018 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;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+/**
+ * @author wklaa_000
+ *
+ */
+public class IntelHex {
+
+  private int byteCount;
+
+  IntelHex() {
+    byteCount = 8;
+  }
+
+  public void writeHexStream(OutputStream output, byte[] data) {
+    int address = 0;
+    int crc = 0;
+    try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output))) {
+      for (int i = 0; i < data.length; i++) {
+        if ((i % byteCount) == 0) {
+          if (i > 0) {
+            crc = writeCRC(crc, writer);
+          }
+          crc = 0;
+          writer.append(':');
+          if ((data.length - i) > byteCount) {
+            writer.append(String.format("%02X", byteCount));
+            crc += byteCount;
+          } else {
+            writer.append(String.format("%02X", data.length - i));
+            crc += (data.length - i);
+          }
+          writer.append(String.format("%04X", address));
+          crc += address >> 8;
+          crc += address & 0x00FF;
+          writer.append("00");
+        }
+        writer.append(String.format("%02X", data[i]));
+        address++;
+      }
+      writeCRC(crc, writer);
+      crc = 0;
+      writer.append(':');
+      writer.append(String.format("%02X", 0));
+      crc += byteCount;
+      writer.append(String.format("%04X", 0));
+      crc += address >> 8;
+      crc += address & 0x00FF;
+      writer.append("01FF");
+
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  private int writeCRC(int crc, BufferedWriter writer) throws IOException {
+    crc = crc & 0x00FF;
+    crc = crc ^ 0x00FF;
+    crc++;
+    writer.append(String.format("%02X", crc));
+    writer.append("\r\n");
+    return crc;
+  }
+}

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ADC.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class ADC extends AbstractMnemonic implements Mnemonic {
 
-  ADC(String line) {
+  public ADC(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ADD.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class ADD extends AbstractMnemonic implements Mnemonic {
 
-  ADD(String line) {
+  public ADD(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/AEQB.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class AEQB extends AbstractMnemonic implements Mnemonic {
 
-  AEQB(String line) {
+  public AEQB(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/AGTB.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class AGTB extends AbstractMnemonic implements Mnemonic {
 
-  AGTB(String line) {
+  public AGTB(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ALTB.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class ALTB extends AbstractMnemonic implements Mnemonic {
 
-  ALTB(String line) {
+  public ALTB(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/AND.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class AND extends AbstractMnemonic implements Mnemonic {
 
-  AND(String line) {
+  public AND(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ARC.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class ARC extends AbstractMnemonic implements Mnemonic {
 
-  ARC(String line) {
+  public ARC(String line) {
     super(line);
   }
 

+ 6 - 0
src/main/java/de/mcs/tools/sps/mnemonic/AbstractMnemonic.java

@@ -32,6 +32,7 @@ public abstract class AbstractMnemonic implements Mnemonic {
   private String srcLine;
   private String name;
   private String argument;
+  private int lineNumber;
 
   public static String getName(String line) {
     String srcLine = line.trim();
@@ -81,4 +82,9 @@ public abstract class AbstractMnemonic implements Mnemonic {
   public boolean isUsingPage() {
     return false;
   }
+
+  @Override
+  public void setLineNumber(int lineNumber) {
+    this.lineNumber = lineNumber;
+  }
 }

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BAAD.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class BAAD extends AbstractMnemonic implements Mnemonic {
 
-  BAAD(String line) {
+  public BAAD(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BARC.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class BARC extends AbstractMnemonic implements Mnemonic {
 
-  BARC(String line) {
+  public BARC(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BPWM.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class BPWM extends AbstractMnemonic implements Mnemonic {
 
-  BPWM(String line) {
+  public BPWM(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BSET.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class BSET extends AbstractMnemonic implements Mnemonic {
 
-  BSET(String line) {
+  public BSET(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BSRV.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class BSRV extends AbstractMnemonic implements Mnemonic {
 
-  BSRV(String line) {
+  public BSRV(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BSUBA.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class BSUBA extends AbstractMnemonic implements Mnemonic {
 
-  BSUBA(String line) {
+  public BSUBA(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BYTE.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class BYTE extends AbstractMnemonic implements Mnemonic {
 
-  BYTE(String line) {
+  public BYTE(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/CALL.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class CALL extends AbstractMnemonic implements Mnemonic {
 
-  CALL(String line) {
+  public CALL(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/CASB.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class CASB extends AbstractMnemonic implements Mnemonic {
 
-  CASB(String line) {
+  public CASB(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/CSET.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class CSET extends AbstractMnemonic implements Mnemonic {
 
-  CSET(String line) {
+  public CSET(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DEC.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DEC extends AbstractMnemonic implements Mnemonic {
 
-  DEC(String line) {
+  public DEC(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DEQ0.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DEQ0 extends AbstractMnemonic implements Mnemonic {
 
-  DEQ0(String line) {
+  public DEQ0(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DEQ1.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DEQ1 extends AbstractMnemonic implements Mnemonic {
 
-  DEQ1(String line) {
+  public DEQ1(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DFSB.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DFSB extends AbstractMnemonic implements Mnemonic {
 
-  DFSB(String line) {
+  public DFSB(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DIN.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DIN extends AbstractMnemonic implements Mnemonic {
 
-  DIN(String line) {
+  public DIN(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DIV.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DIV extends AbstractMnemonic implements Mnemonic {
 
-  DIV(String line) {
+  public DIV(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DOUT.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DOUT extends AbstractMnemonic implements Mnemonic {
 
-  DOUT(String line) {
+  public DOUT(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DSET.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class DSET extends AbstractMnemonic implements Mnemonic {
 
-  DSET(String line) {
+  public DSET(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ESET.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class ESET extends AbstractMnemonic implements Mnemonic {
 
-  ESET(String line) {
+  public ESET(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/FSET.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class FSET extends AbstractMnemonic implements Mnemonic {
 
-  FSET(String line) {
+  public FSET(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/INC.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class INC extends AbstractMnemonic implements Mnemonic {
 
-  INC(String line) {
+  public INC(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/JMP.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class JMP extends AbstractMnemonic implements Mnemonic {
 
-  JMP(String line) {
+  public JMP(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/LOOPC.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class LOOPC extends AbstractMnemonic implements Mnemonic {
 
-  LOOPC(String line) {
+  public LOOPC(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/LOOPD.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class LOOPD extends AbstractMnemonic implements Mnemonic {
 
-  LOOPD(String line) {
+  public LOOPD(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/MOD.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class MOD extends AbstractMnemonic implements Mnemonic {
 
-  MOD(String line) {
+  public MOD(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/MUL.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class MUL extends AbstractMnemonic implements Mnemonic {
 
-  MUL(String line) {
+  public MUL(String line) {
     super(line);
   }
 

+ 2 - 0
src/main/java/de/mcs/tools/sps/mnemonic/Mnemonic.java

@@ -10,4 +10,6 @@ public interface Mnemonic {
 
   boolean isUsingPage();
 
+  void setLineNumber(int lineNumber);
+
 }

+ 27 - 5
src/main/java/de/mcs/tools/sps/mnemonic/MnemonicFactory.java

@@ -21,6 +21,9 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
 import de.mcs.tools.sps.exceptions.SyntaxError;
 
 /**
@@ -35,14 +38,33 @@ public class MnemonicFactory {
   public static Mnemonic getMnemonic(String line, int lineNumber) throws SyntaxError {
     String name = AbstractMnemonic.getName(line);
     try {
-      Class<?> mnemonicClass = Class.forName("de.mcs.tools.sps.mnemonic." + name);
+      Class<Mnemonic> mnemonicClass = (Class<Mnemonic>) Class.forName("de.mcs.tools.sps.mnemonic." + name);
+      Constructor<Mnemonic> constructor = mnemonicClass.getConstructor(String.class);
+      Mnemonic newInstance = constructor.newInstance(line);
+      newInstance.setLineNumber(lineNumber);
+      return newInstance;
     } catch (ClassNotFoundException e) {
       throw new SyntaxError(String.format("syntax error in line %d. Illegal Mnemonic %s", lineNumber, name));
+    } catch (SecurityException e) {
+      e.printStackTrace();
+    } catch (NoSuchMethodException e) {
+      e.printStackTrace();
+    } catch (InstantiationException e) {
+      e.printStackTrace();
+    } catch (IllegalAccessException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    } catch (IllegalArgumentException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    } catch (InvocationTargetException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
     }
-    if (line.startsWith("NOP")) {
-      return new NOP(line);
-    }
-    return new NOP(line);
+    // if (line.startsWith("NOP")) {
+    // return new NOP(line);
+    // }
+    return null;
   }
 
 }

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/NOP.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class NOP extends AbstractMnemonic implements Mnemonic {
 
-  NOP(String line) {
+  public NOP(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/NOT.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class NOT extends AbstractMnemonic implements Mnemonic {
 
-  NOT(String line) {
+  public NOT(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/OR.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class OR extends AbstractMnemonic implements Mnemonic {
 
-  OR(String line) {
+  public OR(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PAGE.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class PAGE extends AbstractMnemonic implements Mnemonic {
 
-  PAGE(String line) {
+  public PAGE(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PEND.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class PEND extends AbstractMnemonic implements Mnemonic {
 
-  PEND(String line) {
+  public PEND(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/POP.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class POP extends AbstractMnemonic implements Mnemonic {
 
-  POP(String line) {
+  public POP(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PORT.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class PORT extends AbstractMnemonic implements Mnemonic {
 
-  PORT(String line) {
+  public PORT(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PRG0.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class PRG0 extends AbstractMnemonic implements Mnemonic {
 
-  PRG0(String line) {
+  public PRG0(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PRG1.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class PRG1 extends AbstractMnemonic implements Mnemonic {
 
-  PRG1(String line) {
+  public PRG1(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PUSH.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class PUSH extends AbstractMnemonic implements Mnemonic {
 
-  PUSH(String line) {
+  public PUSH(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PWM.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class PWM extends AbstractMnemonic implements Mnemonic {
 
-  PWM(String line) {
+  public PWM(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/REST.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class REST extends AbstractMnemonic implements Mnemonic {
 
-  REST(String line) {
+  public REST(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/RET.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class RET extends AbstractMnemonic implements Mnemonic {
 
-  RET(String line) {
+  public RET(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/RJMP.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class RJMP extends AbstractMnemonic implements Mnemonic {
 
-  RJMP(String line) {
+  public RJMP(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SEL0.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SEL0 extends AbstractMnemonic implements Mnemonic {
 
-  SEL0(String line) {
+  public SEL0(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SEL1.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SEL1 extends AbstractMnemonic implements Mnemonic {
 
-  SEL1(String line) {
+  public SEL1(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SET.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SET extends AbstractMnemonic implements Mnemonic {
 
-  SET(String line) {
+  public SET(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETB.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SETB extends AbstractMnemonic implements Mnemonic {
 
-  SETB(String line) {
+  public SETB(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETC.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SETC extends AbstractMnemonic implements Mnemonic {
 
-  SETC(String line) {
+  public SETC(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETD.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SETD extends AbstractMnemonic implements Mnemonic {
 
-  SETD(String line) {
+  public SETD(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETE.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SETE extends AbstractMnemonic implements Mnemonic {
 
-  SETE(String line) {
+  public SETE(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETF.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SETF extends AbstractMnemonic implements Mnemonic {
 
-  SETF(String line) {
+  public SETF(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SKIP0.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SKIP0 extends AbstractMnemonic implements Mnemonic {
 
-  SKIP0(String line) {
+  public SKIP0(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SRV.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SRV extends AbstractMnemonic implements Mnemonic {
 
-  SRV(String line) {
+  public SRV(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SUB.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SUB extends AbstractMnemonic implements Mnemonic {
 
-  SUB(String line) {
+  public SUB(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SWAP.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class SWAP extends AbstractMnemonic implements Mnemonic {
 
-  SWAP(String line) {
+  public SWAP(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/TONE.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class TONE extends AbstractMnemonic implements Mnemonic {
 
-  TONE(String line) {
+  public TONE(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/WAIT.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class WAIT extends AbstractMnemonic implements Mnemonic {
 
-  WAIT(String line) {
+  public WAIT(String line) {
     super(line);
   }
 

+ 1 - 1
src/main/java/de/mcs/tools/sps/mnemonic/XOR.java

@@ -27,7 +27,7 @@ package de.mcs.tools.sps.mnemonic;
  */
 public class XOR extends AbstractMnemonic implements Mnemonic {
 
-  XOR(String line) {
+  public XOR(String line) {
     super(line);
   }
 

+ 21 - 0
src/test/java/de/mcs/tools/TestIntelHex.java

@@ -0,0 +1,21 @@
+package de.mcs.tools;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.junit.jupiter.api.Test;
+
+class TestIntelHex {
+
+  @Test
+  void test() throws IOException {
+    File outFile = new File("output.hex");
+    IntelHex intelHex = new IntelHex();
+    byte[] testData = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
+    FileOutputStream output = new FileOutputStream(outFile);
+    intelHex.writeHexStream(output, testData);
+    output.close();
+  }
+
+}

+ 155 - 0
src/test/java/de/mcs/tools/TestRaetsel.java

@@ -0,0 +1,155 @@
+package de.mcs.tools;
+
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Test;
+
+class TestRaetsel {
+
+  @Test
+  void test() {
+    int[] field = new int[8];
+    boolean[] used = new boolean[9];
+
+    for (int i = 0; i < used.length; i++) {
+      used[i] = false;
+    }
+    for (int i = 0; i < 8; i++) {
+      field[i] = -1;
+    }
+
+    field[0] = 3;
+    field[1] = 5;
+    field[2] = 7;
+    field[3] = 1;
+    field[4] = 8;
+    field[5] = 2;
+    field[6] = 4;
+    field[7] = 6;
+
+    outputField(field);
+    if (isSolution(field)) {
+      System.out.println("yeah");
+    }
+  }
+
+  private boolean setNextNumber(int[] myField, boolean[] myUsed) {
+    int[] field = Arrays.copyOf(myField, 8);
+    boolean[] used = Arrays.copyOf(myUsed, 9);
+    for (int number = 1; number < used.length; number++) {
+      // System.out.print('.');
+      if (!used[number]) {
+        for (int i = 0; i < field.length; i++) {
+          if (field[i] <= 0) {
+            field[i] = number;
+            used[number] = true;
+            if (checkField(field)) {
+              // System.out.println(number);
+              // outputField(field);
+              if (setNextNumber(field, used)) {
+                field[i] = -1;
+                used[number] = false;
+              }
+            } else {
+              field[i] = -1;
+              used[number] = false;
+            }
+          }
+        }
+      }
+    }
+
+    if (isSolution(field)) {
+      System.out.println("yeah");
+      outputField(field);
+      return true;
+    }
+    return false;
+  }
+
+  boolean checkField(int[] field) {
+    if (nachbarn(field[0], field[1]))
+      return false;
+
+    if (nachbarn(field[0], field[2]))
+      return false;
+
+    if (nachbarn(field[0], field[3]))
+      return false;
+
+    if (nachbarn(field[0], field[4]))
+      return false;
+
+    if (nachbarn(field[1], field[3]))
+      return false;
+
+    if (nachbarn(field[1], field[4]))
+      return false;
+
+    if (nachbarn(field[1], field[5]))
+      return false;
+
+    if (nachbarn(field[2], field[3]))
+      return false;
+
+    if (nachbarn(field[2], field[6]))
+      return false;
+
+    if (nachbarn(field[3], field[4]))
+      return false;
+
+    if (nachbarn(field[3], field[6]))
+      return false;
+
+    if (nachbarn(field[3], field[7]))
+      return false;
+
+    if (nachbarn(field[4], field[5]))
+      return false;
+
+    if (nachbarn(field[4], field[6]))
+      return false;
+
+    if (nachbarn(field[4], field[7]))
+      return false;
+
+    if (nachbarn(field[5], field[7]))
+      return false;
+
+    if (nachbarn(field[6], field[7]))
+      return false;
+    return true;
+  }
+
+  boolean nachbarn(int x, int y) {
+    return Math.abs(x - y) == 1;
+  }
+
+  void outputField(int[] field) {
+    for (int i = 0; i < field.length; i++) {
+      if (field[i] == -1) {
+        field[i] = 0;
+      }
+    }
+    System.out.println(String.format("  | %s | %s |", getField(field[0]), getField(field[1])));
+    System.out.println(String.format("%s | %s | %s | %s", getField(field[2]), getField(field[3]), getField(field[4]),
+        getField(field[5])));
+    System.out.println(String.format("  | %s | %s |", getField(field[6]), getField(field[7])));
+  }
+
+  String getField(int i) {
+    return i > 0 ? Integer.toString(i) : "X";
+  }
+
+  boolean isSolution(int[] field) {
+    if (checkField(field)) {
+      for (int i = 0; i < field.length; i++) {
+        if (field[i] <= 0) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+}