Metropoli BBS
VIEWER: pmem.s MODE: TEXT (ASCII)
**********************************************************************
* Name:		PMEM
* Stack:	( %port --> %free )
* Desc:		Calculate free memory in given port
**********************************************************************
ASSEMBLE
	CON(1)	8
RPL
xNAME PMEM
::
  CK1&Dispatch
  real
  ::
    COERCE			( #port )

    DUP#0=csedrp		( * Port 0 * )
    :: 'EvalNoCK: xMEM ;

    DUP PORTSTATUS		( #port present? write? merged? #size #addr )
    5ROLL NOTcase SETPORTNOTAV	( #port write? merged? #size #addr )
    4ROLLDROP			( #port merged? #size #addr )

    ROT case			( * Merged port * )
    :: 3DROP 'EvalNoCK: xMEM ;

    ROTDUP			( #size #addr #port #port )
    GX? ITE
       :: G_PORTEOS# THIRTYTHREE ;
       :: PORTEOS# TWO ;

    ROT #<case SETPORTNOTAV	( #size #addr #endaddr )
    SWAP#- #- UNCOERCE %2 %/	( %free )
  ;
;
**********************************************************************
[ RETURN TO DIRECTORY ]