int21h

Paleta v 16barevném módu

Nedávno jsem si začal hrát s textovým módem 03h a všechno šlo dokud jsem nenarazil na paletu. Tak jsem si přečetl články na jednom skvělém časopisu int21h :), ale tam nic o paletě nebylo. Zkoušel jsem stejný postup jako v MCGA:

port[$3c8]:=i;
port[$3c9]:=r;
port[$3c9]:=g;
port[$3c9]:=b;  
ale to fungovalo jen pro barvy 0 až 5.
Od šestky výš to barvy prostě neměnilo.

Řešení
Pokud chcete změnit barvy 7 až 15, tak k indexu barvy přičtěte 48.
A co barva 6? Pro změnu barvy 6 musíte použít index 20 :) Neptejte se mě proč!
Asi to nějak souvisí v atributovými registry, ale v tomhle se fakt nevyznám.
Jen vám píšu, abyste se pak někdy nelekli jako já.
procedure SetColor(i,r,g,b:byte);
var j:byte;
begin
 if (i<=7) then
  begin
   if (i=6) then
    j:=20
   else
    j:=i;
  end
 else
  j:=i+48;
 port[$3c8]:=j;
 port[$3c9]:=r;
 port[$3c9]:=g;
 port[$3c9]:=b;
end;  
Úplně to samé je pro čtení. Jen index musíte zapsat na port 03c7h a pak z 03c9h číst.
2006-11-30 | BOby
Reklamy: