# HG changeset patch # User james # Date 1397567847 -3600 # Node ID 7a35e6ae1c36a8f60231f888608fedb344aa29e8 # Parent c0c2e99b6bb05a4b2d8d9c7f762e864e3aa7935a set zp diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 .cli.py.swp Binary file .cli.py.swp has changed diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 asm/language.pyc Binary file asm/language.pyc has changed diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 bin/emu Binary file bin/emu has changed diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 emu/.iset.c.swp Binary file emu/.iset.c.swp has changed diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 emu/.mem.c.swp Binary file emu/.mem.c.swp has changed diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 emu/.mem.h.swp Binary file emu/.mem.h.swp has changed diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 emu/iset.c --- 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; diff -r c0c2e99b6bb0 -r 7a35e6ae1c36 emu/test_mem.c --- 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 - -#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()); - } -} - - -