Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Píšeme operační systém: boot

Chtěli jste si někdy napsat vlastní operační systém? Nebo jste alespoň chtěli vědět, jak se to dělá? V následujícím článku si popíšeme jednoduchý postup, jak vytvořit boot disketu.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Operační Systém

Začnu tím, že se pokusím definovat pojem operační systém. Kdysi „dávno” před osobními počítači, kdy byly počítače velké jako tělocvičny a neexistovaly OS, program se nadírkoval (nahrál) a když skončil, nadírkoval se další. Ale počítačový čas byl moc drahý na takové plýtvání, a tak vznikly první OS, a to jako programy, které jen postupně pouští ostatní programy. Bylo také velmi nepraktické, že každý program musel mít vlastní ovladače k hardwaru a skoro každý prvek hardwaru byl unikátní, takže přenositelnost programů byla minimální. Takže se do OS začalo integrovat jednotné rozhraní mezi programy a periferiemi (ovladač).

Postupným vývojem jsme se dostali až k dnešní podobě, kdy, díky hardwarové podpoře CPU multitaskingu a multiprocesingu, může dnešní OS střídat běžící programy tak, že slyšíme hudbu, stahujeme soubory a zároveň třeba programujeme. Co ale tedy je operační systém? Je to program, který přiděluje programům paměť a hlavně je „pouští” na procesor. Nedílnou součástí je jednotný přístup k periferiím, sítím, diskům, souborovým systémům. Dnešní OS obsahují i širokou škálu vnitřních nástrojů jako sdílené knihovny nebo komunikaci mezi jednotlivými programy (tzv. systém zpráv). Je to tedy program, který je správce (hardwarových) prostředků.

CPU

Při každém novém procesoru se v minulosti také skoro vždy změnila architektura, buď změnou registrů, nebo se jednoduše přešlo z 4 bitů na 8 bitů. To znamenalo, že se každý program, OS nevyjímaje, musel přepsat, ne-li napsat zcela znovu, což bylo velice nákladné a brzdilo rozvoj.

Intel & x86

V roce 1978 firma Intel přišla na trh z procesorem Intel 8086. Byl zpětně kompatibilní s 8b procesory. Byl 16 bitový, ale adresovací sběrnici měl 20 bitovou, mohl tedy adresovat 1 MB fyzické paměti, pracoval v reálném režimu (real mode). Každý program mohl přistupovat do celé paměti, takže bezpečnost a separovatelnost programů byla na minimální úrovni. Podporoval přerušení jak hardwarové, tak i softwarové, které známe třeba z programování pod dosem. Důležité ale je, že od roku 1978 mluvíme o architektuře x86.

Dalším milníkem se stal procesor Intel 386, který byl 32b. A podporoval chráněný režim (protected mode), což je systém správy paměti, který umožňuje alokovat 4GB fyzické paměti, podporuje tzv. stránkování a virtuální paměť, kde může OS oddělit jednotlivé programy od sebe a simulovat větší paměť ukládáním stránek na disk (swap). Chráněný režim také napomáhá operačnímu systému s multitaskingem. Není ale zpětně kompatibilní s reálným režimem, což nám ale i386 vynahrazuje virtuálním režimem, který simuluje reálný. A tak můžeme programy psané pro reálný režim za kooperace OS pouštět i v chráněném. Chráněný režim podporoval už procesor Intel 286, který byl ale ještě 16bitový.

Budeme se zabývat pouze procesory x86 kompatibilními, což je asi nejpoužívanější architektura osobních počítačů. Důležité je, že každý procesor po startu (restartu) pracuje v 16 bitovém reálném adresovacím režimu a nezáleží na tom, jestli to je „stařičká” i386 nebo nejnovější 64bitový procesor architektury ia64. Je už jen na operačním systému, aby se přepnul do jiných režimů.

Boot systému

Jak tedy probíhá boot samotného systému? Po startu se nahraje do paměti BIOS a pustí se. My si nastavíme bootování z disketové mechaniky. BIOS vezme náš označený (poslední dva Byte mají speciální hodnotu) boot sector, což je první sector na disketě. Nahraje ho do paměti na místo 0000:7c00h a spustí ho.

Reálný režim

Teď si více osvětlíme reálný režim, ať víme, jak náš boot sector napsat. K dispozici máme 14 16-bitových registrů. Všeobecné: AX, BX, CX, DX, indexové a ukazatelové: SP, BP, SI, DI, segmentové: CS, DS, SS, ES a dále: IP a FLAGS. Důležitý je vztah segmentových registrů. Jak již víme, adresa je tvořena 20bity, ale registry máme 16 bitové. Adresa se tedy vytváří sečtením jednoho ze segmentových registrů posunutého o 4 bity (a vynásobeného 16) a zbytku adresy, tzv. offsetu. Adresa = segment * 16 + offset. Zapisujeme: „segment:offset”. 12 bitů se překrývá, neboli jednu adresu můžeme zapsat několika způsoby, třeba 0000:7c00h = 07c0:0000h = 00c0:7000h. Podle následujícího schematu se implicitně používají segmentové registry: SS:SP, SS:BP, DS:BX, DS:SI, DS:DI, ES:DI (řetězcové operace). Explicitní přiřazení v intel syntaxi vypadá následovně:

mov ah,es:[ukazatel]
mov ah,es:offset 

Příklady

Ukážeme si příklad boot sectoru:

; boot_sector1.asm

org 0x7c00  ;nastaveni segmentu

jmp main

;promene

boot_msg db 'Muj prvni OS...',13,10,0
klav_msg db 'Stisknete jakoukoliv klavesu k restartu',13,10,0

bootdev db 0

zprava:   ;funkce na vypis na obrazovku
lodsb
or al,al
jz short zprava_konec
mov ah,0eh
mov bx,0007h
int 10h
jmp zprava
zprava_konec:
ret

klavesa:        ;funkce na stisk klavesy
mov ah,00h
int 16h
ret

main:
cli
mov ax,9000h
mov ss,ax
mov sp,0xffff     ;nastaveni zasobniku
sti

mov [bootdev],dl  ;dl = zarizeni ze ktereho je bootovano

mov si,boot_msg   ;vypis boot zpravy
call zprava

mov si,klav_msg
call zprava
call klavesa
jmp 0xffff:0000h        ;restart

times 510-($-$) db 90h   ;sector musi byt dlouhy 512B

dw 0xaa55         ;oznaceni boot sectoru 

Program přeložíme do výstupního formátu: plain binary file a nahrajeme na disketu:

nasm -o boot_sector.asm -f bin boot_sector.bin
dd if=boot_sector.bin of=/dev/fd0 bs=512 

Pokud se budeme chtít podívat, jak soubor formátu plain binary vypadá po přeložení:

ndisasm -b 16 boot_sector.bin 

První direktiva programu (org 0×7c00) říká překladači, aby každému skoku na návěstí (call zprava), popřípadě adresaci proměnné (mov si,boot_msg) přičetl danou hodnotu, a to z důvodu umístění programu v paměti. Program se začne vykonávat prvním bytem souboru, a proto nesmí být začátek souboru datový, ale instrukční, bohatě však postačí, když nás jednoduše první instrukce přesune do těla programu ( main ) a hned potom následuje datová část. Hned na začátku těla programu nastavíme zásobník, abychom mohli volat funkce. Dále si uložíme hodnotu registru DL uchovávající driver, z nějž je bootováno. Zbytek je už na vaší fantazii. V celém programu můžeme užívat pouze funkce (přerušení) BIOSu, nikoliv DOSu, protože dos se vůbec nenahraje. Dále adresa ffff:0000h je adresou, kde začíná procesor po startu vykonávat první instrukci, proto nám k restartu stačí skočit na tuto adresu. Na konci zdrojového kódu musíme uvést direktivu, která nastaví soubor na délku 512 B a na konec přidá hodnotu ( AA55h ), která označuje boot sector.

Při bootu se z diskety nahraje pouze jeden sector dlouhý 512 B, což není nijak moc, ale bohatě stačí na program, který nahraje další sectory z diskety a spustí je.

Příklad takového boot sectoru:

;boot_sector2.asm

org 0x7c00

jmp main

;promene

boot_msg db 'Muj prvni OS...',13,10,0
load_msg db 'Zavadim jadro ...',13,10,0
bootdev db 0

