Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: EGA/VGA - tuen selville ottaminen (QB)

Grey [08.07.2004 17:16:33]

#

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-

Antti Laaksonen [08.07.2004 17:51:33]

#

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

Grey [08.07.2004 18:38:54]

#

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-

Vastaus

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

Tietoa sivustosta