En enero de 2020, comencé los preparativos para participar en la fiesta de Forever 2020. El tema compuesto fue anunciado por ROBO, así que decidí escribir un trabajo simple para el Atari 65XE. Cuando la introducción estuvo lista, decidí agregar un efecto de mapa de bits. Por desgracia, debido a la cancelación de Forever, se publicó parte de la introducción.El procesador Atari es MOS 6502 - registros de 8 bits y la falta de puertos para acceder al hardware. Otro componente de la computadora es ANTIC - implementa imágenes - colores, modos de video, símbolos. Hay celdas de hardware para acceder a ANTIC, su propósito se describe en Mapping The AtariNo enumeraré todas las direcciones de las celdas y el destino, describiré la idea del efecto en sí. Cabe señalar que, por conveniencia, las direcciones en Mapping tienen mnemotécnicos, son muy convenientes de recordar.¿Qué es una pantalla? En modo texto, se puede ver un rectángulo con símbolos y un marco.Para mayor comodidad, puede desactivar el rectángulo escribiendo el valor de 0 a 559. Como puede ver, hay espacio para un efecto ráster.Ahora necesita sincronizar el dibujo con la salida a la pantalla. Hay dos métodos:RTCLOK equ $0012
lda RTCLOK+2
waits
cmp RTCLOK+2
beq waits
Aquí RTCLOCK es el reloj en tiempo real que comienza cuando la computadora está encendida. Primero aumenta $ 14, luego $ 13 y $ 12. La idea de sincronización es simple: compare el valor de la celda $ 14 con el actual. Si el valor anterior no coincide, se ha producido una interrupción.Pero, en mi opinión, el método no se ajusta, por lo que es más conveniente usar un contador vertical de líneas VCOUNT ($ D40B) generado en el marco. Esperando el inicio del marco será:ws
lda $D40B ; VCOUNT
bne ws
La idea en sí es escribir valores de color en el registro COLBK ($ D01A), el color del marco.El valor escrito en el registro se divide en dos partes: tipo de color y brillo, calculado como tipo * 16 + brillo. Descrito en detalle aquí y aquí .Pero cuando se establece el color para cada línea, se necesita sincronización: escribir cualquier valor en WSYNC (D40A) detendrá el procesador y hará que espere a que comience la siguiente línea. Se usa el mismo método en las interrupciones de la Lista de visualización.El efecto en sí se divide en esperar el cuadro, generar valores de color y escribirlos en los registros descritos. Usé direcciones de página cero por simplicidad. Puede usar el ensamblador xasm para compilar. org $4000
start
wait_frame
ws
lda $D40B ; VCOUNT
bne ws
LDY #0
STY 559
zz
LDA $CD
CLC
ADC #5
STA $CD
BCC BR1
INC $CE
BR1
ADC $CB
STA $CB
BCC BR2
INC $CC
BR2
LDA $CC
STA $D40A ; WSYNC
STA $D01A
INY
BNE zz
BEQ wait_frame
run start
Resultó 54 bytes. 54-6 (encabezado del programa) = 48 bytes. Hay tiempo para experimentar, por ejemplo, jugar con el brillo del verde lda $CC
;*
and #$0f
ORA #$C0
;*
sta $D40A ; wsync
sta $D01A
Otras opciones para generar colores las dejaré a aquellos que estén interesados y probaré yo mismo. Crea, experimenta y crea. ¡Esto es muy emocionante!