From 49f5c23e989a2dc60270d6e4667fad1a7a096fcc Mon Sep 17 00:00:00 2001 From: WickedJack99 Date: Sun, 8 May 2022 15:09:45 +0200 Subject: [PATCH] Changed some variablenames to fit rules but whatever --- bin/Control/MyControlModel.class | Bin 10087 -> 10094 bytes bin/Control/MyControlView.class | Bin 10910 -> 10917 bytes bin/Model/Microcontroller/Pic.class | Bin 13834 -> 13847 bytes bin/Model/MyModel.class | Bin 4321 -> 4328 bytes bin/Model/ProgramLoader/ReadProgramFile.class | Bin 4767 -> 4774 bytes documentation/WORD/Dokumentation_Final.docx | Bin 463727 -> 478632 bytes documentation/WORD/~$kumentation_Final.docx | Bin 162 -> 0 bytes src/Control/MyControlModel.java | 4 +- src/Control/MyControlView.java | 10 +- src/Model/Microcontroller/Pic.java | 596 +++++++++--------- src/Model/MyModel.java | 2 +- src/Model/ProgramLoader/ReadProgramFile.java | 4 +- 12 files changed, 308 insertions(+), 308 deletions(-) delete mode 100644 documentation/WORD/~$kumentation_Final.docx diff --git a/bin/Control/MyControlModel.class b/bin/Control/MyControlModel.class index 1661bf8cbad72d637b0e21af1641eb898ec2c373..50ea99c4cbf90fff994dc7719ef63fd35dc287f1 100644 GIT binary patch delta 37 tcmaFv_s(y_99|KD^wg4oqWtut#9ZIh-29?SMh5lCjslXK5AiOQ1OOix4dnm; delta 23 fcmaFo_uOy899}NY^wbj9)Pkb?+|6rw4@v?6du$2K diff --git a/bin/Control/MyControlView.class b/bin/Control/MyControlView.class index b3d78e2fde20d4235d56cc5f10ec9f8ebef8cdfd..116196ae3cd9ae79dd12cedf580b5bcc7be61b1a 100644 GIT binary patch delta 30 mcmbOix-@jdb^$?w^wg4oqWtut#9ZIh-29@-%?AbUN&*1C*9?&W delta 32 ocmZ1)Ixlp?b^(6Q^wbj9)Pkb?Tt)_U4b901L?t#q6*wRX0L3K>p8x;= diff --git a/bin/Model/Microcontroller/Pic.class b/bin/Model/Microcontroller/Pic.class index 149964d3c0cb87d61b9aa090dfcb8ee38ecfb5e5..201f3d28a540d16d93982e76977ae90dc73eb81b 100644 GIT binary patch delta 140 zcmeCmnVvJjk%=#VqLVoXOMXydE+d2V#E0S>K$bNl16%&YdFsMknc+dH>6yhPsYQ$o zjGl}PocR;4X)=lAZ(`(P6%$BLEeR;fPcKT$^-ayqFREl@P}k4|nz7k{t%8e@aq>!m f6+kjb&>Kk36SM)6x51=@5QrTLA~#PGs!#?1Gz}*~ delta 108 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�Y|ZGhj~Y2bHO21;xP_Jx8Wh<)V( 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 diff --git a/documentation/WORD/~$kumentation_Final.docx b/documentation/WORD/~$kumentation_Final.docx deleted file mode 100644 index cdd3000dda290504a7f7552ba7474d0841913cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmd-I&&*57FE3UwG+-bea5024WHRJ2q%h<&lrt1FC@>f@AnWH~h+%MK2moR|h6sjW f1|Kw|xfz^+I!hUffTpAZNd*Q!AYBeug)9#MrT7nn diff --git a/src/Control/MyControlModel.java b/src/Control/MyControlModel.java index 57201c1..4b30554 100644 --- a/src/Control/MyControlModel.java +++ b/src/Control/MyControlModel.java @@ -147,8 +147,8 @@ public class MyControlModel implements ActionListener { } } } - oPIC.getEeprom().setProgramLines(aiProgramLines); - abBreakpoints = new boolean[oPIC.getEeprom().getLengthProgramMemory()]; + oPIC.getProgramMemory().setProgramLines(aiProgramLines); + abBreakpoints = new boolean[oPIC.getProgramMemory().getLengthProgramMemory()]; } private void controlBreakpoints(ActionEvent e) { diff --git a/src/Control/MyControlView.java b/src/Control/MyControlView.java index 836a5f6..9b2779e 100644 --- a/src/Control/MyControlView.java +++ b/src/Control/MyControlView.java @@ -242,23 +242,23 @@ public class MyControlView { } public void setTestFileTable() { - if (oPIC.getEeprom().getProgramLines() != null) { + if (oPIC.getProgramMemory().getProgramLines() != null) { if (oPIC.getRam().get_LastProgramcounter() > -1) { - int[] aiProgList = oPIC.getEeprom().getProgramLines(); + int[] aiProgList = oPIC.getProgramMemory().getProgramLines(); for (int i = 0; i < aiProgList.length; i++) { oMyView.getGUITestFileTable().unmarkLine(aiProgList[i]); } int iProgC = oPIC.getRam().get_Programcounter(); - oMyView.getGUITestFileTable().markLine(oPIC.getEeprom().getIndex(iProgC)); + oMyView.getGUITestFileTable().markLine(oPIC.getProgramMemory().getIndex(iProgC)); } else { - int[] aiProgList = oPIC.getEeprom().getProgramLines(); + int[] aiProgList = oPIC.getProgramMemory().getProgramLines(); for (int i = 0; i < aiProgList.length; i++) { oMyView.getGUITestFileTable().unmarkLine(aiProgList[i]); } - oMyView.getGUITestFileTable().markLine(oPIC.getEeprom().getProgramLine(0)); + oMyView.getGUITestFileTable().markLine(oPIC.getProgramMemory().getProgramLine(0)); } } } diff --git a/src/Model/Microcontroller/Pic.java b/src/Model/Microcontroller/Pic.java index 2fa627a..1484a9f 100755 --- a/src/Model/Microcontroller/Pic.java +++ b/src/Model/Microcontroller/Pic.java @@ -12,41 +12,41 @@ public class Pic { * Parts of PIC. * Objects are written with a large starting letter. */ - private ProgramMemory ProgramMemory; - private Ram Ram; - private Stack Stack; - private int WRegister; - private Time Runtimer; - private Alu ArithmeticLogicUnit; + private ProgramMemory oProgramMemory; + private Ram oRam; + private Stack oStack; + private int iWRegister; + private Time oRuntimer; + private Alu oArithmeticLogicUnit; private Eeprom oEeprom; private int iStateMachineWriteEeprom = 0; public Pic() { //Initialising objects of PIC. - ProgramMemory = new ProgramMemory(); - Ram = new Ram(); - Stack = new Stack(); - Runtimer = new Time(Ram); - WRegister = 0; - ArithmeticLogicUnit = new Alu(); + oProgramMemory = new ProgramMemory(); + oRam = new Ram(); + oStack = new Stack(); + oRuntimer = new Time(oRam); + iWRegister = 0; + oArithmeticLogicUnit = new Alu(); oEeprom = new Eeprom(); - Ram.set_OPTION(0b11111111); - Ram.set_TRISA(0b11111); - Ram.set_TRISB(0b11111111); - Ram.set_STATUS(0b00011000); + oRam.set_OPTION(0b11111111); + oRam.set_TRISA(0b11111); + oRam.set_TRISB(0b11111111); + oRam.set_STATUS(0b00011000); } - public synchronized void resetPIC() { - Ram = new Ram(); - Stack = new Stack(); - Runtimer = new Time(Ram); - WRegister = 0; + public void resetPIC() { + oRam = new Ram(); + oStack = new Stack(); + oRuntimer = new Time(oRam); + iWRegister = 0; - Ram.set_OPTION(0b11111111); - Ram.set_TRISA(0b11111); - Ram.set_TRISB(0b11111111); - Ram.set_STATUS(0b00011000); + oRam.set_OPTION(0b11111111); + oRam.set_TRISA(0b11111); + oRam.set_TRISB(0b11111111); + oRam.set_STATUS(0b00011000); } //Bitmasks to set or get bits (use OR for set and AND for get). @@ -75,28 +75,28 @@ public class Pic { int bitMaskClearBitArray[] = { bitMaskClearBit0, bitMaskClearBit1, bitMaskClearBit2, bitMaskClearBit3, bitMaskClearBit4, bitMaskClearBit5, bitMaskClearBit6, bitMaskClearBit7}; - public synchronized void setWRegister(int value) { - WRegister = value; + public void setWRegister(int value) { + iWRegister = value; } - public synchronized int get_WRegister() { - return WRegister; + public int get_WRegister() { + return iWRegister; } - public synchronized Ram getRam() { - return Ram; + public Ram getRam() { + return oRam; } - public synchronized ProgramMemory getEeprom() { - return ProgramMemory; + public ProgramMemory getProgramMemory() { + return oProgramMemory; } - public synchronized Stack getStack() { - return Stack; + public Stack getStack() { + return oStack; } - public synchronized Time getRuntimer() { - return Runtimer; + public Time getRuntimer() { + return oRuntimer; } public boolean interruptAcknowledged() { @@ -126,7 +126,7 @@ public class Pic { public void InterruptServiceRoutine() { this.getRam().set_GIE(false); - Stack.pushReturnAdressOnStack(this.getRam().get_Programcounter()); + oStack.pushReturnAdressOnStack(this.getRam().get_Programcounter()); this.getRam().set_Programcounter(0x0004); } @@ -139,23 +139,23 @@ public class Pic { */ public void ADDLW(int eightK) { int wRegValue = get_WRegister(); - int result = ArithmeticLogicUnit.calcAddition(eightK, wRegValue, false); + int result = oArithmeticLogicUnit.calcAddition(eightK, wRegValue, false); result &= 255; setWRegister(result); - Ram.set_Carryflag(ArithmeticLogicUnit.getCarryFlag()); - Ram.set_Digitcarryflag(ArithmeticLogicUnit.getDigitCarryFlag()); - Ram.set_Zeroflag(ArithmeticLogicUnit.getZeroFlag()); + oRam.set_Carryflag(oArithmeticLogicUnit.getCarryFlag()); + oRam.set_Digitcarryflag(oArithmeticLogicUnit.getDigitCarryFlag()); + oRam.set_Zeroflag(oArithmeticLogicUnit.getZeroFlag()); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) + oRam.increment_TMR0(); //Each Instruction has to split Programmcounter to PCL and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b11111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b11111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -171,27 +171,27 @@ public class Pic { //If result is zero. if (result == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } //If result is not zero. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //Write result into setWRegister(result); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -206,14 +206,14 @@ public class Pic { //Get Value of int wRegValue = get_WRegister(); //Get Value of RAM-Bank-RP0Bit Address. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Calculate result. - int result = ArithmeticLogicUnit.calcAddition(regFileAddrValue, wRegValue, false); + int result = oArithmeticLogicUnit.calcAddition(regFileAddrValue, wRegValue, false); - Ram.set_Carryflag(ArithmeticLogicUnit.getCarryFlag()); - Ram.set_Digitcarryflag(ArithmeticLogicUnit.getDigitCarryFlag()); - Ram.set_Zeroflag(ArithmeticLogicUnit.getZeroFlag()); + oRam.set_Carryflag(oArithmeticLogicUnit.getCarryFlag()); + oRam.set_Digitcarryflag(oArithmeticLogicUnit.getDigitCarryFlag()); + oRam.set_Zeroflag(oArithmeticLogicUnit.getZeroFlag()); //If the destinationbit is 0, the result is written into the if (destinationBit == 0) { @@ -222,19 +222,19 @@ public class Pic { //If the destinationbit is 1, the result is written into the RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -249,19 +249,19 @@ public class Pic { //Get Value of int wRegValue = get_WRegister(); //Get Value of RAM-Bank-RP0Bit Address. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Calculate result. int result = wRegValue & regFileAddrValue; //If result is zero. if (result == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } //If result is not zero. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //If the destinationbit is 0, the result is written into the @@ -271,19 +271,19 @@ public class Pic { //If the destinationbit is 1, the result is written into the RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -295,25 +295,25 @@ public class Pic { //Get bitmask to clear bit in fileaddress. int bitMask = bitMaskClearBitArray[bitaddress]; //Get Value of RAM-Bank-RP0Bit Address. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Result is bitMask AND value at fileaddress. //(For example bit 0: 11111110 & 11111111 = 11111110). int result = bitMask & regFileAddrValue; //Write result back into fileregister. - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, false); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, false); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -330,32 +330,32 @@ public class Pic { //Get bitmask to AND with fileaddress to get bit. int bitMask = bitMaskSetBitArray[bitaddress]; //Get Value of RAM-Bank-RP0Bit Address. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //If bit at bitaddress is 1, next instruction is executed. if ((bitMask & regFileAddrValue) == bitMask) { //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } } //If bit at bitaddress is 0, next instruction will be replaced by a NOP. else { //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Execute NOP. NOP(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -367,7 +367,7 @@ public class Pic { if ((iStateMachineWriteEeprom == 3) && (bitaddress == 1) && (registerFileAddress == 0x07)) { iStateMachineWriteEeprom = 4; } else if ((iStateMachineWriteEeprom == 4) && (bitaddress == 7) && (registerFileAddress == 0x0B)) { - if (Ram.get_WREN()) { + if (oRam.get_WREN()) { EepromThread oEepromThread = new EepromThread(oEeprom, 1); oEepromThread.run(); } @@ -377,24 +377,24 @@ public class Pic { //Get bitmask to OR with fileaddress to set bit. int bitMask = bitMaskSetBitArray[bitaddress]; //Get Value of RAM-Bank-RP0Bit Address. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Result is bitMask OR file-register-value. int result = bitMask | regFileAddrValue; //Write result into file-register. - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, false); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, false); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -410,32 +410,32 @@ public class Pic { //Get bitmask to AND with fileaddress to get bit. int bitMask = bitMaskSetBitArray[bitaddress]; //Get Value of RAM-Bank-RP0Bit Address. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //If bit at bitaddress is 0, next instruction is executed. if ((bitMask & regFileAddrValue) != bitMask) { //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } } //If bit at bitaddress is 1, next instruction will be replaced by a NOP. else { //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Execute NOP. NOP(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -450,20 +450,20 @@ public class Pic { */ public void CALL(int elevenK) { //Push next instruction on STACK. - Stack.pushReturnAdressOnStack(Ram.get_Programcounter() + 1); + oStack.pushReturnAdressOnStack(oRam.get_Programcounter() + 1); //Set Programmcounter to new address. - Ram.set_Programcounter(elevenK + ((Ram.get_PCLATH() & 0b11000) << 8)); + oRam.set_Programcounter(elevenK + ((oRam.get_PCLATH() & 0b11000) << 8)); //Increment TMR0 if internal instruction cycle assigned to TMR0. - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b11111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b11111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -474,19 +474,19 @@ public class Pic { */ public void CLRF(int registerFileAddress) { //Value at fileregisteraddress is set to zero. - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), 0, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), 0, true); //Zeroflag is set. - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //Each Instruction has to split Programmcounter to PC and PCLATH because Ram can't see RAM. - Ram.set_PCL(Ram.get_Programcounter() & 0b0000011111111); + oRam.set_PCL(oRam.get_Programcounter() & 0b0000011111111); - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -499,14 +499,14 @@ public class Pic { //Set to zero. setWRegister(0); //Zeroflag is set. - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -518,22 +518,22 @@ public class Pic { * set. */ public void CLRWDT() { - Ram.set_TimeOutFlag(true); - Ram.set_PowerDownFlag(true); - Ram.set_PS0(false); - Ram.set_PS1(false); - Ram.set_PS2(false); + oRam.set_TimeOutFlag(true); + oRam.set_PowerDownFlag(true); + oRam.set_PS0(false); + oRam.set_PS1(false); + oRam.set_PS2(false); //Programcounter will be incremented by 1. - Runtimer.resetWDT(); + oRuntimer.resetWDT(); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -546,19 +546,19 @@ public class Pic { */ public void COMF(int destinationBit, int registerFileAddress) { //Get value at registerFileAddress - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Inverts the value. int result = (~regFileAddrValue); //If result is zero, zeroflag is set true. if (result == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } //If result is not zero, zeroflag is set false. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } result &= 255; @@ -570,16 +570,16 @@ public class Pic { //If destinationbit is one, result will be written into fileRegister. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -596,7 +596,7 @@ public class Pic { */ public void DECFSZ(int destinationBit, int registerFileAddress) { //Get value of fileregisteraddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Decrement value by one. regFileAddrValue--; @@ -607,29 +607,29 @@ public class Pic { //If the destinationbit is 1, the decremented value is written bach into the fileregister. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), regFileAddrValue, false); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), regFileAddrValue, false); } //If the dekremented value doesn't equal zero, the next instruction is executed. if (regFileAddrValue != 0) { //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } } //If the dekremented value equals zero, a NOP is executed and the other instruction will be dismissed. else { //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } NOP(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -641,18 +641,18 @@ public class Pic { */ public void DECF(int destinationBit, int registerFileAddress) { //Get value of fileregisteraddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Decrement value by one. regFileAddrValue--; //If dekremented value equals zero, zeroflag is set true. if (regFileAddrValue == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } //If dekremented value doesn't equal zero, zeroflag is set false. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //If value gets smaller than zero it is AND with 255 to become positive, because only values between 0 and 255 are allowed. @@ -667,16 +667,16 @@ public class Pic { //If destinationbit doesn't equal zero, value is written into fileregister. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), regFileAddrValue, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), regFileAddrValue, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -691,15 +691,15 @@ public class Pic { public void GOTO(int elevenK) { //Set Programmcounter to new address. - Ram.set_Programcounter(elevenK + ((Ram.get_PCLATH() & 0b11000) << 8)); + oRam.set_Programcounter(elevenK + ((oRam.get_PCLATH() & 0b11000) << 8)); //Increment TMR0 if internal instruction cycle assigned to TMR0. - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); - Ram.increment_TMR0(); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -712,18 +712,18 @@ public class Pic { */ public void INCF(int destinationBit, int registerFileAddress) { //Get value of fileregisteraddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Increment value by one. regFileAddrValue++; //If value becomes zero, zeroflag is set true. if (regFileAddrValue == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } //If value doesn't become zero, zeroflag is set false. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //If value becomes greater than 255, it will be set to a value between 0 and 255. @@ -738,16 +738,16 @@ public class Pic { //If destinationbit is not 0, value will be written back to RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), regFileAddrValue, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), regFileAddrValue, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -764,7 +764,7 @@ public class Pic { */ public void INCFSZ(int destinationBit, int registerFileAddress) { //Get value of fileregisteraddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Increment value by one. regFileAddrValue++; @@ -780,13 +780,13 @@ public class Pic { //If destinationbit is one, the value is written into RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), regFileAddrValue, false); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), regFileAddrValue, false); } ///Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } //If value is zero, next instruction will not be executed and NOP is executed instead. @@ -795,7 +795,7 @@ public class Pic { NOP(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -811,24 +811,24 @@ public class Pic { //If result is zero, zeroflag is set true. if (result == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } //If result is not zero, zeroflag is set false. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //Set to result. setWRegister(result); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -841,16 +841,16 @@ public class Pic { */ public void IORWF(int destinationBit, int registerFileAddress) { //Result is value OR fileregister-value. - int result = get_WRegister() | Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), + int result = get_WRegister() | oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //If result is zero, zeroflag is set true. if (result == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } //If result is not zero, zeroflag is set false. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //If destinationbit is zero, result is written into @@ -860,16 +860,16 @@ public class Pic { //If destinationbit is not zero, result is written into fileregister. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -889,12 +889,12 @@ public class Pic { setWRegister(eightK); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -911,28 +911,28 @@ public class Pic { public void MOVF(int destinationBit, int registerFileAddress) { //If destinationbit is zero, the value from fileregister is written to if (destinationBit == 0) { - setWRegister(Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress)); + setWRegister(oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress)); } //If destinationbit is one, value will still be in fileregister. //If value in fileregister is zero, zeroflag is set true. - if (Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress) == 0) { - Ram.set_Zeroflag(true); + if (oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress) == 0) { + oRam.set_Zeroflag(true); } //If value in fileregister is not zero, zeroflag is set false. else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -941,24 +941,24 @@ public class Pic { * Move data from W register to file register */ public void MOVWF(int registerFileAddress) { - if ((iStateMachineWriteEeprom == 0) && (WRegister == 0x55) && (registerFileAddress == 0x08)) { + if ((iStateMachineWriteEeprom == 0) && (iWRegister == 0x55) && (registerFileAddress == 0x08)) { iStateMachineWriteEeprom = 1; - } else if ((iStateMachineWriteEeprom == 2) && (WRegister == 0xAA) && (registerFileAddress == 0x08)) { + } else if ((iStateMachineWriteEeprom == 2) && (iWRegister == 0xAA) && (registerFileAddress == 0x08)) { iStateMachineWriteEeprom = 3; } else { iStateMachineWriteEeprom = 0; } //Data from is moved to fileregister. - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), get_WRegister(), false); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), get_WRegister(), false); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -968,13 +968,13 @@ public class Pic { */ public void NOP() { //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); + oRam.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -989,19 +989,19 @@ public class Pic { */ public void RETFIE() { //Set Global Interrupt Enable Bit true. - Ram.set_GIE(true); + oRam.set_GIE(true); //Pop address from STACK. - int returnAddress = Stack.popReturnAdressFromStack(); + int returnAddress = oStack.popReturnAdressFromStack(); //Write returnAddress into programcounter. - Ram.set_Programcounter(returnAddress); + oRam.set_Programcounter(returnAddress); //Increment TMR0 if assigned to TMR0. - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /**OPTION @@ -1011,13 +1011,13 @@ public class Pic { //Nothing happens, only programmcounter gets incremented by 1. //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); + oRam.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } @@ -1035,16 +1035,16 @@ public class Pic { setWRegister(eightK); //Pop address from STACK. - int returnAddress = Stack.popReturnAdressFromStack(); + int returnAddress = oStack.popReturnAdressFromStack(); //Write returnAddress into programcounter. - Ram.set_Programcounter(returnAddress); + oRam.set_Programcounter(returnAddress); //Increment TMR0 if assigned to TMR0. - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1057,16 +1057,16 @@ public class Pic { */ public void RETURN() { //Pop address from STACK. - int returnAddress = Stack.popReturnAdressFromStack(); + int returnAddress = oStack.popReturnAdressFromStack(); //Write returnAddress into programcounter. - Ram.set_Programcounter(returnAddress); + oRam.set_Programcounter(returnAddress); //Increment TMR0 if assigned to TMR0. - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1080,7 +1080,7 @@ public class Pic { */ public void RLF(int destinationBit, int registerFileAddress) { //Get value at fileaddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Shift result to left by one bit. int result = regFileAddrValue << 1; @@ -1092,7 +1092,7 @@ public class Pic { } //If carryflag is true, last bit is set 1. - if (Ram.get_Carryflag() == true) { + if (oRam.get_Carryflag() == true) { result |= 0b00000001; } @@ -1110,19 +1110,19 @@ public class Pic { //If destinationbit is one, result will be written into RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Set value of carryflag. - Ram.set_Carryflag(set_Carryflag); + oRam.set_Carryflag(set_Carryflag); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1137,7 +1137,7 @@ public class Pic { public void RRF(int destinationBit, int registerFileAddress) { //Get value at fileaddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); //Shift result to right by one bit. int result = (regFileAddrValue >> 1) & 255; @@ -1149,7 +1149,7 @@ public class Pic { } //If carryflag is true, first bit is set 1. - if (Ram.get_Carryflag() == true) { + if (oRam.get_Carryflag() == true) { result |= 0b10000000; } @@ -1159,7 +1159,7 @@ public class Pic { } //Set value of carryflag. - Ram.set_Carryflag(set_Carryflag); + oRam.set_Carryflag(set_Carryflag); //If destinationbit is zero, result will be written into if (destinationBit == 0) { @@ -1168,16 +1168,16 @@ public class Pic { //If destinationbit is one, result will be written into RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1196,12 +1196,12 @@ public class Pic { //Not implemented //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1214,22 +1214,22 @@ public class Pic { public void SUBLW(int eightK) { int wRegValue = get_WRegister(); - int result = ArithmeticLogicUnit.calcAddition(eightK, wRegValue, true); + int result = oArithmeticLogicUnit.calcAddition(eightK, wRegValue, true); result &= 255; - Ram.set_Carryflag(ArithmeticLogicUnit.getCarryFlag()); - Ram.set_Digitcarryflag(ArithmeticLogicUnit.getDigitCarryFlag()); - Ram.set_Zeroflag(ArithmeticLogicUnit.getZeroFlag()); + oRam.set_Carryflag(oArithmeticLogicUnit.getCarryFlag()); + oRam.set_Digitcarryflag(oArithmeticLogicUnit.getDigitCarryFlag()); + oRam.set_Zeroflag(oArithmeticLogicUnit.getZeroFlag()); setWRegister(result); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1245,14 +1245,14 @@ public class Pic { int wRegValue = get_WRegister(); //Get value at fileaddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); - int result = ArithmeticLogicUnit.calcAddition(regFileAddrValue, wRegValue, true); + int result = oArithmeticLogicUnit.calcAddition(regFileAddrValue, wRegValue, true); result &= 255; - Ram.set_Carryflag(ArithmeticLogicUnit.getCarryFlag()); - Ram.set_Digitcarryflag(ArithmeticLogicUnit.getDigitCarryFlag()); - Ram.set_Zeroflag(ArithmeticLogicUnit.getZeroFlag()); + oRam.set_Carryflag(oArithmeticLogicUnit.getCarryFlag()); + oRam.set_Digitcarryflag(oArithmeticLogicUnit.getDigitCarryFlag()); + oRam.set_Zeroflag(oArithmeticLogicUnit.getZeroFlag()); //If destinationbit is zero, result will be written into wregister if (destinationBit == 0) { @@ -1261,16 +1261,16 @@ public class Pic { //If destinationbit is one, result will be written into RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1283,7 +1283,7 @@ public class Pic { */ public void SWAPF(int destinationBit, int registerFileAddress) { //Get value at fileaddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); int lowerNibble = regFileAddrValue & 0b00001111; @@ -1298,16 +1298,16 @@ public class Pic { //If destinationbit is one, result will be written into RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, false); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, false); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1327,12 +1327,12 @@ public class Pic { //Nothing happens, only programcounter will be incremented by 1. //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1348,22 +1348,22 @@ public class Pic { int result = wRegValue ^ eightK; if (result == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } setWRegister(result); //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } /** @@ -1378,16 +1378,16 @@ public class Pic { int wRegValue = get_WRegister(); //Get value at fileaddress. - int regFileAddrValue = Ram.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(Ram.get_RP0Bit(), registerFileAddress); + int regFileAddrValue = oRam.get_Value_Of_Bank_RP0_Bit_Of_Element_At_Adress(oRam.get_RP0Bit(), registerFileAddress); int result = wRegValue ^ regFileAddrValue; if (result == 0) { - Ram.set_Zeroflag(true); + oRam.set_Zeroflag(true); } else { - Ram.set_Zeroflag(false); + oRam.set_Zeroflag(false); } //If destinationbit is zero, result will be written into @@ -1397,15 +1397,15 @@ public class Pic { //If destinationbit is one, result will be written into RAM. else { - Ram.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, Ram.get_RP0Bit(), result, true); + oRam.set_Element_X_Of_Bank_Y_To_Z(registerFileAddress, oRam.get_RP0Bit(), result, true); } //Increment programcounter and TMR0 if assigned to TMR0. - Ram.inkrement_Programcounter(1); - if (Ram.get_T0CS() == false) { - Ram.increment_TMR0(); + oRam.inkrement_Programcounter(1); + if (oRam.get_T0CS() == false) { + oRam.increment_TMR0(); } - Runtimer.incrementRuntime(); + oRuntimer.incrementRuntime(); } } \ No newline at end of file diff --git a/src/Model/MyModel.java b/src/Model/MyModel.java index f710c64..e45bc2b 100644 --- a/src/Model/MyModel.java +++ b/src/Model/MyModel.java @@ -148,7 +148,7 @@ public class MyModel extends Thread { private void step() { InstructionDecoder oBitmask = new InstructionDecoder(); //Makes one step through the eeprom. - oBitmask.decodeAndExecuteCommand(oPIC.getEeprom().getElement(oPIC.getRam().get_Programcounter()), oPIC); + oBitmask.decodeAndExecuteCommand(oPIC.getProgramMemory().getElement(oPIC.getRam().get_Programcounter()), oPIC); //Update view qDataToView.add(oPIC); } diff --git a/src/Model/ProgramLoader/ReadProgramFile.java b/src/Model/ProgramLoader/ReadProgramFile.java index 4a4fec2..83e9932 100644 --- a/src/Model/ProgramLoader/ReadProgramFile.java +++ b/src/Model/ProgramLoader/ReadProgramFile.java @@ -230,9 +230,9 @@ public class ReadProgramFile { int iIndex = oPCodeAsInt[i][2]; //asCommands are written into EEPROM - oPIC.getEeprom().setElementXToValueY(memoryAdress, command); + oPIC.getProgramMemory().setElementXToValueY(memoryAdress, command); - oPIC.getEeprom().setElementXToIndexY(memoryAdress, iIndex); + oPIC.getProgramMemory().setElementXToIndexY(memoryAdress, iIndex); } } }