Существует ли какой-нибудь метод, который позволяет автоматически развернуть все макросы, подставить все данные и удалить из несработавшие условия?

Исходный макрос:

Код:
; LD reg,(IX+d)
    macro    macro_ld_reg_ix_d reg, data, no_stack
    if reg != 0 ; A
    ld    (.tmp + 1), a
    endif

    if no_stack == 1 || reg == 5 || reg == 6    ; || H || L
        if reg != 5
            ld a, h
            ld    (TMP1 + 1), a
        endif
        if reg != 6
            ld    a, l
            ld    (TMP1), a
        endif

    else
        push    hl
    endif

    ld    hl, (rIX)

    if reg == 1 || reg == 2        ; B || C
        if no_stack == 1
            ld    a, d
            ld    (TMP2 + 1), a
            ld    a, e
            ld    (TMP2), a
        else
            push    de
        endif
    ld    de, data
    else
        if no_stack == 1
            ld    a, b
            ld    (TMP2 + 1), a
            ld    a, c
            ld    (TMP2), a
        else
            push    bc
        endif
    ld    bc, data
    endif

    if reg == 1 || reg == 2        ; B || C
        add    hl, de
    else
        add    hl, bc
    endif

    if reg == 1 || reg == 2        ; B || C

        if no_stack == 1
            ld    a, (TMP2 + 1)
            ld    d, a
            ld    a, (TMP2)
            ld    e, a
        else
            pop    de
        endif
    else
        if no_stack == 1
            ld    a, (TMP2 + 1)
            ld    b, a
            ld    a, (TMP2)
            ld    c, a
        else
            pop    bc
        endif
    endif

    ld  reg, (hl)

    if reg == 0    ; A
    ld    (.tmp + 1), a
    endif

    if no_stack == 1 || reg == 5 || reg == 6    ; || H || L 
        if reg != 5
            ld    a, (TMP1 + 1)
            ld    h, a
        endif
        if reg != 6
            ld    a, (TMP1)
            ld    l, a
        endif
    else
        pop    hl
    endif

.tmp    ld    a, 0
    endm

А нужно, чтобы он развернулся, подставились все необходимые значения и убрались все несработавшие условия. То есть, чтобы в итоге в тексте вместо

macro_ld_reg_ix_d A,99-100,0

нарисовалось такое:

Код:
; macro_ld_reg_ix_d A,99-100,0
    push    hl
    ld    hl, (rIX)
    push    bc
    ld    bc, 99-100
    add    hl, bc
    pop    bc
    ld  a, (hl)
    pop    hl
;---------------------------------------