ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace
OCR dokumentace "kazetopáskové programové vybavení"
TESLA ELTOS OBOROVÝ PODNIK | DIZ |
SAPI 1 |
KAZETOPÁSKOVÉ |
PROGRAMOVÉ |
VYBAVENÍ |
Programové vybavení rozšiřuje možnosti systému SAPI-1 vyvinutého v Tesle Elstroj n.p., vyráběného v Tesle Liberec n.p. a dodávaného Teslou Eltos o.p. Dodavatelsko inženýrský závod (DIZ) .
Celá filozofie nového programového vybaveni V 4 vychází z následující konfigurace systému SAPI-1 a Je této konfiguraci zcela podřízena. Programové vybavení umožňuje používat programovací Jazyk Basic a pracovat s programy v Assembleru. Vzorem programového vybaveni a monitoru bylo programové vybaveni mikropočítačů Intel a operačního systému COS 80 pro mikropočítač SAPI 80. Nové programové vybavení verze V 4 nahrazuje původní programové vybavení systému SAPI-1 - Mikrobasic. Programy v Mikrobasicu nejsou bez úprav přenositelné na nové programové vybavení.
Programové vybavení požaduje následující minimální konfiguraci systému:
- | JZS-1 | Jednotka zdroje a sběrnice (včetně SPN-1 - systémový napájecí panel periferii) |
- | JPR-1 | Deska procesoru s porty |
- | ANK-1 | Abecedně číslicová klávesnice |
- | REM-1 | Deska paměti RAM a EPROM |
- | AND-1 | Deska alfanumerického displeje |
- | DSM-1 | Deska sériového přenosu a modemu |
- | RAM-1 | Deska dynamických RAM pamětí |
Periferie:
- | ZJS-1 | Zobrazovací jednotka (např. televizní přijímač - Pluto, Satelit, atd.) |
- | MKP-1 | Magnetická kazeto-pásková paměť (např. kazetový magnetofon K 10) |
Rozšíření: Tiskárna C 2111 - mozaiková tiskárna Consul
Dále se připravuje připojení dalších periferii jako např. snímač a děrovač děrné pásky, pružné disky, standardní 1/2" magnetická páska (SM 5300), terminál SM 7202 (resp. SM 1601), klávesnice Consul C259.11 a nová membránová klávesnice MK-1.
Programový systém vyžaduje min. 16KB paměti RAM, optimální velikost paměti RAM je 48 KB (deska RAM-1), která poskytuje dostatečný prostor pro programy a umožní plně využít všech možnosti nového programového vybavení.
Dále se doporučuji některé úpravy na deskách systému SAPI-1.
Obsah programového vybavení
A) Rezidentní programy
nahrané na pamětech EPROM
1) Monitor
Rozsah programu 2 KB v paměti EPROM od adresy 000H-7FFH (posice 0,1 EPROM na desce REM-1).
Obsahuje základní funkce řízení systému, obsluha klávesnice a televizního displeje, (viz popis monitoru) Základní monitor může pracovat samostatné bez Monitoru Plus a Mikosu, s omezením poskytovaných služeb.
Rozsah programu 2K v paměti EPROM od 800H-FFFH (posice 2,3 EPROM na desce REM-1).
Rozšíření funkcí základního monitoru a mikrokazetový operační systém - pro kazetový magnetofon, (viz popis monitoru).
Monitor obsazuje I část paměti RAM od adresy 4000H do 43FFH. část paměti od 4300-43FFH lze použít pro programy uživatele (např. podprogramy v Assembleru pro Basic atd./ Program "TOOL" tuto oblast využívá).
B) Transparentní programy
Zavádějí se do operační paměti z vnější paměti (z kazetové pásky) a sdílejí stejnou oblast paměti RAM. Proto nemohou být současně v paměti, a zavedením z kazety se volí jeden, buď TOOL nebo Basic. Programy se do paměti zavádějí od adresy 4400H a zabírají oblast paměti RAM až do 5FFH.
Soubor programů pro práci v Assembleru. Programy jsou uloženy na kazetě a podle potřeby se zavádějí do paměti od adresy 4400H. (Rozsah programů 7K).
Skladba programových modulů
- | Assembler | absolutní Assembler, s pseudoinstrukcemi, podmíněným překladem, bez maker. |
- | line Assembler | jednoprůchodový, řádkový překladač (pro opravu a doplnění programů v Assembleru) |
- | Pedit | brazovkově orientovaný editor (pro televizní displej, s deskou AND-1) |
- | Tracer | ladicí a trasovací program pro programy v Assembleru. |
- | Deassembler | zpětný překladač, ze strojového kódu do Jazyku symbolických adres (JSA) |
- | pomocné funkce |
4) BASIC EX
Interpret jazyku Basic, který umožňuje přípravu, ladění a provádění programů. Program je uložen na kazetě a podle potřeby se zavádí do paměti od adresy 4400. (Rozsah programu 7KB). Uvedené příkazy pro grafiku nejsou zatím v uvedené verzi zabudovány a budou v další verzi překladače pro desku grafického displeje (DGD 1), rozsah programu bude 9K.
Interpret Basicu pracuje s pohyblivou řádovou čárkou jednoduché délky (4-Byte) s přesnosti 6 1/2 dekadických číslic. V použitelném rozsahu 1.70141E+38 (-) 1.70141E-38. Interpret umožňuje práci s řetězci, s uživatelskými funkcemi, i s podprogramy v Assembleru a zpracovávat data z kazetového magnetofonu. Standardní funkce obsahují jak aritmetické funkce tak i funkce pro práci s řetězci.
Maximální počet znaků na řádku je 132 (včetně čísla řádku a mezer), a maximální číslo řádku Je 9999.
Součástí interpretu Basic Jsou i povely pro ulehčení práce při zápisu a laděni programu:EDIT - editace programových řádků, TRON, TROFF - trasováni programu. Ukončeni práce v Basicu a návrat do monitoru se provádí povelem BYE.
Blokové schéma programového vybavení
-------------- | | | MONITOR | EPROM | | -------------- -------------- | | | MONITOR+ | | | EPROM | MIKOS | | | -------------- --------------- ------------ | | | | | TOOL ASM-80 | | BASIC EX | Kazetová | | | | páska --------------- ------------ \ / \ / Volitelné programy
Umístění programu v paměti a sdílení paměti programy V 4
0000H ------------------------ | MONITOR | 0800H ------------------------ | MONITOR + | | MIKOS | 1000H ------------------------ | VOLNÉ EPROM | 2000H ------------------------ | RAM 1kB JPR-1 | 2400H ------------------------ | PORTY 0,1,2 | | PŘERUŠENÍ JPR-1 | 3400H ------------------------ | VOLNÉ EPROM | 3800H ------------------------ | VIDEO RAM AND-1 | 4000H ------------------------ | Pracovní oblast | | MIKOSu a MONITORu | 4300H --------------------------------------------- | Pracovní oblast TOOL | Uzivatelské rutiny | 4400H --------------------------------------------- | Program TOOL | BASIC | 6000H --------------------------------------------- | Programová a datová | Pracovni oblast | | oblast programu TOOL | BASICu | FFFFH ---------------------------------------------
Úpravy na deskách
Deska REM-1:
Povinná úprava: zrušeni adresace RAM na desce - odpojeni výstupu od sběrnice (třetí stav) Pozn.: nestačí vytažení paměti RAM!
Provedení:
Zrušit drátěnou propojku mezi R-2.
Deska AND-1:
Doporučené úpravy: zrušeni žádosti o přerušení od zpětného běhu!
V případě povolení přerušení může nastat chybná funkce některých programů.
Provedení:
Zrušit propojku mezi špičkami 49-50.
Doporučená úprava: - úprava desky proti blikání na displeji
Provedení:
Strana spojů: přerušit spoj z konektoru X1 (šp.8-NON RES) na šp.1 IO D3A. Natáhnout drátěnou propojku ze špičky 1 IO D3A na šp.11 IO D2A (sig. MRQ na schématu desky)
Deska JPR-1:
Doporučená úprava: správná funkce tlačítka INT a tiskárny C2111.
Provedení:
Zrušit propojku 10-11, přerušit spoj u Špičky 21 D15 (MH 3214, NA R29,šp.l5 kon.X3,sp.9 D21-MH 3212). Natáhnout drátěnou spojku ze špičky 10 (propojky 10-11) na šp.21 D15. Doporučená úprava:
Odstranění falešného požadavku na přerušení po zapnutí systému.
Provedení:
Špičku 14 obvodu D16 (NON CLR 3212) odpojit od R35 a připojit na špičku 14 některého z obvodu D17-D22.
Doplněni významu tlačítek na klávesnici ANK-1
Znak klávesnice | odpovídající znak | hex. hodnota | |
SHIFT Q | ^Q | (monitor) | 11 |
SHIFT W | ^W | (monitor) | 17 |
SHIFT A | ^P | (monitor) | 10 |
SHIFT S | ^S | (pedit) | 13 |
SHIFT X | ETX | 03 | |
SHIFT <SP> | TAB | (tabulátor) | 09 |
Tlačítko<LF> | ESC | (¤) | 1B |
SHIFT <LF> | LF | (nový řádek) | 0A |
SHIFT R | % | 25 | |
SHIFT D | & | 26 | |
SHIFT F | \ | 5C | |
SHIFT C | [ | 5B | |
SHIFT V | ] | 5D | |
SHIFT G | _ | (podtrženo) | 5F |
Znaky v první polovině tabulky byly doplněny v novém programovém vybavení, znaky ve druhé polovině byly Již obsazeny v Mikrobasicu, ale nejsou označeny na klávesnici ANK-1.
Klávesy "SHIFT Q" (resp. CTRL Q na klávesnici C259.11) slouží k rezervaci "okna" na obrazovce televizního displeje.
Formát: | <SHIFT Q> <N> | N...počet mezer. Řádek |
<SHIFT Q> | implicitní rezervace | |
<SHIFT Q> <0> | zrušení okna |
Klávesy "SHIFT A" (resp. CTRL P na klávesnici C259.11) slouží k připojení a odpojení tiskárny (paralelně k displeji) První stisk-připojení, druhý-odpojeni atd. V dalším textu bude pro označování znaku "SHIFT" znak používáno označeni ^ znak.
Například: SHIFT S Jako ^S.
Znak "¤" Je znakem měny na některých klávesnicích nebo tiskárnách je místo znaku ¤ znak měny "dolar".
Poznámka:
Uvedené návody na použití programového vybaveni nejsou učebnici programování v Assembleru nebo Basicu a u uživatelů se předpokládají základní znalosti programováni. Programové vybavení se bude i nadále rozvíjet, budou doplněny ovladače používaných zařízení (např. děrnopáskové periferie - snímač FS 1503, děrovač DP DAKO pětistopý dálnopis T100,
Standardní 1/2" magnetická páska SM 5300, pružné disky atd.) podle náběhu nových prvků systému SAPI-1 do výroby. Dále se připravuje i překladač Jazyka FORTH.
Přejeme všem uživatelům nového programového vybaveni pro systém SAPI-1 mnoho úspěchů v jejích práci, s novým účinnějším programovým vybavením.
Monitor je určen pro SAPI-1 a rozšířené programové vybavení (Basic, TOOL). Tvoří vlastní jádro programového vybaveni a ostatní programy na něj navazují a využívají jeho služeb.
Hlavní funkcí monitoru je zajištění styku operátora s mikropočítačem a obsluha všech standardních I/O periferii (klávesnice, obrazovka, snímač, děrovač, tiskárna) s možnosti instalovat do systému jiné (uživatelské) periferie obdobného typu. Proto veškeré změny v hardwarové konfiguraci systému se projeví jen změnou programu monitor a ne v ostatních programech systému SAPI-1.
Další důležitou funkcí monitoru je poskytování služeb pro uživatelské programy na smluvených adresách.
Tento monitor poskytuje některé základní služby operačních systémů CP/M, ISIS-II a většinu služeb OS COS-80. Množina povelů monitoru je zvolena tak, aby bylo možné provozovat programy již se základním 2K monitorem.
Jádro monitoru zabírá 2K paměti a na něho navazuje monitor+ (plus) a mikos, které rozšiřují základní množinu povelů. Základní monitor 2K testuje, zda je v operační paměti monitor+ a umožni provádět rozšířené příkazy monit.+, jinak ohlásí chybu. Základní monitor Je uložen na adresách 000H až 7FFH, monitor+ a mikos jsou uloženy na adresách 800H až FFFH. Povely monitoru a některé filosofie mikosu vycházejí z programového vybaveni COS-80, které je implementováno na SAPI-80, proto nebude uživatelům systému SAPI-80 a obdobných systémů činit přechod na systém SAPI-1 potíže. Programové vybaveni SAPI-1 zahrnuje nové poznatky získané z provozu SAPI-80, Je modernější a poskytuje uživateli větší komfort.
Seznam jednotlivých povelů
1) Seznam povelů základního MONITORU 2K
.A | "ASSIGN" | - přiřazení I/O periferii |
.C | "CLEAR" | - počáteční nastaveni všech dat a podmínek |
.D | "DISPLAY" | - zobrazeni úseku paměti |
.F | "FILL" | - naplněni úseku paměti konstantou |
.G | "GO TO" | - odstartováni programu od zadaná adresy s možností zadáni dvou adres přerušeni |
.M | "MOVE" | - překopírováni oblasti paměti na zadanou adresu |
.Q | "QUERY" | - zobrazeni stavu přiřazeni I/O periferii |
.S | "SUBSTITUTE" | - zněna obsahu paměti |
.X | "EXCHANGE" | - zobrazeni obsahu registru a nebo jeho zněna |
2) Seznán povelů MONITORU+
.K | "KAZETA" | - povel kazetového operačního systému mikos, následuje další znak (viz 3) |
.J | "JUMP" | - kontrola a spuštění programu zavedeného do RAM z kazety |
.I | "INPUT" | - definováni "INPUT" periferie a nastaveni příznaku začátku souboru |
.O | "OUTPUT" | - definováni "OUTPUT" periferie a nastavení příznaku začátku souboru |
.R | "READ" | - čtení souboru typu INTEL-HEX-FORMAT |
.W | "WRITE" | - zápis souboru typu INTEL-HEX-FORMAT |
.E | "EOF" | - ukončeni zápisu HEX-FORMATU a zadáni startovací adresy (=ukončeni HEX souboru a automaticky se provede "CLOSE"). |
.N | "NULL" | - děrováni blanku (prázdných znaků) |
.P | "PEDIT" | - start programu PEDIT |
.T | "TRACER" | - start programu TRACER |
.B | "BASIC" | - start programu BASIC |
3) Seznam povelů operačního systému MIKOS
.K_I | "INIT" | - inicializace kazety |
.K_B | "BASIC" | - načtení mikrobasicu (startovací adresa) |
.K_S | "SAVE" | - uloženi binárního programu |
.K_L | "LOAD" | - načteni binárního programu |
.K_D | "DIRECTORY" | - výpis adresáře |
.K_O | "OPEN" | - otevřeni výstupního souboru (x) |
.K_C | "CLOSE" | - uzavřeni výstupního souboru (x) |
.K_F | "FIND" | - otevřeni vstupního souboru (x) |
.K_A | "APPEND" | - připojeni dalšího výstupního souboru (po CLOSE) |
.K_M | "MOTION" | - posuv pásky |
(x) - vhodná především pro testování. |
Popis Jednotlivých povelů monitoru
A = Assign device
Přiřazení periferií systému.C-console, (systémové zařízeni např. terminál s klávesnicí, teletype atd.), R-READER (čtení - např. snímač děrné pásky, kazetový magnetofon), P-PUNCH (zápis-např. děrovač děrné pásky, kazetový magnetofon), L-LIST (listing-tiskový protokol, např. tiskárna Consul 2111).
Použité zkratky pro označení zařízení:
- CRT | displej s klávesnicí |
- LPR | tiskárna |
- PTP | děrovač děrné pásky |
- PTR | snímač děrné pásky |
- USER1 | uživatelské zařízení (kazetový magnetofon) |
- USER2 | druhé uživatelské zařízení |
významné bity IOBYT | povel | zařízení | číslo služby pro IODEF | |
XXXX XX00 | C=T | CRT+LPR | ||
XXXX XX01 | C=C | CRT | ||
XXXX XX10 | C=B | BATCH | (IN:PTR) | |
(OUT:LPR) | ||||
XXXX XX11 | C=1 | USER | (IN:1) | 0 |
(OUT:1) | 1 | |||
XXXX 00XX | R=T | CRT | ||
XXXX 01XX | R=P | PTR | ||
XXXX 10XX | R=1 | USER 1 | 2 | |
XXXX 11XX | R=2 | USER 2 | 3 | |
XX00 XXXX | P=T | CRT | ||
XX01 XXXX | P=P | PTP | ||
XX10 XXXX | P=1 | USER 1 | 4 | |
XX11 XXXX | P=2 | USER 2 | 5 | |
00XX XXXX | L=T | CRT+LPR | ||
01XX XXXX | L=C | CRT | ||
10XX XXXX | L=L | LPR | ||
11XX XXXX | L=1 | USER 1 | 6 | |
- | - | CONSOLE USER STATUS | 7 | |
- | - | MEMTOP | 8 |
IOBYT
----------------------------- | , | , | , | , | 7 6 5 4 3 2 1 0 ...číslo bitu \___^___^___^___/ LO PO RI CO,CI....rutina monitoru
Rozděleni bitů u IOBYTE pro přidělováni periferii (1.sloupec tabulky).
Nastaveni uživatelských periferii se provádí pomoci rutiny IODEF.
V reg (C) je číslo služby (0-8) a v reg. (DE) je adresa příslušné rutiny, číslo služby (8) - nastaveni MEMTOP (DE) - deklarace konce RAM.
MEMTOP - nastavuje horní hranici paměti a zbytek paměti je chráněn před přepsáním systémovými programy (BASIC,PEDIT atd.).
Poznámka: Monitor se ohlašuje znakem (tečka na displeji).
Přiklad.
.A-C=T nastavení consoly CRT+LPR (pozor tiskárna musí být připojena). Podtržené znaky píše systém.
B = BASIC
B start interpretu Basic, pokud je zaveden v operační paměti. Text programu se zachová po opětovném spuštění!
Přiklad. .B
C = CLEAR
C mazání proměnných monitoru a všech řídicích proměnných. (Programový RESET). Nastaví se takové podmínky, že při spuštění PEDITu, TOOLu, BASICu se provede Inicializace a ruší se texty, tabulky symbolů atd. (studený start jako RESET. Nutno používat při přechodu mezi programy TOOL a BASIC, kde se zajišťuje takto ochrana, aby jeden program nepoškodil druhý.
Poznámka. Při omylu je možno zachránit data "Teplým startem"
- viz příkaz G.
Příklad. .C
D = display memory
D=<L.ADR>=<H.ADR> zobrazení obsahu paměti. Lze přerušit libovolnou klávesou.
Přiklad. D=4400=440F<CR>
4400 C3 50 44 C3 00 00 41 42 .PD...AB 4408 30 32 34 31 33 40 00 FF 02413@..
<CR>...znak návrat vozu'
E = ENO OF FILE COMMAND
E=<ADR>
Děruje konec souboru a startovací adresu programu. Je-li adresa=0, program se nestartuje.
Příklad. .E=7000H ; startovací adresa .E=0 ; program se nestartuje automaticky při čtení (přikaž R)
F = FILL RAM MEMORY
F=<L.ADR>=<H.ADR>=<BYTE> <CR>
Naplněni úseku paměti konstantou.
Přiklad. .F=F000=FF00=01 ;naplnění paměti od adr. F000H až FF00H konstantou 01.
G = GOTO
G=<start.adr>=<break1>=<break2> <CR>
start programu a nastavení bodu přerušeni pro laděni programu. (.X ...umožni prohlížet registry atd.)
Programy PEDIT, BASIC maji na adrese 4400 T.ZV. "Studený start", který umožní obnovu dat, po nechtěném zrušení (např. po příkazu .C, nebo po stisknutí tlačítka RESET. program TOOL (ASSEMBLER, TRACER) má studený start na adrese 4C00 a teplý na adrese 4C03.
Příklady.
G=20<CR>.start programu na adrese 20H G=100=109.start od 100H a nastav přerušeni na 109H G=30=37=45..nastavení 2 bodu přerušení G=<CR>..pokračuj do minulého přerušení G=<SP>=30<CR>..pokračuj a nastav nové přerušení <SP>...znak 'mezera'
I = INPUT
Ovládání příznaku otevřeni vstupního souboru (zrušení otevření) pro vstup dat.
Doporučuje se příkazy používat vždy při zavedení nového programu (např. změna TOOL na BASIC a podobně), protože nastaví příznaky MIKOSu do počátečního stavu.
I=1 | z kazety READER USER 1 |
I=2 | z uživatelského snímače (READER USER 2) |
I=R | READER - snímač pásky |
I=T | CONSOLE |
Přiklad. .I=1 <CR> ;nastav USER 1
J = JUMP
Start programu zavedeného příkazem (K_L) a kontrola součtu v paměti.
Přiklad. .J ;skok na program
K = kazeta
Povely kazetového operačního systému - MIKOS.
Podrobný popis je uveden v popisu MIKOSu.
Formát: .K_X Kde X je jeden z povolených příkazů Mikosu.
Přiklad. .K_L ;Zavedení binárního programu do paměti.
M - MOVE a BLOCK OF MEMORY
Přesun úseku paměti od zadaných adres (počáteční, koncová) zdrojová oblast do úseku, který je zadán počáteční adresou. Úseky se nesmí překrývat jinak dojde k porušeni dat. (nový přepis).
Formát: .M =<zdroj 1> =<zdroj 2> =<příjemce 1><CR>
Kde ZDROJ 1,2 jsou adresy počátku a konce zdrojové oblasti.
PŘÍJEMCE 1 - je počáteční adresa na kterou se provádí přesun. Obsah zdroje se nemění, přesun se provádí včetně koncové adresy.
Přiklad. .M=7000 =7006 =A000<CR>
Obsah zdroje Obsah přijímací zóny 41 42 43 44 45 46 00 00 00 00 00 00 Před 41 42 43 44 45 46 41 42 43 44 43 46 Po
O = OUTPUT
Ovládáni příznaku otevření výstupního souboru (zrušení otevření) (pro výstup dat). Pro používání platí stejná doporučení jako u příkazu INPUT.
O=1 | na kazetu (PUNCHER USER 1) |
O=2 | na uživatelský děrovač (PUNCHER USER 2) |
O=P | na děrovač (PTP) |
O=T | na console (CRT) |
Příklad. .O=1<CR>
N = 120x NULL PUNCH
N děrováni blanku
P = PEDIT
P skok do editoru, zachová text. buffer, při opětovném spuštění po povelu .C se zruší automatická ochrana textu, (možná záchrana - G =4403<CR> ... viz povel .G a uložit text).
Přiklad. .P ;skok do PEDITu
Q = QUERY
Q zobrazí stav I/O přiřazeni (IOBYTE)
Příklad.
.Q C=C R=1 P=1 L=L ;standardní nastaveni MONITOREM+ MIKOS .Q C=C R=P P=P L=C ;standardní nastaveni je-li pouze MONITOR
R - READ HEX.TAPE
Čtení hexadecimální pásky a její uložení do paměti, podle obsahu OFFSETU. Není-li OFFSET uveden,bere se OFFSET 0, a program se uloží dle "Báze=7000H".
OFFSET může být jak v kladném tak i v záporném směru.
Formát:
R=<OFFSET> <CR> LOADER Hlášeni chyb: S- (SUM) chyba kontrolního součtu M- (MEMORY) v cílovém prostoru není RAM :- chybí příznak začátku rekordu
Příklad.
Program byl přeložen v modu X a na pásku zapsán příkazy W,E.
Požadujeme přečtení a uložení programu na adresu 8000H
.R=1000H
Program se uloží na adr. 8000H.
Totéž, ale program uložit na adresu 4400H
.R=D400H ;7000H+D400=>4400H přenos zanedbat
S = SUBSTITUTE MEMORY CONTENS
Formát: S=<ADR> <SP> OBSAH -<NOVÝ OBSAH> . . . <CR>
Záměna obsahu paměti:
- po znaku " ’ " (apostrof) se může vložit zrak jako ASCII kod
- po znaku " , " (čárka) se zobrazí adresa a další byte
Příklad: .S=4400 C3-00 ;na adr 4400 je původní obsah C3, nahrazeno 00 .S=7000 FF-'A ;změna FF na 41-kód "A" .S=7000 41- 01- 02- 03- ;postupný výpis bez zněn .S=7000 41- 01-, ;přechod na výpis adresy 7002= 02, 7003= 03
T = TOOL
Skok do souboru programu "TOOL", pokud byl zaveden do paměti
Příklad. .T
Pozor! Je-li zaveden program TOOL po BASICu nebo naopak je nutné povelem "C" zrušit podmínky monitoru a inicializovat takto řízeni automatické ochrany dat jednotlivých programů.
W - WRITE TO TAPE HEX
Formát: W = <L .ADR> <SP> =<H.ADR> <CR>
Zápis obsahu paměti do děrné pásky, za posledním w-příkazem musí následovat E-příkaz!
Příklad.
.W=4400=5FFF <CR>
X = EXAMINE AND MODIFY REGISTER
Kontrola a popřípadě úprava obsahu registru.
Formát: .X<REGISTER>=OBSAH - [<nový obsah>]...<SP>= dalši reg.,
<SP> ... DALŠÍ REGISTR
<CR> ... UKONČENI
X<CR>
Přiklad.
.X<CR> A=FF B-A0 C-..... Obsahy všech registrů včetně F-FLAG, PC, SP
.XA=FF-01<CR> Nový obsah reg. A
Poznámky:
U příkazů, která maji více parametrů, se zadání jednotlivých parametrů ukončuje znakem <SP> - mezera, ukončeni příkazu znakem <CR> - návrat vozu.
Je-li vyžadována adresa, zadává se v hexadecimálním tvaru bez písmene "H". Dojde-li při zadávání k chybě, lze chybný údaj opravit tak, že se znovu správně napíše (systém bere poslední 4 zapsané číslice). Např. chceme zapsat adresu 7800 a napsali Jsme:77 tudíž pokračujeme v zápisu 800 (celkově 77800) systém vezme správné 7800). Počet vstupních znaků je závislý na typu operace: Slovo (4 HEX. čísla), byte (2 hex.).
Speciální klávesy
ANK-1 | C259.11 | význam |
SHIFT W | CTRL W | skok do monitoru |
SHIFT A | CTRL P | přepnuti tiskárny (zap/vyp) |
SHIFT Q | CTRL Q | okno |
SHIFT X | CTRL C | přerušení jiného programu bez MONITORU (BASIC,TOOL,PEDIT) |
Klávesa "SHIFT Q" vymezí na obrazovce televizního displeje "okno", které se nepřepisuje.
Formát: | <SHIFT Q><N> | ... kde N je počet rezervovaných řádka 0-9. |
<SHIFT Q><CR> | ... rezervuje implicitní počet (11) | |
<SHIFT Q>0 | ... zruší "okno" |
Základní služby monitoru
Protože monitor je uložen od adresy "0" je na rozdíl od jiných monitorů tabulka služeb od adresy "100H" a ne od "0F800H" (INTELLEC).
V případě, že systém SAPI-1 má paměť RAM i na adresách 0F800H, povelem MOVE lze tabulku služeb překopírovat na ADR:0F800H a potom bude monitor plně kompatibilní s monitorem ISIS-II.
100H | začátek tabulky služeb | |
+0 | 'START' | monitoru + inicializace |
+3 | 'CI' | console INPUT <A> |
+6 | 'RI' | READER INPUT <A>, CY=1 konec pásky |
+9 | 'CO' | console output <C> |
+0CH | 'PO' | punch output <C> |
+0FH | 'LO' | list output <c> |
+12H | 'CSTS' | console status <A> |
+15H | 'IOCHK' | I/O byte read <A> |
+18H | 'IOSET' | I/O byte set <C> |
+1BH | 'MEMCK' | nastav konec RAM paměti <A>.. LOW,<B>. HIGH BYTE |
+1EH | 'IODEF' | definuj uživatelskou periferii <C>. číslo<DE>.. adresa |
+21H | 'SPCL' | V <HL> adresa kurzoru |
Služby COS-80 systému SAPI-80 | ||
+24H | 'CRLF' | zobraz nový řádek |
+27H | 'EXPR' | přečti zadaný počet<C>16-bitových parametrů do zásobníku |
+2AHx | 'ERROR' | chybové hlášeni, BEEP a návrat do monitoru |
+2DH | 'ASHEX' | převeď ASCII na HEX<A> |
+30H | 'DADR' | zobraz adresu uloženou v<HL>na 'CO' |
+33H | 'DBYTE | 'zobraz byte v<A>..HEX na 'CO' |
+36H | 'HILO' | HL+1:DE,IF HL>DE THEN CY=1 ELSE CY=0 |
+39H | 'NEXT' | pokračuj v programu monitor |
+3CH | 'SPACE' | zobraz mezeru na 'CO' |
+3FH | 'CINCR' | čti 'CI' proveď ECHO a proveď analýzu znaku (PO <CR> JE CY=1, PO <SP> JE Z=1 |
+42H | 'TEXT' | zobraz text<HL>.. adr, <D>.. délka na 'CO' |
+45Hx | 'XY' | využívá program TOOL |
+48H | 'HXASC' | <A> převeď HEX na ASCII |
+4BHx | 'EXFLG' | externí ovládáni FLAGU pro řízení monitoru a MIKOSu |
+4EHx | 'ASSIGN' | přidělení periferních zařízeni |
Poznámka: služby označené "x" jsou upraveny proti COS-80.
Služby CP/M
Adresa pro voláni služeb je společná "0005", jednotlivé služby se rozlišuji pomocí obsahu registru<C>!
V monitoru jsou implementovány služby CP/M:
0 | COLD START |
1 | CONSOLE INPUT |
2 | CONSOLE OUTPUT |
3 | READER INPUT |
4 | PUNCHER OUTPUT |
5 | LIST OUTPUT |
6 | DIRECT CONSOLE |
7 | IOSET |
8 | IOCHECK |
9 | -------- |
10 | -------- |
11 | CONSOLE STATUS |
Služby EXFLAG
Řízení služeb systému v registru <C> je číslo služby a v registru <A> (akumulátoru) Jsou data pro řízeni služby.
C=0 mode pro displej A-0 normální znaky A-40H blikající znaky A-80H podtržená znaky A-C0H široké znaky C=1 FIND A=0 Pro I=1 FLAG pro otevřeni souboru C=2 FIND I=2 " " " C=3 OPEN A=0 Pro O=1 " " " C=4 OPEN O=2 " " " C=5 nastav kurzor A...číslo řádku C=6 nastav kurzor A...Číslo posice C=7 rezerva line A...počet řádků ("okno")
Řízeni obrazovky
CONSOLE OUTPUT simuluje chování displeje AND-16 a SM 7202. Řidiči znaky 1FH. 1EH, 1DH a 08H maji shodnou funkci. Jako nová funkce je možnost zadáni okna na obrazovce, ve kterém může být trvale zobrazen text. Pro zadání okna Je určen znak "Q", po kterém následuje další znak, který určuje počet řádků od začátku obrazovky jako velikost okna. Okno se oddělí na obrazovce od ostatního textu blikající čárou.
Řízeni tiskárny
Tisk na tiskárnu lze řídit pomoci povelu přiřazení "ASSIGN" nebo kdykoliv pomoci klávesy <CTRL P>- pro klávesnici CONSUL 259.11, <SHIFT A> pro klávesnici ANK-1. Při prvním stisknuti se všechny znaky vysílané na CO (console současně vypisují i na tiskárně, druhým stisknutím se tento režim ruší.
Pozor: K systému musí být připojena a zapnuta tiskárna!!!
Formát dat Intel-hex
Data zapisovaná příkazy W a čtená příkazem R jsou ve formátu INTELLEC HEX. Data jsou členěna do bloku. Každý záznam má označení počátku, délku záznamu, adresu pro umístění dat, vlastní data a jsou ukončena kontrolním součtem. Formát byl navržen firmou INTEL pro programování paměti PROM a EPROM s 8-mi bitovou strukturou. Podniky Tesla převzaly tento formát jako jediný a závazný pro programování pevných pamětí.
Formát:
(:)( L1)( ADR 1)( TYP 1)( DATA 1)( KC1) 1 2 4 2 2xL1 2 ...počet HEX.číslic (:)( L2)( ADR 2)( TYP 2)( DATA 2)( KC2) (:)( LN)( ADR N)( TYP N)( DATA N)( KCN)
Poznámka. Znaky "( )" se ve skutečném formátu nevyskytují a slouží pouze pro grafické oddělení jednotlivých poli záznamu. Záznam je proveden v ASCII kódu, a přípustné znaky jsou pouze hexadecimální číslice tj. 0-9, A-F, a znak " : " (dvojtečka) indikující počátek záznamu.
Význam poli:
- : dvojtečka - začátek záznamu, délka pole záhlaví -1 znak - L délka pole dat ve slabikách (1slabika = 2 hexačíslice v ASCII. Délka pole "L" -2 hexčíslice. - ADR Adresa v paměti pro uložení 1. slova dat z pole data. Data se ukládají do paměti vzestupně za sebou. Délka pole jsou 4 hexačíslice. - TYP Typ záznamu. Zatím jsou stanoveny následující významy: =00H Jde o datový záznam =01H Jde o záznam s významem "konec souboru" Délka pole -2 HEX. číslice. - DATA Vlastní data. Dvě HEX. číslice se ukládají do jedné slabiky. Délka pole musí odpovídat dvojnásobku uvedeném v poli "L". - KC Kontrolní číslo. Záporně vzatý kontrolní součet (slabik v paměti). Poznámka. Součet všech slabik ("L"-"KC" včetně) musí být nulový.
Výpočet hodnoty kontrolního součtu
A) Počínaje polem L a konce polem DATA se hodnota každé dvojice hexadecimálních číslic vyjádři ve formě 8-mi bitového čísla
(v přímém binárnim kódu).
B) Tato osmibitová čísla se sečtou
C) záporně vzatý součet se vyjádři ve formě dvojkového doplňku.
Poznámky :
A) Hodnoty poli pro poslední záznam.
TYP=01H, L=00H, DATA=prázdné. ADR=0000H nebo počáteční adresa.
B) Přiklad.
:103150000E01117A31CD40000E09119031CD4000A1 :103160000E0C119231CD40000E09119031CD40006E :00000001FF
Poznámky k funkci monitoru.
Monitor pro klávesnici ANK-1 obsahuje programovou funkci "REPEAT", která umožňuje automatické opakováni znaku při držení klávesy na klávesnici. Asi po 0.8 sec. se provede zopakováni znaku.
Klávesa SHIFT X (ANK-1) nebo CTRL C (C259.11) způsobí přerušení provádění programu.
Klávesa SHIFT W (CTRL W) způsobí výstup z programu (kromě monitoru) a vypíše obsahy registrů a předá řízení monitoru.
Systém MIKOS obsahuje příznaky "FLAG" pro vstupní a výstupní soubory, které nejsou uživateli přístupné a které řídí stavy rozpracovanosti souboru.
V některých případech je nutné pro správnou funkci systému, mít možnost počátečního nastavení těchto příznaků, a proto jsou v monitoru dva příkazy - "I" "O", které umožní uživateli počáteční nastavení příznaku.
Toto nastavení je nutné v případě nenormálního ukončení programu (např. při zacyklení programu a jeho přerušení ^W atd.)
(MI-kro K-ezetový O-perační S-ystém )
"MIKOS" pracuje se základní sestavou SAPI-1 s jedním kazetovým magnetofonem. Umožňuje pořizovat data, programy pomocí editoru PEDIT, překládat a ladit uživatelské programy ASSEMBLEREM a TRACEREM. Zpracovávat data Basicem. "MIKOS" automaticky formátuje data zapisovaná na kazetu do bloku, které zabezpečuje pořadovým číslem bloku. Uživatel pracuje s daty jako by pracoval se snímačem nebo děrovačem pásky. Veškeré ovládání se děje přes monitor a systémové rutiny RI, PO. Příkazy I=1, O=1 nastaví uživatel "IOBYT" na kazetový magnetofon a zadá systému, že není otevřen žádný vstupní ani výstupní soubor. Systém automaticky otevře soubor v okamžiku kdy se provede první manipulace s daty. Výstupní soubor se ukonči automaticky po zapsání znaku <CTRL Z> tj . SUB v ASCII. Může být zadán přímo z klávesnice C259.11 na 'PO' (kazeta nebo děrná páska), nebo povelem K - C. Během vyhledávání souboru se automaticky na první řádek obrazovky vypisuje jméno souboru a pořadové číslo bloku, znak " : " indikuje probíhající čteni z kazety, znak "x" indikuje čteni dat z pásky a jejich ukládáni do paměti, znak '=' indikuje, že během vyhledávání byl špatně přečten blok. Zpracováni chyby se provádí po špatném přečtení bloku nebo jeho vynechání. MKOS vypíše 'ERROR'a čeká na obsluhu. Klávesou "N" je možno zadat ignorování čtení. Po jiné klávese "Y" nebo <SP> vypíše se "BACK PLAY DONE". Obsluha převine pásku (několik CM) zpět a přepne na čtení.
MIKOS začne vyhledávat špatně zpracovaný blok (provádí zobrazeni jména a čísla bloku) až přečte správné blok. Potom přestane automatické vyhledávání a vypíše nový řádek, a pokračuje proces, přerušený chybným čtením. MIKOS má dvě délky meziblokových mezer. Dlouhá mezera umožni zastavit a znovu rozjet magnetofon. Potom nejsou zápis ani čteni závislé na rychlosti zpracováni dat uživatelem (používá se při zápisu HEX formátu, v Basicu atd.). Krátká mezera se používá při zápisu a čteni binárních dat (příkazy K-L, K-S).
Povely systému MIKOS
K_A | 'APPEND' | připojení dalšího výstupního souboru (PO CLOSE) |
K_B | 'BASIC' | čteni ve formátu mikrobasicu |
K_C | 'CLOSE' | uzavření výstupního souboru |
K_D | 'DIRECTORY' | výpis adresáře |
K_F | 'FIND' | otevření vstupního souboru |
K_I | 'INIT' | inicializace pásky |
K_L | 'LOAD' | načtení binárního souboru |
K_M | 'MOTION' | posuv pásky |
K_O | 'OPEN' | otevření výstupního souboru |
K_S | 'SAVE' | uložení binárního programu |
W | 'WRITE' | zápis souboru ve formátu INTEL-HEX |
R | 'READ' | čteni souboru ve formátu INTEL-HEX |
E | 'END-OF-FILE' | zápis ukončení souboru INTEL-HEX |
Pásku je možno inicializovat tj. zapsat na mg. pásku blok záhlaví, ve kterém je možno napsat označení pásky, verzi atd. Záhlaví
se vypisuje při příkazech K_D a čteni, pokud je páska na začátku. Slouží k vizuální kontrola výběru správné pásky. Funkce čteni
a zápisu je možno provádět ve dvou typech -
- binární, INTEL - HEX formátech.
Komunikace s obsluhou probíhá dialogovým režimem, kdy systém vypíše nápovědný text a čeká na provedení úkonu obsluhou a potvrzení, že úkon byl proveden stisknutím klávesy na klávesnicí.
Stručný přehled příkazů a odpovědí
A) Inicializace
.K_I BOT RECORD DONE? <Y> VOLUME NAME : <OZNAČENI PÁSKY><CR> . ;návrat do monitoru - ukončení funkce
B) čtení pásky (binární-implicitní uloženi)
.K_L NAME :<JMÉNO SOUBORU><CR> PLAY DONE? <Y>
... vyhledání a natažení souboru do paměti
C) uložení dat z paměti na pásku (binární)
.K_S =<XXX><SP>=<YYY><CR> ;poč.adr.XXXX, koncová adr. YYYY LAST NAME ;Jméno posledního souboru na pásce :<JMÉNO SOUBORU> <CR > PLAY DONE? <Y> ;hledáni posledního souboru
....hledání
RECORD DOME?<Y> ;nastavení zápisu na Mg. NEW NAME :<JMÉNO NOVÉHO SOUBORU><CR>
...zápis dat na pásku ;po zápisu zastavení
D) Zápis bez vyhledání (předcházel-li zápis, páska za posledním souborem).
.K_A RECORD DONE? <Y> NEW NAME :<JMÉNO NOVÉHO SOUBORU><CR>
...zápis hlavičky souboru
.K_S =<XXXX><SP> = <YYYY> {CR)
---nahrání souboru
Pozn. Neprovádí se vyhledávání posledního souboru
E) Převíjení - pohyb pásky
.K_M ;zapnutí magnetofonu DONE? <Y> ;zastavení Mg.
F) Pomocné funkce
.K_O ;otevření souboru LAST NAME :<JMÉNO><CR> RECORD DONE? <Y> NEW NAME :<NOVÉ JMÉNO><CR> ;otevření souboru pro zápis .K_C ;uzavření výstupního souboru .K_F ;otevření souboru pro vstup NAME :<JMÉNO><CR> .K_B ;čtení pásky s mikrobasicem =<XXXX><CR> ;adresa uložení PLAY DONE? <Y>
xxx ;signalizace nahrávaných bloků mikrobasicem
K_D ;čtení adresáře pásky a zobrazení na displeji PLAY DONE? <Y>
VÝPIS
provádí se kontrolní čtení souboru včetně vyhodnocení chyb při čtení. Právě čtený blok se průběžně zobrazuje na prvním
řádku obrazovky název a číslo bloku. v dolní polovině je zobrazen adresář, který obsahuje pořadové číslo programu na pásce
(dekadicky), název programu (max. 11 znaků) a délku programu v blocích (hexadecimálně).
<SHIFT X> ;ukončení výpisu adresáře
Příkaz K_D se automaticky neukončuje, protože na pásce není znak logického konce pásky (z důvodu manipulace s kazetovým magnetofonem) a proto je nutno ukončení příkazu K_D provést ručně stiskem klávesy <SHIFT X> u ANK-1 nebo <CTRL C> u C259.11.
G) INTEL-HEX FORMÁT
Posloupnost příkazu při zápisu dat na pásku
O=1 W=<POČ .ADRESA> <SP>=<KONČ .ADRESA><CR>
---VLASTNÍ KOMUNIKACE SE SYSTEMEM---
---ZÁPIS DAT NA PÁSKU---
E = <STARTOVACÍ ADRESA> <CR>
Posloupnost příkazu pro čtení dat z pásky
I=1 R=<OFFSET><CR>
---VLASTNÍ KOMUNIKACE SE SYSTÉMEM---
---ČTENÍ DAT Z PÁSKY DO PAMĚTI---
Rychlé vyhledáváni souboru
Během vyhledáváni souboru na kazetě, lze využívat i rychloposuvu (vpřed nebo vzad), protože na hornim řádku obrazovky se objeví jméno souboru a číslo právě čteného bloku. Na základě těchto údajů lze podstatně zrychlit dobu pro vyhledáváni souboru na kazetě a tím eliminovat základní nevýhodu kazetového magnetofonu (tj . dlouhá doba přístupu k souboru).
Poznámky k funkci OS MIKOS
Soubory jsou na kazetu ukládány s názvem o maximální délce 11 znaků. Dále je možno ukládat společně s názvem poznámky, např. číslo verze, datum pořízeni atd. a celková délka názvu poznámky může být až do 64 znaků.
Příkazy, které vyžadují název souboru provádějí srovnání zadaného názvu s názvy na pásce. Porovnáni názvu se provádí v délce zadaného názvu (t j . do první mezery v názvu nebo 11 znaků).
Např. na pásce jsou soubory SOUB1, SOUB2, SOUB3 a např. při příkazu K_L NAME <SOU><CR> systém vybere první soubor SOUB1.
Při zavádění názvu souboru je možná i hvězdičková konvence tj., že místo názvu zadáme hvězdičku a systém přečte hlavičku souboru a dotazuje se zda je to požadovaný soubor (vyžaduje odpověď Y/N) v případě kladné odpovědi provede požadovanou operaci, a v případě záporné odpovědi pokračuje v hledání souboru.
Stav rozpracovanosti souboru je řízen příznaky "FLAGY", které jsou součástí OS MIKOS a nejsou přístupné uživateli. V některých případech je nutné provést počáteční nastavení těchto příznaků (např. při nenormálním ukončení programu, který pracoval se soubory na kazetě), a k tomu slouží příkazy monitoru " I " pro vstupní soubor a " O " pro výstupní soubor.
OS MIKOS provádí průběžné hlášeni své činnosti na obrazovce displeje. V případě čtení se na horním řádku obrazovky zobrazuje signální znak " : " nebo " x ", název programu a pořadové číslo bloku v souboru (HEXA), Znak " : " signalizuje provádění čtení do bufferu (bez dalšího ukládání) a znak " x " signalizuje ukládání do bufferu a další zpracování (aktuální soubor). Dojde-li při čtení k chybě je chyba signalizována znakem "#" který se tiskne na řádku vyvolání funkce čtení. Při zápisu na kazetu je prováděno zkrácené hlášení - tj. na horním řádku se zobrazuje pouze pořadové číslo právě zapisovaného bloku.
Formát dat na kazetě.
Data na kazetě jsou ukládána ve formátu:
----------------------------------------------------------------- | MEZIBLOKOVÁ MEZERA | 10 | 10 | KOD | 255 BYTE DATA | NÁZEV | ----------------------------------------------------------------- ----------------------------------------------------------------- | C.BLOKU | C.SOUBORU | KON.SUMA | 10 | 00 | MEZIBLOKOVÁ MEZERA | -----------------------------------------------------------------
-MEZIBLOKOVA MEZERA: dvě délky | -krátká cca 100ms | (typ B) |
-dlouhá cca 1s | (typ A) |
-10 | Synchronizační znaky | |
-KÓD | 01 | záhlaví souboru |
04 | koncový blok souboru | |
: | záhlaví pásky (označeni pásky - INIT) | |
A | znakový soubor | |
B | binární soubor | |
-BLOK | DAT 255 byte (KÓD+BLOK - funkci blok 256 byte, ostatní znaky tvoří rámec funkčního bloku pro OS MIKOS). | |
-NÁZEV | 11-byte označeni souboru | |
-C. BLK | hexa číslo bloku v souboru | |
-C. SOUB | číslo souboru | |
-KONT. SUMA | kontrolní číslo - neg. součtu všech znaků včetně rámce (tj. od 10) | |
-UKONČENI BLOKU | 10,00 |
Formát funkčních bloků:
----------------------------------------------------------------- | : | NÁZEV KAZETY 64 BYTE | VYPLŇ DO 256 - PRÁZDNÉ 00 | ----------------------------------------------------------------- ----------------------------------------------------------------- | 01 | NÁZEV SOUBORU 11 BYTE | POZNÁMKY DO 64 B | VYPLŇ | ----------------------------------------------------------------- ----------------------------------------------------------------- | 04 | ZBYTEK DAT TYPU "A" NEBO "B" | VYPLŇ | ----------------------------------------------------------------- ----------------------------------------------------------------- | A | ASCII SOUBOR | ----------------------------------------------------------------- ----------------------------------------------------------------- | B | < | ST .ADR | KONC .ADR |>| KS-1 | DATA 1 | KS-2 | -----------------------------------------------------------------
Poznámky:
Čísla 10, 01, 04, 00 jsou HEX, znaky: A B jsou zn. konst.
Znak | pouze graficky odděluje jednotlivá pole.
"04" - Je posledním blokem souboru a může obsahovat zbytek dat příslušného souboru typu "A" nebo "B".
"A" soubor obsahuje znaky v ASCII kódu a data jsou ukončena znakem "SUB" (CTRL Z) "1A"-HEX. Bloky souboru A jsou oddělovány dlouhou mezerou (čas pro zpracování dat).
"B" - binární soubor obsahuje hlavičku - tj . adresu uloženi do paměti, koncovou adresu a kontrolní součet hlavičky. Adresy jsou rámovány znaky "<" ">" - Kontrolní součet KS-1 chrání program před nesprávným uložením popř. přepisu. Dále následuji vlastní binární data, která jsou zabezpečena rovněž kontrolním součtem (KS-2). Formát "B" používá krátké meziblokové mezery.
Doporučení pro práci s kazetovým magnetofonem
1) POZOR
Na umístění kazetového mgf vzhledem k televizoru, vychylovací obvody televizoru vytváří rušivé pole, které může
ovlivnit čtecí obvody mgf. Nastavte polohu mgf na nejmenší rušeni - bez kazety, zapnout přehráváni (Play), regulátor hlasitosti
na max. Natáčením mgf nebo vzdalováním od televizoru najdete místo s nejmenšim rušením.
2) Na rozdíl od profesionálních systémů není u SAPI-1 automatická kontrola čtením po zápisu (nedovoluje to použitý konvenčni mgf). Proto udržujte pečlivě čistotu hlavy mgf. kazety udržujte v bezprašném prostředí, ukládejte vždy převinuté do originálních krytů. Kazety Emgeton použijte jen po přezkoušení. Doporučujeme používat kazety Orwo K60 (nebo zahraniční LH). Záznam začínejte nejméně 10 sekund od začátku kazety, úvodní část bývá znehodnocena slépkou - prosakováním lepidla.
3) Vždy zhotovujte nejméně dvě kopie souboru (programové vybavení to dovoluje). Okamžitě po záznamu si ověřte příkazem K_D správnost souboru.
Tabulka služeb OS MIKOS
800H | Začátek tabulky služeb |
+0 | Teplý start MIKOSU |
+3 | Studený start MIKOSU |
+6 | Rezervováno - nepoužívat |
+0C | Otevřeni vstupního souboru FIND |
+0CH | Otevřeni výstupního souboru OPEN |
+0FH | Uzavřeni výstupního souboru CLOSE |
+12H | Zavedeni programu v binární formě LOAD |
+15H | Uloženi programu v binární formě SAVE |
Soubor programu "TOOL" obsahuje programy pro práci v Assembleru-editaci, ladění a představuje programové vybavení pro "malý" vývojový systém.
Programy lze rozdělit do pěti základních skupin:
1) | Assemblery - textový, jednořádkový; |
2) | Editor - Pedit, příprava zdrojových textů a jejich opravy a modifikace; |
3) | Trasovací program - tracer pro ladění assemblerovských programů; |
4) | Zpětný překladač - Deassembler, převod strojového kódu programu do symbolické verze; |
5) | Pomocné programy - základní služby monitoru a rozšířeni. |
Soubor programu "TOOL" poskytuje uživateli Assembleru účinné prostředky pro přípravu, překlad a odladění uživatelských programů .
Seznam povelů
+...hlášení na displeji programu TOOL | ||
+A | ASSEMBLY | Start Assembleru a volba režimu překladu "PASS=" |
+B | BEGIN | Nulováni tabulky symbolů, podmínek, nastavení zásobníku (STACK) a registrů |
+C | Condition | Nastaveni podmínky TRACERU |
+D | Display | Zobrazeni obsahu paměti ( <L.ADR> , <H.ADR> ) |
+E | EOF | Vyděrování konce souboru a zadáni startovací adresy |
+F | FIND | Vyhledání řetězce znaku v paměti: <L.ADR> , < H.ADR> .. Oblast vyhledáváni <N=1-3> .. Počet vyhledávaných bytů <DATA1><SP>..<DATAN><SP> .. Vyhledávaná data <MASKA1>..<MASKAN> .. Maska (log. součin) |
+G | GOTO | Start od žádané adresy s volbou přerušení: < START .ADR > , < BREAK ADR1> , < BREAK ADR2 > |
+H | HEXADECIMAL | Hexadecimální součet a rozdíl |
+I | INPUT | Čtení okamžitých dat ( <PORT> ) |
+J | JUMP | Skok na zavedený program - PEDIT (viz příkaz J monitoru) |
+K | KAZETA | Příkaz kazetového OS MIKOS (viz monitor) |
+L | LINE - ASSEMBLER | Jednoprůchodový přímý překladač (pro krátké programy a opravy při ladění) |
+M | MOVE | Přesun obsahu paměti do jiné oblasti: <L.ADR> . <H.ADR> , <L.ADR CÍLOVÉ OBLASTI> |
+O | OUTPUT | Vysláni dat na port (<PORT> , <DATA> ) |
+N | NULL | Nulováni registru a podmínky (viz +B) |
+P | PEDIT | Start programu PEDIT (editoru) |
+Q | QUIT | Návrat do monitoru |
+R | READ | Čteni souboru v INTEL-HEX-FORMÁTU |
+S | SUBSTITUTE | Záměna obsahu paměti ( ADR ) : " <-" posun zpět a výpis adresy ","vypíše adresu "‘X" vloží ASCII kód "X" |
+T | TRACE (WITH CONDITION) | Start TRACERU, parametry jako příkaz +G a respektuje se nastavená podmínka +C |
+U | UNDEFINED CODE | Zobrazení obsahu paměti v ASCII kódu: <L.ADR> , <H.ADR> 32 znaků na řádek |
+V | VERIFY | Deasssmbly (<ADR>) - zpětný symbolický překladač |
+W | WRITE | Zápis souboru v INTEL-HEX-FORMATU |
+X | EXAMINE REG. | Zobrazeni a výměna obsahu registru |
+Y | VERIFY PUNCH | Desseably, ale současně zapíše na kazetu zdrojovou část Deasseablovaného programu: ukončit <CR>a uzavřít soubor příkazem "K_C" (KASETTE CLOSE). |
Poznámka pro VERIFY a FIND:
Po znaku "," se přejde do režimu SUBSTITUTE:
Je možné udělat opravy, změnit adr. a po znaku<CR>se vrátit do původního povelu.
Součásti souboru "TOOL" je překladač absolutního assembleru. Překladač "MEMORY ASSEMBLER" umožňuje překlad zdrojového textu umístěného v paměti nebo na uživatelském zařízení (kazeta). Tento překladač je dvouprůchodový. Podrobný popis je uveden v kapitole Assembler, zde jsou uvedeny příkazy pro řízeni překladače.
Vyvolání:
+A ;vyvolání překladače (textového)
Dále soubor "TOOL" obsahuje jednořádkový, Jednoprůchodový překladač Assembleru, který lze použit pro opravy nebo pro jednoduché krátké programy v Assembleru.
Vyvolání:
+L= ADR<ADR l> ;vyvolání jednořádkového překladače Assembleru, ADR 1 volitelná poč. adresa
Po vyvolání se ukazatel na obrazovce nastaví do středu následujícího řádku a čeká na vstup řádku Assembleru. Po <CR> provede překlad řádku (strojový kód, předřadí před text), a čeká na vstup nového textu.
Ukončení překladu se provede zadáním prázdného řádku. ( pouze <CR> nebo END <CR>).
Povelem (+L) lze zapsat strojový kód na libovolnou adresu v operační paměti. Při chybě operátora se lze vrátit na původní adresu a opakovat řádek. Je možné použít symbolických návěstí, ale odkazy jsou možné jen dopředu tj. na nižší adresy.
příklad:
-START: MVI A,10H ;zdroj 7000 3E 10 START: MVI A,10H ;po provedení - ;očekává se vstup ... další řádky -<CR>... ukončeni překladu.
Memory Assembler
-R | "READER" File; čti zdrojový program z vnější paměti.Druhý průchod znovu vyžaduje vyhledání souboru. |
-X | Assembly - překlad zdroje uloženého v paměti ("Pedit" zdrojový program je uložen v paměti po edici). Pro MOD "X" musí být program zaveden editorem. |
-1 | První průchod se provede automaticky (MODE:R,X) |
-2 | Druhý průchod + výpis programu |
-P | Druhý průchod a pause (page) : zobrazí (listing) po 20 řádcích (a po<SP>se pokračuje). |
-S | Symbol table: Vypíše seznam symbolů s přiřazenými hodnotami |
-N | Nolist : Vypíše pouze chyby při druhém průchodu |
-<CR> | Návrat do TOOLU |
-^P | <CTRL P> pro klávesnici C259.11, <SHIFT A> pro klávesnici ANK-1 - připojení a odpojení tiskárny. (Možno nastavit listing na tiskárnu.) |
-Q | Návrat do TOOLU |
U | UNDEFINED | Nedefinovaný symbol nebo instrukce |
O | OPERAND ERROR | Chybný operand |
M | MULTIPLY DEFINITIONS | Vícenásobná definice |
L | LABEL ERROR | Chyba v návěští |
F | FULL SYMBOL TABLE | Plná tabulka symbolů |
W | WARNING | Neuložil se strojový kód, délka je > 2K BYTE ( X MODE) |
X | EXPRESSION ERROR | Chyba ve výrazu |
Editor slouží k přípravě, opravě a modifikaci textových souborů, které mohou být uloženy v paměti nebo na vnějším mediu, nebo jejich kombinace (doplnění souboru atd.). Podrobný návod na použití editoru je uveden v kapitole PEDIT. Program PEDIT lze vyvolat z Toolu příkazem +P. PEDIT lze. přímo vyvolat i z monitoru příkazem .P. Po ukončení edice a uložení programu na kazetu, lze program okamžitě přeložit (povel +A, mode X).
příklad :
+P ;skok do peditu
poznámka : Návrat z peditu do TOOLU se v peditu provede příkazem J<ESC><ESC>
Trasovací program "TRACER" umožňuje uživateli sledovat chování, chod programu a provádět v programu změny. Velmi zrychluje práci při ladění programu na systému, který není vybaven emulátorem. Způsob práce traceru se řídí podle nastavených podmínek (pro nastavení podmínky slouží příkaz +C), nastavením při spuštění traceru (viz. příkaz +T). Dále je možno i v průběhu trasování měnit podmínky trasování. Mezí trasovací příkaz lze zařadit i příkaz G s parametry (BREAK POINTY), kdy dojde k přerušení chodu programu na zadávaných bodech. Úseky mezi break pointy probíhají v reálném čase !!
+C - CONDITION nastavení podmínky, pro řízení trasování může být nastavena jen jedna podmínka
B.. | BRIEF: | výpis PC a instrukce |
C.. | CALL: | trasuje pouze hlavni program, podprogramy provádí v reálném čase |
L.. | LOOP: | trasuje pouze instrukce skoku, umožňuje sledovat program v programových smyčkách |
M.. | MASK: | trasováni zvolené instrukce s maskou: <N=1-3> .. počet bytů sledované instrukce <DATA1>...<DATAN>..zadaná instrukce <MASKA1>...<MASKAN>..zadaná maska (log.součin) Při shodě zadané instrukce a sledované s maskou vypíše zprávu o registru |
N.. | NULL: | zrušení podmínky (implicitní podmínka) |
R.. | REGISTER: | provede výpis při shodě dat v registru <JMÉNO REG.> ,<DATA>> |
S.. | STACK: | provede výpis při vybočení zásobníku z oblasti <L.ADR>,<H.ADR> |
W.. | WINDOW: | sleduje program v zadaném úseku a vypisuje: <L.ADR:,<H.ADR> |
Příklady:
+C: B ;BRIEF výpis PC a instrukcí +C: N ;zrušeni podmínky trasováni - základní nastavení +C: W=7000H=7100H ;trasováni v úseku 7000 až 7100 +C: M=2 ;2.bytová instrukce =00 =41 (RESP.='A') ;hledaná instrukce, která používá =00 =FF (MASKA) ;znak "A" tj. hex. 41,Vybrat všechny ;které v druhém byte obsahuje 41H. +C: RA=01 ;Je-li obsah registru a (akumulátoru) ;roven 01, potom se trasuje, v ostatních ;případech probíhá program v reálném čase.
Jednotlivé režimy trasováni
T..trasováni a prováděni I/O
T=<CR> ... pokračuj od adresy v PC (až po prvním přerušení od BREAK POINTU)
T=<SP>=<BREAK><CR> ... pokračuj od adresy v PC, ale od BREAK zobrazuj adresy
T=<ADR><CR> ... START.ADR=BREAK.ADR, trasuje se zobrazení registru již od udané adresy
T=<START.ADR>=<BREAK ADR1>=<BREAK ADR2>
Úsek mezi START.ADR a BREAK ADR se provádí v reálném čase!!! Trasuje se po dosazeni 1.adresy z BREAK POINTU.
Příklady výpisu trasování:
A) výpis registru
--P-7010 A-D0 F-56 B-01 C-00 D-00 E-00 H-70 L-4E S-4380 :FFFF @CD ZP 7010 CD8770 CALL DUMMY<SP> --P-7086 A-D0 F-56 B-01 C-00 D-00 E-00 H-70 L-4E S-437E :7313 @CD ZP 7087 3C DUMMY: INR A SP --P-7087 A-D1 F-86 B-01 C-00 D-00 E-00 H-70 L-4E S-437E :7313 @CD SP 7088 C9 RET<CR>
Vysvětlivky:
P | PC - program counter (programový čítač instrukcí) | ||||||||||||
A-L | registry A,B,C,D,E,H,L;A-akumulátor (střadač) F FLAG - příznaky S.Z.AC,P,CY S STACK POINTER - ukazatel zásobníku | ||||||||||||
: | data (slovo) uložena na vrcholu zásobníku(např. adresa návratu pro RET) | ||||||||||||
@ | obsah paměťového místa adresovaného dvojici reg. HL | ||||||||||||
SZPC | rozdekódování stavového slova | ||||||||||||
|
Symboly <SP>,<CR> jsou odpovědi pro trasování, po zadání <SP> se pokračuje v trasování, <CR> trasování ukončí.
Poznámka:
Trasovat nelze programy v EPROM, protože TRACER zapisuje do paměti doby přerušení a do paměti ROM nelze zapisovat, lze paměti ROM projit v reálném čase.
Na displeji se zobrazuje při trasování deasemblovaný program po řádcích (podle nastavených podmínek +C).
Vlastní řízení průběhu trasování
"SP"....další instrukce
"CR" ... .konec
,.......nová podmínka (viz "C")
"ETX"...přerušení trasování
Přiklad.
+C: B ;nastavení podmínky trasováni-výpis PC a instrukce +T=7000<CR> ;trasuje se od startu ... výpis instrukce (SP) ... další instrukce <,> ;požaduje se změna podmínky pro trasování =L ;zastavení na skokových instrukcích ...běh programu a zastavení (výpis skoku) ... ...<CR> ;ukončení trasování
Zpětný překladač umožňuje kontrolu strojového kódu tim, že převádí strojový kód do symbolického tvaru. Tak je možno při laděni sledovat zda došlo ke změně programu a podobně.
Pro zpětný překladač jsou dva příkazy TOOLU:
+V zobrazování na obrazovce
+Y zobrazování na obrazovce a uložení zdrojového textu na výstupní zařízení (kazetu).
Zpětný překladač pracuje po řádcích. Další řádek zobrazí po <SP>, klávesa <CR> ukonči překlad.
Příkazy V,Y mají jeden parametr adresu místa paměti odkud se provádí zpětný překlad.
Přiklad.
+V =7000 .... výpis řádky (adr,stroj.kód,zdrojový text) <SP>...další řádka <CR>...ukončeni překladu ...přechod do příkazu SUBTITUTE, kde lze provést zněny a po <CR>návrat zpět do zpětného překladače.
Poznámka.
Stejný postup platí i pro příkaz Y (se zápisem). Pozor zdrojový text se zapisuje do bufferu a na kazetu se zapíše až po naplněni bufferu a nebo po příkazu K_C (CLOSE). Příkaz "K_C" se musí vždy použít po skončení zpětného překladu tak, aby se ukončil výstupní soubor na kazetě. Jinak by při čteni došlo k chybě.
P O Z O R ! Při povelu (+B,+N) se zruší tabulka symbolů, pořízené při překladu.
Assembler a deassembler sdílí společnou tabulku symbolů, takže příkazem +L a EQU lze tabulku symbolu běhen deassemblování doplňovat.
Pomocné příkazy umožňují využití služeb monitoru, aniž by bylo nutné vracet se z TOOLU do monitoru a zpět. Dále pak rozšiřuje některé možnosti (např. +H.+F), některé příkazy mají jiný význam než v monitoru (I,O,F,Q).
Popis příkazů:
+B BEGIN - počáteční nastavení podmínek a nulování tabulky symbolu. (Jiné než .B v monitoru)
Přiklad. +B ;počát. nastaveni
+D zobrazeni paměti DUMP - výpis hex. paměti
Formát: + D =<XXXX><SP>=<YYYY><CR>
XXXX... dolní, YYYY... horní adresa paměti (viz monitor .D)
Přiklad.
+D =7000<SP>=700F<CR> 7000 41 42 43 44 45 46 47 48 ABCDEFGH 7008 50 51 52 53 00 00 00 00 PQRS....
+E END OF FILE ukončeni hexa pásky (viz monitor)
Formát: +E =<START.ADRESA><CR>
Přiklad.
+E =7000<CR>
+F FIND vyhledání zadané instrukce v paměti a možnost modifikace. (Pozor jiné než .F, kde se plní paměť)
Formát:
+F =<XXXX><SP>=<YYYY><SP> ;za dání rozsahu adres paměti pro hledání =N <SP> ;počet byte instr. =<DATA1><SP>-... =<DATA N><SP> ;N-1-3 hledaný obsah =<MASK1><SP>-... -<MASK N><SP> ;- " - MASKA
Program provede log. součin obsahu paměti s maskou a výsledek porovná se zadanými daty. Je-li rovnost, provede výpis adresy a zdrojového textu Instrukce. Takto je možno volit i třídu instrukci (např. IN.OUT) nebo najit instrukce pracující s adresou (viz příklady).
Přiklad.
Požaduje se nalezení všech instrukcí MOV B,D (oper. kód 42) v paměti od 7000 až 7100
+F =7000 =7100 =1 ;Jednobytová Instrukce =42 ;hledaný kód instrukce =FF ;maska testuj všechny bity v paměti
... výpis všech nalezených adres a zdrojů v rozsahu 7000 až 7100 (vypisuje po řádcích a čeká na SP pro pokračování v hledáni;
, -skok do SUBSTITUTE (lze provést změnu dat) a nebo <CR> ukončení hledání. Hledání třídy instrukcí IN (DB), OUT (D3). Liší
se pouze v jednom bitu.
+F =7000<SP> =8000<SP> ;rozsah =2<SP> ;2.bytová instrukce =DB<SP> =00<SP> ;třída instrukci =F7<SP> =00<SP> ;maska pro třídu 7042 DB16 IN 016H<SP> ;po <SP> pokračuj 7800 D35A OUT 05AH<CR> ;ukončeno
Vyhledání tříbytových instrukcí, které pracují s adresou 20H.
+F =7000<SP>=7050<SP> =3 <SP> =C3<SP> =00<SP> =20<SP> =00<SP> =FF<SP> =FF<SP>
+G GO - spuštěni programu (viz monitor .G)
Formát: +G =<START ADR><SP> -<BREAK 1><SP> -<BREAK 2><CR>
Přiklad.
+G =4403 ;RESTART PEDIT
+H hexadecimální součet a rozdíl. Pomocná funkce při opravách a změnách v programech.
Formát:
+H -<XX><SP>-<YY><CR> ;XX,YY HEXADECIMÁLNÍ ČÍSLA SSSS RRRR ;VÝSLEDEK SSSS-SOUČET,RRRR-ROZDÍL
Přiklad:
+H =11 =9 1A 8
+I INPUT - vstup ze žádaného portu (pozor jiný význam než v monitoru .I, kde se nastavuje a nuluje přiřazení USER-1,2). Zde se přímo provádí přečtení dat.
Formát: +I =XXXX <PORT><CR> ;vypíše nastavenou adresu obvykle 7000, pokud nebyl nastaven dřivé příkazy I,O
DD ...DATA Z PORTU
Přiklad.
+I =7000 10<CR> ;PORT 10 F2 ;VSTUPNÍ DATA
+J JUMP - skok na poslední zavadaný program (viz monitor příkaz .J)
+K Vyvolání systému MIKOS (viz MONITOR+MIKOS .K) Popis povelu MIKOSU je uveden v popisu monitoru.
+M MOVE - přesun úseku paměti (viz monitor .M)
Formát:
+M -<ZDROJ 1><SP> -<ZDROJ 2><SP> =<CIL 1><CR>
ZDROJ1-počáteční adresa, ZDROJ2-koncová adresa
CIL 1 - adresa místa přemístění
Přiklad.
+M =7000 =700F =F000<CR>
Přepiše obsah paměti od adresy 7000 až do 700F (včetně) na zónu počínaje adresou F000. (tj. do F00F).
+O OUTPUT- výstup na port (pozor jiný význam než v monitoru příkaz .O). Jinak platí jako pro přikaž +I ve smyslu výstupu na port.
Formát:
+O =<XXXX><SP><PORT><SP> =<DATA> <CR>
Příklad.
+0 =10 =FF ;VÝSTUP NA PORT 10 (PORT MÁ SPRÁVNOU ADRESU 10 PROTO <SP> , FF-DATA-ZAPNUT MAGNETOFON) .
+N NULL nulováni registru a podmínky. (Jiný význam než .N v monitoru). Stejně jako +B. Formát: +N
+Q QUIT - návrat do monitoru
Formát:
+Q
+R READ - čteni ve formátu INTEL-HEX ze vstupního zařízeni (viz monitor příkaz .R)
Formát:
+R =<OFFSET> <CR>
+S SUBSTITUTE - záměna obsahu paměti. (viz monitor .S)
Formát:
+S =XXXX YY- ... ;XXXX-ADRESA. YY-OBSAH lze změnit jak adresu, tak obsah. Změna se provede zápisem nového HEX. čísla, ponechání<SP> ukončení <CR>, návrat k adrese <,> po <<-> znak šipka se zobrazí nižší adresa a její obsah a po znaku apostrof (') lze zadat ASCII znak.
Přiklad.
+S = 7000 <SP> C3 - <SP> 20 - <10><SP> 21 - <<-> 7001 10-<CR>
Pozn. hodnotu C3 jsme neměnili (<SP>) hodnotu 20 jsme změnili na 10 a znakem šipka jsme provedli kontrolu zápisu, <CR> ukončeno.
+U UNDEFINED COOE - zobrazeni obsahu paměti v ASCII kódu (nemá ekvivalent v monitoru).
Formát:
+U =<ADR 1><SP>=<ADR2><CR> ... výpis v ASCII Jako text ...
+W WRITE - zápis programu ve formátu intel-hex na výstupní zařízeni (viz příkaz .W v monitoru) může být složen z více segmentů).
pro uzavření se musí použit přikaž +E.
Formát:
+W =<ADR 1><SP>=<ADR 2><SP>
Přiklad:
+W =4400 =5FFF<SP> ;ZÁPIS TOOLU - - - - - - - - - KOMUNIKACE S MIKOSEM - - - - - - - - - ZÁPIS NA KAZETU +E =4400 UKONČENÍ – ZÁPIS START ADRESY
+X EXAMINE REG. - zobrazeni a změna obsahu registru. (obdoba přikážu .X v monitoru, liší se tvarem výpisu). Zde se nevypisují názvy registru. Je možné také zadat po apostrofu (') znak ASCII.
Formát:
+X<OZNAČENÍ REG><SP>YY- ;YY ... OBSAH REG. +X<CR> ;CELKOVÝ VÝPIS VŠECH REG. BEZ MOŽNOSTI ZMĚNY
Pozor! při změně reg. příkazem .X v monitoru, se změny nepromítnou do reg. v TOOLU. Zněny se musí provádět přímo příkazem +X. (Totéž platí i naopak). Registry jsou uchovány při skoku do monitoru a při návratu jsou obnoveny.
absolutní překladač soubor programu "TOOL"
ASEMBLER Je strojově orientovaný jazyk, který umožňuje maximálně využívat možnosti mikropočítačového systému. Překladač zpracovává zdrojový text programu v ASEMBLERU, generuje absolutní strojový kód a ukládá ho do operační paměti.
ASEMBLER představuje prostředek pro symbolický zápis základních Instrukcí a umožňuje:
- mnemotechnický zápis typu operací,
- označovat symbolicky místa v paměti,
- používat v poli operandu výrazy, která se vyhodnocuji během překladu.
Dalšim typem příkazu ASEMBLERU jsou direktivy, které negenerují strojové instrukce, ale řídí chod překladu.
Direktivy umožňují:
- definovat jména proměnných, popř. jim přiřadit hodnotu,
- generovat konstanty a znakové řetězce,
- rezervovat místo v paměti,
- podmíněný překlad,
- řídit počitadlo adres,
- ukončit překlad.
Pro zápis v jazyce ASEMBLER platí pravidla, která se musí dodržovat.
Tvar zdrojové řádky:
Návěští: | Typ operace | Operand(y) | ;Komentář |
Jméno | |||
Příklad. | |||
START: | LXI | SP,TOPMEM | ;NASTAV STACK |
DESET | EQU | 10 | ;10-> DESET |
Zdrojový řádek je rozdělán na čtyři pole, z nichž některá nemusí být uvedena. Pole musí být oddělena oddělovači (mezera <SP>, horizontální tabulátor HT <TAB>, nebo znakem ";" středník před komentářem). Každá instrukce, direktiva musí celá na jednom řádku a je ukončena znakem <CR> (program vstupu z klávesnice doplní znak <LF> ).
Pokračovací řádky nejsou přípustně. Lze použit řádek pouze s komentářem, pro zlepšení čitelnosti programu. Maximální dálka řádku je 80 znaků.
Množina znaků:
- písmena A-Z,
- číslice 0-9,
- speciální znaky + - x / , : "¤" @ ? ' ; .
<SP> mezera
<CR> návrat vozu
<LF> řádkování
- jakýkoliv znak kódu ASCII se může vyskytnout v řetězcích uzavřených mezi apostrofy nebo v komentářách.
Omezovače, oddělovače:
<SP> | oddělaní polí |
, (čárka) | oddělovač operandu |
' ' (dvojice apostrofu) | omezovač znakových řetězců |
<CR> | omezovač zdrojové řádky |
; (středník) | uvádí pole komentářů |
: (dvojtečka) | omezovač návěstí |
<TAB> (tabulátor) | oddělení polí. |
Poznámka.
Mezer a tabulátorů může být v zájmu čitelnosti použito více (popř. i v kombinaci).
Pole návěstí.
Pole je nepovinné. Návěští je jméno, jehož hodnota představuje adresu místa v paměti, na které je instrukce nebo direktiva překládaná (hodnota počitadla adres). Návěští musí být jedinečné a nesmí se vyskytovat vícekrát. Je možno jedno místo označit více návěštími (návěští na prázdně řádce před instrukci).Návěští se může skládat z 1 - 5 znaků, přípustná jsou písmena, číslice a znaky "@" a "?". První znak musí být písmeno. Návěstí musí být ukončeno znakem ":" (dvojtečka). U direktiv EQU Je v poli návěsti jméno, které se neukončuje dvoj tečkou !!!!, ala oddělovačem poli (<SP>, <TAB>).
Pole typu operace.
V poli se uvidí mnemotechnický název instrukce nebo direktivy. Názvy jsou představovány zkratkami anglických názvů. Seznam instrukci a direktiv je uveden v příloze.
Pole operandu. Pole operandu identifikuje data, se kterými se bude provádět operace daná typem. Některé instrukce nevyžaduji žádná operandy (RET), Jiná jeden (INR B), nebo dva (MOV A,M), (první-cil,příjemce; druhý zdroj).
Pole komentářů.
Pole neplní žádnou funkci při překladu, a používá se pro zvýšení čitelnosti a orientace v programu.
Programy v Assembleru je nutné dobře komentovat, aby program byl dobře srozumitelný a čitelný všem uživatelům.
Typy operandu. V základních instrukcích se mohou vyskytovat 4 typy operandů, které lze zapsat různými způsoby.
A) Registr.
Jméno | Hodnota | Význam |
B | 0 | REG.B |
C | 1 | REG.C |
D | 2 | REG.D |
E | 3 | REG.E |
H | 4 | REG.H |
L | 5 | REG.L |
M | 6 | ODKAZ NA PAMĚT (dle HL) |
A | 7 | STŘADAČ (REG.A) |
Poznámka. V ASEM. TOOL lze používat pro zápis registru pouze jméno.
B) Dvojice registru.
Jméno | Význam |
B | REG. B,C |
D | REG. D,E |
H | REG. H,L |
PSW | stavové slovo (REG. A. REG. PSW) |
SP | ukazatel zásobníku |
Poznámky. V ASEM. TOOL lze pro zápis dvojice registrů používat pouze Jméno dvojice.
Hodnota dvojice závisí na typu instrukce a je buď jedno -- nebo dvoubitová, (viz základní instrukce mikroprocesoru 8080).
C) Přímý operand.
přímý operand lze zapsat všemi přípustnými způsoby, avšak je nutné brát v úvahu přípustný rozsah pro danou instrukci (1-2 byte).
- hexadecimální číslo | : 10H,0FFH |
- desítkové číslo | : 10,100D |
- binární číslo | : 101B |
- znaková konstanta | : 'A' |
- počitadlo adres | : ¤ |
- jméno s přiřazenou hodnotou | : |
- návěští |
Př. DESET EQU 10 MVI A,10 JMP KONEC KONEC: HLT - výraz : jednoduché kombinace výše uvedených způsobů spojených aritmet. nebo log. operátory. Přiklad.SKOK: JMP ¤+10 MVI A,DESET x2 LXI B,DESET AND 3 MVI D,DESET SHR 2
D) Adresa paměti.
Operand představující přímou adresu paměti (16-bitů), lze zapsat všemi způsoby (Jako přímý operand), mimo způsobu - znaková konstanta.
Poznámky.
Potřebujeme-li zapsat znak apostrof (') lze to provést následujícím způsobem:
APOS: MVI D,''' ;zápis apostrofu do REG.D
Znak "¤" značí okamžitý stav PC (počitadlo adres), s tím že ukazuje na 1.byte Instrukce.
U výrazu nejsou přípustné závorky a výraz se vyhodnocuje zleva do prava.
Přípustné operátory:
+ | součet |
- | rozdíl |
x | násobení |
/ | dělení (celočíselná) |
HIGH | horní byte slova (8-15 bit) |
LOV | dolní byte slova (0-7 bit (DEFAULT)) |
NOT | negace (unární operátor) |
AND | logický součin |
OR | logický součet |
XOR | exclusive OR (non ekvivalence) |
SHR | posun o N-bitů doprava (N...0-15) |
SHL | posun o N-bitů vlevo (N...0-15) |
Přiklad. X1+X2 X1 AND X2 X1 SHR 5 NOT X1
Operátory (+,-) nohou být unární ve významu znaménka čísla.
Direktivy ASEMBLERU slouží k řízeni překladače během překladu. Některé direktivy jako definice dat, rezervace místa se bezprostředně projeví v generovaném kódu.
Jiné direktivy jako definice jmen, direktivy pro podmíněný překlad, direktivy pro řízeni počitadla adres a spojováni modulu se ve vlastním generovaném kódu projevuji zprostředkovaně.
EQU.
Přiřazuje hodnotu výrazu uvedeného v poli operandu, jménu specifikovanému v poli návěští.
Tvar direktivy:
Jméno EQU Výraz
Přiklad.
MESIC EQU 4
Poznámka.
Jméno nesmí být ukončeno znakem ":" (dvojtečka), protože jde o přiřazení hodnoty do výrazu a ne definování návěští !!!
Definice konstant a rezervace místa v paměti.
Tyto direktivy umožňuji ukládat do generovaného kódu konstanty po slabikách nebo po slovech, nebo rezervuji zadaný počet slabik v paměti.
DB.
Ukládá specifikované výrazy nebo znaky řetězce do posloupnosti slabik počínaje adresou PC .
U řetězce může být libovolný počet znaků (omezeno dálkou řádku - 80 znaků), u výrazů je max. počet 10.
Přiklad.
DATA: DB 10H,0FH,10D, 4*2 ŘEŤEZ: DB 'ABECEDA'
DW.
Ukládá specifikované výrazy do posloupnosti slov. U výrazů je maximální počet 5.Při použití textového řetězce (1-2 znaky ASCII uzavřené mezi apostrofy) se znaky v rámci slova ukládají v opačném pořadí.
Je-li zadáno více znaků je hlášená chyba.
Příklad.
WORD: DW 278,0FF00H, 256*4, START RETE: DW 'AB'
Poznámka.
ASEMBLER TOOL nepřipouští kombinace výrazu a řetězců v jednom řádku.
DS.
Rezervuje zadaný počet slabik v paměti.
Přiklad.
POLE: DS 100H ;rezervuje 256 byte
Podmíněný překlad.
Technika podmíněného překladu umožňuje vytvářet z jednoho zdrojového textu různé varianty programu.
Direktivy IF, ELSE, ENDIF.
Tvar direktivy:
[NAV:] IF VÝRAZ [NAV:] ELSE [NAV:] ENDIF
Překladač vyhodnotí výraz u direktivy IF, a je-li nenulový pak provede všechny příkazy mezi direktivou IF a ELSE (nebo ENDIF, není-li ELSE použito), a je-li výraz nulový pak provede příkazy mezi ELSE a ENDIF.
Příkaz ELSE není povinný, podmíněný překlad musí být vždy ukončen příkazem ENDIF.
V direktivách ELSE a ENDIF nejsou operandy přípustné.
V ASEMBLERU TOOL je přípustná pouze jedna úroveň podmíněného překladu (příkazy IF nelze vkládat do sebe).
Přiklad.
DEBUG EQU 0 ;-1...LADÍCÍ VERZE ---------------------------- ---------------------------- IF DEBUG RAM EQU 4400H ELSE RAM EQU 0C000H ENDIF
V uvedeném příkladě se jménu RAM přiřadí hodnota C000H.
END.
Tato direktiva identifikuje konec zdrojového textu a ukončuje průchody překladačem.
Ve zdrojovém textu může být pouze jedna direktiva END a musí být posledním příkazem zdrojového textu.
Tvar:
[NAV:] END
ORG.
Direktiva ORG slouží k nastavení počitadla adres PC.
Tvar:
[NAV:] ORG VÝRAZ
Na základě direktivy ORG vloží překladač do počitadla adres hodnotu zadaného výrazu.
Přiklad.
ORG 7000H ;NASTAV PC NA 7000 HEXA
Poznámka.
Je-li u direktivy ORG uvedeno návěští, je mu přiřazena hodnota před zpracováním direktivy ORG.
V instrukcích se lze odkazovat na PC pomocí konstrukce ¤ operátor výraz (př. JMP¤+5 ;skok o 5 byte déle)
TITLE.
Direktiva slouží k pojmenování programu a musí být uvedena jako první příkaz zdrojového textu. Překladač ASEMBLERU tuto direktivu přijímá, ala déle nezpracovává.
Tvar:
TITLE 'NÁZEV'
Poznámka.
Doporučuje se tuto direktivu používat; pokud není uvedena musí zdrojový text začínat prázdnou řádkou!!!
Direktivy .LIST, .XLIST (podle CPM překladačů).
Tyto direktivy slouží k povoleni resp. potlačeni výpisu překládaného programu.
.LIST (implicitní povoleni výpisu) .XLIST ruší výpis listingu, vypisují se pouze chybové řádky. Direktiva platí až do nalezeni direktivy .LIST.
Překladač ASEMBLERU je součásti souboru programu "TOOL", který je dodáván na kazetě. Po natažení progresu "TOOL" systémem se provede příkazem monitoru skok do programu TOOL - příkaz "T". Program TOOL se ohlásí znakem "+" (plus). Spuštění ASEMBLERU se provede příkazem "A". překladač je dvouproudový (při čemž se první průchod provádí automaticky).
Po spuštění se překladač ohlásí na displeji a požaduje zadání modu.
Mod určuje, kde je uložen zdrojový text progresu.
-X Zdrojový program je uložen v paměti počítače po edici editorem "PEDIT". V tomto případě může být přeložený program max. 2K.
-R Zdrojový text je uložen na pásce. (READER) druhý průchod znovu vyžaduje vyhledání souboru, proto v zájmu zrychlení se doporučuje nahrát zdrojový text dvakrát za sebou. (A taká je to bezpečnostní kopie). Program se ukládá od adresy 7000H až do konce paměti. (Tudíž může být větší než 2K).
Rozdělení paměti a způsob zápisu přeloženého programu:
MOD X 6000H ----------------- | TAB. NÁVĚSTÍ | | | 7000H ----------------- | PŘELOŽENÝ | | PROGRAM | 7800H ----------------- | ZDROJ TEXT | | (BUF.PEDIT) | | | MOD R 6000H ----------------- | AB. NAVĚŠTÍ | 7000H ----------------- | PŘELOŽENÝ | | PROGRAM | | | | | FFFFH -----------------
Poznámka.
Povel +L uloží přeloženy program na libovolnou adresu.
Řízení průchodu (PASS):
Určuje prováděný průchod překladačem (1.průchod-vytvořeni tabulky symbolů, návěští; 2. průchod-vlastní překlad).
-1 | První průchod (provádí se automaticky při spuštění ASEMBLERU módy X,R) |
-2 | Druhý průchod (celý program) |
-P | Druhý průchod (postupně po stránkách) |
-Q | Návrat do TOOLU |
-S | Výpis tabulky symbolu (návěští) |
-N | NOLIST - výpis pouze chyb při druhém průchodu |
-<CR> | Návrat do TOOL |
-^P | Řízení tiskárny |
Poznámka.
Výpis na tiskárně se provede klíčem "SHIFT A" na klávesnici ANK-1
(CTRL P - C259.11). Klič<SHIFT A>při prvním stisknuti přípoji tiskárnu (pak se
provádí tisk pro kterýkoliv řídicí příkaz řízeni průchodu, klíč platí i pro TOOL), druhé stisknuti <SHIFT A> tiskárnu odpojí.
Hlášeni chyb překladačem.
kód chyby | význam | |
U | UNDEFINED | nedefinovaný symbol |
O | OPERAND ERROR | chybný operand |
M | MULTIPLY | vícenásobná definice |
L | LABEL ERROR | chyba v návěští |
F | FULL | plná tabulka symbolů |
W | WARNING | varováni - neuložil se strojový kód, délka > 2K (X-MOD) |
X | EXPRESSION ERROR | chyba ve výrazu |
Instrukce MOV přesune jeden byte ze zdrojového do cílového operandu. Zdrojový operand se nemění. Instrukce má tři formáty umožňující přesun registru do registru nebo do paměti, anebo z paměti do registru.
Formát:
MOV R,R DÉLKA 1 0 1 C C C Z Z Z MOV R.M MOV M,R
Cílový operand je uváděn na první posici, zdrojový na druhé. Symbol "M" označuje místo v paměti, které Je určeno obsahem registrové dvojice HL. není přípustný tvar MOV M,M.
Instrukce MVI přesune obsah druhé slabiky do cílového operandu, kterým je registr nebo paměťové místo.
Formát:
MVI R,08 DÉLKA 2 0 0 C C C 1 1 0 MVI M,D8 D D D D D D D D
Instrukce přesune přímý operand instrukce do cílového pole.
Přiklad.
MVI B,10H ;NAPLŇ REG HODNOTOU 10 HEX. MVI M,0FFH ;ULOŽ DO PAMĚTI HODNOTU FF HEX
Instrukce náplní střadač "A" obsahem paměťového místa jehož adresa je jako přímý operand této instrukce.
Formát:
LDA ADR DÉLKA 3 0 0 1 1 1 0 1 0 A A A A A A A A ...nižší A A A A A A A A ...vyšší
Přiklad.
LDA 200H ;ULOŽ DO STŘADAČE OBSAH ADRESY 200.
Instrukce LDAX naplní střadač obsahem paměti jehož adresa je v reg. B,C nebo D,E.
Formát:
LDAX RP DÉLKA 1 0 0 0 R 1 0 1 0 LDAX [B] LDAX [D]
Instrukce LHLD náplní registrový pár HL. přímým operandem instrukce. Používá se pro nastavení adresy HL pro adresování paměti "M".
Formát:
LHLD ADR DÉLKA 3 0 0 1 0 1 0 1 0 A A A A A A A A ... nižší A A A A A A A A ... vyšší
Instrukce naplní určený registrový pár nebo ukazatel zásobníku SP hodnotou přímého operandu. Používá se pro nastavení adresy paměťového místa před použitím nějaké výkonné instrukce.
Formát:
LXI RP,DATA DÉLKA 3 0 0 R R 0 0 0 1 D D D D D D D D ... nižší D D D D D D D D ... vyšší
Přiklad:
LXI H,NUM ;ulož ADR NUM MOV A,M ;NUM DO "A" LXI SP,STACK ;NASTAV ADR ZÁSOBNÍKU
Instrukce STA uloží obsah střádače do paměti na adresu obsaženou jako přímý operand instrukce.
Formát:
STA ADR DÉLKA 3 0 0 1 1 0 0 1 0 A A A A A A A A ... nižší A A A A A A A A ... vyšší
Instrukce STAX uloží obsah střádače do paměti na adresu určenou registrovým párem B,C nebo D,E.
Formát:
STAX RP DÉLKA 1 0 0 0 R 0 0 1 0 STAX [B] STAX [D]
Instrukce SHLD uloží do paměti obsah registrového páru HL, na adresu, která je jako přímý operand instrukce.
Formát:
SHLD ADR DÉLKA 3 0 0 1 0 0 0 1 0 A A A A A A A A ... nižší A A A A A A A A ... vyšší
Instrukce XCHG vymění vzájemně obsah registrových párů HL a DE. Používá se pro rychlou úschovu HL, nebo pro nové nastavení REG. HL při adresaci "M" (např. v cyklech).
Formát:
XCHG DÉLKA 1 1 1 1 0 1 0 1 1
Instrukce připočte ke střadači jednu slabiku dat, výsledek je uložen ve střadači. Slabika může bít v libovolném registru nebo v paměti "M" (adresovaná reg. párem HL.)
Ovlivňuje všechny příznaky.
<A>+<R> -> <A>
Formát:
ADD [R] DÉLKA 1 1 0 0 0 0 Z Z Z Z ADD [M]
Instrukce ADI připočte ke střadači přímý operand instrukce.
Ovlivňuje všechny příznaky.
<A>+DATA -> <A>
Formát:
ADI DATA DÉLKA 2 1 1 0 0 0 1 1 0 D D D D D D D D
Instrukce ADC připočte slabiku a obsah přenosu CY ke střadači.
Ovlivňuje všechny příznaky.
<A>+CY+<R> -> <A>
Formát:
ADC [R] DÉLKA 1 1 0 0 0 1 Z Z Z Z ADC [M]
Instrukce ACI připočte ke střadači obsah přenosu CY a přímý operand instrukce.
Ovlivňuje všechny příznaky.
<A> +CY+DATA -> <A>
Formát:
ACI DATA DÉLKA 2 1 1 0 0 1 1 1 0 D D D D D D D D
Instrukce SUB odečte od střadače jednu slabiku dat, která je uložena v libovolném registru nebo v paměti (M).
Instrukce provádí odečítání tak, ze odečítanou slabiku převede na dvojkový doplněk a ten připočte ke střadači. Příznakový bit CY se účastní odečítání jako prodloužení střadače k tzv. "vypůjčkám" -(BORROW). Po skočení operace se provede jeho negace, takže příznak přenosu po odečítání vyjadřuje znaménko výsledku.
Instrukce ovlivňuje všechny příznaky.
<A> - <R> -> <A>
Formát:
SUB [R] DÉLKA 1 1 0 0 1 0 Z Z Z SUB [M]
Instrukce SUI odečte od střadače přímý operand instrukce. Operace probíhá stejně jako u instrukce SUB.
Instrukce ovlivňuje všechny příznaky.
<A> - DATA -> <A>
Formát:
SUI DATA DÉLKA 2 1 1 0 1 0 1 1 0 D D D D D D D D
Instrukce SBB odečte od střadače slabiku dat a přenos CY. Slabika může být v libovolném registru nebo v paměti (M). Odečítaná hodnota se nejprve zvýší o hodnotu CY a výsledek se upraví na dvojkový doplněk, který se připočítá ke střadači.
Instrukce ovlivňuje všechny příznaky.
<A> - <R>-CY -> <A>
Formát:
SBB [R] DÉLKA 1 1 0 0 1 1 Z Z Z SBB [M]
Instrukce SBI odečte od střadače hodnotu přímého operandu a přenosu CY.
Instrukce ovlivňuje všechny příznaky.
<A> -DATA-CY -> <A>
Formát:
SBI DATA DÉLKA 2 1 1 0 1 1 1 1 0 D D D D D D D D
Poznámka.
Pomocné operace při sečítání a odečítání se provádějí v pracovních registrech procesoru, zdrojové operandy se nemění. Instrukce
SBI se výhodně používá pro odečítání číselných řetězců tvořených několika slabikami.
Instrukce INR připočítá "1" k určené slabice dat, která je uložena v libovolném registru nebo v paměti (M).
Instrukce ovlivňuje příznaky S,Z,AC,P. (CY se nemění).
<R> +1 -> <R>
Formát:
INR [R] DÉLKA 1 0 0 C C C 1 0 0 INR [M]
Poznámka.
Vzhledem k tomu, že nemění CY lze s výhodou použit pro řízení průchodu cyklem.
Instrukce INX zvýši o "1" obsah registrovaného páru, nebo ukazatel zásobníku.
Instrukce nemění žádné příznaky. S výhodou se používá pro zvyšování adres v cyklech.
<RP> +1 -> <RP>
Formát:
INX RP DÉLKA 1 0 0 R R 0 0 1 1
Pozor při manipulaci s ukazatelem zásobníku SP.
Instrukce DCR odečte "1" od obsahu určeného registru nebo paměti (M).
Hodnota přenosu "CY" se nemění, ovlivňuje ostatní příznaky (S,Z,AC,P).
<R> -1 -> <R>
Formát:
DCR [R] DÉLKA 1 0 0 C C C 1 0 1 DCR [M]
Instrukce DCX odečte "1" od obsahu určeného registrového páru nebo od ukazatele zásobníku.
Instrukce nemění příznaky. Pozor při manipulaci s ukazatelem zásobníku SP.
<RP> -1 -> <RP>
Formát:
DCX RP DÉLKA 1 0 0 R R 1 0 1 1
Instrukce DAA upraví 8-mi bitový obsah střadače tak, že v něm zformuje dvě čtyřbitové číslice (v kódu BCD).
Instrukce se používá při sečítání desítkových čísel. Je to jediná instrukce, které využívá příznak AC, proto se umisťuje bezprostředně za aritmetickou instrukci.
Instrukce má následující průběh:
- Je-li hodnota 4 nižších řádů střadače větší než 9, nebo je-li AC=1 připočte ke střadači hodnotu 6.
- Je-li hodnota 4 vyšších řádů střadače větší než 9, nebo Je-li CY=1 připočte ke střadači hodnotu 60H. (nebo 6 k vyšším řádům).
Instrukce využívá příznaku AC a CY, ovlivňuje všechny příznaky.
Formát:
DAA DÉLKA 1 0 0 1 0 0 1 1 1
Instrukce DAD připočte 16-ti bitovou hodnotu některého registrového páru nebo ukazatel zásobníku SP k registrovému páru HL. Je to jediná instrukce pro sečítání 16-ti bitového slova.
Ovlivňuje pouze nastavení přenosu CY při překročení rozsahu 16-ti bitového slova. Registrový pár HL plni funkci střadače.
<HL> + <RP> -> <HL>
Formát:
DAD RP DÉLKA 1 0 0 R R 1 0 0 1
Instrukce mikroprocesoru 8080 umožňuji pracovat s logickými funkcemi AND,OR,XOR. (Bitové operace).
AND | - (logický součin, logické i) výsledek 1 je-li na odpovídajících bitech 1. |
OR | - (logický součet, logické nebo) výsledek 1 Je-li na odpovídajících bitech alespoň jedna 1. |
XOR | - (exclusive OR nonekvivalence) výsledek 1 pouze tehdy jsou-li odpovídající bity od sebe různé. |
Instrukce provádí logickou funkci AND mezi střadačem a určenou slabikou dat, která může být v libovolném registru nebo v paměti.
Příznaky jsou nastaveny CY=0, AC=0 ostatní ovlivňuje.
<A> AND <R> -> <A> 0 -> CY, AC
Formát:
ANA [R] DÉLKA 1 1 0 1 0 0 Z Z Z ANA [M]
Instrukce provádí log. funkci AND mezi střadačem s přímým operandem instrukce. Výsledek ve střadači.
Příznaky: CY, AC=0 ostatní ovlivňuje.Formát:
ANI DATA DÉLKA 2 1 1 1 0 0 1 1 0 D D D D D D D D
Instrukce provádí logickou funkci OR mezi střadačem a určenou slabikou dat, která je v registru nebo v paměti.
Příznaky: CY, AC=0 ostatní ovlivňuje.
<A> OR <R> -> <A>
Formát:
ORA [R] DÉLKA 1 1 0 1 1 0 1 1 0 ORA [M]
Poznámka:
ORA A se používá pro nulování přenosu CY (střadač se nemění).
Instrukce provádí log. OR mezi střadačem a přímým operandem instrukce. Výsledek je ve střadači.
Příznaky: CY, AC=0 Ostatní ovlivňuje.
<A> OR DATA -> <A>
Formát:
ORI DATA DÉLKA 2 1 1 1 1 0 1 1 0 D D D D D D D D
Instrukce provádí logickou funkci XOR mezi střadačem a určenou slabikou dat, která je v registru nebo v paměti (M). Výsledek je uložen v paměti.
Příznaky: CY, AC=0 Ostatní ovlivňuje.
<A> XOR <R> -> <A>
Formát:
XRA [R] DÉLKA 1 1 0 1 0 1 Z Z Z XRA [M]
Instrukce provádí log. XOR mezi střadačem a přímým operandem instrukce. Výsledek je uložen ve střadači.
Příznaky: CY, AC=0 Ostatní ovlivňuje.
<A> XOR DATA -> <A>
Formát :
XRI DATA DÉLKA 2 1 1 1 0 1 1 1 0 D D D D D D D D
Instrukce nejdříve přepíše nejvyšší bit do CY a potom posune obsah celého střadače o jeden bit vlevo s kruhovým přenosem (nejvyšší bit do nejnižšího řádu).
Příznaky: Kromě CY další neovlivňuje.
A7 -> CY A6 -> A7 ... A0 -> A1 CY -> A0
Formát :
RLC DÉLKA 1 0 0 0 0 0 1 1 1
Instrukce nejdříve přepíše nejnižší bit do příznaku přenosu CY a pak obsah celého střadače posune o jeden bit vpravo s kruhovým přenosem.
Příznaky: Kromě CY další neovlivňuje.
A0 -> CY A1 -> A0 ... A7 -> A6 CY -> A7
Formát:
RRC DÉLKA 1 0 0 0 0 1 1 1 1
Instrukce posunu obsah střadače prodlouženého před nejvyšším bitem o přenos CY o jeden bit vlevo, (kruhový posun střadače i přes přenos).
Příznaky: Ovlivňuje pouze CY, ostatní zůstávají zachovány.
A7 -> CY A6 -> A7 ... A0 -> A1 CY (původní) -> A0
Formát:
RAL DÉLKA 1 0 0 0 1 0 1 1 1
Kruhový posun obsahu střadače (přes CY) o jeden bit vpravo.
Příznaky: Ovlivňuje pouze CY, ostatní zůstávají zachovány.
A0 -> CY A1 -> A0 ... A7 -> A6 CY (původní) -> A7
Formát:
RAR DÉLKA 1 0 0 0 1 1 1 1 1
Instrukce vytvoří jedničkový doplněk (negace) střadače, tj. zněni 0 na 1 a naopak.
Příznaky zůstávají zachovány.
Formát:
CMA DÉLKA 1 0 0 1 0 1 1 1 1
Instrukce provede negaci přenosu CY. (Změna 0 na 1 a naopak).
Kromě CY zůstávají ostatní příznaky zachovány.
Formát:
CMC DÉLKA 1 0 0 1 1 1 1 1 1
Instrukce nastaví hodnotu přenosu CY na jedničku.
Kromě CY=1, zůstávají ostatní příznaky zachovány.
1 -> CY
Formát:
STC DÉLKA 1 00110111
Instrukce porovná obsah určené slabiky s obsahem střadače a vyhodnotí výsledek porovnání tim, že nastaví hodnoty příznaku přenosu (CY) a příznak nuly (Z). Jsou-li hodnoty shodné pak nastaví příznak Z=1. Je-li hodnota střadače větší než hodnota určené slabiky nastaví se CY=0, Je-li menší pak CY=1.
Porovnání se vyhodnocuje bez ohledu na znaménko !
Vyhodnoceni se provádí ve vnitřních registrech a proto se obsahy porovnávaných registrů nemění. Porovnání se provede odečtením.
Příznaky: Instrukce ovlivňuje všechny příznaky. Při své funkci nastavuje CY a Z, ostatní ovlivňuje.
<A> ? <R> (<A>-<R>) ...A=R Z=1 A>R Z=0 CY=0 A<R Z=0 CY=1
Formát:
CMP [R] DÉLKA 1 1 0 1 1 1 Z Z Z CMP [M]
Instrukce provede porovnání obsahu střadače s přímým operandem instrukce. Způsob provedení a nastaveni příznaku je stejný jako u instrukce CMP.
Příznaky: CY a Z, ostatní ovlivňuje.<A> ? DATA (<A> - DATA ...A=DATA Z=1 A > DATA Z=0 CY=0 A < DATA Z=0 CY=1
Formát:
CPI DATA DÉLKA 2 1 1 1 1 1 1 1 0 D D D D D D D D
Instrukce pro větvení lze rozdělit do čtyř skupin:
Skoková instrukce JMP slouží k nepodmíněnému skoku podle adresy operandu. Dále je 8 instrukci podmíněného skoku dle hodnot příznaku PSW. Instrukce neovlivňují zásobník.
Instrukce CALL umožňuje přechod do podprogramu se zajištěním návratu (uchovává stav PC v zásobníku). Dále je 8 instrukcí podmíněného skoku do podprogramu podle stavu příznaku v PSW.
Instrukce RET zajišťuje návrat z podprogramu (vyvolaného některou z instrukcí skupiny CALL - nepodmíněný návrat a dalších 8 instrukcí pro podmíněný návrat dle stavu příznaku PSW.
Instrukce typu JMP a CALL používají pro podmíněné voláni tvar
JXX - pro typ JUMP ... XX zkratka podmínky
CXX - pro typ CALL
Typy podmínek:
C | - příznak přenosu | CY=1 | (byl přenos) |
NC | - příznak přenosu | CY=0 | (nebyl přenos) |
Z | - příznak nuly | Z=1 | (skok při nulovém střadači) |
NZ | - příznak nuly | Z=0 | (střadač různý od nuly) |
M | - příznak znaménka | S=1 | (skok při záporné hodnotě) |
P | - příznak znaménka | S=0 | (skok při kladné hodnotě) |
PE | - příznak parity | P=1 | (sudá parita) |
PO | - příznak parity | P=0 | (lichá parita) |
Každá instrukce typu JUMP dosadí do čítače adres (PC) hodnotu přímého operandu, u podmíněných v případě splněni podmínky. Není-li podmínka splněna pokračuje program následující instrukci za JUMP.
Instrukce nemění žádné příznaky.
Formát:
JUMP ADR DÉLKA 3 X X X X X X X X A A A A A A A A...nižší A A A A A A A A...vyšší
Nepodmíněný skok
JMP ADR 1 1 0 0 0 0 1 1
Podmíněné skoky
JC ADR CY=1 1 1 0 1 1 0 1 0 JNC ADR CY=0 1 1 0 1 0 0 1 0 JZ ADR Z=1 1 1 0 0 1 0 1 0 JNZ ADR Z=0 1 1 0 0 0 0 1 0 JM ADR S=1 1 1 1 1 1 0 1 0 JP ADR S=0 1 1 1 1 0 0 1 0 JPE ADR P=1 1 1 1 0 1 0 1 0 JPO ADR P=0 1 1 1 0 0 0 1 0
Instrukce pro volání podprogramu vyhodnotí podmínku volání (u podmíněných skoků) vyjádřenou pojmenováním instrukce, a je-li podmínka splněna provede:
Není-li podmínka splněna pokračuje následující instrukci za CALL. Každé instrukci typu CALL má odpovídat při ukončeni podprogramu některá z instrukcí typu RETURN, pro návrat do volajícího programu za instrukci CALL, aby se v zásobníku nevytvářely nadbytečné návratové adresy, které by mohly vést k nesprávné funkci programu.
Instrukce skupiny CALL sdružují vlastnosti instrukcí PUSH a JUMP. Instrukce nemění hodnotu žádného příznaku.
Formát:
CALL ADR DÉLKA 3 X X X X X X X X A A A A A A A A ...nižší A A A A A A A A ...vyšší
Nepodmíněné volání
CALL ADR 1 1 0 0 1 1 0 1
Podmíněné volání
CC ADR CY=1 1 1 0 1 1 1 0 0 CNC ADR CY=0 1 1 0 1 0 1 0 0 CZ ADR Z=1 1 1 0 0 1 1 0 0 CNZ ADR Z=0 1 1 0 0 0 1 0 0 CM ADR S=1 1 1 1 1 1 1 0 0 CP ADR S=0 1 1 1 1 0 1 0 0 CPE ADR P=1 1 1 1 0 1 1 0 0 CPO ADR P=0 1 1 1 0 0 1 0 0
Instrukce návratu z podprogramu nejdříve (u podmíněných návratů) vyhodnotí podmínku (dle označení instrukce) a je-li podmínka splněna dosadí do čítače adres (PC) obsah dvou slabik z vrcholu zásobníku a upraví ukazatel zásobníku (SP). Vzhledem k tomu, že při správné funkci byla při volání (CALL) uložena na vrchol zásobníku adresa za instrukci voláni, předá se řízeni zpět do volacího programu za tuto instrukci.
Není-li podmínka splněna, pokračuje program instrukci následující za RETURN.
Instrukce RETURN nemají žádný operand.
Formát:
RETURN DÉLKA 1 X X X X X X X X
Nepodmíněný návrat
RET 1 1 0 0 1 0 0 1
Podmíněný návrat
RC CY=1 1 1 0 1 1 0 0 0 RNC CY=0 1 1 0 1 0 0 0 0 RZ Z=1 1 1 0 0 1 0 0 0 RNZ Z=0 1 1 0 0 0 0 0 0 RM S=1 1 1 1 1 1 0 0 0 RP S=0 1 1 1 1 0 0 0 0 RPE P=1 1 1 1 0 1 0 0 0 RPO P=0 1 1 1 0 0 0 0 0
Instrukce RST - RESTART je zvláštní varianta nepodmíněné instrukce CALL pro přechod do podprogramu, určená hlavně pro zpracování přerušení.
Činnost instrukce:
Program obsluhy by měl končit instrukci ze skupiny RETURN. Pro program obsluhy je rezervováno 8 slabik, pokud tato dimenze nepostačuje, lze přejit skokem JUMP nebo dalším voláním podprogramu CALL do dalších obslužných programů.
V ASSEMBLERU je u instrukce RST uveden přímý operand v rozmezí 0-7, který se přesune do bitů 3-5 instrukce RST. Instrukce RST se v aplikačních programech používá zřídka, obvykle tuto instrukci vysílají periferijní zařízení žádající o obsluhu.
Formát:
RST KÓD DÉLKA 1 1 1 K K K 1 1 1
Instrukce vloží obsah registrového páru (HL) do čítače adres PC. V důsledku toho je provedeno větvení na adresu určenou registry HL.
Instrukce neovlivňuje žádné příznaky.
Formát:
PCHL DÉLKA 1 1 1 1 0 1 0 0 1
V systému 8080 je možno vytvořit a používat zásobník. Zásobník je vymezený souvislý úsek paměti RAM, který slouží k přechodnému ukládáni hodnot a adres při voláníi a návratu z podprogramu a přerušení. Zásobník pracuje metodou "LIFO" poslední dovnitř první ven.
Adresa vrcholu zásobníku se udržuje ve speciálním registru - ukazatel zásobníku SP (STACK POINTER).
Počáteční hodnota ukazatele se nazývá dno zásobníku a zásobník se plni směrem od vyšších adres k nižším a vyprazdňuje se opačně (směrem k vyšším adresám).
---------- dno zásobníku | | | | vyšší adresy | | | | nižší adresy | | SP -->| | ukazatel
Instrukce PUSH umístí na vrchol zásobníku obsah určeného registrového páru nebo obsah stavového slova PSW (střadač a registr příznaku - FLAG). Při tom upraví ukazatel zásobníku tak, aby ukazoval na nový vrchol zásobníku, tj. slabiku zásobníku s nejnižší adresou.
Instrukce neovlivňuje žádné příznaky.
Formát:
PUSH RP DÉLKA 1 1 1 R R 0 1 0 1 PUSH [B] PUSH [D] PUSH [H] PUSH [PSW]
Instrukce POP odebere z vrcholu zásobníku dvě slabiky dat a umístí je do registrového páru nebo do PSW. Při tom upraví ukazatel zásobníku (SP), tak aby ukazoval na nový vrchol. Instrukce POP neovlivňuje (kromě POP PSW) žádné příznaky.
V případě instrukce POP PSW obnovuje stav příznaků před uložením.
Formát:
POP RP DÉLKA 1 1 1 R R 0 0 0 1 POP [B] POP [D] POP [H] POP [PSW]
Instrukce SPHL přesune obsah registrového páru HL do ukazatele zásobníku SP.
Instrukce neovlivňuje žádná příznaky.
Formát:
SPHL DÉLKA 1 1 1 1 1 1 0 0 1
Instrukce XTHL vzájemně vymění obsah registrového páru HL s obsahem vrcholu zásobníku, který je adresován ukazatelem SP. Nejdříve vymění vrchol s reg. L a pak upraví ukazatel a vymění reg. H s novým vrcholem a obnoví původní ukazatel SP.
Instrukce neovlivňuje žádné příznaky.
Formát:
XTHL DÉLKA 1 1 1 1 0 0 0 1 1
Instrukce přečte 8 bitů z určeného portu a uloží je do střadače. Struktura a obsah údajů závisí na konkrétním periferním zařízeni, které informaci vyslalo. Instrukce neovlivňuje žádné příznaky.
Operandem instrukce je adresa portu, jehož prostřednictvím se uskutečňuje komunikace se zařízením. Adresa musí být v rozsahu 0-255 (0H - 0FFH).
Formát:
IN PORT DÉLKA 2 1 1 0 1 1 0 1 1 A A A A A A A A
Instrukce vyšle obsah střadače po datové sběrnici a číslo portu (operand instrukce) po adresní sběrnici. Zpracování obou informací musí v plném rozsahu zajistit příslušný port vnějšího zařízeni.
Instrukce neovlivňuje žádné příznaky.
Operandem instrukce je adresa portu, jehož prostřednictvím se uskutečňuje komunikace se zařízením, adresa musí být v rozsahu 0-255 (0H - 0FFH).
Formát:
OUT PORT DÉLKA 2 1 1 0 1 0 0 1 1 A A A A A A A A
Instrukce EI povoluje zpracování přerušení procesorem. Přerušení je povoleno již během provádění příští instrukce. Přerušení je povoleno až do okamžiku provedení instrukce zákazu přerušení DI. Uvolněni je zpožděno o jednu instrukci tak, aby byl umožněn návrat z podprogramu zpracovávající přerušení zpět, před novým přerušením. V programech využívající přerušení se přerušení zakazuje na nezbytně krátkou dobu, tak aby nedošlo ke ztrátě informace. Instrukce neovlivňuje žádné příznaky (kromě vnitřního registru přerušení, který není dostupný programu). instrukce nemá operand.
Formát:
EI DÉLKA 1 1 1 1 1 1 0 1 1
Instrukce DI zakazuje zpracování přerušení procesorem, až do provedení instrukce povolení přerušeni EI. Požadavek na přerušení zůstává zapamatován v procesoru.
Instrukce neovlivňuje žádné příznaky a nemá operand.
Formát:
DI DÉLKA 1 1 1 1 1 0 0 1 1
Instrukce HLT zastaví činnost procesoru. Další pokračování programu nastane pouze po vnějším podnětu tj. přerušení, před provedením instrukce HLT musí být povoleno přerušení. Je-li přerušení zakázáno nelze v programu pokračovat a nový start je možný signálem RESET, při čemž PC se nastaví na 0.
Instrukce neovlivňuje žádné příznaky a nemá operand.
Formát:
HLT DÉLKA 1 0 1 1 1 0 1 1 0
Instrukce neprovádí žádnou operaci. Používá se v časových smyčkách, kdy je rychlejší než např. MOV A,A.
Instrukce neovlivňuje žádná příznaky a nemá operand.
Formát:
NOP DÉLKA 1 0 0 0 0 0 0 0 0
Pro televizní displej - AND-1 ze souboru programu "TOOL"
Textový editor "PEDIT" (P-IDI EDITOR) je určen k pořizování zdrojových textových souborů pomoci klávesnice, se zobrazováním na televizním displeji (deska AND-1, televizní přijímač např. PLUTO). Délka řádku není v PEDITU omezena, při čemž na displeji se zobrazuje 40 znaků. Na obrazovce displeje lze zobrazit 24 řádků. Poslední spodní řádek slouží jako příkazový řádek (zadáváni povelů PEDITU).
Basic může pracovat s délkou řádku 132 znaků, délka řádku pro assembler je 80 znaků.
Celý editor PEDIT zabírá 2K paměti.
Textový editor pracuje ve dvou režimech:
1) Přímý - "VIDEO MODE",
kdy kód povelu je prvním znakem na příkazovém řádku, V tomto případě se povel okamžitě provede a zobrazí se modifikovaný text, bez
potvrzování příkazu dvěma znaky "ESC", který se na obrazovce zobrazuje jako "¤". Takto je možno např.
měnit polohu kurzoru na obrazovce atd.
2) Příkazový - "COMMAND MODE"
v tomto případě se povel okamžitě neprovádí a zobrazuje se v příkazovém řádku, jednotlivé povely se vzájemně oddělují znakem
"ESC" a povely se provedou až po zadání dvou znaků "ESC". Jedno-písmenové povely se nemusí oddělovat znakem
"ESC" např. 15L3CV¤¤. Do této doby je možno příkazy opravovat nebo rušit znakem "DEL" nebo
"<-" (šipka vlevo).
Příkazy, které jsou uvedeny v "přímém režimu - video modu", pracují i v příkazovém režimu je-li na prvním místě uveden počet opakování nebo jiný povel, např. "PŘÍMÝ POVEL":
*L provede okamžitě posun ukazovátka na nový řádek (dolů).
"Příkazový režim":
*3L <ESC><ESC> provede posun ukazovátka o tři řádky (směrem dolů) až po zadání dvou znaků "ESC".
*3LV <ESC><ESC> provede se posun a zobrazí se text
*TL <ESC><ESC> provede se až po potvrzení
Textový editor "PEDIT" pracuje s dynamickým "oknem" -vertikálně tak i horizontálně. Jak bylo uvedeno řádek může obsahovat např. 132 znaků, při čemž se zobrazuje "okno" 40-ti znaků na řádku, které se automaticky posunuje při posunu ukazovátka. Ve vertikálnim směru se "okno" automaticky posouvá a zobrazuje část editovaného textu. Na konci řádku se zobrazuje znak "^" Je-li řádek delší a není-li konec řádku zobrazen, potom se znak "^" nezobrazí. Takto je obsluha informována, že řádek pokračuje.
Poznámky:
V popisu příkazů je použit znak "%" ve významu volitelného čísla opakování (v intervalu -65535 až +65535)
Např. pro přikaž L je uvedeno %L, (viz výše uvedený přiklad). Uvede-li se v přikážu (tem, kde je uveden znak "%") znak "nerovná se" tj. "#", tak to znamená "všechno" - tj. jako by bylo žádáno největší kladné číslo 65535.
Např.: **K<ESC><ESC> zruš všechny řádky od ukazovátka až do konce.
Příkazy "CTRL znak" jsou pro klávesnici Consul 259.11.
Příkazy "SHIFT ZNAK" jsou pro membránovou klávesnici ANK-1.
Při tvorbě dlouhých tabulek lze také použit rezervace textu na obrazovce Q, (SHIFT Q) v rozmezí několika řádků a takto nechat trvale zobrazené záhlaví tabulky atd.
Rozděleni obrazovky ---------------------------- | | | | textová část ---->| | | | | zobrazovaný | | text | | | | | | | příkazová řádka ->| * | ----------------------------
Definice videomodu
Pro urychlení práce s editorem jsou některé povely prováděny v režimu videomodu s okamžitým zobrazením nového stavu textového bufferu. Videomod PEDITU plat i pro uvedené povely jen tehdy, je-li znak na prvním místě v příkazovém řádku. Potom není třeba potvrzovat povel dvakrát znakem ESCAPE. Povel se provede automaticky vřetně zobrazení modifikovaného textu. Videomod platí pro příkazy:Textový buffer OKNO (WINDOW) ---------------- ---------------------- B....->| | začátek textu | | | | | zobrazovaný text | | | | | | | | | | | | x...<CR> | ---------------- | x <-+ x <SP> | Y....->| | posun zobrazení | | ---------------- | x...L | V....->| kurzor | | | ---------------- ---------------------- X....->| | posun okna ---------------- x...nová poloha | | kurzoru | | | | +...stávající poloha | | | | Povely:<CR>,<SP>,L, <- Z....->---------------- konec textu
I Zobrazí šest řádků předchozího textu a vymaže obrazovku od místa kde bude vkládán nový text.
NOVÝ TEXT <ESC><ESC>
Nový text se ukončí dvakrát znakem <ESC>/ který není součástí vkládaného textu. Po ukončení vkládáni se zobrazí nový text
doplněný původním textem v okolí kurzoru.
Během vkládání nového textu lze znaky "DEL" a " "<-" rušit chybně zapsané znaky.
CTRL I Způsobí posuv ukazatele na další tabelační sloupec směrem vpravo. "CTRL I" odpovídá na klávesnici ANK-1 znak "SHIFT SP".
%A Přečte (z vnějšího zařízeni RI:)%-řádku a uloží je za text v textové vyrovnávací paměti
(BUFFER).
V případě prázdného bufferu se ukládá od začátku bufferu. Může se kombinovat s příkazem "W", který vyklízí buffer. (Před použitím PEDITU je vhodné použit příkazu monitoru .I=1 A .O=1 a tim nastavit podmínky, že není rozpracován žádný vstupní ani výstupní soubor). Příkaz není příkazem videomodu. ale je zde uveden, protože se často používá v kombinaci s příkazy pro vkládáni textu.
Je nožné těmito znaky (znaky jsou vybrány tak, aby bylo možné použit libovolnou klávesnici):
B begin - začátek textu v bufferu Y posuv okna (video stránky) CR posun o řádek <- V SP posun kurzoru o znak "V" zobraz okno L posuv o řádek +0..9 posuv o N řádku X posuv okna Z END – nastavení kurzoru za poslední text v bufferu
B BEGINNING OF TEXT BUFFER - nastaví pointer na začátku textu a zobrazí text.
Z END OF TEXT BUFFER - nastaví pointer za konec textu a zobrazí text.
F FIND - vyhledá a automaticky zobrazí hledaný text:
FPAVEL¤¤. vyhledá a označí text "PAVEL".
Kurzor se umístí za nalezený text.
Příkaz není příkazem videomodu (musí se ukončovat znaky <ESC>), používá se pro vyhledání textu pro následné vkládání resp.
opravu editovaného textu.
V (VIEW) - zobrazí text v okolí kurzoru. Tento povel se automaticky provádí po ukončení jiných povelů (např. S, F, CTRL D, ..). (video stránka)
X Zobrazí další text. (video Stránka)
Y Zobrazí předchozí text. (video stránka)
+% Automaticky přesune kurzor o 0-9 řádků směrem dolů (zde %=0-9 !).
+0 ...nastaví kurzor na začátek řádku!
L line - posun dolů o jsden řádek. CR | CR return - návrat nahoru o jeden řádek. <- - x - SP <-- posun doleva o jeden znak | <SP> posun dopravo o jeden znak L
CTRL K Výmaz řádku (pro klávesnici Consul), u klávesnice ANK-1, se nepoužívá videomod - %K<ESC><ESC> text se zruší od ukazatele do konce řádku.
CTRL D Výmaz znaku (pro Consul), u ANK-1 - %D<ESC><ESC>
S SUBSTITUTE - vyhledá původní text a po potvrzení znakem "Y" zamění text, jinak vyhledá další
text pro záměnu: vyhledává text od ukazatele do konce textu.
Přiklad. SPAVEL¤PETR¤¤.. vyhledá text "PAVEL" a po potvrzeni ho zamění za text "PETR".
Příkaz S není příkazem vidéomodu (musí se ukončovat znaky <ESC>). Často se používá v kombinaci s vldeomodem pro opravu
editovaného textu.
^S SUBSTITUTE ZNAK - zamění znak, na který ukazuje kurzor, novým znakem.
^SA .. není třeba potvrdit, v místě kurzoru se objeví znak "A",
FIND SUBSTITUTE ------------------------- ------------------------- | .... | | ... | | MOV A,Bx | | MOV A,B "N" | | .... | | ... | | MOV A,B | | MOV A,B "Y" | | | | | |*FMOV A.B¤¤ | |*SMOV A.B¤MVI A.10H¤¤ | ------------------------- ------------------------- x...nová poloha ukazatele záměna řádku bude:MVI A,10H Poznámka: Dotaz "Y" se zobrazí v příkazovém řádku.
%A Přečte %-řádků ze vstupního zařízení (RI:) a uloží je za text v textovém bufferu. (viz videomod).
%,<FTEXT%> FIND-vyhledá žádaný text od ukazatele a v případě nalezeni zobrazí hledaný text. Ukazatel
nastaví za hledaný text. (viz videomod) % - určuje počet hledaných textů (%-l se přeskočí).
Příklad: 5 FPAVEL najdi pátý výskyt textu PAVEL od ukazatele
S SUBSTITUTE - Záměna textu. Vyhledá původní text a zobrazí okolí vyhledaného textu. Po potvrzení znakem
"Y" provede záměnu textu.
Formát: SHLEDANÝ TEXT <ESC> NOVÝ TEXT <ESC> <ESC>
Platí stejné příkazy jako pro videomod, je-li na prvním místě příkazového řádku počet opakováni (jiný znak než povel videomodu).
Např.:
*L ... je příkaz videomodu - posun o řádek
*15L ... je příkaz v příkazovém režimu pro posun o 15 řádků.
%D Zruší % - znaků od ukazovátka. (Počat znaků může být kladný, pak se ruší doprava, při záporném počtu se ruší znaky vlevo).
%K Zruší % - řádků od ukazovátka. (Při kladném počtu se zruší řádky směrem ke konci bufferu, při záporném směrem k začátku.)
%W WRITE - zapíše %-řádků na vnější medium a zruší řádky v paměti!
%O OUTPUT - zapíše %-řádky na vnější medium a ponechá je v paměti.
E EXIT - zapíše celý text z operační paměti na vnější medium a ukonči výstupní soubor!! Text ponechá v paměti.
%G GET - označí a vypíše %-řádků, která se budou kopírovat na jiné místo textu.
U UNSAVE - přemístí %-řádků textu na místo, kde se nachází kurzor. Pokud je kurzor za místem označeným příkazem 'G' je možno opakovat samostatný přikaž 'V' vícekrát.
Povely v příkazovém režimu lze zadávat s udáním počtu opakováni, které může mít znaménko (+,-), popřípadě znak "#" tj. všechno (max. kladné číslo 65 535). U některých příkazů nelze použit záporné znaménko.
@ Nový start PEDITU a smazání textu. Pozor na nežádoucí výmaz celého textu. Na klávesnici ANK-1 "SHIFT I" není ekvivalentní znaku "CTRL I" (Consul), a právě označuje znak "@" - výmaz.
%H HEX - zobrazí %-řádků hexadecimálně, pro kontrolu vložených ASCII znaků.
J TOOL - skok do programu TOOL.
M MEMORY - vypíše počet volných bytů v bufferu pro text.
%O OUTPUT - vyděruje od pointru %.řádků, ale ponechá text v operační paměti.
%P PRINT - vytiskne od pointru %-řádků na tiskárnu.
R READ FROM NEXT FILE - nestaví podmínky pro čtení z nového souboru, povolí další čtení (R#A).
%A APPEND - přečte %-řádků z vnější pamětí a uloží je na konec textového bufferu.
X EXCHANGE DISPLAY - zobrazí novou stránku textu (slouží k prohlížení textu).
V VIEW - zobrazí novou stránku textu v okolí kurzoru (určeno ke kontrole provedených operací).
Y zobrazí předcházející stránku textu.
Q OUIT - návrat do monitoru.
%G GET - označí %-řádků v bufferu a vypíše je pro kontrolu. Vždy platí poslední nastaveni pointru.
U UNSAVE - na místo, kde je kurzor, překopíruje obsah bufferu, který byl označen povelem "G".
Pozor: Od posledního povelu "G" se nesmí provádět žádné příkazy, které mění počet znaků v bufferu.
(Např. I, D, CTRL D, CTRL I, S, ..).
Po každém příkazu "U" je potřeba znovu nastavit "G" pro další kopírování. Pokud se požaduje vloženi textu do
oblasti bufferu za kurzorem, pak není zapotřebí nové nastavení (příkaz G) Příkaz "U" ruší ostatní povely na tomtéž
příkazovém řádku.
%T TYPE OUT TEXT - zobrazí %-řádků textu. "OTT" odpovídá verifikaci řádku. Sádky se zobrazí celé. (nejsou omezeny oknem).
%L LINE - posuv o %-řádků.
%K KILL - vymazání %-řádků. (od kurzoru).
E EXIT - ukončeni editace, uloženi text. buff. na vnější paměť (pozor, oproti editoru INTEL EDIT nekopíruje zbytek programu z I/O zařízení. Je to podmíněno použitým vstup/výstupním zařízením - kazetovým magnetofonem, který nemůže být současně vstupním i výstupním zařízením.
%W WRITE - zápis %-řádků na vnější paměť.
N PUNCH 60 NULL CHARACTER - zápis 60 blanků.
%C CHARACTER - posuv pointru o %-znaků.
%D DELETE CHARACTER - zrušení %-znaků. Vždy se vymaže "CR" a "LF" naráz.
I INSERT - vloženi nového textu:
INOVÝ TEXT¤¤... Vloží "NOVÝ TEXT".
Ukončit dvojím stisknutím klávesy 'ESC' (ANK-1...LF).
F FIND - nalezeni řetězce:
FTEXT¤¤ .. nalezne a zobrazí "TEXT".
S SUBSTITUTE TEXT STRING - nahrazeni textových řetězců. Každou záměnu je potřeba potvrdit po "?"
v příkazovém řádku znakem "Y":
STEXT¤NOVÝ TEXTA¤¤..nalezne "TEXT" a po potvrzení ho nahradí "NOVÝ TEXT".
POZNÁMKY:
%<COMMAND STRING>¤¤COMMAND ITERATION - opakování přikázu uvnitř špičatých závorek do max. hloubky 1.
Přiklad:
5<FANNA¤OTT¤>¤¤ Hledej 5x výskyt textu -ANNA"a vypiš celý nalezený řádek (pátý) se jménem ANNA.
'DEL'NEBO ' -'DELETE CHARACTER Zrušení posledního znaku, v přímém režimu (videomodu) nebo v příkazovém režimu.
% Je parametr v rozsahu -65535 až 65535). (Mimo příkaz +, kde je rozsah 0 až 9).
# Lze Jedním znakem nahradit maximální kladné číslo (+65535).
Přiklad:
#A Přečti ze vstupního zařízení (kazetový magnetofon) všechny řádky a připoj za editovaný text.
CTRL C Přerušení provádění příkazu (u ANK-1 - "SHIFT X" )
Znak 'ESC' (resp. LF) se zobrazuje jako ¤.
"^" | ... konec řádku |
"\" | ... konec textu |
"-" | ... kurzor na místě mezery nebo tabulátoru |
Blikající znak | ... indikuje okamžitou polohu kurzoru. |
OVERFLOW | ... zaplněni textové paměti. |
"X" ILLEGAL | ... nedovolený znak na přikazován řádku. |
NO FIND "X" | ... nenašel od kurzoru po konec buffaru hledaný znak "X". |
STACK? | ... překročeni hloubky vnořeni opakovacího příkazu. |
BREAK | ... objeví-li se během psaní příkazového řádku za každým znakem znak "*", potom editor signalizuje, že zbývá málo paměti a je nutno povel ukončit a zapsat data na vnější medium. |
Chceme zapsat program v asembleru pro násobení dvou čísel bez znaménka, který má tvar:
NÁSOB: MVI B,0 ;0->" VÝSLEDEK MVI E,9 ;NASTAV POČÍT. KROKU NAS0: MOV A,C ;NÁSOBITEL RAR ;POSUN,CY-NEJNŽŠÍ BIT NÁSOBITELE DCR E ;SNIŽ POČÍTADLO JZ KONEC ;E=0-> KONEC MOV A,B JNC NAS1 ADD D ;PRICTI NÁSOBENEC K VÝSL. JE-LI CY=1 NAS1: RAR MOV B,A JMP NAS0 KONEC:
Pomoci editoru zapíšeme text:
*e¤¤ Chceme vynulovat textovou paměť *I Provede se přímý příkaz - smaže se obrazovka a v levém horním rohu je znak. Zapisujeme požadovaný text. <CR> Prázdný řádek - potřebuje překladač assemb. NEBO: TITLE 'DEMONSTRAČNÍ PRÍKLAD'<CR> ORG 7000H<CR> NÁSOB: MVI B,0 ;0->" VÝSLEDEK<CR> MVI E,9 ;NASTAV POČÍT. KROKU<CR> NAS0: MVI A,C ;NÁSOBITEL<CR> RAR ;POSUN,CY-NEJNŽŠÍ BIT NÁSOBITELE<CR> DCR E ;SNIŽ POČÍTADLO<CR> JZ KONEC ;E=0-> KANEC<CR> MOV A,B<CR> JNC NAS1<CR> MOV A,9<CR> ADD D ;PRICTI NÁSOBENEC K VÝSL. JE-LI CY=1<CR> NAS1: RAR<CR> MOV B,9<CR> JMP NAS0<CR> KONEC: NOP<CR> END<CR> <ESC> <ESC>
Na obrazovce bude text:
TITLE 'DEMONSTRAČNÍ PRÍKLAD'^ ORG 7000H^ NÁSOB: MVI B,0 ;0->" VÝSLEDEK^ MVI E,9 ;NASTAV POČÍT. KROKU^ NAS0: MVI A,C ;NÁSOBITEL^ RAR ;POSUN,CY-NEJNŽŠÍ BIT NÁSOBITELE^ DCR E ;SNIŽ POČÍTADLO^ JZ KONEC ;E=0-> KANEC^ MOV A,B^ JNC NAS1^ MOV A,9^ ADD D ;PRICTI NÁSOBENEC K VÝSL. JE-LI CY=1^ NAS1: RAR^ MOV B,A^ JMP NAS0^ KONEC: NOP^ END^
Povelem J¤¤...předáme řízení programu TOOL, kde povelen +A spustíme překladač a po upřesnění "MOOE-X" se provede překlad. Volbou "PASS=" např. "P" zobrazíme výpis programu. Po zjištění syntaktických chyb se vrátíme do programu TOOL a po povelu +P můžeme pokračovat v editaci.
Nyní jsme zjistili, že jsme udělali chybu u návěští NAS0: kde místo MOV, jsme napsali MVI a potřebujeme opravit text.
Máme několik možností k provedeni opravy:
Např. posun ukazovátka na začátek příkazem B - (začátek paměti) a příkazem L nastavit na řádek, pak posunout ukazatel vpravo na znak "M", zrušit dva znaky "VI" a vložit nové dva znaky pomoci povelu IOV <ESC><ESC> nebo opět nalézt písmeno "M" a pomoci povelu ^S zaměnit znaky "V" a "I" na "O" a "V".
Nejlépe je použit příkazy pro subtitute SMVI¤MOV¤¤ kdy se vyhledá první MVI a žádá potvrzení, odpovíme znakem "N" a program dále hledá MVI, opět odpovíme N a nyní nám zobrazí požadovaný řádek - odpovím znakem "Y" a na obrazovce se provede oprava textu.
Je možno použit i jiné způsoby, jako např. smazat chybný řádek a znovu ho napsat pomoci INSERT atd.
Podobně lze opravit poznámku např. *SKANEC¤KONEC¤
řádek MOV A,9 jsme napsali navíc a můžeme jej zrušit například příkazem
*FA,9¤OL¤KV¤¤ (ukázka složeného povelu)
nebo
*B *FA,9¤¤ *OL¤¤ *K¤¤
Nyní bude na obrazovce:
TITLE 'DEMONSTRAČNÍ PRÍKLAD'^ ORG 7000H^ NÁSOB: MVI B,0 ;0->" VÝSLEDEK^ MVI E,9 ;NASTAV POČÍT. KROKU^ NAS0: MOV A,C ;NASOBITEL^ RAR ;POSUN,CY-NEJNŽŠÍ BIT NÁSOBITELE^ DCR E ;SNIŽ POČÍTADLO^ JZ KONEC ;E=0-> KANEC^ MOV A,B^ JNC NAS1^ ADD D ;PRICTI NÁSOBENEC K VÝSL. JE-LI CY=1^ NAS1: RAR^ MOV B,A^ JMP NAS0^ KONEC: NOP^ END^
Uloženi textu na výstupní zařízení (kazetový magnetofon) provedeme příkazem "F". (práce s magnetofonem viz popis MIKOSU). Potom lze pomoci TOOLU program přeložit a ladit.
Příklady jednotlivých příkazů.
*ITEXT¤¤ | vložení textu TEXT za ukazatel (ukazatel - blikající znak. v případě mezery, tabulátoru blikající podtržení) |
*<SHIFT SP>A | vložení znaku A za ukazatel, přímý MOD-(SHIF SP-TAB). U klávesnice Consul <CTRL I>. |
*10A | Přečti 10 řádků z mag. a uložení na konec paměti |
*B | nastav ukazatele na začátek bufferu. |
*Z | nastav za poslední text |
*FDATA¤ | vyhledá od ukazatele text "DATA", pokud nalezne nastaví ukazatel za text (po potvrzeni znakem "Y"), jinak se hledá další textový řetězec. |
*V | zobrazí text v okolí ukazatele |
*X | zobraz další videostránku |
*Y | zobraz předcházející videostránku |
*+9 | posun kurzoru o 9 řádků dolů |
*+0 | nastav kurzor na začátek řádku |
*5K¤¤ | zruš 5 následujících řádků (od kurzoru) |
*-10K¤¤ | zruš předcházejících 10 řádků |
*#K¤¤ | zruš všechny řádky od ukazatele |
*3D¤¤ | zruš 3 znaky za ukazatelem |
*-50¤¤ | zruš 5 znaků před ukazatelem |
*SMOV¤MVI¤¤ | zaměň text "MOV" za "MVI" |
*^SX | zaměň znak, na který ukazuje kurzor znakem "X" |
*50W¤¤ | zapiš 50 řádků na vnější paměť, vynuluj buffer |
*30O¤¤ | zapiš 30 řádků na vnější paměť, ponech text |
*E¤¤ | ukončení editace, zápis na vnější paměť |
*15G¤¤ | označ 15 řádků od ukazatele (kopírování-viz U) |
*U¤¤ | ulož za ukazatel data označena příkazem G |
*@¤¤ | vynuluj buffer (nový start PEDITU) |
*10H¤¤ | zobraz 10 řádků hexadecimálně |
*J¤¤ | návrat do TOOLU po povelu +A je možno překládat program v ASEMBLERU |
*M¤¤ | vypíše počet volných byte pro text |
*50P¤¤ | vytiskne 50 řádků od pointru na tiskárně (pozor na nastavení pomoci ASSIGN v MONITORU a tiskárna musí být připojena a zapnuta). |
*B¤#P¤¤ | vytiskne vše |
*R¤¤ | nastav podmínky pro čtení z vnější paměti |
*R¤#A¤¤ | přečti celý text z vnější paměti |
*Q¤¤ | návrat do MONITORU, po příkazu .P lze pokračovat v editaci textu |
*10T¤¤ | zobraz 10 řádků textu |
*OTT¤¤ | verifikace celého řádku s ponecháním polohy kurzoru. |
*5FXRI¤¤ | vyhledej 5-tý výskyt textu "XRI" |
*3SXRI¤XRA¤¤ | 3x vyhledej a zaměň text XRI za XRA |
*5<FANA¤OTT¤>¤¤ | 5x vyhledej text ANA a proveď verifikaci |
.G4403<CR> | skok z MONITORU do PEDITU s uchováním textu, např. po RESET nebo po povelu .C v MONITORU doporučujeme potom celý text zapsat na výstupní medium. |
Tento návod je stručným popisem jazyka BASIC (BEGINNERS ALL-PURPOSE SYMBOLIC INSTRUCTION CODE) a není učebnicí jazyka. Uživateli, který je v programování ve vyšších programovacích jazycích úplný začátečník, doporučujeme nejprve prostudovat některou z učebnic jazyka BASIC.
Interpret Jazyka Basic poskytuje uživateli efektivní prostředky pro vytváření, údržbu, ladění a provozování programu interaktivním způsoben. Má takové vlastnosti, že uživatel prakticky vystačí se samotným Basicem. Funkce vytváření a editace zdrojových programů - jsou již obsaženy v samotném interpretu Basic.
Uživatel však může využit editor 'PEDIT' pro vytváření a zejména pro rozsáhlejší úpravy svého programu. Rovněž zavádění a ukládání programu na vnější paměti se provádí příkazy Basicu. Basic se proto hodí pro výuku a pro programátory, kteří potřebují rychle vyřešit daný problém a nechtějí se zdržovat pracným programováním v Assembleru, pořizováním a překladem zdrojového textu. Na druhé straně lze využit speciálních možnosti Basicu, např. jednoduchá práce s řetězci, možnost připojení uživatelských podprogramů v Assembleru, které nu umožní vytvářet efektivnější programy a doplňovat vlastnosti Basicu. Kromě běžného provádění programu lze v Basicu též pracovat v dialogovém režimu, kdy se příkazy z terminálu (klávesnice) okamžitě provádějí a tím lze používat Basic jako kalkulátoru. V programovém režimu jsou příkazy zapisovány s čísly řádku, v rozsahu od 1-9999. Příkazy, které nemají uvedeno číslo řádku se okamžitě provádějí - dialogový režim.
Délka příkazového řádku je až 132 znaků (včetně čísla řádku, mezer a tabulátoru). Na jeden řádek lze napsat i vice příkazů, vzájemně oddělených oddělovačem ":" - dvojtečka. Basic ex umožňuje práci a čísly reál - jednoduché délky (4-Byte) s přesností šesti dekadických číslic (sedmá číslice je již zaokrouhlována). Číslo může být v rozsahu od 1.70141E-38 až 1.70141E+38. Čísla se mohou zapisovat i jako celočíselná tj. bez desetinné tečky.
Čísla jsou ukládané jako "REAL" - v pohyblivé řadové čárce v normalizovaném exponenciálním tvaru (exponent, mantisa) na 2-slovech (4-BYTE).
Konstanty se mohou zapisovat v přímém tvaru tj. číslice a desetinná tečka (např. 28.75) nebo v exponenciálním tvaru: XE+NN, XE-NN,
kde X je číslo v přímém tvaru
 E označuje exponenciální tvar a značí "krát 10 na"
 +- znaménko exponentů ( + není povinné)
 NN maximálně dvoumístná hodnota exponentu (celé číslo) musí být vždy uveden i je-li nulový (0 =< NN <=38)
Lze používat indexovanou proměnnou (pole), až do 8-mi indexů (osmi rozměrné pole). S počtem indexů rychle narůstá spotřeba paměti. Basic umožňuje práci s řetězci - znakovými proměnnými a konstantami. Dále pak obsahuje standardní a uživatelské funkce jak pro práci s čísly tak i pro řetězce.
Součástí Baslcu ex jsou povely pro ovládáni interpretu, zavedení a úschovu programu, pořizováni výpisu programu, ale i příkaz pro editaci řádku, kdy je možno nastavit ukazatel na znak, doplňovat znaky vlevo od ukazatele a rušit znaky, příkaz pro rušeni úseku programu. Pro snazší odladění programu je součásti Basicu jednoduchý trasovací program, který na displeji vypisuje čísla prováděných řádků.
Při zápisu řádku na obrazovce televizního displeje (připojeného přes desku AND-1), se využívá dynamické "okno", které zobrazuje část okolí kurzoru (40 znaků), a v případě potřeby se automaticky posunuje do řádku (až do nalezení znaku CR - konec řádku) a nebo počátek řádku podle směru pohybu kurzoru ukazatele.
Basic ex vznikl rozšířením Basic mit, (který je např. implementován v systému COS 80 pro SAPI-80) a plně využívá základního programového vybavení systému SAPI-1, pod kterým je implementován. Navíc poskytuje uživateli tyto skupiny příkazů:
- pro práci s vněšji pamětí (kazetový magnetofon): FIND, OPEN, CLOSE, GET, PUT, nebo #P. #R (u příkazu INPUT a PRINT),
- pro práce s televizním displejem, kdy se plně využívá vlastnosti desky AND-1 a připojené klávesnice:
WND, CURS, BEEP, CLS, INKEY,
- pro práci s programy v Assembleru: CAL, PTR, HEX, CODE,
- umožňuje základy strukturovaného programování:
Příkazy: | IF/THEN/ELSE |
ON GOTO/ELSE | |
ON GOSUR/ELSE | |
REPEAT/UNTIL | |
WHILE | |
! - komentáře na řádku. |
- pro ladění programu – trasování: TRON, TROFF,
- pro editaci programu: EDIT, DEL,
- omezení: Příkazy IF/THEN/ELSE, WHTLE nebo REPEAT/UNTIL nelze "hnízdit" do více úrovní (tj. v příkazu nelze vyvolat
další příkaz podmíněného provádění. Např. v příkazu IF nelze vyvolat další IF, WHILE, REPEAT a musí být umístěny v jediném řádku
programu.
Interpret jazyka Basic pro systém SAPI-1 je k dispozici ve dvou verzích:
1) 7KB - standardní verze Basic ex
2) 9KB - rozšířená o grafiku Basic ex/G
Může pracovat pod monitorem v 4.0 s minimálně 16KB RAM-1, doporučuje se verze 48K, pro plné využiti všech možností interpretu jazyka Basic.
Povely: (commands) ovládáni a sledováni chodu programu (některé nelze uvádět v programu)
Instrukce: (statements) příkazy - činnosti, která vykonává program, nebo které lze vyvolat přímo
Funkce: (functions) numerické řetězové (výsledkem provedeni funkce je vždy jedno číslo nebo řetěz)
Operátory: logické, aritnetické, relační
Rezervovaná slova:
END FOR NEXT DATA INPUT DIM READ LET GOTO RUN IF GOSUB RETURN REM STOP OUT ON RESTORE WAIT POKE PRINT DEF CONT LIST CLEAR LOAD SAVE NEW TAB TO SPC FN THEN NOT STEP AND OR SGN INT ABS USR FRE INP POS SQR RND LOG EXP COS SIN TAN ATN PEEK VAL ASC STR CHR LEFT RIGHT MID
Rozdření:
CALL INKEY PTR HEX CLS EDIT LLIST BYE CODE XOR ELSE TRON TROFF DEL UNTIL WHILE REPEAT DO FIND GET OPEN PUT CLOSE BEEP MODE WND CURS
Grafické povely:
SCALE PLOT MOVE AXES LABEL FILI GRAPH DOT COPY FONT
Aritmetické operátory:
+......Plus, sečítání, spojování znakových řetězců -......Minus, odečítání x......Krát, násobení /......Lomeno, Dělení ^......Umocněno ()......Závorky
Relační operátory
>......Větší <......Menší =.....Shodný >=......Vetší nebo shodný =<......Shodný nebo menši <>......Neshodný, různý od
Relační operátory pracuji i s řetězcovými proměnnými a konstantami.
Přiklad: IF P¤ ="ANO" THEN 100
Logické operátory:
NOT......Logická inverze OR.......Logický součet ANO......Logický součin XOR......Logická neekvivalence
Vysvětlivky:
V dalším popisu budou použity k definováni typů proměnných, výrazů a čísel řádku symboly, které nemají vztah k jazyku
"Basic" a slouží jen ke zkráceni popisu. Jedná se o symboly: A, S¤, L, N.
Proměnné, řetězcové proměnné, konstanty.
Proměnná je symbolické označeni místa v paměti pro uložení dat (čisel, znakových řetězců), které se v průběhu zpracováni mohou měnit. Proměnné je označená jménem a veškeré odkazy se provádějí přes toto jméno. Jméno proměnné je složeno z písmen a číslic. Počet znaků není omezen, ale pro rozlišení proměnných se berou pouze první dva znaky. Prvním znakem jména musí být vždy písmeno. Proměnné jsou příkazy 'RUN' a 'CLEAR' nastavený na hodnotu 0, resp. řetězcové proměnné na "prázdné". Znak "¤" za jménem označuje řetězcovou proměnnou.Příklad. | ALFA, BETA. GAMA | ... jsou číselné proměnné |
ALFA1, ALFA2 | ... jsou totožné číselné proměnné (berou se 2.znaky- "AL") | |
1CIS | ... chybné jméno, nezačíná písmenem | |
CI-S | ... chybné, nepřípustný znak | |
ALFA, ALFA¤ | ... správně, 1. číselná proměnná, 2. řetězcová proměnná |
Číselné a řetězcové proměnné mohou mít stejné jméno a při tom jde o dvě různé proměnné. (Jsou vytvářeny dvě samostatné tabulky proměnných - jedna pro čitelné a druhá pro řetězcové, odlišení proměnných je dáno znakem "¤" pro řetězce).
Konstanty jsou čísla, nebo znakové literáty, které nemění svůj význam v průběhu provádění programu.
Pole.
Pole je uspořádaná množina proměnných (prvků pole), které jsou označeny společným jménem (jméno pole). Přistup k prvkům pole je přes jméno a "index", který je uveden v kulatých závorkách "( )", pole v Basicu ex může být až osmirozměrné. Pole začíná indexem "0" a konči indexem, který je uveden v deklaraci pole příkazem DIM. Pozor v příkazu DIM se uvádí horní hranice pole, tj. počet prvků pole je o jeden větší (viz prvek "0"). Pole může být použito i pro řetězcové proměnné.
Podprogramy.
Podprogram je posloupnost instrukci, která se vyvolává z programu (podprogramu) a po provedení se vrací do místa vyvolání podprogramu. Podprogram musí být ukončen příkazem "RETURN". Na rozdíl do jiných vyšších jazyků (např. FORTRAN, PASCAL, atd.), není podprogram v Basicu volán jménem, ale pouze číslem řádku, označující začátek podprogramu. Tudíž je možno volat týž program s různými efekty podle vyvoláni (skok na různá čísla řádku). Pozor při voláni podprogramu, aby volaný řádek nebyl vnitřním řádkem cyklu (skokem do cyklu, nikoliv přes vstup cyklu "FOR", takový skok může vést k nedefinovaným výsledkům.).Vyvolání podprogramu:
GOSUB XXXX XXXX...číslo řádku-vstupní bod podprogramu
ON PODMÍNKA GOSUB XXXX,YYYY ELSE ZZZZ
XXXX,YYYY,ZZZZ jsou čísla řádků vstupních bodů podprogramu v závislosti na hodnotě podmínky (přepínače). Příkaz "ELSE"
je volitelný a skok es provede v ostatních případech.
Zvláštním případem podprogramu jsou podprogramy v Assembleru, volané z Basicu. Assemblerovské podprogramy musí být ukončeny instrukci "RET". Vyvolání Assemblerovských podprogramů se provádí příkazy:
X=CALL (ADR) ...volání podprogramu na adrese ADR Y=USR (ADR) ...volání podprogramu na adrese ADR
Rozdíly mezi voláními viz popis komunikace s programem v Assembleru.
Pro přímý zápis assemblerovských programů lze použit příkazu
CODE ADR HEX DATA,...DATA
Podprogram může vyvolávat další podprogramy.
HLAVNÍ PROGRAM PODPROGRAM POOPROGRAM 1. 2. I I VOLÁNÍ GOSUB---> ! ! ! POKRAČOVÁNÍ <--- ! RETURN I I VOLÁNÍ GOSUB---> ! VOLÁNÍ GOSUB---> ! ! POKRAČOVÁNÍ 1. <-! RETURN ! ! POKRAČOVÁNÍ <----! RETURN I : KONEC PROGRAMU
Funkce.
Je posloupnost příkazu Basicu, a po jejich provedení se vrací funkční hodnota zpět. Výsledkem funkce musí být číselné nebo řetězcová proměnná.
Funkce se definuje příkazem
DEF FN*(P) kde * je jedno z písmen A-Z označující uživatelskou funkci, a "P" Je formální parametr funkce. Za definici následuje rozvoj funkce.
Přiklad.
DEF FNA (X)=SQR ( X^2+1)
Uživatelské funkce mohou být definovány jak pro číselné tak i pro řetězcové proměnné.
Funkce se volá uvedením jména funkce (s parametrem volání) na pravé straně přiřazovacího příkazu, všude tam kde lze použit proměnnou.
Kromě uživatelských funkci je v Basicu řada standardních funkci, jak pro práci s číselnými proměnnými (např. SIN, COS, EXP tak i pro práci s řetězcovými proměnnými (např. VAL, STR . CHAR ). Viz seznam funkcí.
Logické operace.
Logické operace NOT, OR, AND, XOR se provádějí s proměnnými, jejichž délka jsou 2 Byte (slovo). Číselné Proměnné, které jsou uloženy v pohyblivé řadové čárce se nejdříve převedou na celočíselné (do 2 Byte - 16 bitů), pokud to číslo dovolí (jinak je hlášená chyba), a pak se provede logická operace.
Typy konstant, proměnných a výrazů:
A .. Číselné konstanta, číselná proměnná nebo aritm. Výraz konstanta....O 12.3 12.5E+3 proměnná.....B MO N1 DX ALFA index. proměnná....BETA(l) GM(I,J) aritm.výraz.......A+R(J)*(C-R)+20-(B^(A/C)) Použitelný číselný rozsah: 1.70141F+38 - 1E-38 0 -1E-38 - -1.70141E+38 Dovolený rozsah indexu: 0..32767 (omezeno velikosti paměti) Spotřeba paměti: 4 byte/položku Výstupní formát: číslo<0.1 nebo > 999 999 se zobrazuje v exponeciálním tvaru, před a za číslem se tiskne mezera S ....řetěz (řetězovka konstanta), řetězové proměnná nebo řetězový výraz řetěz................"TEXT" "VAHA" "ALFA 3" řetěz proměnná.......A¤ K1¤ MN¤(3) B¤(I,J) OTP¤JMÉNO¤ řetěz výraz..........A¤+K1¤ JMÉNO¤+OTP¤ A¤+"TEXT"
Délku řetězových proměnných není nutno dimenzovat, nastavuje se dynamicky, je pouze nutno definovat celkový paměťový prostor pro řetězové proměnné povelem 'CLEAR X' (X počet byte).Není možno spojovat řetězy, jejichž celkové délka by byla větší než počet znaků rezervovaných povelem 'CLEAR'
Přikaž INPUT X¤ (vstup řetězcové proměnné) používá prostor rezervovaný příkazem 'CLEAR'
L.,..log. konstanta, log. proměnná, relace nebo log. Výraz log. konstanta.. 0(FALSE) -l(TRUE) log. proměnná.... proměnná nabývající hodnot 0 nebo -1 (NOT 0) relace............A=B DAT (I) >C ALFA<>BETA A(I,J) >10 log. výraz........A=B OR C=D ALFA BETA AND A (I)=C MOR N ANDO HEX(80) XOR ALFA výsledek relace nebo logického výrazu lze uložit do proměnné B=(X>Y) N…...číslo řádku, 0 až 9 999, celé číslo. P,P1,P2....PN parametr (argument)
Pole (indexované proměnné):
Pokud je šířka pole>10, musí být deklarované Instrukci DIM.
Na přiklad:
100 DIM A(5),B(2,4,4).A (2,2)
Pole mohou mít až 8 rozměrů, s počtem rozměrů však velmi rychle roste spotřeba paměti.
Užíváme-li pole s menším počtem prvků než 11, dosáhneme dimenzováním pole úspory paměti (interpret jinak automaticky dimenzuje DIM X(10),Y(10,10), tj. 44 byte pro jeden rozměr, ale již 484 pro dva rozměry!).
instrukce jazyka
CLEAR N Rezervování prostoru pro řetězcové proměnné (a vstupní příkaz INPUT). N - číslo větší než 15, je-11 menší hlásí se chyba. Horní rozsah je omezen volnou kapacitou paměti. Není-li příkaz CLEAR uveden je nastavena implicitní hodnota 256 po RUN.
DIM Definování šířky pole (počtu prvků pole-1) prvky jsou indexovány od 0 do horní hranice definovaná v příkazu DIM.
Přiklad.
DIM A(15),B(20.M),A¤(19)
Pole A jednorozměrné číselné pole pro 16 prvků (0-15), pole B dvourozměrné pole (první dimenze pro 21 prvků, druhá dynamická dle M), pole A jednorozměrné pro řetězcové proměnné, (jiné než pole A pro čísla).
DEF FNA(P)...DEF FNZ(P) Definice funkce jedné proměnné. Může být definováno DEF FNZ(P) až 26 funkci. Parametr se nemusí ve vlastní funkci vyskytovat. Je však nutno jej alespoň formálně v názvu funkce uvést
Příklad.
Definice uživatelských funkci, FNA,FNR,FNS, FNR. Funkce FNS je pro řetězcové proměnné (spojení řetězců C¤,O¤ a zakončení řetězce znakem tečka.
DEF FNA(P)-P^2+P+10 DEF FNB(N)=FNA(N)+N^2 DEF FNS(A¤)=C¤+D¤+"." (PI=3.1415926) DEF FNR(DEG)=PI/180*DEG
FNA(P).......FNZ(P) Volání dřivé definované funkce, funkci lze použít všude, kde se používá proměnná.
Přiklad.
RAD =FNR(ALFA)
REM..........umístění komentáře do zdrojového programu.
Přikaž REM uvádí komentář a všechny znaky za příkazem až do konce řádku jsou interpretovány jako poznámka. (Jsou uloženy do zdrojového tvaru programu, ale nemají žádný výkonný charakter).
Používají se pro zvýšení přehlednosti programu. V rámci úspory místa paměti se doporučuje používat krátká komentáře, popř. v případě nutnosti je z (odladěných) programů odstranit.
REM TOTO OE POZNAMKA<CR> REM* * * * * * * * * * * *<CR>
V prvním případě je zapsán text "TOTO JE POZNÁMKA" a ve druhém se zapíší hvězdičky. Poznámky REM se vypíší v LIST,LLIST,SAVE.
!............Úvodní symbol komentáře uvnitř řádku
Přiklad.
GOTO 100 !ZOBRAZ OBOÉLNÍK
Před "!" není třeba psát ':' a zbytek řádku je automaticky považován za poznámku.
LET P=A.....vyhodnotí výraz "A" (na pravé straně) a výsledek přiřadí proměnné "P" (na levé straně, přiřazovacího příkazu). Klíčové slovo "LET" není povinné!!
--------!-------- ! P=A ! Grafické vyjádření v blokových --------!-------- schématech.
Znak "=" v přiřazovacích příkazech nemá význam "rovné se" ale"přiřaď výraz na pravé straně proměnné na levé". (Proto se v některých vyšších programovacích jazycích používají rozdílné symboly pro "přiřaď" např. ALGOL PASCAL znaky ":=" , a "rovné se" tj. znak "=").
Přiklad.
LFT A=R*C+D/E LET B¤=A¤+B¤ A=B*C+D/EPříklady LET A=B*C+D/E a A=B*C+D/E jsou ve výsledku stejné.
A) Nepodmíněný skok.
Nepodmíněný skok přerušuje lineárně vzestupné provádění programu a pokračuje na jiném místě programu podle udaného čísla řádku příkazu.
GOTO N........Skok do jiné části programu.
Číslo "N" je číslo přikazovaného řádku, proměnná jako číslo řádku není povolena!
Přiklad. Skok na řádek s číslem 1000.
GOTO 1000
B) Podmíněný skok.
Podmíněný skok umožňuje větvení programu v závislosti na vyhodnocené podmínce. Je-li podmínka splněna, provádí se příkaz (GOTO.THEN), není-li splněna pak se provádí příkazy za ELSE nebo se provede další řádek (není-li ELSE použito).
IF L GOTO N... podmíněný skok na číslo řádku N
IF L THEN N ... totéž
IF L THEN PŘÍKAZ1:PŘÍKAZ2:PŘÍKAZ3... podmíněné provedení celého zbytku řádku je-li splněna podmínka L
Přiklad.
IF X>Y THEN A=4*B IF A=B THEN PRINT D : A=A+3 : GOTO 200
IF/THEN/ELSE Podmíněné větvení pro případ splnění (THEN) a nesplnění ELSE podmínky.
Přiklad.
IF A=B THEN A=1:PRINT "OK" ELSE A=0 : PRINT "BAD"
je-li podmínka splněna nastaví se hodnota A na 1 a vytiskne se text OK. V případě, že A#B pak A=0 a vytiskne se text BAD.
C) Přepínače
Větvení se provede podle hodnoty výrazu za klíčovým slovem ON.
je-li hodnota rovna n provede se skok na n-té číslo řádku, které je uvedeno v seznamu.
Při záporné hodnotě se hlásí chyba.
ON A GOTO SEZNAM Skok na číslo řádku dle seznamu (skok) ON A GOSUB SEZNAM Skok do podprogramu s číslem řádku (dle seznamu)
U přepínače lze použit klíčové slovo "ELSE", skok pro ostatní případy (tj. je-li číslo mimo rozsah - počet prvků seznamu).
----- ! I ! ----- ! ! ON I GOTO P1,P2,...PN,ELSE PM ! ON I GOSUB P1.P2,. ..PN,ELSE PM ------------------------------------------------------------ 1! 2! . . . N! ELSE ! ------ ------ -------------------- ! P1 ! ! P2 ! ! PN ! ! PM ! ------ ------ ------ ------
Příklady.
ON X+1 GOTO 1010,1050.1200 ON Y GOSUB 2000,2010,2020 ON Z GOSUB 100,200,300 ELSE 500
D) Příkazy cyklu.
Příkazy FOR-NEXT.
Skupina příkazu uzavřená mezi počátek cyklu (FOR) a konec cyklu (NEXT) se opakuje tak dlouho dokud není dosažena horní podmínka. V každém běhu cyklu se počáteční podmínka zvyšuje o krok.
Formát:
FOR P=POČÁTEK TO HORNÍ (IMPLICITNÍ KROK-1) FOR P=POČÁTEK TO HORNÍ STEP KROK
"P"-řídící proměnná cyklu
POČÁTEK - výchozí hodnota řídící proměnná
HORNÍ - koncová hodnota řídící proměnná, po jejím dosažení se cykl ukončí
KROK - přírůstek řídící proměnné, v každém průchodu cyklem.
Přiklad.
FOR I=1 TO 20 FOR ALFA=1 TO MAX STEP 2 FOR B=10 TO -2 STEP -1 FOR A=2 X TO M(I)
Řídící proměnná cyklu je dostupná i mimo cykl a nabude hodnoty po ukončení cyklu HORNÍ + 1 (resp. HORNÍ+KROK , Je-li uveden "STEP").
Ukončení cyklu-NEXT.
NEXT P....... Konec smyčky, název proměnná není povinný pro jednoduchý cykl
NEXT SEZNAM...konec 2 a více smyček
Příklad.
FOR I=l TO 10 FOR J=1 TO 5 FOR K=2 TO 20 STEP 2 TĚLO CYKLU NEXT K,J,I
Cykl FOR/NEXT dovoluje "hnízdit" uvnitř smyčky další cykly, které se nesmí překrývat tj. vnitřní cykl nesmí přecházet za vnější.
Přiklad.
FOR I=1 TO M:FOR J=1 TO N TĚLO CYKLU ... Dobře NEXT J: ZBYTEK VNĚJŠÍHO CYKLU :NEXT I FOR I=1 TO M:FOR J=1 TO N TĚLO CYKLU ... Chybně NEXT I: ZBYTEK VNITŘNÍHO CYKLU :NEXT J
Příkaz WHILE - příkaz cyklu
Dokud je splněna podmínka (za WHILE) pak prováděj příkazy na řádku. Není-li skoč na další řádek.
FORMÁT:
WHILE PODMÍNKA DO PŘÍKAZY
Přiklad.
While K<10 do print "I" :I=I+1:.....:B=B*0.25
Příkaz 'WHILE' se provádí pokud je splněna podmínka a lze jej užít jen v rozsahu 1 řádku.
Příkaz REPEAT - příkaz cyklu
Opakuj příkazy na řádku dokud není splněna podmínka uvedená klíčovým sloven "UNTIL". Příkaz until je součástí posledního příkazu a neodděluje se ":". Příkaz platí v rozsahu jednoho řádku, po splnění podmínky se pokračuje na dalším řádku.
Formát:
REPEAT PŘÍKAZY UNTIL PODMINKA.
Příklad.
REPEAT PRINT I:...:I=I+3 UNTIL I=30
Příkaz se provádí pokud není splněna podmínka a platí v rozsahu 1 řádku. (místo REPEAT může být použito i 'DO')
DO I=....UNTIL A>3
GOSUB N........vyvolání podprogramu
Podprogram se volá číslem řádku (nikoliv jménem podprogramu jako v jiných jazycích např. FORTRAN. PASCAL atd.). Podprogram musí
být ukončen návratovým příkazovým slovem "RETURN".
RETURN..........návrat z podprogramu
END.............ukončení programu, zobrazí se 'OK'
(nepovinné), pokud za hlavním programem následují podprogramy, musí se vždy hlavní program ukončit příkazem "END".
STOP............přerušení chodu programu, ohlásí se 'BREAK IN N'
kde "N" je číslo řádku přikazu STOP a lze pokračovat příkazem 'CONT' (od dalšího řádku programu). Používá se převážné
pro ladění programu.
Příkazy DATA,READ a RESTORE slouží k přiřazení konstant proměnným. Příkazem DATA se deklarují konstanty pro příkaz READ, který provádí přiřazení. Příkaz RESTORE umožňuje opětovné použití konstant pro další přiřazení, příkaz READ posunuje ukazatel konstant na další konstantu.
+----------RESTORE-----------+ ! ! ----+----------------------------+---------------- ! DATA1 ! DATA2 ! ! DATA N ! DATA N+1 ! ----+-------+--------------------+--------+------- ! ! ! ! READ 1 READ 2 READ N UKAZATEL
Na začátku je ukazatel nastaven na 1. konstantu, po N-tém READ ukazuje na položku N+1, RESTORE umožní vrátit (resp. nastavit) ukazatel.
READ 'SEZNAM'...Přidělí hodnoty ze seznamu 'DATA' seznamu proměnných. Nahrazuje řadu přiřazovacích příkazů typu "LET"
READ A(1), A(2), A(3),X, B¤ READ ALFA, BETA READ Z¤
DATA............seznam konstant pro příkaz "READ" .
DATA 10, 20, 30, 3.15 DATA 3.5E-3, 7.1E-3 DATA "JMÉNO", 12.5, 3.2, 1000
řetězové konstanty nemusí být v uvozovkách.
RESTORE.........návrat ukazatele v seznamu DATA na počátek
RESTORE N.......návrat ukazatele v seznamu data na řádek "N"
Přiklad.
10 DATA 10,10,5 20 DATA 100,200,300 30 DATA "EMIL","PETR", "MILAN"
Pak příkaz RESTORE (bez čísla) provede nastavení pro READ na první seznam dat tj. na číslo řádku 10. Příkaz RESTORE 30...nastaví seznam pro READ na čtení řetězců na řádku 30.
A) Čtení z klávesnice displeje (console).
Pro čtení dat zadávaných z klávesnice displeje slouží příkazy INPUT a INKEY. Příkaz INPUT umožňuje i výpis textu na obrazovce displeje (kombinace příkazu PRINT a vstupu dat), který umožní v programu vypisovat texty o požadavcích na data, zjednodušuje programování. Požadavek na data příkazem "INPUT" je na obrazovce displeje indikován znakem "?" - otazník. V případě, že v příkazu INPUT je uveden seznam proměnných a na vstupu bylo zadáno méně vstupních dat, na obrazovce se zobrazí dva otazníky, které signalizuji, že příkaz INPUT požaduje další data.
V případě, že bylo zadáno více dat než je v seznamu proměnných, pak se nadbytečná data ignoruji (ztratí se). Data na vstupu se od sebe odděluji oddělovačem "," čárka. Nulová položka se musí zadávat číslici "0", nestačí pouhé domáčknutí tlačítka CR, které vyvolá zastavení provádění programu, V programu lze pokračovat zadáním příkazu "CONT".
B) Čtení dat ze souboru-READER.
Při čtení dat ze souborově orientovaného zařízeni (např. kazetový magnetofon) je nutno dodržet postup pro práci se soubory. Nejdříve je nutno soubor otevřít pro čteni dat, tj. nalézt soubor na pásce, pomocí OS MIKOS. Proto je v BASICU EX zaveden příkaz FIND.
Po otevření souboru je možno používat příkazy pro čtení dat "INPUT #R" nebo GET. Příkaz INPUT #R se používá pro data zapsané příkazem "PRINT #P", příkaz GET pro data zapsané příkazem PUT. Rozdíl mezi příkazy INPUT a GET je v tom, že GET čte po slabikách (byte), a přikaž INPUT přečte znakové data do oddělovače, a je-li to číslo, provede konverzi do vnitřního tvaru.
Poznámka.Přiklad.
A=GET: IF A=26 THEN 100 !konec
V textu jsou použity zkratky pro označováni zařízení podle konvencí monitoru (viz popis monitoru a obslužných rutin).
CI: CONSOLE INPUT CO: CONSOLE OUTPUT RI: READER INPUT PO: PUNCH OUTPUT LO: LIST OUTPUT
Pro rozlišení zařízení v příkazech INPUT a PRINT se používá označení #R pro READER, #P pro PUNCH a #L pro LIST.
Vstup resp, výstup se provádí na zařízení přiřazeném v monitoru příkazem ASSIGN - (.A).
-------- ! FIND ! ...otevři soubor -------- /\ / \ / \ ------- ---------- ! GET ! !INPUT #R! ...čtení dat ------- ---------- \ / \ / \/ -------- ! FIND ! ...uzavření souboru pro vstup -------- a otevření nového souboru !
Formát:
INPUT 'SEZNAM'....hodnoty nebo řetězy z konzoly se přidělí proměnným. INPUT "TEXT";SEZNAM... totéž jako předchozí, navíc se otiskne text INPUT#R "SEZNAM"....čtení z :RI: místo :CI: (tj. z pásky)
Příklady.
INPUT A ,čti data pro proměnnou A INPUT ALFA,BETA,GAMA ,čti více proměnných INPUT Z¤,K(I),X INPUT "NAPIŠ JMÉNO";JM; NAPIŠ NA DISPLEJI TEXT "NAPIŠ JMÉNO" a přečti znakový řetězec INPUT #R A¤.B¤,X ,vstup dvou řetězců a čísla z RI: (kazeta)
INKEY-.............předá hodnotu ASCII kódu právě otisknuté klávesy během provádění programu, není-li stisknuta žádná klávese potom je hodnota INKEY=0
Přiklad.IF INKEY> 0 THEN 100
Přiklad čekání na stisknutí klávesy na klávesnici a pak pokračováni v programu.
50 IF INKEY>0 THEN 60 ELSE 50
FIND..............nastaví příznak pro otevření nového souboru.
Operační systém automaticky při čtení znaku (např. z kazety) provede vyhledání souboru a přečte 1.byte.
FIND lze použit i k ukončení čtení ze vstupního souboru.
GET...............čte byte ze vstupního média "RI" (snímač pásky nebo kazeta podle hodnoty IOBYTE.
10 FIND! otevři soubor 20 A=GET ! l.čtení - vyhledá soubor a čte byte 22 A1=GET ! Čte 2.byte 30 IF A=0 THEN 100 ELSE INPUT #R B¤ 100 FIND! Jiný soubor nebo uzavření
A) výstup na displej
Pro výstup na displej se používá příkaz "PRINT", nebo lze použit zkráceného zápisu pro PRINT tj. znak "?" otazník, který interpret Basicu provede na klíčové slovo PRINT. Pro výstup na obrazovku displeje je možno využit i specielních funkci pro řízení displeje (např. WND,CLS,MODE,CURS).
B) výstup na tiskárnu (LIST).
Pro tiskový výstup (na zařízení LIST) se používá příkazu PRINT #L. Pro formátování tisku lze použit speciální funkce TAB a SPC, (tyto lze použit i pro výstup na displej).
C) Souborově orientovaný výstup.
je-li zařízení PUNCH souborově orientováno (např. kazetový magnetofon) musí se dodržet posloupnost pro výstup do souboru. Nejdříve se musí soubor otevřít pro výstup (musí se vyhledat konec souboru, tj. místo pro uložení nového souboru), pod řízením MIKOSU.
Po otevření souboru je možno do souboru zapisovat data příkazy PRINT #P nebo PUT. Data se zapisují do bufferu a po naplnění bufferu, nebo při uzavřeni souboru se přepíší do souboru. Po ukončení zápisu dat se vždy musí soubor ukončit příkazem CLOSE, jinak může dojit ke ztrátě dat.
V Jednom okamžiku může být otevřen pouze jeden soubor pro výstup.
-------- ! OPEN ! ...otevření výstupního souboru -------- /\ / \ / \ ------- ---------- ! PUT ! !PRINT #P! ...zápis dat ------- ---------- \ / \ / \/ --------- ! CLOSE ! ...uzavření souboru --------- !
Systém MIKOS má dva nezávislé buffery. Jeden pro vstupní soubor a druhý pro výstupní. Před vyvolání basicu je nutné provést příkazy monitoru I=1,O=1 (pokud budeme pracovat se soubory na kazetovém magnetofonu) nebo příkaz .C monitoru.
OPEN.......Nastav příznak pro operační systém pro otevření souboru k zápisu.
Na kazetě může být otevřen soubor pro čtení nebo pro zápis.
PUT A......zápis byte na periferii typu "PO" "A"=0...255, zápis hodnoty 26 způsobí uzavření souboru
PUT HEX (1A)...uzavřeni souboru.
Při zápisu 1.byts je třeba otevřít soubor
CLOSE......uzavři výstupní soubor
10 OPEN! otevři soubor pro zápis 11 PUT A! a zápis 1.byts 12 PUT B 13 PRINT#P "DALŠÍ DATA.. ",R ,X,Y 100 CLOSE ! uzavření souboru 110 PRINT "VSTUP DAT" 200 FIND !otevření pro čtení
Výstup proměnných s konstant.
Je-li použit příkaz PRINT (?) pak se výstup proměnných provede na terminál nebo na přiřazeném zařízení #P - výstup na magnetickou pásku #L - výstup na tiskárnu
Poznámka. -před znakem "#" musí být vždy uvedena mezera!!
Formát:
PRINT SEZNAM...tisknou se řetězové konstanty, řetězové proměnné numerické konstanty, numerické proměnné funkce a výrazy dle seznánu
PRINT "KOEFICIENT=",K,"SILA=",S,"KP" PRINT A¤, ALFA, R¤ (I), PRINT NOT 17 PRINT #P SEZNAM ...logický děrovač (viz IOBYTE) PRINT #L SEZNAM ...logická tiskárna
Poznámky: hodnoty<0.1 a>999 999 se zobrazují ve vědecké notaci 1 000 000...1E+06, 0.01...1E-02. Místo příkazu PRINT lze užit zkráceně jen '?'. Listuje se však správně PRINT, Uvnitř seznamu za příkazem 'PRINT' určuje typ oddělovače úpravu textového řádku. Oddělení čárkou způsobí posun na nejbližší tabelační pozici. Oddělení středníkem nevyvolá žádné doplňující funkce. Oddělovač je možno použit i na začátku nebo na konci řádku.
PRINT,,"TEXT";"3MÉNO",JM¤;
Pro zápis dat na vnější periferii (a později čtený příkazem INPUT #R) je nutné oddělit jednotlivé proměnné znakem "čárka" nebo"ukončením řádky" - CR.
Přiklad.
PRINT #P I;",";J;";";"K
nebo
PRINT #P I: PRINT #P J: PRINT #P K
Pro příkaz výstupu PRINT jsou zavedeny formátovací funkce TAB - tabulace a SPC - vymezerování. Tyto funkce mohou být umístěny pouze uvnitř seznamu u příkazu PRINT. Kromě těchto funkci mají formátovací účinek i oddělovače v příkazu PRINT "," a ";". Znak čárka nastavuje posici tisku na další tabelační sloupec, znak středník umísťuje .výstup dalších znaků bezprostředně za předcházející znaky. Při výstupu čisel je nutné uvažovat s mezerami -po jedné před a za číslem.
Speciální funkce "POS" umožňuje programu zjistit nastavení posice v řádku pro výstup znaků. (Tato funkce může být použita jak samostatně tak i v příkazu PRINT).
TAB(A)..........Další tisk začne od pozice 'A'
za TAB(A) není nutno uvádět symboly '; ' ', 'pro tisk. PRINT "VÝSLEDEK" ;V;TAB(30) "HLADINA=" ;B Pokud je již
tisková pozice větší než je uvedena v TAB (POS>A), nemá TAB(A) žádný účinek.
SPC(A)..........vystoupí 'A' mezer
PRINT SPC (10);"POČET=";P1;SPC(10);"CENA=";C
POS.............Počet již vystoupených znaků od začátku řádku
PRINT"12345",POS za funkci POS se zobrazí "6" (POS ukazuje pozici tiskové hlavy, tj. místo kdo se bude
provádět tisk).
Basic ex je rozšířen o speciální funkce pro displej s deskou AND-1, které plně využívají možnosti této desky. Jsou to funkce pro ovládání kurzoru, nulování obrazovky, rezervace řádku obrazovky a pro ovládání typu výstupních znaků.
CURS X,Y......nastav kursor na hodnotu X(0-39) a Y(0-23)
MODE A........nastav mod zobrazení na displej
HEX(C0)...široké znaky 192 dekadicky HEX(80)...podtržené znaky 128 HEX(40)...blikající znaky 64 HEX(.1)...současné tiskárna, např. 193
WND K..........(WINDOW) rezervuj k-řádků (0-15) od horního okraje obrazovky, tyto řádky nebudou přepisovány, ale po nastavení CURS X,Y Je možné psát do vyhrazené části obrazovky. Nastavení "okna" se provede příkazem WND číslo a zrušení se provede WND 0.
CLS..........(CLEAR SCREEN)-výmaz obrazovky mimo rezervovanou oblast
1 WND 0:CLS:?"PR0GRAM MĚŘENÍ PRŮTOKU" 2 CURS0, 6 .. 30 ?"SONDA1";X,Y,Z!... 50 CURS0, 1,?"PRUMĚRNÁ HODNOTA";SUMA 51 ?"ODCHYLKA" ; OD 100 CURS0,22:PRINT "KONEC MĚŘENÍ"
PTR(X)........(POINTER)-doeaď adresu proměnné X
Přiklad:
DUMMY=CALL (DADR,PTR(X))
Tiskni HEX, adresu proměnné. (DADR… je adresa služby monitoru HEX(130) display addres) . Řetězové proměnné jsou uloženy v paměti nepřímo pomocí ukazatele... LFNGHT, OFF, LOW ADR, HIGH ADR)
Příkazy pro přímé I/O operace umožňuji čtení a zápis byte v plném rozsahu paměti a číst a psát na porty. Adresa paměti je v rozsahu 0 - 64K, adresa pro port 0 - 255. Lze zadávat i hexadecimální adresu s využitím funkce "HEX". (např. POKE HEX(C000),10 -zápis 10 na adresu C000H).
PEEK(A).......čtení byte z paměti z adresy "A"-funkce. POKE A1, A2...zápis byte A2 na adresu A1 INP(A)........čtení portu A - funkce OUT A1,A2.....zápis byte A2 do portu A1 WAIT A1,A2 ,A3 ..čekání na výskyt masky A2 na portu A1, je-li zadáno A3, potom se čeká na shodu, poté provedení další instrukce
Příklady.
WAIT A1.A2 Odpovídá: WAIT0: IN A1 ,čti Z A1 ANI A2 ,maska CPI A2 ,shoda? JNZ WAIT0 ,ne, čekej dál WAIT A1.A2.A3 odpovídá: WAIT1: IN A1 ANI A2 CPI A3 ,shoda na data? JNZ WAIT1 ,ne, čekej
Poznámka: Bitové operace s daty z portu je nožné též provádět pomocí operátoru 'OR''AND''XOR', např. INP(A) AND HEX(40).
Použití assemblerovských podprogramů rozšiřuje aplikační možnosti programu v Baaicu. Uživatel si může vytvořit podprogramy v Assmebleru, pro speciální požadavky a tyto programy připojit k programům v Basicu.
HEX(C000).......dosaď HEX. hodnotu 0C000H
X=CALL(ADR ,HL )..volání podprogramu na adrese ADR je možné nastavit (16 bitů) do 'HL' (platí L=C=A) obsah reg. 'HL' po návratu se uloží do XY=USR(ADR ,C ).. volání podprogramu na adrese ADR je možné nastavit (8 bitů) do 'C' nebo 'A' (platí HL=C=A), a po návratu z podprogramu se uloží REG. A do proměnné Y. reg. B, DE, HL Je možno měnit u funkce USR a CALL.
Přiklad.
DOMMY=USER(HEX(109),7)..pošli BELL na 'CO' X=CALL(1234,HEX(1DE0))..16 bitů přenos (HL)
CODE ADR, HEX DATA,....DATA
příkaz 'CODE' uloží od zadané adresy data do paměti. Takto je možné uložit do paměti RAM tabulku a nebo podprogram
Přiklad.
CODE HEX(4300);3E,20,21,0,0,C9 .. odpovídá podprogramu v assembleru (INTEL 8080)
4300: MVI A,' ' LXI H,0 RET ,povinné!!
přičti 100 k 16 bitové proměnné:
USER1: LXI D,100 CODE 17152;11,64,0,19,C9 DAD D PRINT CALL( 17152, 1000)...VÝSLEDEK 1100. RET
zobraz obsah 16 bitové proměnné:
USER2: MOV A,M COOE 17152;7E,23,66,6F,C9 INX H PRINT CALL (17152,2)...OBSAH 16 BIT PROMĚNNÉ NA ADRESE 2 MOV H,M MOV L,A RET
Oblast paměti 4300H .. 43FFH je rezervována pro uživatelské programy. (dekadicky 17152...17407).
Standardní funkce jsou součásti interpretu jazyka basic a značně ulehčují programování matematických operací, protože není nutné vytvářet programy pro řešení základních aritmetických funkci, jako např. pro sinus, odmocninu, logaritmus atd. rovněž jsou implementovány i funkce pro práci se znakovými řetězci.
SGN(A).....signum (-1 pro A<0, 0 pro A=0, 1 pro A>0) INT(A).....celočíselná část (FRAC=A-INT (A) ) ABS(A).....absolutní hodnota SQR(A).....odmocnina. A>=0, LOG(A).....přirozený logaritmus, A>0, EXP(A).....E umocněno na A SIN(A).....sinus, všechny úhly v radiánech !!! (deg=3.1415926/180) COS(A).....cosinus TAN(A).....tangens ATN(A).....arcus tangens, 0< A <(PI/2) RND(A).....RANDOM - náhodné číslo v rozsahu 0 až 1 je-li A>0 pak se generuje různá náhodná posloupnost je-li A<0 pak se generuje stejná posloupnost, vhodné pro ladění - vždy stejné výsledky náhodných čišel. FRE(O).....délka volné paměti v bytech FRE(A¤) ....délka volné paměti pro řetězy(256 po 'RUN').
VAL (S¤)... .číselná hodnota řetězu, první ne numerický znak ukončí převod řetězce do vnitřního zobrazení
Přiklad.
10 S1¤="123" 20 I=VAL(S1¤) !hodnota proměnné I je 123
STR¤ (A) ....převod číselné proměnné na znakový řetězec
Přiklad.
10 J=4*5 20 S2¤=STR¤ (J) !řetězec S2 obsahuje znaky 20
CHR¤ (A)....převod číselné proměnné na ASCII znak. Převádí obsah proměnné na znak v ASCII kódu (modulo 128)
Přiklad.
10 I=65 20 PRINT CHR¤ (I) !vytiskne se znak "A"
ASC(S¤)....převod prvního znaku řetězu na hodnotu kódu ASCII (DEC)
Přiklad.
10 S3¤="BASIC" 20 J=ASC(S3¤) !hodnota proměnné J je 66
LEN(S¤)....délka řetězu (počet znaků)
Přiklad.
10 S3¤="BASIC" 20 I=LEN (S3¤) !hodnota I je 5
LEFT¤ (S¤,A) extrahuje počet A znaků řetězů zleva.
Přiklad.
40 S4¤=LEFT¤ (S3¤,3) !S4¤=BAS
RIGHT¤ (S¤,A) extrahuje počet A znaků řetězu zprava.
Přiklad.
40 S4¤=RIGHT (S3¤,3) !S4¤=SIC
MID¤ (S¤,A)..počínaje znakem A do konce řetězu
Přiklad.
40 S4¤=MID¤ (S3¤,2,3) !S4¤=ASI
MID¤ (S¤,A1,A2). .počínaje znakem A1, počet znaků A2 řetězu.
Poznámka: Funkce jejichž název končí '¤' vytváří nový řetěz. K tonu je třeba rezervovat příslušný paměťový prostor příkazem 'CLEAR A' na začátku programu. Parametr A příkazu udává počet bytů, rezervovaných pro řetězy. Bez tohoto příkazu je celková kapacita 256 bytů (po "RUN").
(Jen pro verzi EX/G)
Pouze pro informaci o připravované verzi. Příkazy mohou být přizpůsobeny desce DGD-1 až po ukončeni vývoje desky.
SCALE XMIN, XMAX,YMIN,YMAX
nastavení měřítka pro zobrazováni X(0-320 PIXLU), Y(0-280 PIXLU)
PR/ SCALE 0,320,0,280 SCALE -1,1,-1,1
PLOT X1, Y1 [,PEN1] [;X2,Y2 .PEN2] ... [XN,YN ,PENN]
spojí uvedené souřadnice ‚čarou a je možno zadat typ čáry.
PR/ PLOT 20,20 .. od polohy kurzoru do 20,20 provede čáru PLOT 30,30;X+3,X PLOT 10,10,225
MOVE X,Y[,PEN]
nastavení polohy kurzoru a typu čáry
PR/ MOVE 0.0 MOVE 0,0,225 PEN=0.........ruší Séru PEN=225.......plná čára PEN=HEX(55)...tečkovaná čára PEN=HEX(5F)...čerchovaná čára
AXES X,Y[,PEN]
vykresli osy s průsečíkem X,Z
PR/ AXES 0.0 AXES 20.20,HEX(5F)
LABEL MX,MY;"TEXT"
v daném zvětšení MX a MY zobrazí text jako PRINT. Zobrazuje znaky od " " po "Z" a ignoruje "CR" a
"LF".
PR/ LABEL 1,1;"BASIC" MOVE 30,20:LABEL 2,2;"MIT" vždy nastaví hodnotu PEN=225
FILL MX.MY.PEN
výplní plochu o velikosti MX.MY od kurzoru:
PR/ FILL 2,2,225 xx ---->xx< nová poloha kurzoru
GRAPH N
Řízeni grafického zobrazování:
N=0....pouze alfanumerické zobrazení N=225..vyčistí grafickou obrazovku, nastaví PEN=225 a přepne na grafické zobrazení. PR/ GRAPH 225
COPY #N X,Y
X,Y jsou souřadnice levého dolního rohu okna (39*23), které zkopíruje na zadanou periferii:
N=C......CONSOLE N=L......LIST N=P......PUNCHER PR/ COPY#L 0,0 COPY 30,20
DOT
dosadí hodnotu PIXLU (0 nebo -1), adresa je nastavená operací (MOVE,PLOT, LABEL,..)
PR/ 10 MOVE 0,0 15 PX=POINT
FONT ADR,HEXDATA uživatelem definovaný typ písma. Adresa - data v paměti RAM. Pro 1 písmeno je zapotřebí 5 byte.
RUN......Spuštění vloženého programu, může mít parametr – číslo řádku. Před exekucí programu se automaticky nuluji všechny proměnné. (Lze použit v programovém režimu).
NEW......Vymazání paměti programu a všech proměnných (příprava pro zadávání nového programu).
CLEAR....Smazání tabulek proměnných. Eventuální parametr udává rezervaci paměti pro řetězy, pořízené řetězovými funkcemi nebo příkazem 'INPUT S¤'.
CONT.....Pokračování programu po "STOP" nebo 'CTRL/C' (ETX), nebo CR v příkazu 'INPUT'.
LIST.....Listování programu, event. od čísla řádku. Lze přeruěit 'CTRL/C' (ETX) SHIFT/X. U ANK-1 nebo
pozastavit CTRL/S SHIFT/S u ANK-1.
Pokračovat lze stisknutím libovolné klávesy. (Lze použit v programovém režimu).
LIST START............od řádku
LIST START,POČET......od řádku plus počet řádků
EDIT LINE.............edice řádků:
<CR>.....ukončení editace
<DEL>....ruší znak nalevo od kurzoru
'<-'....posuv vlevo o znak
<TAB>....posun vpravo o znak (horizon. tabulátor) u ANK-1 SHIFT SP
'ESC'....nastavit kurzor na druhý okraj řádku (="LF" u ANK-1), každý jiný znak se uloží.
Kopírování řádku lze provést příkazem EDIT, kde se přepíše čislo řádku na nové. Po zavolání EDIT se umístí kurzor na konec řádku.
(Lze použit v programovém režimu).
@LINE.. .zkrácený zápis pro volání EDITU
DEL.....DEL START LINE,END LINE...zruší úsek programu od řádku po řádek. (Lze použit v programovém režimu ).
BYE.....Skok do monitoru přes RST 1. (Lze použit v programovém režimu).
LLIST.....Tisk na tiskárnu. (Lze použit v programovém režimu).
TRON.....Start trasováni programu. Vypisuji se čísla řádku prováděného programu na obrazovce displeje. (Lze použit v programovém režimu).
TROFF....Konec trasování programu. Zrušení výpisu na displeji. (Lze použit v programovém režimu).
LOAD......zavádění programu. Starý program se nesmaže !! Přepisuji se jen řádky se stejnými čísly. Lze využit k modifikaci programu. Mazání se provádí povelem "NEW". (Lze použit v programovém režimu).
SAVE......Úschova programu. Program se uchovává "otevřeně" v čitelné formě (ASCII). Je možná úprava programu editorem PEDIT. (Lze použit v programovém režimu).
GOTO......Spuštění programu bez nulování tabulek (pro ladění).
? SEZNAM. .Vytištění hodnot proměnných dle seznamu (PRINT seznam).
Poznámky:
Příkaz, před kterým není číslo řádku, se provádí okamžitě. Číslované řádky se umisťuji dle čísel řádku do zdrojového programu. Při shodě čísla je příslušný řádek přepsán.
Maximální počet znaků na instrukčním řádku je 132 včetně čísla řádku a mezer. Maximální číslo řádku je 9999.
Počet mezer mezi číslem řádku a první instrukci zůstane při listingu uchován:
PR/ 10 FOR I=1 TO 10 20 X=X*SIN(I):Z=Z/15+X:PRINT "X=";X,"Z-" ;Z 30 NEXT
Názvy proměnných mohou být víceznakové (první vždy písmeno), ale rozhodující jsou však první dva znaky.
Celá rezervovaná slova se nesmí užívat jako názvy proměnných, ani jako část názvu za prvním či druhým písmenem názvu. Pro numerické proměnné, řetězy a pole je možné použit, stejné názvy (např.: "B", "B¤", B"(l) jsou různé proměnné.)
Přerušení chodu programu (po 'RUN') klávesou 'CTRL/C' (ETX) nebo 'SHIFT/X' u klávesnice ANK-1.
Potlačeni tisku z programu stisknutím 'CTRL/S' 'SHIFT/S' u ANK-1.
Obnovení tisku opakováním libovolné klávesy.
Rozlišení startu programu Basic
Studený start (COLD) tj. první spuštění
- výmaz obrazovky,
- nápis na horní řádek.
Teplý start (WARM) tj. opakované spuštění
- bez výmazu obrazovky a programu uživatele
- nadpis se umístí na další řádek
?XX .. ERROR IN N NF ... NEXT WITHOUT "FOR" SN ... SYNTAX ERROR RG ... RETURN WITHOUT "GOSUB" OD ... OUT OF DATA (NOTHING TO "READ") FC ... FUNCTION ERROR OU ... OVERFLOW VALUE OM ... OVERFLOW MEMORY US ... UNDEFINED STATEMENT (LINE) BS ... INDEX OVERFLOW (BAD SUBSCRIPT - SUBSCRIPT OUT OF RANGE) DD ... DOUBLE DIMENSION /O ... ZERO DIVIDE ID ... ELEGAL. DIRECT TM ... TYPE MISMATCH OS ... OVERFLOW STRING MEMORY SPACE LS ... LONG STRING (255) ST ... STRING FUNCTION TOO KOMPLEX CN ... CONTINUE ERROR UF ... UNDEFINED FUNCTION x INPUT ERROR ... při chybě během vkládáni čísla v přikážu 'INPUT' x EXTRA DATA IGNERED ... ignorování nadbytečných dat ve vstupním seznamu INPUT.
10 FOR I=1 TO 10000 20 NEXT asi 19 sec., tj. 1.9 ms na průchod 30 FOR I=1 TO 10000: NEXT asi 15 sec., tj. 1.5 ms na průchod 40 REPEAT I=I+1 UNTIL I>1000 asi 9.5 sec., tj. 9.5 ms na průchod 50 E=1000 60 REPEAT I=I+l UNTIL I>E asi 6 sec., tj. 6 ms na průchod
Tabulka kódu ISO-7 (ASCII)
------------------------------------------------------------- JED/DES 3. 4. 5. 6. 7. 8. 9. ------------------------------------------------------------- 0 ! ( 2 < F P Z 1 ! ) 3 = G Q [ 2 ! <SP> * 4 > H R \ 3 ! ! + 5 ? I S ] 4 ! " , 6 @ J T ^ 5 ! # - 7 A K U _ 6 ! ¤ . 8 B L V 7 ! % / 9 C M W 8 ! & 0 : D N X 9 ! ' 1 ; E O Y -------------------------------------------------------------
Tabulka řídicích znaků.
-------------------------------------------- JED/DES 0. 1. 2. 3. -------------------------------------------- 0 NUL LF DC4 RS 1 SOH VT NAK US 2 STX FF SYN 3 EXT CR ETB 4 EOT SO CAN 5 ENQ SI EM 6 ACK DLE SUB 7 BEL DC1 ESC 8 BS DC2 FS 9 HT DC3 GS --------------------------------------------
Poznámka: od 96 začínají znaky malé abecedy malá "a"-97 až 127 znak DEL.
Znak "¤" je znakem měny, na kterých klávesnicích je znak dolar.
Význam řídicích znaků u terminálu SM 7202 (SM 1601)
Význam dekadicky HEXA Kód (ISO-7) --------------------------------------------------------------- šipka vlevo 8 8 BS šipka dolů 10 A LF šipka vpravo 24 18 CAN šipka nahoru 26 1A SUB ovládání 27 1B ESC 2 následující znaky: kurzoru řádek, pozice hone 29 1D GS clear line 30 1E RS clear scrsen 31 1F US
Poznámka:
Ovládání kurzoru umožní umístit kurzor na libovolnou pozici na obrazovce displeje. Zadávají se dva znaky, první udává číslo řádku, druhý číslo pozice na řádku. (Znak SP reprezentuje číslo 0,a další znaky dle hodnoty mínus hodnota znaku mezera).
Poznámka:
- Pro klávesnici ANK-1 je možno použit pro zvukovou signalizaci příkaz BEEP. Udává se bez parametru. Prodlouženi signálu je možné opakovaným použitím příkazu BEEP.
R - REGISTR (A,B,C,D,E,H,L) RP - REGISTR PAR (BC,DE,HL,PSW,SP) D - DATA (8/16 BIT) X - PŘÍZNAK (CARRY, ZERO, SIGNUM. PARITY) DÉLKA MNEMOKOD VÝZNAM PŘÍZNAKY (-NEOVLIVNĚNO) (X VŠECHNY) INSTRUKCE PŘESUNU 1 MOV R,R PŘESUN SLABIKY 2 MVI R,D PŘESUN PŘÍMÉHO OPERANDU 3 LDA ADR NAPLNĚNÍ STŘADAČE 1 LDAX RP NAPLNĚNÍ <A> 3 LHLD ADR NAPLNĚNÍ <HL> 3 LXI RP,D NAPLNĚNÍ REG. PÁRU PŘÍMÝ OPER. 3 STA ADR ULOŽENÍ <A> 1 STAX RP ULOŽENÍ <A> 3 SHLD ADR ULOŽENÍ <HL> 1 XCHG VÝMÉNA <HL><DE> ARITMETICKÉ INSTRUKCE 1 ADO R PŘIČTENÍ <A> + <R> -> <A> Z,S,P,CY,AC (x) 2 ADI D PŘIČT. <A> + <D> -> <A> x 1 ADC R PŘIČT. <A> + <R> + <CY> -> A x 2 ACI D <A> + <D> + <CY> -> <A> x 1 SUB R ODEČTENÍ <A> -<R> -> <A> x 2 SUI D <A>- <D> -> <A> x 1 SBB R <A>-<R>-<CY> -> <A> x 2 SBI D <A> - <D> <CY> -> <A> x 1 INR R <R> +1 Z,S,P,AC 1 INX R <R> +1 - 1 DCR R <R> -1 Z,S,P,AC 1 DCX R <R> -1 - 1 DAD R <HL> + <R> -> <HL> CY 1 DAA DESÍTKOVÁ KOREKCE x LOGICKÉ INSTRUKCE 1 ANA R <A> AND <R> -> <A> X 2 ANI D <A> AND <D> X 1 ORA R <A> OR <R> X 2 ORI D <A> OR <D> X 1 XRA R <A> XOR <R> X 2 XRI D <A> XOR <D> X 1 CMA NEGACE <A> - 1 RLC ROTACE 1.BIT VLEVO CY 1 RRC - " - VPRAVO CY 1 RAL KRUH.ROT.l.BIT VLEVO CY 1 RAR - " - VPRAVO CY 1 CMP R SROV <A><R> X 2 CPI D SROV <A><D> X 1 CMC NEGACE <CY> CY 1 STC SET <CY> CY=1 VĚTVENÍ PROGRAMU 3 JMP ADR SKOK NA DANOU ADRESU - 3 CALL ADR SKOK DO PODPROGRAMU - 1 RET NÁVRAT Z PODPROGRAMU - X=C,NC,Z,NZ,P,M,PE,PO 3 JX PODMÍNĚNÝ SKOK - 3 CX PODMÍNĚNÝ SKOK DO PODPR. - 1 RX PODMÍNĚNÝ NÁVRAT - 1 PCHL <HL> -> <PC> - 1 RST KOD OBSLUHA PŘERUŠENÍ - PRÁCE SE ZÁSOBNÍKEM 1 POP RP <R> -> <SP> x pro PSW 1 PUSH RP <SP> -> <R> - 1 SPHL <HL> -> <SP> - 1 XTHL <HL> <-> <SP> - PERIFERNÍ INSTRUKCE 2 IO PORT <PORT> -> <A> - 2 OUT PORT <A> -> <PORT> - ŘÍDÍCÍ INSTRUKCE 1 DI ZAKÁZÁNÍ PŘERUŠENÍ - 1 EI POVOLENÍ PŘERUŠENÍ - 1 HLT ZASTAVENÍ - 1 NOP PRÁZDNÁ OPERECE -
00 NOP 01 LXI B,D16 02 STAX B 03 INX B 04 INR B 05 OCR B 06 MVI B,D8 07 RLC 08 - 09 DAD B 0A LDAX B 0B DCX B 0C INR C 0D OCR C 0E MVI C,D8 0F RRC 10 - 11 LXI D,D16 12 STAX D 13 INX D 14 INR D 15 DCR D 16 MVI D,D8 17 RAL 18 - 19 DAD D 1A LDAX D 1B DCX B 1C INR E 1D DCR E 1E MVI E,D8 1F RAR 20 - 21 LXI H,D16 22 SHLD ADR 23 INX H 24 INR H 25 DCR H 26 MVI H,D8 27 DAA 28 - 29 DAD H 2A LHLD ADR 2B DCX H 2C INR L 2D DCR L 2E MVI L,D8 2F CMA 30 - 31 LXI SP,D16 32 STA ADR 33 INX SP 34 INR M 35 DCR M 36 MVI M,D8 37 STC 38 - 39 DAD SP 3A LDA ADR 38 DCX SP 3C INR A 3D DCR A 3E MVI A,D8 3F CMC 40 MOV B,B 41 MOV B,C 42 MOV B,D 43 MOV B,E 44 MOV B,H 45 MOV B,L 46 MOV B,M 47 MOV B,A 48 MOV C,B 49 MOV C,C 4A MOV C,D 4B MOV C,E 4C MOV C,H 4D MOV C,L 4E MOV C,M 4F MOV C,A 50 MOV D,B 51 MOV D,C 52 MOV D,D 53 MOV D,E 54 MOV D,H 55 MOV D,L 56 MOV D,M 57 MOV D,A 58 MOV E,B 59 MOV E,C 5A MOV E,D 5B MOV E,E 5C MOV E,H 5D MOV E,L 5E MOV E,M 5F MOV E,A 60 MOV H,B 61 MOV H,C 62 MOV H,D 63 MOV H,E 64 MOV H,H 65 MOV H,L 66 MOV H,M 67 MOV H,A 68 MOV L,B 69 MOV L,C 6A MOV L,D 6B MOV L,E 6C MOV L,H 6D MOV L,L 6E MOV L,M 6F MOV L,A 70 MOV M,B 71 MOV M,C 72 MOV M,D 73 MOV M,E 74 MOV M,H 75 MOV M,L 76 HLT 77 MOV M,A 78 MOV A,B 79 MOV A,C 7A MOV A,D 7B MOV A,E 7C MOV A,H 7D MOV A,L 7E MOV A,M 7F MOV A,A 80 ADD B 81 ADD C 82 ADD D 83 ADD E 84 ADD H 85 ADD L 86 ADD M 87 ADD A 88 ADC B 89 ADC C 8A ADC D 8B ADC E 8C ADC H 8D ADC L 8E ADC M 8F ADC A 90 SUB B 91 SUB C 92 SUB D 93 SUB E 94 SUB H 95 SUB L 96 SUB M 97 SUB A 98 SBB B 99 SBB C 9A SBB D 9B SBB E 9C SBB H 9D SBB L 9E SBB M 9F SBB A A0 ANA B A1 ANA C A2 ANA D A3 ANA E A4 ANA H A5 ANA L A6 ANA M A7 ANA A A8 XRA B A9 XRA C AA XRA D AB XRA E AC XRA H AD XRA L AE XRA M AF XRA A B0 ORA B B1 ORA C B2 ORA D B3 ORA E B4 ORA H B5 ORA L B6 ORA M B7 ORA A B8 CMP B B9 CMP C BA CMP D BB CMP E BC CMP H BD CMP L BE CMP M BF CMP A C0 RNZ C1 POP B C2 JNZ ADR C3 JMP ADR C4 CNZ ADR C5 PUSH B C6 ADI D8 C7 RST 0 C8 RZ C9 RET CA JZ ADR CB - CC CZ ADR CD CALL ADR CE ACI D8 CF RST 1 D0 RNC D1 POP D D2 JNC ADR D3 OUT PORT D4 CNC ADR D5 PUSH D D6 SUI D8 D7 RST 2 D8 RC D9 - DA JC ADR DB IN PORT DC CC ADR DD - DE SBI D8 DF RST 3 E0 RPO El POP H E2 JPO ADR E3 XTHL E4 CPO ADR E5 PUSH H E6 ANI D8 E7 RST 4 E8 RPE E9 PCHL EA JPE ADR EB XCHG EC CPE ADR ED - EE XRI D8 EF RST 5 F0 RP F1 POP PSW F2 JP ADR F3 DI F4 CP ADR F5 PUSH PSW F6 ORI D8 F7 RST 6 F8 RM F9 SPHL FA JM ADR FB EI FC CM ADR FD - FE CPI D8 FF RST 7
instr počet instr počet inetr počet instr počet ACI 7 CPI 7 JP 10 PUSH 11 ADC R 4 CPO 11/17 JPE 10 RAL 4 ADC M 7 CZ 11/17 JPO 10 RAR 4 ADD R 4 DAA 4 JZ 10 RC 5/11 ADD M 7 DAD 10 LDA 13 RET 10 ADI 7 DCR R 5 LDAX 7 RLC 4 ANA R 4 DCR M 10 LHLD 16 RM 5/11 ANA M 7 DCX 5 LXI 10 RNC 5/11 ANI 7 DI 4 MOV R,R 5 RNZ 5/11 CALL 17 EI 4 MOV R,M 7 RP 5/11 CC 11/17 HLT 7 MOV M,R 7 RPE 5/11 CM 11/17 IN 10 MVI R,D 7 RPO 5/11 CMA 4 INR R 5 MVI M,D 10 RRC 4 CMC 4 INR M 10 NOP 4 RST 11 CMP R 4 INX 5 ORA R 4 RZ 5/11 CMP M 7 JC 10 ORA M 7 SRB R 4 CNC 11/17 JM 10 ORI 7 SBB M 7 CNZ 11/17 JMP 10 OUT 10 SBI 7 CP 11/17 JNC 10 PCHL 5 SHLD 16 CPE 11/17 JNZ 10 POP 10 SPHL 5 STA 13 SUB R 4 XCHG 4 XRI 7 STAX 7 SUB M 7 XRA R 4 XTHL 17 STC 4 SUI 7 XRA M 7
Poznámka. U podmíněných instrukcí je uvedená dvojice čísel, z nichž první (menší) je pro případ, že podmínka není splněna a druhé (větší) je-li splněna.
Doba provedení Instrukce závísí na počtu taktů (viz tabulka) a frekvenci hodin mikroprocesoru. Pro SAPI-1 je asi 500 ns.
(ASCII, MTA 5, ISO-7, KOI-7)
znak hax znak hex znak hex znak hex NUL 00 DLE 10 SP 20 0 30 SOH 01 DC1 11 ! 21 1 31 STX 02 DC2 12 " 22 2 32 ETX 03 DC3 13 # 23 3 33 EOT 04 DC4 14 ¤ 24 4 34 ENQ 05 NAK 15 % 25 5 35 ACK 06 SYN 16 & 26 6 36 BEL 07 ETB 17 ' 27 7 37 BS 08 CAN 18 ( 28 8 38 HT 09 EM 19 ) 29 9 39 LF 0A SUB 1A * 2A : 3A VT 0B ESC 1B + 2B ; 3B FF 0C FS 1C , 2C < 3C CR 0D GS 1D - 2D = 30 SO 0E RS 1E . 2E > 3E SI 0F US 1F / 2F ? 3F znak hex znak hex @ 40 P 50 A 41 Q 51 B 42 R 52 C 43 S 53 D 44 T 54 E 45 U 55 F 46 V 56 G 47 W 57 H 48 X 58 I 49 Y 59 J 4A Z 5A K 4B [ 5B L 4C \ 5C M 4D ] 5D N 4E ^ 5E O 4F _ 5F
Poznámka. Řada HEX 60-7F je pro malá písmena. 80-FF národní abecedy (např. azbuka) nebo paritní zabezpečení.
Řada 00-1F jsou řidiči znaky.
Řadicí znaky tabulky 01-1F jsou řídící znaky pro řízeni přenosu dat, znaky pro formátování, oddělovače informaci a znaky pro řízení přístrojů.
A) Řídicí znaky pro přenos dat
znak hex význam SOH 01 začátek záhlaví (START OF HEADING) STX 02 začátek textu (START OF TEXT) ETX 03 konec textu (END OF TEXT) EOT 04 konec přenosu (END OF TRANSMISION) ENQ 05 výzva (ENQUTRY) ACK 06 kladná odpověď (ACKNOWLEDGE) DLE 10 připojení při přenosu dat (DATA LINK ESCAPE) NAK 15 negativní odpověď (NEGATIVE ACKNOWLEDGE) SYN 16 synchronizace (SYNCHRONOUS IDLE) ETB 17 konec přenášeného bloku (END OF TRANSMISION BLOCK)
B) Znaky pro formát
znak hex význam SP 20 mezera (SPACE) BS 08 krok zpět (BACK SPACE) HT 09 horizontální tabulátor (HORIZONTAL TABULATION) CR 0D návrat vozu nový řádek (NEW LINE) VT 0B vertikální tabulátor (VERTICAL TABULATION) FF 0C posun formuláře (FORM FEED)
C) Znaky pro řízení přístrojů
znak hex význam DC1 11 zapni zařízení 1 DC2 12 zapni zařízení 2 DC3 13 vypni zařízení 1 DC4 14 vypni zařízení 2
D) Oddělovače informaci
znak hex význam FS 1C oddělovač souboru (FILE SEPARATOR) GS 1D oddělovač skupin (GROUP SEPARATOR) RS 1E oddělovač podskupin (RECORD SEPARATOR) US 1F oddělovač jednotek (UNTI SEPARATOR)
E) Řídící znaky pro rozšíření kódu
znak hex význam ESC 1B přepnutí (ESCAPE) SO 0E trvalé přepnutí (SHIFT OUT) SI 0F zpětné přeřazení (SHIFT IN)
F) Ostatní znaky
znak hex význam NUL 00 prázdný znak (NULL) BEL 07 zvonek (BELL) CAN 18 neplatné (CANCEL) EM 19 konec záznamu (END OF MEDIUM) SUB 1A substituce - náhrada za neplatný zrak (SUBSTITUTION) DEL 7F plný znak (DELETE) ¤ 23 znak měny (někdy je uveden dolar)
G) Význam řídících znaků pro terminál SM 7202
význam kód hexa dek. SIPKA VLEVO <- BS 8 8 posun o znak zpět SIPKA VPRAVO -> CAN 18 24 posun o znak vpřed ŠIPKA DOLU LF 0A 10 nová řádka SIPKA NAHORU SUB 1A 26 řádka zpět HOME GS 1D 29 návrat na začátek obraz. CLEAR LINE RS 1E 30 zruš řádek CLEAR SCREEN US 1F 31 výmaz obrazovky OVLÁDÁNÍ KURSORU (ADR,ESC) ESC 1B 27 nastavení ukazovátka (kursoru)
Pro ovládání se používají dva znaky, první určuje číslo řádku, druhé číslo posici na řádku (znak mezera HEX 20 je jako 0).
HEXADECIMÁLNÍ – DEKADICKÁ ČÍSLA HEX 0 1 2 3 4 5 6 7 8 9 A B C D E F ---------------------------------------------------------------------- 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 3 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 5 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 6 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 7 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 8 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 9 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 A 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 B 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 C 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 D 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 E 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 F 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 ---------------------------------------------------------------------- HEX X X0 X00 X000 ----------------------------------------- 0 0 0 0 0 1 1 16 256 4096 2 2 32 512 8192 3 3 48 768 12288 4 4 64 1024 16384 5 5 80 1280 20480 6 6 96 1536 24576 7 7 112 1792 28672 8 8 128 2048 32768 9 9 144 2304 36864 A 10 160 2560 40960 B 11 176 2816 45056 C 12 192 3072 49152 D 13 208 3328 53248 E 14 224 3584 57344 F 15 240 3840 61440 -----------------------------------------
MEZI ČÍSLY DESÍTKOVĚ A ŠESTNÁCTKOVÉ SOUSTAVY Řády X X0 X00 X000 X0000 ------------------------------------------------------- 0 0 0 0 0 0 1 1 A 64 3E8 2710 2 2 14 C8 7D0 4E20 3 3 1E 12C BB8 7530 4 4 28 190 FA0 9C40 5 5 32 1F4 1388 C350 6 6 3C 258 1770 EA60 7 7 46 2BC 1B58 8 8 50 320 1F40 9 9 5A 384 2328 -------------------------------------------------------
V PRILOZE JSOU UKAZKY POUZITI SYSTEMOVYCH SLUZEB (PODPROGRA- MU) MONITORU,MONITORU PLUS A MIKOSU.SLUZBY ZEJMENA ZJEDNODUSUJI PRACI S VSTUP/VSTUPNIMI PERIFERIEMI A UMOZNUJI PREPINAT ZARIZENI Z PROGRAMU PODLE POZADAVKU PROGRAMU. POZNAMKA. VYSVETLUJICI TEXT JE UVEDEN V HRANATYCH ZAVORKACH TITLE 'UKÁZKY ASSEMBLERU TOOL' ;----------------------------- EXPR EQU 127H MEMCK EQU 11BH DADR EQU 130H HILO EQU 136H TEXT EQU 142H EXFLG EQU 14BH IODEF EQU 11EH ;MONITOR SERVICE IOCHK EQU 115H IOSET EQU 118H ; RI EQU 106H PO EQU 10CH LO EQU 10FH ; ORG 7000H ; [... ZMENA VYSTUPNIHO ZARIZENI -TISKARNY V UZIVATELSKEM PROGRAMU, NASTAVENI NA ZARIZENI L=2 FUNKCE - PRECTENI IOBYTE (FUNKCE IOCHK) ODMASKOVANI BITU 6,7 -ZARIZENI LO A NOVE NASTAVENI PRO L=2 T.J. BITY 6,7=1 NASTAVENI IOBYTE (FUNKCE IOSET) ...] ; ZMĚNA IOBYTE NAPR. TISKARNA L=2 ; CALL IOCHK ;CTI ANI 3FH ;MASK ORI 11000000B ;NEW VALUE MOV C,A CALL IOSET ; [...NALEZENI VSTUPNIHO SOUBORU NA KAZETE -VYUZIVA SE SLUZBA EXFLAG ... REGISTR <C>=1 (USER 1-KAZETA) ,STRADAC <A>=0 CTENI BYTE ZE ZARIZENI READER - SLUZBA RI,ZNAK JE VE STRADACI <A>, JE-LI KONEC PAK SE NASTAVI FLAG CY=1. KONEC ZNAKOVEHO SOUBORU ZNAK "1A" ...] ; NAJDI SOUBOR NA KAZETE ; XRA A ;0..FIND MVI C,1 ;1.SLUZBA EXFLG CALL EXFLG CALL RI ;CTI PRVNI DATA ZE SOUBORU ;UKAZKA TESTU NA UKONCENI SOUBORU ; JC KONEC .. NEBO ; CPI 16H ; JZ KONEC ; [... INSTALACE UZIVATELSKEHO OVLADACE ZARIZENI TYPU TISKARNY A JEHO INSTALACE DO SYSTEMU. VYUZIVA SE SLUZBA IODEF <CISLA ZARIZENI PRO SLUZBU IODEF VIZ MONITOR ASSIGN) UZIVATELSKA TISKARNA MA CISLO 6.V REGISTRU <DE> JE ADRESA OVLADAČE. ...] ; INSTALACE UZIVATELSKE PERIFERIE MISTO TISKARNY ; MVI C,6 ;6..IODEF LXI D,USRLO ;ADRESA HANDLERU CALL IODEF ;INSTALACE DO SYSTEMU ; ; UKAZKA UZIVATELSKEHO HANDLERU ; USRLO: IN 90H RLC JNC USRLO ;WAIT MOV A,C OUT 91H ;POSLI DATA RET ; [... VYUZIVA SE SLUZEB MONITORU RI -CTENI ZE ZARIZENI READER A LO -ZAPIS NA TISKARNU, PODLE NASTAVENI IOBYTE. VYUZIVA SE FLAGU CY PRO ZJISTENI KONCE SOUBORU ...] ; UKAZKA KOPIROVANI DAT Z KAZETY NA TISKARNU ; JE-LI AL=2 POTOM SE DATA ZAPISUJI NA UZIV. TISKÁRNU ; LOOPR: CALL RI JC KONECR ;KONEC DAT MOV C,A CALL LO JMP LOOPR ;... KONECR: ; [... UKAZKA REZERVOVANI CASTI HORNI PAMETI. VYUZIVA SE SLUZEB MONITORU - MEMCK PRO ZJISTENI HORNI HRANICE DOSTUPNE PAMETI A SLUZBY IODEF PRO NASTAVENI NOVE HORNI HRANICE.PRIKLAD MUZE BYT POUZIT VICEKRAT PRO DALSI REZERVACE. SLUZBA MEMCK PREDA ADRESU V REGISTRECH <A>..NIZSI CAST ADRESY, <B> ... VYSSI CAST ADRESY. SLUŽBA IODEF MA PRO REZERVACI PAMETI CISLO 8 V REGISTRU <C>, A V REG. <DE> JE NOVA HORNÍ HRANICE. ...] ; UKAZKA REZERVACE POSLEDNÍCH 255 BYTE PAMETI ; DO TETO PAMETI NEZAPISUJE BASIC, PEDIT.. ; CALL MEMCK MOV H,B MOV L,A ;HL..KONEC RAM LXI D,-255 DAD D XCHG ;DE NOVY KONEC RAM MVI C,8 ;8..NASTAV MEMTOP CALL IODEF [... REZERVOVANI CASTI OBRAZOVKY DISPLEJE (PRO DESKU AND-1) VYUZIVA SE SLUZBY EXFLAG (CISLO 7), KTERA ZABLOKUJE UVEDENY POCET RADKU OD HORNIHO OKRAJE. ZABLOKOVANA CAST OBRAZOVKY NENI PREPISOVANA PROGRAMY V BASICU ATD. ODBLOKOVANI SE PROVEDE ZADANIM NULOVEHO POCTU BLOKOVANYCH RADKU. V REGISTRU <A> JE UVEDEN POZADOVANY POCET RADKU,V REGISTRU <C> CISLO SLUŽBY =7. ...] ; REZERVACE WINDOW NA OBRAZOVCE MVI A,20 ;20 RADKU ... REZERVUJ MVI C,7 ;EXFLAG SERVICE CALL EXFLG ; XRA A ;ZRUS WINDOW ... 0 RADKU MVI C,7 CALL EXFLG ; [... UKAZEKA ZAPISU NA KAZETU (ZARIZENI USER 1) S VYUZITIM SLUZBY EXFLG C=3 PRO OTEVRENI VYSTUPNIHO SOUBORU, A=0; DALE SE VYUZIVA SLUZBA HILO PRO ZJISTENI KONCE CYKLU – ZAPISU DAT KDE V REG.PARU <DE> JE KONCOVA ADRESA A V <HL> JE POCATECNI ADRESA ZONY ZAPISOVANYCH DAT. PRO VLASTNI ZAPIS JE POUZITA SLUZBA PO UKONCENI ZNAKOVEHO SOUBORU - ZNAK UKONCENI "SUB" … CTRL Z, ... "1AH" ....] ; UKAZKA ZAPISU NA KAZETU ; LXI D,KONDTC ;ZADEJ USEK PAMETI LXI H,ZACAT MVI C,3 ;OPEN XRA A CALL EXFLG ; LOOPW; MOV C,M CALL PO ;ZAPIS CALL HILO JNC LOOPW ; UKONCENI SOUBORU MVI C,1AH ;CTRL Z CALL PO ;UKONCI UZIVATELSKY SOUBOR ; [... UKAZKA PRO NACTENI HEXADECIMALNICH DAT Z CI A VYPOCET ROZDILU, ZOBRAZENI DAT NA CO.PRO PRECTENI DAT SE VYUZIVA SLUZBA EXPR ... PRECTENI ZADANEHO POCTU HEX.CISEL,V REG. <C> JE POCET.VYRAZY SE UKLADAJI DO ZASOBNIKU. SLUZBA DADR ZOBRAZI NA CO OBSAH ADRESY, KTERA JE V REGIS- TROVEM PARU <HL> ... ] ; CTI 2 16BITOVE VYRAZY A VYPOCTI ROZDIL ; MVI C,2 ;2*CTI CALL EXPR POP D POP H MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A CALL DADR ;ZOBRAZ ; [... UKAZKA POUZITI SLUZBY TEXT PRO VYPIS TEXTU NA ZARIZENI CO.V REG. PARU <HL> POCATECNI ADRESA ZONY VYSTUPNIHO TEXTU A V REG. <D> JE POCET ZNAKU VZSTUPNIHO TEXTU. V PRIKLADU JE UKAZKA VYUZITI NASTAVENI POCITADLA ADRES - <PC> ... "¤" PRO ZJISTENI DELKA TEXTOVEHO RETEZCE. ...] ; VYPIS TEXTU ; LXI H,MES MVI D,LMES CALL TEXT ;...... MES: DB 'ABCDE...56789' LMES EQU ¤-MES ; DS 3 ;REZERVACE 3 SLABIK V PAMETI ; ; DATA: ZACAT: DS 10 KONDT: ; PRIKLAD PRACE SE SOUBOREM PROGRAMU "TOOL" ***************************************** PREKLAD UKAZKY,KTERA BYLA ZAVEDENA DO PAMETI PROGRAMEM PEDIT PRIKAZY UVEDENE V OSTRYCH ZAVORKACH "< >" ZADAVAME Z KLÁVESNICE. TOOL ASM-80 V4(c) +<A> ...VYVOLANI ASSEMBLERU MEMORY ASSEMBLER MCS-80 MODE ?<X> ...PREKLAD Z PAMETI POCITACE MEMORY ASSEMBLER MCS-80 PASS=<2> ...DRUHY PRUCHOD MEMORY ASSEMBLER MCS-80 PAGE=1 TITLE 'UKÁZKY ASSEMBLERU TOOL' ;----------------------------- EXPR EQU 137H MEMCK EQU 11BH DADR EQU 130H HILO EQU 136H TEXT EQU 142H EXFLG EQU 14BH IOOEF EQU 11EH ;MONITOR SERVICE IOCHK EQU 115H IOSET EQU 118H RI EQU 106H PO EQU 10CH LO EQU 10FH ORG 7000H ; ; ZMENA IOBYTE NAPR. TISKARNA L=2 ; 7000 CD 15 01 CALL IOCHK ;CTI 7003 E6 3F ANI 3FH ;MASK 7005 F6 C0 ORI 11000000B ;NEW VALUE 7007 4F MOV C,A 7008 CD 18 01 CALL IOSET ; ; NAJDI SOUBOR NA KAZETE ; 7006 AF XRA A ;0..FIND 7O0C 0E 01 MVI C,1 ;1.SLUŽBA EXFLG 700E CD 4B 01 CALL EXFLG 7011 CD 06 01 CALL RI ;CTI PRVNI DAT ZE SOUBORU ; ; INSTALACE UZIVATELSKE PERIFERIE MISTO TISKARNY ; 7014 0E 06 MVI C,6 ;6..IODEF 7016 11 1C 70 LXI D,USRLO ;ADRESA HANDLERU 7019 CD 1E 01 CALL IODEF ;INSTALACE DO SYSTEMU ; ; UKAZKA UZIVATELSKEHO HANDLERU ; ?01C DB 90 USRLO: IN 90H 701E 07 RLC 701F D2 1C 70 JNC USRLO ;WAIT 7022 79 MOV A,C 7023 D3 91 OUT 91H ;POSLI DATA 7025 C9 RET ; ; UKAZKA KOPIROVANI DAT Z KAZETY NA TISKARNU ; JE-LI AL=2 POTOM SE DATA ZAPISUJI NA UZIV. TISKÁRNU ; 7026 CD 06 01 LOOPR: CALL RI 7029 DA 33 70 JC KONECR ;KONEC DAT 702C 4F MOV C,A 702D CD 0F 01 CALL LO 7030 C3 26 70 JMP LOOPR ;... KONECR: ; ; UKAZKA REZERVACE POSLEDNICH 255 BYTE PAMETI MEMORY ASSEMBLER MCS-BO PAGE=2 ; DO TETO PAMETI NEZAPISUJE BASIC, PEDIT.. 7033 CD 1B 01 CALL MEMCK 7036 60 MOV H,B 7037 6F MOV L,A ;HL. KONEC RAM 7038 11 01 FF LXI D,-255 703B 19 DAD D 703C EB XCHG ;DE.NOVY KONEC RAM 703F CD 1E 01 MVI C,8 ;8. NASTAV MEMTOP CALL IODEF ; ; REZERVACE WINDOW NA OBRAZOVCE ; 7042 3E 14 MVI A,20 ;20 RADKU 7044 0E 07 MVI C,7 ;EXFLAG SERVICE 7046 CD 4B 01 CALL EXFLG ; 7049 AF XRA A ;ZRUS WINDOW 704A 0E 07 MVI C,7 704C CD 4B 01 CALL EXFLG ; ; UKAZKA ZAPISU NA KAZETU ; 704F 11 9C 70 LXI D,KONDTC ;ZADEJ USEK PAMETI 7052 21 92 70 LXI H,ZACAT 7055 0E 03 MVI C,3 ;OPEN 7057 AF XRA A 7058 CD 4B 01 CALL EXFLG ; 705B 4E LOOPW: MOV C,M 705C CD 0C 01 CALL PO ;ZAPIS 705F CD 36 01 CALL HILO 70D2 5B 70 JNC LOOPW ; ; UKONCENI SOUBORU ; 7065 0E 1A MVI C,1AH ;CTRL Z 7067 CD 0C 01 CALL PO ; ; CTI 2 16BITOVE VYRAZY A VYPOCTI ROZDIL ; 706A 0E 02 ; 706A 0E 02 MVI C,2 ;2*CTI 706C CD 27 01 CALL EXPR 706F D1 POP D 7070 E1 POP H 7071 7D MOV A,L 7072 93 SUB E 7073 6F MOV L,A 7074 7C MOV A,H 7075 9A SBB D 7076 67 MOV H,A 7077 CD 30 01 CALL DADR ;ZOBRAZ ; ; VYPIS TEXTU ; 707A 21 82 70 LXI H,MES 707D 16 0D MVI D,LMES 707F CD 42 01 CALL TEXT ;...... 7082 41 42 43 44 45 2E 2E 2E 35 36 37 38 39 MES: DB 'ABCDE. ..56789' LMES EQU ¤-MES MEMORY ASSEMBLER MCS-80 PAGE=03 ; DS 3 ;REZERVACE 3 SLABIK V PAMĚTI ; ; DATA: ZACAT: DS 10 KONDT: ; END ERROR(S) =00 MEMORY ASSEMBLER MCS-80 PASS=<S> ... VYPIS TABULKY EXPR 0127 MEMCK 011B DADR 0130 HILO 0136 TEXT 0142 EXFLG 014B IODEF 011E IOCHK 0115 IOSET 0118 RI 0106 PO 010C LO 010F USRLO 701C LOOPR 7026 KONEC 7033 LOOPW 705B MES 7082 LMES 000D ZACAT 7092 KONDT 709C MEMORY ASSEMBLER MCS-80 PASS=<CR> ... UKONCENI TOOL ASM-80 V4.0 +D=7000 =7091<CR> VYPI PAMETI 7000 CD 15 01 E6 3F F6 C0 4F -..F?V O 7008 CD 1B 01 AF OE 01 CD 4B -....-K 7010 01 CD 06 01 OE 06 11 1C .-...... 7018 70 CD 1E 01 DB 90 07 D2 P-..;P.2 7020 1C 70 79 D3 91 C9 CD 06 .PY3Q>-. 7028 01 DA 33 70 4F CD 0F 01 .:3PO-.. 7030 C3 26 70 CD 1B 01 60 6F #&P-..@O 7038 11 01 FF 19 EB OE 08 CD .._.k..- 7040 IE 01 3E 14 0E 07 CD 4B ..>...-K 7048 01 AF 0E 07 CD 4B 01 11 ...-K.. 7050 9C 70 21 92 70 0E 03 AF IP!RP.. 7058 CD 4B 01 4E CD 0C 01 CD -K.N-..- 7060 36 01 D2 5B 70 0E 1A CD 6.2[...P..- 7068 OC 01 0E 02 CD 27 01 D1 ....-'.1 7070 E1 7D 93 6F 7C 9A 67 CD A...]SO\ZG- 7078 30 01 21 32 70 16 0D CD 0.!BP..- 7080 42 01 41 42 43 44 45 23 B.ABCDE. 7088 2E 2E 35 36 37 38 39 CD ..56789- 7090 0C 01
MEMORY ASSEMBLER MCS-80 PAGE 01 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TITLE 'DEMO PROGRAM V2.0 21.1.85' ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;DEKLARACE CO EQU 109H CI EQU CO-6 SPACE EQU ' ' T EQU 1234H X EQU 0FEDBH ; BEGIN EQU 5000H NEXX EQU 1000 ;CHYBA (NEXT) ; ORG BEGIN ;START ;------------------------------- ; 5000 AF BEG: XRA A 5001 37 M#BEG: STC ;DVOJI DEKLARACE 5002 3E 41 MVI A,'A' 5004 21 00 50 LXI H,BEG 5007 3C INR A 5008 04 INR B 5009 2C INR L 500A 2E 4C MVI L,'L' 500C 23 INX H 5O0D 1F RAR 500E 0F RRC 500F 2C INR L 5010 CD 87 50 CALL DUMMY ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IF 0 DB 'PAVEL' CIX EQU 0 AAA: LDA AAA ELSE 5013 5A 44 45 4E 41 DB 'ZDENA' CIX EQU GFFH 5018 3A 18 50 AAA: LDA AAA ENDIF IF 1 501B 4F 2E 4B 2E DB 'O.K.' ENDIF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; CHYBY¦ ; 501F 3E 01 X# MVI A,012B 5021 3E 0C X# MVI A,12A 5023 3E 12 X# MVI A,12QH ; ; 5025 C3 00 50 JMP BEG ;//////////////////////////////// ; ZPRACOVANI OPERANDU 5028 21 34 12 LXI H,T 502B 21 A7 EC LXI H,X-T 502E C3 31 50 JMP ¤+3 MEMORY ASSEMBLER MCS-80 PAGE 02 5031 3E 20 MVI A,SPACE 5033 01 41 00 LXI B,'A' 5036 21 91 FC LXI H,X*3 5039 21 E8 03 LXI H,3000/3 503C 11 E8 03 LXI D,1000 503F 3E FE MVI A,HIGH X 5041 06 DB MVI B,LOW X 5043 16 FE MVI D,X SHR 8 5045 IE Ob MVI E,X AND 0FH 5047 3E 81 MVI A,1 OR 128 5049 OE 09 MVI C,1010B XOR 3H 504B C3 4B 50 L# JMP NEXT ;///////////////////////////////// ; ZPRACOVANI PSEUDOINSTRUKCI COO EQU 1 504E CALL CO 5051 CALL COO DS 2 5056 01 02 03 04 05 06 07 08 09 00 DB 1,2,3,4,5,6,7,8,9,0 ;10*BYTE ..MAX 5060 01 00 02 00 03 00 04 00 05 00 DW 1,2,3,4,5 ;5*LABEL 506A 50 52 45 4B 4C 41 44 20 41 53 43 49 49 DB 'PREKLAD ASCII' ;///////////////////////////////// ; ; ZPRACOVANI CHYB 5077 78 U# MOV A,1 5078 3E 78 L# MVI A,W U# LXI C,1 507A CD 0# CALL 507B 01 0# LXI 507C 21 0# LXI H 507D 21 0# LXI H, 507E 21 7E 50 L# LXI H,QQQQ 5081 78 U# MOV A,Y 5082 78 U# MOV A,X@ ;@ .LIST 5083 CD 03 01 CALL CI 5086 40 U#BEG M#BEG: 5087 3C DUMMY: INR A 5088 00 NOP 5089 37 STC 508A 3F CMC 5088 27 DAA 508C C9 RET ;//////////////////////////////// END ERROR(S) =17 MEMORY ASSEMBLER MCS-80 PASS=S CO 0109 CI 0103 SPACE 0020 T 1234 X FEDB BEGIN 5000 NEXX 03E8 BEG 5000 CIX 00FF AAA 5018 COO 0001 DUMMY 5087 MEMORY ASSEMBLER MCS-80 PASS=<CR>...KONEC
VYDÁNO PRO POTŘEBU UŽIVATELŮ POČÍTAČE SAPI-1 název :KAZETOPÁSKOVÉ PROGRAMOVÉ VYBAVENÍ zpracoval :TESLA ELTOS DIZ 1985 schválil :TESLA ELTOS DIZ 1985 vydal :TESLA ELTOS DIZ 1985 náklad : 1 500 výtisků rok:1985
SAPI-1 TESLA ELTOS OBOROVÝ PODNIK DIZ I-------------------------------------------------------I I VÝVOJ: TESIA-ELSTROJ, KÚO, KONCERN ES I I VÝROBA: TESLA LIBEREC k. p. I I DODÁVÁ: TESLA ELTOS, I I DODAVATELSKO INŽENÝRSKÝ ZÁVOD I I poštovní schránka 27, pošta 45, 145 00 PRAHA 4 I I-------------------------------------------------------I (C) TESIA ELTOS 1985 TISK PHAHA
ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace