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>