Mercurial > repos > blastem
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: |