HispaMSX

Re: [hispamsx] ayuda con z88dk & assembler

2005-04-11 16:22:07
la cuestion es que quiero cambiar el valor de una direccion de memoria
y no hay manera.

Nunca he usado ese compilador pero yo diría que no te hace falta
recurrir al ensamblador para leer y escribir en memoria. Prueba esto:

#define POKE(direccion,dato) *(unsigned char*)(direccion)=((unsigned char)dato)

O si quieres mantener el prototipo:

 void poke(unsigned int direccion,unsigned char valor)
 {
        *(unsigned char*)direccion=dato;
}

O mejor:

 void poke(unsigned char* direccion,unsigned char valor)
 {
        *direccion=dato;
}

Respecto a la lectura:

void peek(unsigned int direccion);

Esto no tiene mucho sentido. Si la función es de tipo void, ¿dónde
devuelves el valor leído? :-)

Propuesta:

#define PEEK(direccion) (unsigned char)*(unsigned char*)(direccion)

O bien:

unsigned char peek(unsigned int direccion)
{
        return *(unsigned char*)direccion;
}

O mejor:

unsigned char peek(unsigned char* direccion)
{
        return *direccion;
}

Espero que te sirva (y espero no haber metido la gamba con tanto puntero
y paréntesis).

--
Néstor Soriano
<konamiman(_en_)konamiman(_punto_)com>


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>