[fpc-pascal] Pointers

Daniel Franzini daniel.franzini at gmail.com
Thu Jul 28 01:55:34 CEST 2005


Hi everyone

I'm just trying to compile and execute a simple example from a
graphics programming tutorial under FPC. Here is the code

<code>

PROGRAM PixelExample;
{$MODE TP}  <----i used tp mode because i couldn't figure out how to
do inline asm in fpc mode

USES CRT;   { Include the "KeyPressed" function }
TYPE
  ScreenBufferType = ARRAY[0..63999] OF BYTE;
  ScreenBufferPtr = ^ScreenBufferType;

VAR
  Screen : ScreenBufferPtr; 

PROCEDURE InitGraph; Assembler;
Asm
  mov ax, 0013h    { Function 0, mode 13h }
  int 10h
end;


PROCEDURE CloseGraph; Assembler;
Asm
  mov AX, 0003h      { Function 0, Mode 3}
  int 10h
end;

PROCEDURE SetPixel(X, Y : INTEGER; Color : BYTE);
VAR
  Address : WORD;
BEGIN
  Address := Y*320+X;
  Screen^[Address] := Color;
END;

BEGIN
  InitGraph;
    Screen := MEM[$A000];   { Set up the screen buffer pointer }
<-----------here is the error
  WHILE NOT KeyPressed DO
    SetPixel(
       RANDOM(320),     { Random X (Range 0-319)     }
       RANDOM(200),     { Random Y (Range 0-199)     }
       RANDOM(256));    { Random Color (Range 0-255) } 
  CloseGraph;
END.

</code>

the fact is that i want Screen to point to an specific memory area
(0xA000) for writing to the display directly...but i can't figure out
how to make this

i've tried the following options

@Screen := $A000; -> mode13h.pas(34,5) Error: Can't assign values to an address
Screen := MEM[$A000]; -> mode13h.pas(34,15) Error: Identifier not found "MEM"

the last onde didn't worked and i think that's because of the win32
target...so i tried to change the target to go32v2 but there's no
system unit for this target

is there any way that i can compile and execute this simple and basic
example under win32, but without touching the video unit, just using
assembly??? (windows 2000, fpc 2.0.0)

-- 
Daniel

"(...) one learns how to write code by reading code. One doesn't learn how to
ride a bike by reading a book, either." (Theo de Raadt)




More information about the fpc-pascal mailing list