Oprogramowanie podstawowe
trybu rzeczywistego
Cd.: Turbo Debugger, wybrane
urz
ą
dzenia, zimny start
Co dzi
ś
b
ę
dzie…
• Powtórzenie – program Hello0, kompilacja
i uruchamianie
•
Wybrane urz
ą
dzenia
:
– CMOS,
– zegar,
– generator d
ź
wi
ę
ku,
– ekran,
– klawiatura
• BIOS i DOS – jak startuje system
2
Pierwszy program 16-bitowy „pod
DOS”
2 nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5 start:
PUSH CS
6
POP DS.
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7 koniec:
MOV AH,4CH
8
INT 21H
3 nazwa
ENDS
1
END start
3
Pierwszy program 16-bitowy „pod
DOS”
2
nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5 start:
PUSH CS
6
POP DS.
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7 koniec:
MOV AH,4CH
8
INT 21H
3
nazwa
ENDS
1
END start
4
Pierwszy program 16-bitowy „pod
DOS”
2
nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5 start:
PUSH CS
6
POP DS.
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7 koniec:
MOV AH,4CH
8
INT 21H
3
nazwa
ENDS
1
END start
5
Pierwszy program 16-bitowy „pod
DOS”
2
nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5
start:
PUSH CS
6
POP DS.
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7 koniec:
MOV AH,4CH
8
INT 21H
3
nazwa
ENDS
1
END
start
6
Pierwszy program 16-bitowy „pod
DOS”
2
nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5
start:
PUSH CS
6
POP DS
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7 koniec:
MOV AH,4CH
8
INT 21H
3
nazwa
ENDS
1
END start
7
Pierwszy program 16-bitowy „pod
DOS”
2
nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5
start:
PUSH CS
6
POP DS
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7
koniec:
MOV AH,4CH
8
INT 21H
3
nazwa
ENDS
1
END start
8
Pierwszy program 16-bitowy „pod
DOS”
2
nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11
napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5
start:
PUSH CS
6
POP DS
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7
koniec:
MOV AH,4CH
8
INT 21H
3
nazwa
ENDS
1
END start
9
Pierwszy program 16-bitowy „pod
DOS”
2
nazwa
SEGMENT
4
ASSUME CS:nazwa, DS:nazwa
11
napis
DB 0AH, 0DH, "Hej!", 0AH, 0DH, '$‘
5
start:
PUSH CS
6
POP DS
12
MOV DX,OFFSET napis
9
MOV AH,9
10
INT 21H
7
koniec:
MOV AH,4CH
8
INT 21H
3
nazwa
ENDS
1
END start
10
Kompilacja
• e:\Adam\>e:\tasm\bin\tasm /l /zi hello0
Turbo Assembler Version 4.1 Copyright (c)
1988, 1996 Borland International
Assembling file: hello0.ASM
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 397k
11
„Listing”
12
„Listing”
13
Ł
ą
czenie i wykonanie
• e:\>e:\tasm\bin\tlink /v hello0
Turbo Link Version 7.1.30.1. Copyright (c)
1987, 1996 Borland International
Warning: No stack
E:\>hello0
Hej!
E:\>
14
TD – program z „debug
information”
15
TD – program po załadowaniu
16
Po PUSH CS
17
Po POP DS
18
Po ładowaniu DX
19
Po ustawieniu AH
20
Po wypisaniu „Hej!” na konsoli
21
Ekran u
ż
ytkownika (AltF5)
22
Po ładowaniu AH
23
Koniec…
24
A tak wygl
ą
dał ekran AFD…
25
Wybrane urz
ą
dzenia - CMOS
• Na płycie głównej urz
ą
dzenia zewn
ę
trzne z
podtrzymaniem bateryjnym:
– pami
ęć
konfiguracyjna (CMOS)
– Zegar czasu rzeczywistego (licznik impulsów z
generatora)
• Dost
ę
p do komórki pami
ę
ci CMOS:
– O adresie ustawionym w porcie o adresie 70H
– Przez port o adresie 071H w przestrzeni I/O
• Np. odczyt komórki 8 CMOS do AL:
– MOV AL,8
– OUT 70H,AL
– JMP $+2
– IN AL,71H
26
Wybrane urz
ą
dzenia – CMOS
27
Wybrane urz
ą
dzenia - zegar
• Zegar czasu rzeczywistego generuje sygnał
przerwania IRQ0
• co 55ms, tzn. 18,2 razy na sekund
ę
• Je
ś
li IF=1, sterownik przerwa
ń
generuje przerwanie nr
8
• Podprogram obsługi przerwania
– aktualizuje czterobajtowy licznik w pami
ę
ci pod adresem
0:46CH (licznik zwi
ę
kszany o 1 co 55ms)
– zmniejsza o 1 warto
ść
jednobajtowego licznika pod
adresem 0:440H
– jak wszystkie podprogramy obsługi przerwa
ń
zewn
ę
trznych:
• MOV AL,20H ; kod EOI (End Of Interrupt)
• OUT 20H,AL ; port sterownika przerwa
ń
28
29
Wybrane urz
ą
dzenia – generator
d
ź
wi
ę
ku
• Blokowanie d
ź
wi
ę
ku (jak bramka A20, czy
reset) przez sterownik klawiatury – port 61H
w przestrzeni I/O
• Zera na bitach 0 i 1 – blokuj
ą
•
IN AL,61H
; odczytanie portu 61H...
AND AL,0FCH
; maskowanie speaker'a...
OUT 61H,AL
; zapisanie - wył
ą
czenie speaker'a
•
Jedynki na bitach 0 i 1 – zezwalaj
ą
na d
ź
wi
ę
k
IN AL,61H
; odczytanie portu 61H...
OR AL,3
; odblokowanie...
OUT 61H,AL
; i zapisanie - wł
ą
czenie
30
31
Wybrane urz
ą
dzenia – generator
d
ź
wi
ę
ku
• Wysoko
ś
ci
ą
d
ź
wi
ę
ku steruje rejestr dost
ę
pny
przez port 42H, po wpisaniu warto
ś
ci 0B6H
do portu 43H
•
MOV AL,0B6H ;
adres...
•
OUT 43H,AL
;
do rejestru 43H;
•
MOV AL,DL
;
wys. d
ź
wi
ę
ku - mniej znacz
ą
cy B
•
OUT 42H,AL
•
MOV AL,DH
;
wys. dzwieku - bardziej znaczacy
•
OUT 42H,AL
32
Wybrane urz
ą
dzenia - ekran
• W IBM PC pami
ęć
obrazu na karcie graficznej to tzw.
„wy
ś
wietlana pami
ęć
”: dwudost
ę
pne urz
ą
dzenie
pami
ę
taj
ą
ce.
• Zawarto
ść
pami
ę
ci obrazu jest cyklicznie odczytywana
ok. 20 razy na sekund
ę
przez układy wy
ś
wietlania, ta
zawarto
ść
steruje obrazem na ekranie.
• Pami
ęć
obrazu mo
ż
e by
ć
zapisywana przez procesor –
jest dost
ę
pna w przestrzeni adresowej pami
ę
ci
operacyjnej.
• Tryb graficzny: gdy jednostka informacji w pami
ę
ci
obrazu opisuje jeden punkt na ekranie (pixel)
• Tryb tekstowy (znakowy), gdy opisuje tzw. znak:
prostok
ą
tny obszar na ekranie. Znaki s
ą
grupowane w
wiersze i kolumny.
33
Tryby znakowe
•
W trybach znakowych pojedynczym elementem obrazu na ekranie
jest znak.
•
Znak jest obszarem prostok
ą
tnym, który mo
ż
e znajdowa
ć
si
ę
na
ekranie tylko w jednym ze
ś
ci
ś
le okre
ś
lonych poło
ż
e
ń
: cały obraz na
ekranie w trybie znakowym składa si
ę
z pewnej liczby wierszy i
kolumn znakowych.
•
Rozmiar pola znaku (w punktach) zale
ż
y od typu sterownika, za
ś
liczby kolumn i wierszy zale
żą
od wybranego trybu znakowego.
•
Ka
ż
dy znak w pami
ę
ci video kodowany jest w postaci dwóch bajtów:
pierwszy (o ni
ż
szym adresie) zawiera kod znaku (ASCII), za
ś
drugi
bajt (o adresie o 1 wi
ę
kszym) zawiera tzw. atrybut, okre
ś
laj
ą
cy
barw
ę
lub stopie
ń
szaro
ś
ci znaku (tzw. kolor pierwszoplanowy),
barw
ę
lub stopie
ń
szaro
ś
ci tła i wska
ź
nik migotania znaku.
Migotanie polega na okresowym przeł
ą
czaniu koloru znaku z koloru
pierwszoplanowego do koloru tła i odwrotnie. Bit steruj
ą
cy
migotaniem mo
ż
e by
ć
wykorzystywany jako bit steruj
ą
cy jasno
ś
ci
ą
koloru tła.
34
Tryby podstawowe
•
Tablica trybów pracy sterowników obrazu
•
Pami
ęć
•
Tryb_ __Rodzaj__ Rozdzielczo
ść
Sterowniki _____Kolory_______ obrazu
•
00h
Tekstowy
40 x 25
Oprócz MDA
16 stopni szaro
ś
ci
B8000
•
01h Tekstowy
40 x 25
Oprócz MDA
16 znak/8 tło
B8000
•
02h Tekstowy
80 x 25
Oprócz MDA
16 stopni szaro
ś
ci
B8000
•
03h Tekstowy
80 x 25
Oprócz MDA
16 znak/8 tło
B8000
•
04h Graficzny
320 x 200 Oprócz MDA
4
B8000
•
05h Graficzny
320 x 200 Oprócz MDA
4 stopnie szaro
ś
ci
B8000
•
06h Graficzny
640 x 200 Oprócz MDA
2
B8000
•
07h Tekstowy
80 x 25
MDA,EGA,HGC czer
ń
/biel
B0000
•
0Bh Zarezerwowany
(wewn
ę
trzny dla EGA)
•
0Ch Zarezerwowany
(wewn
ę
trzny dla EGA)
•
0Dh Graficzny
320 x 200 EGA
16
A0000
•
0Eh Graficzny
640 x 200 EGA
16
A0000
•
0Fh Graficzny
640 x 350 EGA czer
ń
/biel
A0000
•
10h Graficzny
640 x 350 EGA
16
A0000
35
Atrybut w trybach tekstowych
• CGA i EGA
• bit nr:
7
6 5
4
3 2
1
0
•
B
R G
B
I
R
G
B
•
•
Kolor
Kolor
•
tła pierwszego planu (znaku)
•
•
migotanie Intensywno
ść
koloru znaku
• R - składowa czerwona barwy (Red);
• G - składowa zielona barwy (Green);
• B - składowa niebieska barwy (Blue).
36
Kodowanie barw
•
bit znaki gdy sterownik
•
•
Warto
ść
I
R
G
B
Monochrom.
Kolor
•
•
0
0
0
0
0
Czarne
Czarne
•
1
0
0
0
1
Podkre
ś
lone Niebieskie
•
2
0
0
1
0
Zielone
•
3
0
0
1
1
Cyjan
•
4
0
1
0
0
Czerwone
•
5
0
1
0
1
Magenta
•
6
0
1
1
0
Br
ą
zowe
•
7
0
1
1
1
Białe
Białe
•
•
8
1
0
0
0
Szare
•
9
1
0
0
1
Jasne Podkr. Jasne Niebieskie
•
10
1
0
1
0
Jasne Zielone
•
11
1
0
1
1
Jasne Cyjan
•
12
1
1
0
0
Jasne Czerwone
•
13
1
1
0
1
Jasne Magenta
•
14
1
1
1
0
ś
ółte
•
15
1
1
1
1
Jasne Białe Jasne Białe
•
Cyjan - kolor niebieskozielony;
•
Magenta - fioletowy.
37
Pami
ęć
obrazu
• Obowi
ą
zuj
ą
nast
ę
puj
ą
ce reguły wyznaczania poło
ż
enia
bajtów opisuj
ą
cych znak w pami
ę
ci obrazu:
• AdK = 2*LK*Y + 2*X
• AdA = 2*LK*Y + 2*X + 1
• gdzie:
• AdK - adres kodu znaku wzgl
ę
dem pocz
ą
tku strony w
pami
ę
ci obrazu;
• AdA - adres atrybutu znaku wzgl
ę
dem pocz
ą
tku strony w
pami
ę
ci obrazu;
• LK - liczba kolumn w aktualnym trybie, LK {40,80};
• X - numer kolumny pozycji znaku na ekranie, X
{0..LK-1};
• Y - numer wiersza pozycji znaku na ekranie, Y {0..24}.
38
Przerwanie BIOSu 10H
AH=0
- ustawienie nowego trybu wy
ś
wietlania
dane:
AL - nowy tryb wy
ś
wietlania; wyniki: nie ma;
AH=1
- ustawienie rozmiaru kursora:
dane: CL (bity 4..0) - numer pierwszej (od góry) linii kursora w polu znaku;
CH (bity 4..0) - numer ostatniej (od góry) linii kursora w polu znaku;
wyniki: nie ma;
AH=2
- ustawienie poło
ż
enia kursora:
dane:
BH - numer strony;
DL - nr kolumny; DH - nr wiersza;
wyniki: nie ma;
AH=3
- odczytanie poło
ż
enia i rozmiaru kursora:
dane:
BH - numer strony;
wyniki
:DL - nr kolumny, w której znajduje si
ę
kursor;
DH - nr wiersza, w którym znajduje si
ę
kursor;
CL (bity 4..0) - numer pierwszej (licz
ą
c od góry) linii kursora w polu znaku;
CH (BITY 4..0) - numer ostatniej (licz
ą
c od góry) linii kursora w polu znaku;
39
Przerwanie BIOSu 10H cd.
AH=4 - ustawienie numeru (przeł
ą
czenie) strony wy
ś
wietlanej
dane: AL - nowy numer strony do wy
ś
wietlania; wyniki: nie ma;
AH=8 - odczytanie znaku i atrybutu z pozycji wskazywanej przez
kursor:
dane: BH - numer strony; wyniki: AL - kod znaku; AH - atrybut;
AH=9 - zapisanie znaku i atrybutu wielokrotnie na pozycji
wskazywanej przez kursor:
dane: BH - nr strony; AL - kod znaku; BL - atrybut; CX - liczba
powtórze
ń
znaku;
wyniki: nie ma;
AH=10 (0AH) - zapisanie znaku wielokrotnie na pozycji wskazywanej
przez kursor:
dane: BH - nr strony; AL - kod znaku; CX - liczba powtórze
ń
znaku;
wyniki: nie ma;
40
Przerwanie BIOSu 10H cd.
AH=12 (0CH) - zapisanie punktu na ekranie (w trybie graficznym;
funkcja niedozwolona dla sterownika Hercules
dane: AL - kolor punktu (piksela);
CX - pionowa pozycja punktu (numer wiersza punktów na ekranie);
DX - pozioma pozycja punktu (numer kolumny punktów na ekranie);
BH - numer strony wy
ś
wietlanej;
wyniki:
nie ma;
AH=13 (0DH) - odczytanie punktu z ekranu (w trybie graficznym;
funkcja niedozwolona dla sterownika Hercules):
dane: CX - pionowa pozycja punktu (numer wiersza punktów na
ekranie);
DX - pozioma pozycja punktu (numer kolumny punktów na ekranie);
BH - numer strony wy
ś
wietlanej;
wyniki: AL - kolor punktu (piksela);
41
Przerwanie BIOSu 10H cd.
AH=14 (0EH) - zapisanie znaku na ekranie na polucji
kursora i przesuni
ę
cie kursora (tzw. zapis w trybie TTY):
dane: AL - kod znaku do zapisania; BL - kolor tła (gdy
tryb graficzny); BH - numer strony;
wyniki: nie ma;
AH=15 (0FH) - pobranie aktualnego trybu video:
dane: nie ma;
wyniki:
AL - tryb video;
AH - liczba kolumn na stronie;
BH - numer strony wy
ś
wietlanej.
42
Funkcja 9 DOSu
AH=9 przy wywołaniu przerwania INT 33
(21H) - wyprowadzenie ła
ń
cucha znaków
ograniczonego znakiem $ (dolara):
dane:DS:DX - adres pocz
ą
tku ła
ń
cucha
znaków;
wyniki: nie ma;
ła
ń
cuch znaków powinien by
ć
zako
ń
czony
znakiem $ (dolara), który nie b
ę
dzie wysyłany na
ekran. Nie ma sposobu wy
ś
wietlenia znaku
dolara za pomoc
ą
tej funkcji.
43
Wybrane urz
ą
dzenia -
klawiatura
44
Przerwania klawiatury 1
• Przerwanie sprz
ę
towe 9: po kazdym
wci
ś
ni
ę
ciu, zwolnieniu i przekroczeniu
interwału przytrzymywania klawisza; porty
sterownika klawiatury od 60H poczynaj
ą
c
• BIOS odczytuje numer (kod skanowania)
klawisza, dokonuje konwersji na ASCII i
umieszcza te dwa bajty w buforze
pier
ś
cieniowym (FIFO) klawiatury
45
Przerwania klawiatury 2
•
Przerwanie usługowe BIOS nr 22 (16H), bez „echa”, funkcje:
•
AH=0 –
pobranie
znaku z bufora klawiatury: ASCII
AL, scan code
AH
•
AH=1 – sprawdzenie bufora (NIE „wyjmuje” znaku z bufora):
– Je
ś
li bufor jest pusty, to 1
ZF, je
ś
li nie, to 0
ZF i
odczyt
(bez
kasowania w buforze) jak przy funkcji 0
•
AH=2 – odczyt bajtu stanu klawiszy specjalnych „shift”
– 7 stan Insert (zwi
ą
zany z klawiszem Ins)
– 6 stan CapsLock
– 5 stan NumLock
– 4 stan ScrollLock
– 3 Alt
– 2 Ctrl
– 1 lewy klawisz Shift
– 0 prawy klawisz Shift
•
AH = 10H, 11H, 12H to odpowiedniki 0, 1 i 2 dla „nowych” klawiatur
46
Przerwania klawiatury 3
• Przerwanie 21H DOS, funkcja AH=10H
„wej
ś
cie buforowe z klawiatury”
– AH=10H
– DS:DX – adres pola buforowego
– Pierwszy znak pola (ds:dx) powinien zawiera
ć
długo
ść
pola
– Wynik: ds:[dx+1] – liczba znaków
wprowadzonych (do Enter lub ko
ń
ca bufora)
– Od ds:(dx+2) wprowadzone znaki
47
Jak startuje 80x86 (tak
ż
e Pantium,
czy np. pierwszy z rdzeni Core 2
Duo)
Przestrzenie adresowe dostrzegane przez
programist
ę
:
Pami
ę
ci: 1M + 64K – 16 = 0FFFF0H+0FFFFH = 10FFEFH
[B]
I/O: 64KB
Urz
ą
dze
ń
pami
ę
ci głównej – w zale
ż
no
ś
ci od zestawu, np.:
2GB
Pami
ę
ci karty graficznej – w zale
ż
no
ś
ci od typu, np. 1GB
Przestrzenie niedost
ę
pne bezpo
ś
rednio, np.:
Pami
ę
ci konfiguracyjnej (CMOS)
Dysków…
Niedostrzegalne dla programisty - ró
ż
nego rodzaju
bufory:
Caches procesora: I i II poziom
Bufory dysków
48
Pami
ęć
w real address mode
49
Jak startuje system? Zimny start
•
POST: (Power-On-Self Test), w którym:
•
inicjowanie wszystkich podzespołów płyty głównej i test poprawno
ś
ci ich pracy;
•
ustawienie wektorów przerwa
ń
BIOS'u, pozostałe wektory ustawiane na "puste"
podprogramy obsługi (IRET);
•
Ustalenie i zapami
ę
tanie konfiguracji;
•
doł
ą
czenie oprogramowania z kart rozszerze
ń
: obszar od 0A0000H sprawdzany co
256 B, czy nie zawiera 55AAH - je
ś
li tak, to CALL FAR PTR xxx:3 (gdzie xxx to
sprawdzany adres); tam program inicjuj
ą
cy:
–
inicjalizacja podzespołów karty,
–
sprawdzenie ich sprawno
ś
ci i
–
ustawienie odpowiednich wektorów przerwa
ń
;
•
próba odczytania z mechanizmu dyskowego A: pierwszego sektora ze
ś
cie
ż
ki
zerowej (boot record), zawieraj
ą
cego prosty program ładuj
ą
cy; w razie powodzenia
ładowania sterowanie jest przekazywane do tego programu;
•
w razie niepowodzenia próby odczytu z dysku A: dokonywana jest identyczna próba
odczytu i uruchomienia bootstrap’u z dysku C:
•
w razie niepowodzenia odczytu z C: próba uruchomienia interpretera j
ę
zyka BASIC;
•
w razie niepowodzenia wypisanie komunikatu (na monitorze) z
żą
daniem wło
ż
enia do
mechanizmu A: dyskietki systemowej a nast
ę
pnie oczekiwanie na spełnienie tego
żą
dania.
50
Start DOSu
• Ładowanie pierwszego sektora i CALL do
tego obszaru (MBR lub boot record).
• Poszukiwanie i ładowanie:
– IBMBIO.COM i IBMDOS.COM (IBM)
– IO.SYS i MSDOS.SYS (Microsoft)
• Dodatki według CONFIG.SYS
• Ładowanie COMMAND.COM
• Pierwszy batch: AUTOEXEC.BAT
51