Emulátor přípravku Semafor

Součástí výuky předmětu 36UPS (Úvod do počítačových systémů) na fakultě elektrotechnické ČVUT je požadavek na vytvoření programu, který ovládá přípravek „Semafor“, což je maketa křižovatky, připojená na paralelní port. Jelikož se velká část studentů v tomto předmětu setkává s programováním v assembleru poprvé (a mnoho z nich i naposledy…), není pro ně lehké zvládnout tvorbu tohoto programu pouze v průběhu vyučování. Pokud ovšem potřebují na úloze pracovat i mimo své pravidelné vyučovací hodiny, musí mít přístup k přípravku, což je možné pouze v příslušných laboratořích. Proto nemohou studenti pracovat doma, na koleji, apod. Lépe řečeno, nemohli by, pokud by neexistoval tento program.

Úvod

Tento program slouží k emulaci přípravku semafor, tzn. umožňuje testovat programy k ovládání přípravku i na počítači, kde přípravek připojen není. Emulátoru se jako parametr předá jméno programu, který se má testovat. Tento testovaný program je pak spuštěn samotným emulátorem, který odchytává pokusy programu přistoupit na LPT port a zpracovává je stejným způsobem, jakým by reagoval skutečný přípravek, připojený na paralelní port.

Před tím, než budete emulátor používat, si opravdu tento dokument přečtěte!

Používání programu

Poté, co si stáhnete zip archív s programem (viz sekce download), si jej rozbalte do libovolného adresáře. Poté, když budete chtít testovat svůj program, provedete následující:

  1. DŮLEŽITÉ! Zkontrolujete, případně upravíte čekací smyčky ve svém programu. (podrobnosti níže)
  2. Svůj program přeložíte do EXE formátu.
  3. V adresáři, kde je nainstalovaný emulátor, spustíte emulátor, přičemž jako parametr mu dáte jméno EXE souboru s vaším programem.
  4. Poté se zobrazí schématický obrázek křižovatky, váš program se spustí, vy můžete používat ovládací klávesy.
  5. Klávesou ESC emulátor ukončíte.

Ovládací klávesy emulátoru

Emulátor odchytává a reaguje na následující klávesy:

ESC
Ukončení emulovaného programu a emulátoru.
Šipka nahoru
Emulace stisku tlačítka v severní části križovatky
Šipka vlevo
Emulace stisku tlačítka v západní části križovatky
Šipka dolu
Emulace stisku tlačítka v jižní části križovatky
Šipka vpravo
Emulace stisku tlačítka ve východní části križovatky
F1–F4
Emulace přepínání přepínače 1–4
F5
Obnovení grafické obrazovky – za obvyklých okolností tuto klávesu nepotřebujete, ovšem v případě, že program nedodržuje podmínky správné funkčnosti, může tato klávesa pomoci. Po jejím stisknutí se znovu nastaví grafický režim a paleta a je překreslen obrázek křižovatky.
Ctrl+Alt+Shift+ESC
Velice drsné ukončení emulovaného programu, které v běžné situaci rozhodně potřebovat nebudete a v případě nouze vám pravděpodobně nepomůže… Pokud ovšem k případu nouze dojde, za zkoušku nic nedáte. Jenom počítejte s tím, že s vysokou pravděpodobností tím způsobíte třeba restart počítače.

Požadavky na systém a testované programy

Emulátor je poměrně nízkoúrovňový program (pro zvědavce: jak to vlastně funguje). Jako takový se nesnáší s mnoha jinými nízkoúrovňovými programy. Původně byl program navržen pro MS-DOS (tzn. čistý DOS, ne příkazovou řádku Windows!). To je také prostředí, ve kterém ho nejpravděpodobněji spustíte bez problémů. Autorovi bez problému chodí i ve Windows 98, ovšem zkoušet cokoliv na bázi Windows NT je naivní. Stejně tak emulátor nebude chodit ani ve Windows XP.

Co se týká požadavku na testovaný program, je to složitejší. Stručně se dá říct, že pokud je váš program pouhým rozšířením toho, který je vám dodán jako ukázkový, nejspíše bude všechno v pořádku. Problémy by mohlo způsobit jen několik věcí, které nejspíš dělat nebudete:

Některá omezení je však třeba mít na paměti:

DŮLEŽITÉ: Problémy s měřením času

Řekněme, že máte svůj program, který jste rozpracovali ve školní laboratoři, čtvrthodinovou piplavou prací jste doladili konstanty pro čekání tak, aby červená na semaforu svítila přesně jednu sekundu. Pak budete chtít doplňovat do programu další funkce, ovšem tentokrát doma, s tím, že testování bude probíhat v emulátoru. Najednou šok – program vůbec nefunguje!

To je ovšem omyl. Program funguje, emulátor také, jenom vaše čekací smyčka tentokrát nečeká přesně jednu sekundu, ale mnohem déle. Třeba 100 sekund. Proč? To je jednoduché: doba, kterou smyčka čeká, je ve vašem programu natvrdo zadána na základě toho, jak dlouho čeká na jednom konkrétním počítači, s konkrétní konfigurací. Pokud byste váš program vyzkoušeli na jiném počítači, např. s rychlejším procesorem, čekací smyčka by opět nefungovala správně. Problém není v emulátoru, ale ve špatném návrhu podprogramu pro čekání. Když totiž program běží pod emulátorem, kromě toho, že procesor zpracovává testovaný program, musí také zpracovávat instrukce emulátoru. Výsledkem je, že testovaný program beží mnohem pomaleji, než by běžel mimo emulátor. V normálních částech kódu si toho nevšimnete, ale v čekací smyčce se to projeví.

Jak tento problém řešit? Máte dvě možnosti:

Download

emulator.zip (18,183B ZIP)

Poznámky

Pokud najdete nějakou chybu v programu, dejte mi vědět.

Součástí archívu, který jste si stáhli, je i zdrojový kód. Celý program je totiž pod GNU licencí. Což mimo jiné znamená, že ho opravdu můžete zdarma okopírovat svým spolužákům. (Ne, že bych se snad domníval, že by vám v tom zabránilo, kdybych to zde zakázal…)

NAVRCHOLU.cz