Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Leer direccion de memoria (https://www.clubdelphi.com/foros/showthread.php?t=3941)

brandolin 25-09-2003 14:46:26

Leer direccion de memoria
 
Hola a todos,

el problemilla es simple. Necesito leer el contenido de la direccion de memoria 201h o 513d y guardar su contenido en un archivo. Lo del archivo lo se pero no se como acceder a la direccion especificada.

¿Alguna sugerencia? Gracias desde ya

marcoszorrilla 25-09-2003 15:39:44

Puedes hacerlo con ensamblador, pero necesitas dos números:
Segmento y Desplazamiento.

Un Saludo.

delphi.com.ar 25-09-2003 15:58:10

Si se trata de una dirección del mismo proceso, podrías hacer algo así:

Código:

const
  BUFFER_SIZE = 1000;
var
  PData: Pointer absolute $00400000;
begin
  with TFileStream.Create('C:\MEM.DAT', fmCreate) do
    try
      WriteBuffer(PData, BUFFER_SIZE);
    finally
      Free;
    end;
end;

Saludos!

brandolin 25-09-2003 16:04:50

En realidad lo que necesito es leer un datos que entra por el puerto del joystick y grabarlo

el puerto esta en las direcciones 201h y el largo debe ser de un integer o algo parecido.
estoy utilizando win2000

gracias

Viet 25-09-2003 16:10:24

Esto seguro que te sirve

http://www.elrinconcito.com/delphi/trucos/Comu2.htm

Saludos

delphi.com.ar 25-09-2003 16:13:42

¿Que te parece este código?

Código:

unit RX2_Util;

interface

uses Windows;

// set address of game port (default '$201')
procedure SetPortAddr(const addr: string);

// get current channel number and signal presence
procedure GetStatus(var chan: Integer; var signal: Boolean);

// push button for t milliseconds
procedure PushButton(t: Integer);

implementation

uses SysUtils;

var
  port_addr: Word;

function ReadPort: Byte;
begin
  asm
    mov dx,port_addr;
    in al,dx
    shr al,4
    mov result,al
  end;
end;

procedure SetPortAddr(const addr: string);
begin
  port_addr := StrToInt(addr);
end;

procedure GetStatus(var chan: Integer; var signal: Boolean);
var
  data: Byte;
const
  chan_no: array[0..7] of Integer = (0,1,2,3,0,4,0,5);
begin
  data := ReadPort;
  signal := data > 8;
  chan := chan_no[data mod 8];
end;

procedure PushButton(t: Integer);
var
  start: Integer;
begin
  start := GetTickCount;
  repeat
    asm
      mov dx,port_addr
      mov al,1
      out dx,al
    end;
  until (GetTickCount - start) >= t;
end;

initialization
  SetPortAddress('$201');

finalization
end.

Saludos!

delphi.com.ar 25-09-2003 16:17:17

Recién me doy cuenta que estas hablando de Win2000... dudo que esta plataforma te deje leer directamente el puerto, pero no tengo como probarlo, pues solamente tengo un Win98

Saludos!

brandolin 25-09-2003 16:20:56

y ahora? que hacemos?

delphi.com.ar 25-09-2003 16:29:22

Probalo, y comentanos si te funciona... caso contrario comentanos los errores!


La franja horaria es GMT +2. Ahora son las 16:25:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi