vga-paletin esittely

Tuhmahepo 16.02.04 23:37

'turhahko' esittelypätkä joka piirtää vga-paletin näytölle

 Tekstiversio  Arvo: 1 (2 ääntä)  Äänestä: +  -
;VGA vakiopaletti esittely
;koodia saa käyttää vaikka wc-harjana
;kääntyypi MASMilla
;olen tosi aloittelija jotenka palautetta kiitos!

.model tiny
.data
rivi1   db 0
rivi    db 0
.code
.startup
        mov ax,0A000h   ;es osoittamaan videosegmenttiä.
        mov es,ax
        mov ax,13h      ;320x200 vga tila.
        int 10h
        xor di,di              ;nollataan siirros, eli aloitetaan pikselien
                        ;asettelu ruudun vasemmasta yläkulmasta.
        xor ax,ax              ;al rekkarista luetaan asetettavan pikselin väri, nollataan se.
        mov cx,32              ;laskuriin 32 eli piirretään 32 kpl 10 pikselin levyisiä
                        ;palikoita sivuttaissuunnassa.
piirto: push cx    ;palikoiden kierroslaskuri talteen.
        call piirranelio        ;kutsutaan piirranelio aliohjelmaa.
        pop cx    ;kun suoritettu, palautetaan palikoiden kierroslaskuri.
        inc al    ;kasvatetaan al rekisterin arvoa, eli siirrytään seuraavaan väriin.
        loop piirto     ;kerrataan piirranelio aliohjelmaa kunnes kierroslaskuri 32 on tyhjä.
        add di,3200     ;kun rivi on täynnä palikoita, jää di osoittamaan viimeisen palikan
                        ;yläkulmaan, listätään 320*10 jolloin voidaan aloittaa täyttämään
                        ;uutta riviä.
        inc rivi                ;kasvatetaan rivi muuttujaa.
        add cx,32              ;cxään 32, eli uuden rivin palikoiden määrä.
        cmp rivi,8      ;verrataan rivi muuttujaa kahdeksaan (32*8=256 väriä).
        jne piirto      ;jos ei, mennään piirto pomppaan ja jatketaan väripalikoiden piirtämistä.
       
        xor ax,ax              ;jos on piirretty jo kahdeksan riviä kutsutaan keskeytystä 16h/0
        int 16h  ;joka odottaa näppäimenpainallusta ennenkuin jatkaa ohjelmaa.
        mov ax,3                ;kun näppäintä painettu, siirrytään takaisin tekstitilaan.
        int 10h
        mov ah,4Ch      ;palaa dossiin perus lopetus sälää.
        int 21h

piirranelio proc near   ;tämä aliohjelma piirtää yhden neliön alkaen di osoittamasta paikasta.
        mov rivi1,0     ;rivi1 muuttujassa pidetään ylhäällä monta pikseliriviä on piirretty.
privi:  mov cx,10  ;cx rekkariin 10, tämä osoittaa montako pikseliä piirretään rivilleen.
        rep stosb              ;asetetaan es:di osoittamaan paikkaan al rekisterin sisältö (väri) cx kertaa.
        inc rivi1              ;kasvatetaan rivi1 laskuria.
        add di,310      ;siirrytään rivi alaspäin (0+10+310=320).
        cmp rivi1,10    ;verrataan rivi1 muuttujaa kymmeneen, tämä osoittaa montako pikseliriviä
        jne privi              ;piirretään kuhunkin neliöön. jos alle, hypätään privi pomppaan ja
                        ;piirretään uusi rivi.
        sub di,3190     ;kun neliö on valmis, palautetaan osoitus neliön oikeaan yläkulmaan
                        ;((320*10)-10=3190)
        ret          ;palataan pääohjelmaan
piirranelio endp
end

Tuhmahepo 23:38 16.2.04 
tulipa ruma jäsentely, no mut kertokaa mielipiteenne
Tuhmahepo 23:41 16.2.04 
ohos sitä pystyikin editoimaan jälkeenpäin, no nyt on luettavan näköinen...
Entropia 12:21 17.2.04 
Erittäin hyvin kommentoitu, varsin hyödyllistä siis. Tuskin kellään enää DOSsia koneessa on mutta tästä löytyy hyviä vinkkejä muihin ohjelmiin.