Files
Digital-Research-Source-Code/ASSEMBLY & COMPILE TOOLS/PLM COMPILER/PLMSAMP.PRN
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

148 lines
17 KiB
Plaintext

8080 PLM1 VERS 2.0
00001 1 /*
00002 1 SAMPLE PL/M PROGRAM
00003 1
00004 1 THIS PROGRAM CALCULATES AND PRINTS OUT THE SQUARE ROOTS OF
00005 1 ALL INTEGERS BETWEEN 1 AND 1000.
00006 1 */
00007 1 DECLARE CR LITERALLY '0DH', LF LITERALLY '0AH', TRUE LITERALLY '1',
00008 1 FALSE LITERALLY '0';
00009 1
00010 1 10H: /* IS THE ORIGIN OF THIS PROGRAM */
00011 1
00012 1 SQUARE$ROOT: PROCEDURE(X) BYTE;
00013 2 DECLARE (X,Y,Z) ADDRESS;
00014 2 Y=X; Z=SHR(X+1,1);
00015 2 DO WHILE Y<>Z;
00016 2 Y=Z; Z=SHR(X/Y + Y + 1, 1);
00017 3 END;
00018 2 RETURN Y;
00019 2 END SQUAREROOT;
00020 1
00021 1 /* PRINT USING INTELLEC MONITOR */
00022 1 PRINT$CHAR: PROCEDURE (CHAR);
00023 2 DECLARE CHAR BYTE;
00024 2 DECLARE IOCO LITERALLY '3809H';
00025 2 GO TO IOCO;
00026 2 END PRINT$CHAR;
00027 1
00028 1 PRINT$STRING: PROCEDURE(NAME,LENGTH);
00029 2 DECLARE NAME ADDRESS,
00030 2 (LENGTH,I,CHAR BASED NAME) BYTE;
00031 2 DO I = 0 TO LENGTH-1;
00032 2 CALL PRINT$CHAR(CHAR(I));
00033 3 END;
00034 2 END PRINT$STRING;
00035 1
00036 1 PRINT$NUMBER: PROCEDURE(NUMBER,BASE,CHARS,ZERO$SUPPRESS);
00037 2 DECLARE NUMBER ADDRESS, (BASE,CHARS,ZERO$SUPPRESS,I,J) BYTE;
00038 2 DECLARE TEMP(16) BYTE;
00039 2 IF CHARS > LAST(TEMP) THEN CHARS = LAST(TEMP);
00040 2 DO I = 1 TO CHARS;
00041 2 J=NUMBER MOD BASE + '0';
00042 3 IF J > '9' THEN J = J + 7;
00043 3 IF ZERO$SUPPRESS AND I <> 1 AND NUMBER = 0 THEN
00044 3 J = ' ';
00045 3 TEMP(LENGTH(TEMP)-I) = J;
00046 3 NUMBER = NUMBER / BASE;
00047 3 END;
00048 2 CALL PRINT$STRING(.TEMP + LENGTH(TEMP) - CHARS,CHARS);
00049 2 END PRINT$NUMBER;
00050 1
00051 1 DECLARE I ADDRESS,
00052 1 CRLF LITERALLY 'CR,LF',
00053 1 HEADING DATA (CRLF,LF,LF,
00054 1 ' TABLE OF SQUARE ROOTS', CRLF,LF,
00055 1 ' VALUE ROOT VALUE ROOT VALUE ROOT VALUE ROOT VALUE ROOT',
00056 1 CRLF,LF);
00057 1
00058 1 /* SILENCE TTY AND PRINT COMPUTED VALUES */
00059 1 DO I = 1 TO 1000;
00060 1 IF I MOD 5 = 1 THEN
00061 2 DO; IF I MOD 250 = 1 THEN
00062 3 CALL PRINT$STRING(.HEADING,LENGTH(HEADING));
00063 3 ELSE
00064 3 CALL PRINT$STRING(.(CR,LF),2);
00065 3 END;
00066 2 CALL PRINT$NUMBER(I,10,6,TRUE /* TRUE SUPPRESSES LEADING ZEROES */);
00067 2 CALL PRINT$NUMBER(SQUARE$ROOT(I), 10,6, TRUE);
00068 2 END;
00069 1
00070 1 EOF
NO PROGRAM ERRORS
8080 PLM2 VERS 2.0
1=0003H 12=0013H 13=0016H 14=001CH 15=002FH 16=0045H 17=0098H 18=00A1H 19=00A7H 23=00ABH
25=00AEH 26=00AFH 29=00B7H 31=00BAH 32=00C5H 33=00D1H 34=00D8H 35=00D9H 37=00DFH 39=00E3H
40=00E6H 41=00F6H 42=010AH 43=0117H 44=0134H 45=0138H 46=0148H 47=015CH 48=0168H 49=0181H
50=0182H 56=01F5H 59=01FDH 60=020CH 61=0221H 62=0239H 63=0244H 64=0247H 65=0251H 66=025CH
67=0267H 68=0281H 69=0290H
STACK SIZE = 6 BYTES
MEMORY..........................0300H
SQUAREROOT......................0016H
X...............................02DAH
Y...............................02DCH
Z...............................02DEH
PRINTCHAR.......................00A7H
CHAR............................02E1H
PRINTSTRING.....................00AFH
NAME............................02E2H
LENGTH..........................02E4H
I...............................02E5H
PRINTNUMBER.....................00D9H
NUMBER..........................02E6H
BASE............................02E9H
CHARS...........................02EAH
ZEROSUPPRESS....................02EBH
I...............................02ECH
J...............................02EDH
TEMP............................02EEH
I...............................02FEH
HEADING.........................0182H
0010H LXI SP DAH 02H JMP F5H 01H LXI H DAH 02H MOV MC INX H MOV MB DCR L MOV CM INR L MOV BM
0020H INR L MOV MC INX H MOV MB LHLD DAH 02H INX H XCHG MOV AD ORA A RAR MOV DA MOV AE RAR LXI H
0030H DEH 02H MOV MA INX H MOV MD LXI H DCH 02H MOV AM INR L MOV BM INR L SUB M INR L MOV CA MOV AB
0040H SBC M ORA C JZ A1H 00H DCR L MOV CM INR L MOV BM MOV LI DCH MOV MC INX H MOV MB LXI H DCH
0050H 02H MOV EM INR L MOV DM MOV LI DAH MOV CM INR L MOV BM JMP 89H 00H MOV AD CMA MOV DA MOV AE
0060H CMA MOV EA INX D LXI H 00H 00H MOV AI 11H PUSH H DAD D JNC 6EH 00H XTHL POP H PUSH A
0070H MOV AC RAL MOV CA MOV AB RAL MOV BA MOV AL RAL MOV LA MOV AH RAL MOV HA POP A DCR A JNZ 68H
0080H 00H ORA A MOV AH RAR MOV DA MOV AL RAR MOV EA RET CALL 5CH 00H LHLD DCH 02H DAD B
0090H INX H XCHG MOV AD ORA A RAR MOV DA MOV AE RAR LXI H DEH 02H MOV MA INX H MOV MD JMP 35H
00A0H 00H MOV LI DCH MOV AM INR L MOV BM RET LXI H E1H 02H MOV MC JMP 09H 38H RET LXI H
00B0H E2H 02H MOV MC INX H MOV MB INR L MOV ME INR L MOV MI 00H LXI H E4H 02H MOV CM DCR C MOV AC
00C0H INR L SUB M JC D8H 00H MOV CM MOV BI 00H LHLD E2H 02H DAD B MOV AM MOV CA CALL A7H
00D0H 00H LXI H E5H 02H INR M JNZ BAH 00H RET LXI H EAH 02H MOV MC INR L MOV ME MOV AI
00E0H 0FH DCR L SUB M JNC E8H 00H MOV MI 0FH MOV LI ECH MOV MI 01H LXI H EAH 02H MOV AM
00F0H MOV LI ECH SUB M JC 68H 01H LXI H E9H 02H MOV EM MOV DI 00H MOV LI E6H MOV CM INR L
0100H MOV BM CALL 5CH 00H LXI B 30H 00H XCHG DAD B XCHG LXI H EDH 02H MOV ME MOV AI 39H
0110H SUB M JNC 18H 01H MOV AM ADD I 07H MOV MA DCR L MOV CM DCR C MOV AI FFH JNZ 21H 01H
0120H XRA A DCR L ANA M MOV LI E6H MOV CA MOV AM INR L MOV DM SUB I 00H MOV EA MOV AD SBC I 00H ORA E
0130H SUB I 01H SBC A ANA C RRC JNC 3CH 01H MOV LI EDH MOV MI 20H MOV AI 10H MOV LI ECH
0140H SUB M MOV CA MOV BI 00H MOV LI EEH DAD B XCHG LXI H EDH 02H MOV CM MOV AC STAX D LXI H E9H
0150H 02H MOV EM MOV DI 00H MOV LI E6H MOV CM INR L MOV BM CALL 5CH 00H LXI H E6H 02H MOV MC
0160H INX H MOV MB MOV LI ECH INR M JNZ ECH 00H LXI B EEH 02H LXI D 10H 00H MOV LC MOV HB
0170H DAD D XCHG MOV AE LXI H EAH 02H SUB M MOV EA MOV AD SBC I 00H MOV CE MOV BA MOV EM CALL AFH
0180H 00H RET
0182H 0DH 0AH 0AH 0AH 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H 20H
019EH 54H 41H 42H 4CH 45H 20H 4FH 46H 20H 53H 51H 55H 41H 52H 45H 20H 52H 4FH 4FH 54H 53H 0DH 0AH 0AH 20H 56H 41H 4CH
01BAH 55H 45H 20H 20H 52H 4FH 4FH 54H 20H 56H 41H 4CH 55H 45H 20H 20H 52H 4FH 4FH 54H 20H 56H 41H 4CH 55H 45H 20H 20H
01D6H 52H 4FH 4FH 54H 20H 56H 41H 4CH 55H 45H 20H 20H 52H 4FH 4FH 54H 20H 56H 41H 4CH 55H 45H 20H 20H 52H 4FH 4FH 54H
01F2H 0DH 0AH 0AH
01F5H LXI H FEH 02H MOV MI 01H INX H MOV MI 00H MOV AI E8H MOV BI 03H LXI H FEH 02H SUB M
0205H INR L MOV CA MOV AB SBC M JC 90H 02H MOV EI 05H MOV DI 00H LXI H FEH 02H MOV CM INR L
0215H MOV BM CALL 5CH 00H MOV AE SUB I 01H MOV EA MOV AD SBC I 00H ORA E JNZ 51H 02H MOV EI
0225H FAH MOV DI 00H LXI H FEH 02H MOV CM INR L MOV BM CALL 5CH 00H MOV AE SUB I 01H MOV EA
0235H MOV AD SBC I 00H ORA E JNZ 49H 02H LXI B 82H 01H MOV EI 73H CALL AFH 00H JMP
0245H 51H 02H
0247H 0DH 0AH
0249H LXI B 47H 02H MOV EI 02H CALL AFH 00H LXI H FEH 02H MOV CM INR L MOV BM MOV LI E6H
0259H MOV MC INX H MOV MB MOV LI E9H MOV MI 0AH MOV CI 06H MOV EI 01H CALL D9H 00H MOV LI FEH
0269H MOV CM INR L MOV BM CALL 16H 00H LXI H E6H 02H MOV MA INX H MOV MI 00H MOV LI E9H MOV MI
0279H 0AH MOV CI 06H MOV EI 01H CALL D9H 00H MOV LI FEH MOV CM INR L MOV BM LXI H 01H 00H
0289H DAD B SHLD FEH 02H JMP FDH 01H EI HLT
NO PROGRAM ERRORS