scott@hpausla.HP.COM (Scott Cameron) (04/26/89)
Does anyone have any details of the *DOS Extender* by Rational Systems Inc. which is used by Lotus 123 3.0 (such as price, development tools, features, or an address for Rational Systems)? I recall reading about this DOS Extender, but would like to know more about it. Thanks, Scott Cameron ___________________________________________________________________ Hewlett-Packard Australian Software Operation (ASO) //| ___ ___ PO Box 439, Ringwood, Victoria, 3134, AUSTRALIA. // | | | | phone: Inter.+613 8791999, FAX: Inter.+613 8702169 //--| !--| | | // | ___| |___| HP-UX Mail: scott@hpausla.hp.com // HPdesk: Scott Cameron/HPY200/UX ACSnet address: scott@hpausla.oz
rdas@suntops.UUCP (Rob Das) (05/04/89)
In article <2050002@hpausla.HP.COM> scott@hpausla.HP.COM (Scott Cameron) writes: > >Does anyone have any details of the *DOS Extender* by Rational Systems Inc. >which is used by Lotus 123 3.0 (such as price, development tools, features, >or an address for Rational Systems)? We are using this extensively for a major network product. I reccommend it highly for **most** applications that need lots of memory. In general, a program such as a spreadsheet or database that is more *applications* oriented is much easier to port to a protected mode / real mode environment. A TSR or heavy systems projects such as a network are much more difficult to port. DOS/16M (as it is called) provides several object files that are linked in with your Microsoft C code. It also provides a "post linker" called 'makepm' that creates a protected mode version of your executable. A very nice source debugger is included. It looks similar to a combination of codeview and perisope. It only works on protected mode portions of your code. I reccommend using both Rationals debugger and Periscope (for real mode portions). When you run your program, a minimum of 24K will still reside in real mode memory space (below 1meg.). This is their run-time kernel. Memory can be allocated in PM memory space or RM memory space. It can also be allocated as 'transparent'. This means that this memory can be both referenced by a PM selector that has the same value as the phyisical address. This allows both real mode and protected mode portions of the application to access the same memory without converting a real mode segment to a selector. An example: For time critical stuff (like a real-time interrupt handler) you MUST avoid the mode switching time on each interrupt. It can take anywhere between 90 and 1100 microseconds to do a round trip from RM to PM and back again. In this example you must implement a 'bi-modal' interrupt handler. You must implement a handler in PM and another handler in RM. Protected mode has it's own int vector table called the IDT. Dos 16/M supports calls to do this type of stuff. It can get quite hairy with real-time systems stuff as you can see. Here is a list of the functions that are provided in their interface: Interrupt Handling Functions ---------------------------- D16IntTransparent -- Installs BIOS interrupt handler in a PM vector D16Passdown -- Sets a protected-mode interrupt vector to pass down. (A passdown int, is one that is signaled in PM. The system will then switch to RM and resignal the interrupt). D16Passup -- Sets a real-mode interrupt vector to pass up. (The opposite of pass-down) D16pmGetVector -- Gets the selector and offset for a PM vector. D16pmInstall -- Installs a PM vector D16rmGetVector -- Gets the segment and offset for a RM interrupt vector D16rmInstall -- Installs a RM vector D16rmInterrupt -- Signals a real-mode interrupt and sets the registers Memory Management Functions --------------------------- D16AbsAddress -- Returns the absolute address of a PM pointer D16ExtAvail - Returns bytes of extended memory available for allocation D16GetAccess - Returns the access byte for a protected-mode pointer D16HugeAlloc -- Allocates a block of memory (very large) D16LowAvail -- Returns the number of bytes in largest block of DOS managed memory D16MemAlloc -- Allocates a data segment D16MemFree -- Frees a PM segment and cancels it's selector D16MemStrategy -- Sets startegy used for memory allocation (ForceLow, ForceHi, (HiFirst, LowFirst, Transparent) D16ProtectedPtr -- Creates a PM pointer from a RM pointer D16RealPtr -- Creates a RM pointer from a PM pointer D16SegAbsolute -- Creates a PM selector for a given address D16SegCancel -- Cancels a PM selector D16CSAlias -- Creates a selector of type CODE D16SegDataPtr -- Creates a data selector whose base is offset of a given ptr. D16SetProtect -- Specifies whether a segment is read-only or read/write D16SegRealloc -- Compares segments allocation with current memory strategy D16SegTransparent -- Returns a transparent pointer to a RM segment D16SetAccess -- Sets the type or access byte for a PM segment. Process Management Functions ---------------------------- D16MoveStack -- Switches the location of the cpu stack D16rmCall -- Switches to real mode, loads registers from given structure D16ToProtected -- Switches the cpu to protected mode D16ToReal -- Switches the cpu to real mode, translates segment registers _intflag -- Sets the cpu interrupts enabled flag _is_pm -- Returns nonzero if cpu is in protected mode I could go on..and on... but I am running out of energy. In general I am very happy with the product. The support from Rational Systems has been very personal and very thorough. Price: I think you would need to talk to them because they arrange different prices based on the volume of sales, source code stuff, and other things. I think $5000 + royalties sounds familier for a typical arangement. Please call them for a definitive price. If you have any other questions, or any specific questions on this stuff feel free to e-mail me @ rdas@tops.sun.com.
raymond@ptolemy.arc.nasa.gov (Eric A. Raymond) (05/04/89)
Of course if your code is less than 640K (or whatever size your LOW memory is), you can use a malloc which handles extended/expanded memory for a LOT LESS HASSLE and $'s. I beleive someone out there has some PD code. There is also HEAP EXTENDER which does all the above plus works with your disk too. -- Eric A. Raymond (raymond@ptolemy.arc.nasa.gov) G7 C7 G7 G#7 G7 G+13 C7 GM7 Am7 Bm7 Bd7 Am7 C7 Do13 G7 C7 G7 D+13: Elmore James
cjeffery@arizona.edu (Clinton Jeffery) (05/04/89)
From an article, by raymond@ptolemy.arc.nasa.gov (Eric A. Raymond): > Of course if your code is less than 640K (or whatever size your LOW > memory is), you can use a malloc which handles extended/expanded > memory for a LOT LESS HASSLE and $'s. This statement is a bit naive. There is no such thing as a "malloc that handles extended/expanded memory" under MSDOS proper. If you are willing to turn every memory ACCESS (read/write) into a procedure call you can implement swapping using extended/expanded memory (or disk) easily. If you only need another 64K and have no other application using extended memory you can directly address 64K of the extended memory space from DOS (and simply never do any swapping). If you have an AT you can get an (almost) real operating system which breaks the 640K barrier. If you write your application assuming file i/o instead of memory then you can run as big a cache as you can afford and most of the reads will be to memory. But no malloc can "handle" extended/expanded memory under normal MSDOS in the usual C fashion. Correct me if I am wrong. -- | Clint Jeffery, University of Arizona Department of Computer Science | cjeffery@arizona.edu -or- {noao allegra}!arizona!cjeffery --
barr@frog.UUCP (Chris Barr) (05/05/89)
In article <2050002@hpausla.HP.COM>, scott@hpausla.HP.COM (Scott Cameron) writes: > or an address for Rational Systems)? Rational Systems, 220 N. Main St., Natick, MAssacusetts tel: (508) 654-6194