                       PASCAL/MT+ WITH SPP
                           VERSION 3.2
                           RELEASE 3/4

-----------------------------------------------------------------

This  file is intended to give you the latest information on  the 
PASCAL/MT+ version you have just received.

-----------------------------------------------------------------

All relevant information can be found in the Release bulletin for 
Release 3/4 and the PASCAL/MT+ manuals.

Apart from that the following may be of interest:

1.   The  following  information is the original READ.ME file  as 
     supplied by Digital Research.



                    *****************************
                    * R E L E A S E   N O T E S *
                    *****************************


                            PASCAL/MT+86

                             VERSION 3.2


             FOR THE CP/M-86 FAMILY OF OPERATING SYSTEMS


            Copyright (c) 1984 by Digital Research, Inc.
























                                1-1



















        Pascal/MT+86                            Release Notes



        These release notes pertain to both the software  and
        the   documentation  set  for  the  Digital  Research
        product:


                            Pascal/MT+86

             For the CP/M-86 Family of Operating Systems



        They provide the most current information regarding:

           o changes to the software, or problems  that  have
             been  identified since the product was released.

           o errors or omissions  in  the  documentation  set
             that  could not be corrected because of the lead
             time needed for production and printing.



        Note:  These release notes have been formatted so you
        can  print them on your own printer, cut them to size
        (6 1/2 x 8 1/2), and place them in your manuals.

















                                1-2



















        Pascal/MT+86                            Release Notes


                         ******************
                         **   SOFTWARE   **
                         ******************



        The following remarks apply  to  problems  that  have
        been identified in the current release.


                             Pascal/MT+


        Problem:   The  compiler  does  not  correctly  parse
        FORWARD declarations.

        Solution:  Do  not  use   FORWARD   declarations   in
        Pascal/MT+   programs.   The  nature  of  the  3-pass
        compiler makes them unnecessary.


        Problem:  The compiler halts indefinitely  (requiring
        a reboot) if the source code has a missing delimiter,
        *) on the right side of a comment.

        Solution: Make sure all comments in your source  code
        have beginning and closing delimiters.


        Problem:  The compiler will not detect  as  an  error
        the declaration

          SET OF nums

        where nums is type REAL, even though  set  operations
        are defined only for ordinal types.

        Solution: Do not declare a set of type REAL.





                                1-3



















        Pascal/MT+86                            Release Notes


        Problem:  The set membership  operator  IN  does  not
        accept negative arguments.

        Solution: No fix available at this time.


        Problem:  The T and W source-code options do not flag
        STRING operations and report Error 500 as documented.
        When  used  together,  they  report  incorrect  error
        messages,   and   do   not  detect  all  non-standard
        features.

        Solution: No fix is available at this time.


        Problem:  The $K9 and $K10 options do not  work  when
        used together.

        Solution: No fix is available at this time.


        Problem:  When using BCD reals, formatted  output  is
        always truncated, not rounded.

        Solution: If you want to round formatted output  when
        using  BCD  reals,  you  must write your own rounding
        routines in the program.


        Problem:  There are errors in allocating array bounds
        for  conformant  arrays  of  two  or more dimensions.
        One-dimensional conformant arrays work correctly.

        Solution: There is no fix  available  at  this  time.
        Work is in progress, and the problem will be fixed by
        the next release.







                                1-4



















        Pascal/MT+86                            Release Notes


        Problem:  The OUT function does not generate  correct
        code if you pass it an expression.  For example,

          OUT[(portnum + i)] := $88

        Solution:  Use a literal constant.  For example,

          OUT[36] := $88

        If it is not convenient to use  a  literal  constant,
        you can put the values you want to send out in a CASE
        statement.  For example,

          CASE <expression> OF

            $N1 : OUT[$N1] := <value 1>
            $N2 : OUT[$N2] := <value 2>
            $N3 : OUT[$N3] := <value 3>
              .
              .
              .

        where $N1,$N2, etc. are literal constants.


        Problem:  When values received  from  the  predefined
        INP  array are assigned to variables of type INTEGER,
        the high-order byte is not zeroed  out,  thus  giving
        incorrect values.

        Solution: If you assign values from INP to an INTEGER
        type,  use  the following construct to zero the high-
        order byte:

          <variable> := (INP[$N] & $FF)








                                1-5



















        Pascal/MT+86                            Release Notes


                               ASMT-86


        Problem:  ASMT does not properly route the  R86  file
        to  another  disk  drive when you use the $R command-
        line option.

        Solution: Assemble the source  file  on  the  default
        drive  and  then use the PIP utility to move the file
        to the other drive.


        Problem: ASMT-86 generates  incorrect  code  for  the
        instruction

          MOV CL,[SI]

        Solution: Use the instruction

          MOV CL,BYTE PTR [SI]


        Problem:  Given a declaration such as

          EXTRN IT : WORD

        an instruction such as

          MOV DI,OFFSET IT; where DI is any 16-bit register

        generates an assembly error.

        Solution: Use the instruction

          LEA DI,IT; where DI is any 16-bit register








                                1-6



















        Pascal/MT+86                            Release Notes


                    ****************************
                    **  DOCUMENTATION ERRATA  **
                    ****************************



        The following are errors in the  Pascal/MT+  Language
        Reference Manual (February 1983 edition):


        Page 3-3

        Change WORD(x) to WRD(x)


        Page 6-2

        Change the third paragraph to read:

        "The data type for a function must be a simple  type.
        Put  the  type  name  after a colon at the end of the
        function heading.


        Page 6-8

        In  Table  6-1,  change  the  Returns  type  for  the
        Function ABS from REAL to "same as NUM".


        Page 6-10

        In Table 6-1, the Function ADDR returns a POINTER not
        an   INTEGER  type.  Also  change  FUNCTION  @RLS  to
        PROCEDURE @RLS.  Delete the word FUNCTION in front of
        @HERR.







                                1-7



















        Pascal/MT+86                            Release Notes


        Page 6-12

        Change the first sentence in the second paragraph  to
        read:

        "You can use ADDR to reference external variables."


        Page 6-13

        Change the example to ARCTAN(1) = 0.78539


        Page 6-19

        Change the first sentence in the second paragraph  to
        read:

        "CLOSEDEL closes and deletes files  after  use."   In
        the last paragraph, change File Control Blocks (FCBs)
        to File Information Blocks (FIBs).


        Page 6-68

        Change the fifth paragraph to read:

        "WRITE  and  WRITELN  treat  strings  as  arrays   of
        characters.  They  do  not  write  the length byte to
        TEXT files."


        Page 7-2

        In the second paragraph, change F2 to F3 in:

          F2^ := 45;

        puts the integer value 45 in the buffer of  the  file
        variable F2.



                                1-8



















        Pascal/MT+86                            Release Notes


        The  following   are   errors   in   the   Pascal/MT+
        Programmer's   Guide   for   the  CP/M-86  Family  of
        Operating Systems (February 1983 edition):


        Page 1-5

        Delete the following files from Table 1-2.  They  are
        NOT distributed with the product:

          o 8087.I86
          o 87XOP.I86
          o 87TRS.I86
          o 87REALS.BLD
          o CONCAT.CMD


        Page 1-6

        The  second  paragraph  states  you   can   use   the
        distribution  disks  just  as  they are.  This is not
        true; they are write-protected.  You must  copy  them
        onto backup disks.


        Page 2-2

        Change the first paragraph to read:

        "The compiler can read the source <filespec> from any
        disk.  The  <filespec>  must  be  in Digital Research
        standard format as described in your operating system
        manual.  The  source  file  must  end with a carriage
        return, line feed, and a CRTL-Z."









                                1-9



















        Pascal/MT+86                            Release Notes


        Page 2-2.

        Add this paragraph following the first paragraph:

        "Note: When you create your Pascal/MT+ programs, make
        sure  that  your  text  editor  does  not insert non-
        printable formatting characters in the  source  file.
        Some text editors include certain non-printable ASCII
        characters in a  file  to  control  formatting.   The
        compiler cannot process a file that contains any non-
        printable control characters (except tabs).  The file
        must be a simple stream of printable ASCII characters
        separated by carriage returns and line feeds."


        Page 2-3

        Change the first paragraph to read:

        "During Phase 0, When the  compiler  finds  a  syntax
        error, it displays the line containing the error.  If
        you are using the MTERRS.TXT file, the compiler  also
        displays  an error description.  In all other Phases,
        if you are not using the MTERRS.TXT file, or you have
        a  nonsyntax  error,  the  compiler displays the line
        number and an error number."


        Page 2-15

        Table 2-5 is incomplete.  Add  the  following  Linker
        error messages:

        Unable to open input file: xxxxxxxx

        Explanation: The linker  cannot  find  the  specified
        input file.

        Incompatible relocatable file format

        Explanation: Either the R86 file is corrupted  or  it


                                1-10



















        Pascal/MT+86                            Release Notes


        has  a  format  that  is incompatible with the format
        expected by LINK/MT+86.

        Initialization of DSEG not allowed

        Explanation: The linker has encountered a  DB  or  DW
        instruction in the Data segment.

        Undefined symbol: xxxxxxxxx

        Explanation: The specified symbol is  referenced  but
        not defined in the module.


        Page 3-5

        Change the second paragraph in section 3.2.1 to read:

        "You  assign  overlay  areas  when  you link the root
        module.  You assign overlay numbers when you link the
        overlay.  If  you do not specify an overlay area when
        you link the overlay module, the default action is to
        place it in overlay area 1."


        Page 3-6

        Change the third paragraph to read:

        "You can load more than 15 overlays into overlay area
        1  by  explicitly  supplying the overlay address when
        you link the root  module.   Otherwise,  the  default
        number is 15."


        Page 3-6

        Change the first sentence of the second paragraph  in
        section 3.2.2 to read:

        "When part of a  program  calls  an  overlay-resident


                                1-11



















        Pascal/MT+86                            Release Notes


        routine, the program accesses that routine through an
        entry-point table at the end of the overlay."


        Page 3-7

        Add  the  following  paragraph  just  ahead  of   the
        subsection entitled "Assembly Language Modules":

        "An overlay cannot call another overlay into the same
        overlay   area   using  a  literal  expression  as  a
        parameter, because literals are allocated in the Code
        segment,  which  is overwritten when the next overlay
        is loaded.

        Therefore, if you want to use a literal expression as
        a  procedure  parameter,  you  must  first assign the
        value of the expression to a variable, and then  pass
        the variable to the procedure."


        Page 3-8

        The  explanation  of  the  /O  option  is  incorrect.
        Change as follows:

        "/O:n tells the linker that the previous  file  is  a
        SYM  file  and  that  n  is  the  overlay  number, in
        hexadecimal.  You must specify the  overlay  filename
        and  number in the link command line.  This option is
        for overlays only."












                                1-12



















        Pascal/MT+86                            Release Notes


        Page 3-9

        Change the first paragraph to read:

        "To find the value for /V, link the root program with
        the  necessary  libraries.  The  root program's total
        code size rounded up to the nearest multiple  of  128
        is  the  lowest  address  you  can use for an overlay
        area."


        Page 3-10

        Change the list at the top of the page to read:

        "The D option specifies the size of  the  data  area.
        The  value is the sum of the root's data size and the
        sizes of the overlays data  plus  100H.   Leave  room
        during development so that the overlay data areas can
        grow."

        "The R option specifies the total  code  size,  which
        includes  the overlay areas.  Use the sum of the root
        program's code and the code  size  of  each  separate
        overlay area."


        Page 3-10

        Change the command line for linking an overlay to:

        LINKMT <prog.00n>=<sym file>/O:,<modules|libraries>/P:mmmm/X:ssss



        Page 3-11

        Change section 3.2.5 to 3.2.6.  Insert section  3.2.5
        as follows:




                                1-13



















        Pascal/MT+86                            Release Notes


        3.2.5  Overlay Symbol Table

        LINKMT creates an entry-point table at the end of the
        code segment for each overlay module.  This table can
        be very large  because  it  includes  all  the  entry
        points in the overlay and the root.  However, not all
        the entries in the table are required by the overlay.
        The  overlay  requires only those entries called from
        the root or another overlay.

        Therefore, after linking each overlay module, you can
        optionally  use  the STRIP utility to reduce the size
        of the table.

        Note: LINKMT provides the size of  the  code  segment
        which  includes the size of the entry-point table for
        overlay modules.

        To use STRIP, enter the command

        A>strip


        Once invoked, STRIP asks for the name of the file  to
        strip,  the  base  address  of  the overlay (the same
        number used with the P parameter when  you  link  the
        overlay),  and  the name of each entry point you want
        to retain in the symbol table.  You  must  enter  the
        entry  points  in reverse order of their declaration,
        and they must be in upper case.

        STRIP displays the  size  of  the  file  in  sectors,
        searches  the  symbol table for the first entry point
        and deletes all others it encounters until  it  finds
        the  correct  one.  When STRIP finds the entry point,
        it displays the name and  asks  for  verification  to
        delete or not.

        After you delete the first entry  point,  STRIP  then
        requests another entry point and continues.  When the
        last one is found, you can give a dummy  entry  point


                                1-14



















        Pascal/MT+86                            Release Notes


        such  as  ZZZ  or simply press RETURN, and then STRIP
        continues to delete the other entries until it  finds
        the end to the table.

        After deleting all the  unused  entry  points,  STRIP
        shows  the  new  size in sectors, lists the remaining
        entry points, and  asks  if  it  should  replace  the
        original version with the stripped version.  You must
        answer with "YESDOIT" to replace the  original.   Any
        other  response  terminates STRIP and does not change
        the original.


        Page 3-13

        The example command lines for linking overlays 1  and
        2 are incorrect.  They should be:

        A>LINKMT DEMOPROG.001=DEMOPROG/O.1,MOD1,PASLIB,/S/P:4000/L

        A>LINKMT DEMOPROG.002=DEMOPROG/O.2,MOD2,PASLIB,/S/P:4000/L



        Page 3-14

        Add the following to paragraph  6  concerning  shared
        variables:

        "You must  also  modify  the  initialization  routine
        @INI3.I86.  By  default,  INI3.I86 zeros out the data
        area.  Therefore, you must change the  value  of  the
        variable named dsize in @INI3.I86 to reflect the size
        of the shared global data.  You can compute dsize  by
        summing  the  total space required for all the global
        variables you want to share with the program you  are
        chaining to."






                                1-15



















        Pascal/MT+86                            Release Notes


        Page 4-3

        Change the first sentence to read:

        "Declare them public in the Code or Data  segment  of
        the assembly-language module."


        Page 4-7

        Delete the third paragraph, and insert the following:

        "Floating-point  real numbers are returned in the DX,
        CX, BX, and AX registers.  BCD reals are returned  in
        DI, DX, CX, BX, and AX.  The high-order byte is in DX
        (or DI), and the low-order is always in AX."


        Page 4-14

        In the paragraph under Listing 4-6 add the sentence:

        "An extra eight bytes of code is generated here,  but
        the  amount can vary depending on the number and type
        of parameters.  There is  no  empirical  formula  for
        determining the extra amount."


        Page 4-14

        Change section 4.3.3 to read:

        "You can declare ABSOLUTE variables if you  know  the
        address  at  compile  time.  The syntax for declaring
        ABSOLUTE variables is:

           <variable name> : ABSOLUTE [<segment>:<offset>]

        The following  examples  are  valid  declarations  of
        ABSOLUTE variable."



                                1-16



















        Pascal/MT+86                            Release Notes


        Page 4-15

        Delete the third paragraph at the top of the page.

        "String variables . . ."


        Page 4-17

        In Listing 4-7, following the line

           (* FIRST INITIALIZE THE INTERRUPT VECTORS *)

        add the following line of code:

           INLINE($FA);  (* CLI INSTRUCTION *)


        Page 4-18

        Add the following to the explanation of MEMAVAIL:

        "FULLHEAP.R86 has been extended to make available  up
        to  1  megabyte of heap space.  MEMAVAIL and MAXAVAIL
        both return INTEGER values, so if you are using  more
        than  32K  of  heap  space,  you must declare them as
        follows:

          EXTERNAL FUNCTION LMEMAVAIL : LONGINT;
          EXTERNAL FUNCTION LMAXAVAIL : LONGINT;

        These functions are both in PASLIB.


        Page 5-1

        The first paragraph in  Section  5.1  refers  to  the
        Intel   publication   named  "MCS-86  Macro  Assembly
        Language Reference Manual."  This manual is no longer
        in  print,  but  has  been  replaced  by  the  "ASM86
        Language Reference Manual".  The Intel  order  number


                                1-17



















        Pascal/MT+86                            Release Notes


        for this new manual is 121703-002.


        Page 5-3

        In Table 5-1, add the following to the explanation of
        the Pd option:

        Unlike the similar MT86 compiler option, P  does  not
        send output to the printer.


        Page 5-9

        In Table 5-3, 320 bytes should be 32 bytes.


        Page G-6

        Add the following as Appendix H:


                             APPENDIX H

                          UTILITY PROGRAMS


        This appendix describes the utility programs  NM  and
        SZ which are useful for examining R86 files.


        NM

        Syntax: NM <filespec>

        The NM utility program lists the public and  external
        names  in  the  <filespec>,  which  can  be either an
        individual module or a library.  The  <filespec>  can
        also be ambiguous, but you must use the R86 filetype.
        For example, the command



                                1-18



















        Pascal/MT+86                            Release Notes


          A>nm *.r86

        lists all the public and external names  within  each
        module of all R86 files on the default disk.  NM list
        each public name preceded by an E, and each  external
        name preceded by an X.

        By default,  NM  lists  the  names  on  the  console.
        However,  you  can  redirect  the  output using the >
        character.  For example, the command

          A>nm triglib.r86 >b:module.nam

        sends the output from NM to the file named MODULE.NAM
        on drive B.


        SZ

        Syntax: SZ <filespec>

        The SZ utility program lists the size of the code and
        data   in  the  <filespec>.  The  <filespec>  can  be
        ambiguous, but you must use the  R86  filetype.   For
        example, the command

          A>sz *.r86

        lists the size of the code and data for any R86  file
        on the default disk.

        By default, SZ  sends  the  output  to  the  console.
        However,  you  can  redirect  the  output using the >
        character.  For example, the command

          A>sz triglib.r86 >b:module.siz

        sends the output from SZ to the file named MODULE.SIZ
        on drive B.




                                1-19



















        Pascal/MT+86                            Release Notes


        Note: SZ does not work with a library file.   If  you
        use a library file, SZ reports the code and data size
        for only the first module in the library.


        Add the followong as Appendix I:


                             APPENDIX I

                        8087 SUPPORT LIBRARY



        Pascal/MT+  provides  support  for  the  Intel   8087
        numerics  coprocessor.  This  support  is provided by
        linking the run-time library 87REALS.R86  instead  of
        the normal FPREALS.R86 when performing floating-point
        calculations,  and  linking  87TRANS.R86  instead  of
        TRANCEND.R86     when    performing    transcendental
        calculations.  Both these 8087 support libraries  are
        searchable.

        To use the 8087 support libraries, you do not need an
        8087 coprocessor on the system you use for compiling,
        only on the system that runs the program.

        You can use the sample program named CALC.SRC on your
        distribution  disk to test both the standard run-time
        libraries FPREALS.R86 and TRANCEND.R86 as well as the
        8087 libraries 87REALS.R86 and 87TRANS.R86.

        To use CALC, perform the following steps:

           o Compile the source program with the command

               A>mt+86 calc






                                1-20



















        Pascal/MT+86                            Release Notes


           o If you want to test the standard libraries, link
             the compiled program with the command

               A>linkmt calc,trancend,fpreals,paslib/s

           o If you want to test the 8087 libraries, link the
             compiled program using the command

               A>linkmt calc,87trans,87reals,paslib/s

           o Run the program with the command

               A>calc


        Once invoked, CALC prompts you to input two  operands
        and the kind of operator you want to test.  CALC then
        performs the required calculations, and  returns  for
        more  input.  You can end the program by pressing the
        ESCAPE key.























                                1-21



















        Pascal/MT+86                            Release Notes


        We encourage you to write us if you  have  any  other
        problems  with  this  product.  We would also like to
        know the things you like about the  product  and  any
        ideas you have for improving it.  If we know what you
        want, it will help us meet your needs in the  future.






































                                1-22


