aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-04-05 11:48:39 -0500
committerJesse Luehrs <doy@tozt.net>2012-04-05 11:48:39 -0500
commit1ab52f775c9791e440adba515c8295b121fcb8ef (patch)
treee3a811ce3d056ff8e6421cd60583b2b5b8a62651
parent0a275c6ae1ed1d6de807f0dc8c2d29fe222140c0 (diff)
downloadgames-emulation-dcpu16-1ab52f775c9791e440adba515c8295b121fcb8ef.tar.gz
games-emulation-dcpu16-1ab52f775c9791e440adba515c8295b121fcb8ef.zip
SP starts at 0
-rw-r--r--lib/Games/Emulation/DCPU16.pm18
-rw-r--r--t/spec.t228
2 files changed, 121 insertions, 125 deletions
diff --git a/lib/Games/Emulation/DCPU16.pm b/lib/Games/Emulation/DCPU16.pm
index dd0855c..41dbbf8 100644
--- a/lib/Games/Emulation/DCPU16.pm
+++ b/lib/Games/Emulation/DCPU16.pm
@@ -21,7 +21,7 @@ sub new {
memory => [(0x0000) x 0x10000],
registers => [(0x0000) x 8],
PC => 0x0000,
- SP => 0xffff,
+ SP => 0x0000,
O => 0x0000,
halt => undef,
@@ -186,13 +186,15 @@ sub _parse_value {
$self->{$key} = $value - 0x20;
}
elsif ($value == 0x18) {
- $self->{$key} = $self->{memory}[++$self->{SP}];
+ $self->{$key} = $self->{memory}[($self->{SP}++ & 0xffff)];
+ $self->{SP} &= 0xffff;
}
elsif ($value == 0x19) {
$self->{$key} = $self->{memory}[$self->{SP}];
}
elsif ($value == 0x1a) {
- $self->{$key} = $self->{memory}[$self->{SP}--];
+ $self->{$key} = $self->{memory}[(--$self->{SP} & 0xffff)];
+ $self->{SP} &= 0xffff;
}
elsif ($value == 0x1b) {
$self->{$key} = $self->{SP};
@@ -491,7 +493,8 @@ sub _op_JSR {
return if $self->_delay(2);
- $self->{memory}[$self->{SP}--] = $self->{PC};
+ $self->{memory}[(--$self->{SP} & 0xffff)] = $self->{PC};
+ $self->{SP} &= 0xffff;
$self->{PC} = $a;
}
@@ -504,10 +507,6 @@ sub _op_HLT {
=for notes
-is SP defined to start at 0xffff?
-
-is PC defined to start at 0?
-
behavior of MOD?
behavior of underflow?
@@ -521,9 +520,6 @@ does memory start out as 0, or undefined?
what happens when an invalid op is read?
-POP should be [++SP] and PUSH should be [SP--] (actually PUSH shouldn't return
-anything, probably)
-
=cut
1;
diff --git a/t/spec.t b/t/spec.t
index 9945780..9075ea3 100644
--- a/t/spec.t
+++ b/t/spec.t
@@ -47,7 +47,7 @@ isa_ok($cpu, 'Games::Emulation::DCPU16');
is_deeply($cpu->memory, [(0) x 0x10000]);
is_deeply($cpu->registers, [ (0x0000) x 8 ]);
is($cpu->PC, 0x0000);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->load($bytecode);
@@ -67,7 +67,7 @@ is_deeply(
[ (0x0000) x 8 ],
);
is($cpu->PC, 0x0000);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x0030
@@ -87,7 +87,7 @@ is_deeply(
[ (0x0000) x 8 ],
);
is($cpu->PC, 0x0002);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET A, 0x30
@@ -107,7 +107,7 @@ is_deeply(
[ 0x0030, (0x0000) x 7 ],
);
is($cpu->PC, 0x0002);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x1000
@@ -127,7 +127,7 @@ is_deeply(
[ 0x0030, (0x0000) x 7 ],
);
is($cpu->PC, 0x0004);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x0020
@@ -147,7 +147,7 @@ is_deeply(
[ 0x0030, (0x0000) x 7 ],
);
is($cpu->PC, 0x0005);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x1000], 0x20
@@ -169,7 +169,7 @@ is_deeply(
[ 0x0030, (0x0000) x 7 ],
);
is($cpu->PC, 0x0005);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x1000
@@ -191,7 +191,7 @@ is_deeply(
[ 0x0030, (0x0000) x 7 ],
);
is($cpu->PC, 0x0007);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -213,7 +213,7 @@ is_deeply(
[ 0x0030, (0x0000) x 7 ],
);
is($cpu->PC, 0x0007);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB A, [0x1000]
@@ -235,7 +235,7 @@ is_deeply(
[ 0x0010, (0x0000) x 7 ],
);
is($cpu->PC, 0x0007);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -257,7 +257,7 @@ is_deeply(
[ 0x0010, (0x0000) x 7 ],
);
is($cpu->PC, 0x0008);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -279,7 +279,7 @@ is_deeply(
[ 0x0010, (0x0000) x 7 ],
);
is($cpu->PC, 0x0008);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN A, 0x10
@@ -301,7 +301,7 @@ is_deeply(
[ 0x0010, (0x0000) x 7 ],
);
is($cpu->PC, 0x000a);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET I, 10
@@ -323,7 +323,7 @@ is_deeply(
[ 0x0010, (0x0000) x 5, 0x000a, 0x0000 ],
);
is($cpu->PC, 0x000b);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -345,7 +345,7 @@ is_deeply(
[ 0x0010, (0x0000) x 5, 0x000a, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET A, 0x2000
@@ -367,7 +367,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x000a, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -389,7 +389,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x000a, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -411,7 +411,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x000a, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -433,7 +433,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x000a, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -455,7 +455,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -477,7 +477,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -499,7 +499,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -521,7 +521,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -543,7 +543,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -565,7 +565,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -587,7 +587,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -609,7 +609,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0009, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -631,7 +631,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -653,7 +653,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -675,7 +675,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -697,7 +697,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -719,7 +719,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -741,7 +741,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -763,7 +763,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -785,7 +785,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0008, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -807,7 +807,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -829,7 +829,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -851,7 +851,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -873,7 +873,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -895,7 +895,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -917,7 +917,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -939,7 +939,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -961,7 +961,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0007, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -983,7 +983,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1005,7 +1005,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -1027,7 +1027,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -1049,7 +1049,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -1071,7 +1071,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -1093,7 +1093,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -1115,7 +1115,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1137,7 +1137,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0006, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -1159,7 +1159,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1181,7 +1181,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -1203,7 +1203,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -1225,7 +1225,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -1247,7 +1247,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -1269,7 +1269,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -1291,7 +1291,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1313,7 +1313,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0005, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -1335,7 +1335,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1357,7 +1357,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -1379,7 +1379,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -1401,7 +1401,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -1423,7 +1423,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -1445,7 +1445,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -1467,7 +1467,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1489,7 +1489,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0004, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -1511,7 +1511,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1533,7 +1533,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -1555,7 +1555,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -1577,7 +1577,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -1599,7 +1599,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -1621,7 +1621,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -1643,7 +1643,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1665,7 +1665,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0003, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -1687,7 +1687,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1709,7 +1709,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -1731,7 +1731,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -1753,7 +1753,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -1775,7 +1775,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -1797,7 +1797,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -1819,7 +1819,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1841,7 +1841,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0002, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -1863,7 +1863,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -1885,7 +1885,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -1907,7 +1907,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x000d
@@ -1929,7 +1929,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, loop
@@ -1951,7 +1951,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x000d);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x2000
@@ -1973,7 +1973,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET [0x2000+I], [A]
@@ -1995,7 +1995,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x000f);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -2017,7 +2017,7 @@ is_deeply(
[ 0x2000, (0x0000) x 5, 0x0001, 0x0000 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SUB I, 1
@@ -2039,7 +2039,7 @@ is_deeply(
[ 0x2000, (0x0000) x 7 ],
);
is($cpu->PC, 0x0010);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -2061,7 +2061,7 @@ is_deeply(
[ 0x2000, (0x0000) x 7 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -2083,7 +2083,7 @@ is_deeply(
[ 0x2000, (0x0000) x 7 ],
);
is($cpu->PC, 0x0011);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute IFN I, 0
@@ -2105,7 +2105,7 @@ is_deeply(
[ 0x2000, (0x0000) x 7 ],
);
is($cpu->PC, 0x0013);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET X, 0x4
@@ -2127,7 +2127,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0004, (0x0000) x 4 ],
);
is($cpu->PC, 0x0014);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x0018
@@ -2149,7 +2149,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0004, (0x0000) x 4 ],
);
is($cpu->PC, 0x0016);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -2171,7 +2171,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0004, (0x0000) x 4 ],
);
is($cpu->PC, 0x0016);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute JSR testsub
@@ -2194,7 +2194,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0004, (0x0000) x 4 ],
);
is($cpu->PC, 0x0018);
-is($cpu->SP, 0xfffe);
+is($cpu->SP, 0xffff);
is($cpu->O, 0x0000);
$cpu->step; # execution delay
@@ -2217,7 +2217,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0004, (0x0000) x 4 ],
);
is($cpu->PC, 0x0019);
-is($cpu->SP, 0xfffe);
+is($cpu->SP, 0xffff);
is($cpu->O, 0x0000);
$cpu->step; # execute SHL X, 4
@@ -2240,7 +2240,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x0019);
-is($cpu->SP, 0xfffe);
+is($cpu->SP, 0xffff);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, POP
@@ -2263,7 +2263,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x0016);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x001a
@@ -2286,7 +2286,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x0018);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, crash
@@ -2309,7 +2309,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001a);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x001a
@@ -2332,7 +2332,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001c);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, crash
@@ -2355,7 +2355,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001a);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x001a
@@ -2378,7 +2378,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001c);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, crash
@@ -2401,7 +2401,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001a);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x001a
@@ -2424,7 +2424,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001c);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, crash
@@ -2447,7 +2447,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001a);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x001a
@@ -2470,7 +2470,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001c);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, crash
@@ -2493,7 +2493,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001a);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # load 0x001a
@@ -2516,7 +2516,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001c);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
$cpu->step; # execute SET PC, crash
@@ -2539,7 +2539,7 @@ is_deeply(
[ 0x2000, (0x0000) x 2, 0x0040, (0x0000) x 4 ],
);
is($cpu->PC, 0x001a);
-is($cpu->SP, 0xffff);
+is($cpu->SP, 0x0000);
is($cpu->O, 0x0000);
done_testing;