.sect .text
.sect .rom
.sect .data
.sect .bss
.sect .text

! Fetches the word at negative stack offset OFFSET into de.

#define PASTE(a, b) a ## b
#define LABEL(prefix, offset) PASTE(prefix, offset)

.define LABEL(.floadn, OFFSET)
LABEL(.floadn, OFFSET):
    #if OFFSET == 0
        #error "0 shouldn't happen"
    #elif OFFSET == 1
        mov l, c
        mov h, b
        mov d, m
        dcx h
        mov e, m
        ret
    #elif OFFSET == 2
        mov l, c
        mov h, b
        dcx h
        mov d, m
        dcx h
        mov e, m
        ret
    #else
        lxi h, -OFFSET
        dad b
        mov e, m
        inx h
        mov d, m
        ret
    #endif