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.