comparison z80_to_x86.c @ 243:2f069a0b487e

Implement EI, DI and IM in the Z80 core
author Mike Pavone <pavone@retrodev.com>
date Sun, 28 Apr 2013 14:32:45 -0700
parents d3b84b2a4397
children ed548c77b598
comparison
equal deleted inserted replaced
242:d3b84b2a4397 243:2f069a0b487e
219 return offsetof(z80_context, alt_regs) + reg; 219 return offsetof(z80_context, alt_regs) + reg;
220 } 220 }
221 221
222 void z80_print_regs_exit(z80_context * context) 222 void z80_print_regs_exit(z80_context * context)
223 { 223 {
224 printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\nIX: %X\nIY: %X\nSP: %X\n", 224 printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\nIX: %X\nIY: %X\nSP: %X\n\nIM: %d, IFF1: %d, IFF2: %d\n",
225 context->regs[Z80_A], context->regs[Z80_B], context->regs[Z80_C], 225 context->regs[Z80_A], context->regs[Z80_B], context->regs[Z80_C],
226 context->regs[Z80_D], context->regs[Z80_E], 226 context->regs[Z80_D], context->regs[Z80_E],
227 (context->regs[Z80_H] << 8) | context->regs[Z80_L], 227 (context->regs[Z80_H] << 8) | context->regs[Z80_L],
228 (context->regs[Z80_IXH] << 8) | context->regs[Z80_IXL], 228 (context->regs[Z80_IXH] << 8) | context->regs[Z80_IXL],
229 (context->regs[Z80_IYH] << 8) | context->regs[Z80_IYL], 229 (context->regs[Z80_IYH] << 8) | context->regs[Z80_IYL],
230 context->sp); 230 context->sp, context->im, context->iff1, context->iff2);
231 puts("--Alternate Regs--"); 231 puts("--Alternate Regs--");
232 printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\nIX: %X\nIY: %X\n", 232 printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\nIX: %X\nIY: %X\n",
233 context->alt_regs[Z80_A], context->alt_regs[Z80_B], context->alt_regs[Z80_C], 233 context->alt_regs[Z80_A], context->alt_regs[Z80_B], context->alt_regs[Z80_C],
234 context->alt_regs[Z80_D], context->alt_regs[Z80_E], 234 context->alt_regs[Z80_D], context->alt_regs[Z80_E],
235 (context->alt_regs[Z80_H] << 8) | context->alt_regs[Z80_L], 235 (context->alt_regs[Z80_H] << 8) | context->alt_regs[Z80_L],
641 dst = jmp(dst, (uint8_t *)z80_print_regs_exit); 641 dst = jmp(dst, (uint8_t *)z80_print_regs_exit);
642 } else { 642 } else {
643 dst = zcycles(dst, 4 * inst->immed); 643 dst = zcycles(dst, 4 * inst->immed);
644 } 644 }
645 break; 645 break;
646 /*case Z80_HALT: 646 //case Z80_HALT:
647 case Z80_DI: 647 case Z80_DI:
648 dst = zcycles(dst, 4);
649 dst = mov_irdisp8(dst, 0, CONTEXT, offsetof(z80_context, iff1), SZ_B);
650 dst = mov_irdisp8(dst, 0, CONTEXT, offsetof(z80_context, iff2), SZ_B);
651 break;
648 case Z80_EI: 652 case Z80_EI:
653 //TODO: Implement interrupt enable latency of 1 instruction afer EI
654 dst = zcycles(dst, 4);
655 dst = mov_irdisp8(dst, 1, CONTEXT, offsetof(z80_context, iff1), SZ_B);
656 dst = mov_irdisp8(dst, 1, CONTEXT, offsetof(z80_context, iff2), SZ_B);
657 break;
649 case Z80_IM: 658 case Z80_IM:
650 case Z80_RLC: 659 dst = zcycles(dst, 4);
660 dst = mov_irdisp8(dst, inst->immed, CONTEXT, offsetof(z80_context, im), SZ_B);
661 break;
662 /*case Z80_RLC:
651 case Z80_RL: 663 case Z80_RL:
652 case Z80_RRC: 664 case Z80_RRC:
653 case Z80_RR: 665 case Z80_RR:
654 case Z80_SLA: 666 case Z80_SLA:
655 case Z80_SRA: 667 case Z80_SRA: