PDA

Ver la Versión Completa : Leer direccion de memoria


brandolin
25-09-2003, 14:46:26
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í:

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?

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!