1; Substitute for z80 rrd instruction 2; aralbrec 06.2007 3; CPU Min T Max T 4; 8080 229 260 5; 8085 224 253 6; gbz80 136 160 7; r2k 94 111 8; z180 18 18 9; z80 18 18 10; z80n 18 18 11 12 SECTION code_crt0_sccz80 13 PUBLIC __z80asm__rrd 14 15__z80asm__rrd: 16 17 jr nc, dorrd 18 19 call dorrd 20 scf 21 ret 22 23dorrd: 24 25IF __CPU_INTEL__ ; a = xi, (hl) = jk --> a = xk, (hl) = ij 26 push de 27 push hl 28 29 ld l, (hl) 30 ld h, 0 ; hl = 00jk 31 32 ld d, a ; d = xi 33 and 0xf0 34 ld e, a ; e = x0 35 ld a, d 36 and 0x0f 37 ld d, a ; d = a = 0i 38 39 ld a, l ; a = jk 40 and 0x0f ; a = 0k 41 add a, e ; a = xk 42 ld e, a ; e = xk 43 44 add hl, hl 45 add hl, hl 46 add hl, hl 47 add hl, hl ; e = xk, a = xk, hl = 0jk0 48 49 ld a, d 50 add a, a 51 add a, a 52 add a, a 53 add a, a ; a = i0 54 add a, h ; a = ij 55 56 pop hl 57 ld (hl), a ; (hl) = ij 58 59 ld a, e ; a = xk 60 pop de 61ELSE 62 srl a 63 rr (hl) 64 65 rra 66 rr (hl) 67 68 rra 69 rr (hl) 70 71 rra 72 rr (hl) ; a = [bits(HL):210, 0, bits(A):7654], carry = bit 3 of (HL) 73 74 rra 75 rra 76 rra 77 rra 78 rra 79 80ENDIF 81 82 or a 83 ret 84