TITLE "Z3SHPOP - Z3lib 4.0" ;================================================================ ; The Libraries, Version 4, (C) 1989 by Alpha Systems Corp. ;---------------------------------------------------------------- ; Author : Harold F. Bower ; Derived from Z3SHPOP.Z80 Ver 1.1 by Richard Conn ; Date : 29 Mar 89 ; Version : 1.2 ; Module : Z3SHPOP ; Abstract: This module contains the routine SHPOP which attempts ; to pop a value from the Shell Stack. Flags return status ; of the attempt ; Revision: ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Module Entry Points PUBLIC SHPOP ; External References EXT GETSH .Z80 CSEG ;=============================================================== ; NAME - SHPOP ; Entry: HL - None ; Exit : A = 0, Zero Flag Set (Z) if Ok ; A = 1, Zero Clear (NZ) if No Shell Stack available ; A = 2, Zero Clear (NZ) if Shell Stack is empty ; Uses : AF ; Special Requirements: None ;=============================================================== SHPOP: PUSH HL ;save registers PUSH DE PUSH BC ; Get Shell Data for Later Use CALL GETSH ; Get ptr to shell stack LD C,A ; Save number of elements in C LD A,1 ; ..Set No Stack Avail error JR Z,SHEXIT ; ...and jump if Error LD A,(HL) ; Get first element OR A ; Empty stack? LD A,2 ; ..preset Empty stack Error JR Z,SHEXIT ; ...jump if Error LD E,B ; DE=size of shell stack entry LD D,0 EX DE,HL ; HL=dest ADD HL,DE ; DE=source EX DE,HL COPY: LD (HL),0 ; Set zero if no elements to copy DEC C ; Any elements to copy (count down)? JR Z,DONE ; ..quit if Not PUSH BC ; Save values COPY1: LD A,(DE) ; Copy stack entry LD (HL),A INC HL ; Pt to next INC DE DJNZ COPY1 ; ..loop til done POP BC ; Restore values JR COPY DONE: XOR A ; Show all is well SHEXIT: OR A ; Set flags POP BC ; Restore registers POP DE POP HL RET END