Nykyajan koneet nyt moisia tiloja tukevat, mutta haluanpa kuitenkin tietää miten moinen homma otetaan selville? Eli se tukeeko näytönohjain noita mainittuja tiloja. Tiedän että joillain keskeytyksillä ja muilla pitää säheltää. Kokeilin jo itse etsiä tietoa, mutta eipä tullut mitään. Ja se putkassakin ollut vinkki on kadonnut jonnekin..
-Grey-
Tosiaan homma tapahtuu keskeytysten avulla. Ensin kutsutaan keskeytystä &H10 niin, että AH on &H1A ja AL on 0. Jos kutsumisen jälkeen AL on &H1A, VGA-tila on käytössä. EGA-tilan selvittämiseksi kutsutaan myös keskeytystä &H10 - nyt AH on &H12 ja BL on &H10. Jos kutsumisen jälkeen BL:n arvo on välillä 0 - 3, EGA-tila on käytössä. Sama ohjelmana (käynnistä QB komennolla /L):
TYPE RegType AX AS INTEGER BX AS INTEGER CX AS INTEGER DX AS INTEGER BP AS INTEGER SI AS INTEGER DI AS INTEGER FLAGS AS INTEGER END TYPE DIM rek AS RegType rek.AX = &H1A00 CALL Interrupt(&H10, rek, rek) IF (rek.AX AND &HFF) = &H1A THEN PRINT "VGA-tila käytössä" ELSE PRINT "VGA-tila ei käytössä" END IF rek.AX = &H1200 rek.BX = &H10 CALL Interrupt(&H10, rek, rek) SELECT CASE rek.BX AND &HFF CASE 0, 1, 2, 3 PRINT "EGA-tila käytössä" CASE ELSE PRINT "EGA-tila ei käytössä" END SELECT
En nyt pystynyt testaamaan tuota koodia koneella, jossa ei VGA:ta tai EGA:ta olisi, mutta eiköhän se toimi. Ohje ohjelman tekoon löytyi Aki Korhosen kirjasta PC pintaa syvemmältä.
Kokeilin DOSboxin avulla ja toimi! Kokeilin sitä CGA-, Tandy- ja HGA-emulaatioilla. Yhdessäkään ei löytänyt VGA:ta tai EGA:ta, kuten ei pitänytkään. Kiitoksia!
-Grey-
Aihe on jo aika vanha, joten et voi enää vastata siihen.