Calling Convention

Overview

AspectConvention
Parameter passingStack, right-to-left (C convention)
Evaluation orderRight-to-left (two-pass fseek, no reversal step)
Stack cleanupCaller cleans
Return valueHL (Z80/8080/8085) / AX (8086)

Z80 Stack Frame

Higher addresses:
    [param N]        ← ix+4+N*2 (rightmost on stack)
    ...
    [param 0]        ← ix+4  (leftmost in source)
    [return addr]    ← ix+2
    [saved ix]       ← ix+0  (IX points here)
    [local 0]        ← ix-2
    [local 1]        ← ix-4
    ...
Lower addresses (SP):

8086 Stack Frame

Higher addresses:
    [param N]        ← bp+4+N*2 (or +4+N*4 for far)
    ...
    [param 0]        ← bp+4
    [return addr]    ← bp+2
    [saved bp]       ← bp+0  (BP points here)
    [local 0]        ← bp-2
    [local 1]        ← bp-4
Lower addresses (SP):

Caller Cleanup

TargetCleanup Code
Z80ex de,hl; ld hl,N*2; add hl,sp; ld sp,hl; ex de,hl
8086add sp, N*2 (near) / add sp, N*4 (far)
8080xchg; lxi h,N*2; dad sp; sphl; xchg