comparison z80_to_x86.c @ 273:719b9fea2fe9

Implement LDD and LDDR
author Mike Pavone <pavone@retrodev.com>
date Thu, 02 May 2013 22:28:40 -0700
parents 9b04b57434b5
children be2b845d3e94
comparison
equal deleted inserted replaced
272:9b04b57434b5 273:719b9fea2fe9
543 //TODO: Implement half-carry 543 //TODO: Implement half-carry
544 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); 544 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B);
545 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_PV), SZ_B); 545 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_PV), SZ_B);
546 break; 546 break;
547 } 547 }
548 /*case Z80_LDD: 548 case Z80_LDD: {
549 case Z80_LDDR: 549 dst = zcycles(dst, 8);
550 case Z80_CPI: 550 dst = mov_rr(dst, opts->regs[Z80_HL], SCRATCH1, SZ_W);
551 dst = call(dst, (uint8_t *)z80_read_byte);
552 dst = mov_rr(dst, opts->regs[Z80_DE], SCRATCH2, SZ_W);
553 dst = call(dst, (uint8_t *)z80_read_byte);
554 dst = zcycles(dst, 2);
555 dst = sub_ir(dst, 1, opts->regs[Z80_DE], SZ_W);
556 dst = sub_ir(dst, 1, opts->regs[Z80_HL], SZ_W);
557 dst = sub_ir(dst, 1, opts->regs[Z80_BC], SZ_W);
558 //TODO: Implement half-carry
559 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B);
560 dst = setcc_rdisp8(dst, CC_NZ, CONTEXT, zf_off(ZF_PV));
561 break;
562 }
563 case Z80_LDDR: {
564 dst = zcycles(dst, 8);
565 dst = mov_rr(dst, opts->regs[Z80_HL], SCRATCH1, SZ_W);
566 dst = call(dst, (uint8_t *)z80_read_byte);
567 dst = mov_rr(dst, opts->regs[Z80_DE], SCRATCH2, SZ_W);
568 dst = call(dst, (uint8_t *)z80_read_byte);
569 dst = sub_ir(dst, 1, opts->regs[Z80_DE], SZ_W);
570 dst = sub_ir(dst, 1, opts->regs[Z80_HL], SZ_W);
571
572 dst = sub_ir(dst, 1, opts->regs[Z80_BC], SZ_W);
573 uint8_t * cont = dst+1;
574 dst = jcc(dst, CC_Z, dst+2);
575 dst = zcycles(dst, 7);
576 //TODO: Figure out what the flag state should be here
577 //TODO: Figure out whether an interrupt can interrupt this
578 dst = jmp(dst, start);
579 *cont = dst - (cont + 1);
580 dst = zcycles(dst, 2);
581 //TODO: Implement half-carry
582 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B);
583 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_PV), SZ_B);
584 break;
585 }
586 /*case Z80_CPI:
551 case Z80_CPIR: 587 case Z80_CPIR:
552 case Z80_CPD: 588 case Z80_CPD:
553 case Z80_CPDR: 589 case Z80_CPDR:
554 break;*/ 590 break;*/
555 case Z80_ADD: 591 case Z80_ADD: