Olen kyllä löytänyt aiheesta monia vinkkejä, mutta enpähän yhdestäkään oppinut mitään kunnolla, paitsi sen että SVGA - tiloja voi käyttää Qbasicissa melko suoraan. En vain osaa käyttää mm. rekisteriä ja keskeytyksiä mitenkään. Niitä kopeloimalla kun saisin näytön laitettua SVGA - tilaan Qbasicissa.
Olen sen verran ottanut selvää että se on minulle vähän liiankin monimutkaista. Esivalmistelut, joita tarvitaan varmaankin, ovat minun tietoni tuolla puolen. Ja lopulta sitten tilan asetus, että asettaminen pois. Jooh, kaksi kuukautta olen koettanut etsiä sellaista, mutta enpä ole löytänyt yhtään tarpeeksi selkeää vinkkiä..
-Grey-
Itsekin joskus vähän selailin, muttei ole mielenkiinto paljon riittänyt tutkia asiaa enemmän...
Minua asia kiinnostaa, ja kun kiinnostus on jatkunut näin pitkään, ei se taida loppua kirveelläkään. Kuitenkin, en pyydä kokonaista koodia. Vain kaavan miten sen koko homman saa käyttöön ja millä Qbasicin käskyillä. Loput menee kyllä itsestään, kun aikani näprään, jos en hajota konettani vahingossa ^_^
-Grey-
Voisinpa tietysti vielä vähän katsella, jos jotain löytäisin...
No, jos oikein yksinkertaista haluaa niin käytä pelkkiä keskeytyksiä, eli CALL INTERRUPT:ia. Myös pixelput-routinen pitäisi onnistua käyttämällä video biosin keskeytystä. Muistaakseni itseasiassa juuri sinä, Grey, annoit joskus linkin johonkin QB SVGA-paskeeseen joka oli toteutettu pelkästään keskeytyksillä.
Se tuotti vaivaa, mutta kovan etsinnän jälkeen löysin koodinpätkän mikä ainakin tunnistaa onko VESA käytössä vai ei. Mukavan simppeli koodi, mutta oma aivokapasiteettini ei riitä sen tajuamiseen että miten siihen pätkään lisätään näyttötilan vaihto. Koodi olisi tälläinen:
REM $INCLUDE: 'QB.BI' TYPE VGAInfoType VESASignature AS STRING * 4 VESAVersion AS INTEGER OEMStringPTR AS LONG Capabilities AS STRING * 4 VideoModePTR AS LONG TotalMemory AS INTEGER Reserved AS STRING * 236 END TYPE DIM VGAInfo AS VGAInfoType DIM regs AS regTypeX regs.AX = &H4F00 regs.ES = VARSEG(VGAInfo) regs.DI = VARPTR(VGAInfo) CALL InterruptX (&H10, regs, regs) IF regs.AX = &H4F THEN PRINT "VESA found." ELSE PRINT "VESA not found." END IF
Ehkä keksin joskus itse ratkaisun, mutta pyydänpä kuitenkin nyt apua. Sivusto kun ei kertonut tuon enempää ja sieltä tiedon etsiminen siis ei ehkä oikein onnistu. Osoite on muuten http://qbchronicles.qbrpgs.com.
-Grey-
Edit: Okei, okei.. Luovutan.. En jaksa sählätä kooditagien kanssa..
Jonkinlaista selostusta:
' qb.bi sisältää muutamat extra-funktiomäärittelyt, muista käynnistää qb tyyliin qb.exe /l REM $INCLUDE: 'QB.BI' TYPE VGAInfoType ' strukti, jonka keskeytys tulee täyttämään VESASignature AS STRING * 4 VESAVersion AS INTEGER OEMStringPTR AS LONG Capabilities AS STRING * 4 VideoModePTR AS LONG TotalMemory AS INTEGER Reserved AS STRING * 236 END TYPE DIM VGAInfo AS VGAInfoType ' määritellään muuttuja DIM regs AS regTypeX ' regtypex on määritelty qb.bi:ssä regs.AX = &H4F00 ' funktion numero (tässä haetaan tietoja VESA:sta) regs.ES = VARSEG(VGAInfo) regs.DI = VARPTR(VGAInfo) ' es:di osoittaa VGAInfoType-struktuuriin CALL InterruptX (&H10, regs, regs) ' kutsutaan keskeytystä 10h (video-keskeytys), käyttän rekisterien arvoina regsin arvoja (kutsun jälkeiset ulosteet löytyvät myös regsistä) IF regs.AX = &H4F THEN ' tsekataan mitä AX-rekisteri sisälsi kutsun jälkeen PRINT "VESA found." ' jos AX = 4F (heksa), näytönohjain tukee VESAa. ELSE PRINT "VESA not found." END IF
No, selostuksista huolimatta tuosta ei välttämättä tajua mitään ellei ole kokemusta keskeytys-kutsuista ym. sellaisesta. Suosittelen lisäksi hankkimaan mm. PCGPE:n (vanha versio) mukana tulevan VESA-dokumentaation, vaikka sekin voi olla hieman vaikeaselkoinen jos ei omaa tiettyä pohjaa.
lainaus:
Olen kyllä löytänyt aiheesta monia vinkkejä, mutta enpähän yhdestäkään oppinut mitään kunnolla, paitsi sen että SVGA - tiloja voi käyttää Qbasicissa melko suoraan. En vain osaa käyttää mm. rekisteriä ja keskeytyksiä mitenkään. Niitä kopeloimalla kun saisin näytön laitettua SVGA - tilaan Qbasicissa.
Olen sen verran ottanut selvää että se on minulle vähän liiankin monimutkaista. Esivalmistelut, joita tarvitaan varmaankin, ovat minun tietoni tuolla puolen. Ja lopulta sitten tilan asetus, että asettaminen pois. Jooh, kaksi kuukautta olen koettanut etsiä sellaista, mutta enpä ole löytänyt yhtään tarpeeksi selkeää vinkkiä..
-Grey-
No mä oon ainakin törmänny sellaseen koodinpätkään, joka laittaa näytön tilan ihan samanlaiselle kun se on sillon kun koodaa QBasicillä. SCREEN 0: WIDTH 80, 25-siinä kaikki. Ainakin se toimi mun koneella...
-The PC-Master-
lainaus:
SCREEN 0: WIDTH 80, 25-siinä kaikki. Ainakin se toimi mun koneella...
Niinpä, tuo toimii jokaisella koska SCREEN 0 on tekstitila (ei siis SVGA tila) ja siinä on 80 merkkiä 25 rivillä -> yleisin tekstitila.
lainaus:
lainaus:
SCREEN 0: WIDTH 80, 25-siinä kaikki. Ainakin se toimi mun koneella...
Niinpä, tuo toimii jokaisella koska SCREEN 0 on tekstitila (ei siis SVGA tila) ja siinä on 80 merkkiä 25 rivillä -> yleisin tekstitila.
Mut mäpä just tarkotinkin et mistä tahansa näyttömoodista takasin TAVALLISEEN, ei SVGA:han!!!
-The PC-Master-
lainaus:
Mut mäpä just tarkotinkin et mistä tahansa näyttömoodista takasin TAVALLISEEN, ei SVGA:han!!!
Ai juu, niinpäs kirjoititkin :) Taidan käydä ostamassa uudet silmät tässä välissä ...
Damn.. Näköjään taidan luovuttaa ja pyytää jotakuta ASMia osaavaa tekemään kirjaston, missä tarvitsee vain syöttää keskeytys ja tilan vaihto on siinä. Niin ja tietysti se grafiikan piirto. Jotain PSETin ja LINEn kaltaista, mutta SVGA - tilassa toimivaa. Kiitokset sille etukäteen joka tälläisen vaivautuu harmikseni tekemään minulle..
-Grey-
Aihe on jo aika vanha, joten et voi enää vastata siihen.