Esta sección inaugura una colección de artículos para aprender lo básico de Assembler en 6502, específicamente en Atari de 8 bits (800XL, 65XE, 130XE). Trataré de ser lo menos técnico posible, explicando a través de ejemplos prácticos.
Una forma simple de iniciarse con la programación en Assembler para Atari es usar BASIC como lenguaje principal y Assembler como «extensión» para implementar cosas específicas. Esto tiene la ventaja de que no necesitas software adicional, puedes cargar o grabar el código como si fuera cualquier programa BASIC y de rebote, se aprende el funcionamiento del proceso de compilación de un programa en Assembler (si es que lo podemos llamar así).
Más adelante, con más experiencia, se puede echar mano a un editor de código Assembler de verdad, en donde no hay nada de BASIC. A medida que crecen los programas ES necesario, pero para comenzar puede ser una dificultad innecesaria.
Conceptos elementales
El código que se ejecuta en el hardware es el que llamamos código de máquina, a veces también se le llama código objeto aunque no tiene ninguna relación con programación orientada al objeto, es sólo un alcance de nombre. El código de máquina será entonces una secuencia de bytes que el procesador va leyendo y ejecutando uno por uno. Es el nivel de código más cercano a la máquina que podemos llegar en un procesador como el 6502.
Por otro lado, el código fuente y entendible por humanos es lo que se llama el codigo Assembly, y la herramienta para convertir este código fuente en código de máquina se llama Assembler. Por simplicidad, uno le dice Assembler a todo el concepto de código cercano a la máquina.
Por ejemplo esta sería la instrucción en Assembly (código fuente) para que el registro A del procesador contenga el valor 29, o lo que en un lenguaje de alto nivel sería una simple asignación A = 29
LDA #29
Y este sería el código de máquina (secuencia de bytes) generado por un Assembler a partir de ese código fuente:
169, 29
Intuitivamente podemos decir que el 169 es el código que representa a LDA #, y 29 es el parámetro que estamos pasando a la instrucción. La CPU, al leer la secuencia 169, 29 entenderá inmediatamente que se trata de A = 29
Importancia del chipset
El código de máquina por si solo no es muy atractivo, sólo sirve para sumar, restar, aplicar operaciones lógicas booleanas como AND/OR, comparar un número con otro, etc. Todo esto está muy lejos de tocar música, dibujar en pantalla o la pregunta clásica «cómo imprimo un texto en Assembler». Lo que sucede en realidad es que un procesador como el 6502 no vive solo en este mundo, sino que es acompañado con otros chips que se encargan de comunicarlo con nosotros, y es así como se tiene chips de sonido, chips de video, chips de entrada y salida (ej. joysticks), etc. Para sacar provecho a la programación en código de máquina también debemos aprender el funcionamiento de estos chips adicionales y cómo comunicarnos con ellos.
En el caso del ATARI, contamos con estos chips de apoyo:
- ANTIC : Es el chip que se encarga de generar los modos de video, generar los caracteres, etc.
- GTIA : Es el chip que genera la imagen final de video. También se encarga de agregar los PLAYER / MISSILE, una especie de Sprites, sobre lo que le envía el ANTIC
- POKEY : Chip de sonido y de entrada/salida. Por aquí es por donde se comunica el teclado, joysticks, paddle y todos los periféricos que van conectados al puerto serial SIO: casseteras, disketteras, impresoras, etc.
!Gran guía! A menudo los informáticos le hacen el quite al lenguaje ensamblador. Sin embargo, aquellos que osan hacerle frente reciben una gran satisfacción.
PD: Llegué a este blog por YouTube!
PD2: TVnauta era el mejor programa! lo veía cuando iba en sexto básico (ahora pasé a cuarto año de universidad).
De 6to básico a 4to año en la U! Ohh cuantos años han pasado!!! Felicitaciones Matías