¿Como se introducian los "pokes" en los ordenadores de 8 bits?

Soy de la epoca del spectrum/amstrad. Tuve y sigo teniendo el mismo Amstrad CPC 464, el monitor verde fosforito esta en el trastero y lo tengo conectado a una TV de tuvo con el modulo MP-1 (deberia comprarme un cable RGB)

De pequeño no paraba de leer en revistas que venian pokes para darte vidas infinitas, invencibilidad, etc pero nunca he sabido como intruducir los poke sne los juegos, no habia ni una guia de como hacerlo. Solo me funcionaban los "cargadores", programas larguisimos de codigo basic para darte lo mismo que un simple poke.
He estado mirando a dia de hoy y sigo sin encontrar en ninguna web que expliquen como poner pokes a los juegos.

¿Alguien podria resolverme esta duda? ¿Como narices poner un POKE en un juego de spectrum o de amstrad?

Gracias.
Pues no lo recuerdo muy bien, pero creo, en el spectrum te hablo,era después de la segunda carga, parabas la cinta y accedias a lo que había cargado, después lo introducias donde tocaba y continuabas cargando el juego. Pero vaya, te hablo de cabeza.
Un saludo!
Con un cacharro "pokeador"
En spectrum, como comenta @123-xion , se paraba la carga tras unos segundos y se metían los códigos.
Para poder hacerlo había que cargar los juegos con MERGE "" en vez de LOAD ""
En otros sistemas, ni idea.
Saludos.
@123-xion @odefruto

Lo de MERGE lo habia probado pero solo funciona en poquisimos juegos. Por lo visto, si estan protegidos (la gran mayoria) MERGE no funciona para pausar la carga (no recuerdo si la carga continuaba sin pausar o daba error)
Estaban las rutinas de carga y el pokeador con el que se introducían cambios en la memoria con el juego completamente cargado.
@stormlord

¿El "pokeador" que es, alguna especie de hardware extra? O es algun programa/software que se carga antes que el juego?
Sylvestre escribió:@stormlord

¿El "pokeador" que es, alguna especie de hardware extra? O es algun programa/software que se carga antes que el juego?

Hardware que se conecta en el puerto de expansión.
Dicoym está baneado por "troll"
En Spectrum parabas la carga, se accedía al Basic, escribías las líneas del pocket y continuabas la carga o ya lo tenias grabado en otra cinta, la ponías, volvías a cargar y cuando ya lo había leído, la sacabas y volvías a poner la cinta original para continuar la carga del juego.

También recuerdo el Código Maquina y cuando se equivocaban las revistas al escribirlo y te comías la cabeza averiguando en que línea estaba el error y al mes siguiente te decían que se habían equivocado ellos cawento
Yo tuve este cacharro, realmente el Multiface 1 (aunque el 3 puede que también, no lo recuerdo muy bien), pero el funcionamento es similar:

https://moebiuspuck.wordpress.com/2013/ ... tic-robot/
Yo cuando leía las revista Micromania (tenía un Amiga) y veía esos largos listados pensaba: pero que mierda es esto? ¿todo esto hay que escribirlo a mano? Debe de ser un trabajo de chinos. Si yo tuviera un micro de 8 bits y tuviera que meter eso a mano, y solo para obtener vidas infinitas y cosas así, pues que ahí se iba a quedar esperando.
Un procesador de 8 bits tiene una serie de instruciones y cada una de esas instruciones esta representada por una serie de opcodes en hexadecimal.

Digamos por ejemplo que deseas que el z80 reste un numero a una variable(digamos que el numero de vidas -1 vida despues de haber muerto.)

ld a,(&9000)->carga el contenido en el registro a del z80.
dec a->a=a-1
ld (&9000),a->guardas a-1 en la direccion 9000 de la ram.



si compliases eso y abrieras el contenido de la ram con un editor hexadecimal lo verias en formtato de opcodes:

3A 00 90 3D 32 00 90

Donde 3A->ld a y 00 90 la direcion de la memoria a cargar
3D=dec a-1
32 ->ld (memoria),a 00 90 direcion de ram.

Ahora imaginate que esa parte del programa esta guardada en la direccion de memoria pongamos &4000.

Asi que en &4000 tenemos 3A 00 90 3D 32 00 90 y las vidas estan en &9000 que pongamos sean 3(un 03 en hexadecimal).

