RELEASE NOTES FOR ================= DECUS PDP-11 PASCAL VERSION 6.3 =============================== The original PDP-11 Pascal (also known as Swedish Pascal) as distributed by DECUS was prepared by: Seved Torstendahl Telefon AB LM Ericsson TN/X/Tdg S-126 25 Stockholm Sweden tel 08-719 4909 This release, based on the original, has been modified, corrected and repackaged by: Gerry Pelletier PRIOR Data Sciences, Ltd. Bell Mews Plaza, Nepean 39 Highway 7 Ottawa, Ontario Canada K2H 8R2 Telephone 613-820-7235 Telex 053-3356 CONTENTS ======== 1. Introduction................................ 1 2. Implementation notes........................ 2 3. Files and their contents.................... 4 4. Installing Pascal........................... 9 4.1 Preparing PASLIB......................... 9 4.2 Building the Compiler....................10 4.3 Compiling the Compiler...................12 5. Crosscompiler on DEC-10.....................13 6. Bugs........................................14 7. Modifications...............................16 1. Introduction ================ This Pascal compiler for PDP-11 is distributed through DECUS (Digital Equipment Computer Users' Society) for use on PDP-11 computers running RSX-11, RSTS, or IAS operating systems or for VAX computers running in compatibility mode. The compiler itself has a long history. It is derived from the original Pascal compiler developed by Urs Ammann in Zuerich in the mid 70's. This was then adapted to generate code for the PDP-11 by W. De Vries and C. Bron. It was later changed to run under RSX-11M by Seved Torstendahl at LM Ericsson in Stockholm. Because it was first introduced into the DECUS community at this point it became known as "Swedish Pascal". Further corrections and refinements were introduced by Gerry Pelletier in Ottawa. Version 6.2+ released in October 1981 was the last release. This release, version 6.3, supersedes that one. 10-AUG-1985 - 1 - Pascal Release Notes 2. Implementation Notes ======================== MACHINE -- Compiler runs on any mapped PDP-11 and generates code for all PDP-11's. Crosscompiler on DEC-10 generates code for all PDP-11's. The compilers generate code for floating point hardware (FIS or FPP) and extended instruction set (EIS) if option switches are set. OPERATING SYSTEM -- Compiler runs under RSX-11M, RSX-11M+, RSX-11D, IAS or RSTS (DEC-10 crosscompiler runs under TOPS-10). Requires a user partition of at least 28K words, preferably 32K words. DOCUMENTATION -- A machine readable user manual to complement the Jensen & Wirth, Pascal User Manual and Report is included with the release. MAINTENANCE -- No responsibility, but if errors are found reports will be accepted gratefully. Improvement suggestions are also welcome. All source code and maintenance utilities are provided with release. All source code is provided in the release but the main body of the compiler can only be compiled on RSX-11M or M+ or on a DEC-10. STANDARD -- Restrictions: - Only local goto's are allowed. - Procedure DISPOSE is not implemented, instead, a pair of procedures, MARK and RELEASE, are available to deallocate dynamic storage. - Packed data structures are only implemented for character arrays (always packed, two char's/word) and for boolean arrays (packing optional, one boolean/bit). - The procedures PACK and UNPACK have no effect. Extensions: - Procedures may be compiled separately. Separately compiled procedures can be accessed through a declaration with the procedure block replaced by "extern". - Function results can be of nonscalar type. - Arrays with unspecified bounds (but specified index-structure) can be used as formal parameters to procedures, allowing differently declared variables or constants as actual parameters. - A string parameter type has been introduced in which one-dimensional character arrays or substrings thereof 10-AUG-1985 - 2 - Pascal Release Notes may be passed as parameters. - Most compilation option selectors ( {$M+} etc.) are setable by switches in the command line . MEASUREMENTS -- The compiler requires a 32K word partition (at least 28K words for small programs). Compilation speed is about 120 characters per second (PDP-11/40 RK06). A memory resident overlayed compiler is also provided which requires a 65K word partition and compiles at about 400 characters per second. METHOD OF DEVELOPMENT -- The crosscompiler for PDP-11 running on DEC-10 produced by Bron et al was used as input. It is written in Pascal and developped from Pascal-P. This compiler was modified to generate object code linkable under RSX/IAS and to give access to the file system of RSX/IAS. When the crosscompiler was finished it compiled itself and was transferred to PDP-11. Almost all of the compiler is written in Pascal; the remainder and all of the runtime routines are written in MACRO-11. DEVELOPMENT AIDS -- Separate compilation allowed. Possible to use external procedures written in FORTRAN (or assembler). Also available are: automatic copy of text from library into source program ("include"); execution frequency measurements; execution trace; option selectors ($R- etc) setable by switches in the command line; an interactive source-level debugging package (mainly copied from DEC-10 Hamburg compiler), including a symbolic dump facility of stack and/or heap. 10-AUG-1985 - 3 - Pascal Release Notes 3. Files and their contents ============================ The various files of this release are offered on tape in DOS-11 format (FLX) under one directory. The following is a brief outline of the files and their contents. Documentation ============= RELEAS.TXT This document USER.FMT User manual (Software Tools formatter format) USER.TXT User manual (Printable text) DEBUG.MAN Manual for symbolic debugger PASERR.HLP Help text for compilation error codes PASRUN.HLP Help text for runtime error codes Runtime Support Library ======================= PASLIB.OLB Pascal runtime routines. As distributed, this is for PDP-11 processors with no EIS, FIS or FPP running mapped RSX. To upgrade it to your system, apply appropriate library replacement (see Section 4). LBR PASLIB/RP = PASEIS for EIS LBR PASLIB/RP = PASFIS for FIS LBR PASLIB/RP = PASFPP for FPP LBR PASLIB/RP = PASIAS for IAS LBR PASLIB/RP = PASRST for RSTS LBR PASLIB/RP = PASUNM for unmapped systems 10-AUG-1985 - 4 - Pascal Release Notes PASEIS.OBJ Concatenated object modules to do EIS multiply and divide. These are: Module MULI from P11EISMPI.MAC DIVI from P11EISDVI.MAC PASFIS.OBJ Contains object module for FIS real arithmetic operations. This is module P11RAR from source P11FIS.MAC. PASFPP.OBJ Concatenated object modules for FPP real arithmetic operations. These are: Module P11RAR from source P11FPP.MAC, FORTR from source P11FORFPP.MAC. PASIAS.OBJ Contains object module that has special difference for tasks run under IAS operating system. This is module RUNCHK from source P11IASRNC.MAC. PASRST.OBJ Contains object module that has special difference for tasks run under RSX emulator of RSTS operating system. This is module RUNCHK from source P11RSTRNC.MAC. PASUNM.OBJ Concatenated object modules required by programs that are to be built to run on an unmapped system. These are: P11INI from source P11INIUNM.MAC, P11NOF P11NOFUNM.MAC. PASNOX.OBJ Concatenated object modules that can be applied to a PASLIB.OLB that has been upgraded from the distributed PASLIB.OLB to restore it to a state that is useable on a processor with no arithmetic hardware. It contains the following modules: MULI from source P11MPI.MAC DIVI P11DVI.MAC P11RAR P11REAL.MAC P11INI P11INIT.MAC P11NOF P11NOFILE.MAC RUNCHK P11RUNCHK.MAC FORTR P11FORTR.MAC 10-AUG-1985 - 5 - Pascal Release Notes PASLIB.PAC Packed source modules for runtime support library. (Use P11DEF.MAC as prefix for assembling all MAC modules in this package.) DEBUG.PAS Main source for symbolic debugger. Object is in PASLIB.OLB as module INIT$$. Compiler (PAS) =============== P11PAS.PAS Pascal source of general part of compiler. P11FIL.PAS PDP-11-specific part of compiler. P11CRS.PAS DEC-10-specific part of compiler. SPCIAL.PAC Packed source for special runtime routines required by the compiler itself. RECUR1.OBJ RECUR2.OBJ Object for two different versions of a routine used for overlay control in the compiler. One of these must be present in PAS.OLB based on the version of the operating system you are running. See section 4 for further details. The distributed PAS.OLB contains RECUR2. The source for these are in RECUR1.MAC and RECUR2.MAC in SPCIAL.PAC. PAS.BLD PAS.ODL TKB files to build compiler PAS.OLB Library of object modules of compiler. These are the objects obtained from compiling P11PAS.PAS, P11FIL.PAS and all the modules in SPCIAL.PAC. PAS.TSK Task image of compiler. This version is built to run under RSX-11M in 32K words on a processor with EIS arithmetic hardware (ie. makes no use of FPP or FIS hardware). 10-AUG-1985 - 6 - Pascal Release Notes Big Compiler (PAZ) =================== This version of the compiler is essentially the same as the PAS task. It is built with considerably heavier overlaying and as a result uses memory resident overlays to maintain good speed performance. It needs about 65K words to run. If you are not using RSX-11 chances are you will not be able to use this version of the compiler. This version of the compiler was developed to compile the compiler itself since the PAS compiler does'nt have enough capacity to compile P11PAS.PAS. PAZ can compile P11PAS.PAS (about 8900 lines) in about 10 minutes on a PDP-11/40 - RK06 or 5.5 minutes on a PDP-11/70 - RM03. This is the preferred compiler to use if your system has lots of memory. PAZ.BLD PAZ.ODL TKB files to build PAZ PAZ.TSK PAZ compiler task built to run under RSX-11M on processor with EIS arithmetic hardware. OVTRIK.PAC OVTRIK.OLB Packed source and objects for routines that are needed for doing extra overlaying. Maintenance Utilities ===================== UNPACK Asks for the name of a packed file and splits it into its constituent files. LISTPACK Lists the names of files in a packed file. PACK Packs arbitrary source files into a new packed file. When it asks for name of source file, you can also enter "@file" where "file" itself contains the names of files to be packed. SELECT Can extract a particular module from a packed file. 10-AUG-1985 - 7 - Pascal Release Notes Task images (for RSX-11M) for some of these utilities are provided. (Built to use EIS.) 10-AUG-1985 - 8 - Pascal Release Notes 4. Installing Pascal ===================== The files are stored on tape in DOS-11 format. Use FLX to copy the files from tape to disk (eg. FLX =MT:[76,104]*.*). The runtime support library must first be prepared so that it matches your processor and operating system. Either or both the PAS or PAZ compiler tasks can then be built. Note that the distributed compiler tasks will only work on RSX-11M or RSX-11M+, therefore RSTS, IAS, and VMS users must rebuild the compiler. On RSX, it is not essential to rebuild the compiler tasks. The distributed compiler task images, PAS.TSK and PAZ.TSK, only have to be INStalled. They require 32K and 65K words of memory respectively. Since these compiler tasks are built to perform real arithmetic via software routines, you may want to upgrade them to take advantage of your floating point hardware (FPP or FIS) if you have it. This can be done by rebuilding the compiler tasks. Note that there will be no noticeable compilation speed improvement by doing this but it will release a bit of memory that can be used by the compiler for more symbol table workspace which permits compiling larger programs. 4.1 Preparing PASLIB ===================== The runtime support object library can be prepared by applying the appropriate library replacements to PASLIB.OLB with the LBR utility. LBR PASLIB/RP = PASEIS if processor has EIS, FIS or FPP LBR PASLIB/RP = PASFIS if processor has FIS LBR PASLIB/RP = PASFPP if processor has FPP LBR PASLIB/RP = PASIAS if operating system is IAS LBR PASLIB/RP = PASRST if operating system is RSTS LBR PASLIB/RP = PASUNM if this PASLIB is to be used for building tasks to run on an unmapped system. Note that on many PDP-11 models (eg. 34,44,55) the EIS (Extended Instruction Set) is built into the processor and 10-AUG-1985 - 9 - Pascal Release Notes is not referred to as an option. Treat these models as if they have EIS. After these replacements, the Pascal runtime support library will be ready as a separate OLB file. If, for convenience, you want to merge PASLIB into the system library, SYSLIB, then do a library extraction and insertion. Eg. >LBR PASLIB = PASLIB/EX ! Creates PASLIB.OBJ >SET /UIC=[1,1] >PIP /NV = SYSLIB.OLB ! Keep copy of old SYSLIB >LBR SYSLIB = [g,m]PASLIB ! Insert PASLIB routines 4.2 Building the Compiler ========================== First determine which version of the AUTO routine exists in your operating system. This routine controls automatic overlaying and is linked into every task that uses autoload overlays. The compiler makes use of a specially patched link into this routine in order to enhance the overlay capability to allow for automatic recursive overlaying which is required because of the recursive nature of the body of the compiler. DEC has provided different versions of the AUTO routine in the the various operating system releases and therefore the special linkages into it must be adjusted for each version. You can examine the version ident of the AUTO routine in your system with the LBR utility: >LBR LB:[1,1]SYSLIB/FU The further steps required are: - If your system has an AUTO routine with ident "08" or less then replace one of the compiler modules: >LBR PAS/RP = RECUR1 - Edit the PAS.BLD file to: 1. set the new default option switches for the compiler (see comments in PAS.BLD), 2. set the /FP switch if FPP is being used, 10-AUG-1985 - 10 - Pascal Release Notes 3. set the /SG switch if your task builder supports that switch, (this is essential), 4. set the second GBLPAT statement according to the version of the AUTO routine you have on your system (see comments in PAS.BLD). - If the CXP output facility has been selected (by recompiling the compiler with /X) then edit PAS.ODL file to add reference to module WRITER (see comments in PAS.ODL). - Invoke the task builder (eg. >TKB @PAS.BLD). Disregard the diagnostic messages issued by the task builder. - Install the compiler task: >INSTALL PAS or, on RSTS, setup a CCL command to invoke the compiler: >UT #CCL PAS=[x,y]PAS.TSK;PRIV ^Z If the resulting task image is too large, it will not install or run. In this case, the EXTTSK option in the PAS.BLD file should be adjusted to produce an acceptable task image (see comments in PAS.BLD). Try to maximize the task size. This will give the largest compiler symbol table workspace. The size of programs that can be compiled is limited by this workspace. Building the PAZ compiler requires the same procedure except that files PAZ.BLD and PAZ.ODL are involved. However, for PAZ, its workspace is adjusted with the EXTSCT statement in PAZ.BLD. The workspace is maximum when the root segment (see the MAP file produced by the task builder) is exactly 160000 octal bytes long. The task will not build correctly if the root exceeds this size. 10-AUG-1985 - 11 - Pascal Release Notes 4.3 Compiling the Compiler =========================== If you are interested in maintaining or modifying the compiler then you will need to recompile the compiler source (this can only be done on RSX): - install the PAZ compiler (it requires about 65K words of memory) - compile either or both Pascal source modules: >PAZ P11PAS{switches} >PAZ P11FIL{switches} where switches ::= /E for processors with EIS /G for processors with EIS/FIS /F for processors with EIS/FPP /X if you want CXP output facility Note that if /X is used for compiling one module then it must be used for the other also. - replace the object in PAS.OLB: >LBR PAS/RP = P11PAS, P11FIL >; >; Compress and purge to recover space >LBR PAS/CO = PAS >PIP PAS.OLB/PU Specifying the /X switch gives the compiler the ability to output symbolic generated code to a listing file as specified on a PAS command line (see section 1.1.1 of user manual). This facility is not provided by default because the extra code that the compiler has to carry reduces its workspace. Specifying /X will cost almost 900 words of reduced workspace. 10-AUG-1985 - 12 - Pascal Release Notes 5. Crosscompiler on DEC-10 =========================== To generate a cross compiler on a DEC-10, proceed as follows: - transfer the files P11PAS.PAS and P11CRS.PAS to DEC-10, - compile them with the PASREL compiler from Hamburg, - load the produced modules and save the core image: .LOAD P11PAS,P11CRS .SAVE P11PAS 64 (64 is enough but maybe less will suffice.) When run, the compiler will ask for the filename of the source. A full name including volume and p,pn is allowed. Filename extension is not necessary if it is .PAS. Two new files are produced: a list file with extension .LST and an object file with extension .OBJ. Example: .RUN P11PAS *PROG will produce the files PROG.LST and PROG.OBJ from PROG.PAS . The object file contains one PDP-11 byte per DEC-10 word and is in PDP-11 DOS format. It can be transferred to a PDP-11 on DECtape or other suitable medium. Example: .MOUNT DTA:DT/V:DTNAME/WE .R FILEX *DT:/V/Q/I=PROG.OBJ *^C This object module can then be retrieved on a PDP-11 with RSX-11M by: >FLX SY:/RS=DT:*.*/DO/FB 10-AUG-1985 - 13 - Pascal Release Notes 6. Bugs ======== - There are a couple of problems with output of real numbers to a text file. Rounding is not done and severe inaccuracy (up to 6%) shows up for numbers in the range 1.0E-3 to 1.0E-9. Changes are also required so that the selection of number format (scientific vs fixed point) conforms to the Pascal Standard. - I/O operations to a file of integer do not work. - Statements such as these do not compile when f is a file: write (f^.a.b,... write (f^[i],... Rewrite them as: write (output, f^.a.b, ... {or tty} write (output, f^[i], ... - Standard I/O procedures cannot refer directly to files within arrays or records. Indirect reference such as through a formal parameter or as a field identifier inside a with clause can be made. For example, if a program contains the declarations: var af: array [1..10] of text; rf: record a: integer; b: text; c: char; end; then the following statements will not compile: rewrite (af[i]); writeln (af[i], x); reset (ar.b); readln (ar.b, x); These could be rewritten as: 10-AUG-1985 - 14 - Pascal Release Notes user_rewrite (af[i]); user_writeln (af[i], x); with rf do begin reset (b); readln (b, x); end; - There are certain unusual circumstances of bad source code syntax that will cause the compiler to hang in an endless loop. If you suspect the compiler is hung, abort it and restart the compilation specifying your terminal as the listing device. The listing will stop at the line just before the line with the bad syntax. - There is a problem in calling Fortran subroutines that themselves do Fortran I/O. Some F4P users have reported success in circumventing this problem by removing one instruction from PASLIB routine FORTR. The source for this routine is in PASLIB.PAC, module P11FORFPP.MAC. The instruction to be removed is: MOV DAPADDR(GP),$OTSV To incorporate the change in PASLIB: MAC P11FORFPP = P11DEF, P11FORFPP LBR PASLIB/RP = P11FORFPP This fix apparently does not work for Fortran IV (Version 01C at least). - The symbolic object code that is output to the CXP file is not accurate because some optimization is done after code generation. The optimizing routines need to be enhanced to output to the CXP file information about the code revisions they perform. - The standard function for arctan is not available. 10-AUG-1985 - 15 - Pascal Release Notes 7. Modifications ================= The following lists the modifications made to Swedish Pascal version 6.2+ to arrive at this release. 93. Improve the accuracy of real addition and subtraction in the software real arithmetic routine P11REAL.MAC. 94. When a rewrite on a text file specifies option FDFTN, both the FD.FTN and FD.CR record attribute bits were being set. This was acceptable on older operating system releases but not for recent releases. Module P11RESET.MAC was changed to only set the FD.FTN bit in this situation. 95. Corrected problem with PAZ compiler crashing when activated without any command line arguments. The name of the command prompting routine was changed from RTT to RTTY in P11WTT.MAC AND P11FIL.PAS. 96. Module P11RESET.MAC has been changed to correctly save and restore the filename block when a temporary file is reset. The wrong number of words were being saved and restored. 97. The reset and rewrite statements have been changed so that when an open file is being re-opened with a reset/rewrite statement that has no file spec parameters then the existing open file will be reopened. This involved procedure GETPUTRESETREWRITE in P11PAS.PAS and runtime module P11RESET.MAC. 98. The compiler was corrected to properly compile I/O statements that refer to files that are contained in records. 99. A special version of P11RUNCHK.MAC has been provided for RSTS users. The new module is called P11RSTRNC.MAC. 100. The compiler will now accept a simplified command line with as few as one file spec. It will also still accept the traditional MCR type command syntax. 101. The underscore character (_) can now be used in identifier names. 10-AUG-1985 - 16 - Pascal Release Notes 102. Added a check to make sure that a floating point program is built with the /FP task builder switch. (Module P11FPPINI.MAC) 103. Made corrections to allow update of sequential files. (Modules P11RESET.MAC and P11GETPUT.MAC) 104. Corrected fault related to compiling a constant declaration involving a real constant identifier preceeded by a minus sign. Procedure CONSTANT in P11PAS.PAS. 105. Corrected bug in FOR loop code generation when an unsigned compare is required for the loop termination test (eg. when control variable is type CHAR). Procedure FORSTATEMENT in P11PAS.PAS. 106. Changed compiler to reject FOR statements in which the control variable is not a local variable. This is required by the Pascal Standard in order to minimize insecurities. Procedure FORSTATEMENT in P11PAS.PAS. 107. Changed P11RESET.MAC to properly flush the last incomplete line to output text files when the file is being reopened. 108. Changed action of MOD operator to conform to Pascal Standard (ie. result will give different result from old method for negative operand only). Modules P11DVI.MAC and P11EISDVI.MAC. 109. Changed P11GETPUT.MAC to better handle situation when end of line is hit in a text file. 10-AUG-1985 - 17 - Pascal Release Notes