Yksinkertainen kaaosanimaatio, joka toimii siten että x-koordinaatti korotetaan toiseen potenssiin, siihen lisätään y-koordinaatin arvo ja sitten vakio a.
y-koordinaatti saadaan vähentämällä x-koordinaatista vakio b.
Tämä tuottaa suht. mukavan animaation, mutta parantelemisen varaa on.. etenkin optimoinnissa.
Aika sottaista koodia, mutta ainakin kääntyy siististi .com tiedostoksi eikä vaadi mitään muuta kuin 8086 prosessorin ja VGA:n toimiakseen.
mov ax,0A000h ; VGA näyttömuistin osoite mov es,ax mov cx,320*50 ; Piirrettävien pikselien määrä mov ax,013h ; 320*200*256 moodi int 10h putpixel: mov ax,word ptr [X1] mov dx,word ptr [Y1] mov di,ax mov ax,dx shl dx,8 shl ax,6 add dx,ax add di,ax mov al,[Color] mov byte ptr es:[di],al ; Piirä pikseli näyttömuistiin inc byte ptr [Color] ;lisätään väriarvoa yhdellä, ;Näin saadaan pientä räikeyttä ;) mov ax,word ptr [X1] ;Yksinkertainen chaos-math algoritmi mov dx,word ptr [b] ; Toimii seuraavasti: ; X1 = X1^2 + Y1 + a sub dx,ax ; Y1 = X1 - b mul ax add ax,word ptr [Y1] add ax,word ptr [a] mov word ptr [X1],ax mov word ptr [Y1],dx ;sitten vertical retrace.... mov dx,03DAh not_ready: in al,dx and al,08h ; Onko retrace vielä käynnissä? jnz not_ready ; jos on, loopataan takaisin... ei_oo_alkanut: in al,dx and al,08h jz ei_oo_alkanut ; Odotetaan että retrace alkaa, sitten antaa mennä. dec cx jnz putpixel lopeta: mov ah,4ch int 21h ; Tietomäärittelyt Color db 2 ; Väriarvo X1 dw 0100h ; X koordinaatti Y1 dw 1A0h ; Y koordinaatti a dw 0f9dh ; vakio a b dw 0500h ; vakio b ;nämä arvot voi määrätä itse, tai sitten ; käyttää jotain pseudosatunnaislukugeneraattoria ; niiden arvojen arpomiseen.
Niin, ja unohdin mainita että jotkin kääntäjät saattavat älähtää b muuttujasta, eli nimetkää b muuttuja bb:ksi, jos tulee onglemia.
testasin tuota juuri omalla koneella, ihan hieno. Tuo ei siis perustu satunnaisuuteen vaan matemaattisiin yhtälöihin :)
Millä kääntäjällä ja asetuksilla käänsit tuon? Ei oikein taivu omilla...
a86, ihan perusasetuksilla...
Nyt rupesi toimimaan, a86:lle ei tosin kelvannut b-muuttuja, mutta nopeastihan se oli muutettu.
binaryy missään? mulla ei nimittäin ole mitään millä voisi ajaa assemblyohjelmia, jos ne on pelkkinä sorsina
hieno. :o
nasmilla toimiva:
org 0x100 mov ax,0A000h ; VGA näyttömuistin osoite mov es,ax mov cx,320*50 ; Piirrettävien pikselien määrä mov ax,013h ; 320*200*256 moodi int 10h putpixel: mov ax,[X1] mov dx,[Y1] mov di,ax mov ax,dx shl dx,8 shl ax,6 add dx,ax add di,ax mov al,[Color] mov byte [es:di],al ; Piirä pikseli näyttömuistiin inc byte [Color] ;lisätään väriarvoa yhdellä, ;Näin saadaan pientä räikeyttä ;) mov ax,word [X1] ;Yksinkertainen chaos-math algoritmi mov dx,word [b] ; Toimii seuraavasti: ; X1 = X1^2 + Y1 + a sub dx,ax ; Y1 = X1 - b mul ax add ax,word [Y1] add ax,word [a] mov word [X1],ax mov word [Y1],dx ;sitten vertical retrace.... mov dx,03DAh not_ready: in al,dx and al,08h ; Onko retrace vielä käynnissä? jnz not_ready ; jos on, loopataan takaisin... ei_oo_alkanut: in al,dx and al,08h jz ei_oo_alkanut ; Odotetaan että retrace alkaa, sitten antaa mennä. dec cx jnz putpixel lopeta: mov ah,4ch int 21h ; Tietomäärittelyt Color db 2 ; Väriarvo X1 dw 0100h ; X koordinaatti Y1 dw 1A0h ; Y koordinaatti a dw 0f9dh ; vakio a b dw 0500h ; vakio b ;nämä arvot voi määrätä itse, tai sitten ; käyttää jotain pseudosatunnaislukugeneraattoria ; niiden arvojen arpomiseen.
Binary tuolla: http://koodaa.mine.nu/~tejeez/kaa.com
Kiitos tejeez nasm-sorsista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.