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 AtariSaya 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.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. 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!