65 lines
1.2 KiB
Plaintext
65 lines
1.2 KiB
Plaintext
100H:
|
|
|
|
/* CP/M CALL */
|
|
BDOS: PROCEDURE (FN, ARG);
|
|
DECLARE FN BYTE, ARG ADDRESS;
|
|
GO TO 5;
|
|
END BDOS;
|
|
|
|
PUT$CHAR: PROCEDURE (CHAR);
|
|
DECLARE CHAR BYTE;
|
|
CALL BDOS(2, CHAR);
|
|
END PUT$CHAR;
|
|
|
|
/* PRINT STRING BACKWARDS UNTIL ZERO */
|
|
PRINT$BACK: PROCEDURE (S);
|
|
DECLARE S ADDRESS, C BASED S BYTE;
|
|
DO WHILE C <> 0;
|
|
CALL PUT$CHAR(C);
|
|
S = S - 1;
|
|
END;
|
|
CALL PUT$CHAR(13);
|
|
CALL PUT$CHAR(10);
|
|
END PRINT$BACK;
|
|
|
|
/* INCREMENT NUMBER STORED AS ASCII DIGITS */
|
|
INCR$BIGINT: PROCEDURE (BI) ADDRESS;
|
|
DECLARE (BI, R) ADDRESS, D BASED BI BYTE;
|
|
R = BI;
|
|
DO WHILE D <> 0; BI = BI - 1; END;
|
|
INCR$DIGIT:
|
|
BI = BI + 1;
|
|
IF D = 0 THEN DO;
|
|
D = '1';
|
|
D(1) = 0;
|
|
RETURN BI;
|
|
END;
|
|
ELSE IF D = '9' THEN DO;
|
|
D = '0';
|
|
GO TO INCR$DIGIT;
|
|
END;
|
|
ELSE DO;
|
|
D = D + 1;
|
|
RETURN R;
|
|
END;
|
|
END INCR$BIGINT;
|
|
|
|
/* STORE INITIAL 'BIG INTEGER' */
|
|
INIT$BIGINT: PROCEDURE (X) ADDRESS;
|
|
DECLARE X ADDRESS, D BASED X BYTE;
|
|
D(0) = 0;
|
|
D(1) = '0';
|
|
D(2) = 0;
|
|
RETURN .D(1);
|
|
END INIT$BIGINT;
|
|
|
|
/* LOOP PRINTING NUMBERS FOREVER */
|
|
DECLARE I ADDRESS;
|
|
I = INIT$BIGINT(.MEMORY);
|
|
DO WHILE 1;
|
|
I = INCR$BIGINT(I);
|
|
CALL PRINT$BACK(I);
|
|
END;
|
|
|
|
EOF
|