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 SELECTEn 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.