]> git.lizzy.rs Git - plan9front.git/commitdiff
games/snes: fixed decimal mode
authoraiju <devnull@localhost>
Fri, 21 Mar 2014 12:57:25 +0000 (13:57 +0100)
committeraiju <devnull@localhost>
Fri, 21 Mar 2014 12:57:25 +0000 (13:57 +0100)
sys/src/games/snes/cpu.c

index f307028c78a8a3b6118f486da375c527f6b450a7..cea3c1d911898470ca72f1cac1e003845e92859d 100644 (file)
@@ -357,11 +357,11 @@ adc(u16int a)
                        if(r > 0x0009) r += 0x0006;
                        if(r > 0x001f) r -= 0x0010;
                        r += (rA & 0x00f0) + (a & 0x00f0);
-                       if(r > 0x0090) r += 0x0060;
-                       if(r > 0x01f0) r -= 0x0100;
+                       if(r > 0x009f) r += 0x0060;
+                       if(r > 0x01ff) r -= 0x0100;
                        r += (rA & 0x0f00) + (a & 0x0f00);
-                       if(r > 0x0900) r += 0x0600;
-                       if(r > 0x1f00) r -= 0x1000;
+                       if(r > 0x09ff) r += 0x0600;
+                       if(r > 0x1fff) r -= 0x1000;
                        r += (rA & 0xf000) + (a & 0xf000);
                }else
                        r = rA + a + (rP & FLAGC);
@@ -505,6 +505,7 @@ sbc(u16int a)
                if((rP & FLAGD) != 0){
                        r = (rA & 0xf) + (a & 0xf) + (rP & FLAGC);
                        if(r < 0x10) r -= 0x06;
+                       if(r < 0) r += 0x10;
                        r += (rA & 0xf0) + (a & 0xf0);
                }else
                        r = (rA & 0xff) + a + (rP & FLAGC);
@@ -525,10 +526,13 @@ sbc(u16int a)
                if((rP & FLAGD) != 0){
                        r  = (rA & 0x000f) + (a & 0x000f) + (rP & FLAGC);
                        if(r < 0x0010) r -= 0x0006;
+                       if(r < 0x0000) r += 0x0010;
                        r += (rA & 0x00f0) + (a & 0x00f0);
                        if(r < 0x0100) r -= 0x0060;
+                       if(r < 0x0000) r += 0x0100;
                        r += (rA & 0x0f00) + (a & 0x0f00);
                        if(r < 0x1000) r -= 0x0600;
+                       if(r < 0x0000) r += 0x1000;
                        r += (rA & 0xf000) + (a & 0xf000);
                }else
                        r = rA + a + (rP & FLAGC);