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,15nä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.