From 000f140e8be5431f16288ed86d70380322d16438 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bart=C5=82omiej=20Szostak?= <BartGOKU@onet.pl>
Date: Sun, 21 Apr 2024 16:23:29 +0200
Subject: [PATCH] Implemented add instruction (only positive integers for now)

---
 src/shardware.adb    |  6 ++++++
 src/shardware.ads    |  1 +
 src/sillymachine.adb | 10 ++++++++++
 3 files changed, 17 insertions(+)

diff --git a/src/shardware.adb b/src/shardware.adb
index c34e089..3743a25 100644
--- a/src/shardware.adb
+++ b/src/shardware.adb
@@ -17,4 +17,10 @@ package body Shardware is
     Register := Value;
   end Mov;
 
+  procedure Add (Register : in out Integer; Value : Integer) is
+  begin
+    Register := Register + Value;
+  end Add;
+
+
 end Shardware;
diff --git a/src/shardware.ads b/src/shardware.ads
index 13ad843..863b15b 100644
--- a/src/shardware.ads
+++ b/src/shardware.ads
@@ -11,5 +11,6 @@ package Shardware is
   function My_Shift (Value : Byte; Amount : Integer) return Integer;
 
   procedure Mov (Register : in out Integer; Value : Integer);
+  procedure Add (Register : in out Integer; Value : Integer);
 
 end Shardware;
diff --git a/src/sillymachine.adb b/src/sillymachine.adb
index 53df613..40d9596 100644
--- a/src/sillymachine.adb
+++ b/src/sillymachine.adb
@@ -115,11 +115,21 @@ begin
           );
         when 1 => Mov(Register(Integer(Instruction (2))),             -- Move Register to Register 
           Register(Integer(Instruction (3))));
+        when 3 => null;                                               -- Move Memory to Register
+        when 4 => Add(Register(Integer(Instruction (2))),             -- Add Int to Register (Only positive values for now)
+          Integer(My_Shift(Instruction (7), 24) 
+          + My_Shift(Instruction (8), 16)
+          + My_Shift(Instruction (9), 8) 
+          + Integer(Instruction (10)))
+          );
+          when 5 => Add(Register(Integer(Instruction (2))),             -- Add Register to Register 
+            Register(Integer(Instruction (3))));
         when 65535 => goto THE_END; -- exit opcode
         when others => null;
       end case;
 
       Put_Line(Integer'Image(Register(0)));
+      Put_Line(Integer'Image(Register(1)));
 
       PC := PC + 16; -- increment program counter to next instruction
     end loop;