Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: DOS-fontin muuttaminen

Antti Laaksonen [18.07.2003 01:52:57]

#

Tämä QBasic-ohjelma näyttää, kuinka DOS:in tekstitilan fontin vaihtaminen on mahdollista keskeytyksen 10h avulla. Esimerkkinä vaihdetaan merkin 127 tilalle rahauudistuksen myötä tarpeelliseksi tullut euromerkki. Keskeytyksen vaatimat rekisteriarvot sekä fontin tallennustapa selviävät listauksesta.

Vaihtunut fontti näkyy ainoastaan kokoruututilassa (ei Windows-ikkunassa). Tämän lisäksi QB-editori on käynnistettävä valitsimen /L kanssa, jotta InterruptX-aliohjelma on käytössä.

'oletusmuuttujatyyppi INTEGER
DEFINT A-Z

'rekisterityyppi
TYPE RegTypeX
   AX AS INTEGER
   BX AS INTEGER
   CX AS INTEGER
   DX AS INTEGER
   BP AS INTEGER
   SI AS INTEGER
   DI AS INTEGER
   FLAGS AS INTEGER
   DS AS INTEGER
   ES AS INTEGER
END TYPE

'taulukko fonttidatalle
DIM merkki(1 TO 15) AS STRING * 1
'muuttuja rekistereille
DIM i AS RegTypeX

'luetaan fonttidata taulukkoon
FOR j = 1 TO 15
   READ m
   merkki(j) = CHR$(m)
NEXT

'määritetään keskeytyksen rekisterit:
i.AX = &H1110             'keskeytyksen toiminto
i.BX = &HF00              'F = 15 = fontin korkeus
i.CX = 1                  'muutettavien merkki määrä
i.DX = 127                'ensimmäinen muutettava merkki
i.ES = VARSEG(merkki(1))  'fonttidatan muistisegmentti
i.BP = VARPTR(merkki(1))  'fonttidatan muistiosoite

'kutsutaan keskeytystä
CALL InterruptX(&H10, i, i)

'tyhjennetään näyttö
CLS
'tulostetaan tekstiä, jossa näkyy muuttunut merkki
PRINT "Lehti maksaa 6 " + CHR$(127) + "."

'fonttidata:
'
'2-järj.    10-järj.
'-------------------
'00000000 = 0
'00000000 = 0
'00011110 = 30
'00110001 = 49
'01100000 = 96
'01100000 = 96
'11111110 = 254
'01100000 = 96
'11111110 = 254
'01100000 = 96
'01100000 = 96
'00110001 = 49
'00011110 = 30
'00000000 = 0
'00000000 = 0

DATA 0,0,30,49,96,96,254,96,254,96,96,49,30,0,0

Vilikki [18.07.2003 11:52:23]

#

Kiitoksia, näyttipä tuo toimivan ja varmaan joskus tulee tarpeelliseksikin. Jotenkin minulla oli sellainen mielikuva, että itsekin olen samantapaista yrittänyt, vaan ainakin tuo /L -parametri silloin taisi unohtua :P

odys [05.08.2003 23:41:19]

#

Ihan hyvä.

Juhko [06.01.2007 17:33:07]

#

Tämä ei ole QBasic-ohjelma, vaan QuickBASIC-ohjelma!

Dude [15.08.2007 20:54:46]

#

tuolla sais merkkigrafiikkapeliin uurenlaisia merkkejä.
Edit:Mitä eroa on InterruptXällä ja Interruptilla.
Edit2:Tiedetään mitä eroa.

Vastaus

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

Tietoa sivustosta