Efecto de trama para Atari 65XE

imagen

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 Atari

No 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.

imagen

¿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.

imagen


	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!

All Articles