PEEK y POKÉ

PEEKy POKE, en informática , son dos instrucciones utilizadas en el lenguaje de programación BASIC para acceder al contenido de una determinada dirección de memoria .

PEEKes una función que devuelve el valor almacenado en la celda de memoria especificada mientras POKEque es un comando que se utiliza para realizar la operación de escritura correspondiente.

Características

Las direcciones de las ubicaciones de las instrucciones POKEpueden PEEKreferirse tanto a celdas de memoria normales como a registros de hardware mapeados en la memoria de la CPU, pero también a coprocesadores adicionales , como chips de sonido o chips de video . Un ejemplo de código que controla un chip a través de instrucciones POKE es el siguiente, que modifica uno de los registros MOS VIC-II de Commodore 64 para configurar el borde de la pantalla en negro:

POKE 53280,0 _ _

Cada computadora doméstica anterior a las PC compatibles con IBM tenía su propio patrón de uso de la memoria: los programas de usuario, sus datos, la memoria de video, el espacio para el código del sistema operativo se dirigían a diferentes áreas de la memoria. . Por esta razón, las instrucciones PEEKy POKEno eran portátiles de un modelo a otro y los programas solo funcionaban en los sistemas para los que fueron escritos.

Sintaxis

Las instrucciones se pueden llamar en modo directo, introduciéndolas en el indicador del intérprete , o en modo indirecto, es decir, dentro de un programa . En ambos casos su sintaxis es la siguiente:

variable_destino = PEEK( dirección_memoria ) [1] POKE dirección_memoria , valor [2]

Los parámetros memory_address y value también pueden ser expresiones complejas siempre que su resultado sea una dirección de memoria o un valor válido. Una dirección válida es una dirección que se encuentra dentro del espacio de direcciones de la CPU de la computadora , es decir, el conjunto de direcciones que la CPU puede manejar directamente. Un valor válido es un valor que se puede almacenar en una celda de memoria, que es la unidad de almacenamiento más pequeña permitida por el tipo de memoria utilizada.

Por ejemplo, una computadora doméstica típica de principios de la década de 1980 generalmente se basaba en CPU de 8 bits como Zilog Z80 o MOS 6502 . Estos procesadores generalmente tenían un espacio de direcciones de 16 bits con el que podían direccionar un máximo de 64 Kilobytes de memoria, ya sea RAM o ROM : la unidad de estas memorias es el byte . En este caso el rango de valores permitido para memory_address va de 0 a 65535 (2 16 -1) mientras que value puede ir de 0 a 255 (2 8 -1).

Uso en videojuegos

En las computadoras domésticas de 8 bits, la forma más común de iniciar videojuegos era cargarlos en la memoria desde un casete y luego ejecutarlos. Por ello, se generalizó la práctica de modificar el código del juego antes de su lanzamiento con el fin de obtener ventajas como vidas infinitas, invisibilidad, inmunidad y más. Estos trucos se conseguían generalmente recurriendo a la modificación de determinadas ubicaciones de memoria del código del juego mediante el uso del comando POKE. También había cartuchos para el Commodore 64, el ZX Spectrum y el Amstrad CPC que permitían "congelar" el juego en ejecución, modificar el código y reanudar su ejecución.

Por ejemplo, en Knight Lore para ZX Spectrum , la inmunidad se puede obtener ingresando el siguiente comando:

POKE 47196 , 201

En este caso el valor 201 corresponde a la instrucción en lenguaje máquina RET , lo que hace que el jugador salga de la parte de código que controla las colisiones de forma anticipada, evitando así que el jugador muera. Varias revistas de la industria publicaron listas de estos POKEpara juegos, generalmente obtenidas mediante ingeniería inversa del código del título para identificar ubicaciones de memoria utilizadas para almacenar datos como el número de vidas o la detección de colisiones.

El uso de trampas basadas en POKEse ha vuelto progresivamente más y más difícil debido a la aparición de sistemas de protección contra copia o sistemas para evitar cambios de código. Los juegos para computadoras modernas hacen que esto sea casi imposible ya que los sistemas operativos implementan esquemas de protección de memoria virtual para evitar que programas externos accedan al área de memoria asignada a una aplicación en particular.

Notas

  1. ^ Sintaxis de la función PEEK , en qbasicnews.com . Consultado el 20 de noviembre de 2010 (archivado desde el original el 16 de mayo de 2011) .
  2. ^ Sintaxis del comando POKE , en qbasicnews.com . Consultado el 20 de noviembre de 2010 (archivado desde el original el 16 de mayo de 2011) .

Bibliografía

Artículos relacionados