En janvier 2020, j'ai commencĂ© les prĂ©paratifs pour participer Ă la dĂ©mopartie Forever 2020. Le thĂšme de la compo a Ă©tĂ© annoncĂ© par ROBO, j'ai donc dĂ©cidĂ© d'Ă©crire une Ćuvre simple pour l'Atari 65XE. Lorsque l'intro Ă©tait prĂȘte, j'ai dĂ©cidĂ© d'ajouter un effet bitmap. HĂ©las, en raison de l'annulation de Forever, une partie de l'intro a Ă©tĂ© publiĂ©e.Le processeur Atari est MOS 6502 - registres 8 bits et manque de ports pour accĂ©der au matĂ©riel. Un autre composant de l'ordinateur est ANTIC - il implĂ©mente des images - couleurs, modes vidĂ©o, symboles. Il existe des cellules matĂ©rielles pour accĂ©der Ă ANTIC, leur fonction est dĂ©crite dans Mapping The Atarije ne listerai pas toutes les adresses des cellules et la destination, je dĂ©crirai l'idĂ©e de l'effet lui-mĂȘme. Il convient de noter que pour plus de commoditĂ©, les adresses dans Mapping ont des mnĂ©moniques - elles sont si pratiques Ă retenir.Qu'est-ce qu'un Ă©cran? En mode texte, un rectangle avec des symboles et un cadre est visible.Pour plus de commoditĂ©, vous pouvez dĂ©sactiver le rectangle en Ă©crivant la valeur 0 Ă 559. Comme vous pouvez le voir, il y a de la place pour un effet raster.Vous devez maintenant synchroniser le dessin avec la sortie Ă l'Ă©cran. Il existe deux mĂ©thodes:RTCLOK equ $0012
lda RTCLOK+2
waits
cmp RTCLOK+2
beq waits
Ici, RTCLOCK est l'horloge en temps réel qui démarre lorsque l'ordinateur est allumé. Augmente d'abord 14 $, puis 13 $ et 12 $. L'idée de la synchronisation est simple: comparer la valeur de la cellule 14 $ avec celle actuelle. Si la valeur précédente ne correspond pas, une interruption s'est produite.Mais à mon avis, la méthode ne convient pas, il est donc plus pratique d'utiliser un compteur vertical de lignes VCOUNT ($ D40B) généré sur le cadre. Attendre le début de la trame sera:ws
lda $D40B ; VCOUNT
bne ws
L'idĂ©e elle-mĂȘme est d'Ă©crire des valeurs de couleur dans le registre COLBK ($ D01A) - la couleur du cadre.La valeur Ă©crite dans le registre est divisĂ©e en deux parties: type de couleur et luminositĂ©, calculĂ©es comme type * 16 + luminositĂ©. DĂ©crit en dĂ©tail ici et ici .Mais lors de la dĂ©finition de la couleur pour chaque ligne, une synchronisation est nĂ©cessaire - l'Ă©criture de toute valeur dans WSYNC (D40A) arrĂȘtera le processeur et le fera attendre que la ligne suivante dĂ©marre. La mĂȘme mĂ©thode est utilisĂ©e dans les interruptions de la liste d'affichage.L'effet lui-mĂȘme est divisĂ© en attendant la trame, en gĂ©nĂ©rant des valeurs de couleur et en les Ă©crivant dans les registres dĂ©crits. J'ai utilisĂ© des adresses de page zĂ©ro pour plus de simplicitĂ©. Vous pouvez utiliser l'assembleur xasm pour compiler. 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
Il s'est avĂ©rĂ© 54 octets. 54-6 (en-tĂȘte de programme) = 48 octets. Il est temps d'expĂ©rimenter, par exemple, jouer avec la luminositĂ© du vert lda $CC
;*
and #$0f
ORA #$C0
;*
sta $D40A ; wsync
sta $D01A
D'autres options pour gĂ©nĂ©rer des couleurs seront laissĂ©es Ă ceux qui sont intĂ©ressĂ©s et essayer moi-mĂȘme. CrĂ©ez, expĂ©rimentez et crĂ©ez. Cela est si excitant!