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