comparison emu/mem.c @ 30:c0c2e99b6bb0

fixed negative rel8 address bug in assembler
author james <jb302@eecs.qmul.ac.uk>
date Tue, 15 Apr 2014 12:21:22 +0100
parents 83e80c2c489c
children 4411dee34085
comparison
equal deleted inserted replaced
29:83e80c2c489c 30:c0c2e99b6bb0
22 if (on == 0x00) { 22 if (on == 0x00) {
23 flags = CBIT(flags, flag); 23 flags = CBIT(flags, flag);
24 } 24 }
25 else { 25 else {
26 flags = SBIT(flags, flag); 26 flags = SBIT(flags, flag);
27 }
28 }
29 }
30
31 /* sets zero and parity flags based on content of byte */
32 void
33 set_zp(BYTE val){
34 if (val == 0) {
35 set_flag(Z, 1);
36 set_flag(P, 0);
37 }
38 else {
39 /* think of this as folding */
40 val ^= val >> 4;
41 val ^= val >> 2;
42 val ^= val >> 1;
43 val &= 1;
44 if (val == 0) {
45 set_flag(P, 1);
46 }
47 else {
48 set_flag(P, 0);
27 } 49 }
28 } 50 }
29 } 51 }
30 52
31 WIDE 53 WIDE
55 return val; 77 return val;
56 } 78 }
57 79
58 WIDE 80 WIDE
59 fetch_wide(void) { 81 fetch_wide(void) {
60 WIDE val = MWIDE(mem[get_wide(PC)], mem[get_wide(PC) + g1]); 82 WIDE val = MWIDE(mem[get_wide(PC)], mem[get_wide(PC) + 1]);
61 inc_pc(2); 83 inc_pc(2);
62 return val; 84 return val;
63 } 85 }
64 86
65 /* 0b000 = R0 87 /* 0b000 = R0