home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / misc / plm80.ark / PLMSAMP.PRN < prev   
Encoding:
Text File  |  1989-04-05  |  17.5 KB  |  148 lines

  1.  8080 PLM1 VERS 2.0                                                                                                     
  2.                                                                                                                         
  3.  00001  1   /*                                                                                                          
  4.  00002  1                          SAMPLE  PL/M  PROGRAM                                                                
  5.  00003  1                                                                                                               
  6.  00004  1       THIS PROGRAM CALCULATES AND PRINTS OUT THE SQUARE ROOTS OF                                              
  7.  00005  1       ALL INTEGERS BETWEEN 1 AND 1000.                                                                        
  8.  00006  1                                                                  */                                           
  9.  00007  1   DECLARE CR LITERALLY '0DH', LF LITERALLY '0AH', TRUE LITERALLY '1',                                         
  10.  00008  1           FALSE LITERALLY '0';                                                                                
  11.  00009  1                                                                                                               
  12.  00010  1   10H:  /*  IS THE ORIGIN OF THIS PROGRAM */                                                                  
  13.  00011  1                                                                                                               
  14.  00012  1   SQUARE$ROOT: PROCEDURE(X) BYTE;                                                                             
  15.  00013  2       DECLARE (X,Y,Z) ADDRESS;                                                                                
  16.  00014  2       Y=X; Z=SHR(X+1,1);                                                                                      
  17.  00015  2           DO WHILE Y<>Z;                                                                                      
  18.  00016  2           Y=Z; Z=SHR(X/Y + Y + 1, 1);                                                                         
  19.  00017  3           END;                                                                                                
  20.  00018  2       RETURN Y;                                                                                               
  21.  00019  2       END SQUAREROOT;                                                                                         
  22.  00020  1                                                                                                               
  23.  00021  1       /* PRINT USING INTELLEC MONITOR */                                                                      
  24.  00022  1   PRINT$CHAR: PROCEDURE (CHAR);                                                                               
  25.  00023  2       DECLARE CHAR BYTE;                                                                                      
  26.  00024  2       DECLARE IOCO LITERALLY '3809H';                                                                         
  27.  00025  2       GO TO IOCO;                                                                                             
  28.  00026  2       END PRINT$CHAR;                                                                                         
  29.  00027  1                                                                                                               
  30.  00028  1   PRINT$STRING: PROCEDURE(NAME,LENGTH);                                                                       
  31.  00029  2       DECLARE NAME ADDRESS,                                                                                   
  32.  00030  2           (LENGTH,I,CHAR BASED NAME) BYTE;                                                                    
  33.  00031  2           DO I = 0 TO LENGTH-1;                                                                               
  34.  00032  2           CALL PRINT$CHAR(CHAR(I));                                                                           
  35.  00033  3           END;                                                                                                
  36.  00034  2       END PRINT$STRING;                                                                                       
  37.  00035  1                                                                                                               
  38.  00036  1   PRINT$NUMBER: PROCEDURE(NUMBER,BASE,CHARS,ZERO$SUPPRESS);                                                   
  39.  00037  2       DECLARE NUMBER ADDRESS, (BASE,CHARS,ZERO$SUPPRESS,I,J) BYTE;                                            
  40.  00038  2       DECLARE TEMP(16) BYTE;                                                                                  
  41.  00039  2       IF CHARS > LAST(TEMP) THEN CHARS = LAST(TEMP);                                                          
  42.  00040  2           DO I = 1 TO CHARS;                                                                                  
  43.  00041  2           J=NUMBER MOD BASE + '0';                                                                            
  44.  00042  3           IF J > '9' THEN J = J + 7;                                                                          
  45.  00043  3           IF ZERO$SUPPRESS AND I <> 1 AND NUMBER = 0 THEN                                                     
  46.  00044  3               J = ' ';                                                                                        
  47.  00045  3           TEMP(LENGTH(TEMP)-I) = J;                                                                           
  48.  00046  3           NUMBER = NUMBER / BASE;                                                                             
  49.  00047  3           END;                                                                                                
  50.  00048  2       CALL PRINT$STRING(.TEMP + LENGTH(TEMP) - CHARS,CHARS);                                                  
  51.  00049  2       END PRINT$NUMBER;                                                                                       
  52.  00050  1                                                                                                               
  53.  00051  1   DECLARE I ADDRESS,                                                                                          
  54.  00052  1       CRLF LITERALLY 'CR,LF',                                                                                 
  55.  00053  1       HEADING DATA (CRLF,LF,LF,                                                                               
  56.  00054  1       '                        TABLE OF SQUARE ROOTS', CRLF,LF,                                               
  57.  00055  1       ' VALUE  ROOT VALUE  ROOT VALUE  ROOT VALUE  ROOT VALUE  ROOT',                                         
  58.  00056  1       CRLF,LF);                                                                                               
  59.  00057  1                                                                                                               
  60.  00058  1       /* SILENCE TTY AND PRINT COMPUTED VALUES */                                                             
  61.  00059  1       DO I = 1 TO 1000;                                                                                       
  62.  00060  1       IF I MOD 5 = 1 THEN                                                                                     
  63.  00061  2           DO; IF I MOD 250 = 1 THEN                                                                           
  64.  00062  3               CALL PRINT$STRING(.HEADING,LENGTH(HEADING));                                                    
  65.  00063  3               ELSE                                                                                            
  66.  00064  3               CALL PRINT$STRING(.(CR,LF),2);                                                                  
  67.  00065  3           END;                                                                                                
  68.  00066  2       CALL PRINT$NUMBER(I,10,6,TRUE /* TRUE SUPPRESSES LEADING ZEROES */);                                    
  69.  00067  2       CALL PRINT$NUMBER(SQUARE$ROOT(I), 10,6, TRUE);                                                          
  70.  00068  2       END;                                                                                                    
  71.  00069  1                                                                                                               
  72.  00070  1   EOF                                                                                                         
  73.  NO PROGRAM ERRORS                                                                                                      
  74.                                                                                                                         
  75.  8080 PLM2 VERS 2.0                                                                                                     
  76.                                                                                                                         
  77.                                                                                                                         
  78.      1=0003H   12=0013H   13=0016H   14=001CH   15=002FH   16=0045H   17=0098H   18=00A1H   19=00A7H   23=00ABH         
  79.     25=00AEH   26=00AFH   29=00B7H   31=00BAH   32=00C5H   33=00D1H   34=00D8H   35=00D9H   37=00DFH   39=00E3H         
  80.     40=00E6H   41=00F6H   42=010AH   43=0117H   44=0134H   45=0138H   46=0148H   47=015CH   48=0168H   49=0181H         
  81.     50=0182H   56=01F5H   59=01FDH   60=020CH   61=0221H   62=0239H   63=0244H   64=0247H   65=0251H   66=025CH         
  82.     67=0267H   68=0281H   69=0290H                                                                                      
  83.  STACK SIZE = 6 BYTES                                                                                                   
  84.  MEMORY..........................0300H                                                                                  
  85.  SQUAREROOT......................0016H                                                                                  
  86.  X...............................02DAH                                                                                  
  87.  Y...............................02DCH                                                                                  
  88.  Z...............................02DEH                                                                                  
  89.  PRINTCHAR.......................00A7H                                                                                  
  90.  CHAR............................02E1H                                                                                  
  91.  PRINTSTRING.....................00AFH                                                                                  
  92.  NAME............................02E2H                                                                                  
  93.  LENGTH..........................02E4H                                                                                  
  94.  I...............................02E5H                                                                                  
  95.  PRINTNUMBER.....................00D9H                                                                                  
  96.  NUMBER..........................02E6H                                                                                  
  97.  BASE............................02E9H                                                                                  
  98.  CHARS...........................02EAH                                                                                  
  99.  ZEROSUPPRESS....................02EBH                                                                                  
  100.  I...............................02ECH                                                                                  
  101.  J...............................02EDH                                                                                  
  102.  TEMP............................02EEH                                                                                  
  103.  I...............................02FEH                                                                                  
  104.  HEADING.........................0182H                                                                                  
  105.  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  
  106.  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   
  107.  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  
  108.  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     
  109.  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  
  110.  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  
  111.  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     
  112.  0080H 00H    ORA A  MOV AH RAR    MOV DA MOV AL RAR    MOV EA RET    CALL   5CH    00H    LHLD   DCH    02H    DAD B   
  113.  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     
  114.  00A0H 00H    MOV LI DCH    MOV AM INR L  MOV BM RET    LXI H  E1H    02H    MOV MC JMP    09H    38H    RET    LXI H   
  115.  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  
  116.  00C0H INR L  SUB M  JC     D8H    00H    MOV CM MOV BI 00H    LHLD   E2H    02H    DAD B  MOV AM MOV CA CALL   A7H     
  117.  00D0H 00H    LXI H  E5H    02H    INR M  JNZ    BAH    00H    RET    LXI H  EAH    02H    MOV MC INR L  MOV ME MOV AI  
  118.  00E0H 0FH    DCR L  SUB M  JNC    E8H    00H    MOV MI 0FH    MOV LI ECH    MOV MI 01H    LXI H  EAH    02H    MOV AM  
  119.  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   
  120.  0100H MOV BM CALL   5CH    00H    LXI B  30H    00H    XCHG   DAD B  XCHG   LXI H  EDH    02H    MOV ME MOV AI 39H     
  121.  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     
  122.  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   
  123.  0130H SUB I  01H    SBC A  ANA C  RRC    JNC    3CH    01H    MOV LI EDH    MOV MI 20H    MOV AI 10H    MOV LI ECH     
  124.  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     
  125.  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  
  126.  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  
  127.  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     
  128.  0180H 00H    RET                                                                                                       
  129.  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  
  130.  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  
  131.  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  
  132.  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  
  133.  01F2H 0DH 0AH 0AH                                                                                                      
  134.  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   
  135.  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   
  136.  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  
  137.  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  
  138.  0235H MOV AD SBC I  00H    ORA E  JNZ    49H    02H    LXI B  82H    01H    MOV EI 73H    CALL   AFH    00H    JMP     
  139.  0245H 51H    02H                                                                                                       
  140.  0247H 0DH 0AH                                                                                                          
  141.  0249H LXI B  47H    02H    MOV EI 02H    CALL   AFH    00H    LXI H  FEH    02H    MOV CM INR L  MOV BM MOV LI E6H     
  142.  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     
  143.  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  
  144.  0279H 0AH    MOV CI 06H    MOV EI 01H    CALL   D9H    00H    MOV LI FEH    MOV CM INR L  MOV BM LXI H  01H    00H     
  145.  0289H DAD B  SHLD   FEH    02H    JMP    FDH    01H    EI     HLT                                                      
  146.  NO PROGRAM ERRORS                                                                                                      
  147.                                                                                                                         
  148.