{************************************************} { } { Stack Utilities for Z80 Processor } { STACK.INC } { } {************************************************} Procedure PushStack ( Val : Integer ) ; Begin Inline ( $2A / Val / { ld hl, (val) } $E3 / { ex (sp), hl } $E5 { push hl } ) ; End ; Function PopStack : Integer ; Var Res : Integer ; Begin Inline ( $E1 / { pop hl } $E3 / { ex (sp), hl } $22 / Res { ld (res), hl } ) ; PopStack := Res ; End ; Function PickStack : Integer ; Var Res : Integer ; Begin Inline ( $E1 / { pop hl } $D1 / { pop de } $D5 / { push de } $D5 / { push de } $E3 / { ex (sp), hl } $22 / Res { ld (res), hl } ) ; PickStack := Res ; End ; Procedure PushHeap ( Word : Integer ) ; Var IntPtr : ^Integer ; Begin HeapPtr := HeapPtr + 2 ; IntPtr := Ptr ( HeapPtr ) ; IntPtr^ := Word ; End ; Function PopHeap : Integer ; Var IntPtr : ^Integer ; Begin IntPtr := Ptr ( HeapPtr ) ; PopHeap := IntPtr^ ; HeapPtr := HeapPtr - 2 ; End ;