[comp.lang.pascal] Wish list fro TP6.0 / TPA

IN307%DHAFEU11.BITNET@cunyvm.cuny.edu ( Peter Sawatzki) (09/29/90)

>In article <2461adm.BRL.MIL> IN307%DHAFEU11.BITNEcunyvm.cuny.edu
> ( Peter Sawatzki) writes:
>   >>Assembly code within TP6.0 ?
>   >>Why don't you use the TPA package from Richard W. Prescott ?
>   >>It works for TP4.0, 5.0 and 5.5 and modifies the compiler at
>   >>runtime to know the keyword Assemble. Example:
>
> 1. Is it a commertial product or kind of PD/SW soft?
> 2. What kind of software, such as pre-processor or patch programme for
>    the compiler?
> 3. How can I get it, if it is PD/SW?
>                                       Thank you.

i got the TPA package from a local shareware dealer. I can email it
to everyone who is interested, but it would be a better idea if
someone would upload TPA to a server. I shall ask Keith Peterson to
put it on SIMTEL20.

Here is an excerpt from the README file in TPA.ZIP:

  TP&Asm           Integrated Compile-Time Assembler          Version 2.0
  TP&Asm-M   Memory Mode Assembly Language Development Tool   Version 2.0

                Copyright (c) 1989  Richard W. Prescott
                          All Rights Reserved

======= Built-In Assembly Language Support for Turbo Pascal Compilers =======

  This archive contains detailed reference information for TP&Asm
  and TP&Asm-M.  TP&Asm is a small assembler which runs Turbo 4.0/5.0
  (Integrated Environment or TPC) as a subprocess and permits you to
  place assembly language statements directly into your Pascal source
  code in blocks beginning with the keywords Assemble and/or
  Internal.

  TP&Asm provides the convenience and flexibility of having live
  assembly language in your programs which can be modified and
  immediately recompiled with no need to exit and reassemble.  You
  have complete freedom to place assembly language anywhere in your
  program, freely mix Pascal and assembly blocks, freely transfer
  between Pascal and assembly blocks via Call/Jump/Loop/Goto to any
  Pascal or assembly label, make direct Call, Jmp and Offset
  references to Pascal Proc/Functions, and make simplified Pascal
  style references to your Pascal and assembly variables and
  parameters.  Units compiled with TP&Asm can be distributed and
  Used independent of TP&Asm.

  The resulting ASSEMBLY Development Environment is identical to your
  PASCAL Development Environment.  It provides fast assembly with no
  additional disk access, and reports assembly syntax errors on the
  standard Turbo error line with cursor placed on the error.  It
  accepts the standard syntax of both MASM and A86, but also provides
  certain enhancements such as the placement of named data in the
  Code Segment.

  TP&Asm Version 2.0 is available from me for $49 plus $3 P&H.

  A shareable Memory Mode version called TP&Asm-M is also available.
  The distinction between TP&Asm and TP&Asm-M is that TP&Asm-M is
  intended for developing and debugging assembly language in the IDE,
  but not for final compilation.  You can compile to Memory (with the
  standard Turbo style interactive syntax error detection) and Trace
  your assembly code in the IDE with full capability to Watch,
  Evaluate, and Modify the CPU registers and Flags - then convert to
  INLINE or EXTERNAL after the code is fully developed.  TP&Asm-M's
  INTERNAL statement and its support of the standard syntax of MASM,
  A86, and INLINE.COM simplifies this conversion.

  The TP&Asm-M distribution disk can be ordered from me for $5 plus
  $3 P&H, with the $5 being credited toward subsequent registration
  of TP&Asm or TP&Asm-M.  It can also be downloaded from the IBMPRO
  or BPROGA forums on CompUServe.  Look for the archive TP-ASM.ZIP.
  Registration for TP&Asm-M is $19.

  To order TP&Asm, please send a check or money order payable to:

                        Richard W. Prescott
                        724 Sauk Ridge Trail
                        Madison, WI  53705

  Please include the following information:

   1. Full Version number of the Turbo Pascal compiler you now use.

   2. Your registration number for that compiler.

   3. If you obtained TP&Asm-M from a bulletin board:
      3a. Name, area code and phone number of that bulletin board
      3b. Full Version number of the TP&Asm-M version you have
      3c. Directory Date of the README file


  Your comments on the program and documentation are always
  appreciated.  If the program fails to function as described,
  or if the description of any feature is confusing, please let
  me know.  If there are features you would like to see, I am
  interested in that as well.
....]

-----------------------------------------------------------------------
File TPAREAD.NEW:

  TP&Asm           Integrated Compile-Time Assembler          Version 2.2

                Copyright (c) 1989  Richard W. Prescott
                          All Rights Reserved

======= Built-In Assembly Language Support for Turbo Pascal Compilers =======



New features added with TP&Asm Version 2.2:

  Full compile to Disk capability in the shareable version.  (I've
decided to stop annoying people).  This is a legitimate shareware
version.

  Full support for Turbo Pascal version 5.5 and Object Oriented
Programming, including:
  Use of Assemble and Internal statements in method definitions
   (Supports both ObjectNamMethodName and ObjectName.MethodName)
  Unqualified Indexed Reference to an Object's data within its methods
  Unindexed Reference to Static Object data using Pascal Record syntax
  Automatic support for assembly references to Self and VMT
   (Freely change object structure without rewriting any assembly code!)
  Direct calls to Static AND VIRTUAL methods using Unindexed MethodName
  Standard virtual calls to Virtual methods using Indexed MethodName
Please see the file TPA&OOP.PAS for examples of these features.

Version 2.2 also fixes the following bugs and restrictions:
  TP&Asm 2.0 failed to find the DOS PATH variable if there was
   another environment variable ending with 'PATH'.
  TP&Asm 2.0 did not permit ', '?', or '$' within Internal
   data symbols.
  TP&Asm 2.0 did not properly set the cursor position for syntax
   errors detected in an Asm statement.



New features added with TP&Asm Version 2.0:

  Added support for Assembly reference to Pascal UnitName and record
component qualifiers, permitting references like:
      Mov Al,UnitX.RecVar.NestedRec.ByteComponent

  Added support for references to String Function Result pointers in
Load Pointer (Les/Lds) instructions:
      Les Di,StringFunctionName
(As in prior versions, all other Function types can be put in by
name using a Mov instruction:
      Mov PtrFunction,Ax    ;put in offset part
      Mov PtrFunction+2,Dx  ;put in segment part

  Fixed an undocumented restriction (i.e., a bug) that prevented
use of the Assemble/Internal statements when compiling in the {$D-}
state.



New features added with TP&Asm Version 2 beta:

  Added the ability to trace (F7 Trace into, F4 Go to cursor, etc)
assembly code in the turbo integrated debugger with the capability
to Watch, Evaluate, and Modify the state of all CPU registers and
Flags during the Trace.

  Added support for Line Number detail for all assembly sections
(Except Inline/Assembly DIRECTIVES) in MAP files produced with any
Version 4 and 5 compilers.  Permits source level debugging in any
MAP-file compatible debugger.

  Added the capability to specify any valid Pascal Label within the
current block as the target of an Assembly Call, Jmp, Loop, or
conditional jump.

  Added the capability to specify an assembly label which has been
declared in a standard Pascal Label statement as the target of a
Pascal Goto statement.

  Added the Keyword Assembly as a synonym for Assemble.
This is useful to avoid misleading constructions like:
      IF <Pascal Condition> THEN Assemble
which gives the false impression of conditional assembly.  True
conditional assembly is possible as described below.  Conditional
execution of an assembly block is more clearly indicated by:
      IF <Pascal Condition> THEN Assembly

  Added the capability to use Assembly blocks in either clause of a
Pascal conditional expression, eg:
      IF Compiler.Ver = $50 THEN Assembly
        < Assembly language statements >
      END
      ELSE Assembly
        < Assembly language statements >
      END;

  Added the keyword Asm for concisely specifying single line
assembly statements, eg:
      Asm Push PascalVar; {Save PascalVar on Stack}

  Added the Assembly Keyword Pas for inserting single or
multiple line Pascal statements within an assembly section, eg:
      Pas WRITELN('Compiled with Turbo Pascal Version ',
      Pas {$IFDEF VER40} '4.0' {$ELSE} '5.0' {$ENDIF} );
Permits true conditional assembly by placing a section of
assembly statements between Pas {$IFDEF ..} and Pas {$ENDIF}.

ed support for direct calls to Pascal Procedures and Functions
defined in any standard or user-defined program or Unit.

  Added support for automatic Jump-Sizing for all backward AND
FORWARD Jumps and Loops (Jmp, jZ, jAE, jCXZ, Loop, LoopNZ, etc).
3, 5, or 7 byte instruction sequences are automatically generated
if the target label is not within range of a 2 byte instruction.

This includes automatic shortening of unconditional jumps ...

    Jmp CloseBy    .. becomes ..    Jmp Short CloseBy ;2 bytes

... automatic 5 byte IF <Cond> Jmp for backward AND FORWARD
conditional jumps out of range ...

    jNZ FarAway    .. becomes ..        jZ >L0        ;2 bytes
                                        Jmp FarAway   ;3 bytes
                                    L0:

... and automatic 7 byte instruction sequences for backward AND
FORWARD jCXZ & Loop's out of range ...

    Loop FarAway   .. becomes ..        Loop >L0      ;2 bytes
                                        Jmp Short >L1 ;2 bytes
                                    L0: Jmp FarAway   ;3 bytes
                                    L1:

TP&Asm does NOT pad forward jumps with NOP instructions - it
will always build the smallest possible instruction.

  (The automatic Jump-Sizing feature is not enabled in Inline/Assembly
DIRECTIVES.  As described in the Turbo 4.0 and 5.0 manuals, Inline
Directives are intended for short sections of code which are unlikely
to exceed 127 bytes.  TP&Asm generates an error if a conditional jump
out of range is attempted in an Inline/Assembly Directive).


  Added the KeyWord CSDATA for allocating Global CSeg data which
can be used throughout the current Unit.  Alternately, the FIRST
procedure in a Unit or Program can allocate LOCAL CSeg data which
can be used throughout the procedure.

  Added support for the construct SEG Data to facilitate restoring
the Turbo Program Data Segment in a user written interrupt procedure:
      Mov Ax,SEG Data
      Mov Ds,Ax

 :::::::::::::::::::::::::::::::::::::::::
: Peter Sawatzki  <IN307DHAFEU11.BITNET> :
 :::::::::::::::::::::::::::::::::::::::::