Mercurial > hg > ede
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 |