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
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
Ihan hyvä.
Tämä ei ole QBasic-ohjelma, vaan QuickBASIC-ohjelma!
tuolla sais merkkigrafiikkapeliin uurenlaisia merkkejä.
Edit:Mitä eroa on InterruptXällä ja Interruptilla.
Edit2:Tiedetään mitä eroa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.