[Back to MEMORY SWAG index]  [Back to Main SWAG index]  [Original]

{
> No, actually there is no way to get 65536 bytes all in one go in real
> mode. Maybe you can do that in DPMI, maybe not.


 Sure you can.

 {$M $4000, 0, $7FFF}   { Reduce the TP heap }
 { This is required!!! }

 Function Alloc(NumPara : Word) : Word; Assembler;
 { Allocates the specified number of paragraphs (16 byte segments) }
 { in: NumPara - then number of paragraphs to allocate             }
 { out: $ffff - Couldn't allocate memory                           }
 {      other - segment pointer to memory (offset always 0)        }

 Asm
   Mov  ah,48h
   Mov  bx,NumPara
   Inc  bx
   Int  21h
   Jnc  @AllocOK
   Mov  ax,$FFFF
  @AllocOK:
 End;

 Procedure DeAlloc(Segment : Word); Assembler;
 { De-Allocates the memory at segment SEGMENT }

 Asm
   Mov  ah,49h
   Mov  es,Segment
   Int  21h
 End;

{
 Now you can allocate as much memory as your heart desires. You can typecast
 it by doint this:

   DataPointer := Ptr(Alloc(Sizeof(DataStructure) Div 16, 0);

 Pascal won't recognize anything over 64K (or allow it in type defs), but it
 can be done, and can be quite useful sometimes, especially for graphic file
 viewers where the file is usally over 64K, but it is nice to have it
 contigious in memory. In order to make this really useful, you should under-
 stand segments and offsets, but cause Pascal automatically strips the high
 bits off a longint index, you can't directly access the information.
}

[Back to MEMORY SWAG index]  [Back to Main SWAG index]  [Original]