Efek Raster untuk Atari 65XE

gambar

Kembali pada bulan Januari 2020, saya mulai persiapan untuk berpartisipasi dalam demokrasi Forever 2020. Tema perusahaan diumumkan oleh ROBO, jadi saya memutuskan untuk menulis karya sederhana untuk Atari 65XE. Ketika intro siap, saya memutuskan untuk menambahkan efek bitmap. Sayangnya, karena pembatalan Forever, bagian dari intro diterbitkan.

Prosesor Atari adalah MOS 6502 - register 8-bit dan kurangnya port untuk mengakses perangkat keras. Komponen lain dari komputer adalah ANTIC - ini mengimplementasikan gambar - warna, mode video, simbol. Ada sel-sel perangkat keras untuk mengakses ANTIC, tujuannya dijelaskan dalam Mapping The Atari

Saya tidak akan mencantumkan semua alamat sel dan tujuan, saya akan menjelaskan gagasan tentang efek itu sendiri. Perlu dicatat bahwa untuk kenyamanan, alamat dalam Pemetaan memiliki mnemonik - sangat mudah diingat.

gambar

Apa itu layar? Dalam mode teks, persegi panjang dengan simbol dan bingkai terlihat.

Untuk kenyamanan, Anda bisa mematikan persegi panjang dengan menuliskan nilai 0 hingga 559. Seperti yang Anda lihat, ada ruang untuk efek raster.

Sekarang Anda perlu menyinkronkan gambar dengan output ke layar. Ada dua metode:

RTCLOK      equ $0012
      lda RTCLOK+2
waits
      cmp RTCLOK+2
       beq waits

Di sini RTCLOCK adalah jam waktu-nyata yang dimulai ketika komputer dihidupkan. Pertama meningkat $ 14, lalu $ 13 dan $ 12. Gagasan sinkronisasi sederhana: bandingkan nilai sel $ 14 dengan yang sekarang. Jika nilai sebelumnya tidak cocok, interupsi telah terjadi.

Namun menurut saya, metode ini tidak cocok, jadi lebih mudah menggunakan VCOUNT ($ D40B) - penghitung garis vertikal yang dibuat pada frame. Menunggu dimulainya frame akan:

ws
	lda $D40B ; VCOUNT
	bne ws

Idenya sendiri adalah untuk menulis nilai warna ke register COLBK ($ D01A) - warna bingkai.
Nilai yang ditulis untuk register dibagi menjadi dua bagian: tipe warna dan kecerahan, dihitung sebagai tipe * 16 + kecerahan. Dijelaskan secara rinci di sini dan di sini .

Tetapi ketika mengatur warna untuk setiap baris, sinkronisasi diperlukan - menulis nilai apa pun ke WSYNC (D40A) akan menghentikan prosesor dan membuatnya menunggu baris berikutnya untuk memulai. Metode yang sama digunakan dalam interupsi Daftar Display.

Efeknya sendiri dibagi menjadi menunggu frame, menghasilkan nilai warna dan menuliskannya ke register yang dijelaskan. Saya menggunakan nol alamat halaman untuk kesederhanaan. Anda dapat menggunakan assembler xasm untuk mengkompilasi.

gambar


	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

Ternyata 54 byte. 54-6 (header program) = 48 byte. Ada waktu untuk bereksperimen, misalnya, bermain dengan kecerahan warna hijau

	lda $CC
;*  
	and #$0f
	ORA #$C0
;*  
	sta $D40A ; wsync
	sta $D01A

Pilihan lain untuk menghasilkan warna akan saya serahkan kepada mereka yang tertarik dan mencoba sendiri. Buat, coba dan buat. Ini sangat menyenangkan!

All Articles