Aquí es cuando demuestro mi ignorancia máxima.
¿Alguien me pega aquí una función para Z88DK en ensamblador para hacer un triste "POKE"?
![Embarrassed :oops:](./images/smilies/icon_redface.gif)
Código: Seleccionar todo
void poke (void)
{
#asm
ld a,255
ld (16384),a
ret
#endasm
}
Código: Seleccionar todo
int *puntero
void main (void)
{
puntero=16384;
*puntero=256;
}
Código: Seleccionar todo
poke (int *puntero, unsigned char valor)
{
*puntero=valor;
}
Aquí has definido puntero como un puntero a entero (int), que son 16 bits. La instrucción *puntero=256 mete un valor de 16 bits, y habitualmente los POKEs se entienden que son de 8 bits. Por ejemplo, este programa rellena la pantalla con un patrón de barras verticales:Radastan escribió:Efectivamente, eso es, pero digo yo que querrás usar ese "poke" de forma genérica. Si sólo vas a escribir un valor lo suyo es emplear punteros
Código: Seleccionar todo
int *puntero void main (void) { puntero=16384; *puntero=256; }
Código: Seleccionar todo
void main (void)
{
char *p; /* para hacer "POKEs" de 8 bits */
for (p=16384;p<=22527;p++)
*p = 0x0F;
}
Código: Seleccionar todo
10 FOR p=16384 TO 22527
20 POKE p,15
30 NEXT p
Todos los punteros en el Spectrum son de 16 bits. Si defines:Radastan escribió:Y McLeod, no seré yo el que te corrija porque corro el riesgo de equivocarme, pero el puntero... tiene que ser de 16 bits, no queda otra para direccionar 64K. Una cosa es el puntero y otra el contenido del puntero.
Código: Seleccionar todo
char *p1;
int *p2;
Código: Seleccionar todo
ld (hl),a
inc hl
ld (hl),0
Código: Seleccionar todo
void poke (unsigned char *puntero, unsigned char valor)
{
*puntero=valor;
}
Código: Seleccionar todo
ld (hl),a
Es fácil, mira esta rutina:Hark0 escribió:(De hecho estaba averiguando/estudiando) como pasarle valores al ASM.
Código: Seleccionar todo
// ___________________________________________
// Función para sacar un dato por un puerto
// ___________________________________________
void port_out (int port, int value)
{
#asm
ld hl,2
add hl,sp
ld a, (hl)
inc hl
inc hl
ld c, (hl)
inc hl
ld b, (hl)
out (c),a
#endasm
}