zprava:
lodsb
or al,al
jz short zprava_konec
mov ah,0eh
mov bx,0007h
int 10h
jmp zprava
zprava_konec:
ret

reset_dev:      ;reset driveru
mov ah,00h
mov dl,[bootdev]
int 13h
ret

load_image:
mov ax,0h
mov es,ax
mov ah,02h
mov dl,[bootdev]
mov dh,0h
mov cx,2
mov al,1   ;pocet sectoru k nahrani
mov bx,8000h
int 13h

ret

main:
cli
mov ax,9000h
mov ss,ax
mov sp,0xffff
sti

mov [bootdev],dl

mov si,boot_msg
call zprava
mov si,load_msg
call zprava

call reset_dev
call load_image

jmp 0000:8000h ;skok do pameti k nahranemu programu

smycka:
jmp smycka

times 510-($-$) db 90h

dw 0xaa55 

Tento program nahraje druhý sector z diskety do paměti na adresu 0000:8000h a spustí jej. Můžeme dokonce nahrát více sectorů naráz, a to změnou hodnoty registru CX, ve funkci: load_image. Takže nahrávaný program nemusí mít pouze 512 B. Program může být libovolný, stejně jako u boot sectoru, musí být na začátku instrukce. Zásobník je již nastaven. A na konci kódu již nemusíme soubor zarovnávat na délku dělitelnou 512 B.

Ukázka:

TIB2012

       
; jadro.asm

org 8000h

jmp main

;promnene

wel_msg db 'Jadro nahrano.',13,10,0
end_msg db 'Stisknete jakoukoliv klavesu k restartu',13,10,0

zprava:
lodsb
or al,al
jz short zprava_konec
mov ah,0eh
mov bx,0007h
int 10h
jmp zprava
zprava_konec:
ret

klavesa:
mov ah,00h
int 16h
ret

main:

mov si,wel_msg
call zprava
mov si,end_msg
call zprava
call klavesa

jmp 0xffff:0000h 

Pokud máme tyto dva soubory, musíme je spojit v jeden image soubor, a to následovně:

; image.asm

incbin 'boot_sector.bin'
incbin 'jadro.bin' 

Boot sector a druhý program nahrajeme na disketu následovně:

nasm -o boot_sector.asm -f bin boot_sector.bin
    nasm -o jadro.asm -f bin jadro.bin
    nasm -o image.asm -f bin image.bin
    dd if=image.bin of=/dev/fd0 bs=512 

Školení: Django framework: Struktura a základy vývoje (nejen) webových aplikací

Django je vyspělý webový framework napsaný v jazyce Python, který podporuje extrémně rychlý vývoj společně s dodržováním principů dobrého návrhu. Snaží se co nejvíce automatizovat a drží se principu DRY (z anglického Don't Repeat Yourself — neopakuj se).

  • Instalace potřebného softwaru
  • Programování v Pythonu: příkazy, funkce, datové typy, moduly, objekty, výjimky
  • Struktura aplikace v Djangu
  • Typické záležitosti webových aplikací: Napojení na databázi, zpracování vstupu od uživatele, přihlášení či generování dynamického obsahu.
  • Implementace principu MVC: modely, pohledy (views) a šablony
  • Seznámení s užitečnými komponenty frameworku Django
  • Šikovné praktiky

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,60

Přehled názorů

.
machr 20. 1. 2006 00:19
Nový
└ 
Re: .
coccyx 20. 1. 2006 00:33
Nový
Píšeme OS... :o)
Jakub Hegenbart 20. 1. 2006 01:02
Nový
├ 
Re: Píšeme OS... :o)
kve 20. 1. 2006 05:43
Nový
│
└ 
Re: Píšeme OS... :o)
Jakub Hegenbart 20. 1. 2006 06:20
Nový
└ 
Re: Píšeme OS... :o)
melkor 20. 1. 2006 07:39
Nový
 
└ 
Re: Píšeme OS... :o)
Pavel Tišnovský 20. 1. 2006 08:55
Nový
 
 
└ 
Re: Píšeme OS... :o)
Jakub Hegenbart 20. 1. 2006 14:05
Nový
 
 
 
└ 
Re: Píšeme OS... :o)
Pavel Tišnovský 20. 1. 2006 15:06
Nový
super
fikus 20. 1. 2006 01:03
Nový
qemu
debko 20. 1. 2006 03:34
Nový
├ 
Re: qemu
fikus 20. 1. 2006 04:18
Nový
│
└ 
Re: qemu
debko 20. 1. 2006 13:13
Nový
│
 
├ 
Re: qemu
mmp 20. 1. 2006 21:13
Nový
│
 
│
└ 
Re: qemu
debko 20. 1. 2006 23:56
Nový
│
 
├ 
Re: qemu
Filip Kofroň 3. 2. 2007 12:08
Nový
│
 
└ 
Re: qemu
Filip Kofroň 3. 2. 2007 12:09
Nový
├ 
Re: qemu
0x80 20. 1. 2006 10:02
Nový
└ 
Re: qemu
0x80 20. 1. 2006 13:30
Nový
Nostalgie
dgx 20. 1. 2006 04:04
Nový
└ 
Re: Nostalgie
Dominik Sauer 20. 1. 2006 08:29
Nový
 
└ 
Re: Nostalgie
Pavel Janoušek 20. 1. 2006 13:35
Nový
 
 
└ 
Re: Nostalgie
dgx 20. 1. 2006 13:45
Nový
 
 
 
└ 
Re: Nostalgie
Pavel Janoušek 20. 1. 2006 13:56
Nový
 
 
 
 
└ 
Re: Nostalgie
dgx 20. 1. 2006 14:03
Nový
 
 
 
 
 
└ 
Re: Nostalgie
lukas 20. 1. 2006 18:38
Nový
 
 
 
 
 
 
└ 
Re: Nostalgie
QJohn 20. 1. 2006 20:33
Nový
 
 
 
 
 
 
 
└ 
Re: Nostalgie
glx 21. 1. 2006 23:11
Nový
 
 
 
 
 
 
 
 
└ 
Re: Nostalgie
Honza 20. 2. 2006 15:37
Nový
Kde to az dojde
Jan Kaluza 20. 1. 2006 05:47
Nový
└ 
Re: Kde to az dojde
0x80 20. 1. 2006 10:00
Nový
 
├ 
Re: Kde to az dojde
Jan Kaluza 20. 1. 2006 16:44
Nový
 
└ 
Re: Kde to az dojde
HKMaly 28. 1. 2006 12:53
Nový
A. Tanenbaum: Operating Systems Design and Implementation
fikus 20. 1. 2006 06:34
Nový
├ 
Re: A. Tanenbaum: Operating Systems Design and Implementation
thread 20. 1. 2006 07:14
Nový
└ 
Re: A. Tanenbaum: Operating Systems Design and Implementation
anonymní uživatel 20. 1. 2006 09:42
Nový
 
└ 
Re: A. Tanenbaum: Operating Systems Design and Implementation
miro 20. 1. 2006 10:35
Nový
Začínat operační systém...
Dominik Sauer 20. 1. 2006 08:25
Nový
├ 
Re: Začínat operační systém...
Tom fi 20. 1. 2006 08:54
Nový
├ 
Re: Začínat operační systém...
Dezo 20. 1. 2006 08:56
Nový
│
├ 
Re: Začínat operační systém...
Dominik Sauer 20. 1. 2006 10:04
Nový
│
│
├ 
Re: Začínat operační systém...
Filda 20. 1. 2006 10:57
Nový
│
│
│
└ 
Re: Začínat operační systém...
fikus 20. 1. 2006 17:35
Nový
│
│
│
 
└ 
Re: Začínat operační systém...
QJohn 20. 1. 2006 20:36
Nový
│
│
│
 
 
└ 
Re: Začínat operační systém...
fikus 21. 1. 2006 11:12
Nový
│
│
└ 
Re: Začínat operační systém...
Bohuslav Roztočil 20. 1. 2006 13:51
Nový
│
└ 
Re: Zacínat operacní systém...
BLEK. 20. 1. 2006 18:04
Nový
│
 
└ 
Re: Zacínat operacní systém...
rezna 20. 1. 2006 22:41
Nový
│
 
 
└ 
Re: Zacínat operacní systém...
HydranDT 23. 1. 2006 20:44
Nový
│
 
 
 
└ 
Re: Zacínat operacní systém...
BLEK. 23. 1. 2006 22:43
Nový
├ 
Re: Začínat operační systém...
Pavel Tišnovský 20. 1. 2006 09:01
Nový
│
├ 
Re: Začínat operační systém...
ondracch 20. 1. 2006 18:54
Nový
│
│
└ 
Re: Začínat operační systém...
HKMaly 28. 1. 2006 13:02
Nový
│
│
 
└ 
Re: Začínat operační systém...
Ondracch 28. 1. 2006 13:48
Nový
│
└ 
Re: Začínat operační systém...
greenwood 12. 12. 2007 20:23
Nový
├ 
Re: Začínat operační systém...
machr 20. 1. 2006 10:56
Nový
│
├ 
Re: Začínat operační systém...
anonymní uživatel 20. 1. 2006 13:24
Nový
│
└ 
Re: Začínat operační systém...
BedriCH 20. 2. 2006 16:45
Nový
├ 
Re: Začínat operační systém...
JeromeHeretic 20. 1. 2006 21:15
Nový
│
├ 
Re: Začínat operační systém...
faha 22. 1. 2006 11:33
Nový
│
│
├ 
Re: Začínat operační systém...
anonymní uživatel 22. 1. 2006 12:41
Nový
│
│
│
├ 
Překlep
anonymní uživatel 22. 1. 2006 12:42
Nový
│
│
│
└ 
Re: Začínat operační systém...
anonymní uživatel 22. 1. 2006 12:44
Nový
│
│
├ 
Re: Začínat operační systém...
Jakub Hegenbart 22. 1. 2006 14:38
Nový
│
│
│
└ 
Re: Začínat operační systém...
HKMaly 28. 1. 2006 13:07
Nový
│
│
└ 
Re: Začínat operační systém...
anonymní uživatel 23. 1. 2006 10:24
Nový
│
│
 
├ 
Re: Začínat operační systém...
Josef Kadlec 23. 1. 2006 10:27
Nový
│
│
 
└ 
Re: Karel
gilhad Gilhad 23. 1. 2006 19:32
Nový
│
└ 
Re: Začínat operační systém...
tux.martin 9. 2. 2006 21:23
Nový
├ 
Re: Začínat operační systém...
Fi_Go 20. 1. 2006 22:49
Nový
│
└ 
Re: Začínat operační systém...
Dominik Sauer 6. 2. 2006 17:09
Nový
└ 
Re: Začínat operační systém...
tux.martin 9. 2. 2006 21:05
Nový
Pekne!
Pito 20. 1. 2006 08:28
Nový
└ 
Re: Pekne!
0x80 20. 1. 2006 09:53
Nový
 
└ 
Re: Pekne!
Pito 20. 1. 2006 11:16
Nový
 
 
├ 
Re: Pekne!
0x80 20. 1. 2006 12:18
Nový
 
 
└ 
Re: Pekne!
Mirek 20. 1. 2006 23:51
Nový
preklep?
mrk 20. 1. 2006 11:57
Nový
└ 
Re: preklep?
Daniel Sedláček 20. 1. 2006 12:23
Nový
Pro Johanku
hnidopich 20. 1. 2006 12:31
Nový
├ 
Re: Pro Johanku
Cubic 20. 1. 2006 12:46
Nový
└ 
Re: Pro Johanku
Věra Rybářová 20. 1. 2006 15:35
Nový
 
└ 
Re: Pro Johanku
Jakub Hegenbart 20. 1. 2006 19:52
Nový
 
 
└ 
Re: Pro Johanku
Věra Rybářová 20. 1. 2006 22:16
Nový
 
 
 
└ 
Re: Pro Johanku
Osamělý Linuxák 22. 1. 2006 20:33
Nový
 
 
 
 
├ 
Re: Pro Johanku
Jakub Hegenbart 22. 1. 2006 20:35
Nový
 
 
 
 
├ 
Re: Pro Johanku
Věra Rybářová 22. 1. 2006 22:39
Nový
 
 
 
 
│
├ 
Re: Pro Johanku
Osamělý Linuxák 23. 1. 2006 14:28
Nový
 
 
 
 
│
├ 
Re: Pro Johanku
Jakub Hegenbart 26. 1. 2006 23:05
Nový
 
 
 
 
│
│
└ 
Re: Pro Johanku
Věra Rybářová 27. 1. 2006 08:05
Nový
 
 
 
 
│
│
 
