Это перенос с бита 3 на 4, точно так же, как записи обычного флага переноса переносятся с бита 7. Так, например, чтобы получить половину несущего бита в надстройке:
((a&0xf) + (value&0xf))&0x10
Что дает 0x10, если необходимо установить половину переноса, в противном случае - 0. Получение половины переноса от других соответствующих операций следует естественным образом - вопрос заключается в том, был ли переход от низкого клева к высокому.
Для упрощения, z80 имеет 4-битный ALU и выполняет 8-битные операции, выполняя две 4-битные операции. Таким образом, он получает половину переноса очень естественно, как промежуточный результат.
DAA заинтересован в флаге, потому что, если установлена половина переноса, то две цифры, которые составляют более 16, были добавлены в низком клеве; это правильно произвело перенос в верхний полубайт, но оставило нижний полубайт 6 ниже, чем должно быть, так как было еще шесть значений между 10, когда он должен был генерировать перенос, и 16, когда это произошло.