changeset 31:7a35e6ae1c36

set zp
author james <jb302@eecs.qmul.ac.uk>
date Tue, 15 Apr 2014 14:17:27 +0100
parents c0c2e99b6bb0
children b4a4ae2f127e
files .cli.py.swp asm/language.pyc bin/emu emu/.iset.c.swp emu/.mem.c.swp emu/.mem.h.swp emu/iset.c emu/test_mem.c
diffstat 8 files changed, 39 insertions(+), 73 deletions(-) [+]
line wrap: on
line diff
Binary file .cli.py.swp has changed
Binary file asm/language.pyc has changed
Binary file bin/emu has changed
Binary file emu/.iset.c.swp has changed
Binary file emu/.mem.c.swp has changed
Binary file emu/.mem.h.swp has changed
--- a/emu/iset.c	Tue Apr 15 12:21:22 2014 +0100
+++ b/emu/iset.c	Tue Apr 15 14:17:27 2014 +0100
@@ -431,7 +431,11 @@
 void
 ADD(void) {
     if (NNN < 6) {
-        if ((A + get_reg(NNN)) > 0xFF){
+        if ((A + get_reg(NNN)) > 0xFF) {
+            set_flag(OV, 1);
+        }
+        else {
+            set_flag(OV, 0);
         }
         A = A + get_reg(NNN);
         set_zp(A);
@@ -440,12 +444,25 @@
         switch (NNN) {
             
             case 6:
-                A = A + fetch();
+                tmpb = fetch();
+                if ((A + tmpb) > 0xFF) {
+                    set_flag(OV, 1);
+                }
+                else {
+                    set_flag(OV, 0);
+                }
+                A = A + tmpb;
                 set_zp(A);
                 break;
 
             case 7:
                 set_wide(TMP, get_wide(DPTR));
+                if ((A + mem[TMP]) > 0xFF) {
+                    set_flag(OV, 1);
+                }
+                else {
+                    set_flag(OV, 0);
+                }
                 A = A + mem[TMP];
                 set_zp(A);
                 break;
@@ -470,6 +487,12 @@
 void
 SUB(void) {
     if (NNN < 6) {
+        if ((A - get_reg(NNN)) < 0){
+            set_flag(OV, 1);
+        }
+        else {
+            set_flag(OV, 0);
+        }
         A = A - get_reg(NNN);
         set_zp(A);
     }
@@ -477,12 +500,25 @@
         switch (NNN) {
             
             case 6:
-                A = A - fetch();
+                tmpb = fetch();
+                if ((A - tmpb) < 0) {
+                    set_flag(OV, 1);
+                }
+                else {
+                    set_flag(OV, 0);
+                }
+                A = A - tmpb;
                 set_zp(A);
                 break;
 
             case 7:
                 set_wide(TMP, get_wide(DPTR));
+                if ((A - mem[TMP]) < 0) {
+                    set_flag(OV, 1);
+                }
+                else {
+                    set_flag(OV, 0);
+                }
                 A = A - mem[TMP];
                 set_zp(A);
                 break;
--- a/emu/test_mem.c	Tue Apr 15 12:21:22 2014 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-#include <stdio.h>
-
-#define MAIN
-#include "mem.h"
-
-void
-main(void) {
-    A = 0xAA;
-    IR = 0x12;
-
-    unsigned char i;
-    for (i = 0 ; i < 8 ; i++) {
-        set_flag(i, 1);
-    }
-    
-    set_wide(DPTR, 0xDE1D);
-    set_wide(SP, 0xADEA);
-    set_wide(PC, 0xBEFA);
-    set_wide(TMP, 0xEFC3);
-    
-    for (i = 0; i < 4; i++) {
-        regs[i] = i;
-    }
-        
-    for (i = 8; i < 0x0C; i++) {
-        regs[i] = 0x10 | (i - 8);
-    }
-    
-    /* 0xAC 0x12 0xFF 
-     * 0x00 0x01 0x02 0x03
-     * 0xDE 0xAD 0xBE 0xFF
-     * 0x10 0x11 0x12 0x13
-     * 0x1D 0xEA 0xFA 0xC3 
-     * 0xDE 0x1D 0xBE 0xFA 
-     * 0xAD 0xEA 0xEF 0xC3*/
-
-    putchar(A);
-    putchar(IR);
-    putchar(flags);
-
-    for (i = 0; i < 0x10; i++) {
-        putchar(regs[i]);
-    }
-    
-    unsigned short int data_pointer = get_wide(DPTR);
-    unsigned short int program_counter = get_wide(PC);
-    unsigned short int stack_pointer = get_wide(SP);
-    unsigned short int temp = get_wide(TMP);
-    
-    putchar((data_pointer >> 8) & 0xFF);
-    putchar(data_pointer & 0xFF);
-    putchar((program_counter >> 8) & 0xFF);
-    putchar(program_counter & 0xFF);
-    putchar((stack_pointer >> 8) & 0xFF);
-    putchar(stack_pointer & 0xFF);
-    putchar((temp >> 8) & 0xFF);
-    putchar(temp & 0xFF);
-    
-    
-    int ac;
-    for (ac = 0 ; ac < 0x10000 ; ac++) {
-        mem[ac] = ac & 0xFF;
-    }
-    for (ac = 0 ; ac < 0x10000 ; ac++) {
-        putchar(fetch());
-    }
-}
-
-
-