Si haces un poke &9000,05 Pues ya has cambiado el numero de vidas de la variable a 5

Si haces un poke a &4003,3C(o su numero equivalente en decimales).

has cambiado el programa y ahora hace:

ld a,(&9000)->carga el contenido en el registro a del z80.
inc a->a=a+1
ld (&9000),a->guardas a+1 en la direccion 9000 de la ram.

Cada vez que te matasen ganarias una vida.

Mas o menos es eso.

Entonces para hacer esto primero tienes que tener el juego en ram y es por eso que existen esos listados tan largos,primero hacen malabarismos para cargarlos en ram(evitando proteciones y demas historias).Luego parchean el codigo y luego finalmente lo ejecutan.

Las revistas te decian eso poke (direcion de memoria) y valor a pokear.El resto a buscarse la vida, ya fuera con un cargador, ya fuera con un aparato externo.
@tic dificil de explicar/dar a entender mejor!!! ademas que en aquella epoca "picando" codigo y probando es como se aprendia!!!..., lo que me costó asimilar el "codigo maquina", con lo facil que era en basic..., cambiabas la variable de "lives=lives-1" a "lives=lives"... [jaja]

habia algunos juegos que simplemente tenian su cargador en "basic", luego cargaba la pantalla de presentacion (&c400 o &4000 era?, no recuerdo; me refiero al "amstrad") y luego (con su correspondiente "memory") cargaba el ".bin"; y antes del "call" que lo ejecutaba es donde se añadia el "poke".

...pero eso era solo con algunos juegos, con otros era mas complicado..., de ahi esos cargadores que menciona el "op" que seguramente tendria que teclear muchos "datas".
dinodini escribió:Yo cuando leía las revista Micromania (tenía un Amiga) y veía esos largos listados pensaba: pero que mierda es esto? ¿todo esto hay que escribirlo a mano? Debe de ser un trabajo de chinos. Si yo tuviera un micro de 8 bits y tuviera que meter eso a mano, y solo para obtener vidas infinitas y cosas así, pues que ahí se iba a quedar esperando.


Los pokes eran cortos.

Lo que tu dices son juegos completos en basic muy sencillos que las revistas ponían en texto.
Cuando era un crio siempre me llamó la atención por qué los juegos comerciales no listaban todo el código cargado si lo interrumpías mientras que mis propios programas si lo hacían.

@tic ¿aparato externo para meter pokes?.
@Señor Ventura

https://www.youtube.com/watch?v=quYqrCKf3uw

@Furthur

Tambien se hacian su buen negocio con el tema,algunas revistas publicaban los cargadores que la gentes les enviaban y encantadas de la vida XD. Que se rompan la cabeza los usuarios jaja.

Eso de las lineas data pues eran programas en ensamblador en formato opcode y la verdad era la forma mas facil de "pasarlo". No cecesitabas un desensamablador ni cosas raras el basic que ya venia con el ordenador y listo.Tedioso hasta el infinito y mas alla pero bueno :D.
Aparte de alabar la excelente explicación del compañero @tic , decir que si bien en Spectrum el poke se metía antes de la carga con un MERGE y casi todos los juegos lo pillaban, en Amstrad CPC los únicos juegos que cogían los pokes antes de la carga directamente eran los programados en BASIC (la mayoría de los juegos de AMSOFT, por ejemplo), mientras que con el resto de juegos comerciales tenías que tirar de cargadores sí o sí.

El hecho de que MIcromanía publicara los pokes de Amstrad CPC se debía a que así facilitaban las direcciones de memoria donde escribir el dato de vidas, tiempo, dinero... y ya tu te currabas el cargador si tenías los conocimientos adecuados. Evidentemente, en la época eso era arameo para mi :D Yo tiraba de cargadores (una tarde entera picando código, con esas infernales lineas DATA donde si te equivocabas en un mísero caracter, a tomar por culo todo el trabajo)

Ains qué tiempos...
@tic fíjate... en cuanto pueda me lo veo, muchas gracias!
Yo hace tiempo que no toco un Spectrum pero creo recordar que me creaba mis cargadores de pokes, es decir hacía un programita basic con los Pokes y luego al final ponía un LOAD"" para cargar el juego en cuestión.

Saludos.
18 respuestas