└ 
Re: Pro Johanku
Jakub Hegenbart 31. 1. 2006 20:32
Nový
 
 
 
 
│
└ 
Re: Pro Johanku
HKMaly 28. 1. 2006 13:13
Nový
 
 
 
 
└ 
Re: Pro Osameleho Linuxaka
BLEK. 23. 1. 2006 01:59
Nový
 
 
 
 
 
└ 
Re: Pro Osameleho Linuxaka
Josef Kadlec 23. 1. 2006 10:31
Nový
OS byl i drive
zgrpe 20. 1. 2006 13:36
Nový
├ 
Re: OS byl i drive
machr 20. 1. 2006 13:55
Nový
│
└ 
Re: OS byl i drive
Petr Zgraja 20. 1. 2006 14:03
Nový
│
 
└ 
Re: OS byl i drive
machr 20. 1. 2006 14:56
Nový
└ 
Re: OS byl i drive
kulik 30. 1. 2006 12:40
Nový
ach jaj
r 20. 1. 2006 13:40
Nový
├ 
Re: ach jaj
Rainbow 20. 1. 2006 14:14
Nový
├ 
Re: ach jaj
jj 20. 1. 2006 15:59
Nový
├ 
Re: ach jaj
anonymní uživatel 20. 1. 2006 17:31
Nový
├ 
Re: ach jaj
QJohn 20. 1. 2006 20:44
Nový
│
└ 
Re: ach jaj
HKMaly 28. 1. 2006 13:30
Nový
│
 
└ 
Re: ach jaj
Biktop 17. 5. 2007 11:00
Nový
│
 
 
└ 
Re: ach jaj
anonymní uživatel 17. 5. 2007 12:41
Nový
├ 
Re: ach jaj
unix 22. 1. 2006 11:42
Nový
└ 
Re: ach jaj
filipkof@seznam.cz 22. 11. 2007 19:20
Nový
Chybicka se vloudila
Rezza 20. 1. 2006 14:17
Nový
qemu
0x80 20. 1. 2006 15:06
Nový
└ 
Re: qemu
Tom 20. 1. 2006 23:13
Nový
 
└ 
Re: qemu
Martin 27. 1. 2006 21:47
Nový
 
 
└ 
Re: qemu
Martin 27. 1. 2006 22:12
Nový
děrný štítky
koffr 20. 1. 2006 15:44
Nový
Poděkování
Majkls 20. 1. 2006 23:38
Nový
Bootsector
Martin Kumst 21. 1. 2006 00:54
Nový
├ 
Re: Bootsector
MartensPh 21. 1. 2006 10:24
Nový
│
└ 
Re: Bootsector
Peter Ambroz 21. 1. 2006 17:25
Nový
└ 
Re: Bootsector
HKMaly 28. 1. 2006 13:42
Nový
Každý názor musí mít titulek.
nightfish 21. 1. 2006 03:02
Nový
└ 
Re: Každý názor musí mít titulek.
anonymní uživatel 24. 1. 2006 12:26
Nový
 
├ 
ach - ta čeština
ebik 13. 5. 2006 21:16
Nový
 
└ 
Logické fce
Jan Papež 22. 6. 2006 11:47
Nový
Zajímavý článek
Soplík 21. 1. 2006 16:40
Nový
Dakujem
Zet 21. 1. 2006 18:18
Nový
bootloader & multiboot
hx 22. 1. 2006 00:44
Nový
└ 
Re: bootloader & multiboot
HKMaly 28. 1. 2006 13:46
Nový
Bootsector
Picmaus 20. 2. 2006 11:20
Nový
Zapsani obrazu pod Win32
EAN-CODE 22. 2. 2006 22:11
Nový
Assembler
DAG 24. 11. 2007 23:48
Nový
512
Deu439 10. 12. 2007 19:41
Nový
└ 
Re: 512
MaSo 21. 1. 2008 19:17
Nový
Mně to nejede !
Kutil 17. 10. 2009 20:07
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem