Mercurial > repos > simple16
comparison src/cpu.c @ 13:d8ae30286d17
Fix flag calculation and condition code tests
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 27 Mar 2016 21:08:42 -0700 |
parents | 74a6d629b78f |
children | a9364f5ee81a |
comparison
equal
deleted
inserted
replaced
12:d4112095b93f | 13:d8ae30286d17 |
---|---|
143 { | 143 { |
144 context->regs[REG_SR] &= ~(FLAG_N|FLAG_C|FLAG_Z); | 144 context->regs[REG_SR] &= ~(FLAG_N|FLAG_C|FLAG_Z); |
145 if (!(result & 0xFFFF)) { | 145 if (!(result & 0xFFFF)) { |
146 context->regs[REG_SR] |= FLAG_Z; | 146 context->regs[REG_SR] |= FLAG_Z; |
147 } | 147 } |
148 if (result &= 0x8000) { | 148 if (result & 0x8000) { |
149 context->regs[REG_SR] |= FLAG_N; | 149 context->regs[REG_SR] |= FLAG_N; |
150 } | 150 } |
151 if (result &= 0x10000) { | 151 if (result & 0x10000) { |
152 context->regs[REG_SR] |= FLAG_C; | 152 context->regs[REG_SR] |= FLAG_C; |
153 } | 153 } |
154 } | 154 } |
155 | 155 |
156 void update_flags_bitwise(cpu *context, uint32_t result) | 156 void update_flags_bitwise(cpu *context, uint32_t result) |
189 break; | 189 break; |
190 case COND_CARRY: | 190 case COND_CARRY: |
191 doit = context->regs[REG_SR] & FLAG_C; | 191 doit = context->regs[REG_SR] & FLAG_C; |
192 break; | 192 break; |
193 case COND_NCARRY: | 193 case COND_NCARRY: |
194 doit = context->regs[REG_SR] & FLAG_C; | 194 doit = !(context->regs[REG_SR] & FLAG_C); |
195 break; | 195 break; |
196 case COND_GREATER: | 196 case COND_GREATER: |
197 //not zero and not carry | 197 //not zero and not carry |
198 doit = !(context->regs[REG_SR] & FLAG_Z) || !(context->regs[REG_SR] & FLAG_C); | 198 doit = !(context->regs[REG_SR] & FLAG_Z) && !(context->regs[REG_SR] & FLAG_C); |
199 break; | 199 break; |
200 case COND_LEQ: | 200 case COND_LEQ: |
201 //zero or carry | 201 //zero or carry |
202 doit = (context->regs[REG_SR] & FLAG_Z) || (context->regs[REG_SR] & FLAG_C); | 202 doit = (context->regs[REG_SR] & FLAG_Z) || (context->regs[REG_SR] & FLAG_C); |
203 break; | 203 break; |