(* MPL - MICRO PROGRAMMING LANGUAGE / COPYRIGHT (C) 2017-2018 DEREK JOHN EVANS *)
PROCEDURE WI(I: I16); VAR PI: PI16; BEGIN {$IFDEF HPC}MOVE(I, GV.C[GP], 2);
{$ELSE}PI := PTR(ADDR(GV.C[GP])); PI^ := I;{$ENDIF}GP := GP + 2 END;
PROCEDURE WS; VAR S: REF; BEGIN S.S := PTR(ADDR(GV.C[GP])); S.S^ := GS; GP := SUCC(GP + ORD(GS[0])) END;
PROCEDURE X0(X: TXOP); BEGIN GV.C[GP] := CHR(ORD(X)); GP := SUCC(GP) END;
PROCEDURE X1(X: TXOP; I: I16); BEGIN GV.C[GP] := CHR(ORD(X)); GV.C[SUCC(GP)] := CHR(I); GP := GP + 2 END;
PROCEDURE X2(X: TXOP; I: I16); BEGIN GV.C[GP] := CHR(ORD(X)); GP := SUCC(GP); WI(I) END;
PROCEDURE X3(P: I16; X: TXOP; I: I16); VAR LP: I16; BEGIN LP := GP; GP := P; X2(X, I); GP := LP END;
PROCEDURE XT(X: TXOP; T: BOOL); BEGIN IF T THEN X := PRED(X); GV.C[GP] := CHR(ORD(X)); GP := SUCC(GP) END;
PROCEDURE XI(X: TXOP; I: I16); BEGIN IF (I >= -128) AND (I <= 127) THEN X1(PRED(X), I) ELSE X2(X, I) END;
PROCEDURE XL(I: I16); BEGIN IF (I < (ORD(XZEND) - 128)) OR (I >= 128) THEN XI(XLIM2, I)
ELSE BEGIN GV.C[GP] := CHR(I + 128); GP := SUCC(GP) END END;