Carry flag -- also I might have bugs with not implementing mod right for negatives .-.
authorAlyssa Rosenzweig <alyssa@backtick.town>
Thu, 23 Jun 2016 18:29:31 +0000 (11:29 -0700)
committerAlyssa Rosenzweig <alyssa@backtick.town>
Thu, 23 Jun 2016 18:29:31 +0000 (11:29 -0700)
src/CPU/build-cpu.js
src/CPU/instructions/SBC

index f93d104..04c6aa0 100644 (file)
@@ -47,7 +47,7 @@ var sources = table.map(function(x, i) {
 
         // follow the flags
         var flags = instruction_cache[x.name][0].replace(/ /g, '').split(',');
-        var negQ = false, zeroQ = false, mode = null, operand = null;
+        var negQ = false, zeroQ = false, carryQ = false, mode = null, operand = null;
 
         flags.forEach(function(flag) {
             if(flag == "N") negQ = true;
@@ -108,6 +108,10 @@ var sources = table.map(function(x, i) {
             instruction.push("set flagZ to <" + operand + " = 0>");
         }
 
+        if(carryQ) {
+            instruction.push("set flagC to <" + operand + " > 255 or " + operand + " < 0>");
+        }
+
         instruction = instruction.concat([
             'say "' + x.assembler + '" for 2 secs',
             'change PC by ' + x.size
index d4510a9..7236c41 100644 (file)
@@ -1,5 +1,5 @@
 R,N,Z,A
 set tmp to A - OP - flagC
-set A to item (tmp mod 256)+1 of hex
-set flagC to <tmp > 255>
+set A to ((tmp mod 256) + 256) mod 256
+set flagC to <tmp > 255 or tmp < 0>
 set flagV to <<A < 128 and OP < 128 and (tmp mod 256) > 128> or <A > 127 and OP > 127 and (tmp mod 256) < 128>>
This page took 0.024331 seconds and 4 git commands to generate.