aboutsummaryrefslogtreecommitdiffstats
path: root/src/ada_chip.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/ada_chip.adb')
-rw-r--r--src/ada_chip.adb12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/ada_chip.adb b/src/ada_chip.adb
index a432178..36dc1f2 100644
--- a/src/ada_chip.adb
+++ b/src/ada_chip.adb
@@ -10,7 +10,7 @@ with Video;
procedure Ada_Chip is
package Random_Byte is new Ada.Numerics.Discrete_Random (Byte);
- Steps_Per_Frame : constant := 16;
+ Steps_Per_Frame : constant := 8;
State : CPU.Instance;
Random_Generator : Random_Byte.Generator;
@@ -31,7 +31,10 @@ procedure Ada_Chip is
for J in 0 .. 7 loop
if Row_Pixels (7 - J) then
- if Video.Toggle_Pixel (X + sfUint32 (J), Y + sfUint32 (I)) then
+ if Video.Toggle_Pixel
+ ((X + sfUint32 (J)) mod Video.Width,
+ (Y + sfUint32 (I)) mod Video.Height)
+ then
VF := True;
end if;
end if;
@@ -112,6 +115,8 @@ procedure Ada_Chip is
when Misc => case To_Byte (ins) is
when 16#07# =>
State.Registers (X_Register (ins)) := State.Delay_Timer;
+ when 16#0A# =>
+ State.Registers (X_Register (ins)) := Byte (Video.Next_Key);
when 16#15# =>
State.Delay_Timer := State.Registers (X_Register (ins));
when 16#18# => null; -- TODO: sound
@@ -120,7 +125,7 @@ procedure Ada_Chip is
Address (State.Registers (X_Register (ins)));
when 16#29# =>
State.Address_Register :=
- Address (State.Registers (X_Register (ins))) * 5;
+ Address (State.Registers (X_Register (ins)) mod 16) * 5;
when 16#33# => begin
State.Memory (State.Address_Register) :=
State.Registers (X_Register (ins)) / 100;
@@ -158,6 +163,7 @@ begin
while Video.Is_Running loop
Video.Display;
+ Video.Poll_Events;
if State.Delay_Timer > 0 then
State.Delay_Timer := State.Delay_Timer - 1;