stringtranslate.com

MIRAR Y POKE

PEEK y POKE en la línea 100 de un programa Commodore Basic en una CBM 3016

En informática , PEEK y POKE son comandos utilizados en algunos lenguajes de programación de alto nivel para acceder al contenido de una celda de memoria específica a la que se hace referencia por su dirección de memoria . PEEK obtiene el byte ubicado en la dirección de memoria especificada. [1] POKE establece el byte de memoria en la dirección especificada. [2] Estos comandos se originaron con monitores de código de máquina como el monitor DECsystem-10 ; [3] estos comandos están particularmente asociados con el lenguaje de programación BASIC , aunque algunos otros lenguajes como Pascal y COMAL también tienen estos comandos. Estos comandos son comparables en sus funciones a los punteros en el lenguaje C y algunos otros lenguajes de programación.

Una de las primeras referencias a estos comandos en BASIC, si no la primera, se encuentra en Altair BASIC . [4] Los comandos PEEK y POKE fueron concebidos en los primeros sistemas de computación personal para servir a una variedad de propósitos, especialmente para modificar registros de hardware especiales asignados en memoria para controlar funciones particulares de la computadora, como los periféricos de entrada/salida. Alternativamente, los programadores pueden usar estos comandos para copiar software o incluso para eludir la intención de una pieza de software en particular (por ejemplo, manipular un programa de juego para permitir que el usuario haga trampa). Hoy en día es inusual controlar la memoria de una computadora a un nivel tan bajo utilizando un lenguaje de alto nivel como BASIC. Como tal, las nociones de comandos PEEK y POKE generalmente se consideran anticuadas.

Los términos peek y poke se utilizan a veces coloquialmente en programación informática para referirse al acceso a la memoria en general.

Sintaxis de declaración

La función PEEK y los comandos POKE generalmente se invocan de la siguiente manera, ya sea en modo directo (ingresado y ejecutado en el indicador BASIC ) o en modo indirecto (como parte de un programa ):

variable_entera = PEEK ( dirección )  Dirección POKE , valor  

Los parámetros de dirección y valor pueden contener expresiones , siempre que las expresiones evaluadas correspondan a direcciones o valores de memoria válidos, respectivamente. Una dirección válida en este contexto es una dirección dentro del espacio de direcciones de la computadora , mientras que un valor válido es (normalmente) un valor sin signo entre cero y el número máximo sin signo que puede contener la unidad mínima direccionable (celda de memoria).

Celdas de memoria y registros de hardware.

Las ubicaciones de direcciones en las que se hace POKE o PEEK pueden referirse a celdas de memoria ordinarias o a registros de hardware asignados en memoria de unidades de E/S o chips de soporte tales como chips de sonido y chips de gráficos de vídeo, o incluso a registros de la CPU asignados en memoria. en sí (lo que hace posibles implementaciones de software de potentes monitores de código de máquina y herramientas de depuración /simulación). Como ejemplo de un esquema de control de chip de soporte impulsado por POKE, el siguiente comando POKE está dirigido a un registro específico del chip gráfico VIC-II integrado del Commodore 64 , lo que hará que el borde de la pantalla se vuelva negro:

POKE 53280 , 0  

Un ejemplo similar de la familia Atari de 8 bits le dice al controlador de pantalla ANTIC que ponga todo el texto al revés:

POKE 755 , 4  

La diferencia entre máquinas y la importancia y utilidad de las ubicaciones de memoria cableadas significaron que los "mapas de memoria" de varias máquinas eran documentos importantes. Un ejemplo es Mapping the Atari , que comienza en la ubicación cero y mapea toda la memoria de 64 kB de los sistemas Atari de 8 bits ubicación por ubicación.

PEEK y POKE en otros BÁSICOS

North Star Computers , un proveedor de principios de la década de 1980, ofrecía su propio dialecto BASIC con su sistema operativo NSDOS . Preocupados por posibles problemas legales, cambiaron el nombre de los comandos EXAMy FILL. [ cita necesaria ] También había dialectos BÁSICOS que usaban las palabras reservadas MEMRy MEMWen su lugar.

BBC BASIC , utilizado en BBC Micro y otras máquinas de Acorn Computers , no incluía las palabras clave PEEK y POKE , pero usaba el símbolo de interrogación (?), conocido como consulta en BBC BASIC, para ambas operaciones, como función y comando. Por ejemplo:

> DIM W% 4 : Reserva REM de 4 bytes de memoria, apuntados por la variable entera W% > ? W% = 42 : constante de almacenamiento REM 42; equivalente de 'POKE W%, 42' > IMPRIMIR ? W% : REM imprime el byte señalado por W%; equivalente a 'IMPRIMIR PEEK(W%)' 42               

Los valores de 32 bits se pueden POKE y PEEK usando el símbolo de exclamación (!), conocido como pling , con el byte menos significativo primero ( little-endian ). Además, la dirección podría compensarse especificando query o pling después de la dirección y siguiéndola con el desplazamiento:

> ! W% = &12345678 : REM y comercial (&) especifica hexadecimal > PRINT ~ ? ¿W% , ~ W% ? 3 : REM tilde (~) se imprime en hexadecimal 78 12            

Las cadenas de texto se pueden mirar y pinchar de forma similar utilizando el signo de dólar ($). El final de la cadena está marcado con el carácter de retorno de carro (&0D en ASCII ); cuando se vuelve a leer, este carácter de terminación no se devuelve. Las compensaciones no se pueden utilizar con el signo del dólar.

> DIM S% 20 : reserva REM de 20 bytes de memoria apuntados por S% > $ S% = "MINCE PIES" : cadena de almacenamiento REM 'MINCE PIES', terminada por &0D > PRINT $( S% + 6 ) : recuperación REM cadena, excluyendo el terminador &0D y comenzando en S% + 6 bytes PI ES                

Versiones de 16 y 32 bits

Como la mayoría de las primeras computadoras domésticas usaban procesadores de 8 bits, los valores PEEK o POKE están entre 0 y 255. Configurar o leer un valor de 16 bits en dichas máquinas requiere dos comandos, como leer un entero de 16 bits en la dirección A, y seguido de para almacenar un entero V de 16 bits en la dirección A.PEEK(A)+256*PEEK(A+1)POKE A,VPOKE A+1,V/256

Algunos BASIC, incluso en máquinas de 8 bits, tienen comandos para leer y escribir valores de 16 bits desde la memoria. BASIC XL para la familia Atari de 8 bits utiliza un prefijo "D" (de "doble"): DPEEKy DPOKE. El "Kleincomputer" de Alemania del Este los llama KC85/1 y KC87 DEEKy DOKE. [5]

El Sinclair QL tiene PEEK_Wy POKE_Wpara valores de 16 bits y PEEK_Ly POKE_Lpara valores de 32 bits. ST BASIC para Atari ST usa los nombres tradicionales pero permite definir segmentos de memoria de 8/16/32 bits y direcciones que determinan el tamaño.

Se ha desarrollado una utilidad de línea de comandos de Linux peekpoke [6] principalmente para computadoras de placa única basadas en ARM. peekpokees una herramienta de línea de comandos de Linux para leer y escribir en la memoria del sistema. Su uso principal es comunicarse con periféricos de hardware desde el área de usuario: leer o manipular estados y volcar registros.

POKE como trampas

En el contexto de los juegos para muchas computadoras de 8 bits, los usuarios podían cargar juegos en la memoria y, antes de ejecutarlos, modificar direcciones de memoria específicas para hacer trampa , obteniendo un número ilimitado de vidas, inmunidad, invisibilidad, etc. usando declaraciones POKE. Commodore 64 , ZX Spectrum y Amstrad CPC también permitieron a los jugadores con uno de los cartuchos relevantes (como Action Replay o Multiface ) congelar el programa en ejecución, ingresar POKE y reanudar.

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

POKE 47196 , 201 

En este caso, el valor 201 corresponde a una instrucción RET , de modo que el juego regresa de una subrutina antes de activar la detección de colisión .

Revistas como Your Sinclair publicaron listas de dichos POKE para juegos. Dichos códigos generalmente se identificaban mediante ingeniería inversa del código de máquina para localizar la dirección de memoria que contenía el valor deseado relacionado, por ejemplo, con el número de vidas, la detección de colisiones, etc.

Usar un truco 'POKE' es más difícil en los juegos modernos, ya que muchos incluyen medidas anti-trampas o de protección contra copias que inhiben la modificación del espacio de memoria del juego. Los sistemas operativos modernos imponen esquemas de protección de la memoria virtual para negar el acceso de programas externos a la memoria no compartida (por ejemplo, tablas de páginas separadas para cada aplicación, por lo tanto, espacios de memoria inaccesibles).

Uso genérico de POKE

"POKE" se utiliza a veces para referirse a cualquier manipulación directa del contenido de la memoria, en lugar de simplemente a través de BASIC, particularmente entre las personas que aprendieron informática en las microcomputadoras de 8 bits de finales de los años 1970 y principios de los 1980. BASIC era a menudo el único lenguaje disponible en esas máquinas (en las computadoras domésticas , generalmente presentes en ROM ) y, por lo tanto, la forma obvia y más simple de programar en lenguaje de máquina era usar BASIC para INSERTAR los valores del código de operación en la memoria. Hacer gran parte de la codificación de bajo nivel como esta generalmente se debía a la falta de acceso a un ensamblador .

Un ejemplo del uso genérico de POKE y PEEK se encuentra en Visual Basic para Windows , donde se puede lograr DDE con la palabra clave LinkPoke .

Ver también

Referencias

  1. ^ "VISTAZO". Asesor de Microsoft QuickBasic 4.5 . Microsoft. 1990. Archivado desde el original el 16 de mayo de 2011 . Consultado el 28 de diciembre de 2007 .
  2. ^ "PEJAR". Asesor de Microsoft QuickBasic 4.5 . Microsoft. 1990. Archivado desde el original el 16 de mayo de 2011 . Consultado el 28 de diciembre de 2007 .
  3. ^ "¿Cuál es la referencia más antigua a PEEK, POKE y USR?". Archivado desde el original el 14 de agosto de 2020 . Consultado el 15 de agosto de 2020 .
  4. ^ Altair 8800 BASIC Reference_Manual 1975, página 68 del PDF
  5. ^ Kühnel, Claus (1987) [1986]. "4. Kleincomputer - Eigenschaften und Möglichkeiten" [4. Microcomputadora - Propiedades y posibilidades]. En Erlekampf, Rainer; Mönk, Hans-Joachim (eds.). Mikroelektronik in der Amateurpraxis [ Microelectrónica para el aficionado práctico ] (en alemán). vol. 3 (1 ed.). Berlín: Militärverlag der Deutschen Demokratischen Republik  [de] , Leipzig. págs.218, 232, 236. ISBN 3-327-00357-2. 7469332.
  6. ^ vistazo https://github.com/apritzel/peekpoke