From ef9065b190b6c4d10fdf05bce7b99d8dfd1ad6a1 Mon Sep 17 00:00:00 2001 From: Meruemon Date: Mon, 25 Apr 2022 00:45:46 +0200 Subject: [PATCH] implemented alu --- bin/Model/Microcontroller/ALU.class | Bin 0 -> 3350 bytes bin/Model/Microcontroller/PIC.class | Bin 13430 -> 13957 bytes src/Model/Microcontroller/ALU.java | 126 ++++++++++++++++++++++++++++ src/Model/Microcontroller/PIC.java | 5 +- 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 bin/Model/Microcontroller/ALU.class create mode 100644 src/Model/Microcontroller/ALU.java diff --git a/bin/Model/Microcontroller/ALU.class b/bin/Model/Microcontroller/ALU.class new file mode 100644 index 0000000000000000000000000000000000000000..bee62dfaf125ec2909191024aff7974b94578310 GIT binary patch literal 3350 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

Hj`fuLiGmQV(2SXJJ z8MhMDgBWRi6&c1I1ocjWdN)D62eXZPG0%7aB?d2N4Zge^-=xAG!E)nqtT&!Or|~^p zZahg)e?U-w7zgNX7tq}S+~ZdV#!;@_d~`?hOFEL5 z=ty3s!Tg2>^IIiuLYJBzb0oY9)|Czq$nB&sgKFDhtSL;-;M?L50p2uiS2Lc|<^E#^R6Zu)RFy}%xG zD86L+ajTgcr|JW)st>qtX8W8svmyMksZ=n34}qOR{sP884j*yl>!EEsY4D!lk16;= zYT6I~1H6O0KJPewX1Z4N4jaoK?HrRD=;w*RR!NcH$W*UuF|BwGi_wpXagD>ogoj0r zdLHW)=MEG3y<)0-FylwBn9(a{t14Ntroij>CQ@FahaA5rf%anWc(%dP;hko%AO7ri zs%E?S19zC&FwOBuHP6LpGY{j;DabdcW0^SvP3A0WZZvM__BQWUKDZg)Eq-%*fyc(((+}>Rvy2MW z%d*)9pV>j&H(`v~i5#;Vlg!PSW^Tbu^D-3* z-hxr)tr%+_Q1U1Aki{_%Nwc@#_!rq8GJQv)6W-Z+vS~yB=3V6bJ(TV17--%HzsZA; zc^Fw{55}9{M4tHwW}A=VJo9mSGy7e}zJXihV!p`rOeKzIN_Gyh_Q@?7y8D{X=h4^& z+!!)W?%rJq{Epw)@#(zpo@({#JZt`#DEyS{dj=Wi5o+h>$TgoO17E-l^CcqiGK$P! zq1gN#>djYik@*K)V*U|r=21k=KgId$_(!_fc{cV)CvVu~uRY}R_-e<3GtlT*usm?| NdC3)}EYrlo{{vU2za#(v literal 13430 zcmcgy34B!5)&JkO%w&1MuuKRfAz@EO413s@BqSI~G9d{|PzfO!!jO=_WCBPP5OGKA zSF{SHV%1NqTkDcgwXM}|Vp|KgRlD0(t+sY=ZM6vB|K9iJF$ozJmrsA>-gn=9_nz}V z|8wrS_s+8?AOAXlc_P~jO<-6>dsC=&Vnw(y(%#tK7LByGwuT}TtICSKFa&%X8n!e{ zY;9<3o)}!aA=DTZ@RWo$McOwCj41E>+me#1>R`nj0lm6`-7*q%t1gs%%$jIJV~apm zf?hSXg~dzQFL_0Es5#sb4MhY*nLtu?XInJ9Q9kA*__TUiWo=nSNj1Ojzcw7LXy|CE z2}O&-(Mi1aVeDCpfVLts!3ISM0@hKmKX3#gCJc~jgPYKYh} z_HLq-y_+a!?>$b3psY}dK+Vz05#5B+6rt%X!r0t3p!ZK2A}jcY@Z+J?2QAriE_y|JNn zc|#;DpPfb{x<1^I*pV44=weBcP)8`rx`4$>oVyyiWs)Q2mWI|&PSLM96s?bYO$L$w z9=57*k(HbG9-1%^uwyI&`RBpJ3__!PDXcsWV^;<6IicBzFOvQ0`^UpvWe z+-2di_{LJ%^KuJ&+{UuXTJ`yr7OskKR6Vb;aIM=|U1X2B*TVJjjjHFTE!^lfmXz2% zKVxBEd}FCV+S;&KuZ@GN+c?-9pl?0SXR7KjGBMloH+i8nXM0&>U7QTS6z|c*d9qX$@(auO)VG|kG z5o}ZQ%OUQxaF^^eNRHlf2(qtm(W3Gd(jtc~w4haf@I?#vN^vA#>sN&$?dw__n&pf8 zEj%D!^ph`&8zPa5V{g7>;mh)knqyJ8IUH>~{aWB*3+oY-T z@U-mibGtiCrf-G9&FiB}=sR1vh%UF?&_nb(Te+SmH8oZ{RkN^?AlYE8P!xIA!uO

