Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Assembly: Kaaosanimaatio

Sivun loppuun

Dogzoid [13.12.2002 13:53:59]

#

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.

Dogzoid [14.12.2002 17:01:10]

#

Niin, ja unohdin mainita että jotkin kääntäjät saattavat älähtää b muuttujasta, eli nimetkää b muuttuja bb:ksi, jos tulee onglemia.

Dogzoid [14.12.2002 17:01:41]

#

testasin tuota juuri omalla koneella, ihan hieno. Tuo ei siis perustu satunnaisuuteen vaan matemaattisiin yhtälöihin :)

Antti Laaksonen [15.12.2002 01:13:16]

#

Millä kääntäjällä ja asetuksilla käänsit tuon? Ei oikein taivu omilla...

Dogzoid [15.12.2002 01:14:44]

#

a86, ihan perusasetuksilla...

Antti Laaksonen [15.12.2002 01:28:01]

#

Nyt rupesi toimimaan, a86:lle ei tosin kelvannut b-muuttuja, mutta nopeastihan se oli muutettu.

Gwaur [08.07.2003 03:55:29]

#

binaryy missään? mulla ei nimittäin ole mitään millä voisi ajaa assemblyohjelmia, jos ne on pelkkinä sorsina

tejeez [15.05.2004 21:19:18]

#

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

moptim [03.07.2007 09:28:28]

#

Kiitos tejeez nasm-sorsista.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta