Godzil (./1) :
tmp = (dI&0x0F) + (dJ&0x0F);
if ((tmp & 0xFF) > 0x09)
tmp = 0x10 | (tmp ^ ((0x2 | ~(tmp<<1)&0x4 | ((((tmp>>2)&1) | (((tmp>>1)&1)))<<3)) & 0x0F));
tmp += (dI&0xF0) + (dJ&0xF0);
if ((tmp & 0xFF0) > 0x90)
{
tmp = tmp ^ (0x20 | ~(tmp<<1)&0x40 | (((tmp>>2)&0x10 | ((tmp>>1)&0x10))<<3));
}
J'avais implémenté ça de façon plus lisible quand même

// http://www.ftp83plus.net/Tutorials/z80inset_fullA.htm
// Exemple: 0x8 + 0x3 = 0xb -> 0x11 (+6)
if ((accu & 0xf) >= 0xa || flags.halfcarry)
accu += flags.n ? -6 : 6;
// Pareil pour le digit du haut
if ((accu & 0xf0) >= 0xa0 || flags.carry) {
accu += flags.n ? -0x60 : 0x60;
flags.carry = 1;
}
else
flags.carry = 0;
flags.halfcarry = 0;
flags.zero = (accu == 0);