Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: BSAVEn käyttö SCREEN 12:ssa

Sivun loppuun

E.K.Virtanen [03.12.2004 06:32:49]

#

Eli en saa bsavea pelittämään kunnolla.

Screen 12 : Width 80,60

Locate 10,10:Print "Jotain"

DefSeg = &HB800
Bsave "Jotain.tmp", 0 , 9600
Sleep 2
Cls
Bload "Jotain.tmp",0
Sleep 2

edit:

Joo keksein että sen pitää olla

Def Seg = 0xA000

Mutta nyt tulee "Expected:expression or end of statement".

Antti Laaksonen [03.12.2004 07:19:35]

#

Olet oikeilla jäljillä. Grafiikkatiloissa kirjoitetut merkit menevät suoraan grafiikkamuistiin, eikä tekstimuisti muutu mitenkään. Sen takia sinun pitää tosiaan tallentaa grafiikkamuistin sisältö, oikea segmentinmääritys on:

DEF SEG = &HA000

Näyttö täytynee tosin tallentaa useammassa osassa, koska kerrallaan BSAVE pystyy tallentamaan ainoastaan 65535 tavua. Eri osat pystyt valitsemaan samalla tavalla segmentin avulla, &HA000:han osoittaa näyttömuistin alkuun.

E.K.Virtanen [03.12.2004 07:31:43]

#

Joo, nyt ohjelma ei katkea virheilmoitukseen mutta ei se sitä kuvaa siihen uudestaan piirräkkään. Ruutu pysyy mustana ensimmäisen CLS käskyn jälkeen.

Kun (jos) saan tuon pelittämään niin pystyykö muuten Bloadatusta kuvasta lukemaan Screen x,y käskyllä ascii merkin?

Tuo qb:n oma helppi on aikas huono. Pitäisi siis saada osa ruudusta talletettua. Ehkä jokin dimmaus tai peek voisi olla helpompi mutta käyttäisin mieluummin tiedostoa muistin säästämiseksi.

edit:

Joo, muutin systeemiä niin että käytän Screen 0.
Heti alkoi toimimaan ja suht helposti.

tn [03.12.2004 11:48:11]

#

lainaus:

Kun (jos) saan tuon pelittämään niin pystyykö muuten Bloadatusta kuvasta lukemaan Screen x,y käskyllä ascii merkin?

Kyllä pitäsi pystyä, jos vain alkuperäisestäki pystyy.

lainaus:

Pitäisi siis saada osa ruudusta talletettua. Ehkä jokin dimmaus tai peek voisi olla helpompi mutta käyttäisin mieluummin tiedostoa muistin säästämiseksi.

Eipä taida onnistua tuo yhdellä BSAVE:lla ellei tallennettava osa ole koko ruudun levyinen. Graafisessa tilassa voisi tietysti GET:llä ensin kaapaata osan ruudusta ja tallentaa sitten saadun datan BSAVE:lla. Mutta jos kerran sait tämänkin jo toimimaan, niin ei kai sillä sitten enempää väliä...

Antti Laaksonen [03.12.2004 15:24:19]

#

Merkkien lukeminen onnistuu myös ladatusta kuvasta, koska QB päättelee merkin suoraan näytöllä olevien pikseleiden perusteella.

E.K.Virtanen [03.12.2004 19:54:37]

#

Pystyykö muuten screen x,y käskyllä ottamaan myös taustavärin talteen.

Muuttuja = Screen (10,10,1)

tallettaa siis 10,10 kohdan värin talteen. Millä keinoin saisi myös taustavärin talteen? (Screen 0: Color 1,2)

Antti Laaksonen [03.12.2004 20:21:58]

#

Eipä taida onnistua SCREEN-funktiolla, mutta värin voi lukea silti suoraan tekstimuistista. Kun olet ensin määrittänyt segmentiksi &HB800, voit lukea tietyn merkin värin seuraavasti:

vari% = (PEEK((y% - 1) * 80 * 2 + (x% - 1) * 2 + 1) AND &H70) \ 16

Tekstimuistissa jokaista merkkiä vastaa kaksi tavua, joista ensimmäinen ilmoittaa merkin koodin ja toinen sen värin. Piirtoväri on tallennettu neljään bittiin, ja se on luku väliltä 0 - 15. Taustaväri taas on tallennettu kolmeen bittiin, minkä takia se voi olla vain 0 - 7. Tavun kahdeksas bitti merkitsee vilkkumista.

E.K.Virtanen [03.12.2004 21:10:02]

#

Joo, sen verran sain tuossa leikkiessäni selville että Screen käskyllä se ei onnistu. Pitää siis hyödyntää tuota antamaasi esimerkkiä.

Kiitoksia...

...taas =)


Sivun alkuun

Vastaus

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

Tietoa sivustosta