Mercurial > hg > ede
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
--- 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()); - } -} - - -