Oprogramowanie podstawowe
trybu rzeczywistego
Cd.: wybrane urz
ą
dzenia, zimny
start, struktura programu
Co dzi
ś
b
ę
dzie…
•
Wybrane urz
ą
dzenia
:
– CMOS,
– zegar,
– generator d
ź
wi
ę
ku,
– ekran,
– klawiatura
• Zimny start i ładowanie
• Struktura .EXE
2
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
3
Wybrane urz
ą
dzenia – CMOS
4
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
ń
5
6
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
7
8
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
9
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.
10
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.
11
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
12
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).
13
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}.
14
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;
15
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;
16
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.
17
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.
18
Wybrane urz
ą
dzenia -
klawiatura
19
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
20
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
21
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
22
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
23
Pami
ęć
w real address mode
24
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.
25
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
26
27
Co jest w pami
ę
ci?
28
System i programy w pami
ę
ci
29
Moduł ładowalny .EXE (DOS)
EXE header
00 word "MZ" - Link file .EXE signature (Mark Zbikowski?)
02 word length of image mod 512
04 word size of file in 512 byte pages
06 word number of relocation items following header
08 word size of header in 16 byte paragraphs, used to locate the beginning of
the load module
0A word min # of paragraphs needed to run program
0C word max # of paragraphs the program would like
0E word offset in load module of stack segment (in paras)
10 word initial SP value to be loaded
12 word negative checksum of pgm used while by EXEC loads pgm
14 word program entry point, (initial IP value)
16 word offset in load module of the code segment (in paras)
18 word offset in .EXE file of first relocation item
1A word overlay number (0 for root program)
RELOCATION TABLE
IMAGE
30
Moduł ładowalny .EXE, cd.
•
- relocation table and the program load module follow the header
•
- relocation entries are 32 bit values representing the offset into the
load module needing patched
•
- once the relocatable item is found, the CS register is added to the
value found at the calculated offset
•
Registers at load time of the EXE file are as follows:
•
AX:
contains number of characters in command tail, or 0
•
BX:CX
32 bit value indicating the load module memory size
•
DX
zero
•
SS:SP
set to stack segment if defined else, SS=CS and SP=0
or top of memory.
•
DS
set to segment address of EXE header
•
ES
set to segment address of EXE header
•
CS:IP
far address of program entry point, (label on "END„
statement of program)
31
Moduł wykonywalny
• PSP – Program Segment Prefix
• Blok opisu otoczenia ENVIRONMENT
– por. komend
ę
SET
• Image a posta
ć
.COM
• Organizacja wielu programów w pami
ę
ci
• Bloki allokacji pami
ę
ci
• UMB – Upper Memory Blocks
32
Bloki allokacji pami
ę
ci
33
Bloki po załadowaniu TD BAL
34
Blok environment
35
PSP i program
36
Rozkazy, które trzeba zna
ć
– ADD, SUB, CMP
– NOT, AND, OR, XOR, TEST
– INC, DEC
– PUSH, POP
– IN, OUT
– JMP, CALL, RET
– Jxx, JCXZ, LOOP
– INT, IRET
37