WdoMT4bks_L9#ft+wKY(R$lh965JYSzehO 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 diff --git a/src/Model/Microcontroller/ALU.java b/src/Model/Microcontroller/ALU.java new file mode 100644 index 0000000..9947e55 --- /dev/null +++ b/src/Model/Microcontroller/ALU.java @@ -0,0 +1,126 @@ +package Model.Microcontroller; + +public class ALU { + private boolean bCarryFlag = false; + private boolean bDigitCarryFlag = false; + private boolean bZeroFlag = false; + + /** + * + * @param bI1 input 1 bit (x) + * @param bI2 input 2 bit (y) + * @param bOB overflow bit (c in) + * @return [0] output (s), [1] overflow output (c out) + * @source https://de.wikipedia.org/wiki/Volladdierer#/media/Datei:Volladdierer_Aufbau_DIN40900.svg + */ + private boolean[] fullAdder(boolean bI1, boolean bI2, boolean bOB) { + boolean[] abOutput = new boolean[2]; + + abOutput[0] = ((bI1 ^ bI2) ^ bOB); + abOutput[1] = ((bI1 & bI2) | ((bI1 ^ bI2) & bOB)); + + return abOutput; + } + + /** + * + * @param iValue1 + * @param iWRegister + * @param bSubtractionBit + * @return + */ + public int calcValue(int iValue1, int iWRegister, boolean bSubtractionBit) { + //Array with booleans which represent the value of value 1 that will be used for calculation + boolean[] abValue1 = new boolean[8]; + abValue1[0] = ((iValue1 & 0b1) == 0b1); + abValue1[1] = ((iValue1 & 0b10) == 0b10); + abValue1[2] = ((iValue1 & 0b100) == 0b100); + abValue1[3] = ((iValue1 & 0b1000) == 0b1000); + abValue1[4] = ((iValue1 & 0b10000) == 0b10000); + abValue1[5] = ((iValue1 & 0b100000) == 0b100000); + abValue1[6] = ((iValue1 & 0b1000000) == 0b1000000); + abValue1[7] = ((iValue1 & 0b10000000) == 0b10000000); + + //Change boolean to integer + int iSubtractionBitAsInt = bSubtractionBit ? 1 : 0; + + //XOR WRegister-value with subtraction-bit + int iWRegisterXorSB = iWRegister ^ (0b11111111 * iSubtractionBitAsInt); + + //Boolean array which represents the value of the XOR-ed wregister + boolean[] abValue2 = new boolean[8]; + abValue2[0] = ((iWRegisterXorSB & 0b1) == 0b1); + abValue2[1] = ((iWRegisterXorSB & 0b10) == 0b10); + abValue2[2] = ((iWRegisterXorSB & 0b100) == 0b100); + abValue2[3] = ((iWRegisterXorSB & 0b1000) == 0b1000); + abValue2[4] = ((iWRegisterXorSB & 0b10000) == 0b10000); + abValue2[5] = ((iWRegisterXorSB & 0b100000) == 0b100000); + abValue2[6] = ((iWRegisterXorSB & 0b1000000) == 0b1000000); + abValue2[7] = ((iWRegisterXorSB & 0b10000000) == 0b10000000); + + //Boolean array which represents the value of the outcome + boolean[] abOutcome = new boolean[8]; + + //Calculate outcome with fulladder + boolean[] abVals = fullAdder(abValue1[0], abValue2[0], bSubtractionBit); + abOutcome[0] = abVals[0]; + + abVals = fullAdder(abValue1[1], abValue2[1], abVals[1]); + abOutcome[1] = abVals[0]; + + abVals = fullAdder(abValue1[2], abValue2[2], abVals[1]); + abOutcome[2] = abVals[0]; + + abVals = fullAdder(abValue1[3], abValue2[3], abVals[1]); + abOutcome[3] = abVals[0]; + + //Set digitcarry if overflow of lower four bits appers + bDigitCarryFlag = abVals[1]; + + abVals = fullAdder(abValue1[4], abValue2[4], abVals[1]); + abOutcome[4] = abVals[0]; + + abVals = fullAdder(abValue1[5], abValue2[5], abVals[1]); + abOutcome[5] = abVals[0]; + + abVals = fullAdder(abValue1[6], abValue2[6], abVals[1]); + abOutcome[6] = abVals[0]; + + abVals = fullAdder(abValue1[7], abValue2[7], abVals[1]); + abOutcome[7] = abVals[0]; + + //Set carry if overflow of higher four bits appears + bCarryFlag = abVals[1]; + + //Calculate outcome as int + int iOutcome = (0b1 * (abOutcome[0] ? 1 : 0)) + + (0b10 * (abOutcome[1] ? 1 : 0)) + + (0b100 * (abOutcome[2] ? 1 : 0)) + + (0b1000 * (abOutcome[3] ? 1 : 0)) + + (0b10000 * (abOutcome[4] ? 1 : 0)) + + (0b100000 * (abOutcome[5] ? 1 : 0)) + + (0b1000000 * (abOutcome[6] ? 1 : 0)) + + (0b10000000 * (abOutcome[7] ? 1 : 0)); + + //Check whether outcome is zero or not and set/reset zeroflag + if (iOutcome > 0) { + bZeroFlag = false; + } else { + bZeroFlag = true; + } + + return iOutcome; + } + + public boolean getCarryFlag() { + return bCarryFlag; + } + + public boolean getDigitCarryFlag() { + return bDigitCarryFlag; + } + + public boolean getZeroFlag() { + return bZeroFlag; + } +} \ No newline at end of file diff --git a/src/Model/Microcontroller/PIC.java b/src/Model/Microcontroller/PIC.java index c05ca73..82158cf 100755 --- a/src/Model/Microcontroller/PIC.java +++ b/src/Model/Microcontroller/PIC.java @@ -18,6 +18,7 @@ public class PIC { private STACK Stack; private int WRegister; private RUNTIMER Runtimer; + private ALU ArithmeticLogicUnit; public PIC() { //Initialising objects of PIC. @@ -26,6 +27,7 @@ public class PIC { Stack = new STACK(); Runtimer = new RUNTIMER(Ram); WRegister = 0; + ArithmeticLogicUnit = new ALU(); } public synchronized void resetPIC() { @@ -1326,7 +1328,8 @@ public class PIC { int carry = (result & 0b100000000) >> 8; //The lower four bits are bitwise and with 1111b (15d). - int dcResult = (regFileAddrValue & 0x0F) + (wRegValue & 0x0F) + 1; //TODO LST File 3 DC Carry is not set. + System.out.println("regFileAddrValue: " + (regFileAddrValue & 0b1111) + " wRegValue: " + (wRegValue & 0b1111)); + int dcResult = (regFileAddrValue & 0b1111) + (wRegValue & 0b1111); //TODO LST File 3 DC Carry is not set. //If the result is greater than 15, DC-Flag is set true. if (dcResult > 15) {