Eli ruutu vaihdetaan mustaksi ja sitten siitä tehdään palettia käyttäen värillinen. Ohjelmaa saa käyttää vapaasti
TYPE varit
r AS INTEGER
g AS INTEGER
b AS INTEGER
END TYPE
DIM vari(0 TO 255) AS varit
SCREEN 13
' ympyröitä
RANDOMIZE TIMER
FOR i = 1 TO 500
CIRCLE (INT(RND * 319), INT(RND * 199)), INT(RND * 10), 16 + INT(RND * 255)
NEXT
COLOR 4: PRINT "toimii!"
' itse ohjelma
FOR lue = 0 TO 255
' luetaan väri
OUT (&H3C7), lue
vari(lue).r = INP(&H3C9): vari(lue).g = INP(&H3C9): vari(lue).b = INP(&H3C9)
' vaihdetaan mustaksi
OUT (&H3C8), lue
OUT (&H3C9), 0: OUT (&H3C9), 0: OUT (&H3C9), 0
NEXT
FOR kerta = 0 TO 63
FOR v = 0 TO 255
' luetaan väri
OUT (&H3C7), v
r = INP(&H3C9): g = INP(&H3C9): b = INP(&H3C9)
' lisätään arvoja
IF NOT r = vari(v).r THEN r = r + 1
IF NOT g = vari(v).g THEN g = g + 1
IF NOT b = vari(v).b THEN b = b + 1
' tallennetaan väri
OUT (&H3C8), v
OUT (&H3C9), r
OUT (&H3C9), g
OUT (&H3C9), b
NEXT
' viive
a = TIMER
DO: LOOP UNTIL TIMER - a > .1
NEXTkommentteja..
tuollaiset "kommentteja kiitos" kommentit ovat aivan turhia, kyllä ihmiset osaa ilman niitäkin kommentoida koodivinkkejä
Ihan OK esimerkki. Ehkä parempi tapa olisi pitää koko paletti taulukossa. Sitten loopissa odottaa vsynciä, ja kirjoittaa koko paletin kerralla. Vsync vähentää tuota "lumisadetta" jota voi esiintyä kun palettiin kirjoitellaan milloin sattuu.
hmm.. sillai olisi tosiaan voinut tehdä..
Hyvä, kunhan vielä itse tajuaisin tuon... :)
Onnistuisko tuo sama assembyllä Out komennolla?
KemXy, jep. out:ille ei btw immediatena voi indeksoida noin suuria portteja, vaan pitää: "mov dx, 3c9h :: out dx, al" tai vastaavaa.
Tästä onkin hyötyä...
edit (2 vuotta myöhemmin ;) ): Tein tuosta vielä semmoisen, että kuva himmennetään takaisin mustaks.
Aihe on jo aika vanha, joten et voi enää vastata siihen.