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> : :::::::::::::::::::::::::::::::::::::::::