Yksinkertainen ja hidas kaksoispuskurointi, joka toimii mode 13h:ssa. Ajatus on, että otetaan taulukon(puskurin) muistisosoite ja poketetaan sinne. Lopuksi kuva puskurista kopioidaan ruudulle.
'Kaksoispuskurointi Mode 13h:ssa pokella 'Mika Kemppainen DIM Puskuri(32001) AS INTEGER 'Puskuri 64000 pikselille, kun 'Yksi väri vie muistia 8 bittiä 'ja Integer-muuttujaan sopii 16 bittiä DIM Lippu(5, 5) AS INTEGER 'Taulukko lippukuvalle ja DIM LippuX AS INTEGER 'sen koordinaatit sekä liike DIM LippuY AS INTEGER DIM LisaysX AS INTEGER DIM LisaysY AS INTEGER FOR y% = 0 TO 4 FOR x% = 0 TO 5 READ Lippu(x%, y%) NEXT x% NEXT y% Puskuri(0) = 2560 'Puskurin pituus bitteinä Puskuri(1) = 200 'Puskurin korkeus pikseleinä LisaysX = 1 LisaysY = 1 CLS SCREEN 13 DO LippuX = LippuX + LisaysX LippuY = LippuY + LisaysY IF LippuX >= 319 - 50 THEN LippuX = 319 - 50: LisaysX = -INT(RND * 5) IF LippuX <= 0 THEN LippuX = 0: LisaysX = INT(RND * 5) IF LippuY >= 199 - 40 THEN LippuY = 199 - 40: LisaysY = -INT(RND * 5) IF LippuY <= 0 THEN LippuY = 0: LisaysY = INT(RND * 5) DEF SEG = VARSEG(Puskuri(0)) 'Segmenttiosoitteeksi puskurin osoite 'Tyhjennetään ruutu(puskuri) FOR x% = 0 TO 319 FOR y% = 0 TO 199 POKE VARPTR(Puskuri(2)) + 320& * y% + x%, 0 NEXT y% NEXT x% 'Piirretään lippu FOR x% = 0 TO 50 FOR y% = 0 TO 40 vari% = Lippu(x% / 10, y% / 10) POKE VARPTR(Puskuri(2)) + 320& * (LippuY + y%) + (LippuX + x%), vari% NEXT y% NEXT x% 'Siirretään kuva näytölle puskurista PUT (0, 0), Puskuri, PSET LOOP UNTIL INKEY$ = CHR$(27) DATA 15,15,01,15,15,15 DATA 15,15,01,15,15,15 DATA 01,01,01,01,01,01 DATA 15,15,01,15,15,15 DATA 15,15,01,15,15,15
nätti puskuri
Nuo 320:lla kertomiset hidastavat aika paljon silmukkoja. Puskurin tyhjentäminen kannattaisi ainakin tehdä yhden for-silmukan avulla seuraavasti:
'Tyhjennetään ruutu(puskuri) kohta% = VARPTR(Puskuri(2)) FOR x& = 0 to 64000 POKE kohta% + x&, 0 NEXT
Lipun piirtämistä voisi myös jotenkin optimoida, se tosin on vähän vaikeampaa, kun pikselit eivät ole peräkkäin. Muuten ihan ok esimerkki, muuttujan paikan muistissa palauttavista VARSEG:stä ja VARPTR:sta on hyötyä monissa muissakin ohjelmissa.
Hiih, joku jaksaa vielä 13h:takin vielä vääntää. Kuul :D
Onkos jossain jotain kamaa näytillä?
Johonaki oli semmoonen että se hirtetään näytölle PUTilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.