Jak wyświetlić znak na ekranie. Czyli dostęp do pamięci ekranu
musio
Tutaj znajduje się procedurka do wyświetlania znaków którą zaraz omówię:
procedure znak (x,y:word;znak:char;kolznak:byte;koltla:byte;miganie:byte); {1}
var atrybut:byte;
begin
asm {2}
mov [atrybut],0
shr [miganie],1
adc [atrybut],0
shl [atrybut],1
shl [koltla],1
shl [koltla],1
shl [koltla],1
shl [koltla],1
shl [koltla],1
shl [koltla],1
adc [atrybut],0
shl [atrybut],1
shl [koltla],1
adc [atrybut],0
shl [atrybut],1
shl [koltla],1
adc [atrybut],0
shl [atrybut],1
shl [kolznak],1
shl [kolznak],1
shl [kolznak],1
shl [kolznak],1
shl [kolznak],1
adc [atrybut],0
shl [atrybut],1
shl [kolznak],1
adc [atrybut],0
shl [atrybut],1
shl [kolznak],1
adc [atrybut],0
shl [atrybut],1
shl [kolznak],1
adc [atrybut],0
end;
mem[$B800:120*y+x*2]:=ord (znak); {3}
mem[$B800:120*y+x*2+1]:=atrybut; {4}
end;
Ad1
Jest to procedura do wyświetlania znaków.
x,y to pozycja na ekranie
znak to znak do wyświetlenia
kolznak to kolor o jakim ma być znak (0-15)
koltla to kolor tla jaki ma mieć znak (0-7)
miganie (albo 0 albo 1) oznacza czy znak ma sobie migać czy nie (na niektórych kartach niedziała a wtedy mamy 16 kolorów tła)
Ad2
Jest to procedurka która łączy: kolor znaku, tła oraz miganie w jeden atrybut o rozmiarze jednego bajtu. (Pamięć ekranu to nie tylko znaki ale też atrybuty tych znaków. Kolor znaku w tym bajcie zajmuje bity od 0 do 3, kolor tła od 4 do 6 i miganie ostatni bit.
Działą ona tak, że po instrukcji shl [miganie],1 wartość zmiennej miganie przechodzi do CF (carry flag) a po instrukcji adc [atrybut],0 do zmiennej [atrybut], zostaje dodana wartość CF plus 0.
Tak samo z innymi zmiennymi.
Ad3
mem[$B800:120y+x2]:=ord(znak)
Pamięć akranu zaczyna się w 0B800h i zajmuje 4000 bajtów w trybie 25X80. 2000 bajtów przeznaczone jest na znaki a pozostałe 2000 na ich atrybuty.
Jest tak:
b800:0000 - znak 1 (w lewym górnym rogu)
b800:0001 - atrybut znaku 1
A więc aby obliczyć pozycję na ekranie trzeb awykonać to działanie:
120y+x2
Ad4
mem[$B800:120y+x2+1]:=atrybut;
A tutaj obliczamy pozycję w pamięci dla atrybutu
No i tyle. Tutaj można zobaczyć kolory i ich numery:
WARTOŚĆ KOLOR
0 czarny
1 niebieski
2 zielony
3 truskawkowy
4 czerwony
5 karmazynowy
6 brązowy
7 jasnoszary
8 ciemnoszary
9 jasnoniebieski
10 jasnozielony
11 jasnotruskawkowy
12 jasnoczerwony
13 jasnokarmazynowy
14 żółty
15 biały
PS. Jeśli coś z tego co napisałem ty zrozumiałeś to chyba jesteś dobry. Bo ja nigdy nie umiałem pisać artykułów lub czego w tym stylu.
A więc mam zastrzeżenia do:
Można to zrobić 'booleanem' (nie trzeba, ale moja upierdliwość nie zna granic ;) Jak komu wygodnie).
Sprawa druga: