zxuno-git/examples/pixel_rojo.asm

84 lines
3.7 KiB
NASM

;;===================================================================================
;; EJEMPLO
;;
;; Pintar un pixel de color rojo en la pantalla del Amstrad CPC
;; modificando directamente la memoria de vídeo.
;;
;; * Código para cargar y ejecutar en WinAPE
;; * Explicación del ejemplo y retos al final del código
;;===================================================================================
org &4000 ;; Direccion de memoria &4000 (16384)
;; Todo el codigo se pondra a partir de ahi
ld a, %10001000 ;; Cargar %10001000 en el registro A
;; %10001000 en binario, &88 en hexadecimal, 132 en decimal
;; Los dos bits del primer pixel a 1, el resto a 0. Eso
;; pone el valor binario %11 (3 en decimal) en el primer pixel.
;; Por tanto, el primer pixel tendra el color 3 (Rojo)
ld (&C000), a ;; Poner contenido del registro A en la direccion
;; &C000 de memoria (decimal 49152, binario %1100000000000000)
ret ;; Devolver el control a quien nos haya llamado
;;===================================================================================
;;
;; DIRECTIVAS USADAS
;;
;; - org :DIRECCIÓN: >> Establece el ORiGen: posición de memoria donde
;; el código de este programa se empezará a escribir
;;
;; INSTRUCCIONES USADAS
;;
;; - LD A, :NÚMERO: >> Introduce un número en el registro A (Acumulador)
;; del procesador.
;;
;; - LD (:DIRECCIÓN:), A >> Guarda el valor del registro A en la :DIRECCIÓN: de
;; memoria indicada.
;;
;; - RET >> Devolver el control al código que nos llamó
;; inicialmente
;;
;; RETOS
;;
;; 1. Pon el color del primer píxel de pantalla en amarillo y azul
;; 2. Pinta 2 píxeles, el primero y el cuarto, de distinto color
;; 3. Pinta los 4 primeros píxeles de pantalla, uno de cada color
;;
;; USO
;; * Ejecuta el emulador WinAPE (http://www.winape.net)
;; * Pulsa F3 para abrir el editor de código fuente
;; * Crea un nuevo fichero con File/New y copia el código de este ejemplo
;; - (Alternativamente, abre este fichero con File/Open)
;; * Pulsa F9 para ensamblar el código en la dirección &4000 de memoria
;; * Cierra el editor y teclea CALL &4000 en el Amstrad CPC para ejecutar
;;
;; EXPLICACIÓN
;;
;; Para pintar un píxel en un Amstrad CPC hay que modificar la zona de memoria
;; donde se guarda el color que ese píxel tiene. En MODO 1 de pantalla (el modo
;; por defecto del Amstrad CPC), la pantalla tiene 320x200 píxeles y cada píxel
;; se almacena en memoria como 2 bits.
;;
;; La zona de memoria donde se almacenan los píxeles es la que va de la
;; dirección &C000 en hexadecimal (49152 en decimal) hasta &FFFF (65535). Cada
;; posición de memoria tiene 8 bits (1 byte) y almacena los colores para 4 píxeles.
;; Los 8 bits tienen este aspecto:
;;
;; 8 bits, 1 Byte: [ a b c d A B C D ] Píxel 0: %Aa Pixel 1: %Bb
;; Píxel 2: %Cc Píxel 3: %Dd
;;
;; Un ejemplo para entender el diagrama de arriba:
;;
;; La posición &C000 de memoria contiene el byte [01011011]. Así pues,
;; los valores de los 4 primeros píxeles son
;; * Píxel 0 = [0___1___] = %10 en binario (Color 2)
;; * Píxel 1 = [_1___0__] = %01 en binario (Color 1)
;; * Píxel 2 = [__0___1_] = %10 en binario (Color 2)
;; * Píxel 3 = [___1___1] = %11 en binario (Color 3)
;; Por tanto, los primeros 4 píxeles de pantalla tienen colores 2, 1, 2 y 3
;;
;;===================================================================================