RosettaCodeData/Task/Fibonacci-sequence/PL-M/fibonacci-sequence.plm

38 lines
794 B
Plaintext

100H:
BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS;
EXIT: PROCEDURE; CALL BDOS(0,0); END EXIT;
PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT;
PRINT$NUMBER: PROCEDURE (N);
DECLARE S (6) BYTE INITIAL ('.....$');
DECLARE (N, P) ADDRESS, C BASED P BYTE;
P = .S(5);
DIGIT:
P = P - 1;
C = N MOD 10 + '0';
N = N / 10;
IF N > 0 THEN GO TO DIGIT;
CALL PRINT(P);
END PRINT$NUMBER;
FIBONACCI: PROCEDURE (N) ADDRESS;
DECLARE (N, A, B, C, I) ADDRESS;
IF N<=1 THEN RETURN N;
A = 0;
B = 1;
DO I=2 TO N;
C = A;
A = B;
B = A + C;
END;
RETURN B;
END FIBONACCI;
DECLARE I ADDRESS;
DO I=0 TO 20;
CALL PRINT$NUMBER(FIBONACCI(I));
CALL PRINT(.' $');
END;
CALL EXIT;
EOF