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