aboutsummaryrefslogtreecommitdiffstats
path: root/src/cpu.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu.ads')
-rw-r--r--src/cpu.ads30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/cpu.ads b/src/cpu.ads
new file mode 100644
index 0000000..2fb34f2
--- /dev/null
+++ b/src/cpu.ads
@@ -0,0 +1,30 @@
+with Ada.Containers.Vectors;
+with ISA;
+
+package CPU is
+ use ISA;
+
+ package Address_Stack is new Ada.Containers.Vectors
+ (Index_Type => Natural, Element_Type => Address);
+
+ type Instance is record
+ Memory : Bank;
+ Registers : Register_Bank;
+ Program_Counter : Address := Start_Address;
+ Address_Register : Address := 0;
+ Stack : Address_Stack.Vector;
+ Delay_Timer : Byte := 0;
+ end record;
+
+ procedure Load_File (Inst : in out Instance; File_Name : String);
+
+ function Get_Opcode (Inst : in out Instance) return Opcode;
+
+ procedure Reg_Store (Inst : in out Instance; VX : Register_Index);
+ procedure Reg_Load (Inst : in out Instance; VX : Register_Index);
+ procedure Ret (Inst : in out Instance);
+ procedure Call (Inst : in out Instance; A : Address);
+ procedure Jump (Inst : in out Instance; A : Address);
+ procedure Skip (Inst : in out Instance);
+ procedure Math (Inst : in out Instance; VX, VY : Register_Index; N : Byte);
+end CPU;