Contributor: WILBERT VAN LEIJEN       

{
WILBERT VAN LEIJEN

> I want to pass its address to an external .obj procedure so I can set
> DS:SI to it... how do I do this?  I know how to do this sort of think if I
> use the tp60 built in asmm thingy, and I know that I can pass values using
> arg like

You cannot export data from an .OBJ file to a Pascal program.  The linker
cannot handle with public identifiers other than in a segment of class CODE,
alas.

Store the data in a File of Byte (DORK.BIN), convert it with BINOBJ to DORK.OBJ
(suggested identifier: Procedure DorkData), link it to your program.
}

Procedure DorkData; External;
{$L DORK.OBJ }

Type
  TDork = Array[0..255] of Byte;
  PDork = ^TDork;

Var
  Dork : PDork;
  i    : Integer;

Begin
  Dork := @DorkData;
  For i := Low(TDork) to High(TDork) Do
    Write(Dork^[i] : 4);
end.

{ If you want to use assembler to access DorkData: }

ASM
  CLD
  PUSH   DS
  PUSH   CS            { Using "LDS SI, DorkData" will not work! }
  POP    DS
  LEA    SI, DorkData            { DS:SI points to DorkData }
  MOV    CX, Type(TDork)         { = 256 }
 @1:     LODSB                { TDork(DorkData[256-CX]) is now in AL }
  { other code }
  LOOP   @1
  POP    DS
end;