Simulované vstupy a výstupy
Simulované I/O operace dávají programátorovi k dispozici některé základní sluby pro I/O operace, které obvykle poskytuje operační systém. Tím umoňují snadný vstup a výstup z/do konzolového okna simulátoru nebo do souboru.
Princip pouití simulovaných I/O operací je následující: Pro kadou operaci (tj. vstup nebo výstup dat, případně otevření nebo zavření souboru) je nejprve nutné připravit parametrický blok, který poadovanou operaci specifikuje. Potom je vyvoláním podprogramu na určité adrese (zvolené nastavením simulátoru) vyvolána simulovaná systémová sluba, která danou operaci provede.
Příprava simulátoru
Pro pouití simulovaných I/O operací je nejprve nutné správně nastavit simulátor. V menu Setup - Simulator - System upravíme poloky podle následujícího obrázku:
Zvolíme vhodnou adresu pro volání systémových slueb a vloíme ji do pole Simulated I/O Address. Zvolená adresa by neměla kolidovat s rozsahem adres, na kterých je uloen kódový a datový segment. Pokud je podle podle předchozího návodu nastaven začátek kódového segmentu na adresu 0x00000400 a začátek datového segmentu na 0x00FF4000, je moné pouít například hodnotu 0x0001FF00.
Zakrtnutím volby Enable povolíme funkci simulovaných I/O operací.
Dále je vhodné nastavit Execution Mode na Continue. Tato volba se týká chování simulátoru v přídě výskytu různých chyb.
Nakonec musíme otevřít konzolové okno pro vstup a výstup dat v menu View - CPU příkazem Simulated I/O (viz následující obrázek).
Pro pouití simulovaných I/O operací platí následující postup:
V datovém segmentu musí být připraven parametrický blok pro danou slubu. Struktura parametrického bloku se lií podle typu sluby. Pro sluby výstupu a vstupu dat obvykle obsahuje parametrický blok adresu datového bloku. Adresa parametrického bloku v paměti musí být zarovnána způsobem "doubleword alignment", tj. poslední dva bity adresy bloku musí být 00. Proto je vhodné v programu před definici parametrického bloku vloit direktivu .align 2 .
Do registru R0L uloíme číslo poadované sluby (viz dále). Do registru R0H musíme uloit hodnotu 0x01.
Do registru ER1 uloíme adresu parametrického bloku.
Instrukcí skoku do podprogramu JSR @addr (kde addr je nastavená "Simulated I/O Address", viz výe) provedeme poadovanou IO operaci.
Pokud je prováděna výstupní operace, pokračuje výpočet ihned po výstupu dat dalí instrukcí za JSR ... . Provádění vstupních operací je blokující, co znamená, e výpočet pokračuje a po zadání poadovaných dat (např. znaku nebo řádky textu v konzolovém okně v případě slueb GETC resp. GETS).
Následující obrázek ukazuje příklad nastavení registrů a parametrického bloku pro slubu PUTS, která vypisuje řádku textu v konzolovém okně. Kód sluby PUTS je 0x14. V parametrickém bloku je adresa textu, který se má vypsat.
Dále je uveden popis několika slueb, které jsou v simulátoru k dispozici pro vstup a výstup textu.
Sluba |
Kód sluby *) |
Parametrický blok |
Popis |
---|---|---|---|
GETC |
0x11 |
Adresa vstupního bufferu (.long) |
Čtení jednoho znaku z klávesnice. Kód znaku je uloen do vstupního bufferu, jeho adresa je v parametrickém bloku. |
PUTC |
0x12 |
Adresa výstupního bufferu (.long) |
Výstup jednoho znaku na obrazovku. V parametrickém bloku musí být adresa bytu, ve kterém je uloen kód znaku. |
GETS |
0x13 |
Adresa vstupního bufferu (.long) |
Čtení řádku z klávesnice. Znaky jsou postupně ukládány do bufferu, jeho adresa je v parametrickém bloku. Vstup je ukončen klávesou Enter. Poslední uloený znak v bufferu je znak '\n' (0x0A). Buffer pro ukládání přečtených znaků musí mít dostatečnou velikost pro uloení maximálního předpokládaného počtu znaků. |
PUTS |
0x14 |
Adresa výstupního bufferu (.long) |
Výstup textu na obrazovku. Adresa prvního znaku textu musí být uloena v parametrickém bloku. Výstup končí nalezením znaku '\n' (0x0A) nebo znaku 0x00 v textu. |
*) Kadá sluba má 3 různé kódy, platné pro 16, 24 a 32bitové adresování. Uvedené kódy platí pro 24bitové adresování, na které je simulátor implicitně nastaven.
Popis dalích slueb pro práci se soubory je uveden v souboru Help pro simulátor (viz následující obrázek).
Následující příklad demonstruje pouití slueb PUTS pro výstup textu a GETS pro vstup textu. V programu se předpokládá, e adresa pro simulované I/O operace je nastavena na 0x0001FF00. Pro přehlednost je na začátku programu definován direktivou .equ symbol syscall s touto hodnotou a dále symboly s hodnou odpovídající kódům příkazů PUTS a GETS.
Nejprve je slubou PUTS vypsán text označený symbolickou adresou txt1. Přísluný parametrický blok je par1.
Potom je pouita sluba GETS k přečtení řádky textu. Přečtené znaky se ukládají do paměti vyhrazené direktivou .space 100 a označené symbolickou adresou buffer. Maximálně můe tedy být přečteno 100 znaků. Při překročení tohoto počtu by docházelo k přepsání dalích bytů v paměti, co by v tomto případě byly parametrické bloky par1 a par2 a potom obsah zásobníku.
Protoe jsou systémové sluby volány instrukcí jsr, musí být před jejich pouitím inicializován registr SP, tj. ER7.
[Základní vlastnosti HEW] [Instalace prostředí HEW] [Vytvoření projektu s vyuitím generátoru projektů] [Vytvoření a úprava projektu (kompletní nastavení) ] [Překlad a ladění na simulátoru] [Řeení některých problémů]
Návrat na hlavní stránku POT.
Poslední změna stránky byla provedena 28.02.2023