10. Programy konwersji liczb
W praktyce programistycznej często okazuje się,że jeżeli chcemy komunikować się z użytkownikiem, to użytkownik ten chce podawać dane w systemie ,który jest mu najwygodniejszy.W przypadku zajmowania się pamięcią będzie to system szesnastkowy,czasem binarny.Komputery jednak,mimo że pracują w systemie binarnym,dawno nauczyły się komunikować z użytk.za pomocą systemu dziesiętnego,a nawet nakłonienie do czynienia tego w innym standardzie może przysporzyć kłopotów.Stąd programy przeliczenia prezentowane poniżej.Będą w dwóch językach:asemblerze i Turbo Pascalu 5.0.
Najpierw procedura przekształcająca liczbę dziesiętną typu byte lub word w zmienną typu string o zawartości liczby w kodzie szesnastkowym.
procedure dec_hex (deci : word;var c2 : string);
var
a,b,cl : word;
d : char;
begin
for cl:=4 downto 1 do begin
a:=deci div 16 {część całkowita z dzielenia}
b:=deci mod 16 {część ułamkowa z dzielenia}
if b9 then c2[cl] :=char (b+55)
else c2[cl] :=char (b+48);
deci:=a;
end;
end;
Jeżeli nie wiesz,dlaczego akurat to się dzieje,przypomnij sobie algorytm z rozdziału 1 tej książki.Teraz czas na program robiący to samo,ale w asemblerze:
;DECIHEX-Konwersja wartości decymalnej z klawitury na szesnastkową na ekranie
decihex segment
asume cs:decihex
;GŁÓWNA CZĘŚĆ PROGRAMU
powt: call decibin ; z dec na bin
call crlf ; wydrukuj CR LF
call binihex ; bin na hex
call crlf ; wydrukuj CR LF
jmp powt ; zrób to znowu
;
;PROCEDURA KONWERSJI LICZBY DZIESIĘTNEJ Z KLAWIATURY NA BINARNĄ
;Rezultat jest w rejestrze BX
decibin proc near
mov bx,0 ;wyczyszczenie BX
;Odczyt liczby z klawiatury,konwersja ma postać binarną nowy znak:
mov ah,1 ;wejście klawiatury
int 21h ; wywołanie funkcji DOS
sub al.,30h ;konwersja ASCII na postać binarną
jl exit ;wyjście jeżeli liczba < 0
cmp al.,9d ; liczba większa niż 9?
jg exit ;jeżeli tak to skończ
cbw ; bajt w AL na słowo w AX
;(cyfra jest teraz w AX)
;Mnożenie liczby w BX przez 10 dziesiętnie
xchg ax,bx ; zmiana rejestrów
mov cx,10d
mul cx ; liczba razy 10
xchg ax,bx ; zmiana rejetrów
;dodanie cyfry w AX do liczby w BX
add bx,ax dodanie liczb
jmp nowyznak ; odczyt następnej liczby
exit:
ret ;wyjście z programu
decibin endp ; koniec procedury decibin
;
;PROCEDURA KONWERTUJĄCA LICZBĘ W BX NA SZESNASTKOWĄ NA EKRANIE
binihex procnear
mov ch,4 liczba cyfr
obrot: mov cl,4 ; ustawienie licznika na 4 cyfry
rol bx,cl ;
mov al.,bl ;
and al.,0fh ; maska cyfry
add al.,30h ; konwersja hex na ASCII
cmp al.,3ah ; czy 9?
Jl drukuj ; skocz jeżeli cyfra = 0 do 9
Add al.,7h ; cyfra jest w zakresie A do F
drukuj
mov dl,al. ; ASCII w DL
mov ah,2 ;
int 21h ; przerwanie
dec ch ; skończone 4 cyfry
jnz obrot ; jeszcze nie
ret ;powrót z binihex
binihex endp ; koniec segmentu
;
;PROCEDURA DRUKUJE CR I LF
crlf proc near
mov dl,0dh ; carriage retrun (powrót karetki)
mov ah,2
int 21h
mov dl,0ah ; linefeed (linia w dół)
mov ah,2
int 21h
ret ; powrót z crlf
crlf endp
;
decihex ends
;
Pora teraz na programy przeliczające z systemu dziesiętnego na binarny.Oto pierwszy program realizujący tę czynność:
Program dec_bin; {program konwertuje słowo lub bajt o wartości dziesiętniej na wartość binarną zapisaną do zmiennej typu string}
var bin : string;
c : integer;
procedure Dec_bin (deci : word; var bin : string);
{procedura zmienia słowo lub bajt w dec na bin jako string}
var
a,b,c,i : word;
begin
bin:='' ;
if deci255 then c:=16 {jeżeli liczba większa niż 8 bitów}
else c:=8;
for i:=c downto 1 do begin {wypełnia 8 lub 16 bitów}
a:=deci div 2;
b:=deci mod 2;
if b0 then bin:=' 1' + bin {jeżeli reszta to 1}
else bin:=' 0' + bin; {jeżeli brak reszty to 0}
deci:a;
end;
end;
begin
ClrScr;
Dec_bin ($FFFF,bin); {możemy konwertować hex-bin}
Writeln (bin);
Dec_bin (255,bin); {oraz dec-bin}
Writeln (bin);
Readln;
end.
Konwersja z liczb szesnastkowych na dziesiętne jest bardzo prosta.Wystarczy załadować jakąś zmienną,a potem ją odczytać np.tak:
A:=$16
Write (a); {wyświetlona będzie liczba w dec.}
11. PROGRAMY KORZYSTAJĄCE Z USŁUG BIOS I DOS
Zawężymy pojęcie usług BIOS i DOS do tych opisanych w rozdziale 3,5 i 8.
W rozdziale 3 opisaliśmy kody rozkazów klawiatury AT.Zaprezentujemy tutaj programik zapalający wszystkie kombinacje diod świecących na klawiaturze,później pezywracający orginalne zapalenia Oto on:
{$A+,B-,D+,E+,F-,I+,L+,N-,O-,R-,S+,V+}
{$M. 16384,0,655360}
{Program demonstruje możliwości klawiatury AT.Jeżeli program nie działa zmienić należy wartości $64 na $60 w instrukcji PORT}
program KLAWIAT;
uses DOS,CRT;
var
i : integer;
stan : byte absolute $0040:0018; {zmienna opisu klawiatury}
begin
for i:=1 to 9 do begin
port[$64] :=ED; {rozkaz zapalenia lampek}
port[$64] :=i; {niektóre lampki zapalić}
Delay (10);
end
port[$64] :=ED;
port[$64] := (stan shr 4) and 9; {odtworzenie stanu początkowego}
end.
Gdy go odpowiednio zmodyfikujemy i dodamy odpowiedni program,to uzyskamy możliwość azpalenia się diod w takt muzyki.
Gdy już jesteśmy przy klawiaturze,to warto napisać program sprawdzający,czy klawiatura jest sprawna>może on wyglądać na przykład tak:
procedure test_klawAT : boolean;
begin
port[$60] :=$EE;
if port[$60] =$EE then test_klawAT:=true
else test_klawAT:=false
end.
W naszych programach dobrze jest widzieć,jaką dysponujemy konfiguracją.Możemy informować o tym użytkownika lub sprawdzać ją do swoich wewnętrznych celów.Zdefiniujemy specjalny typ opisujący wyposażenie:
type wypos = record
ile_nap : byte; {ilość napędów dysków}
koop : boolean; {obecność kooprocesora}
monit : string; {tryb pracy monitora}
ile_RS : byte; {ile sprzęgów RS_232}
game : boolean; {obecność GAME CARD}
modem : boolean; {obecność wewnętrznego modemu}
ile_C : byte; {ile sprzęgów Centronics}
end;
Następnie napiszemy procedurę,która będzie wypełniać powyższy typ:
procedure wyposarzenie (var wy : wypos);
var
w : word absolute $0040:$0010;
begin
if (w and 1) = 1 then wy.ile_nap:= ( (w shr 6) and 3) + 1
else wy.ile_ nap:=0;
if (w and 2) = 2 then wy.koop:=true
else wy.koop:=false;
case (w shr 4) and 3 of
0 : wy.monit:='40x25 kolor';
1 : wy.monit:='80x25 kolor';
3|: wy.monit:='80x25 mono';
end;
wy.ile_rs:= (w shr 9) and 7;
if ( (w shr 12) and 1) = 1 then wy.game:=trude
else wy.game:=false;
if ( (w shr 13) and 1) = 1 then wy.modem:=trude
else wy.modem:=false;
wy.ile_C:= (w shr 14) and 3;
end;
Sprawdzanie obecności kooprocesora matematycznego może w tym momencie wyglądać następująco:
...
Wyposażenie(t);
if t.koop=false then begin
Writeln('Brak kooprocesora matematycznego.Program
wymaga jego obecności do pracy.pryykro nam');
Halt;
end;
...
Podobnie możemy sprawdzić inne szczegóły wyposażenia.Natomiast funkcja badająca ilość zainstalowanej pamięci może wyglądać następująco:
function spr_pam : word;
var
r : registers;
begin
Intr($12,r);
spr_pam:=r.AX;
end;
A sam może wyglądać następująco:
{$a+,B-,D+,E+,F-,I+,L+,N-,O-,R-,S+,V+}
{$M 16384,0,655360}
program pam2;
usses DOS,CRT;
begin
ClrScr;
if MemW[$0040:$0013] C then Write('Za mało pamięci operacyjnej');
end.
Gdy już jesteśmy przy tekstach-bardzo często korzystamy z drukarki jako urządzenia wyjścia.Ale wysłać dane tak,żeby nie zawiesić komputera z powodu np.braku papieru w drukarce,to jest sztuka.Mamy nadzieję,że pomoże Ci w tym nasz programik:
{$A+,B-,D+,E+,F-,I+,L+,N-,O-,R-,S+,V+}
{$M, 16384,0,655360}
{programik demonstruje użycie procedury test drukarki}
program test1;
uses DOS,CRT;
var
Reg : Registers;
st : Byte;
procedure status_drukarki(nr : byte; var s : byte);
{procedura bada status drukarki>parametr wejściowy to numer
drukarki (LPT) . parametr wyjściowy to status}
begin
Reg.AH:=2;
Reg.DX:=nr-1; {my drukarki liczymy od 1,a komputer od 0}
Intr($17,Reg);
S:=Reg.AH;
end;
end.
Jeśli już jesteśmy przy drukarkach - czy zdarzyło ci się zmieniać kable połączeniowe między drukarkami,bo np.posiadałeś dwie,a program przewiduje używanie tylko jednej,dołączonej do LPT1?Albo inaczej.Spaliłeś port LPT1(np.wyciągając kabel przy włączonym zasilaniu),a w żaden normalny sposób nie da się nakłonić portu LPT2,żeby występował jako pierwszy.Przy tych kłopotach pomocny będzie programik zmieniający adresami porty LPT1 i LPT2:
program
uses DOS;
procedure Zamień_porty;
var
i : word;
old : word absolute $0040:$0008;
new : word absolute $0040:$000A;
begin
i:=old
old:=new;
new:=1
end;
begin
Zamień_porty;
end.
Od momentu wywołania tego programu znaki wysyłane na LPT1 będą faktycznie wysyłane do gniazda normalnie oznaczonego jako LPT2.Powtórne wywołanie programu pozwoli przywrócić sytuację początkową.
Niektórzy z użytkowników IBM PC przesiedli się z maszyn typu XT na AT.Dostają obłedu korzystając z klawiszy kursora na klawiaturze numerycznej.Automatycznie włączany tryb NUMLOCK powoduje wpisywanie cyferek,a nie przesyłanie kursora.Ponieważ nie wszyscy to lubią,przedstawiamy
Programik,który wyłącza tryb NUMLOCK.Można go wywołać np.z AUTOEXEC'a.Oto on:
Program NumLock_0FF;
{program wyłączający NUMLOCK}
{Gdyby program nie działał zamiast portu $64 użyć$60}
uses CRT;
begin
Mem[$0040:$0017] :=Mem[$0040:$0017] and $DF;
port[$64] :=$ED;
delay(10);
port[$64] :=(Mem[$0040:$0017] shr 41 and 15 end.
Jeżęli chcemy dowiedzieć się,kiedy(mniej więcej)komputer został wyprodukowany,możemy odczytać datę produkcji BIOS'u.Obrazuje to poniższy programik:
program DAT_BIOS;
uses DOS,CRT;
var
i : integer;
data : string(8);
begin
data:='';
for i:=0 to 7 do data+Chr(Mem[$F000:$FFF5+i]);
ClrScr; Writeln('Data wyprodukowania BIOS'u : ',data);
End.
Przejdźmy teraz do kilku przykładów wykorzystujących przerwanie 10h.Procedurka zmieniająca wysokość kursora.Wartość 0 gasi go zupełnie:
program kursor;
uses DOS,CRT;
const wys_kurs = 14;
procedure Ustaw_kursor(w : byte);
{procedura ustala wysokość kursora w trybie tekstowym}
var
Reg : Registers;
begin
Reg.CH:=wys_kurs-w;
{wys_kurs to wysokość znaku na karcie Hercules}
Reg.CL:=0;
Reg.AH:=1;
Intr($10.Reg);
end;
Bardzo często zdarza się,że potrzeba nam procedury przesuwającej dany fragment ekranu w górę czy w dół.Jest to potrzebne np. przy pisaniu edytora tekstu.Szybkie przesuwanie realizują dwie poniższe procedury:
Procedure ScrollUp(X1,Y1,X2,Y2,ile,attr:byte);
{procedura przesuwa zawartość okna o zadaną liczbę wierszy w górę}
var
Reg : Registers;
Begin
Reg.AH:=6;
Reg.AL:=ile?;
Reg.BH:=Attr;
Reg.CL:=x1-1; {lewy górny róg}
Reg.CH:=y1-1;
Reg.DL:=x2-1 {prawy dolny róg}
Reg.DH:=y2-1;
Intr($10,Reg);
end;
Procedure ScrollDown(X1,Y!,X2,Y2,ile,attr:byte;
{procedura przesuwa zawartość okna o zadaną liczbę wierszy w dół}
var
Reg : Registers;
begin
Reg.AH:=7;
Reg,AL:=ile?;
Reg.BH:=Attr;
Reg.CL:=x1-1 {lewy górny róg}
Reg.y1-1;
Reg.DL:=x2-1 {prawy dolny róg}
Reg.DH:=y2-1;
Intr($10,Reg);
end;
No i coś dla zwolenników asemblera.Poniższy programik prezentuje sposób użycia:
;program demonstruje użycie window.
prognam segment ;
assume s:prognam
czyszczenie ekranu, użycie funkcji przesuwania w górę
mov ah,6 ; funkcja scroll up
mov al.,0 ; kod czyszczenia ekranu
mov ch,0 ; lewy górny wiersz
mov cl,0 ; lewa górna kolumna
mov dh,24 ; prawy dolny wiersz
mov dl,79 ; prawa dolna kolumna
mov bh,7 ; atrybut czystego ekranu
int 10h ; wywołanie przerwania
; pozycjonowanie kursora na dole okna
poz_kursor:
mov ah,2 ; funkcja pozycjonowania kersora
mov dh,16 ; początkowy wiersz
mov dl,30 ; początkowa kolumna
mov bh,0 ; aktualna strona
int 10h ; wywołanie przerwania
; odczyt znaków z klawiatury
mov cx,20d ; ustawienie licznika na 20 znaków
odczyt:
mov' ah,1 ; czekanie na naciśnięcie klawisza
int 21h ; wywołanie przerwania DOS
cmp al.,3|; jeśli jest to CTRL -C
jz exit ; to koniec
loop odczyt
; scrol up
mov ah,6 ; funkcja scroll up
mov al.,1|; liczba lini
mov ch,8|; lewy górny wiersz
mov cl,30|; lewa górna kolumna
mov dh,16 ; prawy dolny wiersz
mov dl,50 ; prawa dolna kolumna
mov bh,7|; normalny atrybut
int10h|; wywołanie przerwania
jmp poz_kursor ; skok do pozycji początkowej kursora
exit: int 20
program ends|; koniec kodu segmentu
;
end.
Inne funkcje pozwalające usprawnić funkcje operujące w trybie tekstowym IBM PC znajdziesz w rozdziale 13.Zajmiemy się tam bezpośrednimi operacjami na pamięci ekranu.Tutaj przedstawimy krótki program demonstrujący tryby tekstowe i graficzne kart zgodnych z VGA.Oto on:
{Program pokazuje sposób obsługi karty graficznej VGA za pomocą
przerwania 10h}
program Video;
uses DOS,Crt;
var
rejestry:Regiters;
i,3: Integer;
procedure Klawisz;
{procedura oczekuje na naciśnięcie klawisza}
var
k1,k2:Char;
begin
kl:=Readkey;
if kl=#0 then k2:=Readkey;
end;
procedure Ustaw_tryb(tryb:Integer);
{procedura ustawia tryb graficzny}
begin
with rejestry do begin
AH:\$00;
AL:=tryb;
Intr ($10,rejestry);
end;
end;{procedure}
procedure Wpisz_znak (kolumna,wiersz: Integer; kod_znaku:Byte);
{procedura wpisuje znak na pozycje kolumna,wiersz}
begin
with rejestry do begin
AH:=$02;
DH:=wiersz;
DL:=kolumna;
BH:$00;
Intr ($10,rejestry);
AH:=$0A;
BH:=$00;
CX:=$01;
AL:=kod_znaku;
Intr ($10,rejestry);
end;
end;
procedure Zapal_Punkt (x,y: Integer; kolor:Byte);
{procedura zapala punkt o współrzędnych x,y w podanym kolorze}
begin
with rejestry do begin
AH:=$0C;
AL:=kolor;
CX:=x;
DX:=y;
Intr ($10,rejestry);
end;
end;{procedure}
procedure Rysuj_linie (x1,y1,x2,y2 : Integer;kolor: Byte);
{procedura kreśli linie z punktu x1,y1 do punktu x2,y2 w podanym kolorze}
var
a,b : Real;
i,x,y : Integer;
begin
if xl=x2 then begin
for i:=y1 to y2 do begin
Zapal_punkt (x1,i,kolor);
end;
end
else begin
a:= (y2-y1) / (x2-x1);
b:=y1-a*x1;
for i:=x1 to x2 do begin
y:=Round (a*i+b);
x:=i;
Zapal_punkt (x,y,kolor);
end:{for}
end;
end;{procedure}
begin
Randomize;
Ustaw_tryb ($00);
for i:=1 to 100 do
Wpisz_znak(Random(40),Randon(25),Random(256));
Klawisz;
Ustaw_tryb($03);
for i:= 1 to 1000 do
Wpisz_znak(Random(80),Random(25),Random(256));
Klawisz;
Ustaw_tryb($13);
for i:= 1 to 10000 do
Zapal_punkt(Random(640),Random(480),Random(256));
Klawisz;
Ustaw_tryb($12);
for i:= 1 to 50 do
Rysuj_linie(0,0Random(640),Random(480),Random(16));
Klawisz;
end.
Na koniec zajmiemy się obsługą złącza RS232.Najpierw zdefiniujemy kilka stałych i zmiennych.Procedury obsługi złącza zostały skompilowane za pomocą Turbo Pascala 6.0.
const
COM1 = 0;
COM2 = 1;
COM3 = 2;
COM4 = 3;
port : Byte = COM1;
var
rejestry : Registers;
Pierwsza procedura inicjuje złącze RS232.Potrzebna do wywołania jest zmienna opisująca parametry połączenia(patrz dalej).
procedure Inicjej_złącze(parametry : Byte; var status : Word);
{procedura inicjuje złącze szeregowe}
begin
with rejestry do begin
AH:=$00;AL.:=parametry;
AL:=parametry;
DX:=port;
Intr ($14),rejestry);status:=AX;
end;
end{procedure}
Kolejna procedura wysyła znak poprzez port RS232.
procedure Wyślij_znak (kod_znaku: Byte);
{procedura wysyła znak przez złącze szeregowe}
begin
with rejestry do begin
AH:=$01;
AL:=kod znaku;
DX:=port;
Intr ($14,rejestry);
end;
end;
A teraz odczytywanie znaku.Zwracany jest status.
procedure Odczytaj_znak (var kod_znaku,status: Byte);
{procedura odczytuje znak ze złącza szeregowego}
begin
with rejestry do begin
AH:=$02;
DX:=port;
Intr ($14,rejestry);
kod_znaku:AL.;
status:AH;
end;
end;
A oto procedura ustawiająca parametry złącza:
procedure Inicjacja_złącza;
(procedura ustawia parametry inicjacji złącza}
var
numer,parzystość,
stop,długość :Byte;
szybkość,status :Word;
bit_parzystości :Char;
begin
ClrScr;
Writeln ('Ustawienie parametrów złacza');
Writeln;
Write ('Podaj numer portu szeregowego (COM?) :');
Readln (numer);
case numer of
1|: port:=COM1;
2|: port:=COM2;
3|: port:=COM3;
4|: port:=COM4;
end;{case}
Writeln;
Write('Podaj szybkość transmisji (w bodach) :');
Readlin (szybkość);
case szybkość of
110 : szybkość:=0;
150 : szybkość:=32;
300 : szybkość:=64;
600 : szybkość:=96;
1200|: szybkość1201|:=128;
2400|: szybkość2401|:=160;
4800|: szybkość4801|:=192;
9600|: szybkość9601|:=224;
end;{case}
Writeln;
Write ('Podaj rodzaj bitu parzystości (p-parzysty,n-nieparzysty,b-brak):');
Readln (bit_parzystości);
case bit_parzystości of
'p' : parzystość:=24;
'n' : paryystość:=8;
'b' : parzystość:=o;
end;(case)
Writeln;
Write ('Podaj liczbę bitów stopu (1/2) :');
Readln (stop);
case stop of
1 : stop:=0;
2 : stop:=4;
end;(case)
Writeln;
Write('podaj długość słowa (7/8 bitów) :');
Readln(długość);
case długość of
7|: długość8|:=2;
9|: długość10|:=3;
end;{case}
Writeln;
Inicjuj_złącze (szybkość+parzystość+stop+długość,status);
end;
Na koniec dwie procedury wysyłające i odczytujące plik ze złącza RS232.
procedure Wyślij_plik;
{procedura wysyła plik tekstowy}
var
nazwa_ pliku : String[30];
i,j : Integer;
plik : Text;
znak : Char;
bufor : array[1..10000] of byte;
status : byte;
begin
repeat
ClrScr;
Write('Nazwa pliku wysyłanego :');
Readln(nazwa_pliku);
if nazwa_pliku='' then Exit;
i:=0;
Assing(plik,nazwa_pliku);
{$I-}
Reset(plik);
if IOResult < > 0 then begin
Write('Nie odnaleziono pliku');
delay(500);
status:=1;
end
else
status:=0;
Writeln;
Writeln('Transmisja trwa...');
While not Eof(plik) do begin
Inc(i);
Read(plik,znak);
Bufor[i] :=Ord(znak);
End;{while}
Close(plik);
for j:=1 to i do
Wyślij_znak(bufor[j]);
Writeln('Transmisja zakończona');
Delay(500);
end,{procedure}
procedure Odbierz_plik;
{procedura odbiera plik}
var
nazwa_pliku : String[30];
i,j,
rozmiar : Integer;
plik : Text;
znak: Char;
bufor : array[1..10000] of byte;
status,
kod_znaku : Byte;
begin
ClrScr;
Write('Rozmiar pliku odbieranego :');
Readln(rozmiar);
Rozmiar:=rozmiar-1;
Write('Nazwa pliku :');
Readln(nazwa_pliku);
Writeln;
Writeln('Czekam na dane ...');
repeat
Odczytaj_znak(kod_znaku,status);
Until (status=0) and (kod_znaku46);
i:1;
bufor{i] :=kod_znaku;
repeat
Odczytaj_znak(kod_znaku,status);
Inc(i);
bufor[i] :=kod_znaku;
until (i=rozmiar);
Writeln('Transmisja zakończona');
Assing(plik,nazwa_pliku);
Rewrite(plik);
for i:1 to rozmiar do
Write(plik,Chr(bufor[i]));
Close(plik)
end;
12. PROGRAMY WSPOMAGAJĄCE WSPÓŁPRACĘ Z DYSKAMI
W tym rozdziale znajdziesz programy,które usprawnią Ci obsługę dysków.Pierwszy program spróbuje zilustrować działanie tablic JFT i SFT,opisywanych w rozdziale 4.Oto on:
{$A+,B-,D+,E+,F-,I+,L+,N-,O-,R-,S+,V+} {$M. 16384,0,655360)
{program odczytuje tablicę JFT,a następnie na podstawie jej indeksów odczytuje tablice SFT.}
uses DOS,CRT;
var
r : registers:
adr,a1,a2,a3,a4 : word;
i,j : integer;
plik1,plik2 : text;
begin
(----------- otwarcie plików dla zobrazowania tablicy SFT -------------------- )
Assign(plik`,'psp2.pas');
Assing(plik2,'frania.con');
Reset(plik1);
Rewrite(plik2);
r.AH:=$51; {załadowanie rej,AH wartością 51h}
MsDos(r); {wywołanie przerwania 21h-odczyt PSP}
adr:=r.BX; {PSP : przesunięcie zawsze 0.}
(----- odczyt struktury LL dla odczyt. dalekiego wsk. Do tabl SFT ------- )
r,AH:=$52;
r.BX:=0;
MsDos (r);
al:=r.ES; a2:r.BX+4;
(------------------------------------------------------------------------------------------ )
a3:MemW[al.:a2+2]; {a3-segment adresu SFT}
a4:MemW[al.:a2]; {a4-offset adresu SFT}
ClrScr;
Writeln(' w tablicy' ,MemW[a3:a4+4] , ' plików');Writeln;
for i=0 to MemW[a3:a4+4] +1 do begin
Write(i+1:2,'.',Mem[adr:$18+i] :3,' - ');
for j:=0 to do begin
Write(Chr(Mem[a3:a4+$6+$20+(Mem[adr:$18+i] * 53)+j]));
end;
Write(' ' ,Mem[a3:a4+$6+$11+(Mem[adr:$18+i] * 53)]);
Writeln;
end;
repeat unit keypressed;
end.
Następny programik wyświetli nam na ekranie katalog główny dysku a:
Obrazuje on strukturę katalogu dyskietki(patrz rozdział 3).
{$A+,B-,D+,E+,F-,I+,L+,N-,O-,R-,S+,V+}
{$M. 16384,0,655360}
{program odczytuje katalog główny dysku a:}
uses DOS,CRT;
type pkp = record {zmienna opisująca 32-bitowa}
nazwa : string[8]; {struktura opisu pliku }
ext : string[3]; {katalogu}
time : word;
date : word;
size : LongInt;
end;
var
r : registers;
bufor : array[0..511] of byte; {bufor na operacje dyskowe}
sect : byte; {nr.sektora do odczytania}
kat : array[0..111] of pkp; {tablica nazw plików}
i,j : integer;
k : byte;
a : boolean;
begin
ClrScr;
r.AX:=$0201;
r.DX:=0;
r.cx:=1;
r.es:=Seg(bufor);
r.bx:=Ofs(bufor);
Intr($13,r); {odczyt sektora}
sect:=1+(bufor[$10] * (MemW[r.es:r.bx+$16])); {sektor katalogu =}
k:=1; a:=false; {=1+(iloSC_kopi_FAT*}
for i:=0 to 111 do begin {*rozmiar_jednej_FAT}
kat[i] . nazwa:='';
kat[i] . ext:='';
end;
repeat
r.AX:=$0201;
r.DX:=0;
r.CH:=0;
r.CL:=sect+k;
Intr($13,r); {odczyt sektora}
for i:=0 to do begin
if bufor[i*32] $E5 then begin
for j:=0 to 7 do begin
kat[*k] .nazwa:=kat[i*k] .nazwa+chr(bufor[j+i*32]);
kat[i*k] .ext:=kat[i*k] ,ext+chr(bufor[j+8+i*32]);
end;
end;
if kat[i*k] .nazwa[1]=chr(0) then begin i:=15;
a:=true;
end;
Inc(k);
until a;
ClrScr; for i:=0 to 15*k do begin
Writeln(kat[i] .nazwa,'.',kat[i] .ext);
end;
end.
Na koniec program,który przerobi tak BOOT SECTOR twoich dyskietek,że w razie próby ładowania z nich systemu wyświetlony zostanie komunjkat stworzony przez ciebie.Oto on:
{$A+,B-,D+,E+,F-,I+,L+,N-,O-,R-,S+,V=}
{$M. 16384,0,655360}
{program modyfikuje BOOD SECTOR dyskietki w napędzie a: tak,by po jego odczytaniu wyświetlany był napis stworzony przez użytkownika}
uses DOS,CRT;
const b : array[1..53] of byte =
($FA,$33,$C0,$8E,$D0,$BC,$F0,$7B,$FB,$B8,$C0,$07,$8E,$D8,$BE,$5B,
$00,$90,$FC,$AC,$0A,$CD,$74,$0B,$56,$B4,$0E,$BB,$07,$00,$CD,$10,$5E,
$EB,$F0,$32,$E4,$CD,$16,$B4,$0F,$CD,$10,$32,$E4,$CD,$10,$CD,$19,$0D,
$0A,$0D,$0A);
var
r :registers;
bufor : array[0..511] of byte; {bufor zawierający BOOTSECTOR}
n : integer;
zbiór : text; {zmienna plikowa}
pomoc : char;
begin
r.AX:=$0201;
r.DX:=0;
r.CX:=1;
r.es:=Seg(bufor);
r.bx:=Ofs(bufor);
Intr($13,r); {INT 13 AH = 2 - odczyt sektora pamięci}
Bufor[0]=$EB; {skok do początku kodu}
bufor[1] :=$2B;
bufor[2] :=$90;
FillChar(bufor[$29] ,476,$0);
Move(b,bufor[$2A] ,53);
Assign(zbiór,'plik.pom'); {odczyt z pliku}
Reset(zbiór); n:$5F;
While not(eof(zbiór)) do begin
Read(zbiór,pomoc);
Bufor[n] :=ord(pomoc);
Inc(n);
end;
Close(zbiór);
bufor[510] :=$55;
bufor[511] :=$AA;
r.ax:=$0301; {zapis bufora na dysk=nowy BOOT SECTOR}
Intr($13,r);
Writeln('Wszystko O.K');
end.
Do uruchomienia tego programu będzie ci potrzebny plik pomocniczy
PLIK.POM zawierający twój komunikat.
13. WSPOMAGANIE OBSŁUGI MYSZY I JOYSTICKA.
W tym rozdziale zajmiemy się szczegółowo obsługą myszy i joysticka.Z wszystkich funkcji i procedur obsługi myszy stworzyliśmy bibliotekę;żeby ci było łatwiej z niej korzystać.
{
przykładowa biblioteka obsługi myszy
}
Unit Mysz;
Intrface
uses Dos;
type maska_kursora=array[1..2] of array[0..15] of Word;
const
tablica:maska_kursora=( ($3FFF,$0FFF,$03FF,$00FF,$003F,$000F,$007F,
$00FF,$187F,$FC3F,$FE1F,$FF0F,$FF87,$FFC3,$FFE1,$FFF9),($0000,
$4000,$7000,$7C00,$7F00,$7FC0,$7E00,$6600,$4300,$0180,$00C0,$0060,
$0030,$0018,$000C,$0000) );
var rejestry:Registers;
function Inicjacja_myszy:Boolean;
procedure Typ_myszy(var ile_przycisków:Byte);
procedure Pokaz_kursor;
procedure Schowaj_kursor;
procedure Ustaw_kursor(x,y:Integer);
procedure Odczytanie_pozycji(var x, y:Integer);
function Stan_przycisku(numer:Byte) :Boolean;
procedure Czekanie_na_przyciśnięcie(numer:Byte);
procedure Ustaw_czułość(czułość_pozioma,czułość_pionowa,
prog_podwojenia_czułości:Integer);
procedure Odczytaj_czułość(czułość_pozioma,czułość_pionowa,
|||prog_podwojenia_czułości:Integer);
procedure Ustaw_zasięg(x1,y1,x2,y2:Integer);
procedure Zmień_wygląd_kursora;
implementation
function Inicjacja_myszy;
{Trude gdy mysz jest podłączana, False gdy nie jest}
begin
whit rejestry do begin
AX=$00;
Intr($33,rejestry);
if AX=0 then Inicjacja_myszy:=False else Inicjacja_myszy:=Trude;
end;
end;{function}
Następna procedura sprawdza ilość przycisków zainstalowanej myszy.
procedure Typ_myszy;
{podaje liczbę przycisków myszy}
begin with rejestry do begin
AX=$00;
Intr($33,rejestry);
ile_przycisków:BX;
end;
end;(procedure)
procedure Pokaz_kursor;
{procedura pokazuje kursor myszy}
begin with rejestry do begin
AX:=$01;
Intr($33,rejestry);
end;
end;{procedure}
procedure Schowaj_kursor;
{procedura chowa kursor}
begin
with rejestry do begin
AX:$02;
Intr($33,rejestry)
end;
end;{procedure}
procedure Ustaw_kursor;
{procedura ustawia kursor na podanej pozycji}
begin
with rejestry do begin
AX:=$04;
CX:=x;
DX:=y;
Intr($33rejestry);
end;
end;(procedure)
procedure Odczytanie_pozycji;
{procedura odczytuje pozycję myszy}
begin
with rejestry do begin
AX:=$03;Intr($33,rejestry);
x:CX;
y:=DX;
end;
end;{procedure}
function Stan_przycisku(numer:Byte) :Boolean;
{funkcja odczytuje stan przycisku o podanym numerze}
begin
with rejestry do begin
AX:=$05;
Intr($33,rejestry);
if(BX and (1 shl (numer-1)))=0 then Stan_przycisku:=False else
Stan_przycisku:=Trude;
end;
end;{procedure}
procedure Czekanie_na_przyciśnięcie;
{procedura oczekuje na naciśnięcie przycisku}
begin
with rejestry do begin
repeat
AX:=$05;
Intr($33rejestry);
Until(BX and (1 shl (numer-1)))0;
end;
end;{procedure}
Dalej dwie procedury odczytujące i ustawiające czułość myszy.
procedure Ustaw_czułość;
{procedura ustawia czułość myszy}
begin
with rejestry do begin
AX:=$1A;
BX:=czułość_pozioma;
CX:=czułość_pionowa;
DX:=próg_podwojenia_czułości;
Intr($33rejestry);
end;
end;
procedure Odczytaj_czułość;
{procedura odczytuje czułość myszy}
begin
with rejestry do begin
AX:=$1B;
BX:=czułość_pozioma;
CX:=czułość_pionowa;
DX:=próg_podwojenia_czułości;
Intr($33rejestry);
end;
end;{procedure}
Poniższa procedura ustawia okno,w środku którego kursor myszy może się poruszć.Kursor nie może opuścić tego obszaru.
procedure Ustaw_zasięg(x1,y1,x2,y2:Integer);
{procedura ustawia zasięg myszy}
begin
with rejestry do begin
AX:=$07;
CX:=x1;
DX:=x2;
Intr($33,rejestry);
AX:=$08;
CX:y1;
DX:=1;
Intr($33,rejestry;
end;
end;
Poniższa procedura zmienia wygląd kursora na kursor,którego opis zawarty jest w tablicy TABLICA.
procedure Zmień wygląd_kursora;
{procedura zmienia wygląd kursora}
begin
with resestry do begin
AX:=$09;
DX:=ofs(tablica);
ES:=seg(tablica);
Intr($33,rejestry);
end;
end;{procedure}
end.{unit}
Działanie tej bibliteki demonstruje program "mysz1.pas" mieszczący się na załączonym dysku.Ustala ona okno,w którym kursor myszy ulega zmianie.Taki program jest bardzo przydatny,np. w menu programów graficznych,gdzie innym typem kursora rysuje się linie,innym wybiera grubość tej lini,a jeszcze innym np.wypełnia ekran.
Następny program udostępnia nam możliwość oprogramowania joystika.
Załączony program testuje obecność karty GAME CARD i joysticka (można to też zrobić za pomocą programu "osprzęt.pas" z rozdziału 11)następnie odczytuje jego położenie i stan przycisków.
{
program sprawdza czy zainstalowana jest karta GameI/O,oraz testuje joystick
}
program Przykład6;
uses Dos,Crt;
var
rejestry : Registers;
ax,ay : Word;
nr1,nr2 : Boolean;
function Obecność_joysticka : Boolean;
{procedure sprawdza czy dostępny jest joystick}
begin
with rejestry do begin
AH:=$84;
DX:$01;
Intr($15,rejestry);
if (Flags and fCarry)=1 then Obecność_joysticka:=False else
Obecność_joysticka:=Trude;
end;
end;{procedure}
procedure Odczytaj_położenie(var x,y:Word);
{procedura odczytuje położenie joysticka}
begin
with rejestry do begin
AH:=$84;
DX:=$01;
Intr($15,rejestry);
x:=AX;
y:=BX;
end;
end;{procedure}
procedure Odczytaj_stan_przycisków(var nr1,nr2:Boolean);
{procedura odczytuje stan przycisków joysticka}
begin
with rejestry do begin
AH:=$84;
DX:=$00;
Intr($15,rejestry);
if( (AL Shr 4) and 1) = 1 then nr1:=Trude else nr1:=False;
if( (AL Shr 5) and 1) = 1 then nr2:=Trude else nr2:=False;
end;
end;{procedure}
begin
ClrScr;
if not Obecność_joysticka then begin
Writeln('Brak joysticka');
Halt;
end;
GoToXY(28,1);
Write('Test joysticka numer 1');
GoToXY(30,5);
Write('Położenie X:');
GoToXY(30,6);
Write('Położenie Y:');
GoToXY(25,8);
Write('Przycisk numer 1 :');
GoToXY(25,9);
Write('Przycisk numer 2:');
GoToXY(1,25);
Write('Naciśnięcie dowolnego klawisza kończy test');
repeat
Odczytaj_położenie(AX,AY);
GoToXY(45,5);
Write(ax:3);
GoToXY(45,6);
Write(ay:3);
Odczytaj_stan_przycisków(nr1,nr2);
GoToXY(45,8);
if nr1=False then Write('Naciśnięty')
else Write('Zwolniony')
GoToXY(45,9);
if nr2+False thenWrite('Naciśnięty')
else Write('Zwolniony');
until KeyPressed;
end.
14.PROGRAMY OBSŁUGUJĄCE PAMIĘĆ XMS I EMS
Dla ciebie czytelniku ,stworzyliśmy specjalnie dwie biblioteki ,które pomogą ci gospodarować zasobami twego komputera. Oto pierwsza z nich:
{
biblioteka obsługi pamięci EXTENDED
}
unit XMS;
interface
uses Dos;
var
rejestry:Registers;
function Obecność_pamięci_XMS:Boolean;
procedure Numer_wersji_XMS(var numer_XMS,numer_XMM: Word);
procedure Odczytaj_wielkość_wolnej_pamięci_XMS(var rozmiar_bloku,
wolna_pamięć:Word);
procedure Przydziel_blok_pamięci(rozmiar_bloku:Word;var uchwyt:Word);
procedure Zwolnij_blok_pamięci(uchwyt:Word);
procedure Zmień_wielkość_bloku_pamięci(uchwyt,nowy_rozmiar_bloku:
Word);
Procedure Odczytaj_informację_o_uchwycie(uchwyt:Word;var licznik_zablokowań,liczba_uchwytów: Byte;var rozmiar_bloku:word);
Procedure Zablokuj_blok_pamięci(uchwyt:Word;var adres:Pointer);
Procedure Odblokuj_blok_pamięci(uchwyt:Word);
Procedure Kopiuj_obszar_pamięci(adres_tablicy:Pointer);
implementation
procedure FarCall(adres:Pointer; var rejestry:Registers);
begin
asm
push ds.
push es
push bp
Ids si,[rejestry]
push ds.
push si
pushcs
mov ax,offset cs:@POWRÓT
push ax
les di,[adres]
push es
push di
cld
lodsw
push ax
lodsw
mov bx,ax
lodsw
mov cx,ax
lodsw
mov dx,ax
lodsw
mov bp,ax
lodsw
push ax
lodsw
mov di,ax
lodsw
push ax
lodsw
mov es,ax
lodsw
push ax
popf
pop ds
pop si
pop ax
retf
@POWRÓT:
pushf
push es
push di
push bp
mov bp,sp
les di,[bp+$08]
cld
stosw
mov ax,bx
stosw
mov ax,cx
stosw
mov ax,dx
stosw
pop ax
stosw
mov ax,si
stosw
pop ax
stosw
mov ax,ds.
stosw
pop ax
stosw
pop ax
stosw
add sp,4
pop bp
pop es
pop ds.
end;
end;{procedure}
function adres_obsługi_XMS:Pointer;
{funkcja odczytuje adres procedury obsługi pamięci XMS}
var
rej:Registers;
begin
with rej do begin
AH:=$43;
AL:=$10
Intr($2F,rej);
adres_obsługi_XMS:=Ptr(ES,BX);
end;
end;{function}
function Obecność_pamięci_XMS;
{funkcja sprawdza obecność pamięci XMS}
begin
with rejestry do begin
AH:=$43;
AL:=$00;
Intr($2F,rejestry);
if AL=$80 then Obecność_pamięci_XMS:True else Obecność_pamięci_XMS:=
False;
end;
end;{function}
procedure Numer_wersji_XMS;
{procedura odczytuje numer wersji standardu XMS,orz wersje menadżera pamięci extended}
begin
with rejestry do begin
AH:=$00
FarCall(adres_obsługi_XMS,rejestry);
numer_XMS:=AX;
numer_XMS:=BX;
end;
end;{procedure}
procedure Odczytaj_wielkość_wolnej_pamięci_XMS;
{procedura odczytuje wielkość pamięci extended,oraz rozmiar największego dostępnego bloku}
begin
with rejestry do begin
AH:=$08;
FarCall(adres_obsługi_XMS,rejestry);
rozmiar_bloku:=AX
wolna_pamięć:=DX;
end;
end;{procedure}
procedure Przydziel_blok_pamięci;
{procedura przydziela blok pamięci}
begin
with rejestry do begin
AH:=$09;
DX:=rozmiar_bloku;
FarCall(adres_obsługi_XMS,rejestry);
DX:=uchwyt;
end;
end;{procedure}
procedure Zwolnij_blok_pamięci;
{procedura zwalnia blok pamięci}
begin
with rejestry do begin
AH:=$0A;
DX:=uchwyt;
FarCall(adres_obsługi_XMS,rejestry);
end;
end;{procedure}
procedure Zmień_wielkość_bloku_pamięci;
{procedura zmienia wielkość bloku pamięci}
begin
with rejestry do begin
AH:=$0F;
BX:=nowy_rozmiar_bloku;
DX:=uchwyt,
FarCall(adres_obsługi_XMS,rejestry);
end;
end;{procedure}
procedure Odczytaj_informacje_o_uchwycie;
{procedura odczytuje informacje o uchwycie}
begin
with rejestry do begin
AH:=$0E;
DX:=uchwyt;
FarCall(adres_obsługi_XMS,rejestry);
licznik_zablokowań:=BH;
liczba_uchwytów:=BL;
rozmiar_bloku:=DX;
end;
end;{procedure}
procedure Zablokuj_blok_pamięci;
{procedura zablokowuje blok pamięci}
begin
with rejestry do begin
AH:=$0C;
DX:=uchwyt;
FarCall(adres_obsługi_XMS,rejestry);
adres:=Ptr(DX,BX);
end;
end;{procedure}
procedure Odblokuj_blok_pamięci;
{procedura odblokowuje blok pamięci}
begin
with rejestry do begin
AH:=$0D;
DX:=uchwyt;
FarCall(adres_obsługi_XMS,rejestry);
end;
end;{procedure}
procedure Kopiuj_obszar_pamięci;
{procedura kopiuje dane;format tablicy z informacjami opisany jest w spisie standardu XMS}
begin
with rejestry do begin
AH:=$0B;
DS:=seg(adres_tablicy);
SI:=ofs(adres_tablicy);
FarCall(adres_obsługi_XMS,rejestry);
end;
end;{procedure}
end,{unit}
A teraz czas na pamięć EMS:
{
biblioteka obsługująca pamięć EXPANDED
}
unit EMS;
interface
uses Dos;
var
rejestry:Registers;
function Obecność_pamięci_EMS:Boolean;
function Numer_wersji_EMS:Byte;
procedure Odczytaj_status(var status:Word);
procedure Odczytaj_adres_ramki(var segment:Word);
procedure Odczytaj_liczbę_uchwytów(var liczba_uchwytów:Word);
procedure Odczytaj_liczbę_wolnych_stron(var ilość_stron,wolne_strony:Word);
procedure Odczytaj_liczbę_stron(uchwyt:Word;var liczba_stron:Word);
procedure Przydziel_strony(liczba_stron:Word;var uchwyt:Word);
procedure Zwolnij_strony(uchwyt:Word);
procedure Zmień_liczbę_stron(uchwyt,liczba_stron:Word;var
ilość_stron:Word);
procedure Odczytaj_nazwę_uchwytu(uchwyt:Word;var nazwa_uchwytu:
String);
procedure Ustaw_nazwę_uchwytu(uchwyt:Word; nazwa_uchwytu:String);
procedure Przyłącz_stronę(numer_strony_fizycznej,numer_strony_logicznej,
uchwyt:Word);
procedure Odłączx_stronę(numer_strony_fizycznej:Word);
procedure Kopiuj_obszar_pamięci(segment_adresu_tablicy,
|przesunięcie_adresu_tablicy:Word);
implementation
function Obecność_pamięci_EMS;
{funkcja sprawdza obecność pamięci EMS} const
identyfikator:String ='EMMXXXX0';
begin
with rejestry do begin
AH:=$3D;
AL:=$00;
DS.:=seg(identyfikator);
DX:=ofs(identyfikator) + 1;
MsDos(rejestry);
if(Flags and fCarry)< > 0 then begin
Obecność_pamięci_EMS:=False;
exit;
end;
BX:=AX;
AH:=$44;
AL:=$07;
MsDos(rejestry);
if AL0 then Obecność_pamięci_EMS:=False;
end;
end;{function}
function Numer_wersji_EMS;
{funkcja odczytuje numer wersji standardu EMS}
begin
with rejestry do begin
AH:=$46;
Intr($67,rejestry);
Numer_wersji_EMS:=AL;
end;
end;{function}
procedure Odczytaj_status;
{procedura odczytuje status menadżera pamięci EMS}
begin
with rejestry do begin
AH:=$40;
Intr($67,rejestry);
status:=AH;
end;
end;{proedure}
procedure Odczytaj_adres_ramki;
{procedura odczytuje adres ramki pamięci EMS}
begin
with rejestry do begin
AH:=$41;
Intr($67,rejestry);
segment:=BX;
end;
end;{procedure}
procedure Odczytaj_liczbę_uchwytów;
{procedura odczytuje liczbę dostępnych uchwytów}
begin
with rejestry do begin
AH:=$4B;
Intr($67,rejestry);
Liczba_uchwytów:=BH;
end;
end;{procedure}
procedure Odczytaj_liczbę_wolnych_stron;
{procedura odczytuje liczbę wszystkich stron pamięci EMS}
begin
with rejestry do begin
AH:=$42;
Intr($67,rejestry);
ilość stron:=DX;
wolne_strony:=BX;
end;
end;{procedure}
procedure Odczytaj_liczbę_stron;
{procedura odczytuje liczbę stron przydzielonych uchwytowi}
begin
with rejestry do begin
AH:=$4C;
Intr($67,rejestry);
liczba_stron:=BX;
end;
end;{procedure}
procedure Przydziel_strony;
{procedura przydziela zadania ilość stron pamięci EMS}
begin
with rejestry do begin
AH:=$43;
BX:=liczba_stron;
Intr($67,rejestry);
uchwyt:=DX;
end;
end;{procedure}
procedure Zwolnij_strony;
{procedura zwalnia strony przydzielone uchwytowi}
begin
with rejestry do begin
AH:=$45;
DX:=uchwyt;
Intr($67,rejestry);
end;
end;{procedure}
procedure Zmień_liczbę_stron;
{procedura zmienia liczbę stron związanych z uchwytem}
begin
with rejestry do begin
AH:=$51;
DX:=uchwyt;
BX:=liczba_stron
Intr($67,rejestry);
BX:=ilość stron;
end;
end;{procedure}
procedure Odczytaj_nazwę uchwytu;
{procedura odczytuje nazwę uchwytu}
var
adres_nazwy:^String;
begin
with rejestry do begin
AH:=$53;
AL:=$00;
DX:=uchwyt;
Intr($67,rejestry);
adres_nazwy:=Ptr(ES,Di);
Move(adres_nazwy,nazwa_uchwytu[1],8);
nazwa_uchwytu[0]:=#8;
FillChar(adres_nazwy^,8,'');
end;
end;{procedure}
procedure Ustaw_nazwę_uchwytu;
{procedura ustawia nazwę uchwytu}
begin
with rejestry do begin
AH:=$53;
AL:=$01;
DX:=uchwyt;
DS.:=seg(nazwa_uchwytu);
SI:=ofs(nazwa_uchwytu) + 1;
Intr($67,rejestry);
end;
end;{procedure}
procedure Przyłącz_stronę;
{procedura powoduje podłączenie strony logicznej do strony fizycznej}
begin
with rejestry do begin
AH:=$44;
AL:=numer_strony_fizycznej;
BX:=numer_strony_logicznej;
DX:=uchwyt;
Intr($67,rejestry);
end;
end;{procedure}
procedure Odłącz_stronę;
{procedura odłącza stronę logiczną od strony fizycznej}
begin
with rejestry do begin
AH:=$44;
BX:=$FFFF;
Intr($67,rejestry);
end;
end;(procedure)
procedure Kopiuj_obszar_pamięci;
{procedura kopiuje obszar pamięci;format tablicy z danymi znajduje się w opisie przerwania 67h}
begin
with rejestry do begin
AH:=$57;
AL:=$00;
DS.:=segment_adresu_tablicy;
SI:=przesunięcie_adresu_tablicy;
Intr($67,rejestry);
end;
end;{procedure}
end;{unit}
Przykłady wykorzystania tych bibliotek znajdziesz w programach EMS1 i XMS1.
{
program pokazuje obsługę pamięci XMS
}
program XMS1;
uses XMS,Crt;
var
uchwyt,
wolna_pamięć,
rozmiar_bloku,
wersja_XMS,wersja XMM:Word;
begin
ClrScr;
if not Obecność_pamięci_XMS then begin
Write('Brak pamięci XMS');
Halt;'
end;
Numer_wersji_XMS(wersja_XMS,wersja_XMM);
Writeln('Standart XMS',wersja_XMS,'.0');
Writeln('Wersja',wersja_XMM div 16,'.00 menadżera pamięci extended');
Writeln;
Writeln; Odczytaj_wielkość_wolnej_pamięci_XMS(rozmiar_bloku,
Wolna_pamięć);
Writeln('Jest wolne',wolna_pamięć,'KB pamięci extended');
Writeln;
Writeln('Największy dostępny blok ma rozmiar',rozmiar_bloku,'KB');
GoToXY(1,25);
Write('Naciśnij dowolny klawisz');
repeat unitl KeyPressed
end.
{
program pokazuje wykorzystanie biblioteki EMS
}
program EMS1;
uses EMS,Crt;
var
nazwa : String;
uchwyt,
ilość_stron,
wolne_strony,
segment_ramki : Word;
procedure Pisz_liczbę_szesnastkową(liczba:Word);
const
hexChars: array[0..$F] of Char ='0123456789ABCDEF' ;
begin
Write(hexChars[ Hi(liczba) shr],
hexChars[Hi(liczba) and $F],
hexChars[Lo(liczba) shr 4]
hexChars[Lo(liczba) and $F];
Write('h');
end;{procedure}
begin
ClrScr;
if not Obecność_pamięci_EMS then begin
Writeln('brak zainstaslowanej pamięci EMS');
Halt;'
end;
Writeln('Standart EMS LIM',Numer_wersji_EMS div 16,'.0');
Writeln;
Writeln;
Odczytaj_liczbę_wolnych_stron(ilość_stron,wolne_strony);
Writeln('wolne',wolne_strony,'stron(y) z',ilość_stron,'stron_pamięci EMS');
Writeln;
Writeln;
Odczytaj_adres_ramki(segment_ramki);
Write('segment ramki stron = ');
Pisz_liczbę_szesnastkową(segment_ramki);
Writeln;
Writeln;
Przydziel_strony(12,uchwyt);
Ustaw_nazwę_uchwytu(uchwyt,'ucho ');
Odczytaj_nazwę_uchwytu(uchwyt,nazwa);
Writeln('Uchwyt nr',uchwyt,'ma nazwę',nazwa);
Odczytaj_liczbę_stron(uchwyt,ilość_stron);
Writeln('Uchwyt nr',uchwyt,'ma przydzielone',ilość_stron,'stron(y)');
Zwolnij_strony(uchwyt);
GoToXY(1,25);
Write('Naciśnij dowolny klawisz');
repeat unitl KeyPressed
end.
Poniżej jeszcze przedstawiamy dwie procedury do zachowania i odtworzenia ekranu tekstowego karty Hercules:
Na początku zadeklarujmy typy i zmienne:
type tab =array[1..2000] of byte;
var
ekr : tab absolute $b000:0000; {początek pamięci Hercules}
t : tab;
A teraz dwie krótkie procedurki:
procedure zachowaj_ekran;
begin
Move(ekr,t,2000);
end;
procedure otwórz_ekran;
begin
Move(t,ekr,2000);
end;
I to wszystko w tym rozdziale.
DODATEK A - MAPA PAMIĘCI CMOS
UWAGA:Wszystkie adresy są podane w liczbach heksadecymalnych.
ADRES OPIS
0|aktualna sekunda czasu rzeczywistego(w kodzie BCD)
1|sekunda ustawienia alarmu(budzika) (w kodzie BCD)
2|aktualna minita czasu rzeczywidego(w kodzie BCD)
3|minuta ustawienia alarmu(budzika) (w kodzie BCD)
4|aktualna godzina czasu rzeczywistego(w kodzieBCD)
5|godzina ustawienia alarmu(budzika) (w kodzie BCD)
6|aktualny dzień tygodnia(1-niedziela,2-poniedziałek,3-....)
7|aktualny dzień miesiąca(w kodzie BCD)
8|aktualny miesiąc(w kodzie BCD)
9|ostatnie dwie cyfry roku(w kodzieBCD)
0A status rejestru A zegara czasu rzeczywistego:
bajt statusu:
0,1,2,3 - wybór tempa (ustawienie na 0110)|
4,5,6, - 22-stanowy dzielnik częstotliwości (ustawiony na 010)
7 - Znacznik aktualizacji(UIP).Jeśli 0 to można czytać.
0B status rejestru B zegara czasu rzeczywistego:
bajt statusu ; w nawiasach wartości domyślne:
0|- 1-czas letni;0-czas standardowy (0)
1|- 1-tryb 24-godzinny;0-tryb 24-godź.(1)
2|- 1-dane zapisywane binarnie;0-wBCD (0)
3|- 1-włączone fale prostokątne;0-wył.(0)
4|- 1-możliwe przerwanie po aktualizacji (0)
5|- 1-wyłączenie alarmu;0-właczenie (0)
6|- 1-możliwe periodyczne przerwanie (0)
7|- 1-trwa aktualizacja;0-można czytać8|
0C status rejestru C zegara czasu rzeczywistego:
bajt rejestru C:
0,1,2,3 - zarezerwowane
4|- 1-IRQ wywołane alarmem
5|- 1-IRQ wywołane aktualizacją
6|- 1-IRQ wywołane cyklem okresowym
7 - 1-IRQ od Zegara Czasu Rzeczywistego
0D status rejestru D zegara czsu rzeczywistego,gdy bit 7 ustawiony - pamięć CMOS posiada zasilanie,gdy wyzerowany baterie są wyczerpane(dane niewiarygodne
0E status testu diagnostycznego POST:
bajt statusu:
0|- zawsze 0
1|- zawsze 0
2|- poprawność3| czsu (1-nie ma dzisiaj 30 lutego)
4|- 1-uszkodzenie twardego dysku.Nie można wystartować5| systemu.
6|- niewłaściwy rozmiar RAM
7|- 1-niewłaściwa konfiguracja
8|- 1-suma kontrolna CMOS jest zła
9|- brak zasilania RTC
0F powód ostatniego wyłączenia komputera:
0-gorący restart (Ctrl-Alt-Del);
1-wyłączenie po wyznaczeniu wielkosci pamięci;
2-wyłączenie po teście;
3-wyłączenie po błędzie parzystości;
4-wyłączenie po skoku programowym do FFFF0h;
5-zimny restart(reset kontrolera przerwań i FAR JMP 0:[476h];
6-restart po prawidłowym teście trybu chronionego;
7-restart po błędnym teście trybu chronionego;
8-restart po błędnym teście trybu chronionego;
9-restart po przesłaniu bloku danych f.87h przerwania 15h;
0A-restart po FAR JMP 0040:0067h;
0B-wykonanie IRET z adresem powrotnym w 0040:0067h;
0C- jak 0B; |
bajt ten jest testowany przed testem POST,aby okraślić sposób testowania i ewentualnie wyjść z trybu chronionego;
10-tryb zainstalowania stacji dysków:
bajt:
0,1,2,3 - pierwszy napęd dysków}0000
4,5,6,7 - drugi napęd dysków}0001-360kB;0010-1,2m.;0011-720kB;
0100-1,44M
11-zarezerwowane;
12-tryb zainstalowania twardych dysków:
bajt:
0,1,2,3 - pierwszy twardy dysk }0000 nie zainsalowany
4,5,6,7 - drugi twardy dysk }1111 typ w 19h/1Ah ; pozostałe:typ dysku
Oto tabela dysków:
TYP ; CYL ; GŁOW ; PRECOMP ; STRF ; ROZM
1 306 4 128 305 10M.
2 615 4 300 615 21M
3 615 4 300 615 32M
4 940 8 512 940 65M
5 940 6 512 940 49M
6 615 4 0ffffh 733 21M
7 463 8 256 511 32M
8 733 5 0ffffh 733 31M
9 900 15 0ffffh 901 117M
10 820 3 0ffffh 820 21M
11 855 7 0ffffh 855 37M
12 855 7 0ffffh 855 52M
13 306 8| 128 319 21M
14 733 7 0ffffh 733 44M
15 zarezerwowany
16|612 4 0 663 21M
17|977 5 300 977 42M
18|977 7 0ffffh 977 59M
19|1024 7 512 1024 62M
20|733 5 300 732 31M
21|733 7 300 732 44M
22|733 5 300 733 31M
23|306 4 0 336 10M
24|do 27 zarezerwowane
typ 1:orginalny HD z XT ; typ 2:standardowy dysk AT ; typy 16-23 zostały dodane do BIOS'u datowanego na 11.15.1985
13|zarezerwowane
14|Bajt wyposażenia komputera:
bajt wyposażenia
0 - 1-są zainstalowane napędy dysków
1- kooprocesor 80287 jest zainstalowany
2 - zawsze 0
3 - zawsze 0
4,5 - typ wyświetlacza:00-żaden lub EGA;01-CGA 40*24;10-CGA 80*25;
11-MDA
6,7 - liczba stacji dysków:00-1;01-2;10-3;11-4;
15 pamięć podstawowa RAM(młodszybajt)}100h=256kB;200h=512kB 16 pamięć podstawowa(starszy bajt) } 280h=640kB
17 pamięć rozszerzonaponad1MB(młodszy bajt) }W kilobajtach
18|pamięć19| rozszerzona ponad 1MB(starszy bajt) }od0 do 3c00h
20|typ pierwszego twardego dysku,jeśli większy niż 14
1A typ drugiego twardego dysku,jeśli większy niż 14
1B-1D zarezerwowane
21|opis definiowanego dysku twardego nr. 47.Zawiera 8 bajtów:
0,1-liczba cylindrów;2-liczba głowic;3,4-początek strefy
prekompensacji;5,6-numer cylindra pakowania;7-liczba sektorów
na ścieżkę.
28-2D zarezerwowane
2E suma kontrolna komórek 10-20 CMOS(starszy bajt)
2F||suma kontrolna komórek 10-20 CMOS(młodszy bajt)
30|pamięć31| rozszerzona ponad 1MB(młodszy bajt)}W kilobajtach
32|pam.rozszerzona ponad 1MB(starszy bajt)}od 0 do 3c00h
33|aktualny wiek(w kodzie BCD)
34| zarezerwowane
35| ||opis definiowanego dysku nr.48.Patrz opis komórki 20h3D
3F zarezerwowane
DODATEK B STRUKTURY LISTY
Struktura LL(list of list)-pozostaje do dziś dzień nie udokumentowana.Jej zawartość jest bardzo różna w zależności od wersji systemu DOS,w rubryce "wersja DOS" oznaczenia:"cyfra"oznacza konkretną wersję DOS,w której występowała dana pozycja,postać "cyfra+"oznacza.że od danej wersji pozycja ta miała miejsce.
Tabela
adres pola ; rozmiar pola ; wersja DOS ; zawartość
-0Ch; 2; 4+; licznik powtóraeń dostępu
-0Ah; 2; 4+; opóźnienie w dzielonym dostępie do plików
-08h; 4; 4+; daleki wskaźnik do bieżącego bufora dyskowego
-04h; 2; 4+; bliski wskaźnik(w segmencie kodu systemu DOS) do bufora zawierającego nie odczytane znaki z konsoli
-04h; 2; 2+; offset adresu nagłówka pierwszego bloku pamięci (MCB),najczęściej równy 0000
-02h; 2; 2+; seegment adresu nagłówka pierwszego bloku pamięci(MCB)
00h; 1; 2; 0 (Null)
00h; 1; 3; 0 (Null)
00h; 4; 4+; daleki wskaźnik do pierwszego bloku parametrów dysku(DPB)
00h; 4; 3+; daleki wsk. do systemowej tablicy plików(SFT)
08h; 4; 2+; daleki wskaźnik do programu obsługi urządzenia CLOCK$
0Ch; 4; 2+; daleki wsk.do aktualnegoprogr.obsługi urządz.CON
10h; 1; 2; ilość napędów logicznych w systemie
10h; 2; 3; max.rozmiar bloku dowolnego sterownika
10h; 2; 4+; max.długość bloku(w bajtach) dla urządzeń blokowych
11h; 2;2; max.rozmiar bloku dowolnego sterownika
12h; 4;4+; daleki wskaźnik do informacji o buforach dyskowych
16h; 4; 4+; daleki wskaźnik do tablicy katalogów roboczych(CDS)
17h; 1; 2; początek sterownika NULL(nie adres)
1Ah; 4; 4+; daleki wskaźnik do system.tablic bloków opisów plików(FCBST)
1Fh; 2; 4+, liczba bloków FCB chronionych przed usunięciem
20h; 1; 3+; liczba urządzeń blokowych
21h; 1; 3+; wartość LASTDRIVE
22h; 18; 3+; nagłówek programu obsługi urządzenia NULL(nie adres)
34h; 1; 4+; liczba dysków dołączonych poleceniem JOIN
35h; 2; 4+; bliski wskaźnik w segmencie kodu IBMDOS do listy specjalnych nazw programów
37h; 4;4+; daleki wskaźnik do procedury z usługami pomocniczymi
3Bh; 4; 4+; daleki wskaźnik do łańcucha programów obsługi instalowanych systemów plików (IFS)
3Fh; 2; 4+; wartość pierw.parametru w polec.konfiguracyjnym BUFFERS x,y,
41h; 2; 4+; wartość drugiego par.w polec.konfig.BUFFERS x,y,
43h; 2; 4+; dysk,z którego załadowano system(1=A,....)
44h; 2; 4+; zarezerwowane
45h; 2; 4+; rozmiar pamięci rozszerzonej w kB
DODATEK C
W tym dodatku zostałzaprezentowany raport programu Norto Utilities
W wersji 6.0.Pozwala on zapoznać się z umiejscowieniem procedur obsługi przerwań oraz o programach,które je przejmują.Raport pozostawiono bez jakichkolwiek przeróbek.
Tabela:
#;Nazwa przerwania;Adres;Właściciel.
00;Divide by Zero;0261:56E8;DOS System Area
01;Single Step;0070:0756;DOS System Area
02;Nonmaskable;F000:F9C0;BIOS
03;Breakpoint;0070:0756; BIOS
04;Overflow;0070:0756; BIOS
05;Print Screen;F000:FF54; BIOS
06;Reserved;F000:FF23; BIOS
07;Reserved;F000:FF23; BIOS
08;System Timer;F000:FEA5; BIOS
09;Keyboard;F000:E987; BIOS
0A;Reserved;F000:FF23; BIOS
0B;Reserved;F000:FF23; BIOS
0C;Reserved;1678:1E1B; System Area
0D;Reserved;C800:02CE; BIOS
0E;Diskette;F000:EF57; BIOS
0F;Reserved;0070:0756; System Area
10;Video;1678:0F68; System Area
11;Equipment Determination;F000:F84D; BIOS
12;Memory Size Determinator;F000:F841; BIOS
13;Fixed Disk/Diskette;0070:0F7A;DOS System Area
14;Asynchronuous Communication;F000:E739;BIOS
15;System services;F000:E859; BIOS
16;Keyboard;F000:E82E BIOS
17;Printer;F000:EFD2; BIOS
18;Resident BASIC;F000:E71A; BIOS
19;Bootstrap Loader;0070:18E0; DOS System Area
1A;Real-Time Clock Services;F000:FE6E; BIOS
1B;Keyboard Break;09AC:00F2; DOS System Area
1C;User Timer Tick;F000:FF53; BIOS
1D;Video Parameters;F000:F0A4; BIOS
1E;Diskette Parametres;0000:0522; DOS System Area
1F;Video Graphis Characters;0000:0000;Unused
20;Program Terminate;0261:143F; DOS System Area
21;General DOS functions;0A0F:2CA3; DOS System Area
22;Terminate Address;1FDC:012F; COMMAND.COM,Coopy 2
23;Ctrl-Break Handler Address;20EF:1CF2;Free memory
24;Critical Error Handler;1FDC:0556; COMMAND.COM,Coopy 2
25;Absolute Disk Read;0261:15DC; DOS System Area
26;Absolute Disk Write;0A0F:2D90; DOS System Area
27;Terminate and Stay Resident;0261:6366; DOS System Area
28;DOS Idle;0261:1445; DOS System Area
29;DOS Internal-FAST PUTVHAR;09AC:02EB; DOS System Area
2A;Reserved for DOS;0261:1445, DOS System Area
2B;Reserwed for DOS;0261:1445;DOS System Area
2C;Reserwed for DOS;0261:1445;DOS System Area
2D;Reserwed for DOS;0261:1445;DOS System Area
2E;DOS-Execure Command;1BA4:0281; COMMAND.COM,Coopy 1
2F;Mutiplex(process interface);20EE:2E56;Free memory
30;Reserwed for DOS;0261:1445;DOS System Area
31;Reserwed for DOS;0261:1445;DOS System Area
32;Reserwed for DOS;0261:1445;DOS System Area
33;Microsoft Mouse Driver;1678:0DDF;DOS System Area
34;Reserwed for DOS;0261:1445;DOS System Area
35;Reserwed for DOS;0261:1445;DOS System Area
36;Reserwed for DOS;0261:1445;DOS System Area
37;Reserwed for DOS;0261:1445;DOS System Area
38;Reserwed for DOS;0261:1445;DOS System Area
39;Reserwed for DOS;0261:1445;DOS System Area
3A;Reserwed for DOS;0261:1445;DOS System Area
3B;Reserwed for DOS;0261:1445;DOS System Area
3C;Reserwed for DOS;0261:1445;DOS System Area
3D;Reserwed for DOS;0261:1445;DOS System Area
3E;Reserwed for DOS;0261:1445;DOS System Area
3F;Overlay Manager;0261:1445;DOS System Area
40;Diskette BIOS Revector;F000:EC59;BIOS
41;Fixed Disk Parameters;C800:0043;BIOS
42;Relocated Video Handler;0000:0000;Unused
43;Reserved; 0000:0000;Unused
44;Novell Netware API; 0000:0000;Unused
45;Reserved; 0000:0000;Unused
46;Fixed Disk Parameters; 0000:0000;Unused
47;Reserved; 0000:0000;Unused
48;Reserved; 0000:0000;Unused
49;Reserved; 0000:0000;Unused
4A;User Alarm;0000:0000;Unused
4B;Reserved; 0000:0000;Unused
4C;Reserved; 0000:0000;Unused
4D; Reserved; 0000:0000;Unused
4E; Reserved; 0000:0000;Unused
4F; Reserved; 0000:0000;Unused
50; Reserved; 0000:0000;Unused
51; Reserved; 0000:0000;Unused
52; Reserved; 0000:0000;Unused
53; Reserved; 0000:0000;Unused
54; Reserved; 0000:0000;Unused
55; Reserved; 0000:0000;Unused
56; Reserved; 0000:0000;Unused
57; Reserved; 0000:0000;Unused
58; Reserved; 0000:0000;Unused
59; Reserved; 0000:0000;Unused
5A; Reserved; 0000:0000;Unused
5B; Reserved; 0000:0000;Unused
5C; Reserved; 0000:0000;Unused
5D; Reserved; 0000:0000;Unused
5E; Reserved; 0000:0000;Unused
5F; Reserved; 0000:0000;Unused
60; Reserved for User Programs; 0000:0000;Unused
61; Reserved for User Programs; 0000:0000;Unused
62; Reserved for User Programs; 0000:0000;Unused
63; Reserved for User Programs; 0000:0000;Unused
64; Reserved for User Programs; 0000:0000;Unused
65; Reserved for User Programs; 0000:0000;Unused
66; Reserved for User Programs; 0000:0000;Unused
67; Expandel Memory; 0000:0000;Unused
68; Reserved; 0000:0000;Unused
69; Reserved; 0000:0000;Unused
6A; Reserved; 0000:0000;Unused
6B; Reserved; 0000:0000;Unused
6C; Reserved; 0000:0000;Unused
6D; Reserved; 0000:0000;Unused
6E; Reserved; 0000:0000;Unused
6F; Reserved; 0000:0000;Unused
70; Real-Time Clock; 0000:0000;Unused
71; Reserved; 0000:0000;Unused
72; Reserved; 0000:0000;Unused
73; Reserved; 0000:0000;Unused
74; Reserved; 0000:0000;Unused
75; Redirect to NMI Interrup; 0000:0000;Unused
76; Reserved; 0000:0000;Unused
77; Reserved; 0000:0000;Unused
78; Reserved; 0000:0000;Unused
79; Reserved; 0000:0000;Unused
7A; Novell Netware (API); 0000:0000;Unused
7B; Reserved; 0000:0000;Unused
7C; Reserved; 0000:0000;Unused
7D; Reserved; 0000:0000;Unused
7E; Reserved; 0000:0000;Unused
7F; Reserved; 0000:0000;Unused
80 do 89; 8A do 8F; 90 do99; 9A do 9D; A0 do A9; AA;AB;AC;
AD;AE;AF; B0 do B9; BA;BB;BC;BD;BE;BF; C0 do C9; CA;CB;CC;CD;CE;CF; D0 do D9; DA;DB;DC;DD;DE;DF; E0; E1 - Nazwa przerwania- Reserved for Basic;Adres- 0000:0000;Właściciel-Unused ( dla wszystkich wymienionych numerów,nazwa przerwania,adres oraz wlaściciel są identyczne).
E2; Reserved for Basic interpreter;F000:FEE4;BIOS
E3; Reserved for Basic interpreter;0040:F083;DOS System Area
E4; Reserved for Basic interpreter;824B:0603
E5; Reserved for Basic interpreter;F000:F786;BIOS
E6; Reserved for Basic interpreter;0000:FEE4;DOS System Area
E7; Reserved for Basic interpreter;F610:824B;BIOS
E8; Reserved for Basic interpreter;0000:0601; DOS System Area
E9; Reserved for Basic interpreter;F3FD:020D; BIOS
EA; Reserved for Basic interpreter;0040:9FC0; DOS System Area
EB; Reserved for Basic interpreter;001C:00E4; DOS System Area
EC; Reserved for Basic interpreter;0600:F50B; DOS System Area
ED; Reserved for Basic interpreter;EFA0:0001; BIOS
EE; Reserved for Basic interpreter;0001:0474; DOS System Area
EF; Reserved for Basic interpreter;EFA0:0001; BIOS
F0; Reserved for Basic interpreter;0001:0474; DOS System Area
F1; Reserved for Basic interpreter;C800:ED6C; BIOS
F2; Reserved for User Programs;C800:C800; BIOS
F3; Reserved for User Programs;097B:C800; DOS System Area
F4; Reserved for User Programs;C800:0267; BIOS
F5; Reserved for User Programs;C800:02DB; BIOS
F6; Reserved for User Programs;B8F7:097B; BIOS
F7; Reserved for User Programs;036C:C800; DOS System Area
F8; Reserved for User Programs;0000:0000;Unused
F9; Reserved for User Programs;FF4B:0000; BIOS
FA; Reserved for User Programs;0080:E987; DOS System Area
FB; Reserved for User Programs;0001:0080; DOS System Area
FC; Reserved for User Programs;02B6:7C00; DOS System Area
FD; Reserved for User Programs;F286:C800; BIOS
FE; Reserved for User Programs;E3FC:0001; BIOS
FF; Reserved for User Programs;F246:F000; DOS System Area
DODATEK D KODY BŁĘDÓW
01-błędny numer funkcji
02-nie odnaleziono pliku
03-nie odnaleziono ścieżki
04-zbyt dużo otwartych plików
05-dostęp niemożliwy
06-niewłwściwy uchwyt pliku
07-uszkodzona struktura nagłówków bloków pamięci
08-niedostateczna pamięć
09-zły adres bloku pamięci
0A-niewłaściwe otoczenie
0B-zły format
0C-zły kod dostępu
0D-złe dane
0E-zarezerwowane
0F-zła specyfika dysku
10-próba usunięcia katalogu bieżącego
11-nie to samo urządzenie
12-nie ma więcej plików
13-próba zapisania na zabezpieczonym dysku
15-napęd dyskowy nie gotowy
16-nieznane polecenie
17-błąd danycha (CRC)
18-zła długość struktury danych połączenia
19-błąd szukania ścieżki na dysku
1A-nieznany typ nośnika
1B-nie odnaleziono sektora
1C-brak papieru w drukarce
1D-błąd zapisu
1E-błąd odczytu
1F-uszkodzenie ogólne
20-naruszenie zasady dzielenia dosepu do zasobów
21-naruszenie blokady
22-niedopuszczalna zmiana dysku
23-niedostępny blik FCB
24-przepełnienie bufora dzielonych zasobów
25-pomylona tablica kodów
26-koniec pliku
27-brak miejsca na dysku
28-31-zarezerwowane
32-niedostępne funkcje sieciowe
33-nie odbierane danych przez komputer zdalny
34-podwójna nazwa w sieci
35-nie znaleziona nazwa sieciowa
36-sieć zajęta
37-uszkodzenie sieciowe przestało być dostępne w systemie
38-przekroczenie ograniczenie liczby poleceń BIOS'u sieci
39-błąd sprzętowy adaptera sieci
3A-niepoprawna odpowiedź z sieci
3B-nieoczekiwany błąd sieci
3C-niezgodny adapter zdalny
3D-kolejka plików do wydrukowania pełna
3E-kolejka plików do wydrukowania nie zapełniona
3E-plik do wydrukowania usunięty
40-usunięta nazwa sieciowa
41-dostęp niemożliwy
42-niewłaściwy typ urządzenia w sieci
43-nie znaleziona nazwa sieciowa
44-przekroczone ograniczenie nazw sieciowych
45-przekroczone ograniczenie sesji BIOS'u
46-wstrzymanie tymczasowe
47-nie zaakceptowane polecenie sieciowe
48-wstrzymane udostępnienie drukarki lub dysku
49-4F-zarezerwowane
50-plik o podanej nazwie już istnieje
51-zarezerwowane
52-niemożliwe utworzenie katalogu
53-przerwanie INT 24h zakończone niepowodzeniem
54-za wiele udostępnionych zasobów
55-podwójne udostępnienie
56-złe hasło
57-zły parametr
58-błąd urządzenia sieciowego
59-zarezerwowane
5A-nie załadowany element składowy systemu
KLASA BŁĘDU
01-przekroczenie pojemności zasobu
02-sytuacja tymczasowa
03-prawa dostępu
04-błąd wewnętrzny
05-błąd spowodowany przez sprzęt
06-błąd systemu
07-błąd programu użytkowego
08-nie znaleziony element
09-zły format
0A-zablokowany zasób
0B-nośnik
0C-element jeż istnieje
0D-błąd nieokreślony
SUGEROWANE DZIAŁANIE
01-powtórzyć
02-powtórzyć z opóźnieniem
03-poprawić wprowadzane dane
04-przerwac program
05-praerwać natychmiast
06-zignorować
07-powtórzyć po interwencji
LOKALIZACJA BŁEDU
01-lokalizacja nieznana
02-urządzenie blokowe
03-sieć
04-urządzenie znakowe
05-pamięć RAM
DODATEK E FUNKCJE MRCI
Serwer MRCI obsługuje operacje związane z komresją danych w czsie rzeczywistym.Adres punktu wejścia do procedury obsługi serwera zwraca funkcja 4A11h przerwania 2Fh lub funkcja Boo1h przerwania 1Ah w strukturze MRCINFO.Aby wywołać żądaną funkcję,należy do rejestru AL załadowac odpowiednią wartość i wykonać rozkaz dalekiego wywołania procedury o adresie zwróconym w MRCINFO.
Opis funkcji serwera MRCI:
FUNKCJA 01h - Kompresja standardowa
Wejście:
Al=01h
CX=typ klienta:00h-użytkowy;01h-systemowy
DS:DX =adres struktury MRCREQUEST
Powrót:
AX=status
00h-wykonanie poprawne
01h-operacja niedostępna
02h-serwer zajęty
03h-przepełnienie bufora docelowego
04h-dane nie mogły zostać skompensowane
05h-zły format danych skompensowanych
Uwaga:
Struktura MRCREQUEST:
Adres - zawartość
00h - adres bufora z danymi źródłowymi,zwartość bufora zależy od wykonywanej funkcji:01h-dane nie skompresowane;02h-dane skomprenowane;20h-kolejna porcja danych skompresowanych.
04h - rozmiar bufora źródłowego w bajtach
06h - pole zarezerwowane
08h - adres bufora z danymi źródłowymi,zawartość bufora zależy od wykonywanej funkcji: 01h-dane nie skompresowane;02h-dane skompresowane;o3h-położenie kolejnej porcji danych zdekompresowanych.
0Ch - rozmiar bufora wynikowego,interpretacja zawartości pola zależy od wykonywanej funkcji:01h-rozmiar bufora;02h-liczba bajtów danych wynikowych,które majz być zdekompresowane;20h-liczba bajtów danych wynikowych,które mają być zdekompresowane.Wyjście funkcji:rzeczywisty rozmiar danych wynikowych.
0Eh - minimalna wartość zysku podczas kompresji(1-32767)
10h - imformacja o stanie kompresji przyrostowej.
FUNKCJA 02h - Dekompresja danych.
Wejście:
AL=02h
CX=typ klienta(jak w funkcji 01h)
DS:SI=adres struktury MRCREQUEST
Powrót:
AX=status(jak w funkcji 01h)-
FUNKCJA 20h - Dekompresja przyrostowa.
Wejście:
AL=20h
CX=typ klienta(jak w funkcji 01h)
DS:SI=adres struktury MRCREQUEST
Powrót:
AX=status(jak w funkcji 01h)-
DODATEK F STANDARD XMS
Standard XMS zarządzania pamięcią rozszerzoną został opracowany wspólnie przez firmy Lotus,Intel,Microsoft i AST Research.Specyfikacja XMS poza pamięcią rozszerzoną opisuje sposób zarządzania następującymi elementami systemu:
* stanem sygnału GATEA20
* obszarem HMA
* pamięcią górną
Wsystemie MS-DOS specyfikacja XMS polega na wywołaniu procedury,której adres jest zwracany przez funkcję AX=4310h przerwania 2Fh,numer funkcji XMS podaje się w rejestrze AH.
Opis funkcji standardu XMS dostępnych przez program HIMEM.SYS:
FUNKCJA 00h - Numer wersji XMS.
Wejście:
AH=00h
Powrót:
AX=numer wersji XMS
BX=wewnętrzny numer wersji programu XMS
DX=01h,jeżeli istnieje pamięć wysoka;00h,jeżeli nie ma pamięci górnej
FUKCJA 01h - Żądanie przydziału pamięci wysokiej.
Wejście:
AH=01h
DX=rozmiar żądanego obszaru w bajtach(dla programów rezydentnych i programów obsługi) lub 0FFFFh(dla zwykłych programów)
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd
BL=kody błędów:
80h=funkcja nie zaimplementowana
81h=wykryto urządzenie VDISK
82h=błąd lini A20
8Eh=ogólny błąd programu obsługi pamięci
8Fh=nienaprawialny błąd programu obsługi
90h=brak pamięci wysokiej
91h=pamięć wysoka jest używana
92h=zawartość DX mniejsza niż określona w parametrze/HMAMIN
93h=nie przydzielona pamięć wysoka
94h=linia A20 nadal aktywna
A0h=cała pamięć rozszerzona jest przydzielona
A1h=wykorzystano wszystkie dostępne uchwyty pamięci rozszerzonej
A2h=niepoprawny uchwyt
A3h=niepoprawny uchwyt źródłowy
A4h=niepoprawne przemieszczenie źródłowe
A5h=niepoprawny uchwyt docelowy
A6h=niepoprawne przemieszczenie docelowe
A7h=niepoprawna długość
A8h=niepoprawne nakładanie się obszarów przy przesłanie
A9h=błąd parzystości
AAh=blok pamięci nie zablokowany
Abh=blok pamięci zablokowany
Ach=przepełnienie licznika blokad obszaru pamięci
Adh=niepowodzenie przy próbie zablokowania
B0h=dostępny mniejszy blok pamięci górnej
B1h=brak bloków pamięci górnej
B2h=niepoprawny adres segmentowy bloku UMB
FUNKCJA 02h - Zwolnienie pamięci wysokiej.
Wejście:
AH=02h
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd;
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 03h - Globalne odblokowanie lini adresowej A20.
Wejście:
AH=03h
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd;
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 04h - Globalne zablokowanie lini adresowej A20.
Wejście:
AH=04h
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd;
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 05h - Lokalne odblokowanie lini adresowej A20.
Wejście:
AH=05h
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd;
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 06h - Lokalne zablokowanie lini adresowej A20.
Wejście:
AH=06h
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd;
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 07h - Informacja o stanie lini adresowej A20.
Wejście:
AH=07h
Powrót:
AL=01h,jeżeli linia adresowa A20 jest odblokowana;00h,jeżeli linia adresowa A20 jest zablokowana
BL=00h,jeżeli wykonanie poprawne;< >00h,to zawiera kod błędu(jak w funkcji 01h)
FUNKCJA 08h - Informacja o wolnej pamięci rozszerzonej.
Wejście:
AH=08h
Powrót:
BL= 00h,jeżeli wykonanie poprawne;
AX=rozmiar największego wolnego bloku pamięci rozszerzonej w kilobajtach
DX=sumaryczny rozmiar wolnych bloków pamięci rozszerzonej w kilobajtach
00h,to zawiera kod błędu(jak w funkcji 01h)
FUNKCJA 09h - Przydział bloku pamięci rozszerzonej.
Wejście:
AH=09h
DX=rozmiar żądanego bloku pamięci rozszerzonej w kilobajtach
Powrót:
AL=01h,jeżeli wykonanie poprawne
DX=uchwyt przydzielonego bloku pamięci(liczba 16-bitowa):00h,jeżeli wystąpił błąd
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 0Ah - Zwolnienie bloku pamięci rozszerzonej.
Wejście:
AH=0Ah
DX=uchwyt bloku,który ma być zwolniony
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd;
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 0Bh - przesłanie bloku danych w pamięci rozszerzonej.
Wejście:
AH=0Bh
DS:SI=adres bloku parametrów przesłania
Struktura bloku parametrów:
00h - liczba bajtów do przesłania(liczba 32-bitowa)
04h - uchwyt bloku źródłowego
06h- 32-bitowe przemieszczenie w źródłowym bloku danych lub gdy pole 04h=0000h ;adres (w postaci przemieszczenie:segmenrt) początku żródłowego bloku danych
0Ah - uchwyt bloku docelowego lub 0000h
0Ch - 32-bitowe przemieszczenie w docelowym bloku danych lub gdy pole 0Ah=0;adres(w postaci przemieszczenie:segmenrt) początku żródłowego bloku danych 000h
Powrót:
AL=01h,jeżeli wykonanie poprawne;00h,jeżeli wystąpił błąd;
BL=kod błędów(jak w funkcji 01h)
FUNKCJA 0Ch - Zablokowanie bloku pamięci rozszerzonej.
Wejście:
AH=0Ch
DX=uchwyt bloku,który ma być zablokowany
Powrót:
AL=01h,jeżeli wykonanie poprawne
DX:BX=32-bitowy adre liniowy zablokowanego bloku
AL=00h,jeżeli wystąpił błąd
BL=kod błędu(jak w funkcji 01h)
FUNKCJA 0Dh - Odblokowanie bloku pamięci rozszerzonej.
Wejście:
AH=0Dh
DX=uchwyt bloku,który ma być odblokowany
Powrót:
AL=01h,jeżeli wykonanie poprawne
00h,jeżeli wystąpił błąd
BL=kod błędu(jak w funkcji 01h)
FUNKCJA 0Eh - Informacja o bloku pamięci rozszerzonej.
Wejście:
AH=0Eh
DX=uchwyt bloku pamięci rozszerzonej
Powrót:
AL=01h,jeżeli wykonanie poprawne
BH=wartość licznika blokad wskazanego bloku
BL=liczba wolnych uchwytów bloków pamięci rozszerzonej w systemie
DX=rozmiar bloku w kilobajtach
00h,jeżeli wystąpił błąd
BL=kod błędu(jak w funkcji 01h)
FUNKCJA 0Fh - Zmiana rozmiaru bloku pamięci rozszerzonej.
Wejście:
AH=0Fh
BX=nowy rozmiar bloku w kilobajtach
DX=uchwyt bloku pamięci rozszerzonej
Powrót:
AL=01h,jeżeli wykonanie poprawne
00h,jeżeli wystąpił błąd
BL=kod błędu(jak w funkcji 01h)
FUNKCJA 10h - Żądanie przydziału bloku pamięci górnej.
Wejście:
AH=10h
DX=rozmiar bloku pamięci górnej w paragrafach
Powrót:
AL=01h,jeżeli wykonanie poprawne
BX=adres segmentowy przydzielonego bloku pamięci górnej
DX=rozmiar w paragrafach przydzielonego bloku UMB
00h,jeżeli wystąpił błąd
BL=kod błędu(jak w funkcji 01h)
DX=rozmiar największego dostępnego bloku w pamięci górnej
FUNKCJA 11h - Zwolnienie bloku pamięci górnej.
Wejście:
AH=11h
DX=adres segmentowy bloku pamięci górnej
Powrót:
AL=01h,jeżeli wykonanie poprawne
00h,jeżeli wystąpił błąd
BL=kod błędu(jak w funkcji 01h)
FUNKCJA 88h - Odczytanie rozmiaru wolnej pamięci rozszerzonej.
Wejście:
AH=88h
Powrót:
EAX>0,jeżeli operacja wykonana poprawnie
EAX=rozmiar największegowolnego bloku pamięci rozszerzonej
ECX=najwyższy fizyczny dares końcowy zainstalowanej w systemie pamięci
EDX=rozmiar wolnej pamięci XMS
BL=0
=0,jeżeli wystąpił błąd
BL=kod błędu
Uwaga:
Funkcja wykorzystuje pełne możliwości adresowe procesorów 80386/80486.
FUNKCJA 89h - Przydzielenie bloku pamięci rozszerzonej.
Wejście:
AH=89h
EDX=wymagany rozmiar bloku
Powrót:
EAX=1,jeżeli operacja wykonana poprawnie
DX=uchwyt bloku
=0,jeżeli wystąpił błąd
BL=kod błędu
Uwaga:
Funkcja wykorzystuje pełne możliwości adresowe procesorów 80386/80486.
FUNKCJA 8Eh - Odczyt informacji o uchwycie
Wejście:
AH=8Eh
DX=uchwyt
Powrót:
EAX=1,jeżeli operacja wykonana poprawnie
BH=wartość licznika blokad wskazanego bloku
CX=liczba dostępnych uchwytów
EDX=rozmiar wolnej pamięci w kilobajtach
BL=0
=0,jeżeli wystąpił błąd
BL=kod błędu
Uwaga:
Funkcja wykorzystuje pełne możliwości adresowe procesorów 80386/80486.
FUNKCJA 8Fh - Zmiana długości bloku pamięci rozszerzonej.
Wejście:
AH=8Fh
EBX=nowy rozmiar bloku w kilobajtach
DX=uchwyt bloku
Powrót:
EAX=1,jeżeli operacja wykonana poprawnie
=0,jeżeli wystąpił błąd
BL=kod błędu
Uwaga:
Funkcja wykorzystuje pełne możliwości adresowe procesorów 80386/80486.
DODATEK G KODY ZNAKÓW ASCII ORAZ ICH BITOWA REPREZENTACJA
Kody znaków 0-127 są umieszczone w ROM pod adresem F000:FA6E.
Natomiast adres pozostałych kodów (128-255) jest wskazywany (wektor)
Pod adresem 0000:007C (cztery bajty) - INT 1F.
ASCII 0 (00)h
F0000:FA6E
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
ASCII 1 (01)h
F000:FA76
7E|01111110
81|10000001
A5|10100101
81|10000001
BD|10111101
99|10011001
81|10000001
7E|01111110
ASCII 2 (02)h
F000:FA7E
7E|01111110
FF|11111111
DB|11011011
FF|11111111
C3|11000011
E7|11100111
FF|11111111
7E|01111110
ASCII 3 (03)h
F000:FA86
44|01000100
EE|11101110
FE|11111110
FE|11111110
7C|01111100
38|00111000
10|00010000
00|00000000
ASCII 4 (04)h
F000:FA8E
10|00010000
38|00111000
7C|01111100
FE|11111110
7C|01111100
38|00111000
10|00010000
00|00000000
ASCII 5 (05)h
F000:FA96
18|00011000
3C|00111100
DB|11011011
FF|11111111
DB|11011011
18|00011000
3C|00111100
00|00000000
ASCII 6 (06)h
F000:FA9E
18|00011000
3C|00111100
DB|11011011
FF|11111111
7E|01111110
18|00011000
3C|00111100
ASCII 7 (07)h
F000:FAA6
00|00000000
00|00000000
3C|00111100
3C|00111100
3C|00111100
3C|00111100
00|00000000
00|00000000
ASCII 8 (08)h
F000:FAAE
FF|11111111
FF|11111111
C3|11000011
C3|11000011
C3|11000011
C3|11000011
FF|11111111
FF|11111111
ASCII 9 (09)h
F000:FAB6
00|00000000
7E|01111110
42|01000010
42|01000010
42|01000010
42|01000010
7E|01111110
00|00000000
ASCII 10 (0A)h
F000:FABE
FF|11111111
81|10000001
BD|10111101
BD|10111101
BD|10111101
81|10000001
FF|11111111
ASCII 11 (0B)h
F000:FAC6
0F|00001111
07|00000111
07|00000111
7D|01111101
CC|11001100
CC|11001100
CC|11001100
78|01111000
ASCII 12 (0C)h
F000:FACE
78|01111000
CC|11001100
CC|11001100
CC|11001100
78|01111000
30|00110000
FC|11111100
30|00110000
ASCII 13 (0D)h
F000:FAD6
1F|00011111
33|00110011
3F|00111111
30|00110000
30|00110000
70|01110000
F0|11110000
E0|11100000
ASCII 14 (0E)h
F000:FADE
3F|00111111
63|01100011
7F|01111111
63|01100011
63|01100011
67|01100111
E6|11100110
C0|11000000
ASCII 15 (0F)h
F000:FAE6
DB|11011011
DB|11011011
3C|00111100
E7|11100111
E7|11100111
3C|00111100
DB|11011011
DB|11011011
ASCII 16 (10)h
F000:FAEE
C0|11000000
F0|11110000
F8|11111000
FE|11111110
F8|11111000
F0|11110000
C0|11000000
00 00000000
ASCII 17 (11)h
F000:FAF6
06|00000110
1E|00011110
3E|00111110
FE|11111110
3E|00111110
1E|00011110
06|00000110
00|00000000
ASCII 18 (12)h
F000:FAFE
30|00110000
78|01111000
FC|11111100
30|00110000
30|00110000
FC|11111100
78|01111000
30|00110000
ASCII 19 (13)h
F000:FB06
6C|01101100
6C|01101100
6C|01101100
6C|01101100
6C|01101100
00|00000000
6C|01101100
00|00000000
ASCII20 (14)h
F000:FB0E
7F|01111111
DB|11011011
DB|11011011
DB|11011011
7B|01111011
1B|00011011
1B|00011011
00|00000000
ASCII 21 (15)h
F000:FB16
3C|00111100
60|01100000
3C|00111100
66|01100110
66|01100110
3C|00111100
06|00000110
3C|00111100
ASCII 22 (16)h
F000:FB1E
00|00000000
00|00000000
00|00000000
00|00000000
FE|11111110
FE|11111110
FE|11111110
00|00000000
ASCII 23 (17)h
F000:FB26
18|00011000
3C|00111100
7E|01111110
18|00011000
7E|01111110
3C|00111100
18|00011000
7E|01111110
ASCII 24 (18)h
F000:FB2E
30|00110000
78|01111000
FC|11111100
30|00110000
30|00110000
30|00110000
30|00110000
00|00000000
ASCII 25 (19)h
F000:FB36
30|00110000
30|00110000
30|00110000
30|00110000
FC|11111100
78|01111000
30|00110000
00|00000000
ASCII 26 (1A)h
F000:FB3E
00|00000000
07|00001000
0C|00001100
FE|11111110
0C|00001100
08|00001000
00|00000000
00|00000000
ASCII 27 (1B)h
F000:FB46
00|00000000
20|00100000
60|01100000
FE|11111110
60|01100000
20|00100000
00|00000000
00|00000000
ASCII 28 (1C)h
F000:FB4E
00|00000000
00|00000000
C0|11000000
C0|11000000
FE|11111110
00|00000000
00|00000000
00|00000000
ASCII 29 (1D)h
F000:FB56
00|00000000
24|00100100
42|01000010
FF|11111111
42|01000010
24|00100100
00|00000000
00|00000000
ASCII 30 (1E)h
F000:FB5E
00|00000000
10|00010000
38|00111000
7C|01111100
FE|11111110
FE|11111110
00|00000000
00|00000000
ASCII 31 (1F)h
F000:FB66
00|00000000
FE|11111110
FE|11111110
7C|01111100
38|00111000
10|00010000
00|00000000
00|00000000
ASCII 32 (20)h" "
F000:FB6E
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
ASCII 33 (21)h"!"
F000:FB76
18|00011000
18|00011000
18|00011000
18|00011000
18|00011000
00|00000000
18|00011000
00|00000000
ASCII 34 (22)h" "
F000:FB7E
CC|11001100
CC|11001100
CC|11001100
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
ASCII 35 (23)h"#"
F000:FB86
36|00110110
6C|01101100
FE|11111110
6C|01101100
FE|11111110
6C|01101100
D8|11011000
00|00000000
ASCII 36(24)h"$"
F000:FB8E|
18|00011000
7E|01111110
C0|11000000
7C|01111100
06|00000110
FC|11111100
30|00110000
00|00000000
ASCII 37 (25)h"%"
F000:FB96
C2|11000010
C6|11000110
0C|00001100
18|00011000
30|00110000
66|01100110
C6|11000110
00 00000000
ASCII 38 (26)h"&"
F000:FB9E|
38|00111000
6C|01101100
38|00111000
70|01110000
DE|11011110
CC|11001100
76 01110110
00 00000000
ASCII 39(27)h"'"
F000:FBA6|
30|00110000
30|00110000
60|01100000
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
ASCII 40 (28)h"("
F000:FBAE|
0C|00001100
18|00011000
30|00110000
30|00110000
30|00110000
18|00011000
0C|00001100
00|00000000
ASCII 41(29)h")"
F000:FBB6|
30|00110000
18|00011000
0C|00001100
0C|00001100
0C|00001100
18|00011000
30|00110000
00|00000000
ASCII 42 (2A)h"*"
F000:FBBE|
00|00000000
6C|01101100
38|00111000
FE|11111110
38|00111000
6C|01101100
00|00000000
00|00000000
ASCII 43 (2B)h"+"
F000:FBC6|
00|00000000
18|00011000
18|00011000
7E|01111110
18|00011000
18|00011000
00|00000000
00|00000000
ASCII 44 (2C)h","
F000:FBCE|
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
18|00011000
18|00011000
30|00110000
ASCII 45 (2D)h"-"
F000:FBD6|
00|00000000
00|00000000
00|00000000
7E|01111110
00|00000000
00|00000000
00|00000000
00|00000000
ASCII 46 (2E)h"."
F000:FBDE|
00|00000000
00|00000000
00|00000000
00|00000000
00|00000000
18|00011000
18|00011000
00|00000000
ASCII 47 (2F)h"/"
F000:FBE6|
02|00000010
06|00000110
0C|00001100
18|00011000
30|00110000
60|01100000
C0|11000000
00|00000000
ASCII 48 (30)h"0''
F000:FBEE|
7C|01111100
CE|11001110
DE|11011110
F6|11110110
E6|11100110
C6|11000110
7C|01111100
00|00000000
ASCII 49 (31)h"1"
F000:FBF6|
18|00011000
38|00111000
18|00011000
18|00011000
18|00011000
18|00011000
7E|01111110
00|00000000
ASCII 50 (32)h"2"
F0000:FBFE
7C|01111100
C6|11000110
06|00000110
1C|00011100
70|01110000
C6|11000110
FE|11111110
00|00000000
ASCII 51 (33)h"3"
F000:FCD6
7C|01111100
C6|11000110
06|00000110
1C|00011100
06|00000110
C6|11000110
7C|01111100
00|00000000
ASCII 52 (34)h"4"
F000:FC0E
1C|00011100
3C|00111100
6C|01101100
CC|11001100
FE|11111110
0C|00001100
0C|00001100
00|00000000
ASCII 53 (35)h"5"
F000:FC16
FE|11111110
C0|11000000
FC|11111100
06|00000110
06|00000110
C6|11000110
7C|01111100
00|00000000
ASCII 54 (36)h"6"
F000:FC1E
3C|00111100
60|01100000
C0|11000000
FC|11111100
C6|11000110
C6|11000110
7C|01111100
00|00000000
ASCII 55 (37)h"7"
F000:FC26
FE|11111110
C6|11000110
0C|00001100
18|00011000
30|00110000
30|00110000
30|00110000
00|00000000
ASCII 56 (38)h"8"
F000:FC2E
7C|01111100
C6|11000110
C6|11000110
7C|01111100
C6|11000110
C6|11000110
7C|01111100
00|00000000
ASCII 57 (39)h"9"
F000:FC36
7C|01111100
C6|11000110
C6|11000110
7E|01111110
06|00000110
0C|00001100
78|01111000
00|00000000
ASCII 58 (3A)h":"
F000:FC3F
00|00000000
18|00011000
18|00011000
00|00000000
00|00000000
18|00011000
18|00011000
00|00000000
ASCII 59 (3B)h";"
F000:FC46
00|00000000
18 00011000
18 00011000
00 00000000
00 00000000
18 00011000
18 00011000
30 00110000
ASCII 60(3C)h"<"
F000:FC4E
0C|00001100
18 00011000
30 00110000
60|01100000
30|00110000
18|00011000
0C|00001100
00|00000000
ASCII 61(3D)h"="
F000:FC56
00|00000000
00 00000000
7E|01111110
00 00000000
00|00000000
7E|01111110
00 00000000
00|00000000
ASCII 62(3E)h">"
F000:FC5E
30 00110000
18 00011000
0C|00001100
06 00000110
0C|00001100
18 00011000
30 00110000
00 00000000
ASCII 63(3F)h"?"
F000:FC66
3C|00111100
66 01100110
06|00000110
0C|00001100
18 00011000
00 00000000
18 00011000
00|00000000
ASCII 64(40)h"@"
F000:FC6E
7C|01111100
C6|11000110
DE|11011110
DE|11011110
DE|11011110
C0|11000000
7C|01111100
00|00000000
ASCII 65(41)h"A"
F000:FC76
38|00111000
6C|01101100
C6|11000110
C6|11000110
FE|11111110
C6|11000110
C6|11000110
00|00000000
ASCII 66(42)h"B"
F000:FC7E
FC|11111100
6E|01101110
66|01100110
7C|01111100
66|01100110
6E|01101110
FC|11111100
00 00000000
ASCII 67(43)h"C"
F000:FC86
3E|00111110
62|01100010
0C|11000000
0C|11000000
0C|11000000
62|01100010
3E|00111110
00|00000000
ASCII 68(44)h"D"
F000:FC8E
F8|11111000
6E|01101110
66|01100110
66 01100110
66 01100110
6E|01101110
F8|11111000
00|00000000|
ASCII 69(45)h"E"
F000:FC96
FE|11111110
62|01100010
60|01100000
78 01111000
60 01100000
61 01100010
FE|11111110
00 00000000
ASCII 70(46)h"F"
F000:FC9E
FE|11111110
62 01100010
60 01100010
78|01111000
60 01100010
60|01100010
F0|11110000
00 00000000
ASCII 71(47)h"G"
F000:FCA6
3E|00111110
60|01100010
C0|11000000
C0|11000000
CE|11001110
66 01100110
3E|00111110
00 00000000
ASCII 72(48)h"H"
F000:FCAE
C6|11000110
C6|11000110
C6|11000110
FE|11111110
C6|11000110
C6|11000110
C6|11000110
00 00000000
ASCII 73(49)h"I"
F000:FCB6
3C|00111100
18 00011000
18 00011000
18 00011000
18 00011000
18 00011000
3C|00111100
00 00000000
ASCII 74(4A)h"J"
F000:FCBE
1E|00011110
0C|00001100
0C|00001100
0C|00001100
0C|00001100
CC|11001100
78 01111000
00 00000000
ASCII 75(4B)h"K"
F000:FCC6
E6|11100110
66 01100110
6C|01101100
78 01111000
78 01111000
6C|01101100
E6|11100110
00 00000000
ASCII 76(4C)h"L."
F000:FCCE
F0|11110000
60 01100000
60 01100000
60 01100000
60 01100000
66 01100110
FE|11111110
00 00000000
ASCII 77(4D)h"M"
F000:FCD6
C6|11000110
EE|11101110
FE|11111110
D6|11010110
C6|11000110
C6|11000110
C6|11000110
00 00000000
ASCII 78(4E)h"N"
F000:FCDE
C6|11000110
E6|11100110
F6|11110110
FE|11111110
DE|11011110
CE|11001110
C6|11000110
00 00000000
ASCII 79(4F)h"O"
F000:FCE6
7C|01111100
C6|11000110
C6|11000110
C6|11000110
C6|11000110
C6|11000110
7C|01111100
00 00000000
ASCII 80(50)h"P"
F000:FCEE
FC|11111100
66 01100110
66 01100110
7C|01111100
60 01100000
60 01100000
E0|11100000
00 00000000
ASCII 81(51)h"Q"
F000:FCF6
7C|01111100
C6|11000110
C6|11000110
D6|11010110
DE|11011110
7C|01111100
06 00000110
00|00000000
ASCII 82(52)h"R"
F000:FCFE
FC|11111100
66 01100110
66 01100110
7C|01111100
78 01111000
6C|01101100
E6|11100110
00 00000000
ASCII 83(53)h"S"
F000:FD06
7C|01111100
C6|11000110
E0|11100000
38 00111000
0E|00001110
C6|11000110
7C|01111100
00 00000000
ASCII 84(54)h"T"
F000:FD0E
7E|01111110
5A|01011010
18 00011000
18 00011000
18 00011000
18 00011000
3C|00111100
00 00000000
ASCII 85(55)h"U"
F000:FD16
66 01100110
66 01100110
66 01100110
66 01100110
66 01100110
66 01100110
3C|00111100
00 00000000
ASCII 86(56)h"V"
F000:FD1E
66 01100110
66 01100110
66 01100110
66 01100110
66 01100110
3C|00111100
18 00011000
00 00000000
ASCII 87(57)h"W"
F000:FD26
C6|11000110
C6|11000110
C6|11000110
D6|11010110
FE|11111110
FE|11111110
C6|11000110
00 00000000
ASCII 88(58)h"X"
F000:FD2E
C6|11000110
6C|01101100
38 00111000
38 00111000
6C|01101100
C6|11000110
C6|11000110
00 00000000
ASCII 89(59)h"Y"
F000:FD36
66 01100110
66 01100110
66 01100110
3C|00111100
18 00011000
18 00011000
3C|00111100
00 00000000
ASCII 90(5A)h"Z"
F000:FD3E
FE|11111110
CC|11001100
18 00011000
30 00110000
60 01100000
C6|11000110
FE|11111110
00 00000000
ASCII 91(5B)h"["
F000:FD46
3C|00111100
30 00110000
30 00110000
30 00110000
30 00110000
30 00110000
3C|00111100
00 00000000
ASCII 92(5C)h"\"
F000:FD4E
80|10000000
C0|11000000
60 01100000
30 00110000
18 00011000
0C|00001100
06 00000110
00 00000000
ASCII 93(5D)h"]"
F000:FD56
3C|00111100
0C|00001100
0C|00001100
0C|00001100
0C|00001100
0C|00001100
3C|00111100
00 00000000
ASCII 94(5E)h"^"
F000:FD5E
18 00011000
3C|00111100
66 01100110
00 00000000
00 00000000
00 00000000
00 00000000
00 00000000
ASCII 95(5F)h"_"
F000:FD66
00 00000000
00 00000000
00 00000000
00 00000000
00 00000000
00 00000000
00 00000000
FF|11111111
ASCII 96(60)h"'"
F000:FD6E
18 00011000
18 00011000
0C|00001100
00 00000000
00 00000000
00 00000000
00 00000000
00 00000000
ASCII 97(61)h"a"
F000:FD76
00 00000000
00 00000000
38 00111000
0C|00001100
7C|01111100
CC|11001100
76 01110110
00 00000000
ASCII 98(62)h"b"
F000:FD7E
60 01100000
60 01100000
60 01100000
7C|01111100
66 01100110
66 01100110
DC|11011100
00 00000000
ASCII 99(63)h"c"
F000:FD86
00 00000000
00 00000000
7C|01111100
C4|11000100
C0|11000000
C4|11000100
7C|01111100
00 00000000
ASCII 100(64)h"d"
F000:FD8E
0C|00001100
0C|00001100
0C|00001100
7C|01111100
CC|11001100
CC|11001100
76 01110110
00 00000000
ASCII 101(65)h"e"
F000:FD96
00 00000000
00 00000000
77 01111000
CC|11001100
FC|11111100
C0|11000000
7C|01111100
00 00000000
ASCII 102(66)h"f"
F000:FD9E
38 00111000
6C|01101100
60 01100000
F8|11111000
60 01100000
60 01100000
E0|11100000
00 00000000
ASCII 103(67)h"g"
F000:FDA6
00 00000000
00 00000000
76 01110110
CC|11001100
CC|11001100
7C|01111100
0C|00001100
7C|01111100
ASCII 104 (68)h"h"
F000:FDAE
E0|11100000
60 01100000
60 01100000
7C|01111100
66 01100110
66 01100110
66 01100110
00 00000000
ASCII 105(69)h"i"
F000:FDB6
30 00110000
00 00000000
70 01110000
30 00110000
30 00110000
30 00110000
38 00111000
00 00000000
ASCII 106(6A)h"j"
F000:FDBE
0C|00001100
00 00000000
1C|00011100
0C|00001100
0C|00001100
CC|11001100
CC|11001100
78 01111000
ASCII 107(6B)h"k"
F000:FDC6
E0|11100000
60 01100000
66 01100110
6C|01101100
79 01111000
6C|01101100
6C|01101100
66 01100110
00 00000000
ASCII 108(6C)h"l"
F000:FDCE
70 01110000
30 00110000
30 00110000
30 00110000
30 00110000
30 00110000
38 00111000
00 00000000
ASCII 109(6D)h"m."
F000:FDD6
00 00000000
00 00000000
CC|11001100
FE|11111110
D6|11010110
C6|11000110
C6|11000110
00 00000000
ASCII 110(6E)h"n"
F000:FDDE
00 00000000
00 00000000
DC|11011100
66 01100110
66 01100110
66 01100110
66 01100110
00 00000000
ASCII 111(6F)h"o"
F000:FDE6
00 00000000
00 00000000
3C|00111100
66 01100110
66 01100110
66 01100110
3C|00111100
00 00000000
ASCII 112(70)h"p"
F000:FDEE
00 00000000
00 00000000
DC|11011100
66 01100110
66 01100110
7C|01111100
60 01100000
E0|11100000
ASCII 113(71)h"q"
F000:FDF6
00 00000000
00 00000000
76 01110110
CC|11001100
CC|11001100
7C|01111100
0C|00001100
0E|00001110
ASCII 114(72)h"r"
F000:FDFE
00 00000000
00 00000000
DC|11011100
76 01110110
60 01100000
60 01100000
60 01100000
00 00000000
ASCII 115(73)h"s"
F000:FE06
00 00000000
00 00000000
78|01111000
C0|11000000
78|01111000
0C|00001100
78|01111000
00 00000000
ASCII 116(74)h"t"
F000:FE0E
10 00010000
30 00110000
78|01111000
30 00110000
30 00110000
34 00110100
18 00011000
00 00000000
ASCII 117(75)h"u"
F000:FE16
00 00000000
00 00000000
CC|11001100
CC|11001100
CC|11001100
CC|11001100
76 01110110
00 00000000
ASCII 118(76)h"v"
F000:FE1E
00 00000000
00 00000000
66 01100110
66 01100110
66 01100110
3C|00111100
18 00011000
00 00000000
ASCII 119(77)h"w"
F000:FE26
00 00000000
00 00000000
C6|11000110
C6|11000110
D6|11010110
FE|11111110
6C|01101100
00 00000000
ASCII 120(78)h"x"
F000:FE2E
00 00000000
00 00000000
CC|11001100
78|01111000
30 00110000
78|01111000
CC|11001100
00 00000000
ASCII 121(79)h"y"
F000:FE36
00 00000000
00 00000000
CC|11001100
CC|11001100
CC|11001100
7C|01111100
0C|00001100
7C|01111100
ASCII 122(7A)h"z"
F000:FE3E
00 00000000
00 00000000
FC|11111100
18 00011000
30 00110000
60 01100000
FC|11111100
00 00000000
ASCII 123(7B)"aa"
F000:FE46
0E|00001110
18 00011000
18 00011000
70 01110000
18 00011000
18 00011000
0E|00001110
00 00000000
ASCII 124(7C)h"bb "
|F000:FE4E
30 00110000
30 00110000
30 00110000
00 00000000
30 00110000
30 00110000
30 00110000
00 00000000
ASCII 125(7D)h"cc "
F000:FE56
70 01110000
18 00011000
18 00011000
0E|00001110
18 00011000
18 00011000
70 01110000
00 00000000
ASCII 126(7E)h"dd"
F000:FE5E
00 00000000
76 01110110
DC|11011100
00 00000000
00 00000000
00|00000000
00 00000000
00 00000000
ASCII 127(7F)h"ee"
F000:FE66
10 00010000
38 00111000
6C|01101100
C6|11000110
C6|11000110
FE|11111110
00 00000000
ASCII 128(80)h"ff"
C000:5AD5
78|01111000
CC|11001100
C0|11000000
CC|11001100
78|01111000
18 00011000
0C|00001100
78|01111000
ASCII 129(81)h"gg"
C000:5ADD
00 00000000
CC|11001100
00 00000000
CC|11001100
CC|11001100
CC|11001100
7E|01111110
00 00000000
ASCII 130(82)h"hh"
C000:5AE5
1C|00011100
00 00000000
78|01111000
CC|11001100
FC|11111100
C0|11000000
78|01111000
00 00000000
ASCII 131(83)h"ii"
C000:5AED
7E|01111110
C3|11000011
3C|00111100
06 00000110
3E|00111110
66 01100110
3F|00111111
00 00000000
ASCII 132(84)h"jj"
C000:5AF5
CC|11001100
00 00000000
78|01111000
0C|00001100
7C|01111100
CC|11001100
7E|01111110
00 00000000
ASCII 133(85)h"kk"
C000:5AFD
E0|11100000
00 00000000
78|01111000
0C|00001100
7C|01111100
CC|11001100
7E|01111110
00 00000000
ASCII 134(86)h"ll"
C000:5B05
30 00110000
30 00110000
78|01111000
0C|00001100
7C|01111100
CC|11001100
7E|01111110
00 00000000
ASCII 135(87)h"mm"
C000:5B0D
00 00000000
00 00000000
78|01111000
C0|11000000
C0|11000000
78|01111000
0C|00001100
38|00111000
ASCII 136(88)h"nn"
C000:5B15
7E|01111110
C3|11000011
3C|00111100
66 01100110
7E|01111110
60 01100000
3C|00111100
00 00000000
ASCII 137(89)h"oo"
C000:5B1D
CC|11001100
00 00000000
78|01111000
CC|11001100
FC|11111100
C0|11000000
78|01111000
00 00000000
ASCII 138(8A)h"pp"
C000:5B25
E0|11100000
00 00000000
78|01111000
CC|11001100
FC|11111100
C0|11000000
78|01111000
00 00000000
ASCII 139(8B)h"qq"
C000:5B2D
CC|11001100
00 00000000
70 01110000
30 00110000
30 00110000
30 00110000
78|01111000
00 00000000
ASCII 140(8C)h"rr"
C000:5B35
7C|01111100
C6|11000110
38 00111000
18 00011000
18 00011000
18 00011000
3C|00111100
00 00000000
ASCII 141(8D)h"ss"
C000:5B3D
E0|11100000
00 00000000
70 01110000
30 00110000
30 00110000
30 00110000
78|01111000
00 00000000
ASCII 142(8E)h"tt"
C000:5B45
C6|11000110
38 00111000
6C|01101100
C6|11000110
FE|11111110
C6|11000110
C6|11000110
00 00000000
ASCII 143(8F)h"uu"
C000:5B4D
30 00110000
30 00110000
00 00000000
78|01111000
CC|11001100
FC|11111100
CC|11001100
00 00000000
ASCII 144(90)h"vv"
C000:5B55
1C|00011100
00 00000000
FC|11111100
60 01100000
78|01111000
60 01100000
FC|11111100
00 00000000
ASCII 145(91)h"ww"
C000:5B5D
00 00000000
00 00000000
7F|01111111
0C|00001100
7F|01111111
CC|11001100
7F|01111111
00 00000000
ASCII 146(92)h"xx"
C000:5B65
3E|00111110
6C|01101100
CC|11001100
FE|11111110
CC|11001100
CC|11001100
CE|11001110
00 00000000
ASCII 147(93)h"yy"
C000:5B6D
78|01111000
CC|11001100
00 00000000
78|01111000
CC|11001100
CC|11001100
78|01111000
00 00000000
ASCII 148(94)h"zz"
C000:5B75
00 00000000
CC|11001100
00|00000000
78|01111000
CC|11001100
CC|11001100
78|01111000
00|00000000
ASCII 149(95)h"AA"
C000:5B7D
00|00000000
E0|11100000
00 00000000
78|01111000
CC|11001100
CC|11001100
78|01111000
00 00000000
ASCII 150(96)h"BB"
C000:5B85
78|01111000
CC|11001100
00 00000000
CC|11001100
CC|11001100
CC|11001100
7E|01111110
00 00000000
ASCII 151(97)h"BB"
C000:5B8D
00 00000000
E0|11100000
00 00000000
CC|11001100
CC|11001100
CC|11001100
7E|01111110
00 00000000
ASCII 152(98)h"CC"
C000:5B95
00 00000000
CC|11001100
00 00000000
CC|11001100
CC|11001100
7C|01111100
0C|00001100
F8|11111000
ASCII 153(99)h"DD"
C000:5B9D
C3|11000011
18 00011000
3C|00111100
66 01100110
66 01100110
3C|00111100
18 00011000
00 00000000
ASCII 154(9A)h"EE"
C000:5BA5
CC|11001100
00 00000000
CC|11001100
CC|11001100
CC|11001100
CC|11001100
78|01111000
00 00000000
ASCII 155(9B)h"FF"
C000:5BAD
18 00011000
18 00011000
7E|01111110
C0|11000000
C0|11000000
7E|01111110
18 00011000
18 00011000
ASCII 156(9C)h"GG"
C000:5BB5
38 00111000
6C|01101100
64|01100100
F0|11110000
60 01100000
E6|11100110
FC|11111100
00 00000000
ASCII 157(9D)h"HH"
C000:5BBD
CC|11001100
CC|11001100
78|01111000
FC|11111100
30 00110000
FC|11111100
30 00110000
30 00110000
ASCII 158(9E)h"II"
C000:5BC5
F8|11111000
CC|11001100
CC|11001100
FA|11111010
C6|11000110
CF|11001111
C6|11000110
C7|11000111
ASCII 159(9F)h"JJ"
C000:5BCD
0E|00001110
1B|00011011
18 00011000
3C|00111100
18 00011000
18 00011000
D8|11011000
70 01110000
ASCII 160(A0)h"KK"
C000:5BD5
1C|00011100
00 00000000
78|01111000
0C|00001100
7C|01111100
CC|11001100
7E|01111110
00 00000000
ASCII 161(A1)h"LL"
C000:5BDD
38 00111000
00 00000000
70 01110000
30 00110000
30 00110000
30 00110000
78|01111000
00 00000000
ASCII 162(A2)h"MM"
C000:5BE5
00 00000000
1C|00011100
00 00000000
78|01111000
CC|11001100
CC|11001100
78|01111000
00 00000000
ASCII 163(A3)h"NN"
C000:5BED
00 00000000
1C|00011100
00 00000000
CC|11001100
CC|11001100
CC|11001100
7E|01111110
00 00000000
ASCII 164(A4)h"OO"
C000:5BF5
00 00000000
F8|11111000
00 00000000
F8|11111000
CC|11001100
CC|11001100
CC|11001100
00 00000000
ASCII 165(A5)h"PP"
C000:5BFD
FC|11111100
00 00000000
CC|11001100
EC|11101100
FC|11111100
DC|11011100
CC|11001100
00 00000000
ASCII 166(A6)h"QQ"
C000:5C05
3C|00111100
6C|01101100
6C|01101100
3E|00111110
00 00000000
7E|01111110
00 00000000
00 00000000
ASCII 167(A7)h"RR"
C000:5C0D
38 00111000
6C|01101100
6C|01101100
38 00111000
00 00000000
7C|01111100
00 00000000
00 00000000
ASCII 168(A8)h"SS"
C000:5C15
30 00110000
00 00000000
90 00110000
60 01100000
C0|11000000
CC|11001100
78|01111000
00 00000000
ASCII 169(A9)h"TT"
C000:5C1D
00 00000000
00 00000000
00 00000000
FC|11111100
C0|11000000
C0|11000000
00 00000000
00 00000000
ASCII 170(AA)h"UU"
C000:5C25
00 00000000
00 00000000
00 00000000
FC|11111100
0C|00001100
0C|00001100
00 00000000
00 00000000
ASCII 171(AB)h"VV"
C000:5C2D
C3|11000011
C6|11000110
CC|11001100
DE|11011110
33 00110011
66 01100110
CC|11001100
0F|00001111
ASCII 172(AC)h"WW"
C000:5C35
C3|11000011
C6|11000110
CC|11001100
DB|11011011
37 00110111
6F|01101111
CF|11001111
03 00000011
ASCII 173(AD)h"XX"
C000:5C3D
18 00011000
18 00011000
00 00000000
18 00011000
18 00011000
18 00011000
18 00011000
00 00000000
ASCII 174(AE)h"YY"
C000:5C45
00 00000000
33 00110011
66 01100110
CC|11001100
66 01100110
33 00110011
00 00000000
00 00000000
ASCII 175(AF)h"ZZ"
C000:5C4D
00 00000000
CC|11001100
66 01100110
33 00110011
66 01100110
CC|11001100
00 00000000
00 00000000
ASCII 176(B0)h"Aa"
C000:5C55
22 00100010
88 10001000
22 00100010
88 10001000
22 00100010
88 10001000
22 00100010
88 10001000
ASCII 177(B1)h"Ab"
C000:5C5D
55 01010101
AA|10101010
55 01010101
AA|10101010
55 01010101
AA|10101010
55 01010101
AA|10101010
ASCII 178(B2)h"Ac"
C000:5C65
DB|11011011
77 01110111
DB|11011011
EE|11101110
DB|11011011
78 01110111
DB|11011011
EE|11101110
ASCII 179(B3)h"Ad"
C000:5C6D
18 00011000
18 00011000
18 00011000
18 00011000
18 00011000
18 00011000
18 00011000
18 00011000
ASCII 180(B4)h"Ae"
C000:5C75
18 00011000
18 00011000
18 00011000
18 00011000
F8|11111000
18 00011000
18 00011000
18 00011000
ASCII 181(B5)h"Af"
C000:5C7D
18 00011000
18 00011000
F8|11111000
18 00011000
F8|11111000
18 00011000
18 00011000
18 00011000
ASCII 182(B6)h"Ag"
C000:5C85
36|00110110
36|00110110
36|00110110
36|00110110
F6|11110110
36|00110110
36|00110110
36|00110110
ASCII 183(B7)h"Ah"
C000:5C8D
00 00000000
00 00000000
00 00000000
00 00000000
FE|11111110
36|00110110
36|00110110
35 00110110
ASCII 184(B8)h"Ai"
C000:5C95
00 00000000
00 00000000
F8|11111000
18 00011000
F8|11111000
18 00011000
18 00011000
18 00011000
ASCII 185(B9)h"Aj"
C000:5C9D
36|00110110
36|00110110
F6|11110110
06 00000110
F6|11110110
36|00110110
36|00110110
36|00110110
ASCII 186(BA)h"Ak"
C000:5CA5
36|00110110
36|00110110
36|00110110
36|00110110
36|00110110
36|00110110
36|00110110
36|00110110
ASCII 187(BB)h"Al"
C000:5CAD
00 00000000
00 00000000
FE|11111110
06 00000110
F6|11110110
36|00110110
36|00110110
36 00110110
ASCII 188(BC)h"Am"
C000:5CB5
36|00110110
37 00110110
F6|11110110
06 00000110
FE|11111110
00 00000000
00 00000000
00 00000000
ASCII 189(BD)h"An"
C000:5CBD
36|00110110
36|00110110
36|00110110
38 00110110
FE|11111110
00|00000000
00|00000000
00 00000000
ASCII 190(BE)h"Ao"
C000:5CC5
18|00011000
18 00011000
F8|11111000
18 00011000
F8|11111000
00 00000000
00 00000000
00 00000000
ASCII 191(BF)h"Ap"
C000:5CCD
00 00000000
00 00000000
00 00000000
00 00000000
F8|11111000
18 00011000
18 00011000
18 00011000
ASCII 192(C0)h"Aq"
C000:5CD5
18 00011000
18 00011000
18 00011000
18 00011000
1F|00011111
00 00000000
00 00000000
00 00000000
ASCII 193(C1)h"Ar"
C000:5CDD
18 00011000
18 00011000
18 00011000
18 00011000
FF|11111111
00 00000000
00 00000000
00 00000000
ASCII 194(C2)h"As"
C000:5CE5
00 00000000
00 00000000
00 00000000
00 00000000
FF|11111111
18 00011000
18 00011000
18 00011000
ASCII 195(C3)h"At"
C000:5CED
18 00011000
18 00011000
18 00011000
18 00011000
1F|00011111
18 00011000
18 00011000
18 00011000
ASCII 196(C4)h"Au"
C000:5CF5
00 00000000
00 00000000
00 00000000
00 00000000
FF|11111111
00 00000000
00 00000000
00 00000000
ASCII 197(C5)h"Av"
C000:5CFD
18 00011000
18 00011000
18 00011000
18 00011000
FF|11111111
18 00011000
18 00011000
18 00011000
ASCII 198(C6)h"Aw"
C000:5D05
18 00011000
18 00011000
1F|00011111
18 00011000
1F|00011111
18 00011000
18 00011000
18 00011000
ASCII 199(C7)h"Ax"
C000:5D0D
36 00110110
36 00110110
36 00110110
36 00110110
37 00110111
36 00110110
36 00110110
36 00110110
ASCII 200(C8)h"Ay"
C000:5D15
36 00110110
36 00110110
37 00110111
30 00110000
3F|00111111
00 00000000
00 00000000
00 00000000
ASCII 201(C9)h"Az"
C000:5D15
00 00000000
00 00000000
3F|00111111
30 00110000
37|00110111
36 00110110
36 00110110
36 00110110
ASCII 202(CA)h"Ba"
C000:5D25
36 00110110
36 00110110
F7|11110111
00 00000000
FF|11111111
00 00000000
00 00000000
00 00000000
ASCII 203(CB)h"Bb"
C000:5D2D
00 00000000
00 00000000
FF|11111111
00 00000000
F7|11110111
36 00110110
36 00110110
36 00110110
ASCII 204(CC)h"Bc"
C000:5D35
36 00110110
36 00110110
37 00110111
30 00110000
38 00110111
36 00110110
36 00110110
36 00110110
ASCII 205(CD)h"Bd"
C000:5D3D
00 00000000
00 00000000
FF|11111111
00 00000000
FF|11111111
00 00000000
00 00000000
00 00000000
ASCII 206(CE)h"Be"
C000:5D45
36 00110110
36 00110110
F7|11110111
00 00000000
F7|11110111
36 00110110
36 00110110
36 00110110
ASCII 207(CF)h"Bf"
C000:5D4D
18 00011000
18 00011000
FF|11111111
00 00000000
FF|11111111
00 00000000
00 00000000
00 00000000
ASCII 208(D0)h"Bg"
C000:5D55
36 00110110
36 00110110
36 00110110
36 00110110
FF|11111111
00 00000000
00 00000000
00 00000000
ASCII 209(D1)h"Bh"
C000:5D5D
00 00000000
00 00000000
FF|11111111
00 00000000
FF|11111111
18 00011000
18 00011000
18|00011000
ASCII 210(D2)h"Bi"
C000:5D65
00 00000000
00 00000000
00 00000000
00 00000000
FF|11111111
36 00110110
36 00110110
36 00110110
ASCII 211(D3)h"Bj"
C000:5D6D
36 00110110
36 00110110
36 00110110
36 00110110
3F|00111111
00 00000000
00 00000000
00 00000000
ASCII 212(D4)h"Bk"
C000:5D75
18 00011000
18 00011000
1F|00011111
18 00011000
1F|00011111
00 00000000
00 00000000
00|00000000
ASCII 213(D5)h"Bl"
C000:5D7D
00 00000000
00 00000000
1F|00011111
18 00011000
1F|00011111
18 00011000
18 00011000
18 00011000
ASCII 214(D6)h"Bm"
C000:5D85
00 00000000
00 00000000
00 00000000
00 00000000
3F|00111111
36 00110110
36 00110110
36 00110110
ASCII 215(D7)h"Bn"
C000:5D8D
36 00110110
36 00110110
36 00110110
36 00110110
FF|11111111
36 00110110
36 00110110
36 00110110
ASCII 216(D8)h"Bo"
C000:5D95
18 00011000
18 00011000
FF|11111111
18 00011000
FF|11111111
18 00011000
18 00011000
18 00011000
ASCII 217(D9)h"Bp"
C000:5D9D
18 00011000
18 00011000
18 00011000
18 00011000
F8|11111000
00 00000000
00 00000000
00 00000000
ASCII 218(DA)h"Bq"
C000:5DA5
00 00000000
00 00000000
00 00000000
00 00000000
1F|00011111
18 00011000
18 00011000
18 00011000
ASCII 219(DB)h"Br"
C000:5DAD
FF|11111111
FF|11111111
FF|11111111
FF|11111111
FF|11111111
FF|11111111
FF|11111111
FF|11111111
ASCII 220(DC)h"Bo"
C000:5DB5
00 00000000
00 00000000
00 00000000
00 00000000
FF|11111111
FF|11111111
FF|11111111
FF|11111111
ASCII 221(DD)h"Bs"
C000:5DBD
F0|00000111
F0|00000111
F0|00000111
F0|00000111
F0|00000111
F0|00000111
F0|00000111
F0|00000111
ASCII 222(DE)h"Bt"
C000:5DC5
0F|00001111
0F|00001111
0F|00001111
0F|00001111
0F|00001111
0F|00001111
0F|00001111
0F|00001111
ASCII 223(DF)h"Bu"
C000:5DCD
FF|11111111
FF|11111111
FF|11111111
FF|11111111
00 00000000
00 00000000
00 00000000
00 00000000
ASCII224(E0)h"Bv"
C000:5DD5
00 00000000
00 00000000
76 01110110
DC|11011100
C8|11001000
DC|11011100
76 01110110
00 00000000
ASCII 225(E1)h"Bw"
C000:5DDD
00 00000000
78|01111000
CC|11001100
F8|11111000
CC|11001100
F8|11111000
C0|11000000
C0|11000000
ASCII 226(E2)h"Bx"
C000:5DE5
00 00000000
FC|11111100
CC|11001100
C0|11000000
C0|11000000
C0|11000000
C0|11000000
00 00000000
ASCII 227(E3)h"By"
C000:5DED
00 00000000
FE|11111110
6C|01101100
6C|01101100
6C|01101100
6C|01101100
6C|01101100
00 00000000
ASCII 228(E4)h"Bz"
C000:5DF5
FC|11111100
CC|11001100
60 01100000
30 00110000
60 01100000
CC|11001100
FC|11111100
00 00000000
ASCII 229(E5)h"Ca"
C000:5DFD
00 00000000
00 00000000
7E|01111110
D8|11011000
D8|11011000
D8|11011000
70 01110000
00 00000000
ASCII 230(E6)h"Cb"
C000:5D05
00 00000000
66 01100110
66 01100110
66 01100110
66 01100110
7C|01111110
60 01100000
C0|11000000
ASCII 231(E7)h"Cc"
C000:5E0D
00 00000000
76 01110110
DC|11011100
18 00011000
18 00011000
18 00011000
18 00011000
00 00000000
ASCII 232(E8)h"Cd"
C000:5E15
FC|11111100
30 00110000
78|01111000
CC|11001100
CC|11001100
78|01111000
30 00110000
FC|11111100
ASCII 233(E9)h"Ce"
C000:5E1D
38|00111000
6C|01101100
C6|11000110
FE|11111110
C6|11000110
6C|01101100
38|00111000
00 00000000
ASCII 234(EA)h"Cf"
C000:5E25
38|00111000
6C|01101100
C6|11000110
C6|11000110
6C|01101100
6C|01101100
EE|11101110
00 00000000
ASCII 235(EB)h"Cg"
C000:5E2D
1C|00011100
30 00110000
18 00011000
7C|01111100
CC|11001100
CC|11001100
78|01111000
00 00000000
ASCII 236(EC)h:Ch"
C000:5E35
00 00000000
00 00000000
7E|01111110
DB|11011011
DB|11011011
7E|01111110
00 00000000
00|00000000
ASCII 237(ED)h"Ci"
C000:5E3D
06 00000110
0C|00001100
7E|01111110
DB|11011011
DB|11011011
7E|01111110
60 01100000
C0|11000000
ASCII 238(EE)h"Cj"
C000:5E45
38|00111000
60 01100000
C0|11000000
F8|11111000
C0|11000000
60 01100000
38|00111000
00 00000000
ASCII 239(EF)h"Ck"
C000:5E4D
78|01111000
CC|11001100
CC|11001100
CC|11001100
CC|11001100
CC|11001100
CC|11001100
00 00000000
ASCII 240(F0)h"Cl"
C000:5E55
00 00000000
FC|11111100
00 00000000
FC|11111100
00 00000000
FC|11111100
00 00000000
00 00000000
ASCII 241(F1)h"Cm"
C000:5E5D
30 00110000
30 00110000
FC|11111100
30 00110000
30 00110000
00 00000000
FC|11111100
00 00000000
ASCII 242(F2)h"Cn"
C000:5E65
60 01100000
30 00110000
18 00011000
30 00110000
60 01100000
00 00000000
FC|11111100
00 00000000
ASCII 243(F3)h"Co"
C000:5E6D
18 00011000
30 00110000
60 01100000
30 00110000
18 00011000
00 00000000
FC|11111100
00 00000000
ASCII 244(F4)h"Cp"
C000:5E75
0E|00001110
1B|00011011
1B|00011011
18 00011000
18 00011000
18 00011000
18 00011000
18 00011000
ASCII 245(F5)h"Cq"
C000:5E7D
18 00011000
18 00011000
18 00011000
18 00011000
18 00011000
D8|11011000
D8|11011000
70 01110000
ASCII 246(F6)h"Cr"
C000:5E85
30 00110000
30 00110000
00 00000000
FC|11111100
00 00000000
30 00110000
30 00110000
00 00000000
ASCII 247(F7)h"Cs"
C000:5E8D
00 00000000
76 01110110
DC|11011100
00 00000000
76 01110110
DC|11011100
00 00000000
00 00000000
ASCII 248(F8)h"Ct"
C000:5E95
38|00111000
6C|01101100
6C|01101100
38|00111000
00 00000000
00 00000000
00 00000000
00 00000000
ASCII 249(F9)h"Cu"
C000:5E9D
00 00000000
00 00000000
00 00000000
18 00011000
18 00011000
00 00000000
00 00000000
00 00000000
ASCII 250(FA)h"Cv"
C000:5EA5
00 00000000
00 00000000
00 00000000
00 00000000
18 00011000
00 00000000
00 00000000
00 00000000
ASCII 251(FB)h"Cw"
C000:5EAD
0F|00001111
0C|00001100
0C|00001100
0C|00011100
EC|11101100
6C|01101100
3C|00111100
1C|00011100
ASCII 252(FC)h"Cx"
C000:5EB5
78|01111000
6C|01101100
6C|01101100
6C|01101100
6C|01101100
00 00000000
00 00000000
00 00000000
ASCII 253(FD)h"Cy"
C000:5EBD
70 01110000
18 00011000
30 00110000
60 01100000
77 01111000
00 00000000
00 00000000
00 00000000
ASCII 254(FE)h"Cz"
C000:5EC5
00 00000000
00 00000000
3C|00111100
3C|00111100
3C|00111100
3C|00111100
00 00000000
00 00000000
ASCII 255(FF)h"Cż)
C000:5ECD
00 00000000
00 00000000
00 00000000
00 00000000
00 00000000
00 00000000
60 01100000
37 00111000
Wyszukiwarka
Podobne podstrony:
2009 10 Programowanie przy uzyc NieznanyProgram Konwergencji 2011 dla PLOcena krajowego programu reform i programu konwergencji POLSKI z 2012 rprogram konwersatorium tabu 201110 Programowa obsługa sygnałów analogowych materiały wykładoweProgramowanie notatka 10 09 12ekonomietria programowanie liniowe (10 stron)10 6 3 Ustanawianie sesji konsoli przy u yciu programu MinicomProgram WWL 09 1010 be4it programming1Programowanie C laborki c 12 10 0610 anti malware programs2001 10 Choosing a Graphical Toolkit for Kde ProgrammingProgram liczacy sume i roznice dwoch liczb calkowitychProgramowanie C laborki C 19 10 200610 2 ISTA ProgrammingLAB 10 INF Ĺšrodowisko programowania QT student2004 10?lipse i Java–program do obliczania sum kontrolnych [Programowanie]Podstawy Programowania 13 10 2014więcej podobnych podstron