eugeniucarvalho 5 years ago
parent
commit
581b34c817

+ 1 - 1
build/built-jar.properties

@@ -1,4 +1,4 @@
-#Tue, 10 Jul 2018 00:19:26 -0300
+#Wed, 11 Jul 2018 10:00:56 -0300
 
 
 C\:\\Users\\EUGENIO\ CARVALHO\\Desktop\\projects\\Ivannosys=

BIN
build/classes/API/Api.class


BIN
build/classes/API/Utils.class


BIN
build/classes/compiler/IVANNOSYS.class


BIN
build/classes/tools/mips/Memory.class


BIN
build/classes/tools/mips/MipsProcessor.class


+ 27 - 42
build/classes/tools/mips/memory/md.memory

@@ -23,48 +23,33 @@ DATA_RADIX = BIN;
 
 CONTENT
 BEGIN
-00000:	00000000000000000000000000000001;	% dec 1 %
-00004:	00000000000000000000000000000010;	% dec 2 %
-00008:	00000000000000000000000000000011;	% dec 3 %
-00012:	00000000000000000000000000000100;	% dec 4 %
+00000:	00000000000000000000000000000000;	% dec 0 %
+00004:	00000000000000000000000000000000;	% dec 0 %
+00008:	00000000000000000000000000000000;	% dec 0 %
+00012:	00000000000000000000000000000000;	% dec 0 %
 00016:	00000000000000000000000000000000;	% dec 0 %
-00020:	00000000000000000000000000000101;	% dec 5 %
-00024:	00000000000000000000000000000110;	% dec 6 %
-00028:	00000000000000000000000000000111;	% dec 7 %
-00032:	00000000000000000000000000001000;	% dec 8 %
-00036:	00000000000000000000000000000000;	% dec 0 %
-00040:	00000000000000000000000000001001;	% dec 9 %
-00044:	00000000000000000000000000001010;	% dec 10 %
-00048:	00000000000000000000000000001011;	% dec 11 %
-00052:	00000000000000000000000000001100;	% dec 12 %
+00020:	00000000000000000000000000000001;	% dec 1 %
+00024:	00000000000000000000000000000010;	% dec 2 %
+00028:	00000000000000000000000000000000;	% dec 0 %
+00032:	00000000000000000000000000000000;	% dec 0 %
+00036:	00000000000000000000000000000011;	% dec 3 %
+00040:	00000000000000000000000000000100;	% dec 4 %
+00044:	00000000000000000000000000000000;	% dec 0 %
+00048:	00000000000000000000000000000000;	% dec 0 %
+00052:	00000000000000000000000000000000;	% dec 0 %
 00056:	00000000000000000000000000000000;	% dec 0 %
-00060:	00000000000000000000000000001101;	% dec 13 %
-00064:	00000000000000000000000000001110;	% dec 14 %
-00068:	00000000000000000000000000001111;	% dec 15 %
-00072:	00000000000000000000000000010000;	% dec 16 %
-00076:	00000000000000000000000000000000;	% dec 0 %
-00080:	00000000000000000000000000000000;	% dec 0 %
-00084:	00000000000000000000000000000000;	% dec 0 %
-00088:	00000000000000000000000000000000;	% dec 0 %
-00092:	00000000000000000000000000000000;	% dec 0 %
-00096:	00000000000000000000000000000000;	% dec 0 %
-[100..120]:	00000000000000000000000000000000;
-00124:	00000000000000000000000000000000;	% dec 0 %
-00128:	00000000000000000000000000000000;	% dec 0 %
-00132:	00000000000000000000000011111111;	% dec 255 %
-[136..140]:	00000000000000000000000000000000;
-00144:	00000000000000000000000000000000;	% dec 0 %
-00148:	00000000000000000000000000000000;	% dec 0 %
-00152:	00000000000000000000000011111111;	% dec 255 %
-[156..160]:	00000000000000000000000000000000;
-00164:	00000000000000000000000011111111;	% dec 255 %
-00168:	00000000000000000000000011111111;	% dec 255 %
-00172:	00000000000000000000000011111111;	% dec 255 %
-[176..16356]:	00000000000000000000000000000000;
-16360:	00000000000000000000000000010001;	% dec 17 %
-16364:	00000000000000000000000000000100;	% dec 4 %
-16368:	00000000000000000000000000000100;	% dec 4 %
-16372:	00000000000000000000000000000100;	% dec 4 %
-16376:	00000000000000000000000000000100;	% dec 4 %
-16380:	00000000000000000000000011111111;	% dec 255 %
+00060:	00000000000000000000000000000000;	% dec 0 %
+[64..80]:	00000000000000000000000000000000;
+00084:	00000000000000000000000000000001;	% dec 1 %
+00088:	11111111111111111111111111111111;	% dec 4294967295 %
+[92..96]:	00000000000000000000000000000000;
+00100:	11111111111111111111111111111111;	% dec 4294967295 %
+00104:	11111111111111111111111111111111;	% dec 4294967295 %
+[108..16356]:	00000000000000000000000000000000;
+16360:	00000000000000000000000000000101;	% dec 5 %
+16364:	00000000000000000000000000000011;	% dec 3 %
+16368:	00000000000000000000000000000011;	% dec 3 %
+16372:	00000000000000000000000000000011;	% dec 3 %
+16376:	00000000000000000000000000000011;	% dec 3 %
+16380:	11111111111111111111111111111111;	% dec 4294967295 %
 END;

+ 187 - 182
build/classes/tools/mips/memory/mi.memory

@@ -25,24 +25,24 @@ CONTENT
 BEGIN
 000:	00001100000000000000000000000101;	% dec 201326597 %
 004:	00000000000000000000000000000000;	% dec 0 %
-008:	00001100000000000000000001011000;	% dec 201326680 %
+008:	00001100000000000000000001011011;	% dec 201326683 %
 012:	00000000000000000000000000000000;	% dec 0 %
 016:	11111111111111111111111111111111;	% dec 4294967295 %
 020:	00100111101111011111111111101000;	% dec 666763240 %
 024:	00000000000111011111000000100001;	% dec 1962017 %
 028:	00100100000100000000000000000001;	% dec 605028353 %
 032:	10101111110100000000000000000000;	% dec 2949644288 %
-036:	00100100000100010000000000000100;	% dec 605093892 %
+036:	00100100000100010000000000000011;	% dec 605093891 %
 040:	10101111110100010000000000000100;	% dec 2949709828 %
-044:	00100100000100100000000000000100;	% dec 605159428 %
+044:	00100100000100100000000000000011;	% dec 605159427 %
 048:	10101111110100100000000000001000;	% dec 2949775368 %
 052:	00100100000100110000000000000000;	% dec 605224960 %
 056:	10101111110100110000000000001100;	% dec 2949840908 %
-060:	00001000000000000000000001001111;	% dec 134217807 %
+060:	00001000000000000000000001010010;	% dec 134217810 %
 064:	00000000000000000000000000000000;	% dec 0 %
 068:	00100100000101000000000000000000;	% dec 605290496 %
 072:	10101111110101000000000000010000;	% dec 2949906448 %
-076:	00001000000000000000000001000101;	% dec 134217797 %
+076:	00001000000000000000000001001000;	% dec 134217800 %
 080:	00000000000000000000000000000000;	% dec 0 %
 084:	10001111110101010000000000001100;	% dec 2413101068 %
 088:	00000000000000000000000000000000;	% dec 0 %
@@ -51,199 +51,204 @@ BEGIN
 100:	10001111110101100000000000001100;	% dec 2413166604 %
 104:	10001111110101110000000000000100;	% dec 2413232132 %
 108:	00000000000000000000000000000000;	% dec 0 %
-112:	00010010110101110000000000010110;	% dec 316080150 %
+112:	00010110110101110000000000000101;	% dec 383188997 %
 116:	00000000000000000000000000000000;	% dec 0 %
 120:	00100100000100000000000000000000;	% dec 605028352 %
 124:	10101111110100000000000000010100;	% dec 2949644308 %
-128:	10001111110100010000000000010000;	% dec 2412838928 %
+128:	00001000000000000000000000110111;	% dec 134217783 %
 132:	00000000000000000000000000000000;	% dec 0 %
-136:	00010010001000000000000000000110;	% dec 304087046 %
+136:	10001111110100010000000000010000;	% dec 2412838928 %
 140:	00000000000000000000000000000000;	% dec 0 %
-144:	10001111110100100000000000010000;	% dec 2412904464 %
-148:	10001111110100110000000000001000;	% dec 2412969992 %
-152:	00000000000000000000000000000000;	% dec 0 %
-156:	00010010010100110000000000001011;	% dec 307429387 %
+144:	00010010001000000000000000000110;	% dec 304087046 %
+148:	00000000000000000000000000000000;	% dec 0 %
+152:	10001111110100100000000000010000;	% dec 2412904464 %
+156:	10001111110100110000000000001000;	% dec 2412969992 %
 160:	00000000000000000000000000000000;	% dec 0 %
-164:	00100100000101000000000000000000;	% dec 605290496 %
-168:	10101111110101000000000000010100;	% dec 2949906452 %
-172:	10001111110101010000000000000000;	% dec 2413101056 %
-176:	00000000000000000000000000000000;	% dec 0 %
-180:	00000000000101011010000000100001;	% dec 1417249 %
-184:	10101111110101000000000000010100;	% dec 2949906452 %
+164:	00010110010100110000000000000101;	% dec 374538245 %
+168:	00000000000000000000000000000000;	% dec 0 %
+172:	00100100000101000000000000000000;	% dec 605290496 %
+176:	10101111110101000000000000010100;	% dec 2949906452 %
+180:	00001000000000000000000000110111;	% dec 134217783 %
+184:	00000000000000000000000000000000;	% dec 0 %
 188:	10001111110101010000000000000000;	% dec 2413101056 %
 192:	00000000000000000000000000000000;	% dec 0 %
-196:	00100110101101010000000000000001;	% dec 649396225 %
-200:	10101111110101010000000000000000;	% dec 2949971968 %
-204:	10001111110101100000000000001100;	% dec 2413166604 %
+196:	00000000000101011011000000100001;	% dec 1421345 %
+200:	10101111110101100000000000010100;	% dec 2950037524 %
+204:	10001111110101010000000000000000;	% dec 2413101056 %
 208:	00000000000000000000000000000000;	% dec 0 %
-212:	00000000000101100100100000100001;	% dec 1460257 %
-216:	00000000000010010101000010000000;	% dec 610432 %
-220:	00000001001010100100100000100001;	% dec 19548193 %
-224:	10001111110101110000000000010000;	% dec 2413232144 %
-228:	00000000000000000000000000000000;	% dec 0 %
-232:	00000000000101110101100000100001;	% dec 1529889 %
-236:	00000001001010110100100000100001;	% dec 19613729 %
-240:	00000000000010010110000010000000;	% dec 614528 %
-244:	10001111110100000000000000010100;	% dec 2412773396 %
-248:	00000000000000000000000000000000;	% dec 0 %
-252:	00000011100011000110000000100001;	% dec 59531297 %
-256:	10101101100100000000000000000000;	% dec 2911895552 %
-260:	10001111110101110000000000010000;	% dec 2413232144 %
-264:	00000000000000000000000000000000;	% dec 0 %
-268:	00100110111101110000000000000001;	% dec 653721601 %
-272:	10101111110101110000000000010000;	% dec 2950103056 %
-276:	10001111110100100000000000010000;	% dec 2412904464 %
-280:	00000000000000000000000000000000;	% dec 0 %
-284:	00100100000011100000000000000101;	% dec 604897285 %
-288:	00000010010011100001000000100011;	% dec 38670371 %
-292:	00000100010000001111111111001011;	% dec 71368651 %
-296:	00000000000000000000000000000000;	% dec 0 %
-300:	10001111110100110000000000001100;	% dec 2412969996 %
-304:	00000000000000000000000000000000;	% dec 0 %
-308:	00100110011100110000000000000001;	% dec 645070849 %
-312:	10101111110100110000000000001100;	% dec 2949840908 %
-316:	10001111110101000000000000001100;	% dec 2413035532 %
-320:	00000000000000000000000000000000;	% dec 0 %
-324:	00100100000110000000000000000101;	% dec 605552645 %
-328:	00000010100110000001000000100011;	% dec 43520035 %
-332:	00000100010000001111111110111101;	% dec 71368637 %
-336:	00000000000000000000000000000000;	% dec 0 %
-340:	00100111101111010000000000011000;	% dec 666697752 %
-344:	00000000000111011111000000100001;	% dec 1962017 %
-348:	00000011111000000000000000001000;	% dec 65011720 %
-352:	00100111101111011111111111101100;	% dec 666763244 %
+212:	00100110101101010000000000000001;	% dec 649396225 %
+216:	10101111110101010000000000000000;	% dec 2949971968 %
+220:	10001111110101110000000000001100;	% dec 2413232140 %
+224:	00000000000000000000000000000000;	% dec 0 %
+228:	00000000000101110100100000100001;	% dec 1525793 %
+232:	00000000000010010101000010000000;	% dec 610432 %
+236:	10001111110100000000000000010000;	% dec 2412773392 %
+240:	00000000000000000000000000000000;	% dec 0 %
+244:	00000000000100000101100000100001;	% dec 1071137 %
+248:	00000001010010110101000000100001;	% dec 21712929 %
+252:	00000000000010100110000010000000;	% dec 680064 %
+256:	10001111110100010000000000010100;	% dec 2412838932 %
+260:	00000000000000000000000000000000;	% dec 0 %
+264:	00000011100011000110000000100001;	% dec 59531297 %
+268:	10101101100100010000000000000000;	% dec 2911961088 %
+272:	10001111110100110000000000010000;	% dec 2412970000 %
+276:	00000000000000000000000000000000;	% dec 0 %
+280:	00100110011100110000000000000001;	% dec 645070849 %
+284:	10101111110100110000000000010000;	% dec 2949840912 %
+288:	10001111110101000000000000010000;	% dec 2413035536 %
+292:	00000000000000000000000000000000;	% dec 0 %
+296:	00100100000011100000000000000100;	% dec 604897284 %
+300:	00000010100011100001000000100011;	% dec 42864675 %
+304:	00000100010000001111111111001000;	% dec 71368648 %
+308:	00000000000000000000000000000000;	% dec 0 %
+312:	10001111110101100000000000001100;	% dec 2413166604 %
+316:	00000000000000000000000000000000;	% dec 0 %
+320:	00100110110101100000000000000001;	% dec 651558913 %
+324:	10101111110101100000000000001100;	% dec 2950037516 %
+328:	10001111110101010000000000001100;	% dec 2413101068 %
+332:	00000000000000000000000000000000;	% dec 0 %
+336:	00100100000110000000000000000100;	% dec 605552644 %
+340:	00000010101110000001000000100011;	% dec 45617187 %
+344:	00000100010000001111111110111010;	% dec 71368634 %
+348:	00000000000000000000000000000000;	% dec 0 %
+352:	00100111101111010000000000011000;	% dec 666697752 %
 356:	00000000000111011111000000100001;	% dec 1962017 %
-360:	00100100000100000000000000000100;	% dec 605028356 %
-364:	10101111110100000000000000000000;	% dec 2949644288 %
-368:	00100100000100010000000000000100;	% dec 605093892 %
-372:	10101111110100010000000000000100;	% dec 2949709828 %
-376:	00100100000100100000000000000001;	% dec 605159425 %
-380:	10101111110100100000000000001000;	% dec 2949775368 %
-384:	00001000000000000000000011010110;	% dec 134217942 %
-388:	00000000000000000000000000000000;	% dec 0 %
-392:	00100100000100110000000000000001;	% dec 605224961 %
-396:	10101111110100110000000000001100;	% dec 2949840908 %
-400:	00001000000000000000000011001100;	% dec 134217932 %
-404:	00000000000000000000000000000000;	% dec 0 %
-408:	10001111110101000000000000001000;	% dec 2413035528 %
-412:	00000000000000000000000000000000;	% dec 0 %
-416:	00100110100011011111111111111111;	% dec 646840319 %
-420:	00000000000011010111000010000000;	% dec 880768 %
-424:	00000001101011100110100000100001;	% dec 28207137 %
-428:	10001111110101010000000000001100;	% dec 2413101068 %
-432:	00000000000000000000000000000000;	% dec 0 %
-436:	00000000000101010111100000100001;	% dec 1407009 %
-440:	00000001101011110110100000100001;	% dec 28272673 %
-444:	00000000000011011100000010000000;	% dec 901248 %
-448:	00000011100110001100000000100001;	% dec 60342305 %
-452:	10001111000010000000000000000000;	% dec 2399666176 %
-456:	10001111110101000000000000001000;	% dec 2413035528 %
-460:	00000000000000000000000000000000;	% dec 0 %
-464:	00000000000101000100100000100001;	% dec 1329185 %
-468:	00000000000010010101000010000000;	% dec 610432 %
-472:	00000001001010100100100000100001;	% dec 19548193 %
-476:	10001111110101010000000000001100;	% dec 2413101068 %
+360:	00000011111000000000000000001000;	% dec 65011720 %
+364:	00100111101111011111111111101100;	% dec 666763244 %
+368:	00000000000111011111000000100001;	% dec 1962017 %
+372:	00100100000100000000000000000011;	% dec 605028355 %
+376:	10101111110100000000000000000000;	% dec 2949644288 %
+380:	00100100000100010000000000000011;	% dec 605093891 %
+384:	10101111110100010000000000000100;	% dec 2949709828 %
+388:	00100100000100100000000000000001;	% dec 605159425 %
+392:	10101111110100100000000000001000;	% dec 2949775368 %
+396:	00001000000000000000000011011011;	% dec 134217947 %
+400:	00000000000000000000000000000000;	% dec 0 %
+404:	00100100000100110000000000000001;	% dec 605224961 %
+408:	10101111110100110000000000001100;	% dec 2949840908 %
+412:	00001000000000000000000011010001;	% dec 134217937 %
+416:	00000000000000000000000000000000;	% dec 0 %
+420:	10001111110101000000000000001000;	% dec 2413035528 %
+424:	00000000000000000000000000000000;	% dec 0 %
+428:	00100110100011011111111111111111;	% dec 646840319 %
+432:	00000000000011010111000010000000;	% dec 880768 %
+436:	10001111110101010000000000001100;	% dec 2413101068 %
+440:	00000000000000000000000000000000;	% dec 0 %
+444:	00000000000101010111100000100001;	% dec 1407009 %
+448:	00000001110011110111000000100001;	% dec 30371873 %
+452:	00000000000011101100000010000000;	% dec 966784 %
+456:	00000011100110001100000000100001;	% dec 60342305 %
+460:	10001111000101100000000000000000;	% dec 2400583680 %
+464:	00000000000000000000000000000000;	% dec 0 %
+468:	00000000000101101011100000100001;	% dec 1488929 %
+472:	10101111110101110000000000010000;	% dec 2950103056 %
+476:	10001111110101000000000000001000;	% dec 2413035528 %
 480:	00000000000000000000000000000000;	% dec 0 %
-484:	00100110101011001111111111111111;	% dec 648871935 %
-488:	00000001001011000100100000100001;	% dec 19679265 %
-492:	00000000000010010111000010000000;	% dec 618624 %
-496:	00000011100011100111000000100001;	% dec 59666465 %
-500:	10001101110101110000000000000000;	% dec 2379677696 %
-504:	00000000000000000000000000000000;	% dec 0 %
-508:	00000000000101110111100000100001;	% dec 1538081 %
-512:	00000001000011110110100000100001;	% dec 17786913 %
-516:	10001111110101000000000000001000;	% dec 2413035528 %
-520:	00000000000000000000000000000000;	% dec 0 %
-524:	00000000000101001100000000100001;	% dec 1359905 %
-528:	00000000000110000101000010000000;	% dec 1593472 %
-532:	00000011000010101100000000100001;	% dec 51036193 %
-536:	10001111110101010000000000001100;	% dec 2413101068 %
+484:	00000000000101000100000000100001;	% dec 1327137 %
+488:	00000000000010000100100010000000;	% dec 542848 %
+492:	10001111110101010000000000001100;	% dec 2413101068 %
+496:	00000000000000000000000000000000;	% dec 0 %
+500:	00100110101010111111111111111111;	% dec 648806399 %
+504:	00000001001010110100100000100001;	% dec 19613729 %
+508:	00000000000010010110000010000000;	% dec 614528 %
+512:	00000011100011000110000000100001;	% dec 59531297 %
+516:	10001101100011010000000000000000;	% dec 2374828032 %
+520:	10001111110101110000000000010000;	% dec 2413232144 %
+524:	00000000000000000000000000000000;	% dec 0 %
+528:	00000010111011011011100000100001;	% dec 49133601 %
+532:	10101111110101110000000000010000;	% dec 2950103056 %
+536:	10001111110101000000000000001000;	% dec 2413035528 %
 540:	00000000000000000000000000000000;	% dec 0 %
-544:	00100110101011000000000000000001;	% dec 648806401 %
-548:	00000011000011001100000000100001;	% dec 51167265 %
-552:	00000000000110000100100010000000;	% dec 1591424 %
-556:	00000011100010010100100000100001;	% dec 59328545 %
-560:	10001101001100000000000000000000;	% dec 2368733184 %
-564:	00000000000000000000000000000000;	% dec 0 %
-568:	00000000000100000111000000100001;	% dec 1077281 %
-572:	00000001101011100100000000100001;	% dec 28196897 %
-576:	10001111110101000000000000001000;	% dec 2413035528 %
-580:	00000000000000000000000000000000;	% dec 0 %
-584:	00100110100010100000000000000001;	% dec 646578177 %
-588:	00000000000010100101100010000000;	% dec 678016 %
-592:	00000001010010110101000000100001;	% dec 21712929 %
-596:	10001111110101010000000000001100;	% dec 2413101068 %
+544:	00000000000101000111100000100001;	% dec 1341473 %
+548:	00000000000011110111000010000000;	% dec 1011840 %
+552:	10001111110101010000000000001100;	% dec 2413101068 %
+556:	00000000000000000000000000000000;	% dec 0 %
+560:	00100110101010000000000000000001;	% dec 648544257 %
+564:	00000001110010000111000000100001;	% dec 29913121 %
+568:	00000000000011100101000010000000;	% dec 938112 %
+572:	00000011100010100101000000100001;	% dec 59396129 %
+576:	10001101010010110000000000000000;	% dec 2370502656 %
+580:	10001111110101110000000000010000;	% dec 2413232144 %
+584:	00000000000000000000000000000000;	% dec 0 %
+588:	00000010111010111011100000100001;	% dec 49002529 %
+592:	10101111110101110000000000010000;	% dec 2950103056 %
+596:	10001111110101000000000000001000;	% dec 2413035528 %
 600:	00000000000000000000000000000000;	% dec 0 %
-604:	00000000000101010110000000100001;	% dec 1400865 %
-608:	00000001010011000101000000100001;	% dec 21778465 %
-612:	00000000000010101100000010000000;	% dec 704640 %
-616:	00000011100110001100000000100001;	% dec 60342305 %
-620:	10001111000100010000000000000000;	% dec 2400256000 %
-624:	00000000000000000000000000000000;	% dec 0 %
-628:	00000000000100010100100000100001;	% dec 1132577 %
-632:	00000001000010010110100000100001;	% dec 17393697 %
-636:	10001111110101000000000000001000;	% dec 2413035528 %
-640:	00000000000000000000000000000000;	% dec 0 %
-644:	00000000000101000111000000100001;	% dec 1339425 %
-648:	00000000000011100111100010000000;	% dec 948352 %
-652:	00000001110011110111000000100001;	% dec 30371873 %
-656:	10001111110101010000000000001100;	% dec 2413101068 %
+604:	00100110100011000000000000000001;	% dec 646709249 %
+608:	00000000000011000110100010000000;	% dec 813184 %
+612:	10001111110101010000000000001100;	% dec 2413101068 %
+616:	00000000000000000000000000000000;	% dec 0 %
+620:	00000000000101010111100000100001;	% dec 1407009 %
+624:	00000001101011110110100000100001;	% dec 28272673 %
+628:	00000000000011011100000010000000;	% dec 901248 %
+632:	00000011100110001100000000100001;	% dec 60342305 %
+636:	10001111000010000000000000000000;	% dec 2399666176 %
+640:	10001111110101110000000000010000;	% dec 2413232144 %
+644:	00000000000000000000000000000000;	% dec 0 %
+648:	00000010111010001011100000100001;	% dec 48805921 %
+652:	10101111110101110000000000010000;	% dec 2950103056 %
+656:	10001111110101000000000000001000;	% dec 2413035528 %
 660:	00000000000000000000000000000000;	% dec 0 %
-664:	00000000000101010101100000100001;	% dec 1398817 %
-668:	00000001110010110111000000100001;	% dec 30109729 %
-672:	00000000000011100110000010000000;	% dec 942208 %
-676:	00000011100011000110000000100001;	% dec 59531297 %
-680:	10001101100100100000000000000000;	% dec 2375155712 %
-684:	00000000000000000000000000000000;	% dec 0 %
-688:	00000000000100100101000000100001;	% dec 1200161 %
-692:	00100100000110000000000000000100;	% dec 605552644 %
-696:	00000001010110000100000000011000;	% dec 22560792 %
-700:	00000000000000000100000000010010;	% dec 16402 %
-704:	00000001101010001001100000100011;	% dec 27826211 %
-708:	10101111110100110000000000010000;	% dec 2949840912 %
-712:	10001111110100110000000000010000;	% dec 2412970000 %
-716:	00000000000000000000000000000000;	% dec 0 %
-720:	00100100000010010000000011111111;	% dec 604569855 %
-724:	00000010011010010001000000100011;	% dec 40439843 %
-728:	00011000010000000000000000000011;	% dec 406847491 %
-732:	00000000000000000000000000000000;	% dec 0 %
-736:	00100100000101100000000011111111;	% dec 605421823 %
-740:	10101111110101100000000000010000;	% dec 2950037520 %
-744:	10001111110101110000000000001000;	% dec 2413232136 %
-748:	00000000000000000000000000000000;	% dec 0 %
-752:	00000000000101110101100000100001;	% dec 1529889 %
-756:	00000000000010110111000010000000;	% dec 749696 %
-760:	00000001011011100101100000100001;	% dec 24008737 %
-764:	10001111110100000000000000001100;	% dec 2412773388 %
-768:	00000000000000000000000000000000;	% dec 0 %
-772:	00000000000100000110000000100001;	% dec 1073185 %
-776:	00000001011011000101100000100001;	% dec 23877665 %
-780:	00000000000010110101000010000000;	% dec 741504 %
-784:	10001111110100010000000000010000;	% dec 2412838928 %
+664:	00000000000101000111000000100001;	% dec 1339425 %
+668:	00000000000011100101000010000000;	% dec 938112 %
+672:	10001111110101010000000000001100;	% dec 2413101068 %
+676:	00000000000000000000000000000000;	% dec 0 %
+680:	00000000000101010101100000100001;	% dec 1398817 %
+684:	00000001010010110101000000100001;	% dec 21712929 %
+688:	00000000000010100100100010000000;	% dec 673920 %
+692:	00000011100010010100100000100001;	% dec 59328545 %
+696:	10001101001100110000000000000000;	% dec 2368929792 %
+700:	00000000000000000000000000000000;	% dec 0 %
+704:	00000000000100110110000000100001;	% dec 1269793 %
+708:	00100100000011110000000000000100;	% dec 604962820 %
+712:	00000001100011110110100000011000;	% dec 26175512 %
+716:	00000000000000000110100000010010;	% dec 26642 %
+720:	10001111110101110000000000010000;	% dec 2413232144 %
+724:	00000000000000000000000000000000;	% dec 0 %
+728:	00000010111011011011100000100011;	% dec 49133603 %
+732:	10101111110101110000000000010000;	% dec 2950103056 %
+736:	10001111110101110000000000010000;	% dec 2413232144 %
+740:	00000000000000000000000000000000;	% dec 0 %
+744:	00100100000110000000000011111111;	% dec 605552895 %
+748:	00000010111110000001000000100011;	% dec 49811491 %
+752:	00011000010000000000000000000011;	% dec 406847491 %
+756:	00000000000000000000000000000000;	% dec 0 %
+760:	00100100000101100000000011111111;	% dec 605421823 %
+764:	10101111110101100000000000010000;	% dec 2950037520 %
+768:	10001111110100000000000000001000;	% dec 2412773384 %
+772:	00000000000000000000000000000000;	% dec 0 %
+776:	00000000000100000111000000100001;	% dec 1077281 %
+780:	00000000000011100101100010000000;	% dec 940160 %
+784:	10001111110100010000000000001100;	% dec 2412838924 %
 788:	00000000000000000000000000000000;	% dec 0 %
-792:	00000011100010100101000000100001;	% dec 59396129 %
-796:	10101101010100010000000001100100;	% dec 2907766884 %
-800:	10001111110100000000000000001100;	% dec 2412773388 %
-804:	00000000000000000000000000000000;	% dec 0 %
-808:	00100110000100000000000000000001;	% dec 638582785 %
-812:	10101111110100000000000000001100;	% dec 2949644300 %
-816:	10001111110101010000000000001100;	% dec 2413101068 %
-820:	10001111110100100000000000000100;	% dec 2412904452 %
+792:	00000000000100010101000000100001;	% dec 1134625 %
+796:	00000001011010100101100000100001;	% dec 23746593 %
+800:	00000000000010110100100010000000;	% dec 739456 %
+804:	10001111110100100000000000010000;	% dec 2412904464 %
+808:	00000000000000000000000000000000;	% dec 0 %
+812:	00000011100010010100100000100001;	% dec 59328545 %
+816:	10101101001100100000000001000000;	% dec 2905735232 %
+820:	10001111110101010000000000001100;	% dec 2413101068 %
 824:	00000000000000000000000000000000;	% dec 0 %
-828:	00000010101100100001000000100011;	% dec 45223971 %
-832:	00000100010000001111111110010101;	% dec 71368597 %
-836:	00000000000000000000000000000000;	% dec 0 %
-840:	10001111110100110000000000001000;	% dec 2412969992 %
+828:	00100110101101010000000000000001;	% dec 649396225 %
+832:	10101111110101010000000000001100;	% dec 2949971980 %
+836:	10001111110100110000000000001100;	% dec 2412969996 %
+840:	10001111110101110000000000000100;	% dec 2413232132 %
 844:	00000000000000000000000000000000;	% dec 0 %
-848:	00100110011100110000000000000001;	% dec 645070849 %
-852:	10101111110100110000000000001000;	% dec 2949840904 %
-856:	10001111110101100000000000001000;	% dec 2413166600 %
-860:	10001111110101110000000000000000;	% dec 2413232128 %
+848:	00000010011101110001000000100011;	% dec 41357347 %
+852:	00000100010000001111111110010011;	% dec 71368595 %
+856:	00000000000000000000000000000000;	% dec 0 %
+860:	10001111110101100000000000001000;	% dec 2413166600 %
 864:	00000000000000000000000000000000;	% dec 0 %
-868:	00000010110101110001000000100011;	% dec 47648803 %
-872:	00000100010000001111111110000111;	% dec 71368583 %
-876:	00000000000000000000000000000000;	% dec 0 %
-880:	00100111101111010000000000010100;	% dec 666697748 %
-884:	00000000000111011111000000100001;	% dec 1962017 %
-888:	00000011111000000000000000001000;	% dec 65011720 %
+868:	00100110110101100000000000000001;	% dec 651558913 %
+872:	10101111110101100000000000001000;	% dec 2950037512 %
+876:	10001111110100000000000000001000;	% dec 2412773384 %
+880:	10001111110100010000000000000000;	% dec 2412838912 %
+884:	00000000000000000000000000000000;	% dec 0 %
+888:	00000010000100010001000000100011;	% dec 34672675 %
+892:	00000100010000001111111110000101;	% dec 71368581 %
+896:	00000000000000000000000000000000;	% dec 0 %
+900:	00100111101111010000000000010100;	% dec 666697748 %
+904:	00000000000111011111000000100001;	% dec 1962017 %
+908:	00000011111000000000000000001000;	% dec 65011720 %
 END;

+ 15 - 16
src/API/Api.java

@@ -58,23 +58,22 @@ public class Api {
 
         Middleware.On("IR", "close.block", "print.data");
 
-        // Define os processadores padrão da IR
-        Middleware.On(
-                "IR",
-                "close.block",
-                // Remove labels não referenciadas
-                "ir.clear.labels,"
-                // Remove copias
-                + "ir.o.copies,"
-                // Propagacao de constantes
-                //                + "ir.o.VariablesConstants,"
-                // Remove instruções que não tem impacto algum na execusao
-                //                + "ir.o.DeadInstructions,"
-                // Extrai os blocos basicos de uma subrotina
-                + "ir.basic.blocks,"
-        // Remove loads e stores desnecessarios
+        String middlelist = Utils.Join(new String[]{
+            // Remove labels não referenciadas
+//            "ir.clear.labels",
+            // Remove copias
+            "ir.o.copies",
+            // Propagacao de constantes
+            //                + "ir.o.VariablesConstants,"
+            // Remove instruções que não tem impacto algum na execusao
+            //                + "ir.o.DeadInstructions,"
+            // Extrai os blocos basicos de uma subrotina
+            "ir.basic.blocks", // Remove loads e stores desnecessarios
         //                + "ir.o.load_store"
-        );
+        }, ",");
+
+        // Define os processadores padrão da IR
+        Middleware.On("IR", "close.block", middlelist);
         /*Inicializando importes*/
         Imports._init(compiler);
 //        Constantes._init();

+ 18 - 0
src/API/Utils.java

@@ -321,4 +321,22 @@ public class Utils {
     public static String[] SplitEach(String src, int each) {
         return src.split("(?<=\\G.{" + each + "})");
     }
+
+    public static long bin32ToDec(String bin) {
+        String c = bin;
+        bin = Utils.padPreserveSignal(32, bin);
+//        System.out.println("bin32ToDec:" + bin + ">" + c);
+
+        if (bin.charAt(0) == '0') {
+            return Long.parseLong(bin, 2);
+        } else {
+            int number = 0;
+            for (int index = 0; index < 32; index++) {
+                int b = bin.charAt(index) - '0';
+                number = number << 1 | b;
+            }
+            return (int) number;
+        }
+    }
+
 }

+ 140 - 0
src/Export/Simulation.java

@@ -64,3 +64,143 @@ public class Simulation implements ExportInterface {
     }
 
 }
+/**
+ 		<laplaciano>:
+16c:  0666763244	addiu sp,sp,-20		 -- prolog| push stack frame
+170:  0001962017	addu fp,zero,sp		 -- prolog|copy fp ← sp
+174:  0605028355	addiu s0,zero,3		.0 -- copy _V20 ← 3
+178:  2949644288	sw s0,fp,0		.1 -- store content of s0 in _V20
+17c:  0605093891	addiu s1,zero,3		.2 -- copy _V22 ← 3
+180:  2949709828	sw s1,fp,4		.3 -- store content of s1 in _V22
+184:  0605159425	addiu s2,zero,1		.4 -- copy _V23 ← 1
+188:  2949775368	sw s2,fp,8		.5 -- store content of s2 in _V23
+18c:  0134217947	j 36c <laplaciano+0x200>		.6 -- jump to laplaciano+_i20
+190:  0000000000	sll zero,zero,0		.6 -- Nop
+194:  0605224961	addiu s3,zero,1		.7 -- copy _V24 ← 1
+198:  2949840908	sw s3,fp,12		.8 -- store content of s3 in _V24
+19c:  0134217937	j 344 <laplaciano+0x1d8>		.9 -- jump to laplaciano+_i24
+1a0:  0000000000	sll zero,zero,0		.9 -- Nop
+1a4:  2413035528	lw s4,fp,8		.10 -- load content from _V23 in s4
+1a8:  0000000000	sll zero,zero,0		.10 -- Nop
+1ac:  0646840319	addiu t5,s4,-1		.11 -- _T26 = _V23 - 1
+1b0:  0000880768	sll t6,t5,2		.12 -- _T27 = _T26 << 2
+1b4:  2413101068	lw s5,fp,12		.13 -- load content from _V24 in s5
+1b8:  0000000000	sll zero,zero,0		.13 -- Nop
+1bc:  0001407009	addu t7,zero,s5		.14 -- copy _T29 ← _V24
+1c0:  0030371873	addu t6,t6,t7		.15 -- _T27 = _T27 + _T29
+1c4:  0000966784	sll t8,t6,2		.16 -- _T33 = _T27 << 2
+1c8:  0060342305	addu t8,gp,t8		.17
+1cc:  2400583680	lw s6,t8,0		.17
+1d0:  0000000000	sll zero,zero,0		.17 -- Nop
+1d4:  0001488929	addu s7,zero,s6		.17 -- copy s7 ← s6
+1d8:  2950103056	sw s7,fp,16		.18 -- store content of s7 in _V36
+1dc:  2413035528	lw s4,fp,8		.19 -- load content from _V23 in s4
+1e0:  0000000000	sll zero,zero,0		.19 -- Nop
+1e4:  0001327137	addu t0,zero,s4		.20 -- copy _T37 ← _V23
+1e8:  0000542848	sll t1,t0,2		.21 -- _T38 = _T37 << 2
+1ec:  2413101068	lw s5,fp,12		.22 -- load content from _V24 in s5
+1f0:  0000000000	sll zero,zero,0		.22 -- Nop
+1f4:  0648806399	addiu t3,s5,-1		.23 -- _T41 = _V24 - 1
+1f8:  0019613729	addu t1,t1,t3		.24 -- _T38 = _T38 + _T41
+1fc:  0000614528	sll t4,t1,2		.25 -- _T45 = _T38 << 2
+200:  0059531297	addu t4,gp,t4		.26
+204:  2374828032	lw t5,t4,0		.26
+208:  2413232144	lw s7,fp,16		.27 -- load content from _V36 in s7
+20c:  0000000000	sll zero,zero,0		.27 -- Nop
+210:  0049133601	addu s7,s7,t5		.28 -- _V36 = _V36 + _T47
+214:  2950103056	sw s7,fp,16		.29 -- store content of s7 in _V36
+218:  2413035528	lw s4,fp,8		.30 -- load content from _V23 in s4
+21c:  0000000000	sll zero,zero,0		.30 -- Nop
+220:  0001341473	addu t7,zero,s4		.31 -- copy _T48 ← _V23
+224:  0001011840	sll t6,t7,2		.32 -- _T49 = _T48 << 2
+228:  2413101068	lw s5,fp,12		.33 -- load content from _V24 in s5
+22c:  0000000000	sll zero,zero,0		.33 -- Nop
+230:  0648544257	addiu t0,s5,1		.34 -- _T52 = _V24 + 1
+234:  0029913121	addu t6,t6,t0		.35 -- _T49 = _T49 + _T52
+238:  0000938112	sll t2,t6,2		.36 -- _T56 = _T49 << 2
+23c:  0059396129	addu t2,gp,t2		.37
+240:  2370502656	lw t3,t2,0		.37
+244:  2413232144	lw s7,fp,16		.38 -- load content from _V36 in s7
+248:  0000000000	sll zero,zero,0		.38 -- Nop
+24c:  0049002529	addu s7,s7,t3		.39 -- _V36 = _V36 + _T58
+250:  2950103056	sw s7,fp,16		.40 -- store content of s7 in _V36
+254:  2413035528	lw s4,fp,8		.41 -- load content from _V23 in s4
+258:  0000000000	sll zero,zero,0		.41 -- Nop
+25c:  0646709249	addiu t4,s4,1		.42 -- _T60 = _V23 + 1
+260:  0000813184	sll t5,t4,2		.43 -- _T61 = _T60 << 2
+264:  2413101068	lw s5,fp,12		.44 -- load content from _V24 in s5
+268:  0000000000	sll zero,zero,0		.44 -- Nop
+26c:  0001407009	addu t7,zero,s5		.45 -- copy _T63 ← _V24
+270:  0028272673	addu t5,t5,t7		.46 -- _T61 = _T61 + _T63
+274:  0000901248	sll t8,t5,2		.47 -- _T67 = _T61 << 2
+278:  0060342305	addu t8,gp,t8		.48
+27c:  2399666176	lw t0,t8,0		.48
+280:  2413232144	lw s7,fp,16		.49 -- load content from _V36 in s7
+284:  0000000000	sll zero,zero,0		.49 -- Nop
+288:  0048805921	addu s7,s7,t0		.50 -- _V36 = _V36 + _T69
+28c:  2950103056	sw s7,fp,16		.51 -- store content of s7 in _V36
+290:  2413035528	lw s4,fp,8		.52 -- load content from _V23 in s4
+294:  0000000000	sll zero,zero,0		.52 -- Nop
+298:  0001339425	addu t6,zero,s4		.53 -- copy _T70 ← _V23
+29c:  0000938112	sll t2,t6,2		.54 -- _T71 = _T70 << 2
+2a0:  2413101068	lw s5,fp,12		.55 -- load content from _V24 in s5
+2a4:  0000000000	sll zero,zero,0		.55 -- Nop
+2a8:  0001398817	addu t3,zero,s5		.56 -- copy _T73 ← _V24
+2ac:  0021712929	addu t2,t2,t3		.57 -- _T71 = _T71 + _T73
+2b0:  0000673920	sll t1,t2,2		.58 -- _T77 = _T71 << 2
+2b4:  0059328545	addu t1,gp,t1		.59
+2b8:  2368929792	lw s3,t1,0		.59
+2bc:  0000000000	sll zero,zero,0		.59 -- Nop
+2c0:  0001269793	addu t4,zero,s3		.59 -- copy t4 ← s3
+2c4:  0604962820	addiu t7,zero,4		.60
+2c8:  0026175512	mult t4,t7		.60 -- _T80 = _T79 * 4
+2cc:  0000026642	mflo t5		.60
+2d0:  2413232144	lw s7,fp,16		.61 -- load content from _V36 in s7
+2d4:  0000000000	sll zero,zero,0		.61 -- Nop
+2d8:  0049133603	subu s7,s7,t5		.62 -- _V36 = _V36 - _T80
+2dc:  2950103056	sw s7,fp,16		.63 -- store content of s7 in _V36
+2e0:  2413232144	lw s7,fp,16		.64 -- load content from _V36 in s7
+2e4:  0000000000	sll zero,zero,0		.64 -- Nop
+2e8:  0605552895	addiu t8,zero,255		.65
+2ec:  0049811491	subu v0,s7,t8		.65
+2f0:  0406847491	blez v0,300 <laplaciano+0x194>		.65 -- branch if register <= 0
+2f4:  0000000000	sll zero,zero,0		.65 -- Nop
+2f8:  0605421823	addiu s6,zero,255		.66 -- copy _V36 ← 255
+2fc:  2950037520	sw s6,fp,16		.67 -- store content of s6 in _V36
+300:  2412773384	lw s0,fp,8		.68 -- load content from _V23 in s0
+304:  0000000000	sll zero,zero,0		.68 -- Nop
+308:  0001077281	addu t6,zero,s0		.69 -- copy _T81 ← _V23
+30c:  0000940160	sll t3,t6,2		.70 -- _T82 = _T81 << 2
+310:  2412838924	lw s1,fp,12		.71 -- load content from _V24 in s1
+314:  0000000000	sll zero,zero,0		.71 -- Nop
+318:  0001134625	addu t2,zero,s1		.72 -- copy _T84 ← _V24
+31c:  0023746593	addu t3,t3,t2		.73 -- _T82 = _T82 + _T84
+320:  0000739456	sll t1,t3,2		.74 -- _T88 = _T82 << 2
+324:  2412904464	lw s2,fp,16		.75 -- load content from _V36 in s2
+328:  0000000000	sll zero,zero,0		.75 -- Nop
+32c:  0059328545	addu t1,gp,t1		.76
+330:  2905735232	sw s2,t1,64		.76 -- store content of t1 in _G90[_T88]
+334:  2413101068	lw s5,fp,12		.77 -- load content from _V24 in s5
+338:  0000000000	sll zero,zero,0		.77 -- Nop
+33c:  0649396225	addiu s5,s5,1		.78 -- _V24 = _V24 + 1
+340:  2949971980	sw s5,fp,12		.79 -- store content of s5 in _V24
+344:  2412969996	lw s3,fp,12		.80 -- load content from _V24 in s3
+348:  2413232132	lw s7,fp,4		.81 -- load content from _V22 in s7
+34c:  0000000000	sll zero,zero,0		.81 -- Nop
+350:  0041357347	subu v0,s3,s7		.82
+354:  0071368595	bltz v0,1a4 <laplaciano+0x38>		.82 -- branch if register < 0
+358:  0000000000	sll zero,zero,0		.82 -- Nop
+35c:  2413166600	lw s6,fp,8		.83 -- load content from _V23 in s6
+360:  0000000000	sll zero,zero,0		.83 -- Nop
+364:  0651558913	addiu s6,s6,1		.84 -- _V23 = _V23 + 1
+368:  2950037512	sw s6,fp,8		.85 -- store content of s6 in _V23
+36c:  2412773384	lw s0,fp,8		.86 -- load content from _V23 in s0
+370:  2412838912	lw s1,fp,0		.87 -- load content from _V20 in s1
+374:  0000000000	sll zero,zero,0		.87 -- Nop
+378:  0034672675	subu v0,s0,s1		.88
+37c:  0071368581	bltz v0,194 <laplaciano+0x28>		.88 -- branch if register < 0
+380:  0000000000	sll zero,zero,0		.88 -- Nop
+384:  0666697748	addiu sp,sp,20		 -- epilog| pop stack frame
+388:  0001962017	addu fp,zero,sp		 -- epilog| pop stack frame
+38c:  0065011720	jr ra		 -- epilog| return
+ */

File diff suppressed because it is too large
+ 246 - 231
src/IntermediaryCode/IRGenerator.java


+ 2 - 1
src/compiler/IVANNOSYS.java

@@ -73,7 +73,8 @@ public class IVANNOSYS {
                             Set("mode", "debug");
                             // Determina os pontos de para no codigo alvo
 //                            Set("breakpoints", "94-9c");
-//                            Set("breakpoints", "10");
+//                            Set("breakpoints", "1d8,214,2e0,28c,2f0,250,330");
+                            Set("breakpoints", "1d8,214,250,2e0,28c,2dc,2d8,2f0,330");
                             // Caminho do arquivo de memoria de instrucoes
                             Set("memory.instruction", "\\src\\tools\\mips\\memory\\mi.memory");
                             // Tamanho da memorua de instrucoes 16 kb

+ 16 - 15
src/middlewares/RemoveUnusedLabelsMiddleware.java

@@ -5,6 +5,7 @@
  */
 package middlewares;
 
+import API.MiddlewareInterface;
 import API.Utils;
 import common.Block;
 import common.Code;
@@ -14,7 +15,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import API.MiddlewareInterface;
 
 /**
  *
@@ -46,7 +46,6 @@ public class RemoveUnusedLabelsMiddleware implements MiddlewareInterface {
 
 //        System.out.println("block:" + block.getName() + "-------------------------------");
 //        System.out.println("\n\n####referenceCount:" + referenceCount + "\n\n");
-
         // Salta o primeiro label
         if (interator.hasNext()) {
             interator.next();
@@ -59,21 +58,23 @@ public class RemoveUnusedLabelsMiddleware implements MiddlewareInterface {
 
             if (instruction.eq("type", "branch")) {
                 branch = instruction;
-                position = 0;
+//                position = 0;
             }
 
             // Quando salta um jump altera o enredeco para o endereco do jump e inverte o teste
-            if (branch != null && last.eq("type", "jump") && instruction.eq("label", branch.Get("label"))) {
-//                position == 3 && 
+            if (branch != null && last.eq("type", "jump")) {
+                if (instruction.eq("label", branch.Get("label"))) {
+                    //                position == 3 &&
 
-                branch.Set("op", Utils.ComplementOperation(branch.Get("op")))
-                        .Set("label", last.Get("label"));
-                branch = null;
+                    branch.Set("op", Utils.ComplementOperation(branch.Get("op")))
+                            .Set("label", last.Get("label"));
+                    branch = null;
 
-                remover.add(last);
-                remover.add(instruction);
+                    remover.add(last);
+                    remover.add(instruction);
 
-                continue;
+                    continue;
+                }
             }
 
             if (!instruction.eq("type", "label") || instruction.in("label_type", ignore)) {
@@ -119,14 +120,14 @@ public class RemoveUnusedLabelsMiddleware implements MiddlewareInterface {
         String label;
         // Cria o mapa de labels para o bloco atual caso não exista
         if (!labelMap.containsKey(currentBlock)) {
-            lab = new HashMap<String, ArrayList<Instruction>>();
+            lab = new HashMap<>();
             labelMap.put(currentBlock, lab);
             // Popula a lista de cada de instrucao de cada label
             for (Instruction instruction : block.Instructions()) {
                 if (instruction.Has("label") || instruction.eq("type", "label")) {
                     label = instruction.Get("label");
                     if (!lab.containsKey(label)) {
-                        lab.put(label, new ArrayList<Instruction>());
+                        lab.put(label, new ArrayList<>());
                     }
                     lab.get(label).add(instruction);
                 }
@@ -139,9 +140,9 @@ public class RemoveUnusedLabelsMiddleware implements MiddlewareInterface {
 
         if (lab.containsKey(old)) {
 //            c.RegisterLabelAddress(old);
-            for (Instruction instruction : lab.get(old)) {
+            lab.get(old).forEach((instruction) -> {
                 instruction.Set("label", newl);
-            }
+            });
         }
 
 //labelInstructions

+ 219 - 6
src/samples/program_jun_laplaciano.go

@@ -48,8 +48,8 @@
 package main;
 
 const (
-    LIN = 5
-    COL = 5
+    LIN = 4
+    COL = 4
 )
 
 var (
@@ -91,15 +91,228 @@ func laplaciano() {
 
     for i:= 1; i < LM1; i++ {
         for j := 1; j < CM1; j++ {
-            l = origin[i-1][j] + origin[i][j-1] + origin[i][j+1] + origin[i+1][j] - (4 * origin[i][j])
+            l = origin[i-1][j]
+            l += origin[i][j-1] 
+            l += origin[i][j+1] 
+            l += origin[i+1][j] 
+            l -= (4 * origin[i][j])
 
             if l > 255 { l = 255 }
+
             result[i][j] = l
         }
     }
 }
 
 func main() {
-  preenche_matriz()
-  laplaciano()
-}
+    preenche_matriz()
+    laplaciano()
+}
+
+/**
+main.@preenche_matriz.main.@preenche_matriz.value : _V8
+main.@preenche_matriz.@for_0.main.@preenche_matriz.@for_0.i : _V6
+main.@preenche_matriz.@for_0.@for_1.COL : 4
+main.@preenche_matriz.main.@preenche_matriz.LM1 : _V3
+main.@preenche_matriz.@for_0.@for_1.LM1 : _V3
+main.main.result : _G90
+main.@preenche_matriz.w : _V1
+main.@preenche_matriz.@for_0.@for_1.main.@preenche_matriz.@for_0.@for_1.j : _V7
+main.@preenche_matriz.@for_0.@for_1.CM1 : _V5
+main.@preenche_matriz.@for_0.@for_1.value : _V8
+main.@preenche_matriz.@for_0.LIN : 4
+_V1 : main.@preenche_matriz.w
+_V3 : main.@preenche_matriz.LM1
+_V6 : main.@preenche_matriz.@for_0.i
+_V5 : main.@preenche_matriz.CM1
+main.@preenche_matriz.@for_0.i : _V6
+_V8 : main.@preenche_matriz.@for_0.@for_1.value
+_V7 : main.@preenche_matriz.@for_0.@for_1.j
+_G18 : main.main.origin
+main.@preenche_matriz.@for_0.@for_1.i : _V6
+main.@preenche_matriz.CM1 : _V5
+main.@preenche_matriz.LIN : 4
+main.@preenche_matriz.main.@preenche_matriz.CM1 : _V5
+main.@preenche_matriz.COL : 4
+main.@preenche_matriz.main.@preenche_matriz.w : _V1
+main.@preenche_matriz.@for_0.@for_1.origin : _G18
+main.main.origin : _G18
+_G90 : main.main.result
+main.@preenche_matriz.@for_0.@for_1.w : _V1
+main.@preenche_matriz.LM1 : _V3
+main.@preenche_matriz.@for_0.@for_1.j : _V7
+
+
+
+4 : main.@laplaciano.LIN
+main.@laplaciano.LIN : 4
+
+main.@laplaciano.COL : 4
+
+_V22 : main.@laplaciano.CM1
+main.@laplaciano.CM1 : _V22
+main.@laplaciano.main.@laplaciano.CM1 : _V22
+main.@laplaciano.@for_3.@for_4.CM1 : _V22
+
+_V20 : main.@laplaciano.LM1
+main.@laplaciano.LM1 : _V20
+main.@laplaciano.@for_3.LM1 : _V20
+main.@laplaciano.main.@laplaciano.LM1 : _V20
+
+main.@laplaciano.@for_3.i : _V23
+_V23 : main.@laplaciano.@for_3.i
+main.@laplaciano.@for_3.@for_4.i : _V23
+main.@laplaciano.@for_3.main.@laplaciano.@for_3.i : _V23
+
+main.@laplaciano.main.@laplaciano.l : _V36
+main.@laplaciano.@for_3.@for_4.l : _V36
+_V36 : main.@laplaciano.@for_3.@for_4.l
+
+_V24 : main.@laplaciano.@for_3.@for_4.j
+main.@laplaciano.@for_3.@for_4.j : _V24
+main.@laplaciano.@for_3.@for_4.main.@laplaciano.@for_3.@for_4.j : _V24
+
+main.@laplaciano.@for_3.@for_4.origin : _G18
+main.@laplaciano.@for_3.@for_4.result : _G90
+
+
+		<laplaciano>:
+16c:  0666763244	addiu sp,sp,-20		 -- prolog| push stack frame
+170:  0001962017	addu fp,zero,sp		 -- prolog|copy fp ← sp
+174:  0605028355	addiu s0,zero,3		.0 -- copy _V20 ← 3
+178:  2949644288	sw s0,fp,0		.1 -- store content of s0 in _V20
+17c:  0605093891	addiu s1,zero,3		.2 -- copy _V22 ← 3
+180:  2949709828	sw s1,fp,4		.3 -- store content of s1 in _V22
+184:  0605159425	addiu s2,zero,1		.4 -- copy _V23 ← 1
+188:  2949775368	sw s2,fp,8		.5 -- store content of s2 in _V23
+18c:  0134217947	j 36c <laplaciano+0x200>		.6 -- jump to laplaciano+_i20
+190:  0000000000	sll zero,zero,0		.6 -- Nop
+194:  0605224961	addiu s3,zero,1		.7 -- copy _V24 ← 1
+198:  2949840908	sw s3,fp,12		.8 -- store content of s3 in _V24
+19c:  0134217937	j 344 <laplaciano+0x1d8>		.9 -- jump to laplaciano+_i24
+1a0:  0000000000	sll zero,zero,0		.9 -- Nop
+1a4:  2413035528	lw s4,fp,8		.10 -- load content from _V23 in s4
+1a8:  0000000000	sll zero,zero,0		.10 -- Nop
+1ac:  0646840319	addiu t5,s4,-1		.11 -- _T26 = _V23 - 1
+1b0:  0000880768	sll t6,t5,2		.12 -- _T27 = _T26 << 2
+1b4:  2413101068	lw s5,fp,12		.13 -- load content from _V24 in s5
+1b8:  0000000000	sll zero,zero,0		.13 -- Nop
+1bc:  0001407009	addu t7,zero,s5		.14 -- copy _T29 ← _V24
+1c0:  0030371873	addu t6,t6,t7		.15 -- _T27 = _T27 + _T29
+1c4:  0000966784	sll t8,t6,2		.16 -- _T33 = _T27 << 2
+1c8:  0060342305	addu t8,gp,t8		.17
+1cc:  2400583680	lw s6,t8,0		.17
+1d0:  0000000000	sll zero,zero,0		.17 -- Nop
+1d4:  0001488929	addu s7,zero,s6		.17 -- copy s7 ← s6
+1d8:  2950103056	sw s7,fp,16		.18 -- store content of s7 in _V36
+1dc:  2413035528	lw s4,fp,8		.19 -- load content from _V23 in s4
+1e0:  0000000000	sll zero,zero,0		.19 -- Nop
+1e4:  0001327137	addu t0,zero,s4		.20 -- copy _T37 ← _V23
+1e8:  0000542848	sll t1,t0,2		.21 -- _T38 = _T37 << 2
+1ec:  2413101068	lw s5,fp,12		.22 -- load content from _V24 in s5
+1f0:  0000000000	sll zero,zero,0		.22 -- Nop
+1f4:  0648806399	addiu t3,s5,-1		.23 -- _T41 = _V24 - 1
+1f8:  0019613729	addu t1,t1,t3		.24 -- _T38 = _T38 + _T41
+1fc:  0000614528	sll t4,t1,2		.25 -- _T45 = _T38 << 2
+200:  0059531297	addu t4,gp,t4		.26
+204:  2374828032	lw t5,t4,0		.26
+208:  2413232144	lw s7,fp,16		.27 -- load content from _V36 in s7
+20c:  0000000000	sll zero,zero,0		.27 -- Nop
+210:  0049133601	addu s7,s7,t5		.28 -- _V36 = _V36 + _T47
+214:  2950103056	sw s7,fp,16		.29 -- store content of s7 in _V36
+218:  2413035528	lw s4,fp,8		.30 -- load content from _V23 in s4
+21c:  0000000000	sll zero,zero,0		.30 -- Nop
+220:  0001341473	addu t7,zero,s4		.31 -- copy _T48 ← _V23
+224:  0001011840	sll t6,t7,2		.32 -- _T49 = _T48 << 2
+228:  2413101068	lw s5,fp,12		.33 -- load content from _V24 in s5
+22c:  0000000000	sll zero,zero,0		.33 -- Nop
+230:  0648544257	addiu t0,s5,1		.34 -- _T52 = _V24 + 1
+234:  0029913121	addu t6,t6,t0		.35 -- _T49 = _T49 + _T52
+238:  0000938112	sll t2,t6,2		.36 -- _T56 = _T49 << 2
+23c:  0059396129	addu t2,gp,t2		.37
+240:  2370502656	lw t3,t2,0		.37
+244:  2413232144	lw s7,fp,16		.38 -- load content from _V36 in s7
+248:  0000000000	sll zero,zero,0		.38 -- Nop
+24c:  0049002529	addu s7,s7,t3		.39 -- _V36 = _V36 + _T58
+250:  2950103056	sw s7,fp,16		.40 -- store content of s7 in _V36
+254:  2413035528	lw s4,fp,8		.41 -- load content from _V23 in s4
+258:  0000000000	sll zero,zero,0		.41 -- Nop
+25c:  0646709249	addiu t4,s4,1		.42 -- _T60 = _V23 + 1
+260:  0000813184	sll t5,t4,2		.43 -- _T61 = _T60 << 2
+264:  2413101068	lw s5,fp,12		.44 -- load content from _V24 in s5
+268:  0000000000	sll zero,zero,0		.44 -- Nop
+26c:  0001407009	addu t7,zero,s5		.45 -- copy _T63 ← _V24
+270:  0028272673	addu t5,t5,t7		.46 -- _T61 = _T61 + _T63
+274:  0000901248	sll t8,t5,2		.47 -- _T67 = _T61 << 2
+278:  0060342305	addu t8,gp,t8		.48
+27c:  2399666176	lw t0,t8,0		.48
+280:  2413232144	lw s7,fp,16		.49 -- load content from _V36 in s7
+284:  0000000000	sll zero,zero,0		.49 -- Nop
+288:  0048805921	addu s7,s7,t0		.50 -- _V36 = _V36 + _T69
+28c:  2950103056	sw s7,fp,16		.51 -- store content of s7 in _V36
+290:  2413035528	lw s4,fp,8		.52 -- load content from _V23 in s4
+294:  0000000000	sll zero,zero,0		.52 -- Nop
+298:  0001339425	addu t6,zero,s4		.53 -- copy _T70 ← _V23
+29c:  0000938112	sll t2,t6,2		.54 -- _T71 = _T70 << 2
+2a0:  2413101068	lw s5,fp,12		.55 -- load content from _V24 in s5
+2a4:  0000000000	sll zero,zero,0		.55 -- Nop
+2a8:  0001398817	addu t3,zero,s5		.56 -- copy _T73 ← _V24
+2ac:  0021712929	addu t2,t2,t3		.57 -- _T71 = _T71 + _T73
+2b0:  0000673920	sll t1,t2,2		.58 -- _T77 = _T71 << 2
+2b4:  0059328545	addu t1,gp,t1		.59
+2b8:  2368929792	lw s3,t1,0		.59
+2bc:  0000000000	sll zero,zero,0		.59 -- Nop
+2c0:  0001269793	addu t4,zero,s3		.59 -- copy t4 ← s3
+2c4:  0604962820	addiu t7,zero,4		.60
+2c8:  0026175512	mult t4,t7		.60 -- _T80 = _T79 * 4
+2cc:  0000026642	mflo t5		.60
+2d0:  2413232144	lw s7,fp,16		.61 -- load content from _V36 in s7
+2d4:  0000000000	sll zero,zero,0		.61 -- Nop
+2d8:  0049133603	subu s7,s7,t5		.62 -- _V36 = _V36 - _T80
+2dc:  2950103056	sw s7,fp,16		.63 -- store content of s7 in _V36
+2e0:  2413232144	lw s7,fp,16		.64 -- load content from _V36 in s7
+2e4:  0000000000	sll zero,zero,0		.64 -- Nop
+2e8:  0605552895	addiu t8,zero,255		.65
+2ec:  0049811491	subu v0,s7,t8		.65
+2f0:  0406847491	blez v0,300 <laplaciano+0x194>		.65 -- branch if register <= 0
+2f4:  0000000000	sll zero,zero,0		.65 -- Nop
+2f8:  0605421823	addiu s6,zero,255		.66 -- copy _V36 ← 255
+2fc:  2950037520	sw s6,fp,16		.67 -- store content of s6 in _V36
+300:  2412773384	lw s0,fp,8		.68 -- load content from _V23 in s0
+304:  0000000000	sll zero,zero,0		.68 -- Nop
+308:  0001077281	addu t6,zero,s0		.69 -- copy _T81 ← _V23
+30c:  0000940160	sll t3,t6,2		.70 -- _T82 = _T81 << 2
+310:  2412838924	lw s1,fp,12		.71 -- load content from _V24 in s1
+314:  0000000000	sll zero,zero,0		.71 -- Nop
+318:  0001134625	addu t2,zero,s1		.72 -- copy _T84 ← _V24
+31c:  0023746593	addu t3,t3,t2		.73 -- _T82 = _T82 + _T84
+320:  0000739456	sll t1,t3,2		.74 -- _T88 = _T82 << 2
+324:  2412904464	lw s2,fp,16		.75 -- load content from _V36 in s2
+328:  0000000000	sll zero,zero,0		.75 -- Nop
+32c:  0059328545	addu t1,gp,t1		.76
+330:  2905735232	sw s2,t1,64		.76 -- store content of t1 in _G90[_T88]
+334:  2413101068	lw s5,fp,12		.77 -- load content from _V24 in s5
+338:  0000000000	sll zero,zero,0		.77 -- Nop
+33c:  0649396225	addiu s5,s5,1		.78 -- _V24 = _V24 + 1
+340:  2949971980	sw s5,fp,12		.79 -- store content of s5 in _V24
+344:  2412969996	lw s3,fp,12		.80 -- load content from _V24 in s3
+348:  2413232132	lw s7,fp,4		.81 -- load content from _V22 in s7
+34c:  0000000000	sll zero,zero,0		.81 -- Nop
+350:  0041357347	subu v0,s3,s7		.82
+354:  0071368595	bltz v0,1a4 <laplaciano+0x38>		.82 -- branch if register < 0
+358:  0000000000	sll zero,zero,0		.82 -- Nop
+35c:  2413166600	lw s6,fp,8		.83 -- load content from _V23 in s6
+360:  0000000000	sll zero,zero,0		.83 -- Nop
+364:  0651558913	addiu s6,s6,1		.84 -- _V23 = _V23 + 1
+368:  2950037512	sw s6,fp,8		.85 -- store content of s6 in _V23
+36c:  2412773384	lw s0,fp,8		.86 -- load content from _V23 in s0
+370:  2412838912	lw s1,fp,0		.87 -- load content from _V20 in s1
+374:  0000000000	sll zero,zero,0		.87 -- Nop
+378:  0034672675	subu v0,s0,s1		.88
+37c:  0071368581	bltz v0,194 <laplaciano+0x28>		.88 -- branch if register < 0
+380:  0000000000	sll zero,zero,0		.88 -- Nop
+384:  0666697748	addiu sp,sp,20		 -- epilog| pop stack frame
+388:  0001962017	addu fp,zero,sp		 -- epilog| pop stack frame
+38c:  0065011720	jr ra		 -- epilog| return
+
+*/

+ 1 - 1
src/targets/mips/MipsTemplateDescription.java

@@ -20,7 +20,7 @@ import templates.Functions;
 public class MipsTemplateDescription implements templates.TemplateDescription {
 
     public HashMap<String, String> Formats() throws Exception {
-        String base = "{[HEX(global.position,G.addressLen,' ')]':  '}{[INSTDEC()]}{[T(1)]}{[inst]' '}",
+        String base = "{[DEC(global.position,G.addressLen,' ')]':  '}{[INSTDEC()]}{[T(1)]}{[inst]' '}",
                 end = "{[T(2)]}{'.'[tac.position]}{' -- '[comment]}";
 
         return new HashMap<String, String>() {

+ 7 - 0
src/templates/Functions.java

@@ -44,6 +44,13 @@ public class Functions {
                 }
                 return "";
             });
+            put("DEC", (FunctionInterface) (ctx, args) -> {
+                String value = args.get(0);
+                if (!value.equals("")) {
+                    return Utils.Pad(value, args.get(2), "", Integer.parseInt(args.get(1)));
+                }
+                return "";
+            });
 
             put("PAD", (FunctionInterface) (ctx, args) -> {
                 String value = args.get(0);

+ 5 - 2
src/tools/mips/Memory.java

@@ -84,7 +84,8 @@ public class Memory {
     }
 
     public Long ReadLong(long address, int rsize) throws Exception {
-        return Long.parseLong(R(address, rsize), 2);
+//        System.out.println("R(address, rsize):" + R(address, rsize));
+        return Utils.bin32ToDec(R(address, rsize));
     }
 
     public String R(long address, int rsize) throws Exception {
@@ -93,7 +94,9 @@ public class Memory {
         for (int i = 0; i < rsize; i++) {
             buffer += RB(address + i);
         }
-        return Utils.Pad(buffer, "0", Utils.PAD_LEFT, 32);
+//        return Utils.Pad(buffer, "0", Utils.PAD_LEFT, 32);
+//        System.out.println("R:" + buffer);
+        return Utils.padPreserveSignal(32, buffer);
     }
 
     public String RB(long address) throws Exception {

+ 20 - 27
src/tools/mips/MipsProcessor.java

@@ -12,6 +12,7 @@ import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.TreeMap;
 import targets.mips.Descriprion;
 
 /**
@@ -29,7 +30,7 @@ public class MipsProcessor {
     public RegisterBank RBank;
     public HashMap<String, Instruction> instructions;
 
-    public HashMap<String, Boolean> breakPoint = new HashMap<>();
+    public TreeMap<String, Boolean> breakPoint = new TreeMap<>();
 
     public MipsProcessor(MipsSettings settings) throws Exception {
 
@@ -41,7 +42,7 @@ public class MipsProcessor {
                 settings.GetInt("memory.instruction.size")
         );
         InstructionMemory.SetIO(new MemoryInitializationFile());
-        
+
         DataMemory = new Memory(
                 settings.Get("memory.data"),
                 settings.GetInt("memory.data.size")
@@ -74,11 +75,20 @@ public class MipsProcessor {
     public MipsProcessor SetBreak(String address) {
         for (String addrs : address.split(",")) {
             if (!addrs.equals("")) {
-                for (String addr : addrs.split("-")) {
-                    breakPoint.put(addr, true);
+                // Range address
+                if (addrs.contains("-")) {
+                    String[] parts = addrs.split("-");
+                    Long init = Long.parseLong(parts[0], 16), end = Long.parseLong(parts[1], 16);
+                    for (; init <= end; init += WORD) {
+                        breakPoint.put(Long.toString(init, 16), true);
+                    }
+                } else {
+
+                    breakPoint.put(addrs, true);
                 }
             }
         }
+        System.out.println("Breakpoints:\n" + breakPoint);
         return this;
     }
 
@@ -106,7 +116,7 @@ public class MipsProcessor {
         BufferedReader br = null;
         Boolean stepByStep = settings.eq("step.by.step", "true");
 
-        if (stepByStep) {
+        if (stepByStep || !breakPoint.isEmpty()) {
             br = new BufferedReader(new InputStreamReader(System.in));
         }
         // Carrega o conteudo das memorias
@@ -187,36 +197,19 @@ public class MipsProcessor {
 
                 i.Set("rs", Long.parseLong(rs, 2));
                 i.Set("rt", Long.parseLong(rt, 2));
-                i.Set("imm", bin32ToDec(bin.substring(16)));
+                i.Set("imm", Utils.bin32ToDec(bin.substring(16)));
 
                 break;
             case "J":
                 i.Set("addr.bin", bin.substring(6));
-                i.Set("imm", bin32ToDec(bin.substring(6)));
+                i.Set("imm", Utils.bin32ToDec(bin.substring(6)));
         }
         return i;
     }
 
-    public static long bin32ToDec(String bin) {
-        bin = Utils.padPreserveSignal(32, bin);
-
-        if (bin.charAt(0) == '0') {
-            return Long.parseLong(bin, 2);
-        } else {
-            long number = 0;
-            for (int index = 0; index < 32; index++) {
-                int b = bin.charAt(index) - '0';
-                number = number << 1 | b;
-            }
-            return (int) number;
-        }
-
-    }
-
-    public Integer IntToHex(Integer n) {
-        return Integer.valueOf(String.valueOf(n), 16);
-    }
-
+//    public Integer IntToHex(Integer n) {
+//        return Integer.valueOf(String.valueOf(n), 16);
+//    }
     protected void InitInstructions() {
         instructions = new HashMap<>();
         String key;

+ 27 - 42
src/tools/mips/memory/md.memory

@@ -23,48 +23,33 @@ DATA_RADIX = BIN;
 
 CONTENT
 BEGIN
-00000:	00000000000000000000000000000001;	% dec 1 %
-00004:	00000000000000000000000000000010;	% dec 2 %
-00008:	00000000000000000000000000000011;	% dec 3 %
-00012:	00000000000000000000000000000100;	% dec 4 %
+00000:	00000000000000000000000000000000;	% dec 0 %
+00004:	00000000000000000000000000000000;	% dec 0 %
+00008:	00000000000000000000000000000000;	% dec 0 %
+00012:	00000000000000000000000000000000;	% dec 0 %
 00016:	00000000000000000000000000000000;	% dec 0 %
-00020:	00000000000000000000000000000101;	% dec 5 %
-00024:	00000000000000000000000000000110;	% dec 6 %
-00028:	00000000000000000000000000000111;	% dec 7 %
-00032:	00000000000000000000000000001000;	% dec 8 %
-00036:	00000000000000000000000000000000;	% dec 0 %
-00040:	00000000000000000000000000001001;	% dec 9 %
-00044:	00000000000000000000000000001010;	% dec 10 %
-00048:	00000000000000000000000000001011;	% dec 11 %
-00052:	00000000000000000000000000001100;	% dec 12 %
+00020:	00000000000000000000000000000001;	% dec 1 %
+00024:	00000000000000000000000000000010;	% dec 2 %
+00028:	00000000000000000000000000000000;	% dec 0 %
+00032:	00000000000000000000000000000000;	% dec 0 %
+00036:	00000000000000000000000000000011;	% dec 3 %
+00040:	00000000000000000000000000000100;	% dec 4 %
+00044:	00000000000000000000000000000000;	% dec 0 %
+00048:	00000000000000000000000000000000;	% dec 0 %
+00052:	00000000000000000000000000000000;	% dec 0 %
 00056:	00000000000000000000000000000000;	% dec 0 %
-00060:	00000000000000000000000000001101;	% dec 13 %
-00064:	00000000000000000000000000001110;	% dec 14 %
-00068:	00000000000000000000000000001111;	% dec 15 %
-00072:	00000000000000000000000000010000;	% dec 16 %
-00076:	00000000000000000000000000000000;	% dec 0 %
-00080:	00000000000000000000000000000000;	% dec 0 %
-00084:	00000000000000000000000000000000;	% dec 0 %
-00088:	00000000000000000000000000000000;	% dec 0 %
-00092:	00000000000000000000000000000000;	% dec 0 %
-00096:	00000000000000000000000000000000;	% dec 0 %
-[100..120]:	00000000000000000000000000000000;
-00124:	00000000000000000000000000000000;	% dec 0 %
-00128:	00000000000000000000000000000000;	% dec 0 %
-00132:	00000000000000000000000011111111;	% dec 255 %
-[136..140]:	00000000000000000000000000000000;
-00144:	00000000000000000000000000000000;	% dec 0 %
-00148:	00000000000000000000000000000000;	% dec 0 %
-00152:	00000000000000000000000011111111;	% dec 255 %
-[156..160]:	00000000000000000000000000000000;
-00164:	00000000000000000000000011111111;	% dec 255 %
-00168:	00000000000000000000000011111111;	% dec 255 %
-00172:	00000000000000000000000011111111;	% dec 255 %
-[176..16356]:	00000000000000000000000000000000;
-16360:	00000000000000000000000000010001;	% dec 17 %
-16364:	00000000000000000000000000000100;	% dec 4 %
-16368:	00000000000000000000000000000100;	% dec 4 %
-16372:	00000000000000000000000000000100;	% dec 4 %
-16376:	00000000000000000000000000000100;	% dec 4 %
-16380:	00000000000000000000000011111111;	% dec 255 %
+00060:	00000000000000000000000000000000;	% dec 0 %
+[64..80]:	00000000000000000000000000000000;
+00084:	00000000000000000000000000000001;	% dec 1 %
+00088:	11111111111111111111111111111111;	% dec 4294967295 %
+[92..96]:	00000000000000000000000000000000;
+00100:	11111111111111111111111111111111;	% dec 4294967295 %
+00104:	11111111111111111111111111111111;	% dec 4294967295 %
+[108..16356]:	00000000000000000000000000000000;
+16360:	00000000000000000000000000000101;	% dec 5 %
+16364:	00000000000000000000000000000011;	% dec 3 %
+16368:	00000000000000000000000000000011;	% dec 3 %
+16372:	00000000000000000000000000000011;	% dec 3 %
+16376:	00000000000000000000000000000011;	% dec 3 %
+16380:	11111111111111111111111111111111;	% dec 4294967295 %
 END;

+ 187 - 182
src/tools/mips/memory/mi.memory

@@ -25,24 +25,24 @@ CONTENT
 BEGIN
 000:	00001100000000000000000000000101;	% dec 201326597 %
 004:	00000000000000000000000000000000;	% dec 0 %
-008:	00001100000000000000000001011000;	% dec 201326680 %
+008:	00001100000000000000000001011011;	% dec 201326683 %
 012:	00000000000000000000000000000000;	% dec 0 %
 016:	11111111111111111111111111111111;	% dec 4294967295 %
 020:	00100111101111011111111111101000;	% dec 666763240 %
 024:	00000000000111011111000000100001;	% dec 1962017 %
 028:	00100100000100000000000000000001;	% dec 605028353 %
 032:	10101111110100000000000000000000;	% dec 2949644288 %
-036:	00100100000100010000000000000100;	% dec 605093892 %
+036:	00100100000100010000000000000011;	% dec 605093891 %
 040:	10101111110100010000000000000100;	% dec 2949709828 %
-044:	00100100000100100000000000000100;	% dec 605159428 %
+044:	00100100000100100000000000000011;	% dec 605159427 %
 048:	10101111110100100000000000001000;	% dec 2949775368 %
 052:	00100100000100110000000000000000;	% dec 605224960 %
 056:	10101111110100110000000000001100;	% dec 2949840908 %
-060:	00001000000000000000000001001111;	% dec 134217807 %
+060:	00001000000000000000000001010010;	% dec 134217810 %
 064:	00000000000000000000000000000000;	% dec 0 %
 068:	00100100000101000000000000000000;	% dec 605290496 %
 072:	10101111110101000000000000010000;	% dec 2949906448 %
-076:	00001000000000000000000001000101;	% dec 134217797 %
+076:	00001000000000000000000001001000;	% dec 134217800 %
 080:	00000000000000000000000000000000;	% dec 0 %
 084:	10001111110101010000000000001100;	% dec 2413101068 %
 088:	00000000000000000000000000000000;	% dec 0 %
@@ -51,199 +51,204 @@ BEGIN
 100:	10001111110101100000000000001100;	% dec 2413166604 %
 104:	10001111110101110000000000000100;	% dec 2413232132 %
 108:	00000000000000000000000000000000;	% dec 0 %
-112:	00010010110101110000000000010110;	% dec 316080150 %
+112:	00010110110101110000000000000101;	% dec 383188997 %
 116:	00000000000000000000000000000000;	% dec 0 %
 120:	00100100000100000000000000000000;	% dec 605028352 %
 124:	10101111110100000000000000010100;	% dec 2949644308 %
-128:	10001111110100010000000000010000;	% dec 2412838928 %
+128:	00001000000000000000000000110111;	% dec 134217783 %
 132:	00000000000000000000000000000000;	% dec 0 %
-136:	00010010001000000000000000000110;	% dec 304087046 %
+136:	10001111110100010000000000010000;	% dec 2412838928 %
 140:	00000000000000000000000000000000;	% dec 0 %
-144:	10001111110100100000000000010000;	% dec 2412904464 %
-148:	10001111110100110000000000001000;	% dec 2412969992 %
-152:	00000000000000000000000000000000;	% dec 0 %
-156:	00010010010100110000000000001011;	% dec 307429387 %
+144:	00010010001000000000000000000110;	% dec 304087046 %
+148:	00000000000000000000000000000000;	% dec 0 %
+152:	10001111110100100000000000010000;	% dec 2412904464 %
+156:	10001111110100110000000000001000;	% dec 2412969992 %
 160:	00000000000000000000000000000000;	% dec 0 %
-164:	00100100000101000000000000000000;	% dec 605290496 %
-168:	10101111110101000000000000010100;	% dec 2949906452 %
-172:	10001111110101010000000000000000;	% dec 2413101056 %
-176:	00000000000000000000000000000000;	% dec 0 %
-180:	00000000000101011010000000100001;	% dec 1417249 %
-184:	10101111110101000000000000010100;	% dec 2949906452 %
+164:	00010110010100110000000000000101;	% dec 374538245 %
+168:	00000000000000000000000000000000;	% dec 0 %
+172:	00100100000101000000000000000000;	% dec 605290496 %
+176:	10101111110101000000000000010100;	% dec 2949906452 %
+180:	00001000000000000000000000110111;	% dec 134217783 %
+184:	00000000000000000000000000000000;	% dec 0 %
 188:	10001111110101010000000000000000;	% dec 2413101056 %
 192:	00000000000000000000000000000000;	% dec 0 %
-196:	00100110101101010000000000000001;	% dec 649396225 %
-200:	10101111110101010000000000000000;	% dec 2949971968 %
-204:	10001111110101100000000000001100;	% dec 2413166604 %
+196:	00000000000101011011000000100001;	% dec 1421345 %
+200:	10101111110101100000000000010100;	% dec 2950037524 %
+204:	10001111110101010000000000000000;	% dec 2413101056 %
 208:	00000000000000000000000000000000;	% dec 0 %
-212:	00000000000101100100100000100001;	% dec 1460257 %
-216:	00000000000010010101000010000000;	% dec 610432 %
-220:	00000001001010100100100000100001;	% dec 19548193 %
-224:	10001111110101110000000000010000;	% dec 2413232144 %
-228:	00000000000000000000000000000000;	% dec 0 %
-232:	00000000000101110101100000100001;	% dec 1529889 %
-236:	00000001001010110100100000100001;	% dec 19613729 %
-240:	00000000000010010110000010000000;	% dec 614528 %
-244:	10001111110100000000000000010100;	% dec 2412773396 %
-248:	00000000000000000000000000000000;	% dec 0 %
-252:	00000011100011000110000000100001;	% dec 59531297 %
-256:	10101101100100000000000000000000;	% dec 2911895552 %
-260:	10001111110101110000000000010000;	% dec 2413232144 %
-264:	00000000000000000000000000000000;	% dec 0 %
-268:	00100110111101110000000000000001;	% dec 653721601 %
-272:	10101111110101110000000000010000;	% dec 2950103056 %
-276:	10001111110100100000000000010000;	% dec 2412904464 %
-280:	00000000000000000000000000000000;	% dec 0 %
-284:	00100100000011100000000000000101;	% dec 604897285 %
-288:	00000010010011100001000000100011;	% dec 38670371 %
-292:	00000100010000001111111111001011;	% dec 71368651 %
-296:	00000000000000000000000000000000;	% dec 0 %
-300:	10001111110100110000000000001100;	% dec 2412969996 %
-304:	00000000000000000000000000000000;	% dec 0 %
-308:	00100110011100110000000000000001;	% dec 645070849 %
-312:	10101111110100110000000000001100;	% dec 2949840908 %
-316:	10001111110101000000000000001100;	% dec 2413035532 %
-320:	00000000000000000000000000000000;	% dec 0 %
-324:	00100100000110000000000000000101;	% dec 605552645 %
-328:	00000010100110000001000000100011;	% dec 43520035 %
-332:	00000100010000001111111110111101;	% dec 71368637 %
-336:	00000000000000000000000000000000;	% dec 0 %
-340:	00100111101111010000000000011000;	% dec 666697752 %
-344:	00000000000111011111000000100001;	% dec 1962017 %
-348:	00000011111000000000000000001000;	% dec 65011720 %
-352:	00100111101111011111111111101100;	% dec 666763244 %
+212:	00100110101101010000000000000001;	% dec 649396225 %
+216:	10101111110101010000000000000000;	% dec 2949971968 %
+220:	10001111110101110000000000001100;	% dec 2413232140 %
+224:	00000000000000000000000000000000;	% dec 0 %
+228:	00000000000101110100100000100001;	% dec 1525793 %
+232:	00000000000010010101000010000000;	% dec 610432 %
+236:	10001111110100000000000000010000;	% dec 2412773392 %
+240:	00000000000000000000000000000000;	% dec 0 %
+244:	00000000000100000101100000100001;	% dec 1071137 %
+248:	00000001010010110101000000100001;	% dec 21712929 %
+252:	00000000000010100110000010000000;	% dec 680064 %
+256:	10001111110100010000000000010100;	% dec 2412838932 %
+260:	00000000000000000000000000000000;	% dec 0 %
+264:	00000011100011000110000000100001;	% dec 59531297 %
+268:	10101101100100010000000000000000;	% dec 2911961088 %
+272:	10001111110100110000000000010000;	% dec 2412970000 %
+276:	00000000000000000000000000000000;	% dec 0 %
+280:	00100110011100110000000000000001;	% dec 645070849 %
+284:	10101111110100110000000000010000;	% dec 2949840912 %
+288:	10001111110101000000000000010000;	% dec 2413035536 %
+292:	00000000000000000000000000000000;	% dec 0 %
+296:	00100100000011100000000000000100;	% dec 604897284 %
+300:	00000010100011100001000000100011;	% dec 42864675 %
+304:	00000100010000001111111111001000;	% dec 71368648 %
+308:	00000000000000000000000000000000;	% dec 0 %
+312:	10001111110101100000000000001100;	% dec 2413166604 %
+316:	00000000000000000000000000000000;	% dec 0 %
+320:	00100110110101100000000000000001;	% dec 651558913 %
+324:	10101111110101100000000000001100;	% dec 2950037516 %
+328:	10001111110101010000000000001100;	% dec 2413101068 %
+332:	00000000000000000000000000000000;	% dec 0 %
+336:	00100100000110000000000000000100;	% dec 605552644 %
+340:	00000010101110000001000000100011;	% dec 45617187 %
+344:	00000100010000001111111110111010;	% dec 71368634 %
+348:	00000000000000000000000000000000;	% dec 0 %
+352:	00100111101111010000000000011000;	% dec 666697752 %
 356:	00000000000111011111000000100001;	% dec 1962017 %
-360:	00100100000100000000000000000100;	% dec 605028356 %
-364:	10101111110100000000000000000000;	% dec 2949644288 %
-368:	00100100000100010000000000000100;	% dec 605093892 %
-372:	10101111110100010000000000000100;	% dec 2949709828 %
-376:	00100100000100100000000000000001;	% dec 605159425 %
-380:	10101111110100100000000000001000;	% dec 2949775368 %
-384:	00001000000000000000000011010110;	% dec 134217942 %
-388:	00000000000000000000000000000000;	% dec 0 %
-392:	00100100000100110000000000000001;	% dec 605224961 %
-396:	10101111110100110000000000001100;	% dec 2949840908 %
-400:	00001000000000000000000011001100;	% dec 134217932 %
-404:	00000000000000000000000000000000;	% dec 0 %
-408:	10001111110101000000000000001000;	% dec 2413035528 %
-412:	00000000000000000000000000000000;	% dec 0 %
-416:	00100110100011011111111111111111;	% dec 646840319 %
-420:	00000000000011010111000010000000;	% dec 880768 %
-424:	00000001101011100110100000100001;	% dec 28207137 %
-428:	10001111110101010000000000001100;	% dec 2413101068 %
-432:	00000000000000000000000000000000;	% dec 0 %
-436:	00000000000101010111100000100001;	% dec 1407009 %
-440:	00000001101011110110100000100001;	% dec 28272673 %
-444:	00000000000011011100000010000000;	% dec 901248 %
-448:	00000011100110001100000000100001;	% dec 60342305 %
-452:	10001111000010000000000000000000;	% dec 2399666176 %
-456:	10001111110101000000000000001000;	% dec 2413035528 %
-460:	00000000000000000000000000000000;	% dec 0 %
-464:	00000000000101000100100000100001;	% dec 1329185 %
-468:	00000000000010010101000010000000;	% dec 610432 %
-472:	00000001001010100100100000100001;	% dec 19548193 %
-476:	10001111110101010000000000001100;	% dec 2413101068 %
+360:	00000011111000000000000000001000;	% dec 65011720 %
+364:	00100111101111011111111111101100;	% dec 666763244 %
+368:	00000000000111011111000000100001;	% dec 1962017 %
+372:	00100100000100000000000000000011;	% dec 605028355 %
+376:	10101111110100000000000000000000;	% dec 2949644288 %
+380:	00100100000100010000000000000011;	% dec 605093891 %
+384:	10101111110100010000000000000100;	% dec 2949709828 %
+388:	00100100000100100000000000000001;	% dec 605159425 %
+392:	10101111110100100000000000001000;	% dec 2949775368 %
+396:	00001000000000000000000011011011;	% dec 134217947 %
+400:	00000000000000000000000000000000;	% dec 0 %
+404:	00100100000100110000000000000001;	% dec 605224961 %
+408:	10101111110100110000000000001100;	% dec 2949840908 %
+412:	00001000000000000000000011010001;	% dec 134217937 %
+416:	00000000000000000000000000000000;	% dec 0 %
+420:	10001111110101000000000000001000;	% dec 2413035528 %
+424:	00000000000000000000000000000000;	% dec 0 %
+428:	00100110100011011111111111111111;	% dec 646840319 %
+432:	00000000000011010111000010000000;	% dec 880768 %
+436:	10001111110101010000000000001100;	% dec 2413101068 %
+440:	00000000000000000000000000000000;	% dec 0 %
+444:	00000000000101010111100000100001;	% dec 1407009 %
+448:	00000001110011110111000000100001;	% dec 30371873 %
+452:	00000000000011101100000010000000;	% dec 966784 %
+456:	00000011100110001100000000100001;	% dec 60342305 %
+460:	10001111000101100000000000000000;	% dec 2400583680 %
+464:	00000000000000000000000000000000;	% dec 0 %
+468:	00000000000101101011100000100001;	% dec 1488929 %
+472:	10101111110101110000000000010000;	% dec 2950103056 %
+476:	10001111110101000000000000001000;	% dec 2413035528 %
 480:	00000000000000000000000000000000;	% dec 0 %
-484:	00100110101011001111111111111111;	% dec 648871935 %
-488:	00000001001011000100100000100001;	% dec 19679265 %
-492:	00000000000010010111000010000000;	% dec 618624 %
-496:	00000011100011100111000000100001;	% dec 59666465 %
-500:	10001101110101110000000000000000;	% dec 2379677696 %
-504:	00000000000000000000000000000000;	% dec 0 %
-508:	00000000000101110111100000100001;	% dec 1538081 %
-512:	00000001000011110110100000100001;	% dec 17786913 %
-516:	10001111110101000000000000001000;	% dec 2413035528 %
-520:	00000000000000000000000000000000;	% dec 0 %
-524:	00000000000101001100000000100001;	% dec 1359905 %
-528:	00000000000110000101000010000000;	% dec 1593472 %
-532:	00000011000010101100000000100001;	% dec 51036193 %
-536:	10001111110101010000000000001100;	% dec 2413101068 %
+484:	00000000000101000100000000100001;	% dec 1327137 %
+488:	00000000000010000100100010000000;	% dec 542848 %
+492:	10001111110101010000000000001100;	% dec 2413101068 %
+496:	00000000000000000000000000000000;	% dec 0 %
+500:	00100110101010111111111111111111;	% dec 648806399 %
+504:	00000001001010110100100000100001;	% dec 19613729 %
+508:	00000000000010010110000010000000;	% dec 614528 %
+512:	00000011100011000110000000100001;	% dec 59531297 %
+516:	10001101100011010000000000000000;	% dec 2374828032 %
+520:	10001111110101110000000000010000;	% dec 2413232144 %
+524:	00000000000000000000000000000000;	% dec 0 %
+528:	00000010111011011011100000100001;	% dec 49133601 %
+532:	10101111110101110000000000010000;	% dec 2950103056 %
+536:	10001111110101000000000000001000;	% dec 2413035528 %
 540:	00000000000000000000000000000000;	% dec 0 %
-544:	00100110101011000000000000000001;	% dec 648806401 %
-548:	00000011000011001100000000100001;	% dec 51167265 %
-552:	00000000000110000100100010000000;	% dec 1591424 %
-556:	00000011100010010100100000100001;	% dec 59328545 %
-560:	10001101001100000000000000000000;	% dec 2368733184 %
-564:	00000000000000000000000000000000;	% dec 0 %
-568:	00000000000100000111000000100001;	% dec 1077281 %
-572:	00000001101011100100000000100001;	% dec 28196897 %
-576:	10001111110101000000000000001000;	% dec 2413035528 %
-580:	00000000000000000000000000000000;	% dec 0 %
-584:	00100110100010100000000000000001;	% dec 646578177 %
-588:	00000000000010100101100010000000;	% dec 678016 %
-592:	00000001010010110101000000100001;	% dec 21712929 %
-596:	10001111110101010000000000001100;	% dec 2413101068 %
+544:	00000000000101000111100000100001;	% dec 1341473 %
+548:	00000000000011110111000010000000;	% dec 1011840 %
+552:	10001111110101010000000000001100;	% dec 2413101068 %
+556:	00000000000000000000000000000000;	% dec 0 %
+560:	00100110101010000000000000000001;	% dec 648544257 %
+564:	00000001110010000111000000100001;	% dec 29913121 %
+568:	00000000000011100101000010000000;	% dec 938112 %
+572:	00000011100010100101000000100001;	% dec 59396129 %
+576:	10001101010010110000000000000000;	% dec 2370502656 %
+580:	10001111110101110000000000010000;	% dec 2413232144 %
+584:	00000000000000000000000000000000;	% dec 0 %
+588:	00000010111010111011100000100001;	% dec 49002529 %
+592:	10101111110101110000000000010000;	% dec 2950103056 %
+596:	10001111110101000000000000001000;	% dec 2413035528 %
 600:	00000000000000000000000000000000;	% dec 0 %
-604:	00000000000101010110000000100001;	% dec 1400865 %
-608:	00000001010011000101000000100001;	% dec 21778465 %
-612:	00000000000010101100000010000000;	% dec 704640 %
-616:	00000011100110001100000000100001;	% dec 60342305 %
-620:	10001111000100010000000000000000;	% dec 2400256000 %
-624:	00000000000000000000000000000000;	% dec 0 %
-628:	00000000000100010100100000100001;	% dec 1132577 %
-632:	00000001000010010110100000100001;	% dec 17393697 %
-636:	10001111110101000000000000001000;	% dec 2413035528 %
-640:	00000000000000000000000000000000;	% dec 0 %
-644:	00000000000101000111000000100001;	% dec 1339425 %
-648:	00000000000011100111100010000000;	% dec 948352 %
-652:	00000001110011110111000000100001;	% dec 30371873 %
-656:	10001111110101010000000000001100;	% dec 2413101068 %
+604:	00100110100011000000000000000001;	% dec 646709249 %
+608:	00000000000011000110100010000000;	% dec 813184 %
+612:	10001111110101010000000000001100;	% dec 2413101068 %
+616:	00000000000000000000000000000000;	% dec 0 %
+620:	00000000000101010111100000100001;	% dec 1407009 %
+624:	00000001101011110110100000100001;	% dec 28272673 %
+628:	00000000000011011100000010000000;	% dec 901248 %
+632:	00000011100110001100000000100001;	% dec 60342305 %
+636:	10001111000010000000000000000000;	% dec 2399666176 %
+640:	10001111110101110000000000010000;	% dec 2413232144 %
+644:	00000000000000000000000000000000;	% dec 0 %
+648:	00000010111010001011100000100001;	% dec 48805921 %
+652:	10101111110101110000000000010000;	% dec 2950103056 %
+656:	10001111110101000000000000001000;	% dec 2413035528 %
 660:	00000000000000000000000000000000;	% dec 0 %
-664:	00000000000101010101100000100001;	% dec 1398817 %
-668:	00000001110010110111000000100001;	% dec 30109729 %
-672:	00000000000011100110000010000000;	% dec 942208 %
-676:	00000011100011000110000000100001;	% dec 59531297 %
-680:	10001101100100100000000000000000;	% dec 2375155712 %
-684:	00000000000000000000000000000000;	% dec 0 %
-688:	00000000000100100101000000100001;	% dec 1200161 %
-692:	00100100000110000000000000000100;	% dec 605552644 %
-696:	00000001010110000100000000011000;	% dec 22560792 %
-700:	00000000000000000100000000010010;	% dec 16402 %
-704:	00000001101010001001100000100011;	% dec 27826211 %
-708:	10101111110100110000000000010000;	% dec 2949840912 %
-712:	10001111110100110000000000010000;	% dec 2412970000 %
-716:	00000000000000000000000000000000;	% dec 0 %
-720:	00100100000010010000000011111111;	% dec 604569855 %
-724:	00000010011010010001000000100011;	% dec 40439843 %
-728:	00011000010000000000000000000011;	% dec 406847491 %
-732:	00000000000000000000000000000000;	% dec 0 %
-736:	00100100000101100000000011111111;	% dec 605421823 %
-740:	10101111110101100000000000010000;	% dec 2950037520 %
-744:	10001111110101110000000000001000;	% dec 2413232136 %
-748:	00000000000000000000000000000000;	% dec 0 %
-752:	00000000000101110101100000100001;	% dec 1529889 %
-756:	00000000000010110111000010000000;	% dec 749696 %
-760:	00000001011011100101100000100001;	% dec 24008737 %
-764:	10001111110100000000000000001100;	% dec 2412773388 %
-768:	00000000000000000000000000000000;	% dec 0 %
-772:	00000000000100000110000000100001;	% dec 1073185 %
-776:	00000001011011000101100000100001;	% dec 23877665 %
-780:	00000000000010110101000010000000;	% dec 741504 %
-784:	10001111110100010000000000010000;	% dec 2412838928 %
+664:	00000000000101000111000000100001;	% dec 1339425 %
+668:	00000000000011100101000010000000;	% dec 938112 %
+672:	10001111110101010000000000001100;	% dec 2413101068 %
+676:	00000000000000000000000000000000;	% dec 0 %
+680:	00000000000101010101100000100001;	% dec 1398817 %
+684:	00000001010010110101000000100001;	% dec 21712929 %
+688:	00000000000010100100100010000000;	% dec 673920 %
+692:	00000011100010010100100000100001;	% dec 59328545 %
+696:	10001101001100110000000000000000;	% dec 2368929792 %
+700:	00000000000000000000000000000000;	% dec 0 %
+704:	00000000000100110110000000100001;	% dec 1269793 %
+708:	00100100000011110000000000000100;	% dec 604962820 %
+712:	00000001100011110110100000011000;	% dec 26175512 %
+716:	00000000000000000110100000010010;	% dec 26642 %
+720:	10001111110101110000000000010000;	% dec 2413232144 %
+724:	00000000000000000000000000000000;	% dec 0 %
+728:	00000010111011011011100000100011;	% dec 49133603 %
+732:	10101111110101110000000000010000;	% dec 2950103056 %
+736:	10001111110101110000000000010000;	% dec 2413232144 %
+740:	00000000000000000000000000000000;	% dec 0 %
+744:	00100100000110000000000011111111;	% dec 605552895 %
+748:	00000010111110000001000000100011;	% dec 49811491 %
+752:	00011000010000000000000000000011;	% dec 406847491 %
+756:	00000000000000000000000000000000;	% dec 0 %
+760:	00100100000101100000000011111111;	% dec 605421823 %
+764:	10101111110101100000000000010000;	% dec 2950037520 %
+768:	10001111110100000000000000001000;	% dec 2412773384 %
+772:	00000000000000000000000000000000;	% dec 0 %
+776:	00000000000100000111000000100001;	% dec 1077281 %
+780:	00000000000011100101100010000000;	% dec 940160 %
+784:	10001111110100010000000000001100;	% dec 2412838924 %
 788:	00000000000000000000000000000000;	% dec 0 %
-792:	00000011100010100101000000100001;	% dec 59396129 %
-796:	10101101010100010000000001100100;	% dec 2907766884 %
-800:	10001111110100000000000000001100;	% dec 2412773388 %
-804:	00000000000000000000000000000000;	% dec 0 %
-808:	00100110000100000000000000000001;	% dec 638582785 %
-812:	10101111110100000000000000001100;	% dec 2949644300 %
-816:	10001111110101010000000000001100;	% dec 2413101068 %
-820:	10001111110100100000000000000100;	% dec 2412904452 %
+792:	00000000000100010101000000100001;	% dec 1134625 %
+796:	00000001011010100101100000100001;	% dec 23746593 %
+800:	00000000000010110100100010000000;	% dec 739456 %
+804:	10001111110100100000000000010000;	% dec 2412904464 %
+808:	00000000000000000000000000000000;	% dec 0 %
+812:	00000011100010010100100000100001;	% dec 59328545 %
+816:	10101101001100100000000001000000;	% dec 2905735232 %
+820:	10001111110101010000000000001100;	% dec 2413101068 %
 824:	00000000000000000000000000000000;	% dec 0 %
-828:	00000010101100100001000000100011;	% dec 45223971 %
-832:	00000100010000001111111110010101;	% dec 71368597 %
-836:	00000000000000000000000000000000;	% dec 0 %
-840:	10001111110100110000000000001000;	% dec 2412969992 %
+828:	00100110101101010000000000000001;	% dec 649396225 %
+832:	10101111110101010000000000001100;	% dec 2949971980 %
+836:	10001111110100110000000000001100;	% dec 2412969996 %
+840:	10001111110101110000000000000100;	% dec 2413232132 %
 844:	00000000000000000000000000000000;	% dec 0 %
-848:	00100110011100110000000000000001;	% dec 645070849 %
-852:	10101111110100110000000000001000;	% dec 2949840904 %
-856:	10001111110101100000000000001000;	% dec 2413166600 %
-860:	10001111110101110000000000000000;	% dec 2413232128 %
+848:	00000010011101110001000000100011;	% dec 41357347 %
+852:	00000100010000001111111110010011;	% dec 71368595 %
+856:	00000000000000000000000000000000;	% dec 0 %
+860:	10001111110101100000000000001000;	% dec 2413166600 %
 864:	00000000000000000000000000000000;	% dec 0 %
-868:	00000010110101110001000000100011;	% dec 47648803 %
-872:	00000100010000001111111110000111;	% dec 71368583 %
-876:	00000000000000000000000000000000;	% dec 0 %
-880:	00100111101111010000000000010100;	% dec 666697748 %
-884:	00000000000111011111000000100001;	% dec 1962017 %
-888:	00000011111000000000000000001000;	% dec 65011720 %
+868:	00100110110101100000000000000001;	% dec 651558913 %
+872:	10101111110101100000000000001000;	% dec 2950037512 %
+876:	10001111110100000000000000001000;	% dec 2412773384 %
+880:	10001111110100010000000000000000;	% dec 2412838912 %
+884:	00000000000000000000000000000000;	% dec 0 %
+888:	00000010000100010001000000100011;	% dec 34672675 %
+892:	00000100010000001111111110000101;	% dec 71368581 %
+896:	00000000000000000000000000000000;	% dec 0 %
+900:	00100111101111010000000000010100;	% dec 666697748 %
+904:	00000000000111011111000000100001;	% dec 1962017 %
+908:	00000011111000000000000000001000;	% dec 65011720 %
 END;

+ 172 - 7
test/MemoryJUnitTest.java

@@ -4,6 +4,7 @@
  * and open the template in the editor.
  */
 
+import API.Utils;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
@@ -56,17 +57,33 @@ public class MemoryJUnitTest {
         memory.WB(address, bd);
         Assert.assertEquals(bd, memory.RB(address));
     }
+//
+//    @Test
+//    public void WriteMultByteAddressed() throws Exception {
+//        Long value = 14030L;
+//
+//        Long address = 16L;
+//        // Escreve 4 bytes a partir do endereco 16
+//        memory.W(address, Long.toBinaryString(value), 4);
+//
+//        // Lê 4 bytes a partir do endereco 16 -> converte binario para long
+//        Assert.assertEquals(value, memory.ReadLong(address, 4));
+//    }
 
     @Test
-    public void WriteMultByteAddressed() throws Exception {
-        Long value = 14030L;
-
-        Long address = 16L;
+    public void WriteNegativeValueAddressed() throws Exception {
+        String bin = Long.toBinaryString(3L);
+        printOneAndTwosComplement(Utils.Pad(32, bin));
+        bin = Long.toBinaryString(-3L);
+        printOneAndTwosComplement(Utils.Pad(32, bin));
+//        System.out.println("2c:" + findTwoscomplement(new StringBuffer(Long.toBinaryString(value))));
+        //        convertStringToDecimal(
+        //                findTwoscomplement(new StringBuffer(Long.toBinaryString(value)))
+        //        );
         // Escreve 4 bytes a partir do endereco 16
-        memory.W(address, Long.toBinaryString(value), 4);
-
+        //        memory.W(address, Long.toBinaryString(value), 4);
         // Lê 4 bytes a partir do endereco 16 -> converte binario para long
-        Assert.assertEquals(value, memory.ReadLong(address, 4));
+        //        Assert.assertEquals(value, memory.ReadLong(address, 4));
     }
 
     @Test
@@ -82,4 +99,152 @@ public class MemoryJUnitTest {
         Assert.assertTrue(result);
     }
 
+    // Print 1's and 2's complement of binary number
+// represented by "bin"
+    public static void printOneAndTwosComplement(String bin) {
+        int n = bin.length();
+        int i;
+
+        String ones = "";
+        StringBuilder twos;
+
+        //  for ones complement flip every bit
+        for (i = 0; i < n; i++) {
+            ones += flip(bin.charAt(i));
+        }
+        System.out.println("Bin b:" + bin);
+        System.out.println("One b:" + ones);
+
+        twos = new StringBuilder(Long.toBinaryString(Long.parseLong(ones, 2) + 1L));
+
+        System.out.println("Two b:" + twos);
+//        for (i = n - 1; i >= 0; i--) {
+        for (i = 0; i < n; i++) {
+            if (ones.charAt(i) == '1') {
+                twos.setCharAt(i, '0');
+            } else {
+                twos.setCharAt(i, '1');
+                break;
+            }
+        }
+        System.out.println("Two a:" + twos);
+        // If No break : all are 1  as in 111  or  11111;
+        // in such case, add extra 1 at beginning
+        //        if (i == -1) {
+        //            twos = '1' + twos;
+        //        }
+//        System.out.println("1's complement: " + ones);
+//        System.out.println("2's complement: " +);
+    }
+
+    // Returns '0' for '1' and '1' for '0'
+    public static char flip(char c) {
+        return (c == '0') ? '1' : '0';
+    }
+//
+//    static String findTwoscomplement(StringBuffer str) {
+//        int n = str.length();
+//
+//        // Traverse the string to get first '1' from
+//        // the last of string
+//        int i;
+//        for (i = n - 1; i >= 0; i--) {
+//            if (str.charAt(i) == '1') {
+//                break;
+//            }
+//        }
+//
+//        // If there exists no '1' concat 1 at the
+//        // starting of string
+//        if (i == -1) {
+//            return "1" + str;
+//        }
+//
+//        // Continue traversal after the position of
+//        // first '1'
+//        for (int k = i - 1; k >= 0; k--) {
+//            //Just flip the values
+//            if (str.charAt(k) == '1') {
+//                str.replace(k, k + 1, "0");
+//            } else {
+//                str.replace(k, k + 1, "1");
+//            }
+//        }
+//
+//        // return the modified string
+//        return str.toString();
+//    }
+//
+//    public static void convertStringToDecimal(String binary) {
+//        int decimal = 0;
+//
+//        int power = 0;
+//
+//        if (binary.charAt(0) == '1' && binary.length() == 32) {
+//
+//            StringBuilder builder = new StringBuilder();
+//
+//            for (int i = 0; i < binary.length(); i++) {
+//
+//                builder.append((binary.charAt(i) == '1' ? '0' : '1'));
+//
+//            }
+//
+//            while (binary.length() > 0) {
+//
+//                int temp = Integer
+//                        .parseInt(builder.charAt((binary.length()) - 1) + "");
+//                decimal += temp * Math.pow(2, power++);
+//                binary = binary.substring(0, binary.length() - 1);
+//
+//            }
+//
+//            System.out.println((decimal + 1) * (-1));
+//
+//        } else {
+//
+//            while (binary.length() > 0) {
+//                int temp = Integer
+//                        .parseInt(binary.charAt((binary.length()) - 1) + "");
+//                decimal += temp * Math.pow(2, power++);
+//                binary = binary.substring(0, binary.length() - 1);
+//            }
+//
+//            System.out.println(decimal);
+//
+//        }
+//    }
+
+//    public static String TwosCompliment(String bin) {
+//        String twos = "", ones = "";
+//        System.out.println("bin:" + bin);
+//
+//        for (int i = 0; i < bin.length(); i++) {
+//            ones += flip(bin.charAt(i));
+//        }
+//
+//        int number0 = (int) Long.parseLong(ones, 2);
+//
+//        System.out.println("number0:" + number0);
+//
+//        StringBuilder builder = new StringBuilder(ones);
+//        boolean b = false;
+//
+//        for (int i = ones.length() - 1; i > 0; i--) {
+//            if (ones.charAt(i) == '1') {
+//                builder.setCharAt(i, '0');
+//            } else {
+//                builder.setCharAt(i, '1');
+//                b = true;
+//                break;
+//            }
+//        }
+//        if (!b) {
+//            builder.append("1", 0, 7);
+//        }
+//
+//        twos = builder.toString();
+//
+//        return twos;
+//    }
 }