q Základné informácie o klávesnici Klávesnica komunikuje s procesorom sériovým spôsobom ( 5 kolíkový konektror s logickými úrovňami signálu TTL ) a na identifikáciu klávesov používa špecialny polohový kód ( IBM Scan code od 01H po E0H ) Na identifikáciu stlačenia, resp. uvoľnenia klávesu sa používa bit 7 scan kódu. Ak je Bit 7=1 t.j. hodnota kódu je vyššia o 80H, je procesor iinformovaný, že kláves je stlačený. Napríklad prvým z hľadiska polohy na klávesnicu je kláves ESC ( v ľavom hornom rohu ) a jeho scan kód je 01H, resp 81H počas stlačenia. Kláves Q má scan kód 10H / 90H a pod. Vďaka polohovému spôsobu kódovania kláves možno nadefinovať národné abecedy, napríklad azbuku. Po stlačení klávesu klávesnica žiada o prerušenie
pomocou špecialneho bitu, ktorý sa vysiela ako prvý. Napríklad po stlačení
klávesu R, ktorý má polohový kód 13H = 0001 0011B sa výšle sériová postupnosť
bitov (v postupnosti bit žiadajúci o prerušenie, Lsb a na konci Msb):
Sériová postupnosť bitov sa na strane počítača prekonvertuje pomocou posuvného registra na paralelný kód a prečíta sa (cez port PA na adrese 60H) po vyvolaní BIOS prerušenia INT9H do procesora. Po prečítaní kódu z PA=60H sa volá ďalšia služba INT 15H/ ah=4FH, ktorá umožňuje napríklad predefinovať polohu Y a Z na klávesnici. Po ukončení INT 9H sa uložia do bufera klávesnice 2 bajty : ASCII kód klávesu (LSB ) a pomocný scan code (MSB) ak bol stlačený znakový kláves. V prípade, že bol stlašený špecialny kláves tak jeho LSB = 0 a MSB bude obsahovať scan code klávesu. Kódy klávesov sa ukladajú do RAM pamäte o dlžke
32 bajt (KBD_buffer klávesnice na adrese 0:41EH v spolupráci s počitadlami
znakov pre začiatonú na adrese 0:41AH a poslednú polohu na adrese 0:41CH
. Napr ak je KBD_buffer prázdny je obsah ( 0:41AH ) a ( 0:41CH ) rovnaký.)
Túto komunikáciu ovplyvňujú ešte 2 stavové registre ( na adrese 0:417H
a 0:418H) v ktorých je uložený stav pomocných klávesov tzv. KB_Flags, napríklad
Shift, Alt, Ctrl, Num Lock, Caps Lock a pod.
Komunikáciu klávesnice s mikroprocesorom možno najjednoduchšie realizovať pomocou prerušení BIOS. Úlohou obsluhy prerušenia BIOS INT 9H je uložiť kódy stlačených klávesov (resp. správne interpretovné kódy v spolupráci s pomocnými klávesmi ) do buffera a do tabuľky BIOS. Pre užívateľov je určené predovšetkým BIOS prerušenie INT 16H, ktoré umožňuje vyzdvihnúť si kódy (polohový scan kód, ASCII kód) pre potreby aplikácii, resp. aj prerušenie DOS INT 21H. q Vhodné inštrukcie pre vstup z klávesnice Demoread Postupnosť inštukcii na ilustráciu rôznych možnosti vstupu z klávesnice (znakov alebo reťazcov) - s využitím prerušenia BIOS INT 16H ( aj scan kod) a rôznych variantov prerušenia DOS INT 21H ( s echom a bez echa, kontrola statusu klávesu a pod.) Tvar programu je určený pre testovanie účinku inštrukcii pomocou krokovania programu pomocou debuggera. demoread.com
Zoznam príkladov na demonštrovanie
rôznych vstupov a úprav ASCII reťazcov
Príklady vstupu dát z klávesnice
a operácii s ASCII znakmi
GETKEY.COM -
čita znaky z klávesnice do (AL) bez echa.
GETNEW2.com -
Úprava GETKEY s echom.
GETYES.com-
Čaká na stlačenie Y, y t.j. keď (AL) = 59H, alebo 79H, pre ostatne
znaky (AL)=FFH.
GETKEY2.com-
čaka na stlačenie RETURN =>(AL) = 0DH pre ostatne znaky (AL)=0.
GETKEY3.com
- variant GETKEY2 ,rozdiel je výstup pre ostatné znaky (AL)=FFH.
GETKEY4.com
- Čaka na stlačenie CR alebo ESC =>(AL) = 0DH alebo 1BH.
GETFKEY.com- Čaká na stlačenie
funkčnej klávesy =>(AL)=Scancode pre iné znaky (AL) = FFH. Kód F1
- F10 je 3BH- 41H.
GETNUM.com -
Čaká na stlačenie 0 - 9 => (AL)=30H az 39H.
GETLETR.com
- Čaká na vloženie a - z, resp A - Z a transformuje znak na (AL)=1
az 1AH okrem ESC => koniec.
LOWERIT.com -
Úprava vloženého znaku na malé ASCII.
UPPERIT.com -
Úprava vloženého znaku na veľké ASCII.
q Základné informácie o zobrazovaní informácie na obrazovke Základnou súčasťou obrazovkového podsystému (video subsystému) je obrazovka, videokontrolér ( obvody pre riadenie zobrazovania ), video pamäť (buffer, v ktorom je uložená informácia pre zobrazovanie. V počítačoch s OS DOS je pre ňu rezervovaný priestor od A000:0 po BFFF:0). ![]() Potrebná veľkosť videopamäti v grafickom móde závisí od počtu zobrazovaných bodov na obrazovke (pixel - picture element ) a od nárokov na množstvo farieb. Obrazovku teda možno chápať ako maticu bodov, napr pre adapter EGA 640*350 bodov. Ak može byť každý bod zafarbený jednou zo 16 farieb ( 4 bit = 0.5 bajt informácia) tak štandarný grafický mód EGA potrebuje 640*350/0.5 = 112000 bajtov videopamäte. Pre jednofarebné zobrazenie s horšim rozlíšením, napríklad v grafickom móde adaptéra CGA treba 640*200/8 = 16 kB. V grafickom móde sa používa tzv. mapovanie pamäti do menšieho logického adresovacieho priestoru, ktoré umožňuje, aby sa jeden bit adresovacieho priestoru premietal do príslušných bitových rovin (napríklad 4 videostránok pri Ega adaptéri), v ktorých sa nachádza informácia o jednotlivých bitoch farebného kódu. Napríklad pomocou adresovacieho priestoru 32 kB ( 640*320/8 = 28kB + 4 kB voľných na každej videostránke ) možno zobraziť všetky pixely na obrazovke v 16 farbách. Pritom pixel (0,0) v ľavom hornom rohu obrazovky bude na adrese A000:0 H a jebo kobaltové zafarbenie zabezpečí 4 bitové číslo 0011B, uložené v ďalšich bitových rovinách ( pamäťových mapách), spriahnutých s adresou daného pixelu (0,0). Z dôvodov kompatibility je pre adresovanie pixelov v grafickom móde adaptera VGA vyhradený adresný priestor od adresy A000:0H o veľkosti 8 videostránok, každá o veľkosti 32KB, čo zabezpečuje pamäť na uloženie 2 obrazoviek 640*350 pixelov so 4 bitmi farebnej informácie. ![]() V textovom (alfanumerickom) režime sa používa na zobrazenie jedného znaku dvojbajtová informácia : ASCII kód znaku a atribút . Na základe ASCII kódu sa rozkreslí tvar znaku a na základe atribútu sa určí jeho zafarbenie a farba podkladu Pritom horná štvorica bitov atribútu definuje farbu pozadia ( Ak b= 1 tak zobrazenie znaku bliká ). Dolná štvorica bitov atribútu definuje zafarbenie textu, pričom bit I = 1 zvyšuje intenzitu odtieňa farby Význam jednotlivých bitov atribútu znaku:
napr. 4EH - sa interpretuje ako žlty text na červenom pozadí. Bity R (red), G (green), B(blue) v staršich typoch adapterov , napríklad v CGA zodpovedajú priamo farbe signálu a v novšich typoch adaptérov slúžia ako ukazovateľ ( pointer ) na jeden z palety registrov, ktoré potom obsahujú 3*6 bit kód farby. Pomocou 6 bit možno vytvoriť 64 odtieňov každej základnej zložky farby takže celkove v každom registri jednu z 64*64*64 = 262144 farieb. Pritom atribút ovláda monitor u staršich typov adaptérov (CGA, EGA) digitálnym spôsobom a u novšich typov adaptérov pomocou DAC prevodníka analógovým spôsobom. V najbežnejšich textových módoch býva v riadku 80 znakov. Na zaplnenie obrazovky s 25 riadkami treba pamäť 2*80*25= 4000 bajtov. . Nakoľko 4kB = 4096 je na každej textovej stránke nevyužitých 96 bajtov. Pretože prakticky vždy je k dispozícii väčšia oblasť pamäte ako 4kB, s ktorou sa počíta pre zobrazenie textov, napríklad 32 kB, rozdeľuje sa aj videopamäť v textovom režine na niekoľko stánok po 4 kB. Znaky sa premietajú na obrazovku ako sériová postupnosť
2 bajtov (ASCII kód, atribút znaku). Poloha znaku je adresovaná spôsobom
video_segment:offset_znaku, v závislosti od polohy riadku Row_No (0 - 24
) a stĺpca Cols_No ( 0 - 79), ktorý určuje polohu znaku v riadku:
V grafickom móde sa znaky softwarovo kreslia pomocou pixelov . V textových módoch sa znaky zobrazujú hardwarovo pomocou generátora znakov. Základná definičná tabuľka znakov býva v pamäti ROM. Vzorka 128 znakov mimo základný rozsah 01 až 7FH , je uložená v oblasti nepoužívanej videopamäte RAM na adrese, ktorú špecifikuje prerušenie INT 1FH, ( na adrese 0:007CH), takže oblasť znakov 80 -FFH možno predefinovať, napríklad podľa potrieb diaktriky národných abecied. Každý znak v textovom móde je definovaný tvarom (font), na ktorý sa odvoláva pomocou pointera, ktorý tvorí ASCII kód znaku (0 - 255) . O vykreslenie znaku o rozmeroch m*n (m - šírka, n - výška v počte pixelov ) sa stará HW generátor znakov. Pri rovnakej šírke m = 8 pixelov závisí výška znaku od typu adaptéra. Napríklad v adaptéri EGA má rozmer obrazovky 640*350 bodov. Pri 80 znakoch v riadku je šírka fontu m= 640/80 = 8 bodov a pri 25 riadkoch je výška znaku n = 350/25 = 14 bodov. Možno ju meniť, napr pri výške znaku 8 bodov bude 350/8 = 43 riadkov. Základná definičná tabuľka so štruktúrou fontového bloku o max výške znaku až 32 bodov potrebuje 256*32 = 8kB je tak navrhnutá. že každý bodový vzor znaku sa nachádza na stálej adrese, aj keď výška znaku je meniteľná. Preto zostane pri rôznych výškach znakov časť 32 - n bajtov v rámci každého znaku voľná. Adresu tabuľky fontového bloku možno zistiť , resp. modifikovať pomocou preušenia BIOS INT 10H/ ax = 1130H Pretože BIOS je uložený v pamäti ROM ukladá si
najdôležitekšie parametre nastavenia videomódy do vyhradenej oblasti pre
BIOS data (od adresy 400:0 po 400:FF a v rámci nej do Video_Display_Data_Area
. Niektorá z nich sú v tabulke:
AH = 0 - nastavenie módu
AH = 5 H - nastavenie videopage z
tabuľky BIOS parametrov 0: 462 ; 0:44E = offset; a 0:44C = dlžka pamäti
stránky.
AH = 0FH - zistenie aktuálneho videomódu
AH = 01H - nastavenie veľkosti kurzora
AH = 02H - nastavenie polohy kurzora
AH = 03H - čítanie polohy kurzora
AH = 06H / 07H - rolovanie obrazovky
smerom hore / dole
AH = 08H - čítanie znaku a atribútu na pozícii
kurzora
AH = 09H - zápis znaku a atribútu na pozícii
kurzora
AH = 0AH - zápis znaku na aktuálnu pozíciu
kurzora
AH = 0CH - zobrazenie bodu na špecifikovanej
pozícii
AH = 0DH - načíta farbu bodu
AH = 0EH - terminálový výstup => vypíše
znak a posunie kurzor
AH = 11H - zistenie info o fontoch
AH = 11H - zavedenie užívateľského
fontu bez zmeny výšky znakov
AH = 11H - zavedenie užívateľského fontu
so zmenou výšky znakov
Napríklad ak je definičná tabuľka hodnôt znakov
reprezentovaná len údajmi o rozkreslení znaku Č, jeho zavedenie do uživateľského
fontu zabezpečí nasledovná postupnosť inštrukcii:
q Príklady na demonštrovanie rôznych výstupov na obrazovku Whicya.com - zmena farby textu a pozadia na obrazovke - svetlobiely text na kobaltovom pozadí. whicya.com demo zmeny farby text pozadie na obrazovke:
Demowrt.com- vhodné inštrukcie pre výstup na obrazovku Postupnosť inštrukcii na ilustráciu rôznych možnosti výstupu na pbrazovku (znakov alebo reťazca$) - s využitím prerušenia BIOS INT 10H ( aj zmena videostránky, nastavenie kurzora, rolovanie okna) a prerušenia DOS INT21H. Tvar programu je určený pre testovanie účinku inštrukcii pomocou krokovania programu pomocou debuggera. demowrt.com
D_Video - demo priameho výstupu na obrazovku Postupnosť inštrukcii na ilustráciu rôznych možnosti výstupu na obrazovku (znakov alebo reťazca$) - s využitím prerušenia BIOS INT 10H ( aj zmena videostránky, nastavenie kurzora, rolovanie okna) a prerušenia DOS INT21H. Videostránka v textovom móde2000 * 2 = 4000D =
1000H
q Logická štruktúra disku v MS DOS Jedna z najdôležitejšich funkcii operačného systému je organizácia dát na vonkajšich médiach. Systém MS DOS rozoznáva dva typy zariadení: znakové (napríklad tlačiareň) a blokové (napríklad disk). Informačným celkom na blokovom médiu je logický súbor. Súbory sú združované do skupin nazývaných adresáre. Logické súbory sú v rámci adresára identifikované dvojicou - meno.typ, kde meno je postupnosť max. 8 znakov a typ je postupnosť max. 3 znakov. MS DOS (od verzie 3:3 ) prevzal od Unixu hierarchickú (stromovú) štruktúru adresárov s prístupom k súboru pomocou manipulátora (handle), ktorý ukazuje na aktuálny logický záznam. (Na logickej úrovni sa súbor skladá z logických záznamov pevnej dľžky). Služby jadra operačného systému umožňujú logický záznam prečítať, zapísať, presmerovať (nastaviť na požadované číslo). V začiatočnej ére, keď počítače nemali ešte pevné disky a súborov bolo málo postačovala na obsluhu disku služba, ktorá pomocou určitej vyhradenej oblasti v pamäti FCB (file control block) odovzdávala informáciu medzi programom a DOS. Každý otvorený súbor v počítači si alokoval v oblasti pamäte dátovú štruktúru s informáciou o súbore (Drive, File Name, File ext, veľkosť záznamov vyjadrenú v bajtoch, veľkosť súboru vyjadrenú v bajtoch, čas a dátum a aktuálne číslo záznamu ku ktorému sa pristupuje buď sekvenčným spôsobom alebo náhodným spôsobom.) FCB nepodporuje hierarchickú štruktúru, je efektívny len v aktuálnom adresári určitého disku Súbory vykonávajúce program mali koncovku .com, museli byť kratšie ako 64kB, takže aj kód programu aj data a zásobník boli alokované v rámcii jedného Code segmentu. Program typu .com sa definične začína od adresy 100H a vrchol jeho zásobníka je na konci 64kB segmentu. Segmenty DS a ES sú v súbore.com nastavené na začiatok segmentu CS a do 256 bajtovej oblastii PSP (Program Segment Prefix ) na začiatku programu si DOS ukladá niektoré potrebné údaje. PSP nie je súčasťou programového súboru. Obsahuje aktuálne údaje o stave operačného systému v okamihu zavádzania programu. (Systém sem uloží okrem iného všetky parametre prompt príkazu. PSP slúži aj ako komunikačná oblasť medzi MS DOS a programom.) Napríklad oblasť DTA ( Data Transfer Area ) cez ktorú si vymieňa súbor dáta s diskom a ktorá má implicitnú šírku 128 bajt alebo oblasť pre uloženie FCB#1 a FCB#2, napríklad pri kopírovaní súborov sa sem, resp aj do DTA prenesie meno zdrojového a cieľového súboru. Program môže tieto informácie využívať pri svojej práci, napríklad na prenos jedného až dvoch vstupných parametrov do súboru.com. PSP má vždy dĺžku 100H (256 bajtov) a je lokalizovaný v súbore.com CS:IP od IP=0 až IP=100H. PSP obsahuje:
V neskoršich verziach DOS sa zaviedla podpora práce s pevným diskom, zaviedla sa podpora hierarchickej štruktúry adresárov a podpora presmerovania súborov, ktoré sú chápané rovnako ako vstupy / výstupy periférii. Pri tejto úprave došlo k oddeleniu funkcie disku od FCB a zaviedla sa funkcia manipulátora súboru - handle, ktorý je priradený každému otvorenému súboru ako rozlišovacia jednotka. Je to reťazec zakončený 0 a kompletne popisuje lokalizáciu súboru (včetne disku a mnohoúrovňových adresárov). Na rozdiel od FCB sa tvorí vnútri operačného systému, nie v uživateľskej pamäti. Handle podporuje presmerovanie I/O (pretože za manipulátorom môže byť skrytý nielen súbor ale aj tlačiareň, obrazovka a pod. Handle tiež podporuje zdieľanie a uzamykanie súborov (príkaz SHARE). Existuje 5 štandardne preddefinovaných handle (0 až 4), ktoré sú prístupné každému programu. Štandardne zariadenia sú preddefinovane ako otvorený súbor . Konzola (CON) formálne v handle 0 - 2 predstavuje to isté zariadenie t.j. monitor s klávesnicou, ale z hľadiska funkcie ide o rozdielne zariadenia. AUX reprezentuje pomocný výstup, realizovaný cez sériový port COM1. PRN je označenie pre paralelný výstup tlačiarne, pripojený štandardne k LPT1. Ostatné handle pre súbory alebo zariadenia dostanú priradené výššie poradie handle. DOS si rezervuje oblasť pre tabuľky toľkých handle koľko je predefinovaných v config.sys.
V súvislosti s týmto zdokonalením sa začali používať sbory.exe, ktoré môžu používať aj väčší zásobník, rozsiahlejšie dáta adresované pomocou segmentov DS a ES a nemajú na začiatku vyhradenú oblasť pre PSP. V porovnaní so súbormi.com sú súbory.exe o 200H = 512 bajt dlhšie, teda o oblasť záhlavia, kde majú uložené informácie o PSP, o segmentoch o prostredí DOS a pod. Programy spolupracujú väčšinou s prostredím prostredníctvom služieb jadra systému. MS DOS využíva pre tento účel prerušenia INT . Rôzne obslužné programy operačného systému nie sú alokované na absolutných adresách ale sú založené na vyvolaní prerušení INT. Toto umožňuje snadné napodobňovanie pri výrobe počítačov, kde vlastné programy môžu byť neidentické ale výsledný účinok s pohľadu operačného systému je kompatibilný. V osobných počítačoch kompatibilných IBM PC sa používa 5 typov obsluh BIOS, pre ktoré boli rezervované prerušenia INT 0 až INT 1FH a prerušenia DOS INT 21H. Ak obchádza program služby jadra (buď používa priamo služieb vrstvy BIOS alebo priamo komunikuje s technickými prostriedkami) prestáva byť jednoducho prenosný na rôzne inštalácie systému MS DOS.
u
Základné typy obslúh realizované pomocou prerušení INT BIOS v PC IBM
u Základné typy prerušení INT DOS v PC IBM MS DOS služby používajú prerušeniq INT 20H až
INT 3FH.
q Niektoré často používané funkcie handle INT 21H AH = 3CH - Create Handle
AH = 3DH - Open Handle
AH = 3EH - Close Handle
AH = 3FH - Read Handle
AH = 40H - Write Handle
q Príklady použitia inštrukcii pre vstup / výstup s funkciou handle Escr1.com -
Demo vstupu reťazca zakončeného 0DH cez Handle =STDIN=CON
escr1.com - demo INT 21/ah=3FH => vstup dát pomocou Handle = STDIN
Kontolný výpis:
Escw.com1 - Demo výstupu správy z pamäti na obrazovku zakončenej 0DH 0AH cez Handle =STOUT=CON pomocou INT21H/AH=40H. escw1.com - demo INT21/ah=40H výstup dát pomocou handle = STDOUT.
=> vypíše len prvých 10H=16 znakov z bufera na obrazovku Escape1.com -
Demo, že pri otvorení súboru sa pridelí nasledujúce voľné handle,
Úloha: Upravte program pomocou presmerovania z konzoly CON na tlačiaren LPT1 pre výstup postupnosti riadiacich kodov na zmenu jej režimu tlačenia. Postupnosť bajtov pre:
Súbor typu.com možno zakončiť a vrátiť sa do DOS na základe poznatku, že po štarte programu sa nastaví obsah segmentových registrov na hodnotu menšiu o 100H ako je obsah CS, v ktorom je uložený kód programu a že zásobník sa nastaví na vrchol - 1 =.> na FFFEH, nakoľko si program do zásobnika už uložil 0. Ak je program zakončený inštrukciou RET, tak sa do CS:IP obnoví hodnota CS:0. Pretože ale na tejto adrese je začiatok PSP a tam je uložená inštrukcia INT20H, vráti sa riadenie po jej vykonaní do DOS. Možno sa o tom presvedčiť pri odlaďovaní nasledujúceho
programu. Na jeho začiatku je SP= FFFEH a výpis obsahu zásobníka (dss:fffe
L2) zobrazí 00 00 => že na vrchole zásobníka sa uložila 0.
Po vykonaní záverečnej inštrukcie RET sa obnoví SP=0000 a aktualna inštrukcia na vykonanie bude INT 20H, ktorá vráti riadenie do DOS. Pre súbory typu .exe je po štarte
programu v segmente DS uložená adresa začiatku PSP, takže pomocou inštrukcie
RET sa môže tiež vykonať skok na túto adresu, kde je uložený INT 20H, ktorý
vykoná návrat do DOS. Treba však vopred uložiť do zásobníka adresu DS:0
ktorá bude po RET slúžiž ako návratová adresa CS:IP. Nasledujúca postupnosť
inštrukcii ilustruje tento postup:
Iný spôsob súvisí s postupným zdokonaľovaním operačného systému DOS a sice umožnením návratu do DOS pomocou INT 21H/ah=4CH, pričom možno využiť informáciu uloženú programom v registri AL pre dávkový súbor. Tento spôsob zakončenia programu vyhovuje nielen pre súbory typu .com ale aj pre súbory typu .exe.
Postup je založený na zapísaní a uložení potrebných príkazov debuggera a postupnosti inštrukcii mikroprocesora, tvoriacich potrebnú procedúru do súboru.scr (pomocou textového editora). Potom tento súbor.scr presmerovať tak, aby tvoril vstupné dáta pre program debug.exe. Napríklad pre súbor escape1.scr príkazom z promtu: debug.exe<escape1.scr Po zbehnutí programu sa vytvorí v aktuálnom
adresári súbor escape1.com.
Využíva sa vlastnosť PSP súborov.com DOS, do ktorého
sa ukladajú parametre uvedené za menom súboru po zadaní z promtu.Na vstup
parametrov do súboru.com možno využiť fakt, že sa tieto definovaným spôsobom
presunú do PSP do lokality:
![]() Farba2p.com - demo prenosu 2 parametrov (2 maximálne šestnásť znakových reťazcov, oddelených medzerou - v uvedenom programe však majú význam len začiatočné znaky reťazcov) cez FCB1 a FCB2. Znaky sú interpretované v ASCII kóde. Napr A predstavuje 41H a pod. V uvedenom programe jeden znak reprezentuje farbu pozadia a druhý farbu textu, resp. presnejšie využíva sa len 4 LSb z bajtového hexadecimálneho čísla ASCII znaku. 4 LSb prvého zadaného znaku tvorí základ 4 MSb kódu pre pozadie (treba ho preto najprv oddeliť a potom posunuť doľava na miesto MSb atribútu znaku). 4 LSb druhého zadaného znaku tvorí farbu pozadia, t.j. 4 LSb atribútu znaku. Teda napríklad po zadaní prompt príkazu: Farba2p.com A 7 sa z prvého znaku A = 41H zamaskuje najprv na 01H a po posuve o 4 bity vľavo sa vytvorí kód 10H, ktorý bude tvoriť modrú farbu pozadia. Z druhého číslice, reprezentovanej ASCII kódom 37 sa po zamaskovaní vytvorí kód 07H, ktorý bude slúžiž ako biela farba pre text. Na záver príkaz VideoBIOS INT=10H/ah=06H na základe zloženého atribúto v bx=17H pomocou rolovania obrazovky spôsbí zmenu jej zafarbenia. Farba2p.com X Y => prenos 2 parametrov cez FCB#1 a FCB#2.
Úloha : Zaplnit obrazovku
znakom, zadaným ako 1 čislica za menom súboru. Číslica ako znak ASCII (30
- 39) - bude slúžit ako LSB (=>AND 0FH). MSB HEX bude B alebo F => konst.
napríklad tak, aby sa vytvoril znak B0H-B3H, F8H-FAH, 01H - OEH a pod.
Farba80.com - demo prenosu parametrov cez DTA. V tomto prípade sa na prenos parametrov využíva oblasť DTA (ako prvý v oblasti DTA je bajt, reprezentujúci aktuálny počet zadaných znakov za menom súboru - maximálne 128- a na ďalších pozíciach sa ukladajú samotné kódy mena súboru a zadaných znakov. Na demonštráciu si skúste najprv zadať bez medzery farba80.comA7 - takýto príkaz je síce pre program neopoužiteľný ale ukáže vám ako sa to uloží do DTA. Potom znova zadajte správne s medzerami farba80.com A 7 a uvidíte, že pôvodný promt s menom súboru sa prepísal tak, že na adrese CS:82 sa bude nachádzť 41 20 37 20 => A medzera 7 medzera ) Postup vytvorenia farebného atribútu na zafarbenie obrazovky je obdobný ako v predošlom príklade. Na záver programu sa ešte zobrazia 2 výpisy znakových reťazov, jeden uložený na konci programu na adrese CS:340, a druhý ako príklad na spestrenie hneď na začiatku na adrese CS:103 (pretože program.com sa musí začínať na adrese CS:100 s nutným preskokom oblasti dát.) Tvar príkazu: Farba80.com X Y ( Mezi znakmi X Y nechat 1 medzeru! ) príklad prenosu 2 parametrov: text pozadie cez DTA. Napríklad tvar prikazu: farba80.com O 0, kde : O - farba text, 0 -farba pozadie =>kod farby :
Ak je v dávkom súbore.bat použitý súbor.com s návratom do DOS pomocou int 21H/ ah=4CH, tak výstupný parameter z tohto súboru, predtým uložený do registra AL sa prenesie na výstup a možno ho použiť v súbore.bat, napríklad pri rozhodovacom procese pomocou príkazu if errorlevel - then. Nasledujúce 2 demonštračné programy sa líšia použitým programom.com. V oboch sa však rozhoduje podľa obsahu registra AL v tvare ASCII číslice. (Do súboru.bat sa ASCII číslica prekonvertuje do desiatkového tvaru.)
MENU1.bat - demo rozvetvenia v dávkovom súbore na základe číslic 0 - 9 Subor MENU1.bat používa na voľbu rozhodovacieho
skoku procedúru GETNUM.com a rozhoduje sa pomocou číslic + if errorlevel
. Napr ak výstupom z procedúry getnum.com je al=01H má 1 po prechode do
DOS tvar (AL)>=31H=49D a if errorlevel x skok sa uskutoční pre (AL)>= 49D
=> pre BCD kód číslic. ASCII.
MENU2.bat - demo rozvetvenia v dávkovom súbore na základe znakov A - E Súbor menu2.bat používa na rozhodovanie GETLETR.com
Rozhoduje sa síce pomocou znakov A, a - E, e, resp. ESC na výstup z rozhodovacej
procedúry ale pomocou vnútornej masky 3FH v GETLETR.com sa upraví výstup
(AL) na 1 až 5 pre zadané A,a až E,e ,takže if errorlevel už rozhoduje
zase na základe ASCII číslic v BCD tvare, ako v predošlom variante.
|