From 9d7d1ce5b10bbfede318e64f1ce68166423e1ab4 Mon Sep 17 00:00:00 2001 From: Darkress <30271678+DarkressX@users.noreply.github.com> Date: Sat, 17 Jun 2023 22:44:13 +0200 Subject: [PATCH 1/3] Basic read-only cli --- de/darkress/pic16f84sim/Main.java | 19 +++------ de/darkress/pic16f84sim/cli/Cli.java | 41 +++++++++++++++++++ .../pic16f84sim/microcontroller/Memory.java | 2 +- .../pic16f84sim/microcontroller/Stack.java | 4 -- 4 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 de/darkress/pic16f84sim/cli/Cli.java diff --git a/de/darkress/pic16f84sim/Main.java b/de/darkress/pic16f84sim/Main.java index a293405..f39f487 100644 --- a/de/darkress/pic16f84sim/Main.java +++ b/de/darkress/pic16f84sim/Main.java @@ -1,5 +1,6 @@ package de.darkress.pic16f84sim; +import de.darkress.pic16f84sim.cli.Cli; import de.darkress.pic16f84sim.commands.Command; import de.darkress.pic16f84sim.decoder.CommandDecoder; import de.darkress.pic16f84sim.microcontroller.Cycles; @@ -14,7 +15,7 @@ class Main { public static void main(String[] args) throws InterruptedException { - Command[] program = Parser.parser("de/darkress/pic16f84sim/TestPrograms/TPicSim11.LST"); + Command[] program = Parser.parser("de/darkress/pic16f84sim/TestPrograms/TPicSim10.LST"); Memory.initMemory(); @@ -24,20 +25,10 @@ class Main System.out.println("Resetting device"); Watchdog.resetProgram(); } - System.out.println("Command: " + program[ProgramCounter.getPc()].toString()); + String[] instructionName = program[ProgramCounter.getPc()].getClass().toString().split("\\."); + System.out.println("Command: " + instructionName[instructionName.length -1]); program[ProgramCounter.getPc()].execute(); - - System.out.println(Integer.toHexString(Memory.workingRegister) + " " + Cycles.getCycles()); - System.out.println(Integer.toHexString(Memory.getOption()) + " " + Integer.toHexString(Memory.getTimer())); - - System.out.println(Integer.toHexString(Memory.getRegister(0x20)) + " " + Integer.toHexString(Memory.getRegister(0x21))); - System.out.println(Integer.toHexString(Memory.getRegister(0x22)) + " " + Integer.toHexString(Memory.getRegister(0x23))); - - System.out.println(Integer.toHexString(Memory.getPCLATH()) + " " + Integer.toHexString(Memory.getPCL()) + "\n"); - - if(ProgramCounter.getPc() == 0x10) { - System.out.println(Memory.getRegister(0x20)); - } + Cli.showRegisters(); } } } \ No newline at end of file diff --git a/de/darkress/pic16f84sim/cli/Cli.java b/de/darkress/pic16f84sim/cli/Cli.java new file mode 100644 index 0000000..17ffd6f --- /dev/null +++ b/de/darkress/pic16f84sim/cli/Cli.java @@ -0,0 +1,41 @@ +package de.darkress.pic16f84sim.cli; + +import de.darkress.pic16f84sim.microcontroller.Cycles; +import de.darkress.pic16f84sim.microcontroller.Memory; +import de.darkress.pic16f84sim.microcontroller.Stack; +import de.darkress.pic16f84sim.microcontroller.Timer; + +public class Cli +{ + public static void showRegisters() { + /* + System.out.println(Integer.toHexString(Memory.workingRegister) + " " + Cycles.getCycles()); // WReg ProgramCycles + System.out.println(Integer.toHexString(Memory.getOption()) + " " + Integer.toHexString(Memory.getRegister(0x03))); // Option Status + System.out.println(Integer.toHexString(Memory.getPCLATH()) + " " + Integer.toHexString(Memory.getPCL()) + "\n"); // PCLATH PCL + */ + printf(Memory.workingRegister, "W-Reg", true); + printf(Cycles.getCycles(), "Cycles", false); + System.out.printf("%n"); + printf(Memory.getRegister(0x03), "Status", true); + printf(Memory.getOption(), "Option", true); + System.out.printf("%n"); + printf(Memory.getFSR(), "FSR", true); + printf(Stack.getStackPointer(), "Stackpointer", true); + System.out.printf("%n"); + printf(Memory.getTimer(), "Timer", true); + printf(Timer.getCyclesToTimerIncrease(), "Prescaler", true); + System.out.printf("%n"); + printf(Memory.getPCLATH(), "PCLATH", true); + printf(Memory.getPCL(), "PCL", true); + System.out.printf("%n"); + } + + private static void printf(int value, String description, boolean hex) { + if(hex) { + System.out.printf("%s:\t\t%s\t", description, Integer.toHexString(value)); + } else { + System.out.printf("%s:\t\t%d\t", description, value); + } + + } +} diff --git a/de/darkress/pic16f84sim/microcontroller/Memory.java b/de/darkress/pic16f84sim/microcontroller/Memory.java index 2bd9fbd..224f29a 100644 --- a/de/darkress/pic16f84sim/microcontroller/Memory.java +++ b/de/darkress/pic16f84sim/microcontroller/Memory.java @@ -111,7 +111,7 @@ public class Memory return 1; } - private static int getFSR() + public static int getFSR() { return memory[0x4]; } diff --git a/de/darkress/pic16f84sim/microcontroller/Stack.java b/de/darkress/pic16f84sim/microcontroller/Stack.java index c921e78..67e95aa 100644 --- a/de/darkress/pic16f84sim/microcontroller/Stack.java +++ b/de/darkress/pic16f84sim/microcontroller/Stack.java @@ -18,10 +18,6 @@ public class Stack return stack[stackPointer]; } - public static int peek() - { - return stack[(stackPointer + 7) % 8]; //Get TopOfStack -1 +8 = 7 and modulo 8 to avoid IndexOutOfBound - } private static void pointNext() { -- 2.49.1 From 9319a14d88f5bfb1ec30ab93ed936df9ebe769b1 Mon Sep 17 00:00:00 2001 From: Darkress <30271678+DarkressX@users.noreply.github.com> Date: Sat, 17 Jun 2023 23:21:29 +0200 Subject: [PATCH 2/3] Fixed reset Program on WatchDog Timeout --- de/darkress/pic16f84sim/Main.java | 2 +- de/darkress/pic16f84sim/microcontroller/Watchdog.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/de/darkress/pic16f84sim/Main.java b/de/darkress/pic16f84sim/Main.java index f39f487..38f6fea 100644 --- a/de/darkress/pic16f84sim/Main.java +++ b/de/darkress/pic16f84sim/Main.java @@ -15,7 +15,7 @@ class Main { public static void main(String[] args) throws InterruptedException { - Command[] program = Parser.parser("de/darkress/pic16f84sim/TestPrograms/TPicSim10.LST"); + Command[] program = Parser.parser("de/darkress/pic16f84sim/TestPrograms/TPicSim11.LST"); Memory.initMemory(); diff --git a/de/darkress/pic16f84sim/microcontroller/Watchdog.java b/de/darkress/pic16f84sim/microcontroller/Watchdog.java index ea0b81f..60c5897 100644 --- a/de/darkress/pic16f84sim/microcontroller/Watchdog.java +++ b/de/darkress/pic16f84sim/microcontroller/Watchdog.java @@ -29,7 +29,8 @@ public class Watchdog public static void resetProgram() { - Memory.setRegister(0x03, Memory.getRegister(0x03) | 0x10); + Memory.setRegister(0x03, Memory.getRegister(0x03) | 0x10); //Set !T0 in StatusReg + ProgramCounter.resetProgramCounter(); watchdogTimer = 18000; } -- 2.49.1 From 6772f448ba3ce9f4049e08b2ac52894d40c63dd4 Mon Sep 17 00:00:00 2001 From: Darkress <30271678+DarkressX@users.noreply.github.com> Date: Sat, 17 Jun 2023 23:34:20 +0200 Subject: [PATCH 3/3] removed comment --- de/darkress/pic16f84sim/cli/Cli.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/de/darkress/pic16f84sim/cli/Cli.java b/de/darkress/pic16f84sim/cli/Cli.java index 17ffd6f..d34f9fc 100644 --- a/de/darkress/pic16f84sim/cli/Cli.java +++ b/de/darkress/pic16f84sim/cli/Cli.java @@ -8,11 +8,6 @@ import de.darkress.pic16f84sim.microcontroller.Timer; public class Cli { public static void showRegisters() { - /* - System.out.println(Integer.toHexString(Memory.workingRegister) + " " + Cycles.getCycles()); // WReg ProgramCycles - System.out.println(Integer.toHexString(Memory.getOption()) + " " + Integer.toHexString(Memory.getRegister(0x03))); // Option Status - System.out.println(Integer.toHexString(Memory.getPCLATH()) + " " + Integer.toHexString(Memory.getPCL()) + "\n"); // PCLATH PCL - */ printf(Memory.workingRegister, "W-Reg", true); printf(Cycles.getCycles(), "Cycles", false); System.out.printf("%n"); -- 2.49.1