mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-22 07:54:25 +00:00
148 lines
17 KiB
Plaintext
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
|